diff --git a/.eslintrc.json b/.eslintrc.json index 91110e9bb5..6799ceae8e 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,7 @@ { "extends": "./node_modules/gts/", "rules": { + "@typescript-eslint/no-explicit-any": "off", "prettier/prettier": [ "error", { diff --git a/docs/reference/application.md b/docs/reference/application.md index 39656e5366..981b9f5de2 100644 --- a/docs/reference/application.md +++ b/docs/reference/application.md @@ -9,18 +9,21 @@ | `IN_STOCK_WAIT_TIME` | Time to wait between requests to the same link if it has that card in stock. In seconds, default: `0` | | `LOG_LEVEL` | [Logging levels](https://github.com/winstonjs/winston#logging-levels). Debugging related, default: `info` | | `LOW_BANDWIDTH` | Blocks images/fonts to reduce traffic. Disables ad blocker, default: `false` | -| `OPEN_BROWSER` | Toggle for whether or not the browser should open when item is found. Default: `true` | -| `PAGE_BACKOFF_MIN` | Minimum backoff time between retrying requests for the same store when a forbidden response is received. Default: `10000` | -| `PAGE_BACKOFF_MAX` | Maximum backoff time between retrying requests for the same store when a forbidden response is received. Default: `3600000` | +| `NVIDIA_ADD_TO_CART_ATTEMPTS` | Maximum number of attempts add an item to card in the Nvidia storefront, default: `10` | +| `NVIDIA_SESSION_TTL` | Maximum session length on the Nvidia storefront in ms, default: `60000` | +| `OPEN_BROWSER` | Toggle for whether or not the browser should open when item is found, default: `true` | +| `PAGE_BACKOFF_MIN` | Minimum backoff time between retrying requests for the same store when a forbidden response is received, default: `10000` | +| `PAGE_BACKOFF_MAX` | Maximum backoff time between retrying requests for the same store when a forbidden response is received, default: `3600000` | | `PAGE_SLEEP_MIN` | Minimum sleep time between queries of the same product page. In milliseconds, default: `5000` | | `PAGE_SLEEP_MAX` | Maximum sleep time between queries of the same product page. In milliseconds, default: `10000` | | `PAGE_TIMEOUT` | Navigation Timeout in milliseconds. `0` for infinite, default: `30000` | -| `PROXY_PROTOCOL` | Protocol of proxy server, such as `socks5`. Default: `http` | +| `PROXY_PROTOCOL` | Protocol of proxy server, such as `socks5`, default: `http` | | `PROXY_ADDRESS` | IP Address or fqdn of proxy server | -| `PROXY_PORT` | TCP Port number on which the proxy is listening for connections. Default: `80` | +| `PROXY_PORT` | TCP Port number on which the proxy is listening for connections, default: `80` | | `RESTART_TIME` | Restarts chrome after defined milliseconds. `0` for never, default: `0` | -| `SCREENSHOT` | Capture screenshot of page if a card is found. Default: `true` | -| `SCREENSHOT_DIR` | The directory for saving the screenshots. Default: `screenshots` | +| `SCREENSHOT` | Capture screenshot of page if a card is found, default: `true` | +| `SCREENSHOT_DIR` | The directory for saving the screenshots, default: `screenshots` | +| `USER_AGENT` | Custom user agent used for requests | | `WEB_PORT` | Starts a webserver to be able to control the bot while it is running. Setting this value starts this service. | ???+ info diff --git a/docs/reference/filter.md b/docs/reference/filter.md index 41b143eab5..3bb3ebbd65 100644 --- a/docs/reference/filter.md +++ b/docs/reference/filter.md @@ -2,19 +2,21 @@ | Environment variable | Description | |:---:|---| +| `MAX_PRICE_SERIES_3050` | Maximum price allowed for a match, applies 3050 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | | `MAX_PRICE_SERIES_3060` | Maximum price allowed for a match, applies 3060 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | | `MAX_PRICE_SERIES_3060TI` | Maximum price allowed for a match, applies 3060 Ti series cards (does not apply to these sites: Nvidia, Asus, EVGA) | | `MAX_PRICE_SERIES_3070` | Maximum price allowed for a match, applies 3070 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | | `MAX_PRICE_SERIES_3080` | Maximum price allowed for a match, applies 3080 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | | `MAX_PRICE_SERIES_3080TI` | Maximum price allowed for a match, applies 3080 Ti series cards (does not apply to these sites: Nvidia, Asus, EVGA) | | `MAX_PRICE_SERIES_3090` | Maximum price allowed for a match, applies 3090 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | -| `MAX_PRICE_SERIES_4080_12G` | Maximum price allowed for a match, applies 4080 12G series cards (does not apply to these sites: Nvidia, Asus, EVGA) | | `MAX_PRICE_SERIES_4080_16G` | Maximum price allowed for a match, applies 4080 16G series cards (does not apply to these sites: Nvidia, Asus, EVGA) | | `MAX_PRICE_SERIES_4090` | Maximum price allowed for a match, applies 4090 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | | `MAX_PRICE_SERIES_5070` | Maximum price allowed for a match, applies 5070 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | -| `MAX_PRICE_SERIES_5070TI` | Maximum price allowed for a match, applies 5070Ti series cards (does not apply to these sites: Nvidia, Asus, EVGA) | +| `MAX_PRICE_SERIES_5070TI` | Maximum price allowed for a match, applies 5070 Ti series cards (does not apply to these sites: Nvidia, Asus, EVGA) | | `MAX_PRICE_SERIES_5080` | Maximum price allowed for a match, applies 5080 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | -| `MAX_PRICE_SERIES_5090` | Maximum price allowed for a match, applies 5090 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | +| `MAX_PRICE_SERIES_5090` | Maximum price allowed for a match, applies 5080 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | +| `MAX_PRICE_SERIES_A3_MATX` | Maximum price allowed for a match, applies to Lian Li A3-mATX Mini Tower Case | +| `MAX_PRICE_SERIES_ARC` | Maximum price allowed for a match, applies to Intel Arc B580 | | `MAX_PRICE_SERIES_CORSAIR_SF` | Maximum price allowed for a match, applies to Corsair PSUs | | `MAX_PRICE_SERIES_DARKHERO` | Maximum price allowed for a match, applies to ASUS Dark Hero motherboards | | `MAX_PRICE_SERIES_RYZEN5600` | Maximum price allowed for a match, applies AMD 5600 series cpus | @@ -26,7 +28,8 @@ | `MAX_PRICE_SERIES_RX6800XT` | Maximum price allowed for a match,applies AMD RX 6800 XT | | `MAX_PRICE_SERIES_RX6900XT` | Maximum price allowed for a match, applies AMD RX 6900 XT | | `MAX_PRICE_SERIES_RYZEN7800X3D` | Maximum price allowed for a match, applies AMD 7800X3D | -| `MAX_PRICE_SERIES_RYZEN9800XX3D` | Maximum price allowed for a match, applies AMD 9800XX3D | +| `MAX_PRICE_SERIES_RYZEN7950X` | Maximum price allowed for a match, applies to AMD Ryzen 9 7950X CPU | +| `MAX_PRICE_SERIES_RYZEN9800X3D` | Maximum price allowed for a match, applies AMD 9800X3D | | `MAX_PRICE_SERIES_RYZEN9600X` | Maximum price allowed for a match, applies AMD RX 9600X | | `MAX_PRICE_SERIES_RYZEN9700X` | Maximum price allowed for a match, applies AMD RX 9700X | | `MAX_PRICE_SERIES_RYZEN9900X` | Maximum price allowed for a match, applies AMD RX 9900X | @@ -41,6 +44,7 @@ | `SHOW_ONLY_MODELS` | Filter to show specified models. Comma separated, can include series. E.g.: `founders edition:3090,rog strix` | | `SHOW_ONLY_SERIES` | Filter to show specified series. Comma separated, e.g.: `3080,ryzen5900` | | `STORES` | [Supported stores](#supported-stores) you want to be scraped. Default: `amazon,bestbuy`. Comma separated, can include `PAGE_SLEEP_MIN` and `PAGE_SLEEP_MAX` values. E.g.: `amazon:10000:30000,bestbuy,newegg:50000:80000`. | +| `SHOW_ONLY_COUNTRY` | Filter to show specific country stores. Comma separated, e.g.: `US,CA` | ???+ note For `MAX_PRICE_SERIES_*` variables: Use whole numbers only (no currency symbol is required). Avoid using any commas or decimal points. Example: `1234`. Merchandise found above this price will be skipped. @@ -52,165 +56,171 @@ Used with the `STORES` variable. | Stores | Country | Environment variable | |---|---|---| | AComPC | DE | `acompc` | -| Adorama | US | `adorama`| -| Akinformatica | IT | `akinformatica`| -| Allneeds | AU | `allneeds`| -| Alternate | DE | `alternate-de`| -| Alternate | NL | `alternate-nl`| -| Amazon | US | `amazon`| -| Amazon | CA | `amazon-ca`| -| Amazon | DE | `amazon-de`| -| Amazon Warehouse | DE | `amazon-de-warehouse`| -| Amazon | ES | `amazon-es`| -| Amazon | FR | `amazon-fr`| -| Amazon | IT | `amazon-it`| -| Amazon | NL | `amazon-nl`| -| Amazon | SG | `amazon-sg`| -| Amazon | UK | `amazon-uk`| -| AMD | US | `amd`| -| AMD | AT | `amd-at`| -| AMD | BE | `amd-be`| -| AMD | CA | `amd-ca`| -| AMD | DE | `amd-de`| -| AMD | IT | `amd-it`| -| AMD | NL | `amd-nl`| -| AMD | UK | `amd-uk`| -| AntOnline | US | `antonline`| -| AO | UK | `ao`| -| Argos | UK | `argos`| -| Argos | IE | `argos-ie`| -| Aria PC | UK | `aria`| -| ARLT | DE | `arlt`| +| Adorama | US | `adorama` | +| Akinformatica | IT | `akinformatica` | +| Allneeds | AU | `allneeds` | +| Alternate | DE | `alternate-de` | +| Alternate | FR | `alternate-fr` | +| Alternate | NL | `alternate-nl` | +| Amazon | US | `amazon` | +| Amazon | CA | `amazon-ca` | +| Amazon | DE | `amazon-de` | +| Amazon Warehouse | DE | `amazon-de-warehouse` | +| Amazon | ES | `amazon-es` | +| Amazon | FR | `amazon-fr` | +| Amazon | IT | `amazon-it` | +| Amazon | NL | `amazon-nl` | +| Amazon | SG | `amazon-sg` | +| Amazon | UK | `amazon-uk` | +| AMD | US | `amd` | +| AMD | AT | `amd-at` | +| AMD | BE | `amd-be` | +| AMD | CA | `amd-ca` | +| AMD | DE | `amd-de` | +| AMD | IT | `amd-it` | +| AMD | NL | `amd-nl` | +| AMD | UK | `amd-uk` | +| AntOnline | US | `antonline` | +| AO | UK | `ao` | +| Argos | UK | `argos` | +| Argos | IE | `argos-ie` | +| Aria PC | UK | `aria` | +| ARLT | DE | `arlt` | | ASUS | US | `asus` | | ASUS | DE | `asus-de` | | ASUS | ES | `asus-es` | | AWD-IT | UK | `awd` | -| Azerty | NL | `azerty`| -| B&H | US | `bandh`| -| Best Buy | US | `bestbuy`| -| Best Buy | CA | `bestbuy-ca`| -| Box | UK | `box`| -| BPCTech | AU | `bpctech`| -| BPM-Power | IT | `bpm-power`| -| BT | UK | `bt`| +| Azerty | NL | `azerty` | +| B&H | US | `bandh` | +| Best Buy | US | `bestbuy` | +| Best Buy | CA | `bestbuy-ca` | +| Box | UK | `box` | +| BPCTech | AU | `bpctech` | +| BPM-Power | IT | `bpm-power` | +| BT | UK | `bt` | | CanadaComputers | CA | `canadacomputers` | -| Caseking | DE | `caseking`| -| CCL | UK | `ccl`| -| Centrecom | AU | `centrecom`| -| Comet | IT | `comet`| -| ComputerAlliance | AU | `computeralliance`| +| Caseking | DE | `caseking` | +| CCL | UK | `ccl` | +| Centrecom | AU | `centrecom` | +| Comet | IT | `comet` | +| ComputerAlliance | AU | `computeralliance` | | Computeruniverse | DE | `computeruniverse` | -| Coolblue | NL | `coolblue`| -| Coolmod | ES | `coolmod`| -| Corsair | US | `corsair`| -| Corsair | UK | `corsair-uk`| -| CPL | AU | `cpl`| -| Currys | UK | `currys`| +| Coolblue | NL | `coolblue` | +| Coolmod | ES | `coolmod` | +| Corsair | US | `corsair` | +| Corsair | UK | `corsair-uk` | +| CPL | AU | `cpl` | +| Currys | UK | `currys` | | Cyberport | DE | `cyberport` | | Cyberport | AT | `cyberport-at` | -| DComp | AU | `dcomp`| +| DComp | AU | `dcomp` | | Drako | IT | `drako` | | DustinHome | NO | `dustinhome-no` | -| eBuyer | UK | `ebuyer`| -| El Corte Inglés | ES | `elcorteingles`| -| Eletronicamente | ES | `eletronicamente`| -| Elkjop | NO | `elkjop`| -| ePrice | IT | `eprice`| -| Equippr | DE | `equippr`| -| Euronics | IT | `euronics`| -| Euronics | DE | `euronics-de`| -| Evatech | AU | `evatech`| -| EVGA | US | `evga`| -| EVGA | EU | `evga-eu`| -| Expert | DE | `expert`| -| Extremmedia | ES | `extremmedia`| -| Futurex | DE | `futurex`| -| Galaxus | DE | `galaxus`| -| Game | ES | `game-es`| -| Game | UK | `game`| -| Gamestop | US | `gamestop`| -| Gamestop | CA | `gamestop-ca`| -| Gamestop | DE | `gamestop-de`| -| Gamestop | IE | `gamestop-ie`| -| Gamestop | IT | `gamestop-it`| -| Globaldata | PT | `globaldata`| +| eBuyer | UK | `ebuyer` | +| El Corte Inglés | ES | `elcorteingles` | +| Eletronicamente | ES | `eletronicamente` | +| Elkjop | NO | `elkjop` | +| ePrice | IT | `eprice` | +| Equippr | DE | `equippr` | +| Euronics | IT | `euronics` | +| Euronics | DE | `euronics-de` | +| Evatech | AU | `evatech` | +| EVGA | US | `evga` | +| EVGA | EU | `evga-eu` | +| Expert | DE | `expert` | +| Extremmedia | ES | `extremmedia` | +| Futurex | DE | `futurex` | +| Galaxus | DE | `galaxus` | +| Game | ES | `game-es` | +| Game | UK | `game` | +| Gamestop | US | `gamestop` | +| Gamestop | CA | `gamestop-ca` | +| Gamestop | DE | `gamestop-de` | +| Gamestop | IE | `gamestop-ie` | +| Gamestop | IT | `gamestop-it` | +| Globaldata | PT | `globaldata` | | Hardware Planet | IT | | `hardware-planet` | -| HarrisTechnology | AU | `harristechnology`| +| HarrisTechnology | AU | `harristechnology` | | Harvey Normans | IE | `harveynorman-ie` | -| iGame Computer | AU | `igame-computer`| -| John Lewis | UK | `johnlewis`| -| Kabum | BR | `kabum`| -| Komplett | NO | `komplett-no`| -| Landmark Computers | AU | `landmark-computers`| -| Ldlc | FR | `ldlc`| -| Ldlc | ES | `ldlc-es`| -| Ldlc | IT | `ldlc-it`| -| Mediamarkt | DE | `mediamarkt`| -| Mediamarkt | AT | `mediamarkt-at`| -| Medimax | DE | `medimax`| -| Megekko | NL | `megekko`| -| MemoryExpress | CA | `memoryexpress`| +| iGame Computer | AU | `igame-computer` | +| John Lewis | UK | `johnlewis` | +| Kabum | BR | `kabum` | +| Komplett | NO | `komplett-no` | +| Landmark Computers | AU | `landmark-computers` | +| Ldlc | FR | `ldlc` | +| Ldlc | ES | `ldlc-es` | +| Ldlc | IT | `ldlc-it` | +| Mediamarkt | DE | `mediamarkt` | +| Mediamarkt | AT | `mediamarkt-at` | +| Medimax | DE | `medimax` | +| Megekko | NL | `megekko` | +| MemoryExpress | CA | `memoryexpress` | | Materiel | FR | `materiel` | -| Micro Center | US | `microcenter`| -| MightyApe | NZ | `mightyape`| +| Micro Center | US | `microcenter` | +| Microsoft | US | `microsoft` | +| Microsoft | CA | `microsoft-ca` | +| MightyApe | NZ | `mightyape` | | Mindfactory | DE | `mindfactory` | -| MSY | AU | `msy`| -| Multicom | NO | `multicom`| -| Mwave | AU | `mwave`| -| Neobyte | ES | `neobyte`| -| Netonnet | NO | `netonnet-no`| -| Newegg | US | `newegg`| -| Newegg | CA | `newegg-ca`| -| Newegg | SG | `newegg-sg`| -| NoelLeeming | NZ | `noelleeming`| -| Notebooksbilliger | DE |`notebooksbilliger`| -| Novatech | UK | `novatech`| -| Novo Atalho | PT | `novoatalho`| +| MSY | AU | `msy` | +| Multicom | NO | `multicom` | +| Mwave | AU | `mwave` | +| Neobyte | ES | `neobyte` | +| Netonnet | NO | `netonnet-no` | +| Newegg | US | `newegg` | +| Newegg | CA | `newegg-ca` | +| Newegg | SG | `newegg-sg` | +| NoelLeeming | NZ | `noelleeming` | +| Notebooksbilliger | DE |`notebooksbilliger` | +| Novatech | UK | `novatech` | +| Novo Atalho | PT | `novoatalho` | | Nvidia | EU/UK | [See below](#nvidia-store-reference) | -| Office Depot | US | `officedepot`| -| Ollo | IT | `ollo`| -| Opirata | ES | `opirata`| -| Otto | DE | `otto`| -| Overclockers | UK | `overclockers`| -| PBTech | AU | `pbtech`| -| PCByte | AU | `pcbyte`| -| PCCG | AU | `pccg`| -| PCComponentes | ES | `pccomponentes`| -| PCDiga | PT | `pcdiga`| +| Office Depot | US | `officedepot` | +| Ollo | IT | `ollo` | +| Opirata | ES | `opirata` | +| Otto | DE | `otto` | +| Overclockers | UK | `overclockers` | +| PBTech | AU | `pbtech` | +| PCByte | AU | `pcbyte` | +| PCCG | AU | `pccg` | +| PCComponentes | ES | `pccomponentes` | +| PCDiga | PT | `pcdiga` | | PCKing | DE | `pcking` | -| PlayStation | US | `playstation`| -| PNY | US | `pny`| -| Power | NO | `power-no`| -| Proshop | DE | `proshop-de`| -| Proshop | DK | `proshop-dk`| -| Proshop | NO | `proshop-no`| -| Rosman | AU | `rosman`| -| Rosman-Melb | AU | `rosman-melb`| -| Saturn | DE | `saturn`| -| Save On It | AU | `saveonit`| -| Scan | UK | `scan`| -| Scorptec | AU | `scorptec`| -| ShopTo | UK | `shopto`| -| Siabyte | ES | `siabyte`| -| Smyths Toys | UK | `smythstoys`| -| Smyths Toys | IE | `smythstoys-ie`| -| Spielegrotte | DE | `spielegrotte`| -| Storm Computers | AU | `storm-computer`| -| Target | US | `target`| -| Tesco | IE | `tesco-ie`| -| TheWarehouse | NZ | `thewarehouse`| -| TopAchat | GR | `topachat`| +| PlayStation | US | `playstation` | +| PNY | US | `pny` | +| Power | NO | `power-no` | +| Proshop | DE | `proshop-de` | +| Proshop | DK | `proshop-dk` | +| Proshop | NO | `proshop-no` | +| Rosman | AU | `rosman` | +| Rosman-Melb | AU | `rosman-melb` | +| Saturn | DE | `saturn` | +| Save On It | AU | `saveonit` | +| Scan | UK | `scan` | +| Scorptec | AU | `scorptec` | +| ShopTo | UK | `shopto` | +| Siabyte | ES | `siabyte` | +| Smyths Toys | UK | `smythstoys` | +| Smyths Toys | IE | `smythstoys-ie` | +| Spielegrotte | DE | `spielegrotte` | +| Storm Computers | AU | `storm-computer` | +| Target | US | `target` | +| Tesco | IE | `tesco-ie` | +| TheWarehouse | NZ | `thewarehouse` | +| TopAchat | GR | `topachat` | | Toys R Us | US | `toysrus` | -| Ultimainformatica | ES | `ultimainformatica`| -| Umart | AU | `umart`| -| Unieuro | IT | `unieuro`| -| Very | UK | `very`| +| Ultimainformatica | ES | `ultimainformatica` | +| Umart | AU | `umart` | +| Unieuro | IT | `unieuro` | +| Very | UK | `very` | +| Versus Gamers | ES | `vsgamers` | | Vuugo | CA | `vuugo` | -| Walmart | US | `walmart`| -| Walmart | CA | `walmart-ca`| -| Wells Technology | AU | `wellstechnology`| -| Wipoid | ES | `wipoid`| -| Zotac | US | `zotac`| +| Walmart | US | `walmart` | +| Walmart | CA | `walmart-ca` | +| Wells Technology | AU | `wellstechnology` | +| Wipoid | ES | `wipoid` | +| Xbox | US | `xbox` | +| Xtremmedia | ES | `xtremmedia` | +| Zotac | US | `zotac` | ### Micro Center stores @@ -235,25 +245,34 @@ Used with the `SHOW_ONLY_BRANDS` and `SHOW_ONLY_MODELS` variables. | Brand | Model | |:---:|---| -| `amd` | `5600x`, `5800x`, `5900x`, `5950x`, `amd reference` | -| `asus` | `crosshair viii`, `dual`, `dual oc`, `ekwb`, `strix`, `strix oc`, `strix white`, `tuf`, `tuf oc` | -| `corsair` | `750 platinum`, `600 platinum`, `600 gold` | -| `colorful` | `igame advanced oc`, `igame vulcan oc` | -| `evga` | `ftw3`, `ftw3 black`, `ftw3 ultra`, `ftw3 ultra hybrid`, `ftw3 ultra hydro copper`, `xc3`, `xc black`, `xc gaming`, `xc3 black`, `xc3 ultra`, `xc3 ultra hybrid` | -| `gainward` | `phantom gs`, `phoenix`, `phoenix gs`, `phoenix gs oc`, `ghost` | -| `gigabyte` | `aorus master`, `aorus xtreme`, `aorus xtreme waterforce`, `aorus xtreme waterforce wb`, `eagle`, `eagle oc`, `gaming`, `gaming oc`, `gaming oc pro`, `turbo`, `vision`, `vision oc` | -| `galax` | `sg`, `sg oc` | -| `inno3d` | `gaming x3`, `ichill x3`, `ichill x4`, `ichill frostbite`, `twin x2`, `twin x2 oc` | -| `kfa2` | `sg`, `sg oc` | +| `amd` | `5600x`, `5800x`, `5900x`, `5950x`, `7800x3d`, `7950x`, `9600x`, `9700x`, `9800x3d`, `9900x`, `9950x`, `amd reference`, `tuf oc` | +| `asrock` | `amd reference`, `challenger`, `challenger oc`, `challenger pro`, `challenger pro oc`, `phantom gaming`, `phantom gaming oc`, `taichi`, `taichi x oc` | +| `asus` | `amd reference`, `astral`, `astral oc`, `crosshair viii`, `dual`, `dual fan`, `dual mini`, `dual mini oc`, `dual oc`, `ekwb`, `gaming`, `gaming oc`, `ko`, `ko oc`, `phoenix 8G (LHR)`, `prime`, `prime oc`, `strix`, `strix lc`, `strix oc`, `strix oc lc`, `strix oc white`, `strix white`, `suprim x`, `tuf`, `tuf oc`, `turbo` | +| `ax` | `x3w` | +| `colorful` | `battle-ax`, `igame advanced`, `igame advanced oc`, `igame ultra oc`, `igame vulcan oc` | +| `corsair` | `600 gold`, `600 platinum`, `750 platinum` | +| `evga` | `ftw3`, `ftw3 black`, `ftw3 ultra`, `ftw3 ultra hybrid`, `ftw3 ultra hydro copper`, `gaming`, `ichill x3`, `kngpn hybrid`, `xc black`, `xc gaming`, `xc3`, `xc3 black`, `xc3 ultra`, `xc3 ultra hybrid` | +| `gainward` | `ghost`, `ghost oc`, `pegasus`, `pegasus oc`, `phantom`, `phantom gaming`, `phantom gs`, `phoenix`, `phoenix gs`, `phoenix gs oc` | +| `galax` | `sg oc` | +| `gigabyte` | `aero oc`, `amd reference`, `aorus`, `aorus box`, `aorus elite`, `aorus master`, `aorus master 24g`, `aorus master type-c`, `aorus w`, `aorus x wb`, `aorus xtreme`, `aorus xtreme waterforce`, `aorus xtreme waterforce 24g`, `aorus xtreme waterforce wb`, `eagle`, `eagle oc`, `gaming`, `gaming oc`, `gaming oc pro`, `gaming oc waterforce wb`, `gaming pro`, `gaming pro oc`, `gaming x`, `master`, `turbo`, `vision`, `vision oc`, `windforce`, `windforce oc`, `windforce v2`, `xtreme` | +| `inno3d` | `gaming x3`, `ice dragon super`, `ichill frostbite`, `ichill x2`, `ichill x3`, `ichill x3 red`, `ichill x4`, `twin x2`, `twin x2 oc`, `x3 oc` | +| `intel` | `b580` | +| `kfa2` | `dual oc`, `ex`, `ex gamer`, `ex oc`, `gaming`, `oc`, `sg`, `sg oc` | | `leadtek` | `hurricane` | -| `microsoft` | `xbox series x`, `xbox series s` | -| `msi` | `gaming x trio`, `suprim`, `suprim x`, `ventus 2x oc`, `ventus 3x`, `ventus 3x oc` | +| `lianli` | `a3 matx wd` | +| `microsoft` | `xbox series s`, `xbox series x` | +| `msi` | `amd reference`, `dual`, `gaming`, `gaming trio`, `gaming trio oc`, `gaming trio oc white`, `gaming x`, `gaming x slim`, `gaming x trio`, `gaming z trio`, `mech 2x`, `mech 2x oc`, `strix`, `suprim`, `suprim liquid soc`, `suprim liquid x`, `suprim soc`, `suprim x`, `vanguard`, `vanguard soc`, `vanguard soc launch edition`, `ventus 2X (LHR)`, `ventus 2x`, `ventus 2x oc`, `ventus 3x`, `ventus 3x oc`, `ventus 3x oc plus`, `x trio` | | `nvidia` | `founders edition` | -| `palit` | `gamerock oc`, `gaming pro`, `gaming pro oc` | -| `pny` | `dual fan`, `xlr8 epic x`, `xlr8 revel`, `xlr8 uprising` | +| `palit` | `dual`, `dual oc`, `gamerock`, `gamerock oc`, `gaming oc pro`, `gaming pro`, `gaming pro oc`, `jetstream`, `jetstream oc`, `stormx oc`, `trinity oc` | +| `pny` | `dual`, `dual fan`, `epic x`, `epic x oc`, `gaming`, `gaming verto epic-x`, `single fan`, `triple fan`, `triple fan oc`, `uprising`, `vetro`, `xlr8`, `xlr8 epic x`, `xlr8 gaming`, `xlr8 gaming uprising epic x`, `xlr8 revel`, `xlr8 revel epic x`, `xlr8 uprising`, `xlr8 verto`, `xlr8 verto epic x`, `xlr8 verto epic x oc`, `xlr8 verto oc` | +| `powercolor` | `amd reference`, `fighter`, `hellhound`, `hellhound white`, `red devil`, `red dragon` | +| `sapphire` | `amd reference`, `nitro oc`, `nitro oc se`, `nitro+`, `nitro+ oc`, `nitro+ oc se`, `nitro+ se`, `pulse`, `pulse oc` | | `sony` | `ps5 console`, `ps5 digital` | -| `xfx` | `merc`, `amd reference` | -| `zotac` | `amp holo`, `amp extreme holo`, `amp white`, `trinity`, `trinity oc`, `twin edge`, `twin edge oc`, `twin edge oc white` | +| `sparkle` | `b580` | +| `test:brand` | `test:model` | +| `ubiquiti` | `dream machine`, `dream machine pro`, `dream router`, `g4 doorbell pro`, `network video recorder`, `network video recorder pro` | +| `xfx` | `amd reference`, `merc`, `merc core`, `merc ultra`, `qick`, `qick ultra`, `swft` | +| `zotac` | `amp airo`, `amp extreme airo`, `amp extreme holo`, `amp extreme infinity`, `amp holo`, `amp white`, `gaming`, `solid`, `solid oc`, `trinity`, `trinity oc`, `trinity oc lhr`, `twin edge`, `twin edge oc`, `twin edge oc white` | ## Supported series @@ -261,27 +280,47 @@ Used with the `SHOW_ONLY_SERIES` variable. | Series | Value | |:---:|:---:| -| AMD Ryzen 5600x | `ryzen5600` | -| AMD Ryzen 5800x | `ryzen5800` | -| AMD Ryzen 5900x | `ryzen5900` | -| AMD Ryzen 5950x | `ryzen5950` | | AMD RX 6700XT | `rx6700xt` | | AMD RX 6800 | `rx6800` | | AMD RX 6800XT | `rx6800xt` | | AMD RX 6900XT | `rx6900xt` | +| AMD Ryzen 5600X | `ryzen5600` | +| AMD Ryzen 5800X | `ryzen5800` | +| AMD Ryzen 5900X | `ryzen5900` | +| AMD Ryzen 5950X | `ryzen5950` | +| AMD Ryzen 7800X3D | `ryzen7800x3d` | +| AMD Ryzen 7950X | `ryzen7950x` | +| AMD Ryzen 9600X | `ryzen9600x` | +| AMD Ryzen 9700X | `ryzen9700x` | +| AMD Ryzen 9800X3D | `ryzen9800x3d` | +| AMD Ryzen 9900X | `ryzen9900x` | +| AMD Ryzen 9950X | `ryzen9950x` | +| Corsair SFX PSU | `sf` | +| Crosshair VIII | `darkhero` | +| Intel Arc B580 | `arc` | +| Lian Li A3-mATX | `a3-matx` | +| Nvidia RTX 3050 | `3050` | | Nvidia RTX 3060 | `3060` | | Nvidia RTX 3060 Ti | `3060ti` | | Nvidia RTX 3070 | `3070` | +| Nvidia RTX 3070 Ti | `3070ti` | | Nvidia RTX 3080 | `3080` | | Nvidia RTX 3080 Ti | `3080ti` | | Nvidia RTX 3090 | `3090` | -| Nvidia RTX 4080 12G | `4080-12g` | | Nvidia RTX 4080 16G | `4080-16g` | | Nvidia RTX 4090 | `4090` | -| Corsair SFX PSU | `sf` | -| Crosshair VIII | `darkhero` | +| Nvidia RTX 5070 | `5070` | +| Nvidia RTX 5070 Ti | `5070ti` | +| Nvidia RTX 5080 | `5080` | +| Nvidia RTX 5090 | `5090` | | Sony PS5 | `sonyps5c` | | Sony PS5 Digital Edition | `sonyps5de` | +| Ubiquiti G4 Doorbell Pro | `g4-doorbell-pro` | +| Unifi Dream Machine | `udm-us` | +| Unifi Dream Machine Pro | `udm-pro` | +| Unifi Dream Router | `udm-us` | +| Unifi Network Video Recorder | `unvr` | +| Unifi Network Video Recorder Pro | `unvr-pro` | | Xbox Series S | `xboxss` | | Xbox Series X | `xboxsx` | @@ -295,7 +334,7 @@ Used with the `SHOW_ONLY_SERIES` variable. | Country | Store | Retailer |:---:|:---:|:---:| -| Austria | `nvidia-de`| NBB | +| Austria | `nvidia-de` | NBB | | Belgium | `nvidia-fr` | LDLC | | France | `nvidia-fr` | LDLC | | Germany | `nvidia-de` | NBB | diff --git a/docs/reference/notification.md b/docs/reference/notification.md index 1cf43649c6..ea83d7fb4c 100644 --- a/docs/reference/notification.md +++ b/docs/reference/notification.md @@ -32,29 +32,46 @@ Refer to https://github.com/node-apn/node-apn for config options. | Environment variable | Description | |:---:|---| | `DISCORD_NOTIFY_GROUP` | Discord group you would like to notify | +| `DISCORD_NOTIFY_GROUP_3050` | Discord group to notify on 3050 stock | | `DISCORD_NOTIFY_GROUP_3060` | Discord group to notify on 3060 stock | | `DISCORD_NOTIFY_GROUP_3060TI` | Discord group to notify on 3060 Ti stock | | `DISCORD_NOTIFY_GROUP_3070` | Discord group to notify on 3070 stock | +| `DISCORD_NOTIFY_GROUP_3070TI` | Discord group to notify on 3070 Ti stock | | `DISCORD_NOTIFY_GROUP_3080` | Discord group to notify on 3080 stock | | `DISCORD_NOTIFY_GROUP_3080TI` | Discord group to notify on 3080 Ti stock | | `DISCORD_NOTIFY_GROUP_3090` | Discord group to notify on 3090 stock | -| `DISCORD_NOTIFY_GROUP_4080_12G` | Discord group to notify on 4080 12G stock | | `DISCORD_NOTIFY_GROUP_4080_16G` | Discord group to notify on 4080 16G stock | | `DISCORD_NOTIFY_GROUP_4090` | Discord group to notify on 4090 stock | | `DISCORD_NOTIFY_GROUP_5070` | Discord group to notify on 5070 stock | | `DISCORD_NOTIFY_GROUP_5070TI` | Discord group to notify on 5070 Ti stock | | `DISCORD_NOTIFY_GROUP_5080` | Discord group to notify on 5080 stock | | `DISCORD_NOTIFY_GROUP_5090` | Discord group to notify on 5090 stock | +| `DISCORD_NOTIFY_GROUP_A3MATX` | Discord group to notify on Lian Li A3 mATX Case stock | +| `DISCORD_NOTIFY_GROUP_ARC` | Discord group to notify on Intel Arc B580 stock | +| `DISCORD_NOTIFY_GROUP_CORSAIR_SF` | Discord group to notify on Corsair SF stock | +| `DISCORD_NOTIFY_GROUP_DARKHERO` | Discord group to notify on Dark Hero stock | +| `DISCORD_NOTIFY_GROUP_RX6700XT` | Discord group to notify on RX 6700XT stock | +| `DISCORD_NOTIFY_GROUP_RX6800` | Discord group to notify on RX 6800 stock | +| `DISCORD_NOTIFY_GROUP_RX6800XT` | Discord group to notify on RX 6800XT stock | +| `DISCORD_NOTIFY_GROUP_RX6900XT` | Discord group to notify on RX 6900XT stock | | `DISCORD_NOTIFY_GROUP_RYZEN5600` | Discord group to notify on 5600X stock | +| `DISCORD_NOTIFY_GROUP_RYZEN5600` | Discord group to notify on Ryzen 5600X stock | | `DISCORD_NOTIFY_GROUP_RYZEN5800` | Discord group to notify on 5800X stock | +| `DISCORD_NOTIFY_GROUP_RYZEN5800` | Discord group to notify on Ryzen 5800X stock | | `DISCORD_NOTIFY_GROUP_RYZEN5900` | Discord group to notify on 5900X stock | +| `DISCORD_NOTIFY_GROUP_RYZEN5900` | Discord group to notify on Ryzen 5900X stock | | `DISCORD_NOTIFY_GROUP_RYZEN5950` | Discord group to notify on 5950X stock | -| `DISCORD_NOTIFY_GROUP_DARKHERO` | Discord group to notify on Dark Hero stock | -| `DISCORD_NOTIFY_GROUP_CORSAIR_SF` | Discord group to notify on Corsair SF stock | +| `DISCORD_NOTIFY_GROUP_RYZEN5950` | Discord group to notify on Ryzen 5950X stock | +| `DISCORD_NOTIFY_GROUP_RYZEN7800X3D` | Discord group to notify on Ryzen 7800X3D stock | +| `DISCORD_NOTIFY_GROUP_RYZEN9600X` | Discord group to notify on Ryzen 9600X stock | +| `DISCORD_NOTIFY_GROUP_RYZEN9700X` | Discord group to notify on Ryzen 9700X stock | +| `DISCORD_NOTIFY_GROUP_RYZEN9800X3D` | Discord group to notify on Ryzen 9800X3D stock | +| `DISCORD_NOTIFY_GROUP_RYZEN9900X` | Discord group to notify on Ryzen 9900X stock | +| `DISCORD_NOTIFY_GROUP_RYZEN9950X` | Discord group to notify on Ryzen 9950X stock | | `DISCORD_NOTIFY_GROUP_SONYPS5C` | Discord group to notify on Sony PS5 stock | | `DISCORD_NOTIFY_GROUP_SONYPS5DE` | Discord group to notify on Sony PS5 Digital stock | -| `DISCORD_NOTIFY_GROUP_XBOXSX` | Discord group to notify on Xbox Series X stock | | `DISCORD_NOTIFY_GROUP_XBOXSS` | Discord group to notify on Xbox Series S stock | +| `DISCORD_NOTIFY_GROUP_XBOXSX` | Discord group to notify on Xbox Series X stock | | `DISCORD_NOTIFY_GROUP_TEST` | Discord group to notify on test stock | | `DISCORD_WEB_HOOK` | Discord Web Hook URL. Can be comma separated. Use whole webhook URL | @@ -224,7 +241,7 @@ Generate all Twitter keys at [developer.twitter.com](https://developer.twitter.c | `TWITTER_CONSUMER_SECRET` | Twitter Consumer Secret | | `TWITTER_TWEET_TAGS` | List of hashtags to append to the tweet message, e.g.: `#nvidia #nvidiastock` | -## Twitch +## Twitch - TEMPORARILY DISABLED Instructions on how to set up tokens can be found at [d-fischer.github.io/twitch-chat-client/docs/examples/basic-bot](https://d-fischer.github.io/twitch-chat-client/docs/examples/basic-bot). diff --git a/dotenv-example b/dotenv-example index 96c5b54363..4a7aefc8cc 100644 --- a/dotenv-example +++ b/dotenv-example @@ -28,7 +28,6 @@ DISCORD_NOTIFY_GROUP_3070TI= DISCORD_NOTIFY_GROUP_3080= DISCORD_NOTIFY_GROUP_3080TI= DISCORD_NOTIFY_GROUP_3090= -DISCORD_NOTIFY_GROUP_4080_12G= DISCORD_NOTIFY_GROUP_4080_16G= DISCORD_NOTIFY_GROUP_4090= DISCORD_NOTIFY_GROUP_5070= @@ -73,7 +72,6 @@ MAX_PRICE_SERIES_3070TI= MAX_PRICE_SERIES_3080= MAX_PRICE_SERIES_3080TI= MAX_PRICE_SERIES_3090= -MAX_PRICE_SERIES_4080_12G= MAX_PRICE_SERIES_4080_16G= MAX_PRICE_SERIES_4090= MAX_PRICE_SERIES_5070= diff --git a/helpers/brandList.ts b/helpers/brandList.ts new file mode 100644 index 0000000000..b830bd9e12 --- /dev/null +++ b/helpers/brandList.ts @@ -0,0 +1,31 @@ +import {storeList} from '../src/store/model/index'; + +// First get the grouped and deduplicated data +const groupedByBrandAndModel = [...storeList] + .map(storeInfo => storeInfo[1]) + .flatMap(store => store.links || []) + .reduce((groupMap, link) => { + const key = `${link.brand}`; + if (!groupMap.has(key)) { + groupMap.set(key, new Set()); + } + groupMap.get(key)!.add(link.model); + return groupMap; + }, new Map>()); + +// Convert to sorted table format +const sortedEntries = [...groupedByBrandAndModel.entries()] + .sort(([brandA], [brandB]) => brandA.localeCompare(brandB)) + .map(([brand, modelSet]) => { + const sortedModels = [...modelSet].sort().join('`, `'); + return `| \`${brand}\` | \`${sortedModels}\` |`; + }); + +// Create table header and combine with data +const tableHeader = '| Brand | Model |'; +const headerSeparator = '|:---:|---|'; +const formattedTable = [tableHeader, headerSeparator, ...sortedEntries].join( + '\n' +); + +console.log(formattedTable); diff --git a/package-lock.json b/package-lock.json index 6cd0ea49ce..6e2ac4b23b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,9 +32,6 @@ "redis": "^3.1.2", "top-user-agents": "^1.0.37", "twilio": "^3.71.1", - "twitch": "^4.6.5", - "twitch-auth": "^4.6.5", - "twitch-chat-client": "^4.6.5", "twitter": "^1.7.1", "winston": "^3.3.3" }, @@ -229,162 +226,6 @@ "node": ">=12" } }, - "node_modules/@d-fischer/cache-decorators": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@d-fischer/cache-decorators/-/cache-decorators-2.1.3.tgz", - "integrity": "sha512-MlM8ipg5Exkc0Ok//sG83smBW4mLRL+/ZngfxYQ8IgxBjfpM3m2M+Y2X+a9St3EyJfYoVKHR8RWdICsU+W3gSA==", - "dependencies": { - "@d-fischer/shared-utils": "^3.0.1", - "@types/node": "^14.14.22", - "tslib": "^2.1.0" - } - }, - "node_modules/@d-fischer/cache-decorators/node_modules/@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" - }, - "node_modules/@d-fischer/connection": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@d-fischer/connection/-/connection-6.5.0.tgz", - "integrity": "sha512-C0BQjswoiEdE9C644R7Cte3WpZ5A5f61DDdCxzjr0/UKIITTLVdcBbiCxstCWjwmM/MMvIokd4raZkJjnByUog==", - "dependencies": { - "@d-fischer/isomorphic-ws": "^5.0.2", - "@d-fischer/logger": "^3.0.0", - "@d-fischer/shared-utils": "^3.0.1", - "@d-fischer/typed-event-emitter": "^3.2.2", - "@types/node": "^14.14.19", - "@types/ws": "^7.2.7", - "tslib": "^2.0.3", - "ws": "^7.4.2" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/@d-fischer/connection/node_modules/@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" - }, - "node_modules/@d-fischer/cross-fetch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@d-fischer/cross-fetch/-/cross-fetch-4.0.2.tgz", - "integrity": "sha512-3ONhZxPmgCerBi8rU9kDQktF2zMpv7gkVJuoR8I+pYeO4QWccEcqQem0i1mLBh7/y7ejR474RZb3S3EO/Sdi3A==", - "dependencies": { - "node-fetch": "2.6.1" - } - }, - "node_modules/@d-fischer/deprecate": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@d-fischer/deprecate/-/deprecate-2.0.2.tgz", - "integrity": "sha512-wlw3HwEanJFJKctwLzhfOM6LKwR70FPfGZGoKOhWBKyOPXk+3a9Cc6S9zhm6tka7xKtpmfxVIReGUwPnMbIaZg==" - }, - "node_modules/@d-fischer/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@d-fischer/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-7eoxnxcto5eVPW5h1T+ePnVFukmI9f/ZR9nlBLh1t3kyzJDUNor2C+YW9H/Terw3YnbZSDgDYrpCJCHtOtAQHw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@d-fischer/isomorphic-ws": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@d-fischer/isomorphic-ws/-/isomorphic-ws-5.0.4.tgz", - "integrity": "sha512-iNX2+kupoYtTg5snSzvqpa+rgQmnxWbngU5/uV0y4PyuJHJIoWJuTa/KPh+3ruW4UtloqhCpGe8pyb0EGjt9xQ==", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/@d-fischer/logger": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@d-fischer/logger/-/logger-3.1.0.tgz", - "integrity": "sha512-kNg9PjmiyH9DMr70mAWU+i+dy3+e1hI0lR+No5RJduQtexI247NmEzNd0pethpwm+1uA0MRf3w9QnqZ1PHKvyA==", - "dependencies": { - "detect-node": "^2.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/@d-fischer/promise.allsettled": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@d-fischer/promise.allsettled/-/promise.allsettled-2.0.2.tgz", - "integrity": "sha512-xY0vYDwJYFe22MS5ccQ50N4Mcc2nQ8J4eWE5Y354IxZwW32O5uTT6mmhFSuVF6ZrKvzHOCIrK+9WqOR6TI3tcA==", - "dependencies": { - "array.prototype.map": "^1.0.3", - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.0.2", - "iterate-value": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/@d-fischer/qs": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@d-fischer/qs/-/qs-7.0.2.tgz", - "integrity": "sha512-yAu3xDooiL+ef84Jo8nLjDjWBRk7RXk163Y6aTvRB7FauYd3spQD/dWvgT7R4CrN54Juhrrc3dMY7mc+jZGurQ==", - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/@d-fischer/rate-limiter": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@d-fischer/rate-limiter/-/rate-limiter-0.4.3.tgz", - "integrity": "sha512-KzmssPK/uKONvq1oQpmOvMoacrfTPocNlkBTf7/3VYFSvk8mbs9maeDLelbLYk0QJZjpl6o6gCEyi8s9nt/A4A==", - "dependencies": { - "@d-fischer/logger": "^3.1.0", - "@d-fischer/promise.allsettled": "^2.0.2", - "@types/node": "^12.12.5", - "tslib": "^2.0.3" - } - }, - "node_modules/@d-fischer/rate-limiter/node_modules/@types/node": { - "version": "12.20.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.16.tgz", - "integrity": "sha512-6CLxw83vQf6DKqXxMPwl8qpF8I7THFZuIwLt4TnNsumxkp1VsRZWT8txQxncT/Rl2UojTsFzWgDG4FRMwafrlA==" - }, - "node_modules/@d-fischer/shared-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@d-fischer/shared-utils/-/shared-utils-3.2.0.tgz", - "integrity": "sha512-YgAPpd0jxtchZlEqvVmL21A+/Ottx5759s6THiJs0o5+8pPIrshBlULhmfunbaidHmViuUhjxzZfqRkYl0MR9g==", - "dependencies": { - "@types/node": "^14.11.2", - "tslib": "^2.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/@d-fischer/shared-utils/node_modules/@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" - }, - "node_modules/@d-fischer/typed-event-emitter": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@d-fischer/typed-event-emitter/-/typed-event-emitter-3.2.2.tgz", - "integrity": "sha512-qT53HcoEM644EiDYMG1mz478qcys7p/mya+7d7annFlXmHCJlZ3tfKJWonDf/itKOBdjaaiRqV2goS+85dsWVA==", - "dependencies": { - "@types/node": "^14.11.2", - "tslib": "^2.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/@d-fischer/typed-event-emitter/node_modules/@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" - }, "node_modules/@dabh/diagnostics": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", @@ -889,6 +730,7 @@ "version": "2.5.12", "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "dev": true, "dependencies": { "@types/node": "*", "form-data": "^3.0.0" @@ -898,6 +740,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -1580,24 +1423,6 @@ "node": ">=8" } }, - "node_modules/array.prototype.map": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.3.tgz", - "integrity": "sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -2537,17 +2362,6 @@ "node": ">=8" } }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2572,11 +2386,6 @@ "node": ">=8" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, "node_modules/devtools-protocol": { "version": "0.0.869402", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.869402.tgz", @@ -2825,85 +2634,12 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "node_modules/es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, "node_modules/es-module-lexer": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", "dev": true }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -3934,14 +3670,6 @@ "node": ">= 0.4.0" } }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4229,57 +3957,12 @@ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, - "node_modules/ircv3": { - "version": "0.26.14", - "resolved": "https://registry.npmjs.org/ircv3/-/ircv3-0.26.14.tgz", - "integrity": "sha512-R0wiULLrl2d6Rrmw3vgyi9Cxw1KHky9/RwTkSo/Y6sXFH45EuLpVJhm9eLHFTs8EKrayq4H6FYfEN95KBC1qMQ==", - "dependencies": { - "@d-fischer/connection": "^6.4.2", - "@d-fischer/escape-string-regexp": "^5.0.0", - "@d-fischer/logger": "^3.1.0", - "@d-fischer/shared-utils": "^3.0.1", - "@d-fischer/typed-event-emitter": "^3.2.2", - "@types/node": "^14.14.19", - "klona": "^2.0.4", - "tslib": "^2.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/ircv3/node_modules/@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" - }, - "node_modules/is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4292,36 +3975,11 @@ "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -4346,17 +4004,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -4430,25 +4077,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -4470,17 +4098,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -4518,29 +4135,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -4549,31 +4143,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -4668,23 +4237,6 @@ "node": ">=8" } }, - "node_modules/iterate-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", - "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==" - }, - "node_modules/iterate-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", - "dependencies": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/jest-worker": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", @@ -4875,14 +4427,6 @@ "node": ">=0.10.0" } }, - "node_modules/klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", - "engines": { - "node": ">= 8" - } - }, "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", @@ -8702,31 +8246,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -10652,30 +10171,6 @@ "node": ">=8" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -10944,11 +10439,6 @@ "node": ">=8.0" } }, - "node_modules/top-package": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/top-package/-/top-package-1.0.1.tgz", - "integrity": "sha512-tsuhQlHSigOTTvonxHXwqSKEVSnWMh2GvpTvXa5YmoyOwL5YvU4lTd/KNVZlKM5v7gqx44UEuQxyPQEpmaIHdg==" - }, "node_modules/top-user-agents": { "version": "1.0.37", "resolved": "https://registry.npmjs.org/top-user-agents/-/top-user-agents-1.0.37.tgz", @@ -11165,100 +10655,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/twitch": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/twitch/-/twitch-4.6.5.tgz", - "integrity": "sha512-vQ9p7s9SHcUgU7Lul7pAf70p8vQXk2o9BCwkGqzZjmMsVMsoikk3MLD7n9Cjle9bIPvWuqW/MyMOw3WdrMe8yg==", - "deprecated": "This package was renamed to @twurple/api. Please check out the migration guide at https://twurple.js.org/docs/migration/", - "hasInstallScript": true, - "dependencies": { - "@d-fischer/cache-decorators": "^2.1.1", - "@d-fischer/deprecate": "^2.0.2", - "@d-fischer/logger": "^3.1.0", - "@d-fischer/rate-limiter": "^0.4.3", - "@d-fischer/shared-utils": "^3.0.1", - "top-package": "^1.0.0", - "tslib": "^2.0.3", - "twitch-api-call": "^4.6.5", - "twitch-auth": "^4.6.5", - "twitch-common": "^4.6.5" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/twitch-api-call": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/twitch-api-call/-/twitch-api-call-4.6.5.tgz", - "integrity": "sha512-a2clXthjFeuIEo+nl1pliTBkms/S+uSTgUB7xyC1FNimJooOq7cAtC6xNWBgtT1JpYdnxZjhCIHCUVtdpagp4g==", - "deprecated": "This package was renamed to @twurple/api-call. Please check out the migration guide at https://twurple.js.org/docs/migration/", - "dependencies": { - "@d-fischer/cross-fetch": "^4.0.2", - "@d-fischer/qs": "^7.0.2", - "@types/node-fetch": "^2.5.7", - "node-fetch": "^2.6.1", - "tslib": "^2.0.3", - "twitch-common": "^4.6.5" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/twitch-auth": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/twitch-auth/-/twitch-auth-4.6.5.tgz", - "integrity": "sha512-BVeW3P2coQn1aNV1sVH/Q0wbgkl1Saf/M76OSanitcA8IgvnEfCGY3iDt2Taec98eBXL+E8SN1iLHLsl3GBHvg==", - "deprecated": "This package was renamed to @twurple/auth. Please check out the migration guide at https://twurple.js.org/docs/migration/", - "dependencies": { - "@d-fischer/deprecate": "^2.0.2", - "@d-fischer/logger": "^3.1.0", - "@d-fischer/shared-utils": "^3.0.1", - "tslib": "^2.0.3", - "twitch-api-call": "^4.6.5", - "twitch-common": "^4.6.5" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/twitch-chat-client": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/twitch-chat-client/-/twitch-chat-client-4.6.5.tgz", - "integrity": "sha512-MpWSGWHvrw9DLpJZokdwzJxVOtSLApIm9JAbEsND47qxKgrxymf/1RfinSL93qRDrJhtrWwqlUXV2SpZz5YxpQ==", - "deprecated": "This package was renamed to @twurple/chat. Please check out the migration guide at https://twurple.js.org/docs/migration/", - "dependencies": { - "@d-fischer/cache-decorators": "^2.1.1", - "@d-fischer/deprecate": "^2.0.2", - "@d-fischer/logger": "^3.1.0", - "@d-fischer/rate-limiter": "^0.4.3", - "@d-fischer/shared-utils": "^3.0.1", - "@d-fischer/typed-event-emitter": "^3.2.2", - "ircv3": "^0.26.14", - "tslib": "^2.0.3", - "twitch-auth": "^4.6.5", - "twitch-common": "^4.6.5" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "twitch": "^4.4.0" - } - }, - "node_modules/twitch-common": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/twitch-common/-/twitch-common-4.6.5.tgz", - "integrity": "sha512-V8rgOIvX6bUMxBQ3BqrmvQOZOfcxsPEZR7lLNXlRsLxHAAbMGze1/SiAzhzQzH/8OV7G3qslWNGEHuQE5iWHbQ==", - "deprecated": "This package was renamed to @twurple/common. Please check out the migration guide at https://twurple.js.org/docs/migration/", - "dependencies": { - "@d-fischer/logger": "^3.1.0", - "@d-fischer/shared-utils": "^3.0.1", - "tslib": "^2.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, "node_modules/twitter": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/twitter/-/twitter-1.7.1.tgz", @@ -11327,20 +10723,6 @@ "node": ">=4.2.0" } }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/unbzip2-stream": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", @@ -11646,21 +11028,6 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -12181,146 +11548,6 @@ "@cspotcode/source-map-consumer": "0.8.0" } }, - "@d-fischer/cache-decorators": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@d-fischer/cache-decorators/-/cache-decorators-2.1.3.tgz", - "integrity": "sha512-MlM8ipg5Exkc0Ok//sG83smBW4mLRL+/ZngfxYQ8IgxBjfpM3m2M+Y2X+a9St3EyJfYoVKHR8RWdICsU+W3gSA==", - "requires": { - "@d-fischer/shared-utils": "^3.0.1", - "@types/node": "^14.14.22", - "tslib": "^2.1.0" - }, - "dependencies": { - "@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" - } - } - }, - "@d-fischer/connection": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@d-fischer/connection/-/connection-6.5.0.tgz", - "integrity": "sha512-C0BQjswoiEdE9C644R7Cte3WpZ5A5f61DDdCxzjr0/UKIITTLVdcBbiCxstCWjwmM/MMvIokd4raZkJjnByUog==", - "requires": { - "@d-fischer/isomorphic-ws": "^5.0.2", - "@d-fischer/logger": "^3.0.0", - "@d-fischer/shared-utils": "^3.0.1", - "@d-fischer/typed-event-emitter": "^3.2.2", - "@types/node": "^14.14.19", - "@types/ws": "^7.2.7", - "tslib": "^2.0.3", - "ws": "^7.4.2" - }, - "dependencies": { - "@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" - } - } - }, - "@d-fischer/cross-fetch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@d-fischer/cross-fetch/-/cross-fetch-4.0.2.tgz", - "integrity": "sha512-3ONhZxPmgCerBi8rU9kDQktF2zMpv7gkVJuoR8I+pYeO4QWccEcqQem0i1mLBh7/y7ejR474RZb3S3EO/Sdi3A==", - "requires": { - "node-fetch": "2.6.1" - } - }, - "@d-fischer/deprecate": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@d-fischer/deprecate/-/deprecate-2.0.2.tgz", - "integrity": "sha512-wlw3HwEanJFJKctwLzhfOM6LKwR70FPfGZGoKOhWBKyOPXk+3a9Cc6S9zhm6tka7xKtpmfxVIReGUwPnMbIaZg==" - }, - "@d-fischer/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@d-fischer/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-7eoxnxcto5eVPW5h1T+ePnVFukmI9f/ZR9nlBLh1t3kyzJDUNor2C+YW9H/Terw3YnbZSDgDYrpCJCHtOtAQHw==" - }, - "@d-fischer/isomorphic-ws": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@d-fischer/isomorphic-ws/-/isomorphic-ws-5.0.4.tgz", - "integrity": "sha512-iNX2+kupoYtTg5snSzvqpa+rgQmnxWbngU5/uV0y4PyuJHJIoWJuTa/KPh+3ruW4UtloqhCpGe8pyb0EGjt9xQ==", - "requires": {} - }, - "@d-fischer/logger": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@d-fischer/logger/-/logger-3.1.0.tgz", - "integrity": "sha512-kNg9PjmiyH9DMr70mAWU+i+dy3+e1hI0lR+No5RJduQtexI247NmEzNd0pethpwm+1uA0MRf3w9QnqZ1PHKvyA==", - "requires": { - "detect-node": "^2.0.4", - "tslib": "^2.0.3" - } - }, - "@d-fischer/promise.allsettled": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@d-fischer/promise.allsettled/-/promise.allsettled-2.0.2.tgz", - "integrity": "sha512-xY0vYDwJYFe22MS5ccQ50N4Mcc2nQ8J4eWE5Y354IxZwW32O5uTT6mmhFSuVF6ZrKvzHOCIrK+9WqOR6TI3tcA==", - "requires": { - "array.prototype.map": "^1.0.3", - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.0.2", - "iterate-value": "^1.0.2" - } - }, - "@d-fischer/qs": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@d-fischer/qs/-/qs-7.0.2.tgz", - "integrity": "sha512-yAu3xDooiL+ef84Jo8nLjDjWBRk7RXk163Y6aTvRB7FauYd3spQD/dWvgT7R4CrN54Juhrrc3dMY7mc+jZGurQ==" - }, - "@d-fischer/rate-limiter": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@d-fischer/rate-limiter/-/rate-limiter-0.4.3.tgz", - "integrity": "sha512-KzmssPK/uKONvq1oQpmOvMoacrfTPocNlkBTf7/3VYFSvk8mbs9maeDLelbLYk0QJZjpl6o6gCEyi8s9nt/A4A==", - "requires": { - "@d-fischer/logger": "^3.1.0", - "@d-fischer/promise.allsettled": "^2.0.2", - "@types/node": "^12.12.5", - "tslib": "^2.0.3" - }, - "dependencies": { - "@types/node": { - "version": "12.20.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.16.tgz", - "integrity": "sha512-6CLxw83vQf6DKqXxMPwl8qpF8I7THFZuIwLt4TnNsumxkp1VsRZWT8txQxncT/Rl2UojTsFzWgDG4FRMwafrlA==" - } - } - }, - "@d-fischer/shared-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@d-fischer/shared-utils/-/shared-utils-3.2.0.tgz", - "integrity": "sha512-YgAPpd0jxtchZlEqvVmL21A+/Ottx5759s6THiJs0o5+8pPIrshBlULhmfunbaidHmViuUhjxzZfqRkYl0MR9g==", - "requires": { - "@types/node": "^14.11.2", - "tslib": "^2.0.3" - }, - "dependencies": { - "@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" - } - } - }, - "@d-fischer/typed-event-emitter": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@d-fischer/typed-event-emitter/-/typed-event-emitter-3.2.2.tgz", - "integrity": "sha512-qT53HcoEM644EiDYMG1mz478qcys7p/mya+7d7annFlXmHCJlZ3tfKJWonDf/itKOBdjaaiRqV2goS+85dsWVA==", - "requires": { - "@types/node": "^14.11.2", - "tslib": "^2.0.3" - }, - "dependencies": { - "@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" - } - } - }, "@dabh/diagnostics": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", @@ -12763,6 +11990,7 @@ "version": "2.5.12", "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "dev": true, "requires": { "@types/node": "*", "form-data": "^3.0.0" @@ -12772,6 +12000,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -13318,18 +12547,6 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array.prototype.map": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.3.tgz", - "integrity": "sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.5" - } - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -14051,14 +13268,6 @@ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -14074,11 +13283,6 @@ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, "devtools-protocol": { "version": "0.0.869402", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.869402.tgz", @@ -14276,72 +13480,12 @@ "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - } - } - }, "es-module-lexer": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", "dev": true }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -15089,11 +14233,6 @@ "function-bind": "^1.1.1" } }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -15299,47 +14438,12 @@ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, - "ircv3": { - "version": "0.26.14", - "resolved": "https://registry.npmjs.org/ircv3/-/ircv3-0.26.14.tgz", - "integrity": "sha512-R0wiULLrl2d6Rrmw3vgyi9Cxw1KHky9/RwTkSo/Y6sXFH45EuLpVJhm9eLHFTs8EKrayq4H6FYfEN95KBC1qMQ==", - "requires": { - "@d-fischer/connection": "^6.4.2", - "@d-fischer/escape-string-regexp": "^5.0.0", - "@d-fischer/logger": "^3.1.0", - "@d-fischer/shared-utils": "^3.0.1", - "@d-fischer/typed-event-emitter": "^3.2.2", - "@types/node": "^14.14.19", - "klona": "^2.0.4", - "tslib": "^2.0.3" - }, - "dependencies": { - "@types/node": { - "version": "14.17.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.5.tgz", - "integrity": "sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==" - } - } - }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "requires": { - "call-bind": "^1.0.0" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -15349,24 +14453,11 @@ "binary-extensions": "^2.0.0" } }, - "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "requires": { - "call-bind": "^1.0.2" - } - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" - }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -15385,11 +14476,6 @@ "has": "^1.0.3" } }, - "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" - }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -15436,16 +14522,6 @@ "is-path-inside": "^3.0.2" } }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" - }, "is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -15458,11 +14534,6 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" - }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -15488,38 +14559,11 @@ "isobject": "^3.0.1" } }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -15593,20 +14637,6 @@ "istanbul-lib-report": "^3.0.0" } }, - "iterate-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", - "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==" - }, - "iterate-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", - "requires": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - } - }, "jest-worker": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", @@ -15770,11 +14800,6 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, - "klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==" - }, "kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", @@ -18512,22 +17537,6 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -19968,24 +18977,6 @@ "strip-ansi": "^6.0.0" } }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -20190,11 +19181,6 @@ "is-number": "^7.0.0" } }, - "top-package": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/top-package/-/top-package-1.0.1.tgz", - "integrity": "sha512-tsuhQlHSigOTTvonxHXwqSKEVSnWMh2GvpTvXa5YmoyOwL5YvU4lTd/KNVZlKM5v7gqx44UEuQxyPQEpmaIHdg==" - }, "top-user-agents": { "version": "1.0.37", "resolved": "https://registry.npmjs.org/top-user-agents/-/top-user-agents-1.0.37.tgz", @@ -20355,76 +19341,6 @@ } } }, - "twitch": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/twitch/-/twitch-4.6.5.tgz", - "integrity": "sha512-vQ9p7s9SHcUgU7Lul7pAf70p8vQXk2o9BCwkGqzZjmMsVMsoikk3MLD7n9Cjle9bIPvWuqW/MyMOw3WdrMe8yg==", - "requires": { - "@d-fischer/cache-decorators": "^2.1.1", - "@d-fischer/deprecate": "^2.0.2", - "@d-fischer/logger": "^3.1.0", - "@d-fischer/rate-limiter": "^0.4.3", - "@d-fischer/shared-utils": "^3.0.1", - "top-package": "^1.0.0", - "tslib": "^2.0.3", - "twitch-api-call": "^4.6.5", - "twitch-auth": "^4.6.5", - "twitch-common": "^4.6.5" - } - }, - "twitch-api-call": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/twitch-api-call/-/twitch-api-call-4.6.5.tgz", - "integrity": "sha512-a2clXthjFeuIEo+nl1pliTBkms/S+uSTgUB7xyC1FNimJooOq7cAtC6xNWBgtT1JpYdnxZjhCIHCUVtdpagp4g==", - "requires": { - "@d-fischer/cross-fetch": "^4.0.2", - "@d-fischer/qs": "^7.0.2", - "@types/node-fetch": "^2.5.7", - "node-fetch": "^2.6.1", - "tslib": "^2.0.3", - "twitch-common": "^4.6.5" - } - }, - "twitch-auth": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/twitch-auth/-/twitch-auth-4.6.5.tgz", - "integrity": "sha512-BVeW3P2coQn1aNV1sVH/Q0wbgkl1Saf/M76OSanitcA8IgvnEfCGY3iDt2Taec98eBXL+E8SN1iLHLsl3GBHvg==", - "requires": { - "@d-fischer/deprecate": "^2.0.2", - "@d-fischer/logger": "^3.1.0", - "@d-fischer/shared-utils": "^3.0.1", - "tslib": "^2.0.3", - "twitch-api-call": "^4.6.5", - "twitch-common": "^4.6.5" - } - }, - "twitch-chat-client": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/twitch-chat-client/-/twitch-chat-client-4.6.5.tgz", - "integrity": "sha512-MpWSGWHvrw9DLpJZokdwzJxVOtSLApIm9JAbEsND47qxKgrxymf/1RfinSL93qRDrJhtrWwqlUXV2SpZz5YxpQ==", - "requires": { - "@d-fischer/cache-decorators": "^2.1.1", - "@d-fischer/deprecate": "^2.0.2", - "@d-fischer/logger": "^3.1.0", - "@d-fischer/rate-limiter": "^0.4.3", - "@d-fischer/shared-utils": "^3.0.1", - "@d-fischer/typed-event-emitter": "^3.2.2", - "ircv3": "^0.26.14", - "tslib": "^2.0.3", - "twitch-auth": "^4.6.5", - "twitch-common": "^4.6.5" - } - }, - "twitch-common": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/twitch-common/-/twitch-common-4.6.5.tgz", - "integrity": "sha512-V8rgOIvX6bUMxBQ3BqrmvQOZOfcxsPEZR7lLNXlRsLxHAAbMGze1/SiAzhzQzH/8OV7G3qslWNGEHuQE5iWHbQ==", - "requires": { - "@d-fischer/logger": "^3.1.0", - "@d-fischer/shared-utils": "^3.0.1", - "tslib": "^2.0.3" - } - }, "twitter": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/twitter/-/twitter-1.7.1.tgz", @@ -20474,17 +19390,6 @@ "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", "dev": true }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, "unbzip2-stream": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", @@ -20731,18 +19636,6 @@ "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", diff --git a/package.json b/package.json index cfa371fbcc..06f65f6ef6 100644 --- a/package.json +++ b/package.json @@ -58,9 +58,6 @@ "redis": "^3.1.2", "top-user-agents": "^1.0.37", "twilio": "^3.71.1", - "twitch": "^4.6.5", - "twitch-auth": "^4.6.5", - "twitch-chat-client": "^4.6.5", "twitter": "^1.7.1", "winston": "^3.3.3" }, diff --git a/src/config.ts b/src/config.ts index 10d0112b0c..c0c70e3e3d 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,7 +1,7 @@ -import {existsSync, readFileSync} from 'fs'; -import {banner} from './banner'; import dotenv from 'dotenv'; +import {existsSync, readFileSync} from 'fs'; import path from 'path'; +import {banner} from './banner'; if (process.env.npm_config_conf) { if ( @@ -230,6 +230,9 @@ const notifications = { discord: { notifyGroup: envOrArray(process.env.DISCORD_NOTIFY_GROUP), notifyGroupSeries: { + arc: envOrArray(process.env.DISCORD_NOTIFY_GROUP_ARC), + 'a3-matx': envOrArray(process.env.DISCORD_NOTIFY_GROUP_A3_MATX), + 3050: envOrArray(process.env.DISCORD_NOTIFY_GROUP_3050), 3060: envOrArray(process.env.DISCORD_NOTIFY_GROUP_3060), '3060ti': envOrArray(process.env.DISCORD_NOTIFY_GROUP_3060TI), 3070: envOrArray(process.env.DISCORD_NOTIFY_GROUP_3070), @@ -237,7 +240,6 @@ const notifications = { 3080: envOrArray(process.env.DISCORD_NOTIFY_GROUP_3080), '3080ti': envOrArray(process.env.DISCORD_NOTIFY_GROUP_3080TI), 3090: envOrArray(process.env.DISCORD_NOTIFY_GROUP_3090), - '4080-12g': envOrArray(process.env.DISCORD_NOTIFY_GROUP_4080_12G), '4080-16g': envOrArray(process.env.DISCORD_NOTIFY_GROUP_4080_16G), 4090: envOrArray(process.env.DISCORD_NOTIFY_GROUP_4090), 5070: envOrArray(process.env.DISCORD_NOTIFY_GROUP_5070), @@ -255,6 +257,7 @@ const notifications = { ryzen5900: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN5900), ryzen5950: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN5950), ryzen7800x3d: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN7800X3D), + ryzen7950X: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN7950X), ryzen9800x3d: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN9800X3D), ryzen9600x: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN9600X), ryzen9700x: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN9700X), @@ -421,6 +424,18 @@ if (process.env.MAX_PRICE) { ); } +if ( + process.env.TWITCH_ACCESS_TOKEN || + process.env.TWITCH_CHANNEL || + process.env.TWITCH_CLIENT_ID || + process.env.TWITCH_CLIENT_SECRET || + process.env.TWITCH_REFRESH_TOKEN +) { + console.warn( + 'ℹ TWITCH integrations are currently incompatible with this release' + ); +} + const store = { autoAddToCart: envOrBoolean(process.env.AUTO_ADD_TO_CART, true), country: envOrString(process.env.COUNTRY, 'usa'), @@ -434,7 +449,6 @@ const store = { 3080: envOrNumber(process.env.MAX_PRICE_SERIES_3080), '3080ti': envOrNumber(process.env.MAX_PRICE_SERIES_3080TI), 3090: envOrNumber(process.env.MAX_PRICE_SERIES_3090), - '4080-12g': envOrNumber(process.env.MAX_PRICE_SERIES_4080_12G), '4080-16g': envOrNumber(process.env.MAX_PRICE_SERIES_4080_16G), 4090: envOrNumber(process.env.MAX_PRICE_SERIES_4090), 5070: envOrNumber(process.env.MAX_PRICE_SERIES_5070), @@ -458,7 +472,7 @@ const store = { ryzen5950: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5950), ryzen7950x: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN7950X), ryzen7800x3d: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN7800X3D), - ryzen9800x3d: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN9800XX3D), + ryzen9800x3d: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN9800X3D), ryzen9600x: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN9600X), ryzen9700x: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN9700X), ryzen9900x: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN9900X), @@ -525,6 +539,7 @@ const store = { 'xboxss', 'xboxsx', ]), + showOnlyCountry: envOrArray(process.env.SHOW_ONLY_COUNTRY, []), stores: envOrArray(process.env.STORES, ['amazon', 'bestbuy']).map(entry => { const [name, minPageSleep, maxPageSleep] = entry.match(/[^:]+/g) ?? []; diff --git a/src/logger.ts b/src/logger.ts index 15386337a4..2109eeb3ab 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -1,7 +1,7 @@ -import {Link, Store} from './store/model'; import chalk from 'chalk'; -import {config} from './config'; import winston from 'winston'; +import {config} from './config'; +import {Link, Store} from './store/model'; const prettyJson = winston.format.printf(info => { const timestamp = new Date().toLocaleTimeString(); @@ -10,7 +10,7 @@ const prettyJson = winston.format.printf(info => { '::' )} ${info.message}`; - if (Object.keys(info.metadata).length > 0) { + if (Object.keys(info.metadata as object).length > 0) { out = `${out} ${chalk.magenta(JSON.stringify(info.metadata, null, 2))}`; } diff --git a/src/messaging/apns.ts b/src/messaging/apns.ts index 01103fd325..a8c36528ca 100644 --- a/src/messaging/apns.ts +++ b/src/messaging/apns.ts @@ -1,10 +1,11 @@ -import {Link, Store} from '../store/model'; -import {Print, logger} from '../logger'; import * as apn from '@parse/node-apn'; import {config} from '../config'; +import {logger} from '../logger'; +import {Link, Store} from '../store/model'; const {apns} = config.notifications; +// eslint-disable-next-line @typescript-eslint/no-unused-vars export function sendApns(link: Link, store: Store) { const options = { token: { diff --git a/src/messaging/discord.ts b/src/messaging/discord.ts index 6f6f14aa07..bb239c9cf1 100644 --- a/src/messaging/discord.ts +++ b/src/messaging/discord.ts @@ -1,9 +1,8 @@ -import {Link, Store} from '../store/model'; import Discord from 'discord.js'; +import {DMPayload} from '.'; import {config} from '../config'; import {logger} from '../logger'; -import {DMPayload} from '.'; -import {RawUserData} from 'discord.js/typings/rawDataTypes'; +import {Link, Store} from '../store/model'; const {notifyGroup, webhooks, notifyGroupSeries} = config.notifications.discord; const {pollInterval, responseTimeout, token, userId} = config.captchaHandler; @@ -211,9 +210,7 @@ async function getDiscordClientAsync() { async function getDMChannelAsync(client?: Discord.Client) { let dmChannelInstance = undefined; if (userId && client) { - const user = await new Discord.User(client, { - id: userId, - } as RawUserData).fetch(); + const user = await client.users.fetch(userId); dmChannelInstance = await user.createDM(); } return dmChannelInstance; diff --git a/src/messaging/notification.ts b/src/messaging/notification.ts index 521cf34c22..3ecb1f61f2 100644 --- a/src/messaging/notification.ts +++ b/src/messaging/notification.ts @@ -1,26 +1,26 @@ +import {DMPayload} from '.'; import {Link, Store} from '../store/model'; -import {adjustPhilipsHueLights} from './philips-hue'; -import {playSound} from './sound'; import {sendApns} from './apns'; import {sendDesktopNotification} from './desktop'; -import {sendDiscordMessage, sendDMAsync as sendDiscordDM} from './discord'; +import {sendDMAsync as sendDiscordDM, sendDiscordMessage} from './discord'; import {sendEmail} from './email'; +import {sendFreeMobileAlert} from './freemobile'; import {sendGotifyNotification} from './gotify'; import {sendMqttMessage} from './mqtt'; +import {sendNtfyAlert} from './ntfy'; import {sendPagerDutyNotification} from './pagerduty'; +import {adjustPhilipsHueLights} from './philips-hue'; import {sendPushbulletNotification} from './pushbullet'; import {sendPushoverNotification} from './pushover'; -import {sendSlackMessage, sendDMAsync as sendSlackDM} from './slack'; +import {updateRedis} from './redis'; +import {sendDMAsync as sendSlackDM, sendSlackMessage} from './slack'; import {sendSms} from './sms'; +import {playSound} from './sound'; +import {sendStreamLabsAlert} from './streamlabs'; import {sendTelegramMessage} from './telegram'; -import {sendTweet} from './twitter'; import {sendTwilioMessage} from './twilio'; -import {sendTwitchMessage} from './twitch'; -import {updateRedis} from './redis'; -import {sendStreamLabsAlert} from './streamlabs'; -import {sendFreeMobileAlert} from './freemobile'; -import {DMPayload} from '.'; -import {sendNtfyAlert} from './ntfy'; +// import {sendTwitchMessage} from './twitch'; +import {sendTweet} from './twitter'; export function sendNotification(link: Link, store: Store) { // Priority @@ -42,7 +42,7 @@ export function sendNotification(link: Link, store: Store) { sendTelegramMessage(link, store); sendTweet(link, store); sendTwilioMessage(link, store); - sendTwitchMessage(link, store); + // sendTwitchMessage(link, store); updateRedis(link, store); sendStreamLabsAlert(link, store); sendFreeMobileAlert(link, store); diff --git a/src/messaging/redis.ts b/src/messaging/redis.ts index 1c3db13e5c..0b36f2d3f3 100644 --- a/src/messaging/redis.ts +++ b/src/messaging/redis.ts @@ -1,7 +1,7 @@ -import {Link, Store} from '../store/model'; import redis, {RedisClient} from 'redis'; import {config} from '../config'; import {logger} from '../logger'; +import {Link, Store} from '../store/model'; const {url} = config.notifications.redis; let client: RedisClient; @@ -30,7 +30,7 @@ export function updateRedis(link: Link, store: Store) { }; const message = JSON.stringify(value); - client.set(key, message, (error, success) => { + client.set(key, message, error => { if (error) { logger.error(`✖ couldn't update redis for key (${key})`); } else { @@ -38,9 +38,9 @@ export function updateRedis(link: Link, store: Store) { } }); - client.publish('streetmerchant', message, (error, success) => { + client.publish('streetmerchant', message, error => { if (error) { - logger.error(`✖ couldn't publish to redis`); + logger.error("✖ couldn't publish to redis"); } else { logger.info('✔ redis message published'); } diff --git a/src/messaging/twitch.ts b/src/messaging/twitch.ts index 27faa963af..b2f80d6783 100644 --- a/src/messaging/twitch.ts +++ b/src/messaging/twitch.ts @@ -1,101 +1,112 @@ -import {Link, Store} from '../store/model'; -import {Print, logger} from '../logger'; -import {RefreshableAuthProvider, StaticAuthProvider} from 'twitch-auth'; -import {existsSync, promises, readFileSync} from 'fs'; -import {ChatClient} from 'twitch-chat-client'; -import {config} from '../config'; +/** + * TODO: Needs to be upgraded to @twurple/auth + @twurple/chat - currently throws the following error if no client params are in + * dotenv and an item is found + * + * var _this = _super.call(this) || this; + TypeError: Class constructor EventEmitter cannot be invoked without 'new' + at ChatClient.IrcClient [as constructor] (/streetmerchant/node_modules/.pnpm/ircv3@0.26.14/node_modules/ircv3/lib/IrcClient.js:24:28) + at new ChatClient (/streetmerchant/node_modules/.pnpm/twitch-chat-client@4.6.7_twitch@4.6.7/node_modules/twitch-chat-client/lib/ChatClient.js:44:28) + at Object. (/streetmerchant/build/src/messaging/twitch.js:23:20) + */ -const {twitch} = config.notifications; +// import {Link, Store} from '../store/model'; +// import {Print, logger} from '../logger'; +// import {RefreshableAuthProvider, StaticAuthProvider} from 'twitch-auth'; +// import {existsSync, promises, readFileSync} from 'fs'; +// import {ChatClient} from 'twitch-chat-client'; +// import {config} from '../config'; -const messages: string[] = []; -let alreadySaying = false; +// const {twitch} = config.notifications; -let tokenData = { - accessToken: twitch.accessToken, - expiryTimestamp: 0, - refreshToken: twitch.refreshToken, -}; +// const messages: string[] = []; +// let alreadySaying = false; -if (existsSync('./twitch.json')) { - tokenData = { - ...JSON.parse(readFileSync('./twitch.json', 'utf-8')), - ...tokenData, - }; -} +// let tokenData = { +// accessToken: twitch.accessToken, +// expiryTimestamp: 0, +// refreshToken: twitch.refreshToken, +// }; -const chatClient: ChatClient = new ChatClient( - new RefreshableAuthProvider( - new StaticAuthProvider(twitch.clientId, tokenData.accessToken), - { - clientSecret: twitch.clientSecret, - expiry: - tokenData.expiryTimestamp === null - ? null - : new Date(tokenData.expiryTimestamp), - onRefresh: async ({accessToken, refreshToken, expiryDate}) => { - return promises.writeFile( - './twitch.json', - JSON.stringify( - { - accessToken, - expiryTimestamp: - expiryDate === null ? null : expiryDate.getTime(), - refreshToken, - }, - null, - 4 - ), - 'utf-8' - ); - }, - refreshToken: tokenData.refreshToken, - } - ), - { - channels: [twitch.channel], - } -); +// if (existsSync('./twitch.json')) { +// tokenData = { +// ...JSON.parse(readFileSync('./twitch.json', 'utf-8')), +// ...tokenData, +// }; +// } -chatClient.onJoin((channel: string, user: string) => { - if (channel === `#${twitch.channel}` && user === chatClient.currentNick) { - while (messages.length) { - const message: string | undefined = messages.shift(); +// const chatClient: ChatClient = new ChatClient( +// new RefreshableAuthProvider( +// new StaticAuthProvider(twitch.clientId, tokenData.accessToken), +// { +// clientSecret: twitch.clientSecret, +// expiry: +// tokenData.expiryTimestamp === null +// ? null +// : new Date(tokenData.expiryTimestamp), +// onRefresh: async ({accessToken, refreshToken, expiryDate}) => { +// return promises.writeFile( +// './twitch.json', +// JSON.stringify( +// { +// accessToken, +// expiryTimestamp: +// expiryDate === null ? null : expiryDate.getTime(), +// refreshToken, +// }, +// null, +// 4 +// ), +// 'utf-8' +// ); +// }, +// refreshToken: tokenData.refreshToken, +// } +// ), +// { +// channels: [twitch.channel], +// } +// ); - if (message !== undefined) { - try { - void chatClient.say(channel, message); - logger.info('✔ twitch message sent'); - } catch (error: unknown) { - logger.error("✖ couldn't send twitch message", error); - } - } - } - } +// chatClient.onJoin((channel: string, user: string) => { +// if (channel === `#${twitch.channel}` && user === chatClient.currentNick) { +// while (messages.length) { +// const message: string | undefined = messages.shift(); - void chatClient.quit(); -}); +// if (message !== undefined) { +// try { +// void chatClient.say(channel, message); +// logger.info('✔ twitch message sent'); +// } catch (error: unknown) { +// logger.error("✖ couldn't send twitch message", error); +// } +// } +// } +// } -chatClient.onDisconnect(() => { - alreadySaying = false; -}); +// void chatClient.quit(); +// }); -export function sendTwitchMessage(link: Link, store: Store) { - if ( - tokenData.accessToken && - twitch.channel && - twitch.clientId && - twitch.clientSecret && - tokenData.refreshToken - ) { - logger.debug('↗ sending twitch message'); +// chatClient.onDisconnect(() => { +// alreadySaying = false; +// }); - messages.push( - `${Print.inStock(link, store)}\n${link.cartUrl ? link.cartUrl : link.url}` - ); +// export function sendTwitchMessage(link: Link, store: Store) { +// if ( +// tokenData.accessToken && +// twitch.channel && +// twitch.clientId && +// twitch.clientSecret && +// tokenData.refreshToken +// ) { +// logger.debug('↗ sending twitch message'); - if (!alreadySaying) { - alreadySaying = true; - void chatClient.connect(); - } - } -} +// messages.push( +// `${Print.inStock(link, store)}\n${link.cartUrl ? link.cartUrl : link.url}` +// ); + +// if (!alreadySaying) { +// alreadySaying = true; +// void chatClient.connect(); +// } +// } +// } diff --git a/src/store/captcha-handler.ts b/src/store/captcha-handler.ts index 5936bc82b9..2a256ac8d0 100644 --- a/src/store/captcha-handler.ts +++ b/src/store/captcha-handler.ts @@ -1,14 +1,14 @@ import {Page} from 'puppeteer'; import {config} from '../config'; -import {Store} from './model'; import {logger} from '../logger'; -import {delay, deleteFile} from '../util'; import { + CaptchaPayload, + DMPayload, getCaptchaInputAsync, sendDMAsync, - DMPayload, - CaptchaPayload, } from '../messaging'; +import {delay, deleteFile} from '../util'; +import {Store} from './model'; const DefaultCaptureType = 'link'; @@ -88,7 +88,10 @@ async function getCaptchaPayloadAsync( break; case 'link': captchaPayload = { - content: await challengeElement?.evaluate(img => img.src), + content: + (await challengeElement?.evaluate( + img => (img as HTMLImageElement).src + )) || '', type: 'text', }; break; diff --git a/src/store/model/acompc.ts b/src/store/model/acompc.ts index 39d6caa71a..1924f57d44 100644 --- a/src/store/model/acompc.ts +++ b/src/store/model/acompc.ts @@ -309,4 +309,5 @@ export const AComPC: Store = { }, ], name: 'acompc', + country: 'DE', }; diff --git a/src/store/model/adorama.ts b/src/store/model/adorama.ts index 4888e929ea..8d1e33f3c7 100644 --- a/src/store/model/adorama.ts +++ b/src/store/model/adorama.ts @@ -127,4 +127,5 @@ export const Adorama: Store = { }, ], name: 'adorama', + country: 'US', }; diff --git a/src/store/model/akinformatica.ts b/src/store/model/akinformatica.ts index 917fa280e1..0a7b597e49 100644 --- a/src/store/model/akinformatica.ts +++ b/src/store/model/akinformatica.ts @@ -283,5 +283,6 @@ export const Akinformatica: Store = { }, ], name: 'akinformatica', + country: 'IT', successStatusCodes: [[0, 399], 404], }; diff --git a/src/store/model/allneeds.ts b/src/store/model/allneeds.ts index 216544f9ba..69278ff913 100644 --- a/src/store/model/allneeds.ts +++ b/src/store/model/allneeds.ts @@ -56,4 +56,5 @@ export const Allneeds: Store = { }, ], name: 'allneeds', + country: 'AU', }; diff --git a/src/store/model/alternate-de.ts b/src/store/model/alternate-de.ts index 89e28c3d2f..7799e39e12 100644 --- a/src/store/model/alternate-de.ts +++ b/src/store/model/alternate-de.ts @@ -1253,4 +1253,5 @@ export const AlternateDe: Store = { }, ], name: 'alternate-de', + country: 'DE', }; diff --git a/src/store/model/alternate-fr.ts b/src/store/model/alternate-fr.ts index f3c0530a5e..4a8438e248 100644 --- a/src/store/model/alternate-fr.ts +++ b/src/store/model/alternate-fr.ts @@ -205,4 +205,5 @@ export const AlternateFr: Store = { }, ], name: 'alternate-fr', + country: 'FR', }; diff --git a/src/store/model/alternate-nl.ts b/src/store/model/alternate-nl.ts index dc264e99c7..4b48c16d75 100644 --- a/src/store/model/alternate-nl.ts +++ b/src/store/model/alternate-nl.ts @@ -169,4 +169,5 @@ export const AlternateNL: Store = { }, ], name: 'alternate-nl', + country: 'NL', }; diff --git a/src/store/model/amazon-ca.ts b/src/store/model/amazon-ca.ts index ed8d358c31..6331e08a4c 100644 --- a/src/store/model/amazon-ca.ts +++ b/src/store/model/amazon-ca.ts @@ -311,4 +311,5 @@ export const AmazonCa: Store = { }, ], name: 'amazon-ca', + country: 'CA', }; diff --git a/src/store/model/amazon-de-warehouse.ts b/src/store/model/amazon-de-warehouse.ts index 6e4bc74b10..814353706c 100644 --- a/src/store/model/amazon-de-warehouse.ts +++ b/src/store/model/amazon-de-warehouse.ts @@ -66,4 +66,5 @@ export const AmazonDeWarehouse: Store = { }, ], name: 'amazon-de-warehouse', + country: 'DE', }; diff --git a/src/store/model/amazon-de.ts b/src/store/model/amazon-de.ts index 552712d945..9b19bb8bfc 100644 --- a/src/store/model/amazon-de.ts +++ b/src/store/model/amazon-de.ts @@ -786,4 +786,5 @@ export const AmazonDe: Store = { }, ], name: 'amazon-de', + country: 'DE', }; diff --git a/src/store/model/amazon-es.ts b/src/store/model/amazon-es.ts index 3a9490c199..1f310b95fe 100644 --- a/src/store/model/amazon-es.ts +++ b/src/store/model/amazon-es.ts @@ -527,4 +527,5 @@ export const AmazonEs: Store = { }, ], name: 'amazon-es', + country: 'ES', }; diff --git a/src/store/model/amazon-fr.ts b/src/store/model/amazon-fr.ts index 7f7d8768a8..670f185db3 100644 --- a/src/store/model/amazon-fr.ts +++ b/src/store/model/amazon-fr.ts @@ -193,4 +193,5 @@ export const AmazonFr: Store = { }, ], name: 'amazon-fr', + country: 'FR', }; diff --git a/src/store/model/amazon-it.ts b/src/store/model/amazon-it.ts index 175f3a6ac9..1b8d3348d8 100644 --- a/src/store/model/amazon-it.ts +++ b/src/store/model/amazon-it.ts @@ -417,4 +417,5 @@ export const AmazonIt: Store = { }, ], name: 'amazon-it', + country: 'IT', }; diff --git a/src/store/model/amazon-nl.ts b/src/store/model/amazon-nl.ts index e27ddde377..b90d3e3e51 100644 --- a/src/store/model/amazon-nl.ts +++ b/src/store/model/amazon-nl.ts @@ -240,4 +240,5 @@ export const AmazonNl: Store = { }, ], name: 'amazon-nl', + country: 'NL', }; diff --git a/src/store/model/amazon-sg.ts b/src/store/model/amazon-sg.ts index 34c219fe56..aba3aca940 100644 --- a/src/store/model/amazon-sg.ts +++ b/src/store/model/amazon-sg.ts @@ -762,4 +762,5 @@ export const AmazonSg: Store = { }, ], name: 'amazon-sg', + country: 'SG', }; diff --git a/src/store/model/amazon-uk.ts b/src/store/model/amazon-uk.ts index 715f9cac04..94dd123cc2 100644 --- a/src/store/model/amazon-uk.ts +++ b/src/store/model/amazon-uk.ts @@ -714,4 +714,5 @@ export const AmazonUk: Store = { }, ], name: 'amazon-uk', + country: 'UK', }; diff --git a/src/store/model/amazon.ts b/src/store/model/amazon.ts index 31e83c169a..3b5f166871 100644 --- a/src/store/model/amazon.ts +++ b/src/store/model/amazon.ts @@ -981,6 +981,7 @@ export const Amazon: Store = { }, ], name: 'amazon', + country: 'US', }; /* Copy Paste Template diff --git a/src/store/model/amd-at.ts b/src/store/model/amd-at.ts index f8bfaf944b..0417c40ecf 100644 --- a/src/store/model/amd-at.ts +++ b/src/store/model/amd-at.ts @@ -97,4 +97,5 @@ export const AmdAt: Store = { }, ], name: 'amd-at', + country: 'AT', }; diff --git a/src/store/model/amd-be.ts b/src/store/model/amd-be.ts index 7dec61e472..b356b3d7e6 100644 --- a/src/store/model/amd-be.ts +++ b/src/store/model/amd-be.ts @@ -97,4 +97,5 @@ export const AmdBe: Store = { }, ], name: 'amd-be', + country: 'BE', }; diff --git a/src/store/model/amd-ca.ts b/src/store/model/amd-ca.ts index f2fcfb6710..4bfeaa1bfa 100644 --- a/src/store/model/amd-ca.ts +++ b/src/store/model/amd-ca.ts @@ -53,4 +53,5 @@ export const AmdCa: Store = { }, ], name: 'amd-ca', + country: 'CA', }; diff --git a/src/store/model/amd-de.ts b/src/store/model/amd-de.ts index d47660d348..230b4ec78d 100644 --- a/src/store/model/amd-de.ts +++ b/src/store/model/amd-de.ts @@ -97,4 +97,5 @@ export const AmdDe: Store = { }, ], name: 'amd-de', + country: 'DE', }; diff --git a/src/store/model/amd-it.ts b/src/store/model/amd-it.ts index 150767dff8..9e0bd15b1b 100644 --- a/src/store/model/amd-it.ts +++ b/src/store/model/amd-it.ts @@ -69,4 +69,5 @@ export const AmdIt: Store = { }, ], name: 'amd-it', + country: 'IT', }; diff --git a/src/store/model/amd-nl.ts b/src/store/model/amd-nl.ts index 0ff09a2006..d1d1f68a5b 100644 --- a/src/store/model/amd-nl.ts +++ b/src/store/model/amd-nl.ts @@ -81,4 +81,5 @@ export const AmdNl: Store = { }, ], name: 'amd-nl', + country: 'NL', }; diff --git a/src/store/model/amd-uk.ts b/src/store/model/amd-uk.ts index fa19119ffa..0f9a86ae8c 100644 --- a/src/store/model/amd-uk.ts +++ b/src/store/model/amd-uk.ts @@ -101,4 +101,5 @@ export const AmdUk: Store = { }, ], name: 'amd-uk', + country: 'UK', }; diff --git a/src/store/model/amd.ts b/src/store/model/amd.ts index fd35a1e948..3e5178f8d2 100644 --- a/src/store/model/amd.ts +++ b/src/store/model/amd.ts @@ -129,6 +129,7 @@ export const Amd: Store = { }, ], name: 'amd', + country: 'US', }; /* Copy Paste Template diff --git a/src/store/model/antonline.ts b/src/store/model/antonline.ts index fbbfd6d38e..15fb2a0379 100644 --- a/src/store/model/antonline.ts +++ b/src/store/model/antonline.ts @@ -37,4 +37,5 @@ export const AntOnline: Store = { }, ], name: 'antonline', + country: 'US', }; diff --git a/src/store/model/ao.ts b/src/store/model/ao.ts index 7f16eab0f7..8224d309ee 100644 --- a/src/store/model/ao.ts +++ b/src/store/model/ao.ts @@ -23,4 +23,5 @@ export const AO: Store = { }, ], name: 'ao', + country: 'UK', }; diff --git a/src/store/model/argos-ie.ts b/src/store/model/argos-ie.ts index f470cee6fe..37b07ab458 100644 --- a/src/store/model/argos-ie.ts +++ b/src/store/model/argos-ie.ts @@ -30,4 +30,5 @@ export const ArgosIE: Store = { }, ], name: 'argos-ie', + country: 'IE', }; diff --git a/src/store/model/argos.ts b/src/store/model/argos.ts index 934ee174bb..04510fc4d0 100644 --- a/src/store/model/argos.ts +++ b/src/store/model/argos.ts @@ -44,4 +44,5 @@ export const Argos: Store = { }, ], name: 'argos', + country: 'UK', }; diff --git a/src/store/model/aria.ts b/src/store/model/aria.ts index de374e4895..f9748c9505 100644 --- a/src/store/model/aria.ts +++ b/src/store/model/aria.ts @@ -61,5 +61,6 @@ export const Aria: Store = { ], }, name: 'aria', + country: 'UK', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/arlt.ts b/src/store/model/arlt.ts index 06c392414c..18c06fa90c 100644 --- a/src/store/model/arlt.ts +++ b/src/store/model/arlt.ts @@ -139,4 +139,5 @@ export const Arlt: Store = { }, ], name: 'arlt', + country: 'DE', }; diff --git a/src/store/model/asus-de.ts b/src/store/model/asus-de.ts index 6844425962..c2bcf99dab 100644 --- a/src/store/model/asus-de.ts +++ b/src/store/model/asus-de.ts @@ -83,4 +83,5 @@ export const AsusDe: Store = { }, ], name: 'asus-de', + country: 'DE', }; diff --git a/src/store/model/asus-es.ts b/src/store/model/asus-es.ts index 3f3c239cf6..bb4be9eec1 100644 --- a/src/store/model/asus-es.ts +++ b/src/store/model/asus-es.ts @@ -29,4 +29,5 @@ export const AsusEs: Store = { }, ], name: 'asus-es', + country: 'ES', }; diff --git a/src/store/model/asus.ts b/src/store/model/asus.ts index faf889529f..51a3235cbd 100644 --- a/src/store/model/asus.ts +++ b/src/store/model/asus.ts @@ -1,5 +1,5 @@ -import {Store} from './store'; import fetch from 'node-fetch'; +import {Store} from './store'; export const Asus: Store = { backoffStatusCodes: [403, 429, 503], @@ -157,6 +157,7 @@ export const Asus: Store = { }, ], name: 'asus', + country: 'US', realTimeInventoryLookup: async (itemNumber: string) => { const request_url = 'https://store.asus.com/us/category/get_real_time_data'; const response = await fetch(request_url, { diff --git a/src/store/model/awd.ts b/src/store/model/awd.ts index bfba91d6a9..4b0a7f2869 100644 --- a/src/store/model/awd.ts +++ b/src/store/model/awd.ts @@ -79,5 +79,6 @@ export const Awd: Store = { ], }, name: 'awd', + country: 'UK', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/azerty.ts b/src/store/model/azerty.ts index 640ed2c3e0..c3d0c29a96 100644 --- a/src/store/model/azerty.ts +++ b/src/store/model/azerty.ts @@ -187,4 +187,5 @@ export const Azerty: Store = { }, ], name: 'azerty', + country: 'NL', }; diff --git a/src/store/model/bandh.ts b/src/store/model/bandh.ts index dbd62e1709..2ee49318b9 100644 --- a/src/store/model/bandh.ts +++ b/src/store/model/bandh.ts @@ -477,6 +477,7 @@ export const BAndH: Store = { }, ], name: 'bandh', + country: 'US', }; /* Copy Paste Template diff --git a/src/store/model/bestbuy-ca.ts b/src/store/model/bestbuy-ca.ts index 11873cc049..6d57444396 100644 --- a/src/store/model/bestbuy-ca.ts +++ b/src/store/model/bestbuy-ca.ts @@ -351,6 +351,7 @@ export const BestBuyCa: Store = { }, ], name: 'bestbuy-ca', + country: 'CA', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/bestbuy.ts b/src/store/model/bestbuy.ts index ca4ef1f1fc..b06ee53f2d 100644 --- a/src/store/model/bestbuy.ts +++ b/src/store/model/bestbuy.ts @@ -718,6 +718,7 @@ export const BestBuy: Store = { }, ], name: 'bestbuy', + country: 'US', }; /* Copy Paste template diff --git a/src/store/model/box.ts b/src/store/model/box.ts index 8248177b26..3a96cabefb 100644 --- a/src/store/model/box.ts +++ b/src/store/model/box.ts @@ -86,5 +86,6 @@ export const Box: Store = { ], }, name: 'box', + country: 'UK', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/bpctech.ts b/src/store/model/bpctech.ts index 04d65152ba..d701fedc87 100644 --- a/src/store/model/bpctech.ts +++ b/src/store/model/bpctech.ts @@ -148,4 +148,5 @@ export const Bpctech: Store = { }, ], name: 'bpctech', + country: 'AU', }; diff --git a/src/store/model/bpmpower.ts b/src/store/model/bpmpower.ts index 2e250f7822..34fe731e56 100644 --- a/src/store/model/bpmpower.ts +++ b/src/store/model/bpmpower.ts @@ -37,4 +37,5 @@ export const BpmPower: Store = { }, ], name: 'bpm-power', + country: 'IT', }; diff --git a/src/store/model/bt.ts b/src/store/model/bt.ts index 32ec32595a..42dfc1d22d 100644 --- a/src/store/model/bt.ts +++ b/src/store/model/bt.ts @@ -23,4 +23,5 @@ export const BT: Store = { }, ], name: 'bt', + country: 'UK', }; diff --git a/src/store/model/canadacomputers.ts b/src/store/model/canadacomputers.ts index 1624169820..293625c124 100644 --- a/src/store/model/canadacomputers.ts +++ b/src/store/model/canadacomputers.ts @@ -507,5 +507,6 @@ export const CanadaComputers: Store = { }, ], name: 'canadacomputers', + country: 'CA', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/caseking.ts b/src/store/model/caseking.ts index 707879f845..77e4074412 100644 --- a/src/store/model/caseking.ts +++ b/src/store/model/caseking.ts @@ -872,4 +872,5 @@ export const Caseking: Store = { }, ], name: 'caseking', + country: 'DE', }; diff --git a/src/store/model/ccl.ts b/src/store/model/ccl.ts index 087895f796..4352fcb259 100644 --- a/src/store/model/ccl.ts +++ b/src/store/model/ccl.ts @@ -93,5 +93,6 @@ export const Ccl: Store = { ], }, name: 'ccl', + country: 'UK', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/centrecom.ts b/src/store/model/centrecom.ts index 71363558c5..db38277dc2 100644 --- a/src/store/model/centrecom.ts +++ b/src/store/model/centrecom.ts @@ -74,4 +74,5 @@ export const Centrecom: Store = { }, ], name: 'centrecom', + country: 'AU', }; diff --git a/src/store/model/comet.ts b/src/store/model/comet.ts index ff72ebce4e..3b11570610 100644 --- a/src/store/model/comet.ts +++ b/src/store/model/comet.ts @@ -38,4 +38,5 @@ export const Comet: Store = { }, ], name: 'comet', + country: 'IT', }; diff --git a/src/store/model/computeralliance.ts b/src/store/model/computeralliance.ts index 6bd4775b96..08309592f3 100644 --- a/src/store/model/computeralliance.ts +++ b/src/store/model/computeralliance.ts @@ -256,4 +256,5 @@ export const ComputerAlliance: Store = { }, ], name: 'computeralliance', + country: 'AU', }; diff --git a/src/store/model/computeruniverse.ts b/src/store/model/computeruniverse.ts index 7537291621..db86a2e3f6 100644 --- a/src/store/model/computeruniverse.ts +++ b/src/store/model/computeruniverse.ts @@ -702,4 +702,5 @@ export const Computeruniverse: Store = { }, ], name: 'computeruniverse', + country: 'DE', }; diff --git a/src/store/model/coolblue.ts b/src/store/model/coolblue.ts index b29149db2b..8ad03d256d 100644 --- a/src/store/model/coolblue.ts +++ b/src/store/model/coolblue.ts @@ -152,4 +152,5 @@ export const Coolblue: Store = { }, ], name: 'coolblue', + country: 'NL', }; diff --git a/src/store/model/coolmod.ts b/src/store/model/coolmod.ts index 6e581c7494..376d8c86f7 100644 --- a/src/store/model/coolmod.ts +++ b/src/store/model/coolmod.ts @@ -50,6 +50,7 @@ export const Coolmod: Store = { }, ], name: 'coolmod', + country: 'ES', linksBuilder: { builder: getProductLinksBuilder({ productsSelector: '.productInfo.itemFiltered', diff --git a/src/store/model/corsair-uk.ts b/src/store/model/corsair-uk.ts index 0fca6ef770..b76ec6a5b1 100644 --- a/src/store/model/corsair-uk.ts +++ b/src/store/model/corsair-uk.ts @@ -39,4 +39,5 @@ export const CorsairUK: Store = { }, ], name: 'corsair-uk', + country: 'UK', }; diff --git a/src/store/model/corsair.ts b/src/store/model/corsair.ts index b360a189ea..4d924fcaed 100644 --- a/src/store/model/corsair.ts +++ b/src/store/model/corsair.ts @@ -33,4 +33,5 @@ export const Corsair: Store = { }, ], name: 'corsair', + country: 'US', }; diff --git a/src/store/model/cpl.ts b/src/store/model/cpl.ts index 3af45bf720..7c6b8eab76 100644 --- a/src/store/model/cpl.ts +++ b/src/store/model/cpl.ts @@ -132,4 +132,5 @@ export const Cpl: Store = { }, ], name: 'cpl', + country: 'AU', }; diff --git a/src/store/model/currys.ts b/src/store/model/currys.ts index 7af054db7f..e39aa993f5 100644 --- a/src/store/model/currys.ts +++ b/src/store/model/currys.ts @@ -116,5 +116,6 @@ export const Currys: Store = { ], }, name: 'currys', + country: 'UK', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/cyberport-at.ts b/src/store/model/cyberport-at.ts index 3b6a52b698..e760971598 100644 --- a/src/store/model/cyberport-at.ts +++ b/src/store/model/cyberport-at.ts @@ -121,4 +121,5 @@ export const CyberportAt: Store = { }, ], name: 'cyberport-at', + country: 'AT', }; diff --git a/src/store/model/cyberport.ts b/src/store/model/cyberport.ts index 9d704163d0..de7cec4039 100644 --- a/src/store/model/cyberport.ts +++ b/src/store/model/cyberport.ts @@ -169,4 +169,5 @@ export const Cyberport: Store = { }, ], name: 'cyberport', + country: 'DE', }; diff --git a/src/store/model/dcomp.ts b/src/store/model/dcomp.ts index 6c8d66a369..8727a33af1 100644 --- a/src/store/model/dcomp.ts +++ b/src/store/model/dcomp.ts @@ -218,4 +218,5 @@ export const Dcomp: Store = { }, ], name: 'dcomp', + country: 'AU', }; diff --git a/src/store/model/drako.ts b/src/store/model/drako.ts index d9169307ac..cb32462754 100644 --- a/src/store/model/drako.ts +++ b/src/store/model/drako.ts @@ -241,5 +241,6 @@ export const Drako: Store = { }, ], name: 'drako', + country: 'IT', successStatusCodes: [[0, 399], 404], }; diff --git a/src/store/model/dustinhome-no.ts b/src/store/model/dustinhome-no.ts index 6c5be2c819..446d6e0412 100644 --- a/src/store/model/dustinhome-no.ts +++ b/src/store/model/dustinhome-no.ts @@ -73,4 +73,5 @@ export const DustinHomeNO: Store = { }, ], name: 'dustinhome-no', + country: 'NO', }; diff --git a/src/store/model/ebuyer.ts b/src/store/model/ebuyer.ts index 1a0cdc5964..154c24d4cd 100644 --- a/src/store/model/ebuyer.ts +++ b/src/store/model/ebuyer.ts @@ -120,5 +120,6 @@ export const Ebuyer: Store = { ], }, name: 'ebuyer', + country: 'UK', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/elcorteingles.ts b/src/store/model/elcorteingles.ts index bf4a4fdd63..5a7eae5062 100644 --- a/src/store/model/elcorteingles.ts +++ b/src/store/model/elcorteingles.ts @@ -67,4 +67,5 @@ export const Elcorteingles: Store = { }, ], name: 'elcorteingles', + country: 'ES', }; diff --git a/src/store/model/eletronicamente.ts b/src/store/model/eletronicamente.ts index 18516ffc4d..8b1ffa9723 100644 --- a/src/store/model/eletronicamente.ts +++ b/src/store/model/eletronicamente.ts @@ -134,4 +134,5 @@ export const Eletronicamente: Store = { }, ], name: 'eletronicamente', + country: 'ES', }; diff --git a/src/store/model/elkjop.ts b/src/store/model/elkjop.ts index e2419df93f..1e043cfd75 100644 --- a/src/store/model/elkjop.ts +++ b/src/store/model/elkjop.ts @@ -252,4 +252,5 @@ export const Elkjop: Store = { }, ], name: 'elkjop', + country: 'NO', }; diff --git a/src/store/model/eprice.ts b/src/store/model/eprice.ts index 0f1ee0cf73..44a82e062a 100644 --- a/src/store/model/eprice.ts +++ b/src/store/model/eprice.ts @@ -85,4 +85,5 @@ export const Eprice: Store = { }, ], name: 'eprice', + country: 'IT', }; diff --git a/src/store/model/equippr.ts b/src/store/model/equippr.ts index 613bbe7e3c..fe872ec880 100644 --- a/src/store/model/equippr.ts +++ b/src/store/model/equippr.ts @@ -98,6 +98,7 @@ export const Equippr: Store = { }, ], name: 'equippr', + country: 'DE', linksBuilder: { builder: getProductLinksBuilder({ productsSelector: '.product--box', diff --git a/src/store/model/euronics-de.ts b/src/store/model/euronics-de.ts index bc14bca4d8..8713eb24a3 100644 --- a/src/store/model/euronics-de.ts +++ b/src/store/model/euronics-de.ts @@ -53,4 +53,5 @@ export const EuronicsDE: Store = { }, ], name: 'euronics-de', + country: 'DE', }; diff --git a/src/store/model/euronics.ts b/src/store/model/euronics.ts index 1ee308b26b..57b55f5ddb 100644 --- a/src/store/model/euronics.ts +++ b/src/store/model/euronics.ts @@ -35,4 +35,5 @@ export const Euronics: Store = { }, ], name: 'euronics', + country: 'IT', }; diff --git a/src/store/model/evatech.ts b/src/store/model/evatech.ts index 5540c380f2..900858db4d 100644 --- a/src/store/model/evatech.ts +++ b/src/store/model/evatech.ts @@ -98,4 +98,5 @@ export const Evatech: Store = { }, ], name: 'evatech', + country: 'AU', }; diff --git a/src/store/model/evga-eu.ts b/src/store/model/evga-eu.ts index 8d22d7a9a3..7dbd3ca597 100644 --- a/src/store/model/evga-eu.ts +++ b/src/store/model/evga-eu.ts @@ -71,4 +71,5 @@ export const EvgaEu: Store = { }, ], name: 'evga-eu', + country: 'EU', }; diff --git a/src/store/model/evga.ts b/src/store/model/evga.ts index 14832eaf06..67936ee6d6 100644 --- a/src/store/model/evga.ts +++ b/src/store/model/evga.ts @@ -119,4 +119,5 @@ export const Evga: Store = { }, ], name: 'evga', + country: 'US', }; diff --git a/src/store/model/expert.ts b/src/store/model/expert.ts index 6e20d5791c..040f37d6ed 100644 --- a/src/store/model/expert.ts +++ b/src/store/model/expert.ts @@ -53,4 +53,5 @@ export const Expert: Store = { }, ], name: 'expert', + country: 'DE', }; diff --git a/src/store/model/futurex.ts b/src/store/model/futurex.ts index d7fe6302c1..89e582d2e8 100644 --- a/src/store/model/futurex.ts +++ b/src/store/model/futurex.ts @@ -81,4 +81,5 @@ export const Futurex: Store = { }, ], name: 'futurex', + country: 'DE', }; diff --git a/src/store/model/galaxus.ts b/src/store/model/galaxus.ts index 8c908453fd..92e9082e93 100644 --- a/src/store/model/galaxus.ts +++ b/src/store/model/galaxus.ts @@ -105,4 +105,5 @@ export const Galaxus: Store = { }, ], name: 'galaxus', + country: 'DE', }; diff --git a/src/store/model/game-es.ts b/src/store/model/game-es.ts index 39c4ccafa9..e5fb5fcac1 100644 --- a/src/store/model/game-es.ts +++ b/src/store/model/game-es.ts @@ -165,4 +165,5 @@ export const GameES: Store = { }, ], name: 'game-es', + country: 'ES', }; diff --git a/src/store/model/game.ts b/src/store/model/game.ts index 49a2cbd685..fd124fa156 100644 --- a/src/store/model/game.ts +++ b/src/store/model/game.ts @@ -49,4 +49,5 @@ export const Game: Store = { }, ], name: 'game', + country: 'UK', }; diff --git a/src/store/model/gamestop-ca.ts b/src/store/model/gamestop-ca.ts index 5e241833c6..47c907cbfe 100644 --- a/src/store/model/gamestop-ca.ts +++ b/src/store/model/gamestop-ca.ts @@ -44,4 +44,5 @@ export const GamestopCA: Store = { }, ], name: 'gamestop-ca', + country: 'CA', }; diff --git a/src/store/model/gamestop-de.ts b/src/store/model/gamestop-de.ts index 63a5513ab4..bd7a8875bb 100644 --- a/src/store/model/gamestop-de.ts +++ b/src/store/model/gamestop-de.ts @@ -37,5 +37,6 @@ export const GamestopDE: Store = { }, ], name: 'gamestop-de', + country: 'DE', successStatusCodes: [[0, 399], 404], }; diff --git a/src/store/model/gamestop-ie.ts b/src/store/model/gamestop-ie.ts index 1230351753..383913f395 100644 --- a/src/store/model/gamestop-ie.ts +++ b/src/store/model/gamestop-ie.ts @@ -26,4 +26,5 @@ export const GamestopIE: Store = { }, ], name: 'gamestop-ie', + country: 'IE', }; diff --git a/src/store/model/gamestop-it.ts b/src/store/model/gamestop-it.ts index cec223085c..c9ae510061 100644 --- a/src/store/model/gamestop-it.ts +++ b/src/store/model/gamestop-it.ts @@ -31,4 +31,5 @@ export const GamestopIT: Store = { }, ], name: 'gamestop-it', + country: 'IT', }; diff --git a/src/store/model/gamestop.ts b/src/store/model/gamestop.ts index 4d1a3014f1..ad757e308d 100644 --- a/src/store/model/gamestop.ts +++ b/src/store/model/gamestop.ts @@ -139,5 +139,6 @@ export const Gamestop: Store = { }, ], name: 'gamestop', + country: 'US', successStatusCodes: [[0, 399], 404], }; diff --git a/src/store/model/globaldata.ts b/src/store/model/globaldata.ts index 00ee86ce4f..88ccdbb0c8 100644 --- a/src/store/model/globaldata.ts +++ b/src/store/model/globaldata.ts @@ -497,5 +497,6 @@ export const Globaldata: Store = { }, ], name: 'globaldata', + country: 'PT', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/hardware-planet.ts b/src/store/model/hardware-planet.ts index 0c3d8611dd..e2dbddc49b 100644 --- a/src/store/model/hardware-planet.ts +++ b/src/store/model/hardware-planet.ts @@ -1,5 +1,5 @@ -import {Store} from './store'; import {getProductLinksBuilder} from './helpers/card'; +import {Store} from './store'; export const HardwarePlanet: Store = { backoffStatusCodes: [404, 429, 503], @@ -82,5 +82,6 @@ export const HardwarePlanet: Store = { ], }, name: 'hardware-planet', + country: 'IT', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/harristechnology.ts b/src/store/model/harristechnology.ts index 707f466343..3b862655a3 100644 --- a/src/store/model/harristechnology.ts +++ b/src/store/model/harristechnology.ts @@ -48,4 +48,5 @@ export const HarrisTechnology: Store = { }, ], name: 'harristechnology', + country: 'AU', }; diff --git a/src/store/model/harveynorman-ie.ts b/src/store/model/harveynorman-ie.ts index 511364f405..99ac9fae1b 100644 --- a/src/store/model/harveynorman-ie.ts +++ b/src/store/model/harveynorman-ie.ts @@ -25,5 +25,6 @@ export const HarveyNormanIE: Store = { }, ], name: 'harveynorman-ie', + country: 'IE', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/igame.ts b/src/store/model/igame.ts index 66de3fef94..ba08479815 100644 --- a/src/store/model/igame.ts +++ b/src/store/model/igame.ts @@ -82,4 +82,5 @@ export const Igamecomputer: Store = { }, ], name: 'igame-computer', + country: 'AU', }; diff --git a/src/store/model/index.ts b/src/store/model/index.ts index f7a653fe8b..dce24943a3 100644 --- a/src/store/model/index.ts +++ b/src/store/model/index.ts @@ -1,8 +1,6 @@ import {config, defaultStoreData} from '../../config'; + import {AComPC} from './acompc'; -import {Ldlc} from './ldlc'; -import {LdlcEs} from './ldlc-es'; -import {Materiel} from './materiel'; import {Adorama} from './adorama'; import {Akinformatica} from './akinformatica'; import {Allneeds} from './allneeds'; @@ -92,17 +90,21 @@ import {Igamecomputer} from './igame'; import {JohnLewis} from './johnlewis'; import {Kabum} from './kabum'; import {KomplettNO} from './komplett-no'; -import {LandmarkComputers} from './lmc'; +import {Ldlc} from './ldlc'; +import {LdlcEs} from './ldlc-es'; import {LDLCItaly} from './ldlc-italy'; +import {LandmarkComputers} from './lmc'; +import {Materiel} from './materiel'; import {Mediamarkt} from './mediamarkt'; import {MediamarktAt} from './mediamarkt-at'; import {Medimax} from './medimax'; import {Megekko} from './megekko'; import {MemoryExpress} from './memoryexpress'; import {MicroCenter} from './microcenter'; +import {Microsoft} from './microsoft'; +import {MicrosoftCA} from './microsoft-ca'; import {MightyApe} from './mightyape'; import {Mindfactory} from './mindfactory'; -import {Microsoft} from './microsoft'; import {Msy} from './msy'; import {Multicom} from './multicom'; import {Mwave} from './mwave'; @@ -157,6 +159,7 @@ import {ToysRUs} from './toysrus'; import {Ubiquiti} from './ubiquiti'; import {Umart} from './umart'; import {Unieuro} from './unieuro'; +import {UltimaInformatica} from './utlimainformatica'; import {Very} from './very'; import {VsGamers} from './vsgamers'; import {Vuugo} from './vuugo'; @@ -165,12 +168,11 @@ import {WalmartCa} from './walmart-ca'; import {WellsTechnology} from './wellstechnology'; import {Wipoid} from './wipoid'; import {Xbox} from './xbox'; +import {XtremMedia} from './xtremmedia'; import {Zotac} from './zotac'; -import {logger} from '../../logger'; + import chalk from 'chalk'; -import {UltimaInformatica} from './utlimainformatica'; -import {XtremMedia} from './xtremmedia'; -import {MicrosoftCA} from './microsoft-ca'; +import {logger} from '../../logger'; export const storeList = new Map([ [AComPC.name, AComPC], @@ -264,17 +266,17 @@ export const storeList = new Map([ [Kabum.name, Kabum], [KomplettNO.name, KomplettNO], [LandmarkComputers.name, LandmarkComputers], + [Ldlc.name, Ldlc], + [LdlcEs.name, LdlcEs], [LDLCItaly.name, LDLCItaly], + [Materiel.name, Materiel], [Mediamarkt.name, Mediamarkt], [MediamarktAt.name, MediamarktAt], [Medimax.name, Medimax], [Megekko.name, Megekko], - [Microsoft.name, Microsoft], - [Ldlc.name, Ldlc], - [LdlcEs.name, LdlcEs], - [Materiel.name, Materiel], [MemoryExpress.name, MemoryExpress], [MicroCenter.name, MicroCenter], + [Microsoft.name, Microsoft], [MicrosoftCA.name, MicrosoftCA], [MightyApe.name, MightyApe], [Mindfactory.name, Mindfactory], @@ -328,10 +330,10 @@ export const storeList = new Map([ [TheWarehouse.name, TheWarehouse], [TopAchat.name, TopAchat], [ToysRUs.name, ToysRUs], - [Umart.name, Umart], [Ubiquiti.name, Ubiquiti], - [Unieuro.name, Unieuro], [UltimaInformatica.name, UltimaInformatica], + [Umart.name, Umart], + [Unieuro.name, Unieuro], [Very.name, Very], [VsGamers.name, VsGamers], [Vuugo.name, Vuugo], @@ -471,6 +473,14 @@ export function getAllModels() { return [...models]; } +export function getAllCountries() { + return Array.from( + new Set( + [...storeList].map(storeInfo => storeInfo[1]).map(store => store.country) + ) + ).sort(); +} + export function getStores() { return stores; } diff --git a/src/store/model/johnlewis.ts b/src/store/model/johnlewis.ts index e439df205c..7b8bfe5a29 100644 --- a/src/store/model/johnlewis.ts +++ b/src/store/model/johnlewis.ts @@ -23,4 +23,5 @@ export const JohnLewis: Store = { }, ], name: 'johnlewis', + country: 'UK', }; diff --git a/src/store/model/kabum.ts b/src/store/model/kabum.ts index 917958f381..36de0fa940 100644 --- a/src/store/model/kabum.ts +++ b/src/store/model/kabum.ts @@ -169,4 +169,5 @@ export const Kabum: Store = { }, ], name: 'kabum', + country: 'BR', }; diff --git a/src/store/model/komplett-no.ts b/src/store/model/komplett-no.ts index 74168c5233..4e2cb17399 100644 --- a/src/store/model/komplett-no.ts +++ b/src/store/model/komplett-no.ts @@ -756,4 +756,5 @@ export const KomplettNO: Store = { }, ], name: 'komplett-no', + country: 'NO', }; diff --git a/src/store/model/ldlc-es.ts b/src/store/model/ldlc-es.ts index a96d84d4bc..a112910ce0 100644 --- a/src/store/model/ldlc-es.ts +++ b/src/store/model/ldlc-es.ts @@ -895,4 +895,5 @@ export const LdlcEs: Store = { }, ], name: 'ldlc-es', + country: 'ES', }; diff --git a/src/store/model/ldlc-italy.ts b/src/store/model/ldlc-italy.ts index 7af1d914ae..068ffe0eff 100644 --- a/src/store/model/ldlc-italy.ts +++ b/src/store/model/ldlc-italy.ts @@ -1,5 +1,5 @@ -import {Store} from './store'; import {getProductLinksBuilder} from './helpers/card'; +import {Store} from './store'; export const LDLCItaly: Store = { currency: '€', @@ -78,5 +78,6 @@ export const LDLCItaly: Store = { }, ], }, - name: 'ldlc-italy', + name: 'ldlc-it', + country: 'IT', }; diff --git a/src/store/model/ldlc.ts b/src/store/model/ldlc.ts index db359b1da7..d04772fd96 100644 --- a/src/store/model/ldlc.ts +++ b/src/store/model/ldlc.ts @@ -265,4 +265,5 @@ export const Ldlc: Store = { }, ], name: 'ldlc', + country: 'FR', }; diff --git a/src/store/model/lmc.ts b/src/store/model/lmc.ts index 56d7cf4326..084bf93cab 100644 --- a/src/store/model/lmc.ts +++ b/src/store/model/lmc.ts @@ -32,4 +32,5 @@ export const LandmarkComputers: Store = { }, ], name: 'landmark-computers', + country: 'AU', }; diff --git a/src/store/model/materiel.ts b/src/store/model/materiel.ts index 410af81fc8..0f4025040a 100644 --- a/src/store/model/materiel.ts +++ b/src/store/model/materiel.ts @@ -727,4 +727,5 @@ export const Materiel: Store = { }, ], name: 'materiel', + country: 'FR', }; diff --git a/src/store/model/mediamarkt-at.ts b/src/store/model/mediamarkt-at.ts index 177f6fb409..85221583d6 100644 --- a/src/store/model/mediamarkt-at.ts +++ b/src/store/model/mediamarkt-at.ts @@ -90,4 +90,5 @@ export const MediamarktAt: Store = { }, ], name: 'mediamarkt-at', + country: 'AT', }; diff --git a/src/store/model/mediamarkt.ts b/src/store/model/mediamarkt.ts index d25eef581e..6171b8fe6f 100644 --- a/src/store/model/mediamarkt.ts +++ b/src/store/model/mediamarkt.ts @@ -432,4 +432,5 @@ export const Mediamarkt: Store = { }, ], name: 'mediamarkt', + country: 'DE', }; diff --git a/src/store/model/medimax.ts b/src/store/model/medimax.ts index 8de0f7fb93..430168fd19 100644 --- a/src/store/model/medimax.ts +++ b/src/store/model/medimax.ts @@ -43,4 +43,5 @@ export const Medimax: Store = { }, ], name: 'medimax', + country: 'DE', }; diff --git a/src/store/model/megekko.ts b/src/store/model/megekko.ts index 85e285b72f..2abb66afe3 100644 --- a/src/store/model/megekko.ts +++ b/src/store/model/megekko.ts @@ -157,4 +157,5 @@ export const Megekko: Store = { }, ], name: 'megekko', + country: 'NL', }; diff --git a/src/store/model/memoryexpress.ts b/src/store/model/memoryexpress.ts index 6d6ea3ea8d..af288341c2 100644 --- a/src/store/model/memoryexpress.ts +++ b/src/store/model/memoryexpress.ts @@ -504,5 +504,6 @@ export const MemoryExpress: Store = { }, ], name: 'memoryexpress', + country: 'CA', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/microcenter.ts b/src/store/model/microcenter.ts index fd48e8d7e4..712217677e 100644 --- a/src/store/model/microcenter.ts +++ b/src/store/model/microcenter.ts @@ -474,4 +474,5 @@ export const MicroCenter: Store = { }, links, name: 'microcenter', + country: 'US', }; diff --git a/src/store/model/microsoft-ca.ts b/src/store/model/microsoft-ca.ts index 288e7acf14..69cee6f1d3 100644 --- a/src/store/model/microsoft-ca.ts +++ b/src/store/model/microsoft-ca.ts @@ -33,4 +33,5 @@ export const MicrosoftCA: Store = { }, ], name: 'microsoft-ca', + country: 'CA', }; diff --git a/src/store/model/microsoft.ts b/src/store/model/microsoft.ts index dc33d83db3..a28b6b7456 100644 --- a/src/store/model/microsoft.ts +++ b/src/store/model/microsoft.ts @@ -33,4 +33,5 @@ export const Microsoft: Store = { }, ], name: 'microsoft', + country: 'US', }; diff --git a/src/store/model/mightyape.ts b/src/store/model/mightyape.ts index 593f3d833a..6248540b0a 100644 --- a/src/store/model/mightyape.ts +++ b/src/store/model/mightyape.ts @@ -43,4 +43,5 @@ export const MightyApe: Store = { }, ], name: 'mightyape', + country: 'NZ', }; diff --git a/src/store/model/mindfactory.ts b/src/store/model/mindfactory.ts index 96665b7b60..335ba861f5 100644 --- a/src/store/model/mindfactory.ts +++ b/src/store/model/mindfactory.ts @@ -262,4 +262,5 @@ export const Mindfactory: Store = { // #endregion ], name: 'mindfactory', + country: 'DE', }; diff --git a/src/store/model/msy.ts b/src/store/model/msy.ts index 32e1013deb..59d6c9db57 100644 --- a/src/store/model/msy.ts +++ b/src/store/model/msy.ts @@ -166,4 +166,5 @@ export const Msy: Store = { }, ], name: 'msy', + country: 'AU', }; diff --git a/src/store/model/multicom.ts b/src/store/model/multicom.ts index b78f49dfa8..8087cf01ec 100644 --- a/src/store/model/multicom.ts +++ b/src/store/model/multicom.ts @@ -394,4 +394,5 @@ export const Multicom: Store = { }, ], name: 'multicom', + country: 'NO', }; diff --git a/src/store/model/mwave.ts b/src/store/model/mwave.ts index 4171585795..7c7a2cc798 100644 --- a/src/store/model/mwave.ts +++ b/src/store/model/mwave.ts @@ -166,4 +166,5 @@ export const Mwave: Store = { }, ], name: 'mwave', + country: 'AU', }; diff --git a/src/store/model/neobyte.ts b/src/store/model/neobyte.ts index 4530e7f8e5..6d8b89671c 100644 --- a/src/store/model/neobyte.ts +++ b/src/store/model/neobyte.ts @@ -330,4 +330,5 @@ export const NeoByte: Store = { }, ], name: 'neobyte', + country: 'ES', }; diff --git a/src/store/model/netonnet-no.ts b/src/store/model/netonnet-no.ts index 676502c733..cf304dcb60 100644 --- a/src/store/model/netonnet-no.ts +++ b/src/store/model/netonnet-no.ts @@ -271,4 +271,5 @@ export const NetonnetNO: Store = { }, ], name: 'netonnet-no', + country: 'NO', }; diff --git a/src/store/model/newegg-ca.ts b/src/store/model/newegg-ca.ts index 45def07ff6..0d6c874d6a 100644 --- a/src/store/model/newegg-ca.ts +++ b/src/store/model/newegg-ca.ts @@ -1007,6 +1007,7 @@ export const NeweggCa: Store = { }, ], name: 'newegg-ca', + country: 'CA', realTimeInventoryLookup: async (itemNumber: string) => { const request_url = 'https://www.newegg.ca/product/api/ProductRealtime?ItemNumber=' + diff --git a/src/store/model/newegg-sg.ts b/src/store/model/newegg-sg.ts index 088a84cde3..aac7753fb7 100644 --- a/src/store/model/newegg-sg.ts +++ b/src/store/model/newegg-sg.ts @@ -1122,6 +1122,7 @@ export const NeweggSg: Store = { }, ], name: 'newegg-sg', + country: 'SG', realTimeInventoryLookup: async (itemNumber: string) => { const request_url = 'https://www.newegg.com/global/sg-en/product/api/ProductRealtime?ItemNumber=' + diff --git a/src/store/model/newegg.ts b/src/store/model/newegg.ts index e660969a17..9e0cec94c4 100644 --- a/src/store/model/newegg.ts +++ b/src/store/model/newegg.ts @@ -1,5 +1,5 @@ -import {Store} from './store'; import fetch from 'node-fetch'; +import {Store} from './store'; export const Newegg: Store = { currency: '$', @@ -1808,6 +1808,7 @@ export const Newegg: Store = { }, ], name: 'newegg', + country: 'US', realTimeInventoryLookup: async (itemNumber: string) => { const request_url = 'https://www.newegg.com/product/api/ProductRealtime?ItemNumber=' + diff --git a/src/store/model/noelleeming.ts b/src/store/model/noelleeming.ts index 660714c758..5545236b9f 100644 --- a/src/store/model/noelleeming.ts +++ b/src/store/model/noelleeming.ts @@ -38,4 +38,5 @@ export const NoelLeeming: Store = { }, ], name: 'noelleeming', + country: 'NZ', }; diff --git a/src/store/model/notebooksbilliger.ts b/src/store/model/notebooksbilliger.ts index 5a92013115..778cb7f823 100644 --- a/src/store/model/notebooksbilliger.ts +++ b/src/store/model/notebooksbilliger.ts @@ -280,4 +280,5 @@ export const Notebooksbilliger: Store = { }, ], name: 'notebooksbilliger', + country: 'DE', }; diff --git a/src/store/model/novatech.ts b/src/store/model/novatech.ts index 04efad8444..525e3bc980 100644 --- a/src/store/model/novatech.ts +++ b/src/store/model/novatech.ts @@ -85,5 +85,6 @@ export const Novatech: Store = { ], }, name: 'novatech', + country: 'UK', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/novoatalho.ts b/src/store/model/novoatalho.ts index db5e9ac93c..3837529787 100644 --- a/src/store/model/novoatalho.ts +++ b/src/store/model/novoatalho.ts @@ -184,5 +184,6 @@ export const NovoAtalho: Store = { }, ], name: 'novoatalho', + country: 'PT', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/nvidia-de.ts b/src/store/model/nvidia-de.ts index d2d80e8642..e8de308d1c 100644 --- a/src/store/model/nvidia-de.ts +++ b/src/store/model/nvidia-de.ts @@ -57,4 +57,5 @@ export const NvidiaDE: Store = { }, ], name: 'nvidia-de', + country: 'DE', }; diff --git a/src/store/model/nvidia-es.ts b/src/store/model/nvidia-es.ts index 3af5e49313..cc1125c4f4 100644 --- a/src/store/model/nvidia-es.ts +++ b/src/store/model/nvidia-es.ts @@ -57,4 +57,5 @@ export const NvidiaES: Store = { }, ], name: 'nvidia-es', + country: 'ES', }; diff --git a/src/store/model/nvidia-fr.ts b/src/store/model/nvidia-fr.ts index 6ea3745211..b236c50446 100644 --- a/src/store/model/nvidia-fr.ts +++ b/src/store/model/nvidia-fr.ts @@ -57,4 +57,5 @@ export const NvidiaFR: Store = { }, ], name: 'nvidia-fr', + country: 'FR', }; diff --git a/src/store/model/nvidia-gb.ts b/src/store/model/nvidia-gb.ts index 2612b35725..52a460939d 100644 --- a/src/store/model/nvidia-gb.ts +++ b/src/store/model/nvidia-gb.ts @@ -57,4 +57,5 @@ export const NvidiaGB: Store = { }, ], name: 'nvidia-gb', + country: 'UK', }; diff --git a/src/store/model/officedepot.ts b/src/store/model/officedepot.ts index efa80b7378..2cb4b7ff81 100644 --- a/src/store/model/officedepot.ts +++ b/src/store/model/officedepot.ts @@ -43,4 +43,5 @@ export const OfficeDepot: Store = { }, ], name: 'officedepot', + country: 'US', }; diff --git a/src/store/model/ollo.ts b/src/store/model/ollo.ts index d2ce098e52..efe1286154 100644 --- a/src/store/model/ollo.ts +++ b/src/store/model/ollo.ts @@ -143,4 +143,5 @@ export const Ollo: Store = { }, ], name: 'ollo', + country: 'IT', }; diff --git a/src/store/model/opirata.ts b/src/store/model/opirata.ts index a4d4734963..64613d0b80 100644 --- a/src/store/model/opirata.ts +++ b/src/store/model/opirata.ts @@ -218,4 +218,5 @@ export const Opirata: Store = { }, ], name: 'opirata', + country: 'ES', }; diff --git a/src/store/model/otto.ts b/src/store/model/otto.ts index 05614122c6..a1f75347c9 100644 --- a/src/store/model/otto.ts +++ b/src/store/model/otto.ts @@ -93,4 +93,5 @@ export const Otto: Store = { }, ], name: 'otto', + country: 'DE', }; diff --git a/src/store/model/overclockers.ts b/src/store/model/overclockers.ts index 30eca26253..bce0cca246 100644 --- a/src/store/model/overclockers.ts +++ b/src/store/model/overclockers.ts @@ -96,5 +96,6 @@ export const Overclockers: Store = { ], }, name: 'overclockers', + country: 'UK', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/pbtech.ts b/src/store/model/pbtech.ts index abe9b0807b..d1ee2179fe 100644 --- a/src/store/model/pbtech.ts +++ b/src/store/model/pbtech.ts @@ -70,4 +70,5 @@ export const PBTech: Store = { }, ], name: 'pbtech', + country: 'AU', }; diff --git a/src/store/model/pcbyte.ts b/src/store/model/pcbyte.ts index 04a693a41f..818f9101ed 100644 --- a/src/store/model/pcbyte.ts +++ b/src/store/model/pcbyte.ts @@ -212,4 +212,5 @@ export const PCByte: Store = { }, ], name: 'pcbyte', + country: 'AU', }; diff --git a/src/store/model/pccg.ts b/src/store/model/pccg.ts index 8659255655..b383f904ab 100644 --- a/src/store/model/pccg.ts +++ b/src/store/model/pccg.ts @@ -124,4 +124,5 @@ export const Pccg: Store = { }, ], name: 'pccg', + country: 'AU', }; diff --git a/src/store/model/pccomponentes.ts b/src/store/model/pccomponentes.ts index d04a088ab9..d209f20367 100644 --- a/src/store/model/pccomponentes.ts +++ b/src/store/model/pccomponentes.ts @@ -526,4 +526,5 @@ export const PCComponentes: Store = { }, ], name: 'pccomponentes', + country: 'ES', }; diff --git a/src/store/model/pcdiga.ts b/src/store/model/pcdiga.ts index fa128ef9eb..d287afb954 100644 --- a/src/store/model/pcdiga.ts +++ b/src/store/model/pcdiga.ts @@ -487,5 +487,6 @@ export const PCDiga: Store = { }, ], name: 'pcdiga', + country: 'PT', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/pcking.ts b/src/store/model/pcking.ts index 0ae06a57f0..213e5d6b16 100644 --- a/src/store/model/pcking.ts +++ b/src/store/model/pcking.ts @@ -249,4 +249,5 @@ export const PCKing: Store = { }, ], name: 'pcking', + country: 'DE', }; diff --git a/src/store/model/playstation.ts b/src/store/model/playstation.ts index fbf0ea6ccc..5086c2a8fc 100644 --- a/src/store/model/playstation.ts +++ b/src/store/model/playstation.ts @@ -43,6 +43,7 @@ export const PlayStation: Store = { }, ], name: 'playstation', + country: 'US', realTimeInventoryLookup: async (itemNumber: string) => { const request_url = 'https://api.direct.playstation.com/commercewebservices/ps-direct-us/products/productList?fields=BASIC&productCodes=' + diff --git a/src/store/model/pny.ts b/src/store/model/pny.ts index 560d44db3b..68bf157e99 100644 --- a/src/store/model/pny.ts +++ b/src/store/model/pny.ts @@ -189,6 +189,7 @@ export const Pny: Store = { }, ], name: 'pny', + country: 'US', }; /* Copy Paste Template diff --git a/src/store/model/power-no.ts b/src/store/model/power-no.ts index b6bb6350a1..c6409607c8 100644 --- a/src/store/model/power-no.ts +++ b/src/store/model/power-no.ts @@ -419,4 +419,5 @@ export const PowerNO: Store = { }, ], name: 'power-no', + country: 'NO', }; diff --git a/src/store/model/proshop-de.ts b/src/store/model/proshop-de.ts index 9bb5137737..c4c47fbe05 100644 --- a/src/store/model/proshop-de.ts +++ b/src/store/model/proshop-de.ts @@ -410,4 +410,5 @@ export const ProshopDE: Store = { }, ], name: 'proshop-de', + country: 'DE', }; diff --git a/src/store/model/proshop-dk.ts b/src/store/model/proshop-dk.ts index 204bec44d2..e95bf1f76d 100644 --- a/src/store/model/proshop-dk.ts +++ b/src/store/model/proshop-dk.ts @@ -626,4 +626,5 @@ export const ProshopDK: Store = { }, ], name: 'proshop-dk', + country: 'DK', }; diff --git a/src/store/model/proshop-no.ts b/src/store/model/proshop-no.ts index 124a4b8d89..ea66f95277 100644 --- a/src/store/model/proshop-no.ts +++ b/src/store/model/proshop-no.ts @@ -706,4 +706,5 @@ export const ProshopNO: Store = { }, ], name: 'proshop-no', + country: 'NO', }; diff --git a/src/store/model/rosman-melb.ts b/src/store/model/rosman-melb.ts index 47ff5c7827..0a38c173c5 100644 --- a/src/store/model/rosman-melb.ts +++ b/src/store/model/rosman-melb.ts @@ -112,4 +112,5 @@ export const RosmanMelb: Store = { }, ], name: 'rosman-melb', + country: 'AU', }; diff --git a/src/store/model/rosman.ts b/src/store/model/rosman.ts index 7e3b4410e2..d4763d8f21 100644 --- a/src/store/model/rosman.ts +++ b/src/store/model/rosman.ts @@ -112,4 +112,5 @@ export const Rosman: Store = { }, ], name: 'rosman', + country: 'AU', }; diff --git a/src/store/model/saturn.ts b/src/store/model/saturn.ts index d7611f1ff3..a0f3bd3e7f 100644 --- a/src/store/model/saturn.ts +++ b/src/store/model/saturn.ts @@ -360,4 +360,5 @@ export const Saturn: Store = { }, ], name: 'saturn', + country: 'DE', }; diff --git a/src/store/model/saveonit.ts b/src/store/model/saveonit.ts index ee6bbcd2e7..50272f150b 100644 --- a/src/store/model/saveonit.ts +++ b/src/store/model/saveonit.ts @@ -164,4 +164,5 @@ export const SaveOnIt: Store = { }, ], name: 'saveonit', + country: 'AU', }; diff --git a/src/store/model/scan.ts b/src/store/model/scan.ts index 9d8e0f5ee4..008a656079 100644 --- a/src/store/model/scan.ts +++ b/src/store/model/scan.ts @@ -114,5 +114,6 @@ export const Scan: Store = { ], }, name: 'scan', + country: 'UK', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/scorptec.ts b/src/store/model/scorptec.ts index 7a4ab9964b..9fd630875b 100644 --- a/src/store/model/scorptec.ts +++ b/src/store/model/scorptec.ts @@ -172,4 +172,5 @@ export const Scorptec: Store = { }, ], name: 'scorptec', + country: 'AU', }; diff --git a/src/store/model/shopto.ts b/src/store/model/shopto.ts index a762bd335a..fce0349793 100644 --- a/src/store/model/shopto.ts +++ b/src/store/model/shopto.ts @@ -29,4 +29,5 @@ export const ShopTo: Store = { }, ], name: 'shopto', + country: 'UK', }; diff --git a/src/store/model/siabyte.ts b/src/store/model/siabyte.ts index f931f7e6e6..5fc3ad09e3 100644 --- a/src/store/model/siabyte.ts +++ b/src/store/model/siabyte.ts @@ -335,4 +335,5 @@ export const Siabyte: Store = { }, ], name: 'siabyte', + country: 'ES', }; diff --git a/src/store/model/smythstoys-ie.ts b/src/store/model/smythstoys-ie.ts index 8b938d2696..988b39aaf4 100644 --- a/src/store/model/smythstoys-ie.ts +++ b/src/store/model/smythstoys-ie.ts @@ -32,5 +32,6 @@ export const SmythsToysIE: Store = { }, ], name: 'smythstoys-ie', + country: 'IE', waitUntil: 'domcontentloaded', }; diff --git a/src/store/model/smythstoys.ts b/src/store/model/smythstoys.ts index fc033e238a..e0d46ecd56 100644 --- a/src/store/model/smythstoys.ts +++ b/src/store/model/smythstoys.ts @@ -37,4 +37,5 @@ export const SmythsToys: Store = { }, ], name: 'smythstoys', + country: 'UK', }; diff --git a/src/store/model/spielegrotte.ts b/src/store/model/spielegrotte.ts index 26f95cffcf..c4178223b2 100644 --- a/src/store/model/spielegrotte.ts +++ b/src/store/model/spielegrotte.ts @@ -42,4 +42,5 @@ export const Spielegrotte: Store = { }, ], name: 'spielegrotte', + country: 'DE', }; diff --git a/src/store/model/store.ts b/src/store/model/store.ts index 986d51b612..57501f4ec6 100644 --- a/src/store/model/store.ts +++ b/src/store/model/store.ts @@ -16,6 +16,7 @@ export type Brand = | 'amd' | 'asrock' | 'asus' + | 'ax' | 'colorful' | 'corsair' | 'evga' @@ -25,14 +26,13 @@ export type Brand = | 'inno3d' | 'intel' | 'kfa2' - | 'lianli' | 'leadtek' + | 'lianli' | 'microsoft' | 'msi' | 'nvidia' | 'palit' | 'pny' - | 'ax' | 'powercolor' | 'sapphire' | 'sony' @@ -43,8 +43,6 @@ export type Brand = export type Series = | 'test:series' - | 'a3-matx' - | 'arc' | 'captcha-deterrent' | '3050' | '3060' @@ -54,17 +52,18 @@ export type Series = | '3080' | '3080ti' | '3090' - | '4080-12g' | '4080-16g' | '4090' | '5070' | '5070ti' | '5080' | '5090' + | 'a3-matx' + | 'arc' | 'darkhero' | 'g4-doorbell-pro' - | 'rx6800' | 'rx6700xt' + | 'rx6800' | 'rx6800xt' | 'rx6900xt' | 'ryzen5600' @@ -72,23 +71,22 @@ export type Series = | 'ryzen5900' | 'ryzen5950' | 'ryzen7800x3d' + | 'ryzen7950x' | 'ryzen9600x' | 'ryzen9700x' + | 'ryzen9800x3d' | 'ryzen9900x' | 'ryzen9950x' - | 'ryzen9800x3d' - | 'ryzen7950x' - | 'ryzen9800x3d' + | 'sf' | 'sonyps5c' | 'sonyps5de' - | 'sf' | 'udm-pro' | 'udm-us' | 'udr-us' - | 'unvr' | 'unvr-pro' - | 'xboxsx' - | 'xboxss'; + | 'unvr' + | 'xboxss' + | 'xboxsx'; export type Model = | 'test:model' @@ -97,173 +95,167 @@ export type Model = | '5800x' | '5900x' | '5950x' - | '7950x' + | '600 gold' + | '600 platinum' + | '750 platinum' | '7800x3d' + | '7950x' | '9600x' | '9700x' + | '9800x3d' | '9900x' | '9950x' - | '9800x3d' - | '9800x3d' - | '600 platinum' - | '600 gold' - | '750 platinum' | 'a3 matx wd' + | 'aero oc' | 'amd reference' + | 'amp airo' | 'amp extreme airo' | 'amp extreme holo' - | 'amp airo' + | 'amp extreme infinity' | 'amp holo' | 'amp white' - | 'aero oc' - | 'aorus x wb' + | 'aorus box' | 'aorus elite' - | 'aorus master' | 'aorus master 24g' | 'aorus master type-c' - | 'aorus xtreme' - | 'aorus xtreme waterforce' + | 'aorus master' + | 'aorus w' + | 'aorus x wb' | 'aorus xtreme waterforce 24g' | 'aorus xtreme waterforce wb' + | 'aorus xtreme waterforce' + | 'aorus xtreme' | 'aorus' - | 'aorus w' - | 'aorus box' - | 'articstorm' - | 'astral' | 'astral oc' - | 'battle-ax' + | 'astral' | 'b580' - | 'challenger' + | 'battle-ax' | 'challenger oc' - | 'challenger pro' | 'challenger pro oc' + | 'challenger pro' + | 'challenger' | 'crosshair viii' - | 'dream machine' | 'dream machine pro' + | 'dream machine' | 'dream router' | 'dual fan' + | 'dual mini oc' + | 'dual mini' | 'dual oc' | 'dual' - | 'dual mini' - | 'dual mini oc' | 'eagle oc' | 'eagle' | 'ekwb' - | 'epic x' | 'epic x oc' - | 'ex' + | 'epic x' | 'ex gamer' | 'ex oc' + | 'ex' | 'fighter' | 'founders edition' - | 'ftw3' | 'ftw3 black' - | 'ftw3 ultra' | 'ftw3 ultra hybrid' | 'ftw3 ultra hydro copper' + | 'ftw3 ultra' + | 'ftw3' | 'g4 doorbell pro' - | 'gamerock' | 'gamerock oc' - | 'gaming oc' - | 'gaming oc waterforce wb' + | 'gamerock' | 'gaming oc pro' + | 'gaming oc waterforce wb' + | 'gaming oc' | 'gaming pro oc' | 'gaming pro' - | 'gaming trio' - | 'gaming trio oc' | 'gaming trio oc white' + | 'gaming trio oc' + | 'gaming trio' | 'gaming verto epic-x' - | 'gaming z trio' | 'gaming x slim' | 'gaming x trio' | 'gaming x' | 'gaming x3' | 'gaming z trio' - | 'ghost' - | 'ghost oc' | 'gaming' - | 'hellhound' + | 'ghost oc' + | 'ghost' | 'hellhound white' - | 'hof' - | 'hof limited edition' - | 'hof premium' + | 'hellhound' | 'hurricane' | 'ice dragon super' + | 'ichill frostbite' | 'ichill x2' - | 'ichill x3' | 'ichill x3 red' + | 'ichill x3' | 'ichill x4' - | 'ichill frostbite' - | 'igame advanced' | 'igame advanced oc' + | 'igame advanced' | 'igame ultra oc' | 'igame vulcan oc' - | 'amp extreme infinity' - | 'jetstream' | 'jetstream oc' + | 'jetstream' | 'kngpn hybrid' | 'ko oc' | 'ko' | 'master' - | 'mech 2x' | 'mech 2x oc' - | 'merc' + | 'mech 2x' | 'merc core' | 'merc ultra' - | 'network video recorder' + | 'merc' | 'network video recorder pro' - | 'nitro+' - | 'nitro+ se' - | 'nitro+ oc' - | 'nitro+ oc se' + | 'network video recorder' | 'nitro oc se' | 'nitro oc' + | 'nitro+ oc se' + | 'nitro+ oc' + | 'nitro+ se' + | 'nitro+' | 'oc' - | 'pegasus' | 'pegasus oc' - | 'phantom' - | 'phantom gaming' + | 'pegasus' | 'phantom gaming oc' + | 'phantom gaming' | 'phantom gs' + | 'phantom' + | 'phoenix 8G (LHR)' | 'phoenix gs oc' | 'phoenix gs' - | 'phoenix 8G (LHR)' | 'phoenix' - | 'prime' | 'prime oc' + | 'prime' | 'ps5 console' | 'ps5 digital' - | 'pulse' | 'pulse oc' + | 'pulse' | 'qick ultra' + | 'qick' | 'red devil' | 'red dragon' - | 'sf1000' | 'sg oc' | 'sg' - | 'solid' - | 'solid oc' | 'single fan' + | 'solid oc' + | 'solid' | 'stormx oc' | 'strix lc' | 'strix oc lc' - | 'strix oc' - | 'strix' | 'strix oc white' + | 'strix oc' | 'strix white' - | 'suprim' - | 'suprim soc' - | 'suprim liquid x' + | 'strix' | 'suprim liquid soc' + | 'suprim liquid x' + | 'suprim soc' | 'suprim x' + | 'suprim' | 'swft' - | 'taichi' | 'taichi x oc' - | 'trinity oc' + | 'taichi' | 'trinity oc lhr' + | 'trinity oc' | 'trinity' - | 'triple fan' | 'triple fan oc' + | 'triple fan' | 'tuf oc' | 'tuf' | 'turbo' @@ -273,47 +265,44 @@ export type Model = | 'twin x2 oc' | 'twin x2' | 'uprising' + | 'vanguard soc launch edition' | 'vanguard soc' | 'vanguard' - | 'vanguard soc launch edition' + | 'ventus 2X (LHR)' | 'ventus 2x oc' | 'ventus 2x' - | 'ventus 3x oc' | 'ventus 3x oc plus' + | 'ventus 3x oc' | 'ventus 3x' - | 'ventus 2X (LHR)' | 'vetro' | 'vision oc' | 'vision' - | 'windforce' | 'windforce oc' | 'windforce v2' - | 'x3' - | 'x3w' - | 'x3 oc' + | 'windforce' | 'x trio' | 'x3 oc' + | 'x3w' | 'xbox series s' | 'xbox series x' | 'xc black' | 'xc gaming' | 'xc3 black' - | 'xc3 ultra' | 'xc3 ultra hybrid' + | 'xc3 ultra' | 'xc3' - | 'xlr8' | 'xlr8 epic x' - | 'xlr8 gaming' | 'xlr8 gaming uprising epic x' - | 'xlr8 revel' + | 'xlr8 gaming' | 'xlr8 revel epic x' - | 'xlr8 verto epic x' + | 'xlr8 revel' + | 'xlr8 uprising' | 'xlr8 verto epic x oc' + | 'xlr8 verto epic x' | 'xlr8 verto oc' | 'xlr8 verto' - | 'xlr8 uprising' - | 'xtreme' - | 'qick'; + | 'xlr8' + | 'xtreme'; export type Link = { brand: Brand; @@ -374,6 +363,7 @@ export type Store = { }; labels: Labels; name: string; + country: string; currency: '£' | '$' | '€' | 'R$' | 'kr.' | ''; setupAction?: (browser: Browser) => void; /** diff --git a/src/store/model/storm.ts b/src/store/model/storm.ts index c70dc2e137..24ccf26a8e 100644 --- a/src/store/model/storm.ts +++ b/src/store/model/storm.ts @@ -74,4 +74,5 @@ export const StormComputers: Store = { }, ], name: 'storm-computer', + country: 'AU', }; diff --git a/src/store/model/target.ts b/src/store/model/target.ts index 3d43416873..b5ce001627 100644 --- a/src/store/model/target.ts +++ b/src/store/model/target.ts @@ -44,4 +44,5 @@ export const Target: Store = { }, ], name: 'target', + country: 'US', }; diff --git a/src/store/model/tesco-ie.ts b/src/store/model/tesco-ie.ts index 35ec9937e0..7d834a6729 100644 --- a/src/store/model/tesco-ie.ts +++ b/src/store/model/tesco-ie.ts @@ -30,4 +30,5 @@ export const TescoIE: Store = { }, ], name: 'tesco-ie', + country: 'IE', }; diff --git a/src/store/model/thewarehouse.ts b/src/store/model/thewarehouse.ts index ccad3eeaa6..7ea446cf0a 100644 --- a/src/store/model/thewarehouse.ts +++ b/src/store/model/thewarehouse.ts @@ -36,4 +36,5 @@ export const TheWarehouse: Store = { }, ], name: 'thewarehouse', + country: 'NZ', }; diff --git a/src/store/model/topachat.ts b/src/store/model/topachat.ts index a2bebce940..d82949e6cc 100644 --- a/src/store/model/topachat.ts +++ b/src/store/model/topachat.ts @@ -266,4 +266,5 @@ export const TopAchat: Store = { }, ], name: 'topachat', + country: 'GR', }; diff --git a/src/store/model/toysrus.ts b/src/store/model/toysrus.ts index 45a517207b..ad891953f8 100644 --- a/src/store/model/toysrus.ts +++ b/src/store/model/toysrus.ts @@ -44,4 +44,5 @@ export const ToysRUs: Store = { }, ], name: 'toysrus', + country: 'US', }; diff --git a/src/store/model/ubiquiti.ts b/src/store/model/ubiquiti.ts index 97178745c4..b910145fc1 100644 --- a/src/store/model/ubiquiti.ts +++ b/src/store/model/ubiquiti.ts @@ -59,4 +59,5 @@ export const Ubiquiti: Store = { }, ], name: 'ubiquiti', + country: 'US', }; diff --git a/src/store/model/umart.ts b/src/store/model/umart.ts index c01ad65fa9..3aab73678f 100644 --- a/src/store/model/umart.ts +++ b/src/store/model/umart.ts @@ -134,4 +134,5 @@ export const Umart: Store = { }, ], name: 'umart', + country: 'AU', }; diff --git a/src/store/model/unieuro.ts b/src/store/model/unieuro.ts index f6de044a70..07b7ab33b1 100644 --- a/src/store/model/unieuro.ts +++ b/src/store/model/unieuro.ts @@ -39,4 +39,5 @@ export const Unieuro: Store = { }, ], name: 'unieuro', + country: 'IT', }; diff --git a/src/store/model/utlimainformatica.ts b/src/store/model/utlimainformatica.ts index 9ba078a4a1..f6b0cd3b46 100644 --- a/src/store/model/utlimainformatica.ts +++ b/src/store/model/utlimainformatica.ts @@ -747,4 +747,5 @@ export const UltimaInformatica: Store = { }, ], name: 'ultimainformatica', + country: 'ES', }; diff --git a/src/store/model/very.ts b/src/store/model/very.ts index 1bfda1a463..907a2638e4 100644 --- a/src/store/model/very.ts +++ b/src/store/model/very.ts @@ -87,4 +87,5 @@ export const Very: Store = { ], }, name: 'very', + country: 'UK', }; diff --git a/src/store/model/vsgamers.ts b/src/store/model/vsgamers.ts index 03464c9b56..30f3da7fd9 100644 --- a/src/store/model/vsgamers.ts +++ b/src/store/model/vsgamers.ts @@ -345,4 +345,5 @@ export const VsGamers: Store = { }, ], name: 'vsgamers', + country: 'ES', }; diff --git a/src/store/model/vuugo.ts b/src/store/model/vuugo.ts index 483f9fe4ae..0b1b054172 100644 --- a/src/store/model/vuugo.ts +++ b/src/store/model/vuugo.ts @@ -624,4 +624,5 @@ export const Vuugo: Store = { }, ], name: 'vuugo', + country: 'CA', }; diff --git a/src/store/model/walmart-ca.ts b/src/store/model/walmart-ca.ts index f1e077e898..3d81777310 100644 --- a/src/store/model/walmart-ca.ts +++ b/src/store/model/walmart-ca.ts @@ -50,4 +50,5 @@ export const WalmartCa: Store = { }, ], name: 'walmart-ca', + country: 'CA', }; diff --git a/src/store/model/walmart.ts b/src/store/model/walmart.ts index aa37783551..baf986c82f 100644 --- a/src/store/model/walmart.ts +++ b/src/store/model/walmart.ts @@ -74,4 +74,5 @@ export const Walmart: Store = { }, ], name: 'walmart', + country: 'US', }; diff --git a/src/store/model/wellstechnology.ts b/src/store/model/wellstechnology.ts index de82ffa0a5..da0713116f 100644 --- a/src/store/model/wellstechnology.ts +++ b/src/store/model/wellstechnology.ts @@ -69,4 +69,5 @@ export const WellsTechnology: Store = { }, ], name: 'wellstechnology', + country: 'AU', }; diff --git a/src/store/model/wipoid.ts b/src/store/model/wipoid.ts index e6505fa081..076f07dd92 100644 --- a/src/store/model/wipoid.ts +++ b/src/store/model/wipoid.ts @@ -457,4 +457,5 @@ export const Wipoid: Store = { }, ], name: 'wipoid', + country: 'ES', }; diff --git a/src/store/model/xbox.ts b/src/store/model/xbox.ts index 366dce7b2c..87558d1492 100644 --- a/src/store/model/xbox.ts +++ b/src/store/model/xbox.ts @@ -18,4 +18,5 @@ export const Xbox: Store = { }, ], name: 'xbox', + country: 'US', }; diff --git a/src/store/model/xtremmedia.ts b/src/store/model/xtremmedia.ts index 91b23897f8..32190c502f 100644 --- a/src/store/model/xtremmedia.ts +++ b/src/store/model/xtremmedia.ts @@ -461,4 +461,5 @@ export const XtremMedia: Store = { }, ], name: 'xtremmedia', + country: 'ES', }; diff --git a/src/store/model/zotac.ts b/src/store/model/zotac.ts index 2f1a6ef4ee..391056bc84 100644 --- a/src/store/model/zotac.ts +++ b/src/store/model/zotac.ts @@ -152,6 +152,7 @@ export const Zotac: Store = { }, ], name: 'zotac', + country: 'US', }; /* Copy Paste Template diff --git a/src/web/index.ts b/src/web/index.ts index 96b40c9454..beb1ef7246 100644 --- a/src/web/index.ts +++ b/src/web/index.ts @@ -1,15 +1,16 @@ +import {createReadStream, readdir} from 'fs'; import {IncomingMessage, Server, ServerResponse, createServer} from 'http'; +import {isAbsolute, join, normalize, relative} from 'path'; import {config, setConfig} from '../config'; -import {createReadStream, readdir} from 'fs'; +import {logger} from '../logger'; import { getAllBrands, + getAllCountries, getAllModels, getAllSeries, storeList, updateStores, } from '../store/model'; -import {isAbsolute, join, normalize, relative} from 'path'; -import {logger} from '../logger'; const approot = join(__dirname, '../../../'); const webroot = join(approot, './web'); @@ -125,6 +126,9 @@ function handleAPI( case 'stores': sendJSON(response, [...storeList.keys()]); return; + case 'countries': + sendJSON(response, getAllCountries()); + return; case 'brands': sendJSON(response, getAllBrands()); return; diff --git a/test/util.ts b/test/util.ts index 5a02c074a3..44d16ac667 100644 --- a/test/util.ts +++ b/test/util.ts @@ -51,6 +51,7 @@ export function getTestStore(): Store { }, links: storeLinks, name: 'test:name', + country: 'TEST', }; return store; diff --git a/tsconfig.json b/tsconfig.json index ffa97c431c..f902cbc87c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,10 +6,8 @@ "resolveJsonModule": true, "rootDir": ".", // todo: remove - "skipLibCheck": true + "skipLibCheck": true, + "lib": ["DOM", "ES2021"] }, - "include": [ - "src/**/*.ts", - "test/**/*.ts" - ] + "include": ["src/**/*.ts", "test/**/*.ts"] }