Compare commits

...

55 Commits

Author SHA1 Message Date
github-actions[bot] bdd74e5b16 chore: release 3.0.0 (#770)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2020-11-11 23:21:08 -05:00
Cristian 32702929a9 feat(coolmod): add zen 3 (#754) 2020-11-11 23:18:47 -05:00
Jef LeCompte b4de369ca8 docs: add checkout help
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-11 23:17:34 -05:00
Vincent ccb207abeb feat(discord): add cart link to embed (#762) 2020-11-11 23:15:10 -05:00
Jaden VanEckhout 841647c06c fix(walmart): ps5 digital url (#763)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-11 23:13:53 -05:00
HeitorLM 23d061b387 feat(store): support for kabum (amd and rtx 30 series) (#727)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-11 22:25:15 -05:00
Nathan Grebowiec a5249ecc7c feat: add option to disable auto add to cart (#759) 2020-11-11 20:56:45 -05:00
Jef LeCompte 0e730f4203 docs: update verbiage 2020-11-10 23:13:04 -05:00
gabriwong bc8c14c88d docs: add amazon error to faq (#760) 2020-11-10 23:11:34 -05:00
dependabot[bot] 5be33d045f chore(deps-dev): bump @types/puppeteer from 3.0.5 to 5.4.0 (#752)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-10 19:31:42 -05:00
Jef LeCompte d19dd5a404 refactor!: removed duplicated Model
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-10 17:50:43 -05:00
Jef LeCompte b1f1ea6ef0 docs: update README to reflect branches
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-10 17:19:39 -05:00
Jef LeCompte 15e4520213 chore: pipeline changes (#753) 2020-11-10 17:12:20 -05:00
Jef LeCompte 0904253cc6 refactor: add more types to Model, extract Brand
This is prep work for normalizing `Model`

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-10 10:53:24 -05:00
Jef LeCompte 318e626e78 feat: fix metadata in logging, lint prettier, typed Models (#747) 2020-11-10 10:38:14 -05:00
dependabot[bot] 0bf9ba2e18 chore(deps-dev): bump @types/node from 14.14.6 to 14.14.7 (#741)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.6 to 14.14.7.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-10 09:38:04 -05:00
Ben Wu 9f28fe5803 feat(notification): support for multiple phone numbers (#738) 2020-11-10 09:21:54 -05:00
Michael Vendivel ab1fddf20c feat(target): add additional selector for 'ship it' (#737) 2020-11-10 09:00:06 -05:00
BaelfireNightshd ff79d9e70d docs: add zen3 filter to SHOW_ONLY_SERIES (#742) 2020-11-10 08:59:04 -05:00
dependabot[bot] 050fd9faf6 chore(deps): bump nodemailer from 6.4.14 to 6.4.15 (#726)
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 6.4.14 to 6.4.15.
- [Release notes](https://github.com/nodemailer/nodemailer/releases)
- [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodemailer/nodemailer/compare/v6.4.14...v6.4.15)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-10 08:55:53 -05:00
James Hinton 0128718ba7 feat(store): add game store, add ps5 for uk stores (#736) 2020-11-10 08:55:27 -05:00
dependabot[bot] 037056156e chore(deps): bump dorny/paths-filter from v2.5.1 to v2.5.2 (#725)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-10 08:50:50 -05:00
dependabot[bot] d9692c7bbd chore(deps): bump GoogleCloudPlatform/release-please-action from v2.5.7 to v2.6.0 (#724)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-10 08:50:25 -05:00
Garret Picchioni 0754feccae fix(docker): copy web directory (#745) 2020-11-10 08:48:55 -05:00
SolidPIPe e8fd2f7c5b docs: add amd models (#746) 2020-11-10 08:48:09 -05:00
Vinh Nguyen 314f533f0b feat(store): add xbox series x and s (#732)
Co-authored-by: VictorV <velasquez.victor@gmail.com>
Co-authored-by: vinhnguyen <vinh.nguyen@venmo.com>
2020-11-10 08:47:15 -05:00
hiivin 4e086e9267 feat(galaxus): add zen 3 (#729) 2020-11-09 11:31:51 -05:00
Vincent dde9837829 feat(amazon): add more 3070s (#719)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-09 01:20:01 -05:00
serg06 25700567c5 feat(amazon-ca): add ps5 (#713)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-09 01:19:36 -05:00
Omelette Du Fromage c02241c752 feat: memoryexpress website support (#717)
Adding MemoryExpress website in Canada. Only track the online store
stock for now. Might add the stores stock later like microcenter.
Only track Ryzen 5000-series for now because RTX 3000-series is only
available in store backorder.

Co-authored-by: Omelette Du Fromage <lavrenti.rogoff@gmail.com>
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-09 01:18:49 -05:00
hiivin 38937f6880 feat(store): add arlt and amd-de (#721)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-09 01:16:58 -05:00
Jörg Battermann 0362bf8081 feat(mindfactory): add ryzen 5900x, 5950x (#720) 2020-11-09 01:14:16 -05:00
Jef LeCompte 815822f6f8 chore: add CODE_OF_CONDUCT.md 2020-11-07 13:01:47 -05:00
dependabot[bot] f9a6fd025a chore(deps): bump twilio from 3.50.0 to 3.51.0 (#699)
Bumps [twilio](https://github.com/twilio/twilio-node) from 3.50.0 to 3.51.0.
- [Release notes](https://github.com/twilio/twilio-node/releases)
- [Changelog](https://github.com/twilio/twilio-node/blob/main/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-node/compare/3.50.0...3.51.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-07 12:56:32 -05:00
hiivin 2291b8eff5 feat(store): add ps5 to german stores (#715) 2020-11-07 12:55:42 -05:00
Andrew O'Brien 8a459056c5 feat(store): Adds AM3 to microcenter (#707)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-07 12:18:48 -05:00
Jef LeCompte 9320918335 docs: update docker notes
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-07 09:29:49 -05:00
Jef LeCompte 0d14500d5d feat: add production scripts and better Dockerfile
Closes: #710
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-07 09:26:17 -05:00
Michael Vendivel 42ef7cfdce feat(ps5): add console and digital edition (#709) 2020-11-06 16:42:05 -05:00
Nathan Grebowiec 0a680e977b feat: bring back ascii banner, but make it configurable (#703) 2020-11-06 16:39:34 -05:00
Jef LeCompte 19fd6895e7 docs: fix broken table
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-06 11:26:16 -05:00
Jef LeCompte e3fcc70bb3 docs: add philips hue video demo
Refs: https://github.com/jef/streetmerchant/pull/681#issuecomment-722716100
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-06 11:24:46 -05:00
hiivin 71d5cb4261 feat(store): add zen 3 to german stores (#702)
Co-authored-by: Florian Dahlmann <florian.dahlmann@gmx.de>
2020-11-06 09:39:37 -05:00
Jef LeCompte deb17d109f chore(philips-hue): remove unset warnings
Fixes #697

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-06 01:58:52 -05:00
serg06 760ddf5d85 feat(store): add zen 3 to more stores (#698) 2020-11-05 23:27:01 -05:00
Jef LeCompte 5db83484f3 fix: environment variables to match ryzen cpus
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 23:23:35 -05:00
Jef LeCompte 85208c4452 refactor: simplify max price
Ref: https://github.com/jef/streetmerchant/pull/696#issuecomment-722784373
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 23:19:37 -05:00
Nathan Grebowiec df3b10b9a5 feat(amd): add env vars and series filtering (#696)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 22:18:09 -05:00
Matthew c8a9b0ba3e feat(notification): add philips hue (#681)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
Co-authored-by: Nathan Banks <nathantb3@gmail.com>
2020-11-05 18:23:27 -05:00
Jef LeCompte 2955ea70ab fix: revert to 14.15.0 until 15 is stable for tsc
Fixes #691

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 18:04:48 -05:00
Jef LeCompte 7ec2894147 chore: bump node version
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 17:13:39 -05:00
Jef LeCompte 6924f362ba docs: update gif, change location
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 16:30:14 -05:00
Nathan Grebowiec 31a3d8f7e0 feat(amd): add 5950 config (#685) 2020-11-05 16:16:45 -05:00
Jef LeCompte a293f5e747 docs: update gif (#689)
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 16:13:09 -05:00
Jef LeCompte 2d3ea40a59 docs: update banner and readme
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 16:05:50 -05:00
101 changed files with 4195 additions and 1161 deletions
+16
View File
@@ -2,6 +2,9 @@
# Read https://github.com/jef/streetmerchant#customization for help on customizing this file # Read https://github.com/jef/streetmerchant#customization for help on customizing this file
############################################################################################# #############################################################################################
ASCII_BANNER=
ASCII_COLOR=
AUTO_ADD_TO_CART=
BROWSER_TRUSTED= BROWSER_TRUSTED=
COUNTRY= COUNTRY=
DESKTOP_NOTIFICATIONS= DESKTOP_NOTIFICATIONS=
@@ -17,6 +20,10 @@ LOW_BANDWIDTH=
MAX_PRICE_SERIES_3070= MAX_PRICE_SERIES_3070=
MAX_PRICE_SERIES_3080= MAX_PRICE_SERIES_3080=
MAX_PRICE_SERIES_3090= MAX_PRICE_SERIES_3090=
MAX_PRICE_SERIES_RYZEN5600=
MAX_PRICE_SERIES_RYZEN5800=
MAX_PRICE_SERIES_RYZEN5900=
MAX_PRICE_SERIES_RYZEN5950=
MICROCENTER_LOCATION= MICROCENTER_LOCATION=
MQTT_BROKER_ADDRESS= MQTT_BROKER_ADDRESS=
MQTT_BROKER_PORT= MQTT_BROKER_PORT=
@@ -35,6 +42,15 @@ PAGE_SLEEP_MAX=
PAGE_TIMEOUT= PAGE_TIMEOUT=
PAGERDUTY_INTEGRATION_KEY= PAGERDUTY_INTEGRATION_KEY=
PAGERDUTY_SEVERITY= PAGERDUTY_SEVERITY=
PHILIPS_HUE_API_KEY=
PHILIPS_HUE_CLOUD_ACCESS_TOKEN=
PHILIPS_HUE_CLOUD_CLIENT_ID=
PHILIPS_HUE_CLOUD_CLIENT_SECRET=
PHILIPS_HUE_CLOUD_REFRESH_TOKEN=
PHILIPS_HUE_LAN_BRIDGE_IP=
PHILIPS_HUE_LIGHT_COLOR=
PHILIPS_HUE_LIGHT_IDS=
PHILIPS_HUE_LIGHT_PATTERN=
PHONE_CARRIER= PHONE_CARRIER=
PHONE_NUMBER= PHONE_NUMBER=
PLAY_SOUND= PLAY_SOUND=
+18 -11
View File
@@ -3,14 +3,30 @@ on:
push: push:
branches: branches:
- main - main
- develop
paths-ignore: paths-ignore:
- '**.md' - '**.md'
jobs: jobs:
cd: publish-nightly:
if: contains(github.ref, 'develop')
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: GoogleCloudPlatform/release-please-action@v2.5.7 - name: login into github package registry
run: echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin
- name: build nightly docker image
run: |
docker build \
-t "ghcr.io/${GITHUB_REPOSITORY}:${GITHUB_SHA:0:7}" \
-t "ghcr.io/${GITHUB_REPOSITORY}:nightly" .
- name: publish nightly
run: docker push "ghcr.io/${GITHUB_REPOSITORY}"
publish-latest:
if: contains(github.ref, 'main')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: GoogleCloudPlatform/release-please-action@v2.6.0
id: release id: release
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -18,15 +34,6 @@ jobs:
package-name: streetmerchant package-name: streetmerchant
- name: login into github package registry - name: login into github package registry
run: echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin run: echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin
- name: build nightly docker image
if: ${{ ! steps.release.outputs.release_created }}
run: |
docker build \
-t "ghcr.io/${GITHUB_REPOSITORY}:${GITHUB_SHA:0:7}" \
-t "ghcr.io/${GITHUB_REPOSITORY}:nightly" .
- name: publish nightly
if: ${{ ! steps.release.outputs.release_created }}
run: docker push "ghcr.io/${GITHUB_REPOSITORY}"
- name: build latest docker image - name: build latest docker image
if: ${{ steps.release.outputs.release_created }} if: ${{ steps.release.outputs.release_created }}
run: | run: |
+3 -3
View File
@@ -2,7 +2,7 @@ name: ci
on: on:
pull_request: pull_request:
branches: branches:
- main - develop
paths-ignore: paths-ignore:
- '**.md' - '**.md'
jobs: jobs:
@@ -12,7 +12,7 @@ jobs:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: actions/setup-node@v2.1.2 - uses: actions/setup-node@v2.1.2
with: with:
node-version: 14 node-version: 14.15.0
- uses: actions/cache@v2 - uses: actions/cache@v2
with: with:
path: ~/.npm path: ~/.npm
@@ -29,7 +29,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: dorny/paths-filter@v2.5.1 - uses: dorny/paths-filter@v2.5.2
id: filter id: filter
with: with:
filters: | filters: |
+1 -1
View File
@@ -1 +1 @@
15.0.1 14.15.0
+48
View File
@@ -1,5 +1,53 @@
# Changelog # Changelog
## [3.0.0](https://www.github.com/jef/streetmerchant/compare/v2.0.0...v3.0.0) (2020-11-12)
### ⚠ BREAKING CHANGES
* removed duplicated `Model`
### Features
* **amazon:** add more 3070s ([#719](https://www.github.com/jef/streetmerchant/issues/719)) ([dde9837](https://www.github.com/jef/streetmerchant/commit/dde9837829b9d52e43800a2ac826b5dd00f5a744))
* **coolmod:** add zen 3 ([#754](https://www.github.com/jef/streetmerchant/issues/754)) ([3270292](https://www.github.com/jef/streetmerchant/commit/32702929a97236d7dc51aa8f669140bc6d89aa9a))
* **discord:** add cart link to embed ([#762](https://www.github.com/jef/streetmerchant/issues/762)) ([ccb207a](https://www.github.com/jef/streetmerchant/commit/ccb207abeb43b8e85f32c5c0a7a02aa33b5cdd7c))
* **store:** support for kabum (amd and rtx 30 series) ([#727](https://www.github.com/jef/streetmerchant/issues/727)) ([23d061b](https://www.github.com/jef/streetmerchant/commit/23d061b387b540803a81212fee937d4c8c9b17ad))
* add option to disable auto add to cart ([#759](https://www.github.com/jef/streetmerchant/issues/759)) ([a5249ec](https://www.github.com/jef/streetmerchant/commit/a5249ecc7c3acc29a1f9d5285bd77397263cb135))
* fix metadata in logging, lint prettier, typed `Model`s ([#747](https://www.github.com/jef/streetmerchant/issues/747)) ([318e626](https://www.github.com/jef/streetmerchant/commit/318e626e78c18524c4d8624176ccb659c6b6d17c))
* **amazon-ca:** add ps5 ([#713](https://www.github.com/jef/streetmerchant/issues/713)) ([2570056](https://www.github.com/jef/streetmerchant/commit/25700567c57a303a9376351daf015741193350a3))
* **amd:** add 5950 config ([#685](https://www.github.com/jef/streetmerchant/issues/685)) ([31a3d8f](https://www.github.com/jef/streetmerchant/commit/31a3d8f7e068a17c72e0c296e176b93625bf9063))
* **amd:** add env vars and series filtering ([#696](https://www.github.com/jef/streetmerchant/issues/696)) ([df3b10b](https://www.github.com/jef/streetmerchant/commit/df3b10b9a5c2467e00cacb3ab93f818aafc95f02))
* **galaxus:** add zen 3 ([#729](https://www.github.com/jef/streetmerchant/issues/729)) ([4e086e9](https://www.github.com/jef/streetmerchant/commit/4e086e92675df97fe7f94c4e6d51b73d63e7effb))
* **mindfactory:** add ryzen 5900x, 5950x ([#720](https://www.github.com/jef/streetmerchant/issues/720)) ([0362bf8](https://www.github.com/jef/streetmerchant/commit/0362bf808198d47e6aaa4a4838251f870d6dce4a))
* **notification:** add philips hue ([#681](https://www.github.com/jef/streetmerchant/issues/681)) ([c8a9b0b](https://www.github.com/jef/streetmerchant/commit/c8a9b0ba3ed581a9fef7ee2b459b1de84d976ff0))
* **notification:** support for multiple phone numbers ([#738](https://www.github.com/jef/streetmerchant/issues/738)) ([9f28fe5](https://www.github.com/jef/streetmerchant/commit/9f28fe5803fc71bf64d303cd1e7d20d0be8fecac))
* **ps5:** add console and digital edition ([#709](https://www.github.com/jef/streetmerchant/issues/709)) ([42ef7cf](https://www.github.com/jef/streetmerchant/commit/42ef7cfdced8ae3bc4192e245469798324bc42d3))
* **store:** add `arlt` and `amd-de` ([#721](https://www.github.com/jef/streetmerchant/issues/721)) ([38937f6](https://www.github.com/jef/streetmerchant/commit/38937f6880fcffb3a56ef17acd278f7c2f8d251c))
* **store:** add `game` store, add ps5 for uk stores ([#736](https://www.github.com/jef/streetmerchant/issues/736)) ([0128718](https://www.github.com/jef/streetmerchant/commit/0128718ba76b0c431d790cea7dd2183d10a02278))
* **store:** add ps5 to german stores ([#715](https://www.github.com/jef/streetmerchant/issues/715)) ([2291b8e](https://www.github.com/jef/streetmerchant/commit/2291b8eff5b23613d1233cc4c3ead83a42286d85))
* **store:** add xbox series x and s ([#732](https://www.github.com/jef/streetmerchant/issues/732)) ([314f533](https://www.github.com/jef/streetmerchant/commit/314f533f0bab0a466a276c5895d2f00bf86741f4))
* **store:** add zen 3 to german stores ([#702](https://www.github.com/jef/streetmerchant/issues/702)) ([71d5cb4](https://www.github.com/jef/streetmerchant/commit/71d5cb426179f5e587adeba1ec60f9a9233ec7b6))
* **store:** add zen 3 to more stores ([#698](https://www.github.com/jef/streetmerchant/issues/698)) ([760ddf5](https://www.github.com/jef/streetmerchant/commit/760ddf5d8523e28e294146643dda16e105176dff))
* **store:** Adds AM3 to microcenter ([#707](https://www.github.com/jef/streetmerchant/issues/707)) ([8a45905](https://www.github.com/jef/streetmerchant/commit/8a459056c5ba8a5a90de55cfbb08c4c89ccb19d3))
* **target:** add additional selector for 'ship it' ([#737](https://www.github.com/jef/streetmerchant/issues/737)) ([ab1fddf](https://www.github.com/jef/streetmerchant/commit/ab1fddf20c3a735b746befda0e21462701882645))
* add production scripts and better `Dockerfile` ([0d14500](https://www.github.com/jef/streetmerchant/commit/0d14500d5d8b93204bb99baf34dc9de745ae645d)), closes [#710](https://www.github.com/jef/streetmerchant/issues/710)
* bring back ascii banner, but make it configurable ([#703](https://www.github.com/jef/streetmerchant/issues/703)) ([0a680e9](https://www.github.com/jef/streetmerchant/commit/0a680e977b7904e7f62a8c1c0f3d533329b23fb0))
* memoryexpress website support ([#717](https://www.github.com/jef/streetmerchant/issues/717)) ([c02241c](https://www.github.com/jef/streetmerchant/commit/c02241c7528656c2c2fba9befc36628b4db7befb))
### Bug Fixes
* **docker:** copy web directory ([#745](https://www.github.com/jef/streetmerchant/issues/745)) ([0754fec](https://www.github.com/jef/streetmerchant/commit/0754feccaea2ce2dd37e7caeed3fa0b53c0cdcb3))
* **walmart:** ps5 digital url ([#763](https://www.github.com/jef/streetmerchant/issues/763)) ([841647c](https://www.github.com/jef/streetmerchant/commit/841647c06c488cf6b9d6d6af3c3eb6c8dbadab7e))
* environment variables to match ryzen cpus ([5db8348](https://www.github.com/jef/streetmerchant/commit/5db83484f301d48509205d9d0b5146c5d7114d26))
* revert to 14.15.0 until 15 is stable for `tsc` ([2955ea7](https://www.github.com/jef/streetmerchant/commit/2955ea70ab59c1b0dd82ec506c7a03952f81ea01)), closes [#691](https://www.github.com/jef/streetmerchant/issues/691)
### Code Refactoring
* removed duplicated `Model` ([d19dd5a](https://www.github.com/jef/streetmerchant/commit/d19dd5a404f2a585dd80f4d23d0e3af2d435ae85))
## [2.0.0](https://www.github.com/jef/streetmerchant/compare/v1.7.0...v2.0.0) (2020-11-05) ## [2.0.0](https://www.github.com/jef/streetmerchant/compare/v1.7.0...v2.0.0) (2020-11-05)
+76
View File
@@ -0,0 +1,76 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at jeffreylec@gmail.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
+8 -4
View File
@@ -1,5 +1,6 @@
# Build the source code FROM node:14.15.0-alpine3.12 AS builder
FROM node:15.0.1-alpine3.12 AS builder
LABEL org.opencontainers.image.source=https://github.com/jef/streetmerchant
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
@@ -14,7 +15,7 @@ COPY src/ src/
RUN npm run build RUN npm run build
RUN npm prune --production RUN npm prune --production
FROM node:15.0.1-alpine3.12 FROM node:14.15.0-alpine3.12
RUN apk add --no-cache chromium RUN apk add --no-cache chromium
@@ -32,6 +33,9 @@ WORKDIR /app
COPY --from=builder /build/node_modules/ node_modules/ COPY --from=builder /build/node_modules/ node_modules/
COPY --from=builder /build/build/ build/ COPY --from=builder /build/build/ build/
COPY web/ web/
COPY package.json package.json
COPY version.txt version.txt COPY version.txt version.txt
CMD [ "node", "./build/index.js" ] ENTRYPOINT ["npm", "run"]
CMD ["start:production"]
+69 -16
View File
@@ -1,5 +1,4 @@
<p align="center"><a href="#"><img src="https://raw.githubusercontent.com/jef/streetmerchant/main/media/streetmerchant.png" alt="streetmerchant" /></a></p> <p align="center"><a href="https://github.com/jef/streetmerchant#readme"><img src="https://raw.githubusercontent.com/jef/streetmerchant/main/media/streetmerchant.png" alt="streetmerchant" /></a></p>
<h1 align="center">streetmerchant</h1>
<p align="center">The world's easiest, most powerful stock checker <p align="center">The world's easiest, most powerful stock checker
<br/><br/> <br/><br/>
<a href="https://github.com/jef/streetmerchant/actions?query=workflow%3Aci"><img src="https://github.com/jef/streetmerchant/workflows/ci/badge.svg" /></a> <a href="https://github.com/jef/streetmerchant/actions?query=workflow%3Aci"><img src="https://github.com/jef/streetmerchant/workflows/ci/badge.svg" /></a>
@@ -9,8 +8,7 @@
<a href="https://github.com/jef/streetmerchant#faq">FAQ</a> | <a href="https://github.com/jef/streetmerchant#faq">FAQ</a> |
<a href="https://github.com/jef/streetmerchant/issues">Issues</a> | <a href="https://github.com/jef/streetmerchant/issues">Issues</a> |
<a href="https://github.com/jef/streetmerchant/wiki">Wiki</a> <a href="https://github.com/jef/streetmerchant/wiki">Wiki</a>
<br/><br/> </p>
<a href="https://github.com/jef/streetmerchant#"><img src="https://raw.githubusercontent.com/jef/streetmerchant/main/media/terminal.gif" /></a>
## Features ## Features
@@ -30,9 +28,15 @@ getting `streetmerchant` running!
### Installation: native ### Installation: native
- [Node.js 15](https://nodejs.org/en/) | Branch | Note |
|:---:|---|
| `main` | Latest release; usually tagged, stable |
| `develop` | Latest HEAD; not tagged, could be unstable |
- [Node.js 14](https://nodejs.org/en/)
- [git](https://git-scm.com/) - [git](https://git-scm.com/)
- Clone this project `git clone https://github.com/jef/streetmerchant.git` - Clone this project `git clone https://github.com/jef/streetmerchant.git`
- To checkout a particular branch, use `git checkout <branch name>` after cloning
- Run `npm install` - Run `npm install`
- Copy `.env-example` to a new file `.env` and edit the `.env` file to your liking using - Copy `.env-example` to a new file `.env` and edit the `.env` file to your liking using
your [favorite text editor](https://code.visualstudio.com/) your [favorite text editor](https://code.visualstudio.com/)
@@ -49,10 +53,20 @@ Available via GitHub Container Registry.
| Tag | Note | | Tag | Note |
|:---:|---| |:---:|---|
| `latest` | Latest stable build | | `latest` | Latest release; usually tagged, stable |
| `nightly` | Latest HEAD build, could be unstable | | `nightly` | Latest HEAD; not tagged, could be unstable |
Use `docker run --cap-add=SYS_ADMIN -it --rm --env-file ./.env ghcr.io/jef/streetmerchant:nightly` to run. ```sh
# to run
docker run --cap-add=SYS_ADMIN \
-it --rm --env-file ./.env \
ghcr.io/jef/streetmerchant:nightly
# to test notifications
docker run --cap-add=SYS_ADMIN \
-it --rm --env-file ./.env \
ghcr.io/jef/streetmerchant:nightly test:notification:production
```
### Developer notes ### Developer notes
@@ -71,6 +85,7 @@ environment variables are **optional**._
| Environment variable | Description | Notes | | Environment variable | Description | Notes |
|:---:|---|---| |:---:|---|---|
| `AUTO_ADD_TO_CART` | Enable auto add to cart on support stores | Default: `true` |
| `BROWSER_TRUSTED` | Skip Chromium Sandbox | Useful for containerized environments, default: `false` | | `BROWSER_TRUSTED` | Skip Chromium Sandbox | Useful for containerized environments, default: `false` |
| `HEADLESS` | Puppeteer to run headless or not | Debugging related, default: `true` | | `HEADLESS` | Puppeteer to run headless or not | Debugging related, default: `true` |
| `INCOGNITO` | Puppeteer to run incognito or not | Debugging related, default: `false` | | `INCOGNITO` | Puppeteer to run incognito or not | Debugging related, default: `false` |
@@ -101,12 +116,16 @@ environment variables are **optional**._
| `MAX_PRICE_SERIES_3070` | Maximum price allowed for a match, applies 3070 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - Cards above `1234` will be skipped. | | `MAX_PRICE_SERIES_3070` | Maximum price allowed for a match, applies 3070 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - Cards above `1234` will be skipped. |
| `MAX_PRICE_SERIES_3080` | Maximum price allowed for a match, applies 3080 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - Cards above `1234` will be skipped. | | `MAX_PRICE_SERIES_3080` | Maximum price allowed for a match, applies 3080 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - Cards above `1234` will be skipped. |
| `MAX_PRICE_SERIES_3090` | Maximum price allowed for a match, applies 3090 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - Cards above `1234` will be skipped. | | `MAX_PRICE_SERIES_3090` | Maximum price allowed for a match, applies 3090 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - Cards above `1234` will be skipped. |
| `MAX_PRICE_SERIES_RYZEN5600` | Maximum price allowed for a match, applies AMD 5600 series cpus | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - CPUs above `1234` will be skipped. |
| `MAX_PRICE_SERIES_RYZEN5800` | Maximum price allowed for a match, applies AMD 5800 series cpus | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - CPUs above `1234` will be skipped. |
| `MAX_PRICE_SERIES_RYZEN5900` | Maximum price allowed for a match, applies AMD 5900 series cpus | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - CPUs above `1234` will be skipped. |
| `MAX_PRICE_SERIES_RYZEN5950` | Maximum price allowed for a match, applies AMD 5950 series cpus | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - CPUs above `1234` will be skipped. |
| `MICROCENTER_LOCATION` | Specific MicroCenter location(s) to search | Comma separated, e.g.: `marietta,duluth`, default: `web` | | `MICROCENTER_LOCATION` | Specific MicroCenter location(s) to search | Comma separated, e.g.: `marietta,duluth`, default: `web` |
| `NVIDIA_ADD_TO_CART_ATTEMPTS` | The maximum number of times the `nvidia-api` add to cart feature will be attempted before failing | Default: `10` | | `NVIDIA_ADD_TO_CART_ATTEMPTS` | The maximum number of times the `nvidia-api` add to cart feature will be attempted before failing | Default: `10` |
| `NVIDIA_SESSION_TTL` | The time in milliseconds to keep the cart active while using `nvidia-api` | Default: `60000` | | `NVIDIA_SESSION_TTL` | The time in milliseconds to keep the cart active while using `nvidia-api` | Default: `60000` |
| `SHOW_ONLY_BRANDS` | Filter to show specified brands | Comma separated, e.g.: `evga,zotac` | | `SHOW_ONLY_BRANDS` | Filter to show specified brands | Comma separated, e.g.: `evga,zotac` |
| `SHOW_ONLY_MODELS` | Filter to show specified models | Both supported formats are comma separated <br/><br/>1. Standard E.g.: `founders edition,rog strix` <br/><br/> 2. Advanced E.g: `MODEL:SERIES`, E.g: `founders edition:3090,rog strix` | | `SHOW_ONLY_MODELS` | Filter to show specified models | Both supported formats are comma separated <br/><br/>1. Standard E.g.: `founders edition,rog strix` <br/><br/> 2. Advanced E.g: `MODEL:SERIES`, E.g: `founders edition:3090,rog strix` |
| `SHOW_ONLY_SERIES` | Filter to show specified series | Comma separated, e.g.: `3080` | | `SHOW_ONLY_SERIES` | Filter to show specified series | Comma separated, e.g.: `3080,ryzen5900` |
| `STORES` | [Supported stores](#supported-stores) you want to be scraped | Both supported formats are comma separated <br/><br/>1. Standard E.g.: `"nvidia"` <br/><br/> 2. Advanced E.g: `STORE:PAGE_SLEEP_MIN:PAGE_SLEEP_MAX`, E.g: `nvidia:10000:30000` <br/><br/>Default: `nvidia` | | `STORES` | [Supported stores](#supported-stores) you want to be scraped | Both supported formats are comma separated <br/><br/>1. Standard E.g.: `"nvidia"` <br/><br/> 2. Advanced E.g: `STORE:PAGE_SLEEP_MIN:PAGE_SLEEP_MAX`, E.g: `nvidia:10000:30000` <br/><br/>Default: `nvidia` |
<details> <details>
@@ -125,7 +144,10 @@ environment variables are **optional**._
| Amazon (ES) | `amazon-es`| | Amazon (ES) | `amazon-es`|
| Amazon (NL) | `amazon-nl`| | Amazon (NL) | `amazon-nl`|
| Amazon (UK) | `amazon-uk`| | Amazon (UK) | `amazon-uk`|
| AMD | `amd`|
| AMD (DE) | `amd-de`|
| Aria PC (UK) | `aria`| | Aria PC (UK) | `aria`|
| ARLT (DE) | `arlt`|
| ASUS | `asus` | | ASUS | `asus` |
| ASUS (DE) | `asus-de` | | ASUS (DE) | `asus-de` |
| Azerty (NL) | `azerty`| | Azerty (NL) | `azerty`|
@@ -143,8 +165,12 @@ environment variables are **optional**._
| eBuyer (UK) | `ebuyer`| | eBuyer (UK) | `ebuyer`|
| EVGA | `evga`| | EVGA | `evga`|
| EVGA (EU) | `evga-eu`| | EVGA (EU) | `evga-eu`|
| Galaxus (DE) | `galaxus`|
| Game (UK) | `game`|
| Gamestop | `gamestop`| | Gamestop | `gamestop`|
| Kabum (BR) | `kabum`|
| Mediamarkt (DE) | `mediamarkt`| | Mediamarkt (DE) | `mediamarkt`|
| MemoryExpress (CA) | `memoryexpress`|
| Micro Center | `microcenter`| | Micro Center | `microcenter`|
| Mindfactory (DE) | `mindfactory` | | Mindfactory (DE) | `mindfactory` |
| Newegg | `newegg`| | Newegg | `newegg`|
@@ -161,7 +187,9 @@ environment variables are **optional**._
| Proshop (DK) | `proshop-dk`| | Proshop (DK) | `proshop-dk`|
| Saturn (DE) | `saturn`| | Saturn (DE) | `saturn`|
| Scan (UK) | `scan`| | Scan (UK) | `scan`|
| Target | `target`|
| Very (UK) | `very`| | Very (UK) | `very`|
| Walmart | `walmart`|
| Zotac | `zotac`| | Zotac | `zotac`|
<details> <details>
@@ -210,16 +238,19 @@ environment variables are **optional**._
| Brand | Model | | Brand | Model |
|:---:|---| |:---:|---|
| `asus` | `dual`, `dual oc`, `rog strix`, `rog strix oc`, `tuf`, `tuf oc` | | `amd` | `5600x`, `5800x`, `5900x`, `5950x` |
| `asus` | `dual`, `dual oc`, `strix`, `strix oc`, `tuf`, `tuf oc` |
| `evga` | `ftw3`, `ftw3 ultra`, `xc3`, `xc3 black`, `xc3 ultra` | | `evga` | `ftw3`, `ftw3 ultra`, `xc3`, `xc3 black`, `xc3 ultra` |
| `gainward` | `phantom gs`, `phoenix`, `phoenix gs`, `phoenix gs oc` | | `gainward` | `phantom gs`, `phoenix`, `phoenix gs`, `phoenix gs oc` |
| `gigabyte` | `aorus master`, `aorus xtreme`, `eagle`, `eagle oc`, `gaming`, `gaming oc`, `turbo`, `vision`, `vision oc` | | `gigabyte` | `aorus master`, `aorus xtreme`, `eagle`, `eagle oc`, `gaming`, `gaming oc`, `turbo`, `vision`, `vision oc` |
| `inno3d` | `gaming x3`, `ichill x3`, `ichill x4`, `twin x2 oc` | | `inno3d` | `gaming x3`, `ichill x3`, `ichill x4`, `twin x2 oc` |
| `kfa2` | `sg oc` | | `kfa2` | `sg oc` |
| `microsoft` | `xboxsx` , `xboxss` |
| `msi` | `gaming x trio`, `ventus 2x oc`, `ventus 3x`, `ventus 3x oc` | | `msi` | `gaming x trio`, `ventus 2x oc`, `ventus 3x`, `ventus 3x oc` |
| `nvidia` | `founders edition` | | `nvidia` | `founders edition` |
| `palit` | `gamerock oc`, `gaming pro`, `gaming pro oc` | | `palit` | `gamerock oc`, `gaming pro`, `gaming pro oc` |
| `pny` | `dual fan`, `xlr8`, `xlr8 rgb` | | `pny` | `dual fan`, `xlr8 revel`, `xlr8 uprising` |
| `sony` | `ps5 console`, `ps5 digital` |
| `zotac` | `amp holo`, `amp extreme holo`, `trinity`, `trinity oc`, `twin edge`, `twin edge oc` | | `zotac` | `amp holo`, `amp extreme holo`, `trinity`, `trinity oc`, `twin edge`, `twin edge oc` |
</details> </details>
@@ -285,8 +316,8 @@ environment variables are **optional**._
| `EMAIL_PASSWORD` | Gmail password | See below if you have MFA | | `EMAIL_PASSWORD` | Gmail password | See below if you have MFA |
| `EMAIL_TO` | Destination Email | Defaults to username if not set. Can be comma separated | | `EMAIL_TO` | Destination Email | Defaults to username if not set. Can be comma separated |
| `EMAIL_USERNAME` | Gmail address | E.g.: `jensen.robbed.us@gmail.com` | | `EMAIL_USERNAME` | Gmail address | E.g.: `jensen.robbed.us@gmail.com` |
| `PHONE_CARRIER` | [Supported carriers](#supported-carriers) for SMS | Email configuration required | | `PHONE_CARRIER` | [Supported carriers](#supported-carriers) for SMS | E.g.: `att` or `att,verizon,google`, email configuration required. If multiple phone numbers are listed, enter a carrier for each phone number |
| `PHONE_NUMBER` | 10 digit phone number | E.g.: `1234567890`, email configuration required | | `PHONE_NUMBER` | 10 digit phone number(s) | E.g.: `1234567890` or `1234567890,0987654321,11112223333`, email configuration required |
| `SMTP_ADDRESS` | IP Address or fqdn of smtp server | | `SMTP_ADDRESS` | IP Address or fqdn of smtp server |
| `SMTP_PORT` | TCP Port number on which the smtp server is listening for connections | Default: `25` | | `SMTP_PORT` | TCP Port number on which the smtp server is listening for connections | Default: `25` |
@@ -338,6 +369,25 @@ environment variables are **optional**._
</details> </details>
<details>
<summary>Philips Hue</summary>
| Environment variable | Description | Notes |
|:---:|---|---|
| `PHILIPS_HUE_API_KEY` | Hue Bridge API Key | **Required**, generate key using instructions [here](https://developers.meethue.com/develop/get-started-2/). This will be used for both LAN and cloud access over the official Remote Hue API. |
| `PHILIPS_HUE_LAN_BRIDGE_IP` | LAN IP Address of your Hue Bridge | LAN only, e.g. `192.168.x.x`|
| `PHILIPS_HUE_LIGHT_IDS` | Light IDs | Optional (all if not supplied). Comma seperated, e.g.: `1`, `2` |See Hue App → About for IDs |
| `PHILIPS_HUE_LIGHT_COLOR` | Color in RGB Format | Optional (NVIDIA green if not supplied). Comma separated, e.g.: `255`, `255`, `255`|
| `PHILIPS_HUE_LIGHT_PATTERN` | `blink` or empty | Optional - lights will flash for 30 seconds if `blink` is supplied. |
| `PHILIPS_HUE_CLOUD_ACCESS_TOKEN` | Remote Access Token | Cloud only, the access token obtained from Philips's Remote Hue API. Instructions to generate [here](https://developers.meethue.com/develop/hue-api/remote-authentication/). |
| `PHILIPS_HUE_CLOUD_REFRESH_TOKEN` | Remote Refresh Token | Cloud only, the refresh token obtained from Philips's Remote Hue API. |
| `PHILIPS_HUE_CLOUD_CLIENT_ID` | Remote Client ID | Cloud only, the client ID to use when accessing the Remote Hue API. |
| `PHILIPS_HUE_CLOUD_CLIENT_SECRET` | Remote Client Secret | Cloud only, the client secret to use when accessing the Remote Hue API. |
> :point_right: [Video demonstration](https://vimeo.com/476083242)
</details>
<details> <details>
<summary>Pushbullet</summary> <summary>Pushbullet</summary>
@@ -415,7 +465,6 @@ environment variables are **optional**._
| `TWITCH_CHANNEL` | Twitch channel | | | `TWITCH_CHANNEL` | Twitch channel | |
</details> </details>
</details> </details>
## FAQ ## FAQ
@@ -448,8 +497,12 @@ has [already](https://github.com/jef/streetmerchant/issues/182) [been](https://g
. .
**Q: I'd love to contribute, how do I do that?** Make **Q: I'd love to contribute, how do I do that?** Make
a [pull request](https://github.com/jef/streetmerchant/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc)! All a [pull request](https://github.com/jef/streetmerchant/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc)! All contributions
contributions are welcome. are welcome.
**Q: Why do I have to download all this stuff just to get this bot working?** Well, I would rather you didn't either. **Q: Why do I have to download all this stuff just to get this bot working?** Well, I would rather you didn't either.
See [#11](https://github.com/jef/streetmerchant/issues/11). See [#11](https://github.com/jef/streetmerchant/issues/11).
**Q: Why does Amazon show an error page (with a picture of an animal) instead of adding to cart or going to the detail page?** This is intended; see [#733](https://github.com/jef/streetmerchant/issues/733). This indicates that the item is out of stock and only available from a third-party seller (often at a markup).
<p align="center"><a href="https://github.com/jef/streetmerchant#readme"><img src="https://raw.githubusercontent.com/jef/streetmerchant/main/media/terminal.gif" /></a></p>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 865 KiB

+35 -15
View File
@@ -735,9 +735,9 @@
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
"version": "14.14.6", "version": "14.14.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.7.tgz",
"integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==" "integrity": "sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg=="
}, },
"@types/node-fetch": { "@types/node-fetch": {
"version": "2.5.7", "version": "2.5.7",
@@ -793,9 +793,9 @@
"dev": true "dev": true
}, },
"@types/puppeteer": { "@types/puppeteer": {
"version": "3.0.5", "version": "5.4.0",
"resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-3.0.5.tgz", "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.0.tgz",
"integrity": "sha512-NkphUMkpbr/us6hp1AqUh/UxX5Tf2UJU94MvaF8OOgIUPBipYodql+yRjcysJKqwnDkchp+cD/8jntI/C9StzA==", "integrity": "sha512-zTYDLjnHjgzokrwKt7N0rgn7oZPYo1J0m8Ghu+gXqzLCEn8RWbELa2uprE2UFJ0jU/Sk0x9jXXdOH/5QQLFHhQ==",
"requires": { "requires": {
"@types/node": "*" "@types/node": "*"
} }
@@ -1624,6 +1624,11 @@
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
}, },
"bottleneck": {
"version": "2.19.5",
"resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
"integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="
},
"boxen": { "boxen": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
@@ -2452,9 +2457,9 @@
} }
}, },
"dayjs": { "dayjs": {
"version": "1.9.4", "version": "1.9.5",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.9.4.tgz", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.9.5.tgz",
"integrity": "sha512-ABSF3alrldf7nM9sQ2U+Ln67NRwmzlLOqG7kK03kck0mw3wlSSEKv/XhKGGxUjQcS57QeiCyNdrFgtj9nWlrng==" "integrity": "sha512-WULIw7UpW/E0y6VywewpbXAMH3d5cZijEhoHLwM+OMVbk/NtchKS/W+57H/0P1rqU7gHrAArjiRLHCUhgMQl6w=="
}, },
"debug": { "debug": {
"version": "3.1.0", "version": "3.1.0",
@@ -4148,6 +4153,11 @@
"integrity": "sha1-mYR1wXhEVobQsyJG2l3428++jqM=", "integrity": "sha1-mYR1wXhEVobQsyJG2l3428++jqM=",
"dev": true "dev": true
}, },
"get-ssl-certificate": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/get-ssl-certificate/-/get-ssl-certificate-2.3.3.tgz",
"integrity": "sha512-aKYXS1S5+2IYw4W5+lKC/M+lvaNYPe0PhnQ144NWARcBg35H3ZvyVZ6y0LNGtiAxggFBHeO7LaVGO4bgHK4g1Q=="
},
"get-stdin": { "get-stdin": {
"version": "8.0.0", "version": "8.0.0",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
@@ -5911,6 +5921,16 @@
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
"integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
}, },
"node-hue-api": {
"version": "4.0.9",
"resolved": "https://registry.npmjs.org/node-hue-api/-/node-hue-api-4.0.9.tgz",
"integrity": "sha512-xsMUGKDSeMtYsKHSKNCn5XFq4eEArbEaFRAAccGBIlQ+ysrVKjlg1So44wY32gMgYfm3S6sJQOw2jLyPxu3Dkw==",
"requires": {
"axios": "^0.19.0",
"bottleneck": "^2.19.5",
"get-ssl-certificate": "^2.3.3"
}
},
"node-libs-browser": { "node-libs-browser": {
"version": "2.2.1", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
@@ -6106,9 +6126,9 @@
"dev": true "dev": true
}, },
"nodemailer": { "nodemailer": {
"version": "6.4.14", "version": "6.4.15",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.14.tgz", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.15.tgz",
"integrity": "sha512-0AQHOOT+nRAOK6QnksNaK7+5vjviVvEBzmZytKU7XSA+Vze2NLykTx/05ti1uJgXFTWrMq08u3j3x4r4OE6PAA==" "integrity": "sha512-2/z13dBTWdgTRlxVMAK6C13dCI22GEShET4+jFLlQsxpblxYhojnucfcTZO1QBu5CsHvABsBj2JCGO3vl0HSQA=="
}, },
"nodemon": { "nodemon": {
"version": "2.0.6", "version": "2.0.6",
@@ -10378,9 +10398,9 @@
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
}, },
"twilio": { "twilio": {
"version": "3.50.0", "version": "3.51.0",
"resolved": "https://registry.npmjs.org/twilio/-/twilio-3.50.0.tgz", "resolved": "https://registry.npmjs.org/twilio/-/twilio-3.51.0.tgz",
"integrity": "sha512-h/eWbi8YxdSBE6YgNfBHSDAYEhGUqGBrfqpaz4SF87MJQvygwSlfRvNA7WMajblQFP7Y68JqR20FFOjcYV3KJg==", "integrity": "sha512-6TjXI7U1FWlKhqqdM2tKSZoq7MlRxv+K5IgKhKSrgcoYTm6/qZ51UwwY2rfVHUMicr6y6j4NgaBDrPiOtiu9Xg==",
"requires": { "requires": {
"@types/express": "^4.17.7", "@types/express": "^4.17.7",
"@types/qs": "6.9.4", "@types/qs": "6.9.4",
+9 -5
View File
@@ -9,7 +9,9 @@
"lint:fix": "xo --fix", "lint:fix": "xo --fix",
"start": "npm run build && node build/index.js", "start": "npm run build && node build/index.js",
"start:dev": "nodemon --config nodemon.json", "start:dev": "nodemon --config nodemon.json",
"test:notification": "npm run build && node build/__test__/notification-test.js" "start:production": "node build/index.js",
"test:notification": "npm run build && node build/__test__/notification-test.js",
"test:notification:production": "node build/__test__/notification-test.js"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@@ -32,9 +34,10 @@
"messaging-api-telegram": "^1.0.1", "messaging-api-telegram": "^1.0.1",
"mqtt": "^4.2.4", "mqtt": "^4.2.4",
"node-fetch": "^2.6.1", "node-fetch": "^2.6.1",
"node-hue-api": "^4.0.9",
"node-notifier": "^8.0.0", "node-notifier": "^8.0.0",
"node-pagerduty": "^1.3.5", "node-pagerduty": "^1.3.5",
"nodemailer": "^6.4.14", "nodemailer": "^6.4.15",
"open": "^7.3.0", "open": "^7.3.0",
"play-sound": "^1.1.3", "play-sound": "^1.1.3",
"puppeteer": "^5.4.1", "puppeteer": "^5.4.1",
@@ -43,7 +46,7 @@
"puppeteer-extra-plugin-block-resources": "^2.2.7", "puppeteer-extra-plugin-block-resources": "^2.2.7",
"puppeteer-extra-plugin-stealth": "^2.6.5", "puppeteer-extra-plugin-stealth": "^2.6.5",
"pushover-notifications": "^1.2.2", "pushover-notifications": "^1.2.2",
"twilio": "^3.50.0", "twilio": "^3.51.0",
"twitch": "^4.2.7", "twitch": "^4.2.7",
"twitch-auth": "^4.2.7", "twitch-auth": "^4.2.7",
"twitch-chat-client": "^4.2.7", "twitch-chat-client": "^4.2.7",
@@ -53,11 +56,11 @@
"devDependencies": { "devDependencies": {
"@types/async": "^3.2.3", "@types/async": "^3.2.3",
"@types/cheerio": "^0.22.22", "@types/cheerio": "^0.22.22",
"@types/node": "^14.14.6", "@types/node": "^14.14.7",
"@types/node-fetch": "^2.5.7", "@types/node-fetch": "^2.5.7",
"@types/node-notifier": "^8.0.0", "@types/node-notifier": "^8.0.0",
"@types/nodemailer": "^6.4.0", "@types/nodemailer": "^6.4.0",
"@types/puppeteer": "^3.0.4", "@types/puppeteer": "^5.4.0",
"@types/twitter": "^1.7.0", "@types/twitter": "^1.7.0",
"husky": "^4.3.0", "husky": "^4.3.0",
"nodemon": "^2.0.6", "nodemon": "^2.0.6",
@@ -67,6 +70,7 @@
"xo": "^0.33.1" "xo": "^0.33.1"
}, },
"xo": { "xo": {
"prettier": true,
"rules": { "rules": {
"sort-imports": "error", "sort-imports": "error",
"sort-keys": "error", "sort-keys": "error",
+20 -10
View File
@@ -3,13 +3,23 @@ import {readFileSync} from 'fs';
const version = readFileSync('version.txt', 'utf8'); const version = readFileSync('version.txt', 'utf8');
export const banner = chalk.green.bold(` export const banner = {
$$\\ $$\\ $$\\ $$\\ $$\\ asciiVersion: `
\\__| $$ |\\__| $$ | $$ | ██████ ▄▄▄█████▓ ██▀███ ▓█████ ▓█████▄▄▄█████▓ ███▄ ▄███▓▓█████ ██▀███ ▄████▄ ██░ ██ ▄▄▄ ███▄ █ ▄▄▄█████▓
$$$$$$$\\ $$\\ $$\\ $$\\ $$$$$$$ |$$\\ $$$$$$\\ $$$$$$$\\ $$$$$$$\\ $$$$$$\\ $$$$$$\\ $$$$$$$\\ $$$$$$$\\ $$$$$$\\ $$$$$$\\ ▒██ ▒ ▓ ██▒ ▓▒▓██ ▒ ██▒▓█ ▀ ▓█ ▀▓ ██▒ ▓▒▓██▒▀█▀ ██▒▓█ ▀ ▓██ ▒ ██▒▒██▀ ▀█ ▓██░ ██▒▒████▄ ██ ▀█ █ ▓ ██▒ ▓▒
$$ __$$\\\\$$\\ $$ |$$ |$$ __$$ |$$ | \\____$$\\ $$$$$$\\ $$ _____|$$ __$$\\ \\____$$\\\\_$$ _| $$ _____|$$ __$$\\ $$ __$$\\ $$ __$$\\ ░ ▓██▄ ▒ ▓██░ ▒░▓██ ░▄█ ▒▒███ ▒███ ▒ ▓██░ ▒░▓██ ▓██░▒███ ▓██ ░▄█ ▒▒▓█ ▄ ▒██▀▀██░▒██ ▀█▄ ▓██ ▀█ ██▒▒ ▓██░ ▒░
$$ | $$ |\\$$\\$$ / $$ |$$ / $$ |$$ | $$$$$$$ |\\______|\\$$$$$$\\ $$ | $$ | $$$$$$$ | $$ | $$ / $$ | $$ |$$$$$$$$ |$$ | \\__| ▒ ██▒░ ▓██▓ ░ ▒██▀▀█▄ ▒▓█ ▄ ▒▓█ ▄░ ▓██▓ ░ ▒██ ▒██ ▒▓█ ▄ ▒██▀▀█▄ ▒▓▓▄ ▄██▒░▓█ ░██ ░██▄▄▄▄██ ▓██▒ ▐▌██▒░ ▓██▓ ░
$$ | $$ | \\$$$ / $$ |$$ | $$ |$$ |$$ __$$ | \\____$$\\ $$ | $$ |$$ __$$ | $$ |$$\\ $$ | $$ | $$ |$$ ____|$$ | ▒██████▒▒ ▒██▒ ░ ░██▓ ▒██▒░▒████▒░▒████▒ ▒██▒ ░ ▒██▒ ░██▒░▒████▒░██▓ ▒██▒▒ ▓███▀ ░░▓█▒░██▓ ▓█ ▓██▒▒██░ ▓██░ ▒██▒ ░
$$ | $$ | \\$ / $$ |\\$$$$$$$ |$$ |\\$$$$$$$ | $$$$$$$ |$$ | $$ |\\$$$$$$$ | \\$$$$ |\\$$$$$$$\\ $$ | $$ |\\$$$$$$$\\ $$ | ▒ ▒▓▒ ▒ ░ ▒ ░░ ░ ▒▓ ░▒▓░░░ ▒░ ░░░ ▒░ ░ ▒ ░░ ░ ▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░░ ░▒ ▒ ░ ▒ ░░▒░▒ ▒▒ ▓▒█░░ ▒░ ▒ ▒ ▒ ░░
\\__| \\__| \\_/ \\__| \\_______|\\__| \\_______| \\_______/ \\__| \\__| \\_______| \\____/ \\_______|\\__| \\__| \\_______|\\__| ░ ░▒ ░ ░ ░ ░▒ ░ ▒░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ▒ ▒ ░▒░ ░ ▒ ▒▒ ░░ ░░ ░ ▒░ ░
${version}`); ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
${version}`,
render(ascii: boolean, hexColor: string) {
return chalk
.hex(hexColor)
.bold(ascii ? this.asciiVersion : this.stringVersion);
},
stringVersion: `STREETMERCHANT
${version}`
};
+130 -31
View File
@@ -1,22 +1,33 @@
import {banner} from './banner'; import {banner} from './banner';
console.info(banner);
import {config as config_} from 'dotenv'; import {config as config_} from 'dotenv';
import path from 'path'; import path from 'path';
config_({path: path.resolve(__dirname, '../.env')}); config_({path: path.resolve(__dirname, '../.env')});
console.info(
banner.render(
envOrBoolean(process.env.ASCII_BANNER, false),
envOrString(process.env.BANNER_COLOR, '#808080')
)
);
/** /**
* Returns environment variable, given array, or default array. * Returns environment variable, given array, or default array.
* *
* @param environment Interested environment variable. * @param environment Interested environment variable.
* @param array Default array. If not set, is `[]`. * @param array Default array. If not set, is `[]`.
*/ */
function envOrArray(environment: string | undefined, array?: string[]): string[] { function envOrArray(
return (environment ? ( environment: string | undefined,
environment.includes('\n') ? environment.split('\n') : environment.split(',') array?: string[]
) : (array ?? [])).map(s => s.trim()); ): string[] {
return (environment
? environment.includes('\n')
? environment.split('\n')
: environment.split(',')
: array ?? []
).map((s) => s.trim());
} }
/** /**
@@ -25,8 +36,11 @@ function envOrArray(environment: string | undefined, array?: string[]): string[]
* @param environment Interested environment variable. * @param environment Interested environment variable.
* @param boolean Default boolean. If not set, is `true`. * @param boolean Default boolean. If not set, is `true`.
*/ */
function envOrBoolean(environment: string | undefined, boolean?: boolean): boolean { function envOrBoolean(
return environment ? environment === 'true' : (boolean ?? true); environment: string | undefined,
boolean?: boolean
): boolean {
return environment ? environment === 'true' : boolean ?? true;
} }
/** /**
@@ -36,7 +50,7 @@ function envOrBoolean(environment: string | undefined, boolean?: boolean): boole
* @param string Default string. If not set, is `''`. * @param string Default string. If not set, is `''`.
*/ */
function envOrString(environment: string | undefined, string?: string): string { function envOrString(environment: string | undefined, string?: string): string {
return environment ? environment : (string ?? ''); return environment ? environment : string ?? '';
} }
/** /**
@@ -46,7 +60,7 @@ function envOrString(environment: string | undefined, string?: string): string {
* @param number Default number. If not set, is `0`. * @param number Default number. If not set, is `0`.
*/ */
function envOrNumber(environment: string | undefined, number?: number): number { function envOrNumber(environment: string | undefined, number?: number): number {
return environment ? Number(environment) : (number ?? 0); return environment ? Number(environment) : number ?? 0;
} }
/** /**
@@ -61,14 +75,24 @@ function envOrNumber(environment: string | undefined, number?: number): number {
* @param environmentMax Max environment variable of Min/Max pair. * @param environmentMax Max environment variable of Min/Max pair.
* @param number Default number. If not set, is `0`. * @param number Default number. If not set, is `0`.
*/ */
function envOrNumberMin(environmentMin: string | undefined, environmentMax: string | undefined, number?: number) { function envOrNumberMin(
environmentMin: string | undefined,
environmentMax: string | undefined,
number?: number
) {
if (environmentMin || environmentMax) { if (environmentMin || environmentMax) {
if (environmentMin && environmentMax) { if (environmentMin && environmentMax) {
return Number(Number(environmentMin) < Number(environmentMax) ? environmentMin : environmentMax); return Number(
Number(environmentMin) < Number(environmentMax)
? environmentMin
: environmentMax
);
} }
if (environmentMax) { if (environmentMax) {
return Number(environmentMax) < (number ?? 0) ? Number(environmentMax) : (number ?? 0); return Number(environmentMax) < (number ?? 0)
? Number(environmentMax)
: number ?? 0;
} }
if (environmentMin) { if (environmentMin) {
@@ -91,14 +115,24 @@ function envOrNumberMin(environmentMin: string | undefined, environmentMax: stri
* @param environmentMax Max environment variable of Min/Max pair. * @param environmentMax Max environment variable of Min/Max pair.
* @param number Default number. If not set, is `0`. * @param number Default number. If not set, is `0`.
*/ */
function envOrNumberMax(environmentMin: string | undefined, environmentMax: string | undefined, number?: number) { function envOrNumberMax(
environmentMin: string | undefined,
environmentMax: string | undefined,
number?: number
) {
if (environmentMin || environmentMax) { if (environmentMin || environmentMax) {
if (environmentMin && environmentMax) { if (environmentMin && environmentMax) {
return Number(Number(environmentMin) < Number(environmentMax) ? environmentMax : environmentMax); return Number(
Number(environmentMin) < Number(environmentMax)
? environmentMax
: environmentMax
);
} }
if (environmentMin) { if (environmentMin) {
return Number(environmentMin) > (number ?? 0) ? Number(environmentMin) : (number ?? 0); return Number(environmentMin) > (number ?? 0)
? Number(environmentMin)
: number ?? 0;
} }
if (environmentMax) { if (environmentMax) {
@@ -114,10 +148,26 @@ const browser = {
isIncognito: envOrBoolean(process.env.INCOGNITO, false), isIncognito: envOrBoolean(process.env.INCOGNITO, false),
isTrusted: envOrBoolean(process.env.BROWSER_TRUSTED, false), isTrusted: envOrBoolean(process.env.BROWSER_TRUSTED, false),
lowBandwidth: envOrBoolean(process.env.LOW_BANDWIDTH, false), lowBandwidth: envOrBoolean(process.env.LOW_BANDWIDTH, false),
maxBackoff: envOrNumberMax(process.env.PAGE_BACKOFF_MIN, process.env.PAGE_BACKOFF_MAX, 3600000), maxBackoff: envOrNumberMax(
maxSleep: envOrNumberMax(process.env.PAGE_SLEEP_MIN, process.env.PAGE_SLEEP_MAX, 10000), process.env.PAGE_BACKOFF_MIN,
minBackoff: envOrNumberMin(process.env.PAGE_BACKOFF_MIN, process.env.PAGE_BACKOFF_MAX, 10000), process.env.PAGE_BACKOFF_MAX,
minSleep: envOrNumberMin(process.env.PAGE_SLEEP_MIN, process.env.PAGE_SLEEP_MAX, 5000), 3600000
),
maxSleep: envOrNumberMax(
process.env.PAGE_SLEEP_MIN,
process.env.PAGE_SLEEP_MAX,
10000
),
minBackoff: envOrNumberMin(
process.env.PAGE_BACKOFF_MIN,
process.env.PAGE_BACKOFF_MAX,
10000
),
minSleep: envOrNumberMin(
process.env.PAGE_SLEEP_MIN,
process.env.PAGE_SLEEP_MAX,
5000
),
open: envOrBoolean(process.env.OPEN_BROWSER) open: envOrBoolean(process.env.OPEN_BROWSER)
}; };
@@ -135,7 +185,10 @@ const notifications = {
password: envOrString(process.env.EMAIL_PASSWORD), password: envOrString(process.env.EMAIL_PASSWORD),
smtpAddress: envOrString(process.env.SMTP_ADDRESS), smtpAddress: envOrString(process.env.SMTP_ADDRESS),
smtpPort: envOrNumber(process.env.SMTP_PORT, 25), smtpPort: envOrNumber(process.env.SMTP_PORT, 25),
to: envOrString(process.env.EMAIL_TO, envOrString(process.env.EMAIL_USERNAME)), to: envOrString(
process.env.EMAIL_TO,
envOrString(process.env.EMAIL_USERNAME)
),
username: envOrString(process.env.EMAIL_USERNAME) username: envOrString(process.env.EMAIL_USERNAME)
}, },
mqtt: { mqtt: {
@@ -151,6 +204,18 @@ const notifications = {
integrationKey: envOrString(process.env.PAGERDUTY_INTEGRATION_KEY), integrationKey: envOrString(process.env.PAGERDUTY_INTEGRATION_KEY),
severity: envOrString(process.env.PAGERDUTY_SEVERITY, 'info') severity: envOrString(process.env.PAGERDUTY_SEVERITY, 'info')
}, },
philips_hue: {
accessToken: envOrString(process.env.PHILIPS_HUE_CLOUD_ACCESS_TOKEN),
apiKey: envOrString(process.env.PHILIPS_HUE_API_KEY),
bridgeIp: envOrString(process.env.PHILIPS_HUE_LAN_BRIDGE_IP),
clientId: envOrString(process.env.PHILIPS_HUE_CLOUD_CLIENT_ID),
clientSecret: envOrString(process.env.PHILIPS_HUE_CLOUD_CLIENT_SECRET),
lightColor: envOrString(process.env.PHILIPS_HUE_LIGHT_COLOR),
lightIds: envOrString(process.env.PHILIPS_HUE_LIGHT_IDS),
lightPattern: envOrString(process.env.PHILIPS_HUE_LIGHT_PATTERN),
refreshToken: envOrString(process.env.PHILIPS_HUE_CLOUD_REFRESH_TOKEN),
remoteApiUsername: envOrString(process.env.PHILIPS_HUE_API_KEY)
},
phone: { phone: {
availableCarriers: new Map([ availableCarriers: new Map([
['att', 'txt.att.net'], ['att', 'txt.att.net'],
@@ -168,8 +233,8 @@ const notifications = {
['virgin', 'vmobl.com'], ['virgin', 'vmobl.com'],
['virgin-ca', 'vmobile.ca'] ['virgin-ca', 'vmobile.ca']
]), ]),
carrier: envOrString(process.env.PHONE_CARRIER), carrier: envOrArray(process.env.PHONE_CARRIER),
number: envOrString(process.env.PHONE_NUMBER) number: envOrArray(process.env.PHONE_NUMBER)
}, },
playSound: envOrString(process.env.PLAY_SOUND), playSound: envOrString(process.env.PLAY_SOUND),
pushbullet: envOrString(process.env.PUSHBULLET), pushbullet: envOrString(process.env.PUSHBULLET),
@@ -218,7 +283,9 @@ const page = {
inStockWaitTime: envOrNumber(process.env.IN_STOCK_WAIT_TIME), inStockWaitTime: envOrNumber(process.env.IN_STOCK_WAIT_TIME),
screenshot: envOrBoolean(process.env.SCREENSHOT), screenshot: envOrBoolean(process.env.SCREENSHOT),
timeout: envOrNumber(process.env.PAGE_TIMEOUT, 30000), timeout: envOrNumber(process.env.PAGE_TIMEOUT, 30000),
userAgents: envOrArray(process.env.USER_AGENT, ['Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36']), userAgents: envOrArray(process.env.USER_AGENT, [
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
]),
width: 1920 width: 1920
}; };
@@ -229,33 +296,65 @@ const proxy = {
// Check for deprecated configuration values // Check for deprecated configuration values
if (process.env.MAX_PRICE) { if (process.env.MAX_PRICE) {
console.warn(' MAX_PRICE is deprecated, please use MAX_PRICE_SERIES_{{series}}'); console.warn(
' MAX_PRICE is deprecated, please use MAX_PRICE_SERIES_{{series}}'
);
} }
const store = { const store = {
autoAddToCart: envOrBoolean(process.env.AUTO_ADD_TO_CART, true),
country: envOrString(process.env.COUNTRY, 'usa'), country: envOrString(process.env.COUNTRY, 'usa'),
maxPrice: { maxPrice: {
series: { series: {
3070: envOrNumber(process.env.MAX_PRICE_SERIES_3070), 3070: envOrNumber(process.env.MAX_PRICE_SERIES_3070),
3080: envOrNumber(process.env.MAX_PRICE_SERIES_3080), 3080: envOrNumber(process.env.MAX_PRICE_SERIES_3080),
3090: envOrNumber(process.env.MAX_PRICE_SERIES_3090) 3090: envOrNumber(process.env.MAX_PRICE_SERIES_3090),
ryzen5600: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5600),
ryzen5800: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5800),
ryzen5900: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5900),
ryzen5950: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5950),
sonyps5c: -1,
sonyps5de: -1,
'test:series': -1,
xboxss: -1,
xboxsx: -1
} }
}, },
microCenterLocation: envOrArray(process.env.MICROCENTER_LOCATION, ['web']), microCenterLocation: envOrArray(process.env.MICROCENTER_LOCATION, ['web']),
showOnlyBrands: envOrArray(process.env.SHOW_ONLY_BRANDS), showOnlyBrands: envOrArray(process.env.SHOW_ONLY_BRANDS),
showOnlyModels: envOrArray(process.env.SHOW_ONLY_MODELS).map(entry => { showOnlyModels: envOrArray(process.env.SHOW_ONLY_MODELS).map((entry) => {
const [name, series] = entry.match(/[^:]+/g) ?? []; const [name, series] = entry.match(/[^:]+/g) ?? [];
return { return {
name: envOrString(name), name: envOrString(name),
series: envOrString(series) series: envOrString(series)
}; };
}), }),
showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, ['3070', '3080', '3090']), showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, [
stores: envOrArray(process.env.STORES, ['nvidia']).map(entry => { '3070',
'3080',
'3090',
'ryzen5600',
'ryzen5800',
'ryzen5900',
'ryzen5950',
'sonyps5c',
'sonyps5de',
'xboxsx',
'xboxss'
]),
stores: envOrArray(process.env.STORES, ['nvidia']).map((entry) => {
const [name, minPageSleep, maxPageSleep] = entry.match(/[^:]+/g) ?? []; const [name, minPageSleep, maxPageSleep] = entry.match(/[^:]+/g) ?? [];
return { return {
maxPageSleep: envOrNumberMax(minPageSleep, maxPageSleep, browser.maxSleep), maxPageSleep: envOrNumberMax(
minPageSleep: envOrNumberMin(minPageSleep, maxPageSleep, browser.minSleep), minPageSleep,
maxPageSleep,
browser.maxSleep
),
minPageSleep: envOrNumberMin(
minPageSleep,
maxPageSleep,
browser.minSleep
),
name: envOrString(name) name: envOrString(name)
}; };
}) })
+12 -5
View File
@@ -12,9 +12,11 @@ import {tryLookupAndLoop} from './store';
puppeteer.use(stealthPlugin()); puppeteer.use(stealthPlugin());
if (config.browser.lowBandwidth) { if (config.browser.lowBandwidth) {
puppeteer.use(resourceBlock({ puppeteer.use(
blockedTypes: new Set(['image', 'font'] as const) resourceBlock({
})); blockedTypes: new Set(['image', 'font'] as const)
})
);
} else { } else {
puppeteer.use(adBlocker); puppeteer.use(adBlocker);
} }
@@ -41,7 +43,9 @@ async function main() {
// Add the address of the proxy server if defined // Add the address of the proxy server if defined
if (config.proxy.address) { if (config.proxy.address) {
args.push(`--proxy-server=http://${config.proxy.address}:${config.proxy.port}`); args.push(
`--proxy-server=http://${config.proxy.address}:${config.proxy.port}`
);
} }
await stop(); await stop();
@@ -91,7 +95,10 @@ async function loopMain() {
try { try {
await main(); await main();
} catch (error) { } catch (error) {
logger.error('✖ something bad happened, resetting streetmerchant in 5 seconds', error); logger.error(
'✖ something bad happened, resetting streetmerchant in 5 seconds',
error
);
setTimeout(loopMain, 5000); setTimeout(loopMain, 5000);
} }
} }
+116 -30
View File
@@ -3,26 +3,24 @@ import chalk from 'chalk';
import {config} from './config'; import {config} from './config';
import winston from 'winston'; import winston from 'winston';
const prettyJson = winston.format.printf(info => { const prettyJson = winston.format.printf((info) => {
const timestamp = new Date().toLocaleTimeString(); const timestamp = new Date().toLocaleTimeString();
if (typeof info.message === 'object') { let out = `${chalk.grey(`[${timestamp}]`)} ${info.level} ${chalk.grey(
info.message = JSON.stringify(info.message, null, 4); '::'
)} ${info.message}`;
if (Object.keys(info.metadata).length > 0) {
out = `${out} ${chalk.magenta(JSON.stringify(info.metadata, null, 2))}`;
} }
if (info.meta) { return out;
return chalk.grey(`[${timestamp}]`) + ` ${info.level} ` + chalk.grey('::') + ` ${info.message} ${chalk.magenta(JSON.stringify(info.meta, null, 2))}`;
}
return chalk.grey(`[${timestamp}]`) + ` ${info.level} ` + chalk.grey('::') + ` ${info.message}`;
}); });
export const logger = winston.createLogger({ export const logger = winston.createLogger({
format: winston.format.combine( format: winston.format.combine(
winston.format.colorize(), winston.format.colorize(),
winston.format.prettyPrint(), winston.format.metadata({fillExcept: ['level', 'message', 'timestamp']}),
winston.format.splat(),
winston.format.simple(),
prettyJson prettyJson
), ),
level: config.logLevel, level: config.logLevel,
@@ -30,30 +28,67 @@ export const logger = winston.createLogger({
}); });
export const Print = { export const Print = {
backoff(link: Link, store: Store, parameters: {delay: number; statusCode: number}, color?: boolean): string { backoff(
link: Link,
store: Store,
parameters: {delay: number; statusCode: number},
color?: boolean
): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow(`BACKOFF DELAY status=${parameters.statusCode} delay=${parameters.delay}`); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow(
`BACKOFF DELAY status=${parameters.statusCode} delay=${parameters.delay}`
)
);
} }
return `${buildProductString(link, store)} :: BACKOFF DELAY status=${parameters.statusCode} delay=${parameters.delay}`; return `${buildProductString(link, store)} :: BACKOFF DELAY status=${
parameters.statusCode
} delay=${parameters.delay}`;
}, },
badStatusCode(link: Link, store: Store, statusCode: number, color?: boolean): string { badStatusCode(
link: Link,
store: Store,
statusCode: number,
color?: boolean
): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow(`STATUS CODE ERROR ${statusCode}`); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow(`STATUS CODE ERROR ${statusCode}`)
);
} }
return `${buildProductString(link, store)} :: STATUS CODE ERROR ${statusCode}`; return `${buildProductString(
link,
store
)} :: STATUS CODE ERROR ${statusCode}`;
}, },
bannedSeller(link: Link, store: Store, color?: boolean): string { bannedSeller(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('BANNED SELLER'); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow('BANNED SELLER')
);
} }
return `${buildProductString(link, store)} :: BANNED SELLER`; return `${buildProductString(link, store)} :: BANNED SELLER`;
}, },
captcha(link: Link, store: Store, color?: boolean): string { captcha(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('CAPTCHA'); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow('CAPTCHA')
);
} }
return `${buildProductString(link, store)} :: CAPTCHA`; return `${buildProductString(link, store)} :: CAPTCHA`;
@@ -73,49 +108,97 @@ export const Print = {
}, },
inStockWaiting(link: Link, store: Store, color?: boolean): string { inStockWaiting(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return ' ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('IN STOCK, WAITING'); return (
' ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow('IN STOCK, WAITING')
);
} }
return ` ${buildProductString(link, store)} :: IN STOCK, WAITING`; return ` ${buildProductString(link, store)} :: IN STOCK, WAITING`;
}, },
maxPrice(link: Link, store: Store, price: number, maxPrice: number, color?: boolean): string { maxPrice(
link: Link,
store: Store,
price: number,
maxPrice: number,
color?: boolean
): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow(`PRICE ${price} EXCEEDS LIMIT ${maxPrice}`); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow(`PRICE ${price} EXCEEDS LIMIT ${maxPrice}`)
);
} }
return `${buildProductString(link, store)} :: PRICE ${price} EXCEEDS LIMIT ${maxPrice}`; return `${buildProductString(
link,
store
)} :: PRICE ${price} EXCEEDS LIMIT ${maxPrice}`;
}, },
message(message: string, topic: string, store: Store, color?: boolean): string { message(
message: string,
topic: string,
store: Store,
color?: boolean
): string {
if (color) { if (color) {
return '✖ ' + buildSetupString(topic, store, true) + ' :: ' + chalk.yellow(message); return (
'✖ ' +
buildSetupString(topic, store, true) +
' :: ' +
chalk.yellow(message)
);
} }
return `${buildSetupString(topic, store)} :: ${message}`; return `${buildSetupString(topic, store)} :: ${message}`;
}, },
noResponse(link: Link, store: Store, color?: boolean): string { noResponse(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('NO RESPONSE'); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow('NO RESPONSE')
);
} }
return `${buildProductString(link, store)} :: NO RESPONSE`; return `${buildProductString(link, store)} :: NO RESPONSE`;
}, },
outOfStock(link: Link, store: Store, color?: boolean): string { outOfStock(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.red('OUT OF STOCK'); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.red('OUT OF STOCK')
);
} }
return `${buildProductString(link, store)} :: OUT OF STOCK`; return `${buildProductString(link, store)} :: OUT OF STOCK`;
}, },
rateLimit(link: Link, store: Store, color?: boolean): string { rateLimit(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('RATE LIMIT EXCEEDED'); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow('RATE LIMIT EXCEEDED')
);
} }
return `${buildProductString(link, store)} :: RATE LIMIT EXCEEDED`; return `${buildProductString(link, store)} :: RATE LIMIT EXCEEDED`;
} }
}; };
function buildSetupString(topic: string, store: Store, color?: boolean): string { function buildSetupString(
topic: string,
store: Store,
color?: boolean
): string {
if (color) { if (color) {
return chalk.cyan(`[${store.name}]`) + chalk.grey(` [setup (${topic})]`); return chalk.cyan(`[${store.name}]`) + chalk.grey(` [setup (${topic})]`);
} }
@@ -125,7 +208,10 @@ function buildSetupString(topic: string, store: Store, color?: boolean): string
function buildProductString(link: Link, store: Store, color?: boolean): string { function buildProductString(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return chalk.cyan(`[${store.name}]`) + chalk.grey(` [${link.brand} (${link.series})] ${link.model}`); return (
chalk.cyan(`[${store.name}]`) +
chalk.grey(` [${link.brand} (${link.series})] ${link.model}`)
);
} }
return `[${store.name}] [${link.brand} (${link.series})] ${link.model}`; return `[${store.name}] [${link.brand} (${link.series})] ${link.model}`;
+5 -3
View File
@@ -15,7 +15,9 @@ export function sendDiscordMessage(link: Link, store: Store) {
try { try {
const embed = new MessageBuilder(); const embed = new MessageBuilder();
embed.setTitle('Stock Notification'); embed.setTitle('Stock Notification');
embed.addField('URL', link.cartUrl ? link.cartUrl : link.url, true); if (link.cartUrl)
embed.addField('Add To Cart Link', link.cartUrl, true);
embed.addField('Product Page', link.url, true);
embed.addField('Store', store.name, true); embed.addField('Store', store.name, true);
embed.addField('Brand', link.brand, true); embed.addField('Brand', link.brand, true);
embed.addField('Series', link.series, true); embed.addField('Series', link.series, true);
@@ -25,7 +27,7 @@ export function sendDiscordMessage(link: Link, store: Store) {
embed.setText(notifyGroup.join(' ')); embed.setText(notifyGroup.join(' '));
} }
embed.setColor(0x76B900); embed.setColor(0x76b900);
embed.setTimestamp(); embed.setTimestamp();
const promises = []; const promises = [];
@@ -37,7 +39,7 @@ export function sendDiscordMessage(link: Link, store: Store) {
logger.info('✔ discord message sent'); logger.info('✔ discord message sent');
} catch (error) { } catch (error) {
logger.error('✖ couldn\'t send discord message', error); logger.error("✖ couldn't send discord message", error);
} }
})(); })();
} }
+10 -8
View File
@@ -30,21 +30,23 @@ export function sendEmail(link: Link, store: Store) {
logger.debug('↗ sending email'); logger.debug('↗ sending email');
const mailOptions: Mail.Options = { const mailOptions: Mail.Options = {
attachments: link.screenshot ? [ attachments: link.screenshot
{ ? [
filename: link.screenshot, {
path: `./${link.screenshot}` filename: link.screenshot,
} path: `./${link.screenshot}`
] : undefined, }
]
: undefined,
from: email.username, from: email.username,
subject: Print.inStock(link, store), subject: Print.inStock(link, store),
text: link.cartUrl ? link.cartUrl : link.url, text: link.cartUrl ? link.cartUrl : link.url,
to: email.to to: email.to
}; };
transporter.sendMail(mailOptions, error => { transporter.sendMail(mailOptions, (error) => {
if (error) { if (error) {
logger.error('✖ couldn\'t send email', error); logger.error("✖ couldn't send email", error);
} else { } else {
logger.info('✔ email sent'); logger.info('✔ email sent');
} }
+20 -13
View File
@@ -8,15 +8,20 @@ let client: MqttClient.Client;
if (mqtt.broker) { if (mqtt.broker) {
if (checkInsecureUsage(mqtt.password, mqtt.broker)) { if (checkInsecureUsage(mqtt.password, mqtt.broker)) {
logger.warn('✖ Insecure transport of password - Only use credentials with MQTT brokers on private networks.'); logger.warn(
'✖ Insecure transport of password - Only use credentials with MQTT brokers on private networks.'
);
} else { } else {
const clientOptions: IClientOptions = { const clientOptions: IClientOptions = {
clean: (mqtt.clientId === ''), clean: mqtt.clientId === '',
clientId: mqtt.clientId === '' ? undefined : mqtt.clientId, clientId: mqtt.clientId === '' ? undefined : mqtt.clientId,
password: mqtt.password === '' ? undefined : mqtt.password, password: mqtt.password === '' ? undefined : mqtt.password,
username: mqtt.username === '' ? undefined : mqtt.username username: mqtt.username === '' ? undefined : mqtt.username
}; };
client = MqttClient.connect(`mqtt://${mqtt.broker}:${mqtt.port}`, clientOptions); client = MqttClient.connect(
`mqtt://${mqtt.broker}:${mqtt.port}`,
clientOptions
);
} }
} }
@@ -26,7 +31,10 @@ export function sendMqttMessage(link: Link, store: Store) {
(async () => { (async () => {
const givenUrl = link.cartUrl ? link.cartUrl : link.url; const givenUrl = link.cartUrl ? link.cartUrl : link.url;
const message = `{"msg":"${Print.inStock(link, store)}", "url":"${givenUrl}"}`; const message = `{"msg":"${Print.inStock(
link,
store
)}", "url":"${givenUrl}"}`;
const topic = generateTopic(link, store, mqtt.topic); const topic = generateTopic(link, store, mqtt.topic);
const pubOptions: IClientPublishOptions = { const pubOptions: IClientPublishOptions = {
qos: mqtt.qos as 0 | 1 | 2, qos: mqtt.qos as 0 | 1 | 2,
@@ -34,14 +42,10 @@ export function sendMqttMessage(link: Link, store: Store) {
}; };
try { try {
client.publish( client.publish(topic, message, pubOptions);
topic,
message,
pubOptions
);
logger.info('✔ mqtt message sent'); logger.info('✔ mqtt message sent');
} catch (error) { } catch (error) {
logger.error('✖ couldn\'t send mqtt message', error); logger.error("✖ couldn't send mqtt message", error);
} }
})(); })();
} }
@@ -50,7 +54,8 @@ export function sendMqttMessage(link: Link, store: Store) {
function generateTopic(link: Link, store: Store, topic: string): string { function generateTopic(link: Link, store: Store, topic: string): string {
topic.trim(); topic.trim();
topic = topic.replace(/^\//, ''); topic = topic.replace(/^\//, '');
topic = topic.replace(/%series%/g, link.series) topic = topic
.replace(/%series%/g, link.series)
.replace(/%brand%/g, link.brand) .replace(/%brand%/g, link.brand)
.replace(/%model%/g, link.model) .replace(/%model%/g, link.model)
.replace(/%store%/g, store.name); .replace(/%store%/g, store.name);
@@ -68,10 +73,12 @@ function generateTopic(link: Link, store: Store, topic: string): string {
*/ */
function checkInsecureUsage(pass: string, address: string): boolean { function checkInsecureUsage(pass: string, address: string): boolean {
if (pass !== '') { if (pass !== '') {
if (isClassANet(address) || if (
isClassANet(address) ||
isClassBNet(address) || isClassBNet(address) ||
isClassCNet(address) || isClassCNet(address) ||
isLinkLocal(address)) { isLinkLocal(address)
) {
logger.debug(`MQTT using private network broker: ${address}`); logger.debug(`MQTT using private network broker: ${address}`);
} else { } else {
logger.debug(`MQTT using public network broker: ${address}`); logger.debug(`MQTT using public network broker: ${address}`);
+2
View File
@@ -1,4 +1,5 @@
import {Link, Store} from '../store/model'; import {Link, Store} from '../store/model';
import {adjustPhilipsHueLights} from './philips-hue';
import {playSound} from './sound'; import {playSound} from './sound';
import {sendDesktopNotification} from './desktop'; import {sendDesktopNotification} from './desktop';
import {sendDiscordMessage} from './discord'; import {sendDiscordMessage} from './discord';
@@ -21,6 +22,7 @@ export function sendNotification(link: Link, store: Store) {
sendSms(link, store); sendSms(link, store);
sendDesktopNotification(link, store); sendDesktopNotification(link, store);
// Non-priority // Non-priority
adjustPhilipsHueLights();
sendDiscordMessage(link, store); sendDiscordMessage(link, store);
sendMqttMessage(link, store); sendMqttMessage(link, store);
sendPagerDutyNotification(link, store); sendPagerDutyNotification(link, store);
+3 -4
View File
@@ -8,12 +8,11 @@ const pd = new PDClient('');
export function sendPagerDutyNotification(link: Link, store: Store) { export function sendPagerDutyNotification(link: Link, store: Store) {
if (config.notifications.pagerduty.integrationKey) { if (config.notifications.pagerduty.integrationKey) {
logger.debug('↗ sending pagerduty message'); logger.debug('↗ sending pagerduty message');
const links = [ const links = [{href: link.url, text: 'Visit Store'}];
{href: link.url, text: 'Visit Store'}
];
if (link.cartUrl) { if (link.cartUrl) {
links.push({ links.push({
href: link.cartUrl, text: 'Add to Cart' href: link.cartUrl,
text: 'Add to Cart'
}); });
} }
+125
View File
@@ -0,0 +1,125 @@
import type Api from 'node-hue-api/lib/api/Api';
import {config} from '../config';
import {v3 as hueAPI} from 'node-hue-api';
import {logger} from '../logger';
const hue = config.notifications.philips_hue;
const apiKey = hue.apiKey;
const bridgeIp = hue.bridgeIp;
const lightIds = hue.lightIds;
const lightColor = hue.lightColor;
const lightPattern = hue.lightPattern;
const LightState = hueAPI.lightStates.LightState;
const clientId = hue.clientId;
const clientSecret = hue.clientSecret;
const accessToken = hue.accessToken;
const refreshToken = hue.refreshToken;
const remoteApiUsername = hue.remoteApiUsername;
// Default Light State
const lightState = new LightState()
.on(true)
.brightness(100)
.rgb(46.27, 72.55, 0);
const adjustLightsWithAPI = (hueBridge: Api) => {
logger.debug('Connected to Philips Hue bridge.');
// Set the custom light state (COLOR and METHOD here)
if (lightColor) {
const rgbArray = lightColor.split(',');
// If there's not three values, must not be RGB
if (rgbArray.length === 3) {
lightState.rgb(rgbArray[0], rgbArray[1], rgbArray[2]);
} else {
logger.debug('✖ Error assigning RGB Values');
}
}
// If blink is specified, then blink the lights
if (lightPattern === 'blink') {
lightState.alertLong();
}
// If we've been given light IDs, then only adjust those IDs
if (lightIds) {
const arrayOfIDs = lightIds.split(',');
arrayOfIDs.forEach((light) => {
logger.debug('adjusting all hue lights');
(hueBridge.lights.setLightState(light, lightState) as Promise<any>).catch(
(error: Error) => {
logger.error('Failed to adjust all lights.');
logger.error(error);
throw error;
}
);
});
} else {
// Adjust all light IDs
hueBridge.lights
.getAll()
.then((allLights: any[]) => {
allLights.forEach((light: any) => {
logger.debug('adjusting specified lights');
(hueBridge.lights.setLightState(light, lightState) as Promise<
any
>).catch((error: Error) => {
logger.error('Failed to adjust specified lights.');
logger.error(error);
throw error;
});
});
})
.catch((error: Error) => {
logger.error('Failed to get all lights.');
logger.error(error);
throw error;
});
}
};
export function adjustPhilipsHueLights() {
// Check if the required variables have been set
if (hue.apiKey && hue.bridgeIp) {
logger.info('↗ adjusting Philips Hue lights over LAN');
(async () => {
logger.debug(
'Attempting to connect to Philips Hue bridge at ' + bridgeIp
);
hueAPI.api
.createLocal(bridgeIp)
.connect(apiKey)
.then(
(hueBridge) => {
adjustLightsWithAPI(hueBridge);
logger.info('✔ adjusted Philips Hue lights over LAN');
},
(error: Error) => {
logger.error("✖ couldn't adjust hue lights.", error);
}
);
})();
} else if (hue.apiKey && hue.clientId && hue.clientSecret) {
logger.info('↗ adjusting Philips Hue lights over cloud');
(async () => {
logger.debug('Attempting to connect to Philips Hue bridge over cloud');
const remoteBootstrap = hueAPI.api.createRemote(clientId, clientSecret);
if (hue.accessToken && hue.refreshToken) {
remoteBootstrap
.connectWithTokens(accessToken, refreshToken, remoteApiUsername)
.then(
(hueBridge) => {
adjustLightsWithAPI(hueBridge);
logger.info('✔ adjusted Philips Hue lights over cloud');
},
(error: Error) => {
logger.error(
'Failed to get a remote Philips Hue connection using supplied tokens.'
);
logger.error(error);
throw error;
}
);
}
})();
}
}
+3 -2
View File
@@ -17,10 +17,11 @@ export function sendPushbulletNotification(link: Link, store: Store) {
link.cartUrl ? link.cartUrl : link.url, link.cartUrl ? link.cartUrl : link.url,
(error: Error) => { (error: Error) => {
if (error) { if (error) {
logger.error('✖ couldn\'t send pushbullet message', error); logger.error("✖ couldn't send pushbullet message", error);
} else { } else {
logger.info('✔ pushbullet message sent'); logger.info('✔ pushbullet message sent');
} }
}); }
);
} }
} }
+1 -1
View File
@@ -21,7 +21,7 @@ export function sendPushoverNotification(link: Link, store: Store) {
push.send(message, (error: Error) => { push.send(message, (error: Error) => {
if (error) { if (error) {
logger.error('✖ couldn\'t send pushover message', error); logger.error("✖ couldn't send pushover message", error);
} else { } else {
logger.info('✔ pushover message sent'); logger.info('✔ pushover message sent');
} }
+2 -2
View File
@@ -22,13 +22,13 @@ export function sendSlackMessage(link: Link, store: Store) {
}); });
if (!result.ok) { if (!result.ok) {
logger.error('✖ couldn\'t send slack message', result); logger.error("✖ couldn't send slack message", result);
return; return;
} }
logger.info('✔ slack message sent'); logger.info('✔ slack message sent');
} catch (error) { } catch (error) {
logger.error('✖ couldn\'t send slack message', error); logger.error("✖ couldn't send slack message", error);
} }
})(); })();
} }
+61 -34
View File
@@ -4,48 +4,75 @@ import Mail from 'nodemailer/lib/mailer';
import {config} from '../config'; import {config} from '../config';
import {transporter} from './email'; import {transporter} from './email';
if (config.notifications.phone.number && !config.notifications.email.username) {
logger.warn('✖ in order to receive sms alerts, email notifications must also be configured');
}
const [email, phone] = [config.notifications.email, config.notifications.phone]; const [email, phone] = [config.notifications.email, config.notifications.phone];
if (phone.number.length > 0 && (!email.username || !email.password)) {
logger.warn(
'✖ in order to receive sms alerts, email notifications must also be configured'
);
}
if (phone.carrier.length !== phone.number.length) {
logger.warn(
'✖ the number of carriers must match the number of phone numbers',
{carrier: phone.carrier, number: phone.number}
);
}
export function sendSms(link: Link, store: Store) { export function sendSms(link: Link, store: Store) {
if (phone.number) { for (
logger.debug('↗ sending sms'); let i = 0;
const carrier = phone.carrier; i < Math.max(phone.number.length, phone.carrier.length);
i++
) {
const currentNumber = phone.number[i];
const currentCarrier = phone.carrier[i];
if (carrier && phone.availableCarriers.has(carrier)) { if (!currentNumber) {
const mailOptions: Mail.Options = { logger.error(`${currentCarrier} is not associated with a number`);
attachments: link.screenshot ? [ continue;
{ } else if (!currentCarrier) {
filename: link.screenshot, logger.error(`${currentNumber} is not associated with a carrier`);
path: `./${link.screenshot}` continue;
}
] : undefined,
from: email.username,
subject: Print.inStock(link, store, false, true),
text: link.cartUrl ? link.cartUrl : link.url,
to: generateAddress()
};
transporter.sendMail(mailOptions, error => {
if (error) {
logger.error('✖ couldn\'t send sms', error);
} else {
logger.info('✔ sms sent');
}
});
} }
if (!phone.availableCarriers.has(currentCarrier)) {
logger.error(`✖ unknown carrier ${currentCarrier}`);
continue;
}
logger.debug('↗ sending sms');
const mailOptions: Mail.Options = {
attachments: link.screenshot
? [
{
filename: link.screenshot,
path: `./${link.screenshot}`
}
]
: undefined,
from: email.username,
subject: Print.inStock(link, store, false, true),
text: link.cartUrl ? link.cartUrl : link.url,
to: generateAddress(currentNumber, currentCarrier)
};
transporter.sendMail(mailOptions, (error) => {
if (error) {
logger.error(
`✖ couldn't send sms to ${currentNumber} for carrier ${currentCarrier}`,
error
);
} else {
logger.info('✔ sms sent');
}
});
} }
} }
function generateAddress() { function generateAddress(number: string, carrier: string) {
const carrier = phone.carrier;
if (carrier && phone.availableCarriers.has(carrier)) { if (carrier && phone.availableCarriers.has(carrier)) {
return [phone.number, phone.availableCarriers.get(carrier)].join('@'); return [number, phone.availableCarriers.get(carrier)].join('@');
} }
logger.error('✖ unknown carrier', carrier);
} }
+3 -3
View File
@@ -9,7 +9,7 @@ if (config.notifications.playSound) {
player = playerLib(); player = playerLib();
if (player.player === null) { if (player.player === null) {
logger.warn('✖ couldn\'t find sound player'); logger.warn("✖ couldn't find sound player");
} else { } else {
const playerName = player.player; const playerName = player.player;
logger.info(`✔ sound player found: ${playerName}`); logger.info(`✔ sound player found: ${playerName}`);
@@ -20,7 +20,7 @@ export function playSound() {
if (config.notifications.playSound && player.player !== null) { if (config.notifications.playSound && player.player !== null) {
logger.debug('↗ playing sound'); logger.debug('↗ playing sound');
fs.access(config.notifications.playSound, fs.constants.F_OK, error => { fs.access(config.notifications.playSound, fs.constants.F_OK, (error) => {
if (error) { if (error) {
logger.error(`✖ error opening sound file: ${error.message}`); logger.error(`✖ error opening sound file: ${error.message}`);
return; return;
@@ -28,7 +28,7 @@ export function playSound() {
player.play(config.notifications.playSound, (error: Error) => { player.play(config.notifications.playSound, (error: Error) => {
if (error) { if (error) {
logger.error('✖ couldn\'t play sound', error); logger.error("✖ couldn't play sound", error);
} }
logger.info('✔ played sound'); logger.info('✔ played sound');
+7 -2
View File
@@ -19,10 +19,15 @@ export function sendTelegramMessage(link: Link, store: Store) {
for (const chatId of telegram.chatId) { for (const chatId of telegram.chatId) {
try { try {
results.push(client.sendMessage(chatId, `${Print.inStock(link, store)}\n${givenUrl}`)); results.push(
client.sendMessage(
chatId,
`${Print.inStock(link, store)}\n${givenUrl}`
)
);
logger.info('✔ telegram message sent'); logger.info('✔ telegram message sent');
} catch (error) { } catch (error) {
logger.error('✖ couldn\'t send telegram message', error); logger.error("✖ couldn't send telegram message", error);
} }
} }
+1 -1
View File
@@ -26,7 +26,7 @@ export function sendTwilioMessage(link: Link, store: Store) {
}); });
logger.info('✔ twilio message sent'); logger.info('✔ twilio message sent');
} catch (error) { } catch (error) {
logger.error('✖ couldn\'t send twilio message', error); logger.error("✖ couldn't send twilio message", error);
} }
})(); })();
} }
+33 -10
View File
@@ -17,7 +17,10 @@ let tokenData = {
}; };
if (existsSync('./twitch.json')) { if (existsSync('./twitch.json')) {
tokenData = {...JSON.parse(readFileSync('./twitch.json', 'utf-8')), ...tokenData}; tokenData = {
...JSON.parse(readFileSync('./twitch.json', 'utf-8')),
...tokenData
};
} }
const chatClient: ChatClient = new ChatClient( const chatClient: ChatClient = new ChatClient(
@@ -25,13 +28,25 @@ const chatClient: ChatClient = new ChatClient(
new StaticAuthProvider(twitch.clientId, tokenData.accessToken), new StaticAuthProvider(twitch.clientId, tokenData.accessToken),
{ {
clientSecret: twitch.clientSecret, clientSecret: twitch.clientSecret,
expiry: tokenData.expiryTimestamp === null ? null : new Date(tokenData.expiryTimestamp), expiry:
tokenData.expiryTimestamp === null
? null
: new Date(tokenData.expiryTimestamp),
onRefresh: async ({accessToken, refreshToken, expiryDate}) => { onRefresh: async ({accessToken, refreshToken, expiryDate}) => {
return promises.writeFile('./twitch.json', JSON.stringify({ return promises.writeFile(
accessToken, './twitch.json',
expiryTimestamp: expiryDate === null ? null : expiryDate.getTime(), JSON.stringify(
refreshToken {
}, null, 4), 'utf-8'); accessToken,
expiryTimestamp:
expiryDate === null ? null : expiryDate.getTime(),
refreshToken
},
null,
4
),
'utf-8'
);
}, },
refreshToken: tokenData.refreshToken refreshToken: tokenData.refreshToken
} }
@@ -51,7 +66,7 @@ chatClient.onJoin((channel: string, user: string) => {
chatClient.say(channel, message); chatClient.say(channel, message);
logger.info('✔ twitch message sent'); logger.info('✔ twitch message sent');
} catch (error) { } catch (error) {
logger.error('✖ couldn\'t send twitch message', error); logger.error("✖ couldn't send twitch message", error);
} }
} }
} }
@@ -65,10 +80,18 @@ chatClient.onDisconnect(() => {
}); });
export function sendTwitchMessage(link: Link, store: Store) { export function sendTwitchMessage(link: Link, store: Store) {
if (tokenData.accessToken && twitch.channel && twitch.clientId && twitch.clientSecret && tokenData.refreshToken) { if (
tokenData.accessToken &&
twitch.channel &&
twitch.clientId &&
twitch.clientSecret &&
tokenData.refreshToken
) {
logger.debug('↗ sending twitch message'); logger.debug('↗ sending twitch message');
messages.push(`${Print.inStock(link, store)}\n${link.cartUrl ? link.cartUrl : link.url}`); messages.push(
`${Print.inStock(link, store)}\n${link.cartUrl ? link.cartUrl : link.url}`
);
if (!alreadySaying) { if (!alreadySaying) {
alreadySaying = true; alreadySaying = true;
+11 -4
View File
@@ -13,18 +13,25 @@ const client = new Twitter({
}); });
export function sendTweet(link: Link, store: Store) { export function sendTweet(link: Link, store: Store) {
if (twitter.accessTokenKey && twitter.accessTokenSecret && twitter.consumerKey && twitter.consumerSecret) { if (
twitter.accessTokenKey &&
twitter.accessTokenSecret &&
twitter.consumerKey &&
twitter.consumerSecret
) {
logger.debug('↗ sending twitter message'); logger.debug('↗ sending twitter message');
let status = `${Print.inStock(link, store)}\n${link.cartUrl ? link.cartUrl : link.url}`; let status = `${Print.inStock(link, store)}\n${
link.cartUrl ? link.cartUrl : link.url
}`;
if (twitter.tweetTags) { if (twitter.tweetTags) {
status += `\n\n${twitter.tweetTags}`; status += `\n\n${twitter.tweetTags}`;
} }
client.post('statuses/update', {status}, error => { client.post('statuses/update', {status}, (error) => {
if (error) { if (error) {
logger.error('✖ couldn\'t send twitter notification', error); logger.error("✖ couldn't send twitter notification", error);
} else { } else {
logger.info('✔ twitter notification sent'); logger.info('✔ twitter notification sent');
} }
+19 -13
View File
@@ -12,14 +12,16 @@ function addNewLinks(store: Store, links: Link[], series: Series) {
return; return;
} }
const existingUrls = new Set(store.links.map(link => link.url)); const existingUrls = new Set(store.links.map((link) => link.url));
const newLinks = links.filter(link => !existingUrls.has(link.url)); const newLinks = links.filter((link) => !existingUrls.has(link.url));
if (newLinks.length === 0) { if (newLinks.length === 0) {
return; return;
} }
logger.debug(Print.message(`FOUND ${newLinks.length} STORE LINKS`, series, store, true)); logger.debug(
Print.message(`FOUND ${newLinks.length} STORE LINKS`, series, store, true)
);
logger.debug(JSON.stringify(newLinks, null, 2)); logger.debug(JSON.stringify(newLinks, null, 2));
store.links = store.links.concat(newLinks); store.links = store.links.concat(newLinks);
@@ -43,19 +45,23 @@ export async function fetchLinks(store: Store, browser: Browser) {
url = [url]; url = [url];
} }
url.map(x => promises.push(usingResponse(browser, x, async response => { url.map((x) =>
const text = await response?.text(); promises.push(
usingResponse(browser, x, async (response) => {
const text = await response?.text();
if (!text) { if (!text) {
logger.error(Print.message('NO RESPONSE', series, store, true)); logger.error(Print.message('NO RESPONSE', series, store, true));
return; return;
} }
const docElement = cheerio.load(text).root(); const docElement = cheerio.load(text).root();
const links = store.linksBuilder!.builder(docElement, series); const links = store.linksBuilder!.builder(docElement, series);
addNewLinks(store, links, series); addNewLinks(store, links, series);
}))); })
)
);
} }
await Promise.all(promises); await Promise.all(promises);
+8 -4
View File
@@ -30,10 +30,14 @@ function filterModel(model: Link['model'], series: Link['series']): boolean {
for (const configModelEntry of config.store.showOnlyModels) { for (const configModelEntry of config.store.showOnlyModels) {
const sanitizedConfigModel = configModelEntry.name.replace(/\s/g, ''); const sanitizedConfigModel = configModelEntry.name.replace(/\s/g, '');
const sanitizedConfigSeries = configModelEntry.series.replace(/\s/g, ''); const sanitizedConfigSeries = configModelEntry.series.replace(/\s/g, '');
if (sanitizedConfigSeries ? if (sanitizedConfigSeries) {
sanitizedSeries === sanitizedConfigSeries && sanitizedModel === sanitizedConfigModel : if (
sanitizedModel === sanitizedConfigModel sanitizedSeries === sanitizedConfigSeries &&
) { sanitizedModel === sanitizedConfigModel
) {
return true;
}
} else if (sanitizedModel === sanitizedConfigModel) {
return true; return true;
} }
} }
+64 -29
View File
@@ -9,59 +9,82 @@ export type Selector = {
}; };
function isElementArray(query: LabelQuery): query is Element[] { function isElementArray(query: LabelQuery): query is Element[] {
return Array.isArray(query) && query.length > 0 && typeof query[0] === 'object'; return (
Array.isArray(query) && query.length > 0 && typeof query[0] === 'object'
);
} }
function getQueryAsElementArray(query: LabelQuery, defaultContainer: string): Array<Required<Element>> { function getQueryAsElementArray(
query: LabelQuery,
defaultContainer: string
): Array<Required<Element>> {
if (isElementArray(query)) { if (isElementArray(query)) {
return query.map(x => ({ return query.map((x) => ({
container: x.container ?? defaultContainer, container: x.container ?? defaultContainer,
text: x.text text: x.text
})); }));
} }
if (Array.isArray(query)) { if (Array.isArray(query)) {
return [{ return [
container: defaultContainer, {
text: query container: defaultContainer,
}]; text: query
}
];
} }
return [{ return [
container: query.container ?? defaultContainer, {
text: query.text container: query.container ?? defaultContainer,
}]; text: query.text
}
];
} }
export async function pageIncludesLabels(page: Page, query: LabelQuery, options: Selector) { export async function pageIncludesLabels(
page: Page,
query: LabelQuery,
options: Selector
) {
const elementQueries = getQueryAsElementArray(query, options.selector); const elementQueries = getQueryAsElementArray(query, options.selector);
const resolved = await Promise.all(elementQueries.map(async query => { const resolved = await Promise.all(
const selector = {...options, selector: query.container}; elementQueries.map(async (query) => {
const contents = await extractPageContents(page, selector) ?? ''; const selector = {...options, selector: query.container};
const contents = (await extractPageContents(page, selector)) ?? '';
if (!contents) { if (!contents) {
return false; return false;
} }
logger.debug(contents); logger.debug(contents);
return includesLabels(contents, query.text); return includesLabels(contents, query.text);
})); })
);
return resolved.includes(true); return resolved.includes(true);
} }
export async function extractPageContents(page: Page, selector: Selector): Promise<string | null> { export async function extractPageContents(
page: Page,
selector: Selector
): Promise<string | null> {
return page.evaluate((options: Selector) => { return page.evaluate((options: Selector) => {
// eslint-disable-next-line no-undef // eslint-disable-next-line no-undef
const element: globalThis.HTMLElement | null = document.querySelector(options.selector); const element: globalThis.HTMLElement | null = document.querySelector(
options.selector
);
if (!element) { if (!element) {
return null; return null;
} }
if (options.requireVisible && !(element.offsetWidth > 0 && element.offsetHeight > 0)) { if (
options.requireVisible &&
!(element.offsetWidth > 0 && element.offsetHeight > 0)
) {
return null; return null;
} }
@@ -84,13 +107,23 @@ export async function extractPageContents(page: Page, selector: Selector): Promi
* @param domText Complete DOM of website. * @param domText Complete DOM of website.
* @param searchLabels Search labels for a match. * @param searchLabels Search labels for a match.
*/ */
export function includesLabels(domText: string, searchLabels: string[]): boolean { export function includesLabels(
domText: string,
searchLabels: string[]
): boolean {
const domTextLowerCase = domText.toLowerCase(); const domTextLowerCase = domText.toLowerCase();
return searchLabels.some(label => domTextLowerCase.includes(label.toLowerCase())); return searchLabels.some((label) =>
domTextLowerCase.includes(label.toLowerCase())
);
} }
export async function cardPrice(page: Page, query: Pricing, max: number, options: Selector) { export async function cardPrice(
if (!max) { page: Page,
query: Pricing,
max: number,
options: Selector
): Promise<number | null> {
if (!max || max === -1) {
return null; return null;
} }
@@ -99,7 +132,9 @@ export async function cardPrice(page: Page, query: Pricing, max: number, options
if (cardPrice) { if (cardPrice) {
const priceSeperator = query.euroFormat ? /\./g : /,/g; const priceSeperator = query.euroFormat ? /\./g : /,/g;
const cardpriceNumber = Number.parseFloat(cardPrice.replace(priceSeperator, '').match(/\d+/g)!.join('.')); const cardpriceNumber = Number.parseFloat(
cardPrice.replace(priceSeperator, '').match(/\d+/g)!.join('.')
);
logger.debug(`Raw card price: ${cardPrice} | Limit: ${max}`); logger.debug(`Raw card price: ${cardPrice} | Limit: ${max}`);
return cardpriceNumber > max ? cardpriceNumber : null; return cardpriceNumber > max ? cardpriceNumber : null;
+51 -32
View File
@@ -2,7 +2,13 @@ import {Browser, Page, Response} from 'puppeteer';
import {Link, Store, getStores} from './model'; import {Link, Store, getStores} from './model';
import {Print, logger} from '../logger'; import {Print, logger} from '../logger';
import {Selector, cardPrice, pageIncludesLabels} from './includes-labels'; import {Selector, cardPrice, pageIncludesLabels} from './includes-labels';
import {closePage, delay, getRandomUserAgent, getSleepTime, isStatusCodeInRange} from '../util'; import {
closePage,
delay,
getRandomUserAgent,
getSleepTime,
isStatusCodeInRange
} from '../util';
import {config} from '../config'; import {config} from '../config';
import {disableBlockerInPage} from '../adblocker'; import {disableBlockerInPage} from '../adblocker';
import {fetchLinks} from './fetch-links'; import {fetchLinks} from './fetch-links';
@@ -39,8 +45,12 @@ async function lookup(browser: Browser, store: Store) {
continue; continue;
} }
const context = (config.browser.isIncognito ? await browser.createIncognitoBrowserContext() : browser.defaultBrowserContext()); const context = config.browser.isIncognito
const page = (config.browser.isIncognito ? await context.newPage() : await browser.newPage()); ? await browser.createIncognitoBrowserContext()
: browser.defaultBrowserContext();
const page = config.browser.isIncognito
? await context.newPage()
: await browser.newPage();
page.setDefaultNavigationTimeout(config.page.timeout); page.setDefaultNavigationTimeout(config.page.timeout);
await page.setUserAgent(getRandomUserAgent()); await page.setUserAgent(getRandomUserAgent());
@@ -57,7 +67,11 @@ async function lookup(browser: Browser, store: Store) {
try { try {
statusCode = await lookupCard(browser, store, page, link); statusCode = await lookupCard(browser, store, page, link);
} catch (error) { } catch (error) {
logger.error(`✖ [${store.name}] ${link.brand} ${link.series} ${link.model} - ${error.message as string}`); logger.error(
`✖ [${store.name}] ${link.brand} ${link.series} ${link.model} - ${
error.message as string
}`
);
const client = await page.target().createCDPSession(); const client = await page.target().createCDPSession();
await client.send('Network.clearBrowserCookies'); await client.send('Network.clearBrowserCookies');
await client.send('Network.clearBrowserCache'); await client.send('Network.clearBrowserCache');
@@ -75,9 +89,16 @@ async function lookup(browser: Browser, store: Store) {
/* eslint-enable no-await-in-loop */ /* eslint-enable no-await-in-loop */
} }
async function lookupCard(browser: Browser, store: Store, page: Page, link: Link): Promise<number> { async function lookupCard(
browser: Browser,
store: Store,
page: Page,
link: Link
): Promise<number> {
const givenWaitFor = store.waitUntil ? store.waitUntil : 'networkidle0'; const givenWaitFor = store.waitUntil ? store.waitUntil : 'networkidle0';
const response: Response | null = await page.goto(link.url, {waitUntil: givenWaitFor}); const response: Response | null = await page.goto(link.url, {
waitUntil: givenWaitFor
});
if (!response) { if (!response) {
logger.debug(Print.noResponse(link, store, true)); logger.debug(Print.noResponse(link, store, true));
@@ -96,7 +117,8 @@ async function lookupCard(browser: Browser, store: Store, page: Page, link: Link
} }
if (await lookupCardInStock(store, page, link)) { if (await lookupCardInStock(store, page, link)) {
const givenUrl = link.cartUrl ? link.cartUrl : link.url; const givenUrl =
link.cartUrl && config.store.autoAddToCart ? link.cartUrl : link.url;
logger.info(`${Print.inStock(link, store, true)}\n${givenUrl}`); logger.info(`${Print.inStock(link, store, true)}\n${givenUrl}`);
if (config.browser.open) { if (config.browser.open) {
@@ -136,9 +158,13 @@ async function lookupCardInStock(store: Store, page: Page, link: Link) {
}; };
if (store.labels.inStock) { if (store.labels.inStock) {
const options = {...baseOptions, requireVisible: true, type: 'outerHTML' as const}; const options = {
...baseOptions,
requireVisible: true,
type: 'outerHTML' as const
};
if (!await pageIncludesLabels(page, store.labels.inStock, options)) { if (!(await pageIncludesLabels(page, store.labels.inStock, options))) {
logger.info(Print.outOfStock(link, store, true)); logger.info(Print.outOfStock(link, store, true));
return false; return false;
} }
@@ -152,34 +178,24 @@ async function lookupCardInStock(store: Store, page: Page, link: Link) {
} }
if (store.labels.bannedSeller) { if (store.labels.bannedSeller) {
if (await pageIncludesLabels(page, store.labels.bannedSeller, baseOptions)) { if (
await pageIncludesLabels(page, store.labels.bannedSeller, baseOptions)
) {
logger.warn(Print.bannedSeller(link, store, true)); logger.warn(Print.bannedSeller(link, store, true));
return false; return false;
} }
} }
if (store.labels.maxPrice) { if (store.labels.maxPrice) {
let price; const price = await cardPrice(
let maxPrice = 0; page,
switch (link.series) { store.labels.maxPrice,
case '3070': config.store.maxPrice.series[link.series],
price = await cardPrice(page, store.labels.maxPrice, config.store.maxPrice.series['3070'], baseOptions); baseOptions
maxPrice = config.store.maxPrice.series['3070']; );
break; const maxPrice = config.store.maxPrice.series[link.series];
case '3080':
price = await cardPrice(page, store.labels.maxPrice, config.store.maxPrice.series['3080'], baseOptions);
maxPrice = config.store.maxPrice.series['3080'];
break;
case '3090':
price = await cardPrice(page, store.labels.maxPrice, config.store.maxPrice.series['3090'], baseOptions);
maxPrice = config.store.maxPrice.series['3090'];
break;
default:
break;
}
if (price) { if (price) {
logger.info(Print.maxPrice(link, store, price, maxPrice, true)); logger.info(Print.maxPrice(link, store, price, maxPrice, true));
return false; return false;
} }
} }
@@ -193,7 +209,10 @@ async function lookupCardInStock(store: Store, page: Page, link: Link) {
} }
// Do API inventory validation in realtime (no cache) if available // Do API inventory validation in realtime (no cache) if available
if (store.realTimeInventoryLookup !== undefined && link.itemNumber !== undefined) { if (
store.realTimeInventoryLookup !== undefined &&
link.itemNumber !== undefined
) {
return store.realTimeInventoryLookup(link.itemNumber); return store.realTimeInventoryLookup(link.itemNumber);
} }
@@ -209,7 +228,7 @@ export async function tryLookupAndLoop(browser: Browser, store: Store) {
if (store.linksBuilder) { if (store.linksBuilder) {
const lastRunTime = linkBuilderLastRunTimes[store.name] ?? -1; const lastRunTime = linkBuilderLastRunTimes[store.name] ?? -1;
const ttl = store.linksBuilder.ttl ?? Number.MAX_SAFE_INTEGER; const ttl = store.linksBuilder.ttl ?? Number.MAX_SAFE_INTEGER;
if (lastRunTime === -1 || (Date.now() - lastRunTime) > ttl) { if (lastRunTime === -1 || Date.now() - lastRunTime > ttl) {
try { try {
await fetchLinks(store, browser); await fetchLinks(store, browser);
linkBuilderLastRunTimes[store.name] = Date.now(); linkBuilderLastRunTimes[store.name] = Date.now();
+4 -4
View File
@@ -24,7 +24,7 @@ export const Adorama: Store = {
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.adorama.com/pnv301tfxmpb.html' url: 'https://www.adorama.com/pnv301tfxmpb.html'
}, },
@@ -72,13 +72,13 @@ export const Adorama: Store = {
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.adorama.com/png30801tfxb.html' url: 'https://www.adorama.com/png30801tfxb.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.adorama.com/asrx3080o10g.html' url: 'https://www.adorama.com/asrx3080o10g.html'
}, },
@@ -120,7 +120,7 @@ export const Adorama: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.adorama.com/asrx3090o24g.html' url: 'https://www.adorama.com/asrx3090o24g.html'
} }
+9 -10
View File
@@ -36,7 +36,7 @@ export const AlternateNL: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf gaming', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672251' url: 'https://www.alternate.nl/product/1672251'
}, },
@@ -54,19 +54,19 @@ export const AlternateNL: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc gaming', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672634' url: 'https://www.alternate.nl/product/1672634'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc gaming', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672867' url: 'https://www.alternate.nl/product/1672867'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black gaming', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673512' url: 'https://www.alternate.nl/product/1673512'
}, },
@@ -78,13 +78,13 @@ export const AlternateNL: Store = {
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra gaming', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1674164' url: 'https://www.alternate.nl/product/1674164'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix gaming', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672868' url: 'https://www.alternate.nl/product/1672868'
}, },
@@ -108,7 +108,7 @@ export const AlternateNL: Store = {
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 gaming', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673520' url: 'https://www.alternate.nl/product/1673520'
}, },
@@ -126,7 +126,7 @@ export const AlternateNL: Store = {
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra gaming', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673524' url: 'https://www.alternate.nl/product/1673524'
}, },
@@ -138,7 +138,7 @@ export const AlternateNL: Store = {
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 gaming', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673517' url: 'https://www.alternate.nl/product/1673517'
}, },
@@ -169,4 +169,3 @@ export const AlternateNL: Store = {
], ],
name: 'alternate-nl' name: 'alternate-nl'
}; };
+46 -5
View File
@@ -4,7 +4,12 @@ export const Alternate: Store = {
labels: { labels: {
inStock: { inStock: {
container: '.stockStatus', container: '.stockStatus',
text: ['auf lager', 'ware neu eingetroffen', 'in kürze versandfertig', 'ware im zulauf'] text: [
'auf lager',
'ware neu eingetroffen',
'in kürze versandfertig',
'ware im zulauf'
]
}, },
maxPrice: { maxPrice: {
container: 'div.price > span', container: 'div.price > span',
@@ -24,13 +29,13 @@ export const Alternate: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1672868' url: 'https://www.alternate.de/product/1672868'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1672867' url: 'https://www.alternate.de/product/1672867'
}, },
@@ -186,13 +191,13 @@ export const Alternate: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1672870' url: 'https://www.alternate.de/product/1672870'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1672872' url: 'https://www.alternate.de/product/1672872'
}, },
@@ -315,6 +320,42 @@ export const Alternate: Store = {
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1672611' url: 'https://www.alternate.de/product/1672611'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.alternate.de/product/1685588'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.alternate.de/product/1685585'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.alternate.de/product/1685590'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.alternate.de/product/1685584'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.alternate.de/product/1651220'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.alternate.de/product/1651221'
} }
], ],
name: 'alternate' name: 'alternate'
+36
View File
@@ -129,6 +129,42 @@ export const AmazonCa: Store = {
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.amazon.ca/dp/B08HJLLF7G' url: 'https://www.amazon.ca/dp/B08HJLLF7G'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amazon.ca/dp/B08166SLDF'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.amazon.ca/dp/B0815XFSGK'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.amazon.ca/dp/B08164VTWH'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.amazon.ca/dp/B0815Y8J9N'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.amazon.ca/dp/B08GSC5D9G'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.amazon.ca/dp/B08GS1N24H'
} }
], ],
name: 'amazon-ca' name: 'amazon-ca'
+47 -8
View File
@@ -5,7 +5,10 @@ export const AmazonDe: Store = {
labels: { labels: {
captcha: { captcha: {
container: 'body', container: 'body',
text: ['geben sie die unten angezeigten zeichen ein', 'geben sie die zeichen unten ein'] text: [
'geben sie die unten angezeigten zeichen ein',
'geben sie die zeichen unten ein'
]
}, },
inStock: { inStock: {
container: '#desktop_buybox', container: '#desktop_buybox',
@@ -25,13 +28,13 @@ export const AmazonDe: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.amazon.de/dp/B08HN7VVLJ' url: 'https://www.amazon.de/dp/B08HN7VVLJ'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.amazon.de/dp/B08HN6KYS3' url: 'https://www.amazon.de/dp/B08HN6KYS3'
}, },
@@ -139,13 +142,13 @@ export const AmazonDe: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.amazon.de/dp/B08HN642LY' url: 'https://www.amazon.de/dp/B08HN642LY'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.amazon.de/dp/B08HN51T8Q' url: 'https://www.amazon.de/dp/B08HN51T8Q'
}, },
@@ -265,13 +268,13 @@ export const AmazonDe: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3070', series: '3070',
url: 'https://www.amazon.de/dp/B08HT7PR9Y' url: 'https://www.amazon.de/dp/B08HT7PR9Y'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3070', series: '3070',
url: 'https://www.amazon.de/dp/B08L8JNTXQ' url: 'https://www.amazon.de/dp/B08L8JNTXQ'
}, },
@@ -349,9 +352,45 @@ export const AmazonDe: Store = {
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3070', series: '3070',
url: 'https://www.amazon.de/dp/B08HBJB7YD' url: 'https://www.amazon.de/dp/B08HBJB7YD'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amazon.de/dp/B08166SLDF'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.amazon.de/dp/B0815XFSGK'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.amazon.de/dp/B08164VTWH'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.amazon.de/dp/B0815Y8J9N'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.amazon.de/dp/B08H93ZRK9'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.amazon.de/dp/B08H98GVK8'
} }
], ],
name: 'amazon-de' name: 'amazon-de'
+1 -1
View File
@@ -84,7 +84,7 @@ export const AmazonEs: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HN6KYS3' url: 'https://www.amazon.es/dp/B08HN6KYS3'
}, },
+7 -2
View File
@@ -8,7 +8,12 @@ export const AmazonNl: Store = {
}, },
inStock: { inStock: {
container: '#availability', container: '#availability',
text: ['op voorraad', 'verkrijgbaar vanaf', 'wordt gewoonlijk verzonden binnen', 'nog slechts'] text: [
'op voorraad',
'verkrijgbaar vanaf',
'wordt gewoonlijk verzonden binnen',
'nog slechts'
]
}, },
maxPrice: { maxPrice: {
container: 'span[class*="PriceString"]', container: 'span[class*="PriceString"]',
@@ -58,7 +63,7 @@ export const AmazonNl: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.amazon.nl/dp/B08HN7VVLJ' url: 'https://www.amazon.nl/dp/B08HN7VVLJ'
} }
+24 -3
View File
@@ -30,15 +30,34 @@ export const AmazonUk: Store = {
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
cartUrl: 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B081265T5Z&Quantity.1=1', cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B081265T5Z&Quantity.1=1',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amazon.co.uk/dp/B081265T5Z/' url: 'https://www.amazon.co.uk/dp/B081265T5Z/'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC5L3RG&Quantity.1=1',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.amazon.com/dp/B08FC5L3RG'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08H97NYGP&Quantity.1=1',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.amazon.co.uk/dp/B08H97NYGP/'
} }
], ],
linksBuilder: { linksBuilder: {
builder: (docElement, series) => { builder: (docElement, series) => {
const productElements = docElement.find('.s-result-list .s-result-item[data-asin]'); const productElements = docElement.find(
'.s-result-list .s-result-item[data-asin]'
);
const links: Link[] = []; const links: Link[] = [];
for (let i = 0; i < productElements.length; i++) { for (let i = 0; i < productElements.length; i++) {
const productElement = productElements.eq(i); const productElement = productElements.eq(i);
@@ -49,7 +68,9 @@ export const AmazonUk: Store = {
} }
const url = `https://www.amazon.co.uk/dp/${asin}/`; const url = `https://www.amazon.co.uk/dp/${asin}/`;
const titleElement = productElement.find('.sg-col-inner h2 a.a-text-normal[href] span').first(); const titleElement = productElement
.find('.sg-col-inner h2 a.a-text-normal[href] span')
.first();
const title = titleElement.text().trim(); const title = titleElement.text().trim();
if (!title || !new RegExp(`RTX.*${series}`, 'i').exec(title)) { if (!title || !new RegExp(`RTX.*${series}`, 'i').exec(title)) {
+158 -32
View File
@@ -17,185 +17,311 @@ export const Amazon: Store = {
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B07TDN1SC5&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B07TDN1SC5&Quantity.1=1',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amazon.com/dp/B07TDN1SC5' url: 'https://www.amazon.com/dp/B07TDN1SC5'
}, },
{
brand: 'asus',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8HPKR6&Quantity.1=1',
model: 'dual',
series: '3070',
url: 'https://www.amazon.com/dp/B08L8HPKR6'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08LW46GH2&Quantity.1=1',
model: 'xc3 black',
series: '3070',
url: 'https://www.amazon.com/dp/B08LW46GH2'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1',
model: 'gaming oc',
series: '3070',
url: 'https://www.amazon.com/dp/B08KY266MG'
},
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1', cartUrl:
model: 'xlr8', 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBJB7YD&Quantity.1=1',
model: 'xlr8 revel',
series: '3070',
url: 'https://www.amazon.com/dp/B08HBJB7YD'
},
{
brand: 'pny',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBF5L3K&Quantity.1=1',
model: 'xlr8 uprising',
series: '3070',
url: 'https://www.amazon.com/dp/B08HBF5L3K'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KWLMZV4&Quantity.1=1',
model: 'ventus 3x oc',
series: '3070',
url: 'https://www.amazon.com/dp/B08KWLMZV4'
},
{
brand: 'zotac',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08LF1CWT2&Quantity.1=1',
model: 'twin edge oc',
series: '3070',
url: 'https://www.amazon.com/dp/B08LF1CWT2'
},
{
brand: 'pny',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1',
model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HBR7QBM' url: 'https://www.amazon.com/dp/B08HBR7QBM'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1', cartUrl:
model: 'xlr8 rgb', 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1',
model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HBTJMLJ' url: 'https://www.amazon.com/dp/B08HBTJMLJ'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR7SV3M&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR7SV3M&Quantity.1=1',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR7SV3M' url: 'https://www.amazon.com/dp/B08HR7SV3M'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR3Y5GQ' url: 'https://www.amazon.com/dp/B08HR3Y5GQ'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR55YB5' url: 'https://www.amazon.com/dp/B08HR55YB5'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR3DPGW&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR3DPGW&Quantity.1=1',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR3DPGW' url: 'https://www.amazon.com/dp/B08HR3DPGW'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR4RJ3Q' url: 'https://www.amazon.com/dp/B08HR4RJ3Q'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR6FMF3' url: 'https://www.amazon.com/dp/B08HR6FMF3'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HJTH61J' url: 'https://www.amazon.com/dp/B08HJTH61J'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HJS2JLJ' url: 'https://www.amazon.com/dp/B08HJS2JLJ'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HH5WF97' url: 'https://www.amazon.com/dp/B08HH5WF97'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HHDP9DW' url: 'https://www.amazon.com/dp/B08HHDP9DW'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6F174Z&Quantity.1=1', cartUrl:
model: 'rog strix oc', 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6F174Z&Quantity.1=1',
model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08J6F174Z' url: 'https://www.amazon.com/dp/B08J6F174Z'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1', cartUrl:
model: 'rog strix oc', 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1',
model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08J6GMWCQ' url: 'https://www.amazon.com/dp/B08J6GMWCQ'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR5SXPS' url: 'https://www.amazon.com/dp/B08HR5SXPS'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HJNKT3P' url: 'https://www.amazon.com/dp/B08HJNKT3P'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HJQ182D' url: 'https://www.amazon.com/dp/B08HJQ182D'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1', cartUrl:
model: 'xlr8', 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1',
model: 'xlr8 revel',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HBQWBHH' url: 'https://www.amazon.com/dp/B08HBQWBHH'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1', cartUrl:
model: 'xlr8', 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1',
model: 'xlr8 revel',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HBVX53D' url: 'https://www.amazon.com/dp/B08HBVX53D'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HRBW6VB&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HRBW6VB&Quantity.1=1',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HRBW6VB' url: 'https://www.amazon.com/dp/B08HRBW6VB'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1',
model: 'ventus 3x', model: 'ventus 3x',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HR9D2JS' url: 'https://www.amazon.com/dp/B08HR9D2JS'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HJRF2CN' url: 'https://www.amazon.com/dp/B08HJRF2CN'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HJPDJTY' url: 'https://www.amazon.com/dp/B08HJPDJTY'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HJGNJ81' url: 'https://www.amazon.com/dp/B08HJGNJ81'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HJLLF7G' url: 'https://www.amazon.com/dp/B08HJLLF7G'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.amazon.com/dp/product/B08164VTWH'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.amazon.com/dp/product/B0815Y8J9N'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC5L3RG&Quantity.1=1',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.amazon.com/dp/B08FC5L3RG'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC6MR62&Quantity.1=1',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.amazon.com/dp/B08FC6MR62'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.amazon.com/dp/B08H75RTZ8'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.amazon.com/dp/B08G9J44ZN'
} }
], ],
name: 'amazon' name: 'amazon'
+55
View File
@@ -0,0 +1,55 @@
import {Store} from './store';
export const AMDDe: Store = {
labels: {
inStock: {
container: '.btn-shopping-cart',
text: ['add to cart']
},
maxPrice: {
container: '.product-page-description h4',
euroFormat: true
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.amd.com/de/direct-buy/5450881400/de'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/de/direct-buy/5450881400/de?add-to-cart=true',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.amd.com/de/direct-buy/5450881400/de'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/de/direct-buy/5450881500/de?add-to-cart=true',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.amd.com/de/direct-buy/5450881500/de'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/de/direct-buy/5450881600/de?add-to-cart=true',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.amd.com/de/direct-buy/5450881600/de'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/de/direct-buy/5450881700/de?add-to-cart=true',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amd.com/de/direct-buy/5450881700/de'
}
],
name: 'amd-de'
};
+55
View File
@@ -0,0 +1,55 @@
import {Store} from './store';
export const AMD: Store = {
labels: {
inStock: {
container: '.btn-shopping-cart',
text: ['add to cart']
},
maxPrice: {
container: '.product-page-description h4',
euroFormat: false
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.amd.com/en/direct-buy/5450881400/us'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5450881400/us?add-to-cart=true',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.amd.com/en/direct-buy/5450881400/us'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5450881500/us?add-to-cart=true',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.amd.com/en/direct-buy/5450881500/us'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5450881600/us?add-to-cart=true',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.amd.com/en/direct-buy/5450881600/us'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5450881700/us?add-to-cart=true',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amd.com/en/direct-buy/5450881700/us'
}
],
name: 'amd'
};
+7 -4
View File
@@ -9,7 +9,7 @@ export const Aria: Store = {
}, },
maxPrice: { maxPrice: {
container: '.priceBig', container: '.priceBig',
euroFormat: false // Note: Aria uses non-euroFromat as price seperator euroFormat: false // Note: Aria uses non-euroFromat as price seperator
}, },
outOfStock: { outOfStock: {
container: '.fBox', container: '.fBox',
@@ -21,7 +21,8 @@ export const Aria: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+2060+Super/Gigabyte+NVIDIA+GeForce+RTX+2060+SUPER+8GB+WINDFORCE+OC+Turing+Graphics+Card+%2B+RTX+Bundle%21?productId=71541' url:
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+2060+Super/Gigabyte+NVIDIA+GeForce+RTX+2060+SUPER+8GB+WINDFORCE+OC+Turing+Graphics+Card+%2B+RTX+Bundle%21?productId=71541'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -33,11 +34,13 @@ export const Aria: Store = {
urls: [ urls: [
{ {
series: '3080', series: '3080',
url: 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3080' url:
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3080'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3090' url:
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3090'
} }
] ]
}, },
+140
View File
@@ -0,0 +1,140 @@
import {Store} from './store';
export const Arlt: Store = {
labels: {
inStock: {
container: '.articleDesc .shippingtext',
text: ['auf Lager', 'Lieferzeit 2-3 Werktage', 'Ware im Zulauf']
},
maxPrice: {
container: '.articleprice .price',
euroFormat: true
},
outOfStock: {
container: '.articleDesc .shippingtext',
text: ['Neuer Artikel in Kürze verfügbar', 'Liefertermin unbekannt']
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url:
'https://www.arlt.com/ASUS-GeForce-GTX1650-Super-TUF-GTX1650S-O4G-GAMING.html'
},
{
brand: 'asus',
model: 'dual',
series: '3070',
url:
'https://www.arlt.com/Gaming/Gaming-Hardware/Grafikkarten/ASUS-Dual-GeForce-RTX-3070.html'
},
{
brand: 'asus',
model: 'dual oc',
series: '3070',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/ASUS-Dual-GeForce-RTX-3070-OC.html'
},
{
brand: 'asus',
model: 'tuf oc',
series: '3070',
url:
'https://www.arlt.com/Gaming/Gaming-Hardware/Grafikkarten/ASUS-TUF-Gaming-GeForce-RTX-3070-OC.html'
},
{
brand: 'asus',
model: 'strix',
series: '3070',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3070/ASUS-ROG-Strix-GeForce-RTX-3070.html'
},
{
brand: 'msi',
model: 'ventus 2x oc',
series: '3070',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3070/MSI-GeForce-RTX-3070-Ventus-2X-OC.html'
},
{
brand: 'gainward',
model: 'phoenix',
series: '3070',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/Gainward-GeForce-RTX-3070-Phoenix.html'
},
{
brand: 'gainward',
model: 'phoenix gs',
series: '3070',
url:
'https://www.arlt.com/Gaming/Gaming-Hardware/Gainward-GeForce-RTX-3070-Phoenix-GS.html'
},
{
brand: 'asus',
model: 'tuf oc',
series: '3080',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/ASUS-TUF-Gaming-GeForce-RTX-3080-OC.html'
},
{
brand: 'msi',
model: 'ventus 3x oc',
series: '3080',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3080/MSI-GeForce-RTX-3080-Ventus-3X-OC.html'
},
{
brand: 'asus',
model: 'tuf oc',
series: '3090',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3090/ASUS-TUF-Gaming-GeForce-RTX-3090-OC.html'
},
{
brand: 'asus',
model: 'strix oc',
series: '3090',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3090/ASUS-ROG-Strix-GeForce-RTX-3090-OC.html'
},
{
brand: 'gainward',
model: 'phoenix gs',
series: '3090',
url:
'https://www.arlt.com/Gaming/Gaming-Hardware/Gainward-GeForce-RTX-3090-Phoenix-GS.html'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-5-5600X-boxed.html'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-7-5800X-boxed.html'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5900X-boxed.html'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5950X-boxed.html'
}
],
name: 'arlt'
};
+22 -13
View File
@@ -12,55 +12,64 @@ export const AsusDe: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2766/asus-rog-strix-rtx2060s-o8g-evo-v2-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2766/asus-rog-strix-rtx2060s-o8g-evo-v2-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2828/asus-rog-strix-rtx3080-10g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2828/asus-rog-strix-rtx3080-10g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2829/asus-rog-strix-rtx3080-o10g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2829/asus-rog-strix-rtx3080-o10g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2824/asus-tuf-rtx3080-10g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2824/asus-tuf-rtx3080-10g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2825/asus-tuf-rtx3080-o10g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2825/asus-tuf-rtx3080-o10g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2826/asus-rog-strix-rtx3090-24g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2826/asus-rog-strix-rtx3090-24g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2827/asus-rog-strix-rtx3090-o24g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2827/asus-rog-strix-rtx3090-o24g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2822/asus-tuf-rtx3090-24g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2822/asus-tuf-rtx3090-24g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2823/asus-tuf-rtx3090-o24g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2823/asus-tuf-rtx3090-o24g-gaming'
} }
], ],
name: 'asus-de' name: 'asus-de'
+1 -1
View File
@@ -47,7 +47,7 @@ export const Asus: Store = {
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202009AM290000002', itemNumber: '202009AM290000002',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://store.asus.com/us/item/202009AM290000002' url: 'https://store.asus.com/us/item/202009AM290000002'
} }
+53 -29
View File
@@ -20,145 +20,169 @@ export const Azerty: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://azerty.nl/product/gigabyte/3756757/geforce-rtx-2060-oc-6g-grafische-kaart-geforce-rtx-2060' url:
'https://azerty.nl/product/gigabyte/3756757/geforce-rtx-2060-oc-6g-grafische-kaart-geforce-rtx-2060'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/gigabyte/4349658/aorus-geforce-rtx-3080-xtreme-10g-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/gigabyte/4349658/aorus-geforce-rtx-3080-xtreme-10g-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/msi/4346262/geforce-rtx-3080-ventus-3x-10g-oc-grafische-kaart-rtx-3080' url:
'https://azerty.nl/product/msi/4346262/geforce-rtx-3080-ventus-3x-10g-oc-grafische-kaart-rtx-3080'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/asus/4346679/tuf-gaming-geforce-rtx-3080-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/asus/4346679/tuf-gaming-geforce-rtx-3080-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/msi/4346263/geforce-rtx-3080-gaming-x-trio-10g-grafische-kaart-rtx-3080' url:
'https://azerty.nl/product/msi/4346263/geforce-rtx-3080-gaming-x-trio-10g-grafische-kaart-rtx-3080'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/asus/4348176/tuf-gaming-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/asus/4348176/tuf-gaming-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/asus/4348174/rog-strix-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/asus/4348174/rog-strix-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/zotac/4352301/gaming-geforce-rtx-3080-trinity-oc-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/zotac/4352301/gaming-geforce-rtx-3080-trinity-oc-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/gigabyte/4349651/aorus-geforce-rtx-3080-master-10g-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/gigabyte/4349651/aorus-geforce-rtx-3080-master-10g-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/pny/4342269/geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-triple-fan-gaming-edition-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/pny/4342269/geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-triple-fan-gaming-edition-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/asus/4363892/rog-strix-gaming-geforce-rtx-3070-o8g-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/asus/4363892/rog-strix-gaming-geforce-rtx-3070-o8g-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/asus/4373096/rog-strix-gaming-geforce-rtx-3070-8g-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/asus/4373096/rog-strix-gaming-geforce-rtx-3070-8g-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/asus/4363910/tuf-gaming-geforce-rtx-3070-oc-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/asus/4363910/tuf-gaming-geforce-rtx-3070-oc-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/asus/4373099/tuf-gaming-geforce-rtx-3070-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/asus/4373099/tuf-gaming-geforce-rtx-3070-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/inno3d/4369725/geforce-rtx-3070-ichill-x4-videokaart-8-gb-ddr6' url:
'https://azerty.nl/product/inno3d/4369725/geforce-rtx-3070-ichill-x4-videokaart-8-gb-ddr6'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/inno3d/4369726/geforce-rtx-3070-ichill-x3-videokaart-8-gb-ddr6' url:
'https://azerty.nl/product/inno3d/4369726/geforce-rtx-3070-ichill-x3-videokaart-8-gb-ddr6'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/msi/4374747/geforce-rtx-3070-ventus-3x-oc-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/msi/4374747/geforce-rtx-3070-ventus-3x-oc-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/msi/4365398/geforce-rtx-3070-gaming-x-trio-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/msi/4365398/geforce-rtx-3070-gaming-x-trio-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'dual fan', model: 'dual fan',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/pny/4342270/uprising-dual-fan-geforce-rtx-3070' url:
'https://azerty.nl/product/pny/4342270/uprising-dual-fan-geforce-rtx-3070'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/pny/4342271/epic-x-rgb-geforce-rtx-3070-triple-fan-gaming-edition-xlr8--videokaart-8-gb-gddr6x' url:
'https://azerty.nl/product/pny/4342271/epic-x-rgb-geforce-rtx-3070-triple-fan-gaming-edition-xlr8--videokaart-8-gb-gddr6x'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/evga/4377247/geforce-rtx-3070-ftw3-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/evga/4377247/geforce-rtx-3070-ftw3-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/evga/4377248/xc3-geforce-rtx-3070-xc3-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/evga/4377248/xc3-geforce-rtx-3070-xc3-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/evga/4377250/ftw3-ultra-geforce-rtx-3070-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/evga/4377250/ftw3-ultra-geforce-rtx-3070-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/evga/4377252/xc3-black-geforce-rtx-3070-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/evga/4377252/xc3-black-geforce-rtx-3070-videokaart-8-gb-gddr6'
} }
], ],
name: 'azerty' name: 'azerty'
+60 -16
View File
@@ -17,7 +17,8 @@ export const BAndH: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.bhphotovideo.com/c/product/1452927-REG/evga_06g_p4_2063_kr_geforce_rtx_2060_xc.html' url:
'https://www.bhphotovideo.com/c/product/1452927-REG/evga_06g_p4_2063_kr_geforce_rtx_2060_xc.html'
}, },
// TUF was removed from BH, not sure why so commenting out listing for now // TUF was removed from BH, not sure why so commenting out listing for now
// { // {
@@ -30,13 +31,15 @@ export const BAndH: Store = {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.bhphotovideo.com/c/product/1593333-REG/gigabyte_gv_n3080gaming_oc_10gd_geforce_rtx_3080_gaming.html' url:
'https://www.bhphotovideo.com/c/product/1593333-REG/gigabyte_gv_n3080gaming_oc_10gd_geforce_rtx_3080_gaming.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.bhphotovideo.com/c/product/1592969-REG/zotac_zt_a30800d_10p_gaming_geforce_rtx_3080.html' url:
'https://www.bhphotovideo.com/c/product/1592969-REG/zotac_zt_a30800d_10p_gaming_geforce_rtx_3080.html'
}, },
// TUF was removed from BH, not sure why so commenting out listing for now // TUF was removed from BH, not sure why so commenting out listing for now
// { // {
@@ -49,79 +52,120 @@ export const BAndH: Store = {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.bhphotovideo.com/c/product/1593996-REG/msi_g3080gxt10_geforce_rtx_3080_gaming.html' url:
'https://www.bhphotovideo.com/c/product/1593996-REG/msi_g3080gxt10_geforce_rtx_3080_gaming.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.bhphotovideo.com/c/product/1593997-REG/msi_g3080v3x10c_geforce_rtx_3080_ventus.html' url:
'https://www.bhphotovideo.com/c/product/1593997-REG/msi_g3080v3x10c_geforce_rtx_3080_ventus.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.bhphotovideo.com/c/product/1593645-REG/msi_geforce_rtx_3080_gaming.html' url:
'https://www.bhphotovideo.com/c/product/1593645-REG/msi_geforce_rtx_3080_gaming.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.bhphotovideo.com/c/product/1593646-REG/msi_geforce_rtx_3080_ventus.html' url:
'https://www.bhphotovideo.com/c/product/1593646-REG/msi_geforce_rtx_3080_ventus.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1592970-REG/zotac_zt_a30900d_10p_gaming_geforce_rtx_3090.html' url:
'https://www.bhphotovideo.com/c/product/1592970-REG/zotac_zt_a30900d_10p_gaming_geforce_rtx_3090.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1593647-REG/msi_geforce_rtx_3090_gaming.html' url:
'https://www.bhphotovideo.com/c/product/1593647-REG/msi_geforce_rtx_3090_gaming.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1593994-REG/msi_g3090gxt24_geforce_rtx_3090_gaming.html' url:
'https://www.bhphotovideo.com/c/product/1593994-REG/msi_g3090gxt24_geforce_rtx_3090_gaming.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1593648-REG/msi_geforce_rtx_3090_ventus.html' url:
'https://www.bhphotovideo.com/c/product/1593648-REG/msi_geforce_rtx_3090_ventus.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1593995-REG/msi_g3090v3x24c_geforce_rtx_3090_ventus.html' url:
'https://www.bhphotovideo.com/c/product/1593995-REG/msi_g3090v3x24c_geforce_rtx_3090_ventus.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1593334-REG/gigabyte_gv_n3090eagle_oc_24gd_geforce_rtx_3090_eagle.html' url:
'https://www.bhphotovideo.com/c/product/1593334-REG/gigabyte_gv_n3090eagle_oc_24gd_geforce_rtx_3090_eagle.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1593335-REG/gigabyte_gv_n3090gaming_oc_24gd_geforce_rtx3090_gaming_oc.html' url:
'https://www.bhphotovideo.com/c/product/1593335-REG/gigabyte_gv_n3090gaming_oc_24gd_geforce_rtx3090_gaming_oc.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1594454-REG/asus_90yv0fd0_m0am00_tuf_gaming_geforce_rtx.html' url:
'https://www.bhphotovideo.com/c/product/1594454-REG/asus_90yv0fd0_m0am00_tuf_gaming_geforce_rtx.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1594451-REG/asus_90yv0fd1_m0am00_tuf_gaming_geforce_rtx.html' url:
'https://www.bhphotovideo.com/c/product/1594451-REG/asus_90yv0fd1_m0am00_tuf_gaming_geforce_rtx.html'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.bhphotovideo.com/c/product/1598372-REG/amd_100_100000059wof_ryzen_9_5950x_3_4.html'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.bhphotovideo.com/c/product/1598373-REG/amd_100_100000061wof_ryzen_9_5900x_3_7.html'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.bhphotovideo.com/c/product/1598376-REG/amd_100_100000063wof_ryzen_7_5800x_3_8.html'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.bhphotovideo.com/c/product/1598377-REG/amd_100_100000065box_ryzen_5_5600x_3_7.html'
} }
], ],
name: 'bandh' name: 'bandh'
+32 -17
View File
@@ -7,7 +7,8 @@ export const BestBuyCa: Store = {
text: ['available online'] text: ['available online']
}, },
maxPrice: { maxPrice: {
container: 'div[class^="productPricingContainer"] span[class^="screenReaderOnly_"', container:
'div[class^="productPricingContainer"] span[class^="screenReaderOnly_"',
euroFormat: false euroFormat: false
} }
}, },
@@ -16,85 +17,99 @@ export const BestBuyCa: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-2060-super-gaming-x-8gb-gddr6-video-card/14419420?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-2060-super-gaming-x-8gb-gddr6-video-card/14419420?intl=nosplash'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3080-trinity-10gb-gddr6x-video-card/14953249?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3080-trinity-10gb-gddr6x-video-card/14953249?intl=nosplash'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x', model: 'ventus 3x',
series: '3080', series: '3080',
url: 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3080-ventus-3x-10gb-gddr6x-video-card/14950588?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3080-ventus-3x-10gb-gddr6x-video-card/14950588?intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-video-card/14961449?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-video-card/14961449?intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3080-10gb-gddr6x-video-card/14953248?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3080-10gb-gddr6x-video-card/14953248?intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-video-card/14954116?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-video-card/14954116?intl=nosplash'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3090-trinity-24gb-gddr6x-video-card/14953250?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3090-trinity-24gb-gddr6x-video-card/14953250?intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3090-24gb-gddr6x-video-card/14953247?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3090-24gb-gddr6x-video-card/14953247?intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3090-24gb-gddr6x-video-card/14954117?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3090-24gb-gddr6x-video-card/14954117?intl=nosplash'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x', model: 'ventus 3x',
series: '3090', series: '3090',
url: 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3090-ventus-3x-oc-24gb-gddr6x-video-card/14966477?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3090-ventus-3x-oc-24gb-gddr6x-video-card/14966477?intl=nosplash'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x', model: 'ventus 3x',
series: '3070', series: '3070',
url: 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3070-ventus-3x-oc-8gb-gddr6x-video-card/15038016?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3070-ventus-3x-oc-8gb-gddr6x-video-card/15038016?intl=nosplash'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: 'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-oc-8gb-gddr6x-video-card/15000078?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-oc-8gb-gddr6x-video-card/15000078?intl=nosplash'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge', model: 'twin edge',
series: '3070', series: '3070',
url: 'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-8gb-gddr6x-video-card/15000079?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-8gb-gddr6x-video-card/15000079?intl=nosplash'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: 'https://www.bestbuy.ca/en-ca/product/nvidia-geforce-rtx-3070-8gb-gddr6-video-card-only-at-best-buy/15078017?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/nvidia-geforce-rtx-3070-8gb-gddr6-video-card-only-at-best-buy/15078017?intl=nosplash'
} }
], ],
name: 'bestbuy-ca', name: 'bestbuy-ca',
+132 -38
View File
@@ -7,7 +7,8 @@ export const BestBuy: Store = {
text: ['add to cart'] text: ['add to cart']
}, },
maxPrice: { maxPrice: {
container: '[data-sticky-media-gallery] .priceView-price .priceView-hero-price span', container:
'[data-sticky-media-gallery] .priceView-price .priceView-hero-price span',
euroFormat: false euroFormat: false
} }
}, },
@@ -16,217 +17,310 @@ export const BestBuy: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.bestbuy.com/site/evga-ko-ultra-gaming-nvidia-geforce-rtx-2060-6gb-gddr6-pci-express-3-0-graphics-card-black-gray/6403801.p?skuId=6403801&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-ko-ultra-gaming-nvidia-geforce-rtx-2060-6gb-gddr6-pci-express-3-0-graphics-card-black-gray/6403801.p?skuId=6403801&intl=nosplash'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
cartUrl: 'https://api.bestbuy.com/click/-/6429442/cart', cartUrl: 'https://api.bestbuy.com/click/-/6429442/cart',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: 'https://www.bestbuy.com/site/nvidia-geforce-rtx-3070-8gb-gddr6-pci-express-4-0-graphics-card-dark-platinum-and-black/6429442.p?skuId=6429442&intl=nosplash' url:
'https://www.bestbuy.com/site/nvidia-geforce-rtx-3070-8gb-gddr6-pci-express-4-0-graphics-card-dark-platinum-and-black/6429442.p?skuId=6429442&intl=nosplash'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
cartUrl: 'https://api.bestbuy.com/click/-/6429440/cart', cartUrl: 'https://api.bestbuy.com/click/-/6429440/cart',
model: 'founders edition', model: 'founders edition',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/nvidia-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429440.p?skuId=6429440&intl=nosplash' url:
'https://www.bestbuy.com/site/nvidia-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429440.p?skuId=6429440&intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://api.bestbuy.com/click/-/6432445/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432445/cart',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/asus-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-strix-graphics-card-black/6432445.p?skuId=6432445&intl=nosplash' url:
'https://www.bestbuy.com/site/asus-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-strix-graphics-card-black/6432445.p?skuId=6432445&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6439300/cart', cartUrl: 'https://api.bestbuy.com/click/-/6439300/cart',
model: 'xc3 black', model: 'xc3 black',
series: '3070', series: '3070',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3070-xc3-black-gaming-8gb-gddr6x-pci-express-4-0-graphics-card/6439300.p?skuId=6439300&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3070-xc3-black-gaming-8gb-gddr6x-pci-express-4-0-graphics-card/6439300.p?skuId=6439300&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6432399/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432399/cart',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6432399.p?skuId=6432399&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6432399.p?skuId=6432399&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6436194/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436194/cart',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436194.p?skuId=6436194&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436194.p?skuId=6436194&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6432400/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432400/cart',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6432400.p?skuId=6432400&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6432400.p?skuId=6432400&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6436196/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436196/cart',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436196.p?skuId=6436196&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436196.p?skuId=6436196&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6436191/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436191/cart',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436191.p?skuId=6436191&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436191.p?skuId=6436191&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6437912/cart', cartUrl: 'https://api.bestbuy.com/click/-/6437912/cart',
model: 'eagle', model: 'eagle',
series: '3070', series: '3070',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437912.p?skuId=6437912&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437912.p?skuId=6437912&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6437909/cart', cartUrl: 'https://api.bestbuy.com/click/-/6437909/cart',
model: 'gaming oc', model: 'gaming oc',
series: '3070', series: '3070',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437909.p?skuId=6437909&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437909.p?skuId=6437909&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6430620/cart', cartUrl: 'https://api.bestbuy.com/click/-/6430620/cart',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6430620.p?acampID=0&cmp=RMX&loc=Hatch&ref=198&skuId=6430620&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6430620.p?acampID=0&cmp=RMX&loc=Hatch&ref=198&skuId=6430620&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6430621/cart', cartUrl: 'https://api.bestbuy.com/click/-/6430621/cart',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6430621.p?skuId=6430621&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6430621.p?skuId=6430621&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6436219/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436219/cart',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-white/6436219.p?skuId=6436219&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-white/6436219.p?skuId=6436219&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6436223/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436223/cart',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6436223.p?skuId=6436223&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6436223.p?skuId=6436223&intl=nosplash'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://api.bestbuy.com/click/-/6430175/cart', cartUrl: 'https://api.bestbuy.com/click/-/6430175/cart',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/msi-geforce-rtx-3080-ventus-3x-10g-oc-bv-gddr6x-pci-express-4-0-graphic-card-black-silver/6430175.p?skuId=6430175&intl=nosplash' url:
'https://www.bestbuy.com/site/msi-geforce-rtx-3080-ventus-3x-10g-oc-bv-gddr6x-pci-express-4-0-graphic-card-black-silver/6430175.p?skuId=6430175&intl=nosplash'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://api.bestbuy.com/click/-/6432654/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432654/cart',
model: 'dual fan', model: 'dual fan',
series: '3070', series: '3070',
url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3070-8gb-dual-fan-graphics-card/6432654.p?skuId=6432654&intl=nosplash' url:
'https://www.bestbuy.com/site/pny-geforce-rtx-3070-8gb-dual-fan-graphics-card/6432654.p?skuId=6432654&intl=nosplash'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://api.bestbuy.com/click/-/6432653/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432653/cart',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3070', series: '3070',
url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3070-8gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432653.p?skuId=6432653&intl=nosplash' url:
'https://www.bestbuy.com/site/pny-geforce-rtx-3070-8gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432653.p?skuId=6432653&intl=nosplash'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://api.bestbuy.com/click/-/6432655/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432655/cart',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432655.p?skuId=6432655&intl=nosplash' url:
'https://www.bestbuy.com/site/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432655.p?skuId=6432655&intl=nosplash'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://api.bestbuy.com/click/-/6432658/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432658/cart',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432658.p?skuId=6432658&intl=nosplash' url:
'https://www.bestbuy.com/site/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432658.p?skuId=6432658&intl=nosplash'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
cartUrl: 'https://api.bestbuy.com/click/-/6429434/cart', cartUrl: 'https://api.bestbuy.com/click/-/6429434/cart',
model: 'founders edition', model: 'founders edition',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/nvidia-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429434.p?skuId=6429434&intl=nosplash' url:
'https://www.bestbuy.com/site/nvidia-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429434.p?skuId=6429434&intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://api.bestbuy.com/click/-/6432447/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432447/cart',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/asus-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-strix-graphics-card-black/6432447.p?skuId=6432447&intl=nosplash' url:
'https://www.bestbuy.com/site/asus-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-strix-graphics-card-black/6432447.p?skuId=6432447&intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://api.bestbuy.com/click/-/6432446/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432446/cart',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/asus-tuf-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card-black/6432446.p?skuId=6432446&intl=nosplash' url:
'https://www.bestbuy.com/site/asus-tuf-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card-black/6432446.p?skuId=6432446&intl=nosplash'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://api.bestbuy.com/click/-/6430215/cart', cartUrl: 'https://api.bestbuy.com/click/-/6430215/cart',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/msi-geforce-rtx-3090-ventus-3x-24g-oc-bv-24gb-gddr6x-pci-express-4-0-graphics-card-black-silver/6430215.p?skuId=6430215&intl=nosplash' url:
'https://www.bestbuy.com/site/msi-geforce-rtx-3090-ventus-3x-24g-oc-bv-24gb-gddr6x-pci-express-4-0-graphics-card-black-silver/6430215.p?skuId=6430215&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6430623/cart', cartUrl: 'https://api.bestbuy.com/click/-/6430623/cart',
model: 'gaming', model: 'gaming',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3090-24g-gddr6x-pci-express-4-0-graphics-card-black/6430623.p?skuId=6430623&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3090-24g-gddr6x-pci-express-4-0-graphics-card-black/6430623.p?skuId=6430623&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6430624/cart', cartUrl: 'https://api.bestbuy.com/click/-/6430624/cart',
model: 'eagle', model: 'eagle',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3090-24g-gddr6x-pci-express-4-0-graphics-card-black/6430624.p?skuId=6430624&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3090-24g-gddr6x-pci-express-4-0-graphics-card-black/6430624.p?skuId=6430624&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6434363/cart', cartUrl: 'https://api.bestbuy.com/click/-/6434363/cart',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6434363.p?skuId=6434363&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6434363.p?skuId=6434363&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6436193/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436193/cart',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6436193.p?skuId=6436193&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6436193.p?skuId=6436193&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6436192/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436192/cart',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6436192.p?skuId=6436192&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6436192.p?skuId=6436192&intl=nosplash'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://api.bestbuy.com/click/-/6432657/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432657/cart',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3090-24gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432657.p?skuId=6432657&intl=nosplash' url:
'https://www.bestbuy.com/site/pny-geforce-rtx-3090-24gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432657.p?skuId=6432657&intl=nosplash'
},
{
brand: 'amd',
cartUrl: 'https://api.bestbuy.com/click/-/6438942/cart',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.bestbuy.com/site/amd-ryzen-9-5900x-4th-gen-12-core-24-threads-unlocked-desktop-processor-without-cooler/6438942.p?skuId=6438942&intl=nosplash'
},
{
brand: 'amd',
cartUrl: 'https://api.bestbuy.com/click/-/6438941/cart',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.bestbuy.com/site/amd-ryzen-9-5950x-4th-gen-16-core-32-threads-unlocked-desktop-processor-without-cooler/6438941.p?skuId=6438941&intl=nosplash'
},
{
brand: 'amd',
cartUrl: 'https://api.bestbuy.com/click/-/6439000/cart',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.bestbuy.com/site/amd-ryzen-7-5800x-4th-gen-8-core-16-threads-unlocked-desktop-processor-without-cooler/6439000.p?skuId=6439000&intl=nosplash'
},
{
brand: 'amd',
cartUrl: 'https://api.bestbuy.com/click/-/6438943/cart',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.bestbuy.com/site/amd-ryzen-5-5600x-4th-gen-6-core-12-threads-unlocked-desktop-processor-with-wraith-stealth-cooler/6438943.p?skuId=6438943&intl=nosplash'
},
{
brand: 'sony',
cartUrl: 'https://api.bestbuy.com/click/-/6426149/cart',
model: 'ps5 console',
series: 'sonyps5c',
url:
'https://www.bestbuy.com/site/sony-playstation-5-console/6426149.p?skuId=6426149&intl=nosplash'
},
{
brand: 'sony',
cartUrl: 'https://api.bestbuy.com/click/-/6430161/cart',
model: 'ps5 digital',
series: 'sonyps5de',
url:
'https://www.bestbuy.com/site/sony-playstation-5-digital-edition-console/6430161.p?skuId=6430161&intl=nosplash'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url:
'https://www.bestbuy.com/site/microsoft-xbox-series-x-1tb-console-black/6428324.p?skuId=6428324'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url:
'https://www.bestbuy.com/site/microsoft-xbox-series-s-512-gb-all-digital-console-disc-free-gaming-white/6430277.p?skuId=6430277'
} }
], ],
name: 'bestbuy' name: 'bestbuy'
+2 -1
View File
@@ -20,7 +20,8 @@ export const Box: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.box.co.uk/Gigabyte-GeForce-RTX-2080-Super-8GB-Wind_2724554.html' url:
'https://www.box.co.uk/Gigabyte-GeForce-RTX-2080-Super-8GB-Wind_2724554.html'
} }
], ],
linksBuilder: { linksBuilder: {
+120 -51
View File
@@ -21,255 +21,324 @@ export const Caseking: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.caseking.de/evga-geforce-rtx-2060-super-xc-ultra-gaming-8192-mb-gddr6-gcev-385.html' url:
'https://www.caseking.de/evga-geforce-rtx-2060-super-xc-ultra-gaming-8192-mb-gddr6-gcev-385.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.caseking.de/asus-geforce-rtx-3080-rog-strix-10g-10240-mb-gddr6x-gcas-400.html' url:
'https://www.caseking.de/asus-geforce-rtx-3080-rog-strix-10g-10240-mb-gddr6x-gcas-400.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/asus-geforce-rtx-3080-rog-strix-o10g-10240-mb-gddr6x-gcas-399.html' url:
'https://www.caseking.de/asus-geforce-rtx-3080-rog-strix-o10g-10240-mb-gddr6x-gcas-399.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.caseking.de/asus-geforce-rtx-3080-tuf-gaming-10g-10240-mb-gddr6x-gcas-394.html' url:
'https://www.caseking.de/asus-geforce-rtx-3080-tuf-gaming-10g-10240-mb-gddr6x-gcas-394.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/asus-geforce-rtx-3080-tuf-gaming-o10g-10240-mb-gddr6x-gcas-396.html' url:
'https://www.caseking.de/asus-geforce-rtx-3080-tuf-gaming-o10g-10240-mb-gddr6x-gcas-396.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.caseking.de/evga-geforce-rtx-3080-ftw3-gaming-10240-mb-gddr6x-gcev-416.html' url:
'https://www.caseking.de/evga-geforce-rtx-3080-ftw3-gaming-10240-mb-gddr6x-gcev-416.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.caseking.de/evga-geforce-rtx-3080-ftw3-ultra-gaming-10240-mb-gddr6x-gcev-417.html' url:
'https://www.caseking.de/evga-geforce-rtx-3080-ftw3-ultra-gaming-10240-mb-gddr6x-gcev-417.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.caseking.de/evga-geforce-rtx-3080-xc3-gaming-10240-mb-gddr6x-gcev-415.html' url:
'https://www.caseking.de/evga-geforce-rtx-3080-xc3-gaming-10240-mb-gddr6x-gcev-415.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.caseking.de/evga-geforce-rtx-3080-xc3-black-gaming-10240-mb-gddr6x-gcev-414.html' url:
'https://www.caseking.de/evga-geforce-rtx-3080-xc3-black-gaming-10240-mb-gddr6x-gcev-414.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.caseking.de/evga-geforce-rtx-3080-xc3-ultra-gaming-10240-mb-gddr6x-gcev-423.html' url:
'https://www.caseking.de/evga-geforce-rtx-3080-xc3-ultra-gaming-10240-mb-gddr6x-gcev-423.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.caseking.de/gigabyte-aorus-geforce-rtx-3080-master-10g-10240-mb-gddr6x-gcgb-331.html' url:
'https://www.caseking.de/gigabyte-aorus-geforce-rtx-3080-master-10g-10240-mb-gddr6x-gcgb-331.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/gigabyte-geforce-rtx-3080-eagle-oc-10g-10240-mb-gddr6x-gcgb-326.html' url:
'https://www.caseking.de/gigabyte-geforce-rtx-3080-eagle-oc-10g-10240-mb-gddr6x-gcgb-326.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/gigabyte-geforce-rtx-3080-gaming-oc-10g-10240-mb-gddr6x-gcgb-327.html' url:
'https://www.caseking.de/gigabyte-geforce-rtx-3080-gaming-oc-10g-10240-mb-gddr6x-gcgb-327.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/gigabyte-geforce-rtx-3080-vision-oc-10g-10240-mb-gddr6x-gcgb-332.html' url:
'https://www.caseking.de/gigabyte-geforce-rtx-3080-vision-oc-10g-10240-mb-gddr6x-gcgb-332.html'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: 'https://www.caseking.de/inno3d-geforce-rtx-3080-ichill-x3-10240-mb-gddr6x-gci3-170.html' url:
'https://www.caseking.de/inno3d-geforce-rtx-3080-ichill-x3-10240-mb-gddr6x-gci3-170.html'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3080', series: '3080',
url: 'https://www.caseking.de/inno3d-geforce-rtx-3080-ichill-x4-10240-mb-gddr6x-gci3-169.html' url:
'https://www.caseking.de/inno3d-geforce-rtx-3080-ichill-x4-10240-mb-gddr6x-gci3-169.html'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/inno3d-geforce-rtx-3080-twin-x2-oc-10240-mb-gddr6x-gci3-171.html' url:
'https://www.caseking.de/inno3d-geforce-rtx-3080-twin-x2-oc-10240-mb-gddr6x-gci3-171.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.caseking.de/msi-geforce-rtx-3080-gaming-x-trio-10g-10240-mb-gddr6x-gcmc-248.html' url:
'https://www.caseking.de/msi-geforce-rtx-3080-gaming-x-trio-10g-10240-mb-gddr6x-gcmc-248.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/msi-geforce-rtx-3080-ventus-3x-10g-oc-10240-mb-gddr6x-gcmc-247.html' url:
'https://www.caseking.de/msi-geforce-rtx-3080-ventus-3x-10g-oc-10240-mb-gddr6x-gcmc-247.html'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.caseking.de/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10240-mb-gddr6x-gcpn-075.html' url:
'https://www.caseking.de/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10240-mb-gddr6x-gcpn-075.html'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.caseking.de/pny-geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-10240-mb-gddr6x-gcpn-076.html' url:
'https://www.caseking.de/pny-geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-10240-mb-gddr6x-gcpn-076.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'amp holo', model: 'amp holo',
series: '3080', series: '3080',
url: 'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-amp-holo-10240-mb-gddr6x-gczt-166.html' url:
'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-amp-holo-10240-mb-gddr6x-gczt-166.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-trinity-oc-10240-mb-gddr6x-gczt-167.html' url:
'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-trinity-oc-10240-mb-gddr6x-gczt-167.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-trinity-10240-mb-gddr6x-gczt-163.html' url:
'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-trinity-10240-mb-gddr6x-gczt-163.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.caseking.de/asus-geforce-rtx-3090-rog-strix-24g-24576-mb-gddr6x-gcas-397.html' url:
'https://www.caseking.de/asus-geforce-rtx-3090-rog-strix-24g-24576-mb-gddr6x-gcas-397.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.caseking.de/asus-geforce-rtx-3090-rog-strix-o24g-24576-mb-gddr6x-gcas-398.html' url:
'https://www.caseking.de/asus-geforce-rtx-3090-rog-strix-o24g-24576-mb-gddr6x-gcas-398.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.caseking.de/asus-geforce-rtx-3090-tuf-gaming-24g-24576-mb-gddr6x-gcas-393.html' url:
'https://www.caseking.de/asus-geforce-rtx-3090-tuf-gaming-24g-24576-mb-gddr6x-gcas-393.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.caseking.de/asus-geforce-rtx-3090-tuf-gaming-o24g-24576-mb-gddr6x-gcas-395.html' url:
'https://www.caseking.de/asus-geforce-rtx-3090-tuf-gaming-o24g-24576-mb-gddr6x-gcas-395.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://www.caseking.de/evga-geforce-rtx-3090-ftw3-gaming-24576-mb-gddr6x-gcev-421.html' url:
'https://www.caseking.de/evga-geforce-rtx-3090-ftw3-gaming-24576-mb-gddr6x-gcev-421.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://www.caseking.de/evga-geforce-rtx-3090-ftw3-ultra-gaming-24576-mb-gddr6x-gcev-422.html' url:
'https://www.caseking.de/evga-geforce-rtx-3090-ftw3-ultra-gaming-24576-mb-gddr6x-gcev-422.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://www.caseking.de/evga-geforce-rtx-3090-xc3-gaming-24576-mb-gddr6x-gcev-419.html' url:
'https://www.caseking.de/evga-geforce-rtx-3090-xc3-gaming-24576-mb-gddr6x-gcev-419.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3090', series: '3090',
url: 'https://www.caseking.de/evga-geforce-rtx-3090-xc3-black-gaming-24576-mb-gddr6x-gcev-418.html' url:
'https://www.caseking.de/evga-geforce-rtx-3090-xc3-black-gaming-24576-mb-gddr6x-gcev-418.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3090', series: '3090',
url: 'https://www.caseking.de/evga-geforce-rtx-3090-xc3-ultra-gaming-24576-mb-gddr6x-gcev-420.html' url:
'https://www.caseking.de/evga-geforce-rtx-3090-xc3-ultra-gaming-24576-mb-gddr6x-gcev-420.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://www.caseking.de/gigabyte-geforce-rtx-3090-eagle-oc-24g-24576-mb-gddr6x-gcgb-329.html' url:
'https://www.caseking.de/gigabyte-geforce-rtx-3090-eagle-oc-24g-24576-mb-gddr6x-gcgb-329.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.caseking.de/gigabyte-geforce-rtx-3090-gaming-oc-24g-24576-mb-gddr6x-gcgb-328.html' url:
'https://www.caseking.de/gigabyte-geforce-rtx-3090-gaming-oc-24g-24576-mb-gddr6x-gcgb-328.html'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'gaming x3', model: 'gaming x3',
series: '3090', series: '3090',
url: 'https://www.caseking.de/inno3d-geforce-rtx-3090-gaming-x3-24576-mb-gddr6x-gci3-172.html' url:
'https://www.caseking.de/inno3d-geforce-rtx-3090-gaming-x3-24576-mb-gddr6x-gci3-172.html'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3090', series: '3090',
url: 'https://www.caseking.de/inno3d-geforce-rtx-3090-ichill-x3-24576-mb-gddr6x-gci3-168.html' url:
'https://www.caseking.de/inno3d-geforce-rtx-3090-ichill-x3-24576-mb-gddr6x-gci3-168.html'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3090', series: '3090',
url: 'https://www.caseking.de/inno3d-geforce-rtx-3090-ichill-x4-24576-mb-gddr6x-gci3-167.html' url:
'https://www.caseking.de/inno3d-geforce-rtx-3090-ichill-x4-24576-mb-gddr6x-gci3-167.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.caseking.de/msi-geforce-rtx-3090-gaming-x-trio-24g-24576-mb-gddr6x-gcmc-244.html' url:
'https://www.caseking.de/msi-geforce-rtx-3090-gaming-x-trio-24g-24576-mb-gddr6x-gcmc-244.html'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3090', series: '3090',
url: 'https://www.caseking.de/pny-geforce-rtx-3090-xlr8-gaming-epic-x-rgb-24576-mb-gddr6x-gcpn-073.html' url:
'https://www.caseking.de/pny-geforce-rtx-3090-xlr8-gaming-epic-x-rgb-24576-mb-gddr6x-gcpn-073.html'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3090', series: '3090',
url: 'https://www.caseking.de/pny-geforce-rtx-3090-xlr8-gaming-revel-epic-x-rgb-24576-mb-gddr6x-gcpn-074.html' url:
'https://www.caseking.de/pny-geforce-rtx-3090-xlr8-gaming-revel-epic-x-rgb-24576-mb-gddr6x-gcpn-074.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.caseking.de/zotac-gaming-geforce-rtx-3090-trinity-24576-mb-gddr6x-gczt-162.html' url:
'https://www.caseking.de/zotac-gaming-geforce-rtx-3090-trinity-24576-mb-gddr6x-gczt-162.html'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.caseking.de/amd-ryzen-5-5600x-3-7-ghz-vermeer-am4-mit-amd-wraith-stealth-kuehler-hpam-202.html'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.caseking.de/amd-ryzen-7-5800x-3-8-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-203.html'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.caseking.de/amd-ryzen-9-5900x-3-7-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-204.html'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.caseking.de/amd-ryzen-9-5950x-3-4-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-205.html'
} }
], ],
name: 'caseking' name: 'caseking'
}; };
+8 -4
View File
@@ -21,7 +21,8 @@ export const Ccl: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.cclonline.com/product/296443/RTX-2060-SUPER-VENTUS-GP-OC/Graphics-Cards/MSI-GeForce-RTX-2060-SUPER-VENTUS-GP-OC-8GB-Overclocked-Graphics-Card/VGA5671/' url:
'https://www.cclonline.com/product/296443/RTX-2060-SUPER-VENTUS-GP-OC/Graphics-Cards/MSI-GeForce-RTX-2060-SUPER-VENTUS-GP-OC-8GB-Overclocked-Graphics-Card/VGA5671/'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -34,15 +35,18 @@ export const Ccl: Store = {
urls: [ urls: [
{ {
series: '3070', series: '3070',
url: 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3070-Graphics-Cards/' url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3070-Graphics-Cards/'
}, },
{ {
series: '3080', series: '3080',
url: 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3080-Graphics-Cards/' url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3080-Graphics-Cards/'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3090-Graphics-Cards/' url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3090-Graphics-Cards/'
} }
] ]
}, },
+186 -83
View File
@@ -4,7 +4,11 @@ export const Computeruniverse: Store = {
labels: { labels: {
inStock: { inStock: {
container: '.availability', container: '.availability',
text: ['bestellartikel', 'auf lager und sofort lieferbar', 'kurzfristig verfügbar'] text: [
'bestellartikel',
'auf lager und sofort lieferbar',
'kurzfristig verfügbar'
]
}, },
maxPrice: { maxPrice: {
container: '.product-price', container: '.product-price',
@@ -16,31 +20,36 @@ export const Computeruniverse: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.computeruniverse.net/de/gainward-geforce-gtx-1660-super-ghost-6-gb-high-end-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-gtx-1660-super-ghost-6-gb-high-end-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/asus-geforce-rtx3070-dual-rtx3070-8g-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-geforce-rtx3070-dual-rtx3070-8g-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'dual oc', model: 'dual oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/asus-geforce-rtx3070-dual-oc-dual-rtx3070-o8g-8-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-geforce-rtx3070-dual-oc-dual-rtx3070-o8g-8-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3070-gaming-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3070-gaming-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3070-gaming-oc-8-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3070-gaming-oc-8-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
@@ -52,67 +61,78 @@ export const Computeruniverse: Store = {
brand: 'gainward', brand: 'gainward',
model: 'phoenix', model: 'phoenix',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3070-phoenix-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-rtx3070-phoenix-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3070-phoenix-gs-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-rtx3070-phoenix-gs-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle', model: 'eagle',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-eagle-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-eagle-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-eagle-oc-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-eagle-oc-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-gaming-oc-8-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-gaming-oc-8-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3070-ichill-x3' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3070-ichill-x3'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3070-ichill-x4' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3070-ichill-x4'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3070-gaming-x-trio-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3070-gaming-x-trio-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 2x oc', model: 'ventus 2x oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3070-ventus-2x-oc-8-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3070-ventus-2x-oc-8-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3070-ventus-3x-oc-8-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3070-ventus-3x-oc-8-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3070-gaming-pro-8-gb' url:
'https://www.computeruniverse.net/de/palit-geforce-rtx3070-gaming-pro-8-gb'
}, },
{ {
brand: 'pny', brand: 'pny',
@@ -122,333 +142,416 @@ export const Computeruniverse: Store = {
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/pny-geforce-rtx3070-xlr8-gaming-epic-x-rgb-p-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/pny-geforce-rtx3070-xlr8-gaming-epic-x-rgb-p-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3070-twin-edge-oc-8-gb-oc' url:
'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3070-twin-edge-oc-8-gb-oc'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3080-gaming-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3080-gaming-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3080-gaming-oc-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3080-gaming-oc-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3080-gaming-tuf-rtx3080-10g-gaming-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3080-gaming-tuf-rtx3080-10g-gaming-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3080-gaming-oc-tuf-rtx3080-o10g-gaming-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3080-gaming-oc-tuf-rtx3080-o10g-gaming-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-ftw3-10-gb-high-end-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3080-ftw3-10-gb-high-end-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-ultra-ftw3-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3080-ultra-ftw3-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-black-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-black-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-ultra-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-ultra-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix', model: 'phoenix',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3080-phoenix-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-rtx3080-phoenix-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3080-phoenix-gs-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-rtx3080-phoenix-gs-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/gigabyte-aorus-geforce-rtx3080-master-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-aorus-geforce-rtx3080-master-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-eagle-oc-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-eagle-oc-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-gaming-oc-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-gaming-oc-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-vision-oc-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-vision-oc-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-ichill-x3-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-ichill-x3-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-ichill-x4-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-ichill-x4-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-twin-x2-oc-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-twin-x2-oc-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'kfa2', brand: 'kfa2',
model: 'sg oc', model: 'sg oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/kfa-geforce-rtx3080-sg-oc-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/kfa-geforce-rtx3080-sg-oc-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3080-gaming-x-trio-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3080-gaming-x-trio-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3080-ventus-3x-oc-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3080-ventus-3x-oc-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3080-gamingpro-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/palit-geforce-rtx3080-gamingpro-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3080-gamingpro-oc-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/palit-geforce-rtx3080-gamingpro-oc-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-p-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-p-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/pny-geforce-rtx3080-xlr8-gaming-epic-x-rgb-m-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/pny-geforce-rtx3080-xlr8-gaming-epic-x-rgb-m-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'amp holo', model: 'amp holo',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/zotac-geforce-rtx3080-amp-holo-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/zotac-geforce-rtx3080-amp-holo-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'amp extreme holo', model: 'amp extreme holo',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/zotac-geforce-rtx3080-amp-extreme-holo-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/zotac-geforce-rtx3080-amp-extreme-holo-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3080-trinity-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3080-trinity-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3080-trinity-oc-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3080-trinity-oc-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3090-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3090-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3090-gaming-oc-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3090-gaming-oc-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3090-gaming-tuf-rtx3090-24g-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3090-gaming-tuf-rtx3090-24g-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3090-gaming-oc-tuf-rtx3090-o24g-gaming-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3090-gaming-oc-tuf-rtx3090-o24g-gaming-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-ftw3-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3090-ftw3-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-ftw3-ultra-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3090-ftw3-ultra-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-black-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-black-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-ultra-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-ultra-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix', model: 'phoenix',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3090-phoenix-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-rtx3090-phoenix-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs oc', model: 'phoenix gs oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3090-phoenix-gs-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-rtx3090-phoenix-gs-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/gigabyte-aorus-geforce-rtx3090-master-24gb' url:
'https://www.computeruniverse.net/de/gigabyte-aorus-geforce-rtx3090-master-24gb'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3090-eagle-oc-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3090-eagle-oc-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3090-gaming-oc-24-gb-oc' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3090-gaming-oc-24-gb-oc'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3090-ichill-x3-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3090-ichill-x3-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3090-ichill-x4-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3090-ichill-x4-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'kfa2', brand: 'kfa2',
model: 'sg oc', model: 'sg oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/kfa-geforce-rtx3090-sg-oc-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/kfa-geforce-rtx3090-sg-oc-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3090-gaming-x-trio-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3090-gaming-x-trio-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3090-ventus-3x-oc-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3090-ventus-3x-oc-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3090-gamingpro-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/palit-geforce-rtx3090-gamingpro-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3090-gamingpro-oc-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/palit-geforce-rtx3090-gamingpro-oc-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/pny-geforce-rtx3090-xlr8-gaming-epic-x-rgb-m-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/pny-geforce-rtx3090-xlr8-gaming-epic-x-rgb-m-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/pny-geforce-rtx3090-xlr8-gaming-epic-x-rgb-p-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/pny-geforce-rtx3090-xlr8-gaming-epic-x-rgb-p-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx-3090-trinity-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx-3090-trinity-24-gb-enthusiast-grafikkarte'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.computeruniverse.net/de/amd-ryzen-5-5600x-boxed-mit-wraith-stealth-kuehler'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.computeruniverse.net/de/amd-ryzen-7-5800x-box-ohne-kuehler'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.computeruniverse.net/de/amd-ryzen-9-5900x-box-ohne-kuehler'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.computeruniverse.net/de/amd-ryzen-9-5950x-box-ohne-kuehler'
} }
], ],
name: 'computeruniverse' name: 'computeruniverse'
+4 -4
View File
@@ -60,13 +60,13 @@ export const Coolblue: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc gaming', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.coolblue.nl/product/868731/' url: 'https://www.coolblue.nl/product/868731/'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix gaming', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.coolblue.nl/product/868732/' url: 'https://www.coolblue.nl/product/868732/'
}, },
@@ -96,13 +96,13 @@ export const Coolblue: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc gaming', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.coolblue.nl/product/868728/' url: 'https://www.coolblue.nl/product/868728/'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix gaming', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.coolblue.nl/product/868729/' url: 'https://www.coolblue.nl/product/868729/'
}, },
+83 -31
View File
@@ -16,153 +16,205 @@ export const Coolmod: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.coolmod.com/kfa2-geforce-rtx-2060-super-1-click-oc-8gb-gddr6-tarjeta-grafica-precio' url:
'https://www.coolmod.com/kfa2-geforce-rtx-2060-super-1-click-oc-8gb-gddr6-tarjeta-grafica-precio'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-eagle-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/gigabyte-geforce-rtx-3080-eagle-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/msi-geforce-rtx-3080-ventus-3x-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/msi-geforce-rtx-3080-ventus-3x-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-gaming-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-gaming-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-gaming-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/gigabyte-geforce-rtx-3080-gaming-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/msi-geforce-rtx-3080-gaming-x-trio-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/msi-geforce-rtx-3080-gaming-x-trio-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-oc-gaming-10gb-gddr6x-tarjeta-grfica-precio' url:
'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-oc-gaming-10gb-gddr6x-tarjeta-grfica-precio'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-black-gaming-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-black-gaming-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-tarjeta-grfica-precio' url:
'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-tarjeta-grfica-precio'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-vision-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/gigabyte-geforce-rtx-3080-vision-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-gaming-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-gaming-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-master-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-master-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-gaming-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-gaming-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'kfa2', brand: 'kfa2',
model: 'sg-oc', model: 'sg oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/kfa2-geforce-rtx-3080-sg-1-click-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/kfa2-geforce-rtx-3080-sg-1-click-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x4-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x4-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x3-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x3-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/inno3d-geforce-rtx-3080-twin-x2-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/inno3d-geforce-rtx-3080-twin-x2-oc-10gb-gddr6x-tarjeta-grafica-precio'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.coolmod.com/amd-ryzen-5-5600x-46ghz-socket-am4-boxed-procesador-precio'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.coolmod.com/amd-ryzen-7-5800x-47ghz-socket-am4-boxed-procesador-precio'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.coolmod.com/amd-ryzen-9-5900x-48ghz-socket-am4-boxed-procesador-precio'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.coolmod.com/amd-ryzen-9-5950x-49ghz-socket-am4-boxed-procesador-precio'
} }
], ],
name: 'coolmod' name: 'coolmod'
}; };
+6 -3
View File
@@ -21,7 +21,8 @@ export const Currys: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/graphics-cards/msi-geforce-rtx-2060-8-gb-super-ventus-gp-oc-graphics-card-10196803-pdt.html' url:
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/graphics-cards/msi-geforce-rtx-2060-8-gb-super-ventus-gp-oc-graphics-card-10196803-pdt.html'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -34,11 +35,13 @@ export const Currys: Store = {
urls: [ urls: [
{ {
series: '3080', series: '3080',
url: 'https://www.currys.co.uk/gbuk/rtx-3080/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313767/xx-criteria.html' url:
'https://www.currys.co.uk/gbuk/rtx-3080/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313767/xx-criteria.html'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.currys.co.uk/gbuk/rtx-3090/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313725/xx-criteria.html' url:
'https://www.currys.co.uk/gbuk/rtx-3090/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313725/xx-criteria.html'
} }
] ]
}, },
+26 -2
View File
@@ -24,13 +24,13 @@ export const Cyberport: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E07-51S' url: 'https://www.cyberport.de?DEEP=2E07-51S'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E07-51T' url: 'https://www.cyberport.de?DEEP=2E07-51T'
}, },
@@ -93,6 +93,30 @@ export const Cyberport: Store = {
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E13-1H7' url: 'https://www.cyberport.de?DEEP=2E13-1H7'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.cyberport.de?DEEP=2001-71p'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.cyberport.de/?DEEP=2001-71n'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.cyberport.de?DEEP=2001-71m'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.cyberport.de?DEEP=2001-71l'
} }
], ],
name: 'cyberport' name: 'cyberport'
+21 -4
View File
@@ -21,7 +21,21 @@ export const Ebuyer: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.ebuyer.com/874209-gigabyte-geforce-rtx-2060-windforce-6gb-oc-graphics-card-gv-n2060wf2oc-6gd-v2' url:
'https://www.ebuyer.com/874209-gigabyte-geforce-rtx-2060-windforce-6gb-oc-graphics-card-gv-n2060wf2oc-6gd-v2'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.ebuyer.com/1125329-sony-playstation-5-console-cfi-1015a'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url:
'https://www.ebuyer.com/1125332-sony-playstation-5-digital-edition-cfi-1015b'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -34,15 +48,18 @@ export const Ebuyer: Store = {
urls: [ urls: [
{ {
series: '3070', series: '3070',
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3070' url:
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3070'
}, },
{ {
series: '3080', series: '3080',
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3080' url:
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3080'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3090' url:
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3090'
} }
] ]
}, },
+47
View File
@@ -0,0 +1,47 @@
import {Store} from './store';
export const Galaxus: Store = {
labels: {
inStock: {
container: '#addToCartButton:enabled',
text: ['In den Warenkorb']
},
maxPrice: {
container: '.productDetail .ZZa5',
euroFormat: true
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.galaxus.de/de/product/11156643'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.galaxus.de/de/product/13987919'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.galaxus.de/de/product/13987918'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.galaxus.de/de/product/13987917'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.galaxus.de/de/product/13987916'
}
],
name: 'galaxus'
};
+40
View File
@@ -0,0 +1,40 @@
import {Store} from './store';
export const Game: Store = {
labels: {
inStock: {
container: '.buyingOptions',
text: ['Pre-order Now', 'Buy New']
},
maxPrice: {
container: '.buyingOptions .btnPrice',
euroFormat: false
},
outOfStock: {
container: '.buyingOptions',
text: ['out of stock']
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url:
'https://www.game.co.uk/en/ea-sports-fifa-21-500gb-ps4-bundle-2832947'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.game.co.uk/en/playstation-5-console-2826338'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.game.co.uk/en/playstation-5-digital-edition-2826341'
}
],
name: 'game'
};
+42 -6
View File
@@ -2,10 +2,16 @@ import {Store} from './store';
export const Gamestop: Store = { export const Gamestop: Store = {
labels: { labels: {
inStock: { inStock: [
container: '.add-to-cart', {
text: ['add to cart'] container: '.add-to-cart',
}, text: ['add to cart']
},
{
container: '.add-to-cart',
text: ['Pre-Order']
}
],
maxPrice: { maxPrice: {
container: '.primary-details-row .actual-price', container: '.primary-details-row .actual-price',
euroFormat: false euroFormat: false
@@ -20,13 +26,43 @@ export const Gamestop: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.gamestop.com/nav-pc-hardware-desktops/products/clx-set-tgmsetgxe9600bm-gaming-desktop/11096665' url:
'https://www.gamestop.com/nav-pc-hardware-desktops/products/clx-set-tgmsetgxe9600bm-gaming-desktop/11096665'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.gamestop.com/video-games/pc/components/graphics-cards/products/tuf-gaming-geforce-rtx-3080-graphics-card/11109446.html' url:
'https://www.gamestop.com/video-games/pc/components/graphics-cards/products/tuf-gaming-geforce-rtx-3080-graphics-card/11109446.html'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url:
'https://www.gamestop.com/video-games/playstation-5/consoles/products/playstation-5/11108140'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url:
'https://www.gamestop.com/video-games/playstation-5/consoles/products/playstation-5-digital-edition/11108141'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url:
'https://www.gamestop.com/video-games/xbox-series-x/consoles/products/xbox-series-x/11108371.html?condition=New'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url:
'https://www.gamestop.com/video-games/xbox-series-x/consoles/products/xbox-series-s-digital-edition/11108372.html?condition=New'
} }
], ],
name: 'gamestop', name: 'gamestop',
+8 -2
View File
@@ -10,7 +10,11 @@ type Backoff = {
const stores: Record<string, Backoff> = {}; const stores: Record<string, Backoff> = {};
export async function processBackoffDelay(store: Store, link: Link, statusCode: number): Promise<number> { export async function processBackoffDelay(
store: Store,
link: Link,
statusCode: number
): Promise<number> {
/** /**
* We treat statusCode 0 as successful as some of the puppeteer plugins * We treat statusCode 0 as successful as some of the puppeteer plugins
* cause side-effects resulting in an empty response object even though * cause side-effects resulting in an empty response object even though
@@ -41,7 +45,9 @@ export async function processBackoffDelay(store: Store, link: Link, statusCode:
} }
const backoffTime = backoff.time; const backoffTime = backoff.time;
logger.debug(Print.backoff(link, store, {delay: backoffTime, statusCode}, true)); logger.debug(
Print.backoff(link, store, {delay: backoffTime, statusCode}, true)
);
await delay(backoff.time); await delay(backoff.time);
+20 -14
View File
@@ -1,9 +1,9 @@
import {Link, Series} from '../store'; import {Link, Model, Series} from '../store';
import {logger} from '../../../logger'; import {logger} from '../../../logger';
export interface Card { export interface Card {
brand: string; brand: string;
model: string; model: Model;
} }
interface LinksBuilderOptions { interface LinksBuilderOptions {
@@ -95,7 +95,10 @@ export function parseCard(name: string): Card | null {
} }
// Split non spaced TitleCase words only after extracting brand // Split non spaced TitleCase words only after extracting brand
model = model.join(' ').replace(/([A-Z][a-z]+)([A-Z][a-z]+)/g, '$1 $2').split(' '); model = model
.join(' ')
.replace(/([A-Z][a-z]+)([A-Z][a-z]+)/g, '$1 $2')
.split(' ');
// Some vendors have oc at the beginning of the product name, // Some vendors have oc at the beginning of the product name,
// store whether the card contains the term "oc" and remove // store whether the card contains the term "oc" and remove
@@ -103,28 +106,31 @@ export function parseCard(name: string): Card | null {
let isOC = false; let isOC = false;
/* eslint-disable @typescript-eslint/prefer-regexp-exec */ /* eslint-disable @typescript-eslint/prefer-regexp-exec */
model = model.filter(word => { model = model.filter((word) => {
if (word.toLowerCase() === 'oc') { if (word.toLowerCase() === 'oc') {
isOC = true; isOC = true;
return false; return false;
} }
return !word.match(/^(nvidia|geforce|ge|force|rtx|amp[ae]re|graphics|card|gpu|pci-?e(xpress)?|ray-?tracing|ray|tracing|core|boost|epicx)$/i) && return (
!word.match(
/^(nvidia|geforce|ge|force|rtx|amp[ae]re|graphics|card|gpu|pci-?e(xpress)?|ray-?tracing|ray|tracing|core|boost|epicx)$/i
) &&
!word.match(/^(\d+(?:gb?|mhz)?|gb|mhz|g?ddr(\d+x?)?)$/i) && !word.match(/^(\d+(?:gb?|mhz)?|gb|mhz|g?ddr(\d+x?)?)$/i) &&
!word.match(/^(display ?port|hdmi|vga)$/i); !word.match(/^(display ?port|hdmi|vga)$/i)
);
}); });
/* eslint-enable @typescript-eslint/prefer-regexp-exec */ /* eslint-enable @typescript-eslint/prefer-regexp-exec */
if (isOC) { if (isOC) model.push('oc');
model.push('OC'); if (model.length === 0) return null;
}
if (model.length === 0) {
return null;
}
return { return {
brand: brand.toLowerCase(), brand: brand.toLowerCase(),
model: model.join(' ').toLowerCase().replace(/ gaming\b/g, '').trim() model: model
.join(' ')
.toLowerCase()
.replace(/ gaming\b/g, '')
.trim() as Model
}; };
} }
+27 -12
View File
@@ -74,7 +74,12 @@ export class NvidiaCart {
break; break;
} catch (error) { } catch (error) {
logger.error(`✖ [nvidia] ${name} could not automatically add to cart, attempt ${i + 1} of ${config.nvidia.addToCardAttempts}`, error); logger.error(
`✖ [nvidia] ${name} could not automatically add to cart, attempt ${
i + 1
} of ${config.nvidia.addToCardAttempts}`,
error
);
logger.debug(error); logger.debug(error);
lastError = error; lastError = error;
@@ -92,7 +97,9 @@ export class NvidiaCart {
await open(cartUrl); await open(cartUrl);
} catch (error) { } catch (error) {
logger.error(`✖ [nvidia] ${name} could not automatically add to cart, opening page`); logger.error(
`✖ [nvidia] ${name} could not automatically add to cart, opening page`
);
logger.debug(error); logger.debug(error);
cartUrl = this.fallbackCartUrl; cartUrl = this.fallbackCartUrl;
@@ -118,10 +125,18 @@ export class NvidiaCart {
public async refreshSessionToken(): Promise<void> { public async refreshSessionToken(): Promise<void> {
logger.debug(' [nvidia] refreshing session token'); logger.debug(' [nvidia] refreshing session token');
try { try {
const result = await usingResponse(this.browser, this.sessionUrl, async response => { const result = await usingResponse(
return response?.json() as NvidiaSessionTokenJSON | undefined; this.browser,
}); this.sessionUrl,
if (typeof result !== 'object' || result === null || !('session_token' in result)) { async (response) => {
return response?.json() as NvidiaSessionTokenJSON | undefined;
}
);
if (
typeof result !== 'object' ||
result === null ||
!('session_token' in result)
) {
throw new Error('malformed response'); throw new Error('malformed response');
} }
@@ -133,18 +148,20 @@ export class NvidiaCart {
} }
} }
protected async addToCartAndGetLocationRedirect(productId: number): Promise<string> { protected async addToCartAndGetLocationRedirect(
productId: number
): Promise<string> {
const url = 'https://api-prod.nvidia.com/direct-sales-shop/DR/add-to-cart'; const url = 'https://api-prod.nvidia.com/direct-sales-shop/DR/add-to-cart';
const sessionToken = await this.getSessionToken(); const sessionToken = await this.getSessionToken();
logger.info(` [nvidia] session_token=${sessionToken}`); logger.info(` [nvidia] session_token=${sessionToken}`);
const locationData = await usingPage(this.browser, async page => { const locationData = await usingPage(this.browser, async (page) => {
page.removeAllListeners('request'); page.removeAllListeners('request');
await page.setRequestInterception(true); await page.setRequestInterception(true);
page.on('request', interceptedRequest => { page.on('request', (interceptedRequest) => {
void interceptedRequest.continue({ void interceptedRequest.continue({
headers: { headers: {
...interceptedRequest.headers(), ...interceptedRequest.headers(),
@@ -153,9 +170,7 @@ export class NvidiaCart {
}, },
method: 'POST', method: 'POST',
postData: JSON.stringify({ postData: JSON.stringify({
products: [ products: [{productId, quantity: 1}]
{productId, quantity: 1}
]
}) })
}); });
}); });
+27 -7
View File
@@ -13,15 +13,23 @@ function getRegionInfo(): NvidiaRegionInfo {
const regionInfo = regionInfos.get(country); const regionInfo = regionInfos.get(country);
if (!regionInfo) { if (!regionInfo) {
throw new Error(`LogicException could not retrieve region info for ${country}`); throw new Error(
`LogicException could not retrieve region info for ${country}`
);
} }
return regionInfo; return regionInfo;
} }
function nvidiaStockUrl(id: number, drLocale: string, currency: string): string { function nvidiaStockUrl(
return `https://api-prod.nvidia.com/direct-sales-shop/DR/products/${drLocale}/${currency}/${id}?` + id: number,
timestampUrlParameter().slice(1); drLocale: string,
currency: string
): string {
return (
`https://api-prod.nvidia.com/direct-sales-shop/DR/products/${drLocale}/${currency}/${id}?` +
timestampUrlParameter().slice(1)
);
} }
let cart: NvidiaCart; let cart: NvidiaCart;
@@ -45,7 +53,13 @@ export function generateOpenCartAction(id: number, cardName: string) {
} }
export function generateLinks(): Link[] { export function generateLinks(): Link[] {
const {drLocale, fe3080Id, fe3090Id, fe2060SuperId, currency} = getRegionInfo(); const {
drLocale,
fe3080Id,
fe3090Id,
fe2060SuperId,
currency
} = getRegionInfo();
const links: Link[] = []; const links: Link[] = [];
@@ -63,7 +77,10 @@ export function generateLinks(): Link[] {
links.push({ links.push({
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
openCartAction: generateOpenCartAction(fe3080Id, 'nvidia founders edition 3080'), openCartAction: generateOpenCartAction(
fe3080Id,
'nvidia founders edition 3080'
),
series: '3080', series: '3080',
url: nvidiaStockUrl(fe3080Id, drLocale, currency) url: nvidiaStockUrl(fe3080Id, drLocale, currency)
}); });
@@ -73,7 +90,10 @@ export function generateLinks(): Link[] {
links.push({ links.push({
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
openCartAction: generateOpenCartAction(fe3090Id, 'nvidia founders edition 3090'), openCartAction: generateOpenCartAction(
fe3090Id,
'nvidia founders edition 3090'
),
series: '3090', series: '3090',
url: nvidiaStockUrl(fe3090Id, drLocale, currency) url: nvidiaStockUrl(fe3090Id, drLocale, currency)
}); });
+35 -5
View File
@@ -1,4 +1,6 @@
import {config, defaultStoreData} from '../../config'; import {config, defaultStoreData} from '../../config';
import {AMD} from './amd';
import {AMDDe} from './amd-de';
import {Adorama} from './adorama'; import {Adorama} from './adorama';
import {Alternate} from './alternate'; import {Alternate} from './alternate';
import {AlternateNL} from './alternate-nl'; import {AlternateNL} from './alternate-nl';
@@ -9,6 +11,7 @@ import {AmazonEs} from './amazon-es';
import {AmazonNl} from './amazon-nl'; import {AmazonNl} from './amazon-nl';
import {AmazonUk} from './amazon-uk'; import {AmazonUk} from './amazon-uk';
import {Aria} from './aria'; import {Aria} from './aria';
import {Arlt} from './arlt';
import {Asus} from './asus'; import {Asus} from './asus';
import {AsusDe} from './asus-de'; import {AsusDe} from './asus-de';
import {Azerty} from './azerty'; import {Azerty} from './azerty';
@@ -26,8 +29,12 @@ import {Cyberport} from './cyberport';
import {Ebuyer} from './ebuyer'; import {Ebuyer} from './ebuyer';
import {Evga} from './evga'; import {Evga} from './evga';
import {EvgaEu} from './evga-eu'; import {EvgaEu} from './evga-eu';
import {Galaxus} from './galaxus';
import {Game} from './game';
import {Gamestop} from './gamestop'; import {Gamestop} from './gamestop';
import {Kabum} from './kabum';
import {Mediamarkt} from './mediamarkt'; import {Mediamarkt} from './mediamarkt';
import {MemoryExpress} from './memoryexpress';
import {MicroCenter} from './microcenter'; import {MicroCenter} from './microcenter';
import {Mindfactory} from './mindfactory'; import {Mindfactory} from './mindfactory';
import {Newegg} from './newegg'; import {Newegg} from './newegg';
@@ -45,7 +52,9 @@ import {ProshopDK} from './proshop-dk';
import {Saturn} from './saturn'; import {Saturn} from './saturn';
import {Scan} from './scan'; import {Scan} from './scan';
import {Store} from './store'; import {Store} from './store';
import {Target} from './target';
import {Very} from './very'; import {Very} from './very';
import {Walmart} from './walmart';
import {Zotac} from './zotac'; import {Zotac} from './zotac';
import {logger} from '../../logger'; import {logger} from '../../logger';
@@ -59,7 +68,10 @@ export const storeList = new Map([
[AmazonEs.name, AmazonEs], [AmazonEs.name, AmazonEs],
[AmazonNl.name, AmazonNl], [AmazonNl.name, AmazonNl],
[AmazonUk.name, AmazonUk], [AmazonUk.name, AmazonUk],
[AMD.name, AMD],
[AMDDe.name, AMDDe],
[Aria.name, Aria], [Aria.name, Aria],
[Arlt.name, Arlt],
[Asus.name, Asus], [Asus.name, Asus],
[AsusDe.name, AsusDe], [AsusDe.name, AsusDe],
[Azerty.name, Azerty], [Azerty.name, Azerty],
@@ -77,8 +89,12 @@ export const storeList = new Map([
[Ebuyer.name, Ebuyer], [Ebuyer.name, Ebuyer],
[Evga.name, Evga], [Evga.name, Evga],
[EvgaEu.name, EvgaEu], [EvgaEu.name, EvgaEu],
[Galaxus.name, Galaxus],
[Game.name, Game],
[Gamestop.name, Gamestop], [Gamestop.name, Gamestop],
[Kabum.name, Kabum],
[Mediamarkt.name, Mediamarkt], [Mediamarkt.name, Mediamarkt],
[MemoryExpress.name, MemoryExpress],
[MicroCenter.name, MicroCenter], [MicroCenter.name, MicroCenter],
[Mindfactory.name, Mindfactory], [Mindfactory.name, Mindfactory],
[Newegg.name, Newegg], [Newegg.name, Newegg],
@@ -95,7 +111,9 @@ export const storeList = new Map([
[ProshopDK.name, ProshopDK], [ProshopDK.name, ProshopDK],
[Saturn.name, Saturn], [Saturn.name, Saturn],
[Scan.name, Scan], [Scan.name, Scan],
[Target.name, Target],
[Very.name, Very], [Very.name, Very],
[Walmart.name, Walmart],
[Zotac.name, Zotac] [Zotac.name, Zotac]
]); ]);
@@ -128,7 +146,11 @@ function filterBrandsSeriesModels() {
function printConfig() { function printConfig() {
if (config.store.stores.length > 0) { if (config.store.stores.length > 0) {
logger.info(` selected stores: ${config.store.stores.map(store => store.name).join(', ')}`); logger.info(
` selected stores: ${config.store.stores
.map((store) => store.name)
.join(', ')}`
);
} }
if (config.store.showOnlyBrands.length > 0) { if (config.store.showOnlyBrands.length > 0) {
@@ -136,9 +158,15 @@ function printConfig() {
} }
if (config.store.showOnlyModels.length > 0) { if (config.store.showOnlyModels.length > 0) {
logger.info(` selected models: ${config.store.showOnlyModels.map(entry => { logger.info(
return entry.series ? entry.name + ' (' + entry.series + ')' : entry.name; ` selected models: ${config.store.showOnlyModels
}).join(', ')}`); .map((entry) => {
return entry.series
? entry.name + ' (' + entry.series + ')'
: entry.name;
})
.join(', ')}`
);
} }
if (config.store.showOnlySeries.length > 0) { if (config.store.showOnlySeries.length > 0) {
@@ -153,7 +181,9 @@ function warnIfStoreDeprecated(store: Store) {
logger.warn(`${store.name} is deprecated in favor of bestbuy`); logger.warn(`${store.name} is deprecated in favor of bestbuy`);
break; break;
case 'evga': case 'evga':
logger.warn(`${store.name} is deprecated since they only support queuing`); logger.warn(
`${store.name} is deprecated since they only support queuing`
);
break; break;
default: default:
} }
+171
View File
@@ -0,0 +1,171 @@
import {Store} from './store';
export const Kabum: Store = {
labels: {
inStock: {
container: '.botao-comprar',
text: ['comprar']
},
outOfStock: {
container: '.bot_comprar',
text: ['indisponível']
}
},
links: [
// AMD
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.kabum.com.br/produto/129461'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.kabum.com.br/produto/129460'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.kabum.com.br/produto/129459'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.kabum.com.br/produto/129451'
},
// 3070
{
brand: 'gigabyte',
model: 'gaming oc',
series: '3070',
url: 'https://www.kabum.com.br/produto/130209'
},
{
brand: 'gigabyte',
model: 'eagle oc',
series: '3070',
url: 'https://www.kabum.com.br/produto/130210'
},
{
brand: 'evga',
model: 'xc3 black',
series: '3070',
url: 'https://www.kabum.com.br/produto/129938'
},
{
brand: 'asus',
model: 'dual fan',
series: '3070',
url: 'https://www.kabum.com.br/produto/128634'
},
{
brand: 'asus',
model: 'dual fan',
series: '3070',
url: 'https://www.kabum.com.br/produto/128635'
},
{
brand: 'msi',
model: 'gaming x trio',
series: '3070',
url: 'https://www.kabum.com.br/produto/130379'
},
{
brand: 'msi',
model: 'ventus 3x oc',
series: '3070',
url: 'https://www.kabum.com.br/produto/130380'
},
{
brand: 'msi',
model: 'ventus 2x oc',
series: '3070',
url: 'https://www.kabum.com.br/produto/130381'
},
{
brand: 'zotac',
model: 'twin edge',
series: '3070',
url: 'https://www.kabum.com.br/produto/129208'
},
{
brand: 'zotac',
model: 'twin edge oc',
series: '3070',
url: 'https://www.kabum.com.br/produto/129207'
},
// 3080
{
brand: 'msi',
model: 'gaming x trio',
series: '3080',
url: 'https://www.kabum.com.br/produto/127409'
},
{
brand: 'msi',
model: 'ventus 3x',
series: '3080',
url: 'https://www.kabum.com.br/produto/127410'
},
{
brand: 'asus',
model: 'tuf',
series: '3080',
url: 'https://www.kabum.com.br/produto/121138'
},
{
brand: 'gigabyte',
model: 'eagle oc',
series: '3080',
url: 'https://www.kabum.com.br/produto/128078'
},
{
brand: 'evga',
model: 'ichill x3',
series: '3080',
url: 'https://www.kabum.com.br/produto/128051'
},
{
brand: 'evga',
model: 'ichill x3',
series: '3080',
url: 'https://www.kabum.com.br/produto/128052'
},
// 3090
{
brand: 'msi',
model: 'gaming x trio',
series: '3090',
url: 'https://www.kabum.com.br/produto/127407'
},
{
brand: 'msi',
model: 'ventus 3x',
series: '3090',
url: 'https://www.kabum.com.br/produto/127408'
},
{
brand: 'asus',
model: 'tuf',
series: '3090',
url: 'https://www.kabum.com.br/produto/127511'
},
{
brand: 'asus',
model: 'strix',
series: '3090',
url: 'https://www.kabum.com.br/produto/128026'
},
{
brand: 'gigabyte',
model: 'gaming',
series: '3090',
url: 'https://www.kabum.com.br/produto/128199'
}
],
name: 'kabum'
};
+28 -14
View File
@@ -6,14 +6,16 @@ export const Mediamarkt: Store = {
container: 'span[font-family="price"]', container: 'span[font-family="price"]',
euroFormat: false euroFormat: false
}, },
outOfStock: [{ outOfStock: [
container: '#root', {
text: ['dieser artikel ist aktuell nicht verfügbar.'] container: '#root',
}, text: ['dieser artikel ist aktuell nicht verfügbar.']
{ },
container: '#root', {
text: ['leider keine Lieferung möglich'] container: '#root',
}] text: ['leider keine Lieferung möglich']
}
]
}, },
links: [ links: [
{ {
@@ -24,13 +26,13 @@ export const Mediamarkt: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3070', series: '3070',
url: 'https://www.mediamarkt.de/de/product/-2691243.html' url: 'https://www.mediamarkt.de/de/product/-2691243.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3070', series: '3070',
url: 'https://www.mediamarkt.de/de/product/-2691244.html' url: 'https://www.mediamarkt.de/de/product/-2691244.html'
}, },
@@ -120,13 +122,13 @@ export const Mediamarkt: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.mediamarkt.de/de/product/-2681869.html' url: 'https://www.mediamarkt.de/de/product/-2681869.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.mediamarkt.de/de/product/-2681871.html' url: 'https://www.mediamarkt.de/de/product/-2681871.html'
}, },
@@ -186,13 +188,13 @@ export const Mediamarkt: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.mediamarkt.de/de/product/-2681863.html' url: 'https://www.mediamarkt.de/de/product/-2681863.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.mediamarkt.de/de/product/-2681866.html' url: 'https://www.mediamarkt.de/de/product/-2681866.html'
}, },
@@ -231,6 +233,18 @@ export const Mediamarkt: Store = {
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.mediamarkt.de/de/product/-2683226.html' url: 'https://www.mediamarkt.de/de/product/-2683226.html'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.mediamarkt.de/de/product/-2661938.html'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.mediamarkt.de/de/product/-2661939.html'
} }
], ],
name: 'mediamarkt' name: 'mediamarkt'
+50
View File
@@ -0,0 +1,50 @@
import {Store} from './store';
export const MemoryExpress: Store = {
labels: {
maxPrice: {
container:
'#ProductPricing .GrandTotal.c-capr-pricing__grand-total > div',
euroFormat: false
},
outOfStock: {
container:
'.c-capr-inventory-selector__details-online .c-capr-inventory-store__availability',
text: ['Out of Stock']
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.memoryexpress.com/Products/MX79473'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.memoryexpress.com/Products/MX00114450'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.memoryexpress.com/Products/MX00114451'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.memoryexpress.com/Products/MX00114452'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.memoryexpress.com/Products/MX00114455'
}
],
name: 'memoryexpress',
waitUntil: 'domcontentloaded'
};
+24
View File
@@ -89,6 +89,30 @@ for (const microCenterLocation of microCenterLocations) {
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: `https://www.microcenter.com/product/628607/zotac-geforce-rtx-3080-trinity-overclocked-triple-fan-10gb-gddr6x-pcie-40-graphics-card/?storeid=${storeId}` url: `https://www.microcenter.com/product/628607/zotac-geforce-rtx-3080-trinity-overclocked-triple-fan-10gb-gddr6x-pcie-40-graphics-card/?storeid=${storeId}`
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: `https://www.microcenter.com/product/630285/amd-ryzen-5-5600x-vermeer-37ghz-6-core-am4-boxed-processor-with-wraith-stealth-cooler/?storeid=${storeId}`
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: `https://www.microcenter.com/product/630284/amd-ryzen-7-5800x-vermeer-38ghz-8-core-am4-boxed-processor/?storeid=${storeId}`
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: `https://www.microcenter.com/product/630283/amd-ryzen-9-5900x-vermeer-37ghz-12-core-am4-boxed-processor/?storeid=${storeId}`
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: `https://www.microcenter.com/product/630282/amd-ryzen-9-5950x-vermeer-34ghz-16-core-am4-boxed-processor/?storeid=${storeId}`
} }
]); ]);
} }
+50 -11
View File
@@ -20,67 +20,106 @@ export const Mindfactory: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.mindfactory.de/product_info.php/8GB-MSI-GeForce-RTX2070Super-GAMING-X-DDR6--Retail-_1329683.html' url:
'https://www.mindfactory.de/product_info.php/8GB-MSI-GeForce-RTX2070Super-GAMING-X-DDR6--Retail-_1329683.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-RTX3080-AORUS-MASTER-GDDR6X-3xHDMI-3xDP--Retail-_1378681.html' url:
'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-RTX3080-AORUS-MASTER-GDDR6X-3xHDMI-3xDP--Retail-_1378681.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-RTX3080-AORUS-XTREME-GDDR6X-3xHDMI-3xDP--Retail-_1380484.html' url:
'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-RTX3080-AORUS-XTREME-GDDR6X-3xHDMI-3xDP--Retail-_1380484.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-GeForce-RTX-3080-Gaming-OC-3xDP-2x-HDMI--Retail-_1376263.html' url:
'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-GeForce-RTX-3080-Gaming-OC-3xDP-2x-HDMI--Retail-_1376263.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-RTX3080-VISION-OC-GDDR6X-2xHDMI-3xDP--Retail-_1378682.html' url:
'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-RTX3080-VISION-OC-GDDR6X-2xHDMI-3xDP--Retail-_1378682.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-MSI-GeForce-RTX-3080-Gaming-X-TRIO--Retail-_1376481.html' url:
'https://www.mindfactory.de/product_info.php/10GB-MSI-GeForce-RTX-3080-Gaming-X-TRIO--Retail-_1376481.html'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-Palit-GeForce-RTX-3080-GamingPro--Retail-_1376483.html' url:
'https://www.mindfactory.de/product_info.php/10GB-Palit-GeForce-RTX-3080-GamingPro--Retail-_1376483.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-Zotac-GeForce-RTX-3080-TRINITY-OC--GDDR6X-_1377143.html' url:
'https://www.mindfactory.de/product_info.php/10GB-Zotac-GeForce-RTX-3080-TRINITY-OC--GDDR6X-_1377143.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.mindfactory.de/product_info.php/24GB-Gigabyte-GeForce-3090-Gaming-OC--Retail-_1377265.html' url:
'https://www.mindfactory.de/product_info.php/24GB-Gigabyte-GeForce-3090-Gaming-OC--Retail-_1377265.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x', model: 'ventus 3x',
series: '3090', series: '3090',
url: 'https://www.mindfactory.de/product_info.php/24GB-MSI-GeForce-RTX-3090-VENTUS-3X-DDR6--Retail-_1377475.html' url:
'https://www.mindfactory.de/product_info.php/24GB-MSI-GeForce-RTX-3090-VENTUS-3X-DDR6--Retail-_1377475.html'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3090', series: '3090',
url: 'https://www.mindfactory.de/product_info.php/24GB-Palit-GeForce-RTX-3090-GamingPro-DDR6--Retail-_1377233.html' url:
'https://www.mindfactory.de/product_info.php/24GB-Palit-GeForce-RTX-3090-GamingPro-DDR6--Retail-_1377233.html'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.mindfactory.de/product_info.php/AMD-Ryzen-5-5600X-6x-3-70GHz-So-AM4-BOX_1380726.html'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.mindfactory.de/product_info.php/AMD-Ryzen-7-5800X-8x-3-80GHz-So-AM4-WOF_1380727.html'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.mindfactory.de/product_info.php/AMD-Ryzen-9-5900X-12x-3-70GHz-So-AM4-WOF_1380728.html'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.mindfactory.de/product_info.php/AMD-Ryzen-9-5950X-16x-3-40GHz-So-AM4-WOF_1380729.html'
} }
], ],
name: 'mindfactory' name: 'mindfactory'
+146 -63
View File
@@ -22,357 +22,440 @@ export const NeweggCa: Store = {
itemNumber: '14-500-495', itemNumber: '14-500-495',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.newegg.ca/evga-geforce-rtx-2060-06g-p4-2066-kr/p/N82E16814487488' url:
'https://www.newegg.ca/evga-geforce-rtx-2060-06g-p4-2066-kr/p/N82E16814487488'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-453', itemNumber: '14-126-453',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/asus-geforce-rtx-3080-tuf-rtx3080-10g-gaming/p/N82E16814126453' url:
'https://www.newegg.ca/asus-geforce-rtx-3080-tuf-rtx3080-10g-gaming/p/N82E16814126453'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-519', itemNumber: '14-487-519',
model: 'ftw3 gaming', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3895-kr/p/N82E16814487519' url:
'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3895-kr/p/N82E16814487519'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-518', itemNumber: '14-487-518',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3897-kr/p/N82E16814487518' url:
'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3897-kr/p/N82E16814487518'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-522', itemNumber: '14-487-522',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3881-kr/p/N82E16814487522' url:
'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3881-kr/p/N82E16814487522'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-521', itemNumber: '14-487-521',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3883-kr/p/N82E16814487521' url:
'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3883-kr/p/N82E16814487521'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-520', itemNumber: '14-487-520',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3885-kr/p/N82E16814487520' url:
'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3885-kr/p/N82E16814487520'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-600', itemNumber: '14-137-600',
model: 'ventus 3x', model: 'ventus 3x',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g/p/N82E16814137600' url:
'https://www.newegg.ca/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g/p/N82E16814137600'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-598', itemNumber: '14-137-598',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g-oc/p/N82E16814137598' url:
'https://www.newegg.ca/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g-oc/p/N82E16814137598'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-597', itemNumber: '14-137-597',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/msi-geforce-rtx-3080-rtx-3080-gaming-x-trio-10g/p/N82E16814137597' url:
'https://www.newegg.ca/msi-geforce-rtx-3080-rtx-3080-gaming-x-trio-10g/p/N82E16814137597'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '149-32-329', itemNumber: '149-32-329',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080gaming-oc-10gd/p/N82E16814932329' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080gaming-oc-10gd/p/N82E16814932329'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '149-32-330', itemNumber: '149-32-330',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080eagle-oc-10gd/p/N82E16814932330' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080eagle-oc-10gd/p/N82E16814932330'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-336', itemNumber: '14-932-336',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080aorus-m-10gd/p/N82E16814932336' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080aorus-m-10gd/p/N82E16814932336'
}, },
{ {
brand: 'zotac', brand: 'zotac',
itemNumber: '14-950-502', itemNumber: '14-950-502',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/zotac-geforce-rtx-3080-zt-a30800d-10p/p/N82E16814500502' url:
'https://www.newegg.ca/zotac-geforce-rtx-3080-zt-a30800d-10p/p/N82E16814500502'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-457', itemNumber: '14-126-457',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/asus-geforce-rtx-3080-rog-strix-rtx3080-o10g-gaming/p/N82E16814126457' url:
'https://www.newegg.ca/asus-geforce-rtx-3080-rog-strix-rtx3080-o10g-gaming/p/N82E16814126457'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-452', itemNumber: '14-126-452',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/asus-geforce-rtx-3080-tuf-rtx3080-o10g-gaming/p/N82E16814126452' url:
'https://www.newegg.ca/asus-geforce-rtx-3080-tuf-rtx3080-o10g-gaming/p/N82E16814126452'
}, },
{ {
brand: 'zotac', brand: 'zotac',
itemNumber: '14-500-504', itemNumber: '14-500-504',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/zotac-geforce-rtx-3080-zt-t30800j-10p/p/N82E16814500504' url:
'https://www.newegg.ca/zotac-geforce-rtx-3080-zt-t30800j-10p/p/N82E16814500504'
}, },
{ {
brand: 'pny', brand: 'pny',
itemNumber: '14-133-809', itemNumber: '14-133-809',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/pny-geforce-rtx-3080-vcg308010tfxppb/p/N82E16814133809' url:
'https://www.newegg.ca/pny-geforce-rtx-3080-vcg308010tfxppb/p/N82E16814133809'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-337', itemNumber: '14-932-337',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080vision-oc-10gd/p/N82E16814932337' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080vision-oc-10gd/p/N82E16814932337'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-595', itemNumber: '14-137-595',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/msi-geforce-rtx-3090-rtx-3090-gaming-x-trio-24g/p/N82E16814137595' url:
'https://www.newegg.ca/msi-geforce-rtx-3090-rtx-3090-gaming-x-trio-24g/p/N82E16814137595'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-327', itemNumber: '14-932-327',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3090-gv-n3090gaming-oc-24gd/p/N82E16814932327' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3090-gv-n3090gaming-oc-24gd/p/N82E16814932327'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-596', itemNumber: '14-137-596',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/msi-geforce-rtx-3090-rtx-3090-ventus-3x-24g-oc/p/N82E16814137596' url:
'https://www.newegg.ca/msi-geforce-rtx-3090-rtx-3090-ventus-3x-24g-oc/p/N82E16814137596'
}, },
{ {
brand: 'zotac', brand: 'zotac',
itemNumber: '14-500-503', itemNumber: '14-500-503',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/zotac-geforce-rtx-3090-zt-a30900d-10p/p/N82E16814500503' url:
'https://www.newegg.ca/zotac-geforce-rtx-3090-zt-a30900d-10p/p/N82E16814500503'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-454', itemNumber: '14-126-454',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/asus-geforce-rtx-3090-tuf-rtx3090-o24g-gaming/p/N82E16814126454' url:
'https://www.newegg.ca/asus-geforce-rtx-3090-tuf-rtx3090-o24g-gaming/p/N82E16814126454'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-456', itemNumber: '14-126-456',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/asus-geforce-rtx-3090-rog-strix-rtx3090-o24g-gaming/p/N82E16814126456' url:
'https://www.newegg.ca/asus-geforce-rtx-3090-rog-strix-rtx3090-o24g-gaming/p/N82E16814126456'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-524', itemNumber: '14-487-524',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3975-kr/p/N82E16814487524' url:
'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3975-kr/p/N82E16814487524'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-523', itemNumber: '14-487-523',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3973-kr/p/N82E16814487523' url:
'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3973-kr/p/N82E16814487523'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-526', itemNumber: '14-487-526',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3987-kr/p/N82E16814487526' url:
'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3987-kr/p/N82E16814487526'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-525', itemNumber: '14-487-525',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3985-kr/p/N82E16814487525' url:
'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3985-kr/p/N82E16814487525'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-602', itemNumber: '14-137-602',
model: 'ventus 2x', model: 'ventus 2x',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/msi-geforce-rtx-3070-rtx-3070-ventus-2x-oc/p/N82E16814137602' url:
'https://www.newegg.ca/msi-geforce-rtx-3070-rtx-3070-ventus-2x-oc/p/N82E16814137602'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-601', itemNumber: '14-137-601',
model: 'ventus 3x', model: 'ventus 3x',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/msi-geforce-rtx-3070-rtx-3070-ventus-3x-oc/p/N82E16814137601' url:
'https://www.newegg.ca/msi-geforce-rtx-3070-rtx-3070-ventus-3x-oc/p/N82E16814137601'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-603', itemNumber: '14-137-603',
model: 'gaming x trio', model: 'gaming x trio',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/msi-geforce-rtx-3070-rtx-3070-gaming-x-trio/p/N82E16814137603' url:
'https://www.newegg.ca/msi-geforce-rtx-3070-rtx-3070-gaming-x-trio/p/N82E16814137603'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-460', itemNumber: '14-126-460',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/asus-geforce-rtx-3070-dual-rtx3070-8g/p/N82E16814126460' url:
'https://www.newegg.ca/asus-geforce-rtx-3070-dual-rtx3070-8g/p/N82E16814126460'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-459', itemNumber: '14-126-459',
model: 'dual oc', model: 'dual oc',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/asus-geforce-rtx-3070-dual-rtx3070-o8g/p/N82E16814126459' url:
'https://www.newegg.ca/asus-geforce-rtx-3070-dual-rtx3070-o8g/p/N82E16814126459'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-342', itemNumber: '14-932-342',
model: 'gaming oc', model: 'gaming oc',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070gaming-oc-8gd/p/N82E16814932342' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070gaming-oc-8gd/p/N82E16814932342'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-458', itemNumber: '14-126-458',
model: 'rog strix', model: 'strix',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/asus-geforce-rtx-3070-rog-strix-rtx3070-o8g-gaming/p/N82E16814126458' url:
'https://www.newegg.ca/asus-geforce-rtx-3070-rog-strix-rtx3070-o8g-gaming/p/N82E16814126458'
}, },
{ {
brand: 'zotac', brand: 'zotac',
itemNumber: '14-500-501', itemNumber: '14-500-501',
model: 'twin edge', model: 'twin edge',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/zotac-geforce-rtx-3070-zt-a30700e-10p/p/N82E16814500501' url:
'https://www.newegg.ca/zotac-geforce-rtx-3070-zt-a30700e-10p/p/N82E16814500501'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-344', itemNumber: '14-932-344',
model: 'eagle', model: 'eagle',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070eagle-8gd/p/N82E16814932344' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070eagle-8gd/p/N82E16814932344'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-528', itemNumber: '14-487-528',
model: 'xc3 black gaming', model: 'xc3 black',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3751-kr/p/N82E16814487528' url:
'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3751-kr/p/N82E16814487528'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-360', itemNumber: '14-932-360',
model: 'vision oc', model: 'vision oc',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070vision-oc-8gd/p/N82E16814932360' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070vision-oc-8gd/p/N82E16814932360'
}, },
{ {
brand: 'zotac', brand: 'zotac',
itemNumber: '14-500-505', itemNumber: '14-500-505',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/zotac-geforce-rtx-3070-zt-a30700h-10p/p/N82E16814500505' url:
'https://www.newegg.ca/zotac-geforce-rtx-3070-zt-a30700h-10p/p/N82E16814500505'
}, },
{ {
brand: 'pny', brand: 'pny',
itemNumber: '14-133-812', itemNumber: '14-133-812',
model: 'uprising', model: 'uprising',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/pny-geforce-rtx-3070-vcg30708dfmpb/p/N82E16814133812' url:
'https://www.newegg.ca/pny-geforce-rtx-3070-vcg30708dfmpb/p/N82E16814133812'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-461', itemNumber: '14-126-461',
model: 'tuf', model: 'tuf',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/asus-geforce-rtx-3070-tuf-rtx3070-o8g-gaming/p/N82E16814126461' url:
'https://www.newegg.ca/asus-geforce-rtx-3070-tuf-rtx3070-o8g-gaming/p/N82E16814126461'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-531', itemNumber: '14-487-531',
model: 'ftw3 gaming', model: 'ftw3',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3765-kr/p/N82E16814487531' url:
'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3765-kr/p/N82E16814487531'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-359', itemNumber: '14-932-359',
model: 'aorus', model: 'aorus',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070aorus-m-8gd/p/N82E16814932359' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070aorus-m-8gd/p/N82E16814932359'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-343', itemNumber: '14-932-343',
model: 'eagle oc', model: 'eagle oc',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070eagle-oc-8gd/p/N82E16814932343' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070eagle-oc-8gd/p/N82E16814932343'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-530', itemNumber: '14-487-530',
model: 'xc3 ultra gaming', model: 'xc3 ultra',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3755-kr/p/N82E16814487530' url:
'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3755-kr/p/N82E16814487530'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-532', itemNumber: '14-487-532',
model: 'ftw3 ultra gaming', model: 'ftw3 ultra',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3767-kr/p/N82E16814487532' url:
'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3767-kr/p/N82E16814487532'
}, },
{ {
brand: 'pny', brand: 'pny',
itemNumber: '14-133-811', itemNumber: '14-133-811',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/pny-geforce-rtx-3070-vcg30708tfxppb/p/N82E16814133811' url:
'https://www.newegg.ca/pny-geforce-rtx-3070-vcg30708tfxppb/p/N82E16814133811'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-529', itemNumber: '14-487-529',
model: 'xc3 gaming', model: 'xc3',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3753-kr/p/N82E16814487529' url:
'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3753-kr/p/N82E16814487529'
},
{
brand: 'amd',
itemNumber: '19-113-663',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.newegg.ca/amd-ryzen-9-5950x/p/N82E16819113663'
},
{
brand: 'amd',
itemNumber: '19-113-664',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.newegg.ca/amd-ryzen-9-5900x/p/N82E16819113664'
},
{
brand: 'amd',
itemNumber: '19-113-665',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.newegg.ca/amd-ryzen-7-5800x/p/N82E16819113665'
},
{
brand: 'amd',
itemNumber: '19-113-666',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.newegg.ca/amd-ryzen-5-5600x/p/N82E16819113666'
} }
], ],
name: 'newegg-ca', name: 'newegg-ca',
realTimeInventoryLookup: async (itemNumber: string) => { realTimeInventoryLookup: async (itemNumber: string) => {
const request_url = 'https://www.newegg.ca/product/api/ProductRealtime?ItemNumber=' + itemNumber; const request_url =
'https://www.newegg.ca/product/api/ProductRealtime?ItemNumber=' +
itemNumber;
const response = await fetch(request_url); const response = await fetch(request_url);
const response_json = await response.json(); const response_json = await response.json();
return response_json.MainItem !== undefined && response_json.MainItem.Instock === true; return (
response_json.MainItem !== undefined &&
response_json.MainItem.Instock === true
);
} }
}; };
+253 -103
View File
@@ -22,398 +22,548 @@ export const Newegg: Store = {
itemNumber: '14-500-495', itemNumber: '14-500-495',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.newegg.com/zotac-geforce-rtx-2060-zt-t20600k-10m/p/N82E16814500495' url:
'https://www.newegg.com/zotac-geforce-rtx-2060-zt-t20600k-10m/p/N82E16814500495'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126453', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126453',
itemNumber: '14-126-453', itemNumber: '14-126-453',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.newegg.com/asus-geforce-rtx-3080-tuf-rtx3080-10g-gaming/p/N82E16814126453' url:
'https://www.newegg.com/asus-geforce-rtx-3080-tuf-rtx3080-10g-gaming/p/N82E16814126453'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487518', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487518',
itemNumber: '14-487-518', itemNumber: '14-487-518',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3897-kr/p/N82E16814487518' url:
'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3897-kr/p/N82E16814487518'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487519', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487519',
itemNumber: '14-487-519', itemNumber: '14-487-519',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3895-kr/p/N82E16814487519' url:
'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3895-kr/p/N82E16814487519'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487522', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487522',
itemNumber: '14-487-522', itemNumber: '14-487-522',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3881-kr/p/N82E16814487522' url:
'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3881-kr/p/N82E16814487522'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487521', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487521',
itemNumber: '14-487-521', itemNumber: '14-487-521',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3883-kr/p/N82E16814487521' url:
'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3883-kr/p/N82E16814487521'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137600', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137600',
itemNumber: '14-137-600', itemNumber: '14-137-600',
model: 'ventus 3x', model: 'ventus 3x',
series: '3080', series: '3080',
url: 'https://www.newegg.com/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g/p/N82E16814137600' url:
'https://www.newegg.com/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g/p/N82E16814137600'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137598', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137598',
itemNumber: '14-137-598', itemNumber: '14-137-598',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.newegg.com/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g-oc/p/N82E16814137598' url:
'https://www.newegg.com/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g-oc/p/N82E16814137598'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137597', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137597',
itemNumber: '14-137-597', itemNumber: '14-137-597',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.newegg.com/msi-geforce-rtx-3080-rtx-3080-gaming-x-trio-10g/p/N82E16814137597' url:
'https://www.newegg.com/msi-geforce-rtx-3080-rtx-3080-gaming-x-trio-10g/p/N82E16814137597'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932329', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932329',
itemNumber: '149-32-329', itemNumber: '149-32-329',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3080-gv-n3080gaming-oc-10gd/p/N82E16814932329' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3080-gv-n3080gaming-oc-10gd/p/N82E16814932329'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932330', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932330',
itemNumber: '149-32-330', itemNumber: '149-32-330',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3080-gv-n3080eagle-oc-10gd/p/N82E16814932330' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3080-gv-n3080eagle-oc-10gd/p/N82E16814932330'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932336', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932336',
itemNumber: '14-932-336', itemNumber: '14-932-336',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3080-gv-n3080aorus-m-10gd/p/N82E16814932336' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3080-gv-n3080aorus-m-10gd/p/N82E16814932336'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500502', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500502',
itemNumber: '14-950-502', itemNumber: '14-950-502',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.newegg.com/zotac-geforce-rtx-3080-zt-a30800d-10p/p/N82E16814500502' url:
'https://www.newegg.com/zotac-geforce-rtx-3080-zt-a30800d-10p/p/N82E16814500502'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126457', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126457',
itemNumber: '14-126-457', itemNumber: '14-126-457',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.newegg.com/asus-geforce-rtx-3080-rog-strix-rtx3080-o10g-gaming/p/N82E16814126457' url:
'https://www.newegg.com/asus-geforce-rtx-3080-rog-strix-rtx3080-o10g-gaming/p/N82E16814126457'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126452', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126452',
itemNumber: '14-126-452', itemNumber: '14-126-452',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.newegg.com/asus-geforce-rtx-3080-tuf-rtx3080-o10g-gaming/p/N82E16814126452' url:
'https://www.newegg.com/asus-geforce-rtx-3080-tuf-rtx3080-o10g-gaming/p/N82E16814126452'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500504', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500504',
itemNumber: '14-500-504', itemNumber: '14-500-504',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.newegg.com/zotac-geforce-rtx-3080-zt-t30800j-10p/p/N82E16814500504' url:
'https://www.newegg.com/zotac-geforce-rtx-3080-zt-t30800j-10p/p/N82E16814500504'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814133809', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814133809',
itemNumber: '14-133-809', itemNumber: '14-133-809',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.newegg.com/pny-geforce-rtx-3080-vcg308010tfxppb/p/N82E16814133809' url:
'https://www.newegg.com/pny-geforce-rtx-3080-vcg308010tfxppb/p/N82E16814133809'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126455', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126455',
itemNumber: '14-126-455', itemNumber: '14-126-455',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.newegg.com/asus-geforce-rtx-3090-tuf-rtx3090-24g-gaming/p/N82E16814126455' url:
'https://www.newegg.com/asus-geforce-rtx-3090-tuf-rtx3090-24g-gaming/p/N82E16814126455'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126456', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126456',
itemNumber: '14-126-456', itemNumber: '14-126-456',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.newegg.com/asus-geforce-rtx-3090-rog-strix-rtx3090-o24g-gaming/p/N82E16814126456' url:
'https://www.newegg.com/asus-geforce-rtx-3090-rog-strix-rtx3090-o24g-gaming/p/N82E16814126456'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137595', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137595',
itemNumber: '14-137-595', itemNumber: '14-137-595',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.newegg.com/msi-geforce-rtx-3090-rtx-3090-gaming-x-trio-24g/p/N82E16814137595' url:
'https://www.newegg.com/msi-geforce-rtx-3090-rtx-3090-gaming-x-trio-24g/p/N82E16814137595'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137596', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137596',
itemNumber: '14-137-596', itemNumber: '14-137-596',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.newegg.com/msi-geforce-rtx-3090-rtx-3090-ventus-3x-24g-oc/p/N82E16814137596' url:
'https://www.newegg.com/msi-geforce-rtx-3090-rtx-3090-ventus-3x-24g-oc/p/N82E16814137596'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500503', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500503',
itemNumber: '14-500-503', itemNumber: '14-500-503',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.newegg.com/zotac-geforce-rtx-3090-zt-a30900d-10p/p/N82E16814500503' url:
'https://www.newegg.com/zotac-geforce-rtx-3090-zt-a30900d-10p/p/N82E16814500503'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137599', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137599',
itemNumber: '14-137-599', itemNumber: '14-137-599',
model: 'ventus 3x', model: 'ventus 3x',
series: '3090', series: '3090',
url: 'https://www.newegg.com/msi-geforce-rtx-3090-rtx-3090-ventus-3x-24g/p/N82E16814137599' url:
'https://www.newegg.com/msi-geforce-rtx-3090-rtx-3090-ventus-3x-24g/p/N82E16814137599'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487525', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487525',
itemNumber: '14-487-525', itemNumber: '14-487-525',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3985-kr/p/N82E16814487525' url:
'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3985-kr/p/N82E16814487525'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487524', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487524',
itemNumber: '14-487-524', itemNumber: '14-487-524',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3090', series: '3090',
url: 'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3975-kr/p/N82E16814487524' url:
'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3975-kr/p/N82E16814487524'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487526', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487526',
itemNumber: '14-487-526', itemNumber: '14-487-526',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3987-kr/p/N82E16814487526' url:
'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3987-kr/p/N82E16814487526'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487527', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487527',
itemNumber: '14-487-527', itemNumber: '14-487-527',
model: 'xc3 black', model: 'xc3 black',
series: '3090', series: '3090',
url: 'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3971-kr/p/N82E16814487527' url:
'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3971-kr/p/N82E16814487527'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487523', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487523',
itemNumber: '14-487-523', itemNumber: '14-487-523',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3973-kr/p/N82E16814487523' url:
'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3973-kr/p/N82E16814487523'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932327', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932327',
itemNumber: '14-932-327', itemNumber: '14-932-327',
model: 'gaming', model: 'gaming',
series: '3090', series: '3090',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3090-gv-n3090gaming-oc-24gd/p/N82E16814932327' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3090-gv-n3090gaming-oc-24gd/p/N82E16814932327'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932328', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932328',
itemNumber: '14-932-328', itemNumber: '14-932-328',
model: 'eagle', model: 'eagle',
series: '3090', series: '3090',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3090-gv-n3090eagle-oc-24gd/p/N82E16814932328' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3090-gv-n3090eagle-oc-24gd/p/N82E16814932328'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137601', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137601',
itemNumber: '14-137-601', itemNumber: '14-137-601',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/msi-geforce-rtx-3070-rtx-3070-ventus-3x-oc/p/N82E16814137601' url:
'https://www.newegg.com/msi-geforce-rtx-3070-rtx-3070-ventus-3x-oc/p/N82E16814137601'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137602', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137602',
itemNumber: '14-137-602', itemNumber: '14-137-602',
model: 'ventus 2x oc', model: 'ventus 2x oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/msi-geforce-rtx-3070-rtx-3070-ventus-2x-oc/p/N82E16814137602' url:
'https://www.newegg.com/msi-geforce-rtx-3070-rtx-3070-ventus-2x-oc/p/N82E16814137602'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137603', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137603',
itemNumber: '14-137-603', itemNumber: '14-137-603',
model: 'gaming x trio', model: 'gaming x trio',
series: '3070', series: '3070',
url: 'https://www.newegg.com/msi-geforce-rtx-3070-rtx-3070-gaming-x-trio/p/N82E16814137603' url:
'https://www.newegg.com/msi-geforce-rtx-3070-rtx-3070-gaming-x-trio/p/N82E16814137603'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932360', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932360',
itemNumber: '14-932-360', itemNumber: '14-932-360',
model: 'vision oc', model: 'vision oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070vision-oc-8gd/p/N82E16814932360' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070vision-oc-8gd/p/N82E16814932360'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126459', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126459',
itemNumber: '14-126-459', itemNumber: '14-126-459',
model: 'dual oc', model: 'dual oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/asus-geforce-rtx-3070-dual-rtx3070-o8g/p/N82E16814126459' url:
'https://www.newegg.com/asus-geforce-rtx-3070-dual-rtx3070-o8g/p/N82E16814126459'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126458', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126458',
itemNumber: '14-126-458', itemNumber: '14-126-458',
model: 'rog strix', model: 'strix',
series: '3070', series: '3070',
url: 'https://www.newegg.com/asus-geforce-rtx-3070-rog-strix-rtx3070-o8g-gaming/p/N82E16814126458' url:
'https://www.newegg.com/asus-geforce-rtx-3070-rog-strix-rtx3070-o8g-gaming/p/N82E16814126458'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500501', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500501',
itemNumber: '14-500-501', itemNumber: '14-500-501',
model: 'twin edge', model: 'twin edge',
series: '3070', series: '3070',
url: 'https://www.newegg.com/zotac-geforce-rtx-3070-zt-a30700e-10p/p/N82E16814500501' url:
'https://www.newegg.com/zotac-geforce-rtx-3070-zt-a30700e-10p/p/N82E16814500501'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500505', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500505',
itemNumber: '14-500-505', itemNumber: '14-500-505',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/zotac-geforce-rtx-3070-zt-a30700h-10p/p/N82E16814500505' url:
'https://www.newegg.com/zotac-geforce-rtx-3070-zt-a30700h-10p/p/N82E16814500505'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932342', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932342',
itemNumber: '14-932-342', itemNumber: '14-932-342',
model: 'gaming oc', model: 'gaming oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070gaming-oc-8gd/p/N82E16814932342' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070gaming-oc-8gd/p/N82E16814932342'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487532', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487532',
itemNumber: '14-487-532', itemNumber: '14-487-532',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3070', series: '3070',
url: 'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3767-kr/p/N82E16814487532' url:
'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3767-kr/p/N82E16814487532'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487530', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487530',
itemNumber: '14-487-530', itemNumber: '14-487-530',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3070', series: '3070',
url: 'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3755-kr/p/N82E16814487530' url:
'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3755-kr/p/N82E16814487530'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487528', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487528',
itemNumber: '14-487-528', itemNumber: '14-487-528',
model: 'xc3 black', model: 'xc3 black',
series: '3070', series: '3070',
url: 'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3751-kr/p/N82E16814487528' url:
'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3751-kr/p/N82E16814487528'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932343', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932343',
itemNumber: '14-932-343', itemNumber: '14-932-343',
model: 'eagle oc', model: 'eagle oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070eagle-oc-8gd/p/N82E16814932343' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070eagle-oc-8gd/p/N82E16814932343'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932344', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932344',
itemNumber: '14-932-344', itemNumber: '14-932-344',
model: 'eagle', model: 'eagle',
series: '3070', series: '3070',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070eagle-8gd/p/N82E16814932344' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070eagle-8gd/p/N82E16814932344'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487529', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487529',
itemNumber: '14-487-529', itemNumber: '14-487-529',
model: 'xc3', model: 'xc3',
series: '3070', series: '3070',
url: 'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3753-kr/p/N82E16814487529' url:
'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3753-kr/p/N82E16814487529'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126460', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126460',
itemNumber: '14-126-460', itemNumber: '14-126-460',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: 'https://www.newegg.com/asus-geforce-rtx-3070-dual-rtx3070-8g/p/N82E16814126460' url:
'https://www.newegg.com/asus-geforce-rtx-3070-dual-rtx3070-8g/p/N82E16814126460'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932359', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932359',
itemNumber: '14-932-359', itemNumber: '14-932-359',
model: 'aorus master', model: 'aorus master',
series: '3070', series: '3070',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070aorus-m-8gd/p/N82E16814932359' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070aorus-m-8gd/p/N82E16814932359'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487531', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487531',
itemNumber: '14-487-531', itemNumber: '14-487-531',
model: 'ftw3', model: 'ftw3',
series: '3070', series: '3070',
url: 'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3765-kr/p/N82E16814487531' url:
'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3765-kr/p/N82E16814487531'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126461', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126461',
itemNumber: '14-126-461', itemNumber: '14-126-461',
model: 'tuf oc', model: 'tuf oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/asus-geforce-rtx-3070-tuf-rtx3070-o8g-gaming/p/N82E16814126461' url:
'https://www.newegg.com/asus-geforce-rtx-3070-tuf-rtx3070-o8g-gaming/p/N82E16814126461'
},
{
brand: 'amd',
cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113663',
itemNumber: '19-113-663',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.newegg.com/amd-ryzen-9-5950x/p/N82E16819113663'
},
{
brand: 'amd',
cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113664',
itemNumber: '19-113-664',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.newegg.com/amd-ryzen-9-5900x/p/N82E16819113664'
},
{
brand: 'amd',
cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113665',
itemNumber: '19-113-665',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.newegg.com/amd-ryzen-9-5900x/p/N82E16819113665'
},
{
brand: 'amd',
cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113666',
itemNumber: '19-113-666',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.newegg.com/amd-ryzen-5-5600x/p/N82E16819113666'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.newegg.com/p/N82E16868105273'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.newegg.com/p/N82E16868105274'
} }
], ],
name: 'newegg', name: 'newegg',
realTimeInventoryLookup: async (itemNumber: string) => { realTimeInventoryLookup: async (itemNumber: string) => {
const request_url = 'https://www.newegg.com/product/api/ProductRealtime?ItemNumber=' + itemNumber; const request_url =
'https://www.newegg.com/product/api/ProductRealtime?ItemNumber=' +
itemNumber;
const response = await fetch(request_url); const response = await fetch(request_url);
const response_json = await response.json(); const response_json = await response.json();
return response_json.MainItem !== undefined && response_json.MainItem.Instock === true; return (
response_json.MainItem !== undefined &&
response_json.MainItem.Instock === true
);
} }
}; };
+120 -55
View File
@@ -4,221 +4,286 @@ export const Notebooksbilliger: Store = {
labels: { labels: {
inStock: { inStock: {
container: '.warehouse', container: '.warehouse',
text: ['sofort ab lager', 'verfügbarkeit: ca. 2-4 werktage', 'verfügbarkeit: ca. 5-10 werktage'] text: [
'sofort ab lager',
'verfügbarkeit: ca. 2-4 werktage',
'verfügbarkeit: ca. 5-10 werktage'
]
}, },
maxPrice: { maxPrice: {
container: 'form[name="cart_quantity"] span[class*="product-price__regular"]', container:
'form[name="cart_quantity"] span[class*="product-price__regular"]',
euroFormat: true euroFormat: true
}, },
outOfStock: [{ outOfStock: [
container: '.warehouse', {
text: ['liefertermin noch unbestimmt'] container: '.warehouse',
}, text: ['liefertermin noch unbestimmt']
{ },
container: '.soldOut', {
text: ['dieses produkt ist leider ausverkauft.'] container: '.soldOut',
}, text: ['dieses produkt ist leider ausverkauft.']
{ },
container: '.just_inStore', {
text: ['dieses Produkt kann nur in unseren unten genannten Stores gekauft werden.'] container: '.just_inStore',
}, text: [
{ 'dieses Produkt kann nur in unseren unten genannten Stores gekauft werden.'
container: '#product_error_text', ]
text: ['leider ist dieser artikel nicht mehr verfügbar.'] },
}] {
container: '#product_error_text',
text: ['leider ist dieser artikel nicht mehr verfügbar.']
}
]
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.notebooksbilliger.de/gainward+geforce+rtx+2070+super+phoenix+v1+grafikkarte+656238' url:
'https://www.notebooksbilliger.de/gainward+geforce+rtx+2070+super+phoenix+v1+grafikkarte+656238'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3070+ichill+x3+grafikkarte+684162' url:
'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3070+ichill+x3+grafikkarte+684162'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2', model: 'twin x2',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3070+twin+x2+grafikkarte+685496' url:
'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3070+twin+x2+grafikkarte+685496'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3070+twin+x2+oc+grafikkarte+685500' url:
'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3070+twin+x2+oc+grafikkarte+685500'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3070+founders+edition+685357' url:
'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3070+founders+edition+685357'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3070+founders+edition+685359' url:
'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3070+founders+edition+685359'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix', model: 'phoenix',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/gainward+geforce+rtx+3070+phoenix+8gb+gddr6+grafikkarte+685073' url:
'https://www.notebooksbilliger.de/gainward+geforce+rtx+3070+phoenix+8gb+gddr6+grafikkarte+685073'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/gainward+geforce+rtx+3070+phoenix+gs+8gb+gddr6+grafikkarte+681575' url:
'https://www.notebooksbilliger.de/gainward+geforce+rtx+3070+phoenix+gs+8gb+gddr6+grafikkarte+681575'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'uprising', model: 'uprising',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/pny+geforce+rtx+3070+8gb+uprising+dual+fan+edition+grafikkarte+685520' url:
'https://www.notebooksbilliger.de/pny+geforce+rtx+3070+8gb+uprising+dual+fan+edition+grafikkarte+685520'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/pny+geforce+rtx+3070+8gb+xlr8+gaming+revel+epic+x+rgb+685560' url:
'https://www.notebooksbilliger.de/pny+geforce+rtx+3070+8gb+xlr8+gaming+revel+epic+x+rgb+685560'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/asus+tuf+gaming+geforce+rtx+3070+8gb+grafikkarte+685524' url:
'https://www.notebooksbilliger.de/asus+tuf+gaming+geforce+rtx+3070+8gb+grafikkarte+685524'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge', model: 'twin edge',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/zotac+gaming+geforce+rtx+3070+twin+edge+8gb+gddr6+grafikkarte+677561' url:
'https://www.notebooksbilliger.de/zotac+gaming+geforce+rtx+3070+twin+edge+8gb+gddr6+grafikkarte+677561'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/zotac+gaming+geforce+rtx+3070+twin+edge+oc+8gb+gddr6+grafikkarte+684216' url:
'https://www.notebooksbilliger.de/zotac+gaming+geforce+rtx+3070+twin+edge+oc+8gb+gddr6+grafikkarte+684216'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/gainward+geforce+rtx+3080+phoenix+gs+10gb+gddr6x+grafikkarte+677618' url:
'https://www.notebooksbilliger.de/gainward+geforce+rtx+3080+phoenix+gs+10gb+gddr6x+grafikkarte+677618'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/gigabyte+geforce+rtx+3080+eagle+oc+10gb+gddr6x+grafikkarte+677501' url:
'https://www.notebooksbilliger.de/gigabyte+geforce+rtx+3080+eagle+oc+10gb+gddr6x+grafikkarte+677501'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/gigabyte+geforce+rtx+3080+gaming+oc+10gb+gddr6x+grafikkarte+677499' url:
'https://www.notebooksbilliger.de/gigabyte+geforce+rtx+3080+gaming+oc+10gb+gddr6x+grafikkarte+677499'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3080+ichill+x3+grafikkarte+678588' url:
'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3080+ichill+x3+grafikkarte+678588'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3080+twin+x2+oc+grafikkarte+679190' url:
'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3080+twin+x2+oc+grafikkarte+679190'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/msi+geforce+rtx+3080+gaming+x+trio+10g+grafikkarte+678527' url:
'https://www.notebooksbilliger.de/msi+geforce+rtx+3080+gaming+x+trio+10g+grafikkarte+678527'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3080+founders+edition+683301' url:
'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3080+founders+edition+683301'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3080+founders+edition+685126' url:
'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3080+founders+edition+685126'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/palit+geforce+rtx+3080+gamingpro+10gb+gddr6x+grafikkarte+677609' url:
'https://www.notebooksbilliger.de/palit+geforce+rtx+3080+gamingpro+10gb+gddr6x+grafikkarte+677609'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/palit+geforce+rtx+3080+gamingpro+oc+10gb+gddr6x+grafikkarte+677606' url:
'https://www.notebooksbilliger.de/palit+geforce+rtx+3080+gamingpro+oc+10gb+gddr6x+grafikkarte+677606'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/pny+geforce+rtx+3080+xlr8+gaming+10gb+gddr6x+grafikkarte+677407' url:
'https://www.notebooksbilliger.de/pny+geforce+rtx+3080+xlr8+gaming+10gb+gddr6x+grafikkarte+677407'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/pny+geforce+rtx+3080+10gb+xlr8+gaming+revel+epic+x+grafikkarte+677412' url:
'https://www.notebooksbilliger.de/pny+geforce+rtx+3080+10gb+xlr8+gaming+revel+epic+x+grafikkarte+677412'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/asus+rog+strix+geforce+rtx+3090+24gb+gddr6x+grafikkarte+677343' url:
'https://www.notebooksbilliger.de/asus+rog+strix+geforce+rtx+3090+24gb+gddr6x+grafikkarte+677343'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/asus+rog+strix+geforce+rtx+3090+oc+24gb+gddr6x+grafikkarte+677308' url:
'https://www.notebooksbilliger.de/asus+rog+strix+geforce+rtx+3090+oc+24gb+gddr6x+grafikkarte+677308'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/gigabyte+geforce+rtx+3090+master+24gb+gddr6x+grafikkarte+683868' url:
'https://www.notebooksbilliger.de/gigabyte+geforce+rtx+3090+master+24gb+gddr6x+grafikkarte+683868'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3090+founders+edition+683300' url:
'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3090+founders+edition+683300'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3090+founders+edition+685124' url:
'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3090+founders+edition+685124'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/palit+geforce+rtx+3090+gamingpro+oc+24gb+gddr6x+grafikkarte+677599' url:
'https://www.notebooksbilliger.de/palit+geforce+rtx+3090+gamingpro+oc+24gb+gddr6x+grafikkarte+677599'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/zotac+gaming+geforce+rtx+3090+trinity+24gb+gddr6x+grafikkarte+677550' url:
'https://www.notebooksbilliger.de/zotac+gaming+geforce+rtx+3090+trinity+24gb+gddr6x+grafikkarte+677550'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.notebooksbilliger.de/amd+ryzen+5+5600x+cpu+684022'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.notebooksbilliger.de/amd+ryzen+ryzen+7+5800x+cpu+684018'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.notebooksbilliger.de/amd+ryzen+9+5900x+cpu+684032'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.notebooksbilliger.de/amd+ryzen+9+5950x+cpu+684033'
} }
], ],
name: 'notebooksbilliger' name: 'notebooksbilliger'
+6 -3
View File
@@ -26,7 +26,8 @@ export const Novatech: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.novatech.co.uk/products/gigabyte-geforce-rtx-2060-oc-v2-6g-graphics-card/gv-n2060oc-6gdv2.html' url:
'https://www.novatech.co.uk/products/gigabyte-geforce-rtx-2060-oc-v2-6g-graphics-card/gv-n2060oc-6gdv2.html'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -39,11 +40,13 @@ export const Novatech: Store = {
urls: [ urls: [
{ {
series: '3080', series: '3080',
url: 'https://www.novatech.co.uk/products/components/nvidiageforcegraphicscards/nvidiartxseries/nvidiartx3080/?i=200' url:
'https://www.novatech.co.uk/products/components/nvidiageforcegraphicscards/nvidiartxseries/nvidiartx3080/?i=200'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.novatech.co.uk/products/components/nvidiageforcegraphicscards/nvidiartxseries/nvidiartx3090/?i=200' url:
'https://www.novatech.co.uk/products/components/nvidiageforcegraphicscards/nvidiartxseries/nvidiartx3090/?i=200'
} }
] ]
}, },
+220 -20
View File
@@ -13,27 +13,227 @@ export interface NvidiaRegionInfo {
} }
export const regionInfos = new Map<string, NvidiaRegionInfo>([ export const regionInfos = new Map<string, NvidiaRegionInfo>([
['austria', {currency: 'EUR', drLocale: 'de_de', fe2060SuperId: 5394902900, fe3080Id: 5440853700, fe3090Id: 5444941400, siteLocale: 'de-at'}], [
['belgium', {currency: 'EUR', drLocale: 'fr_fr', fe2060SuperId: 5394902700, fe3080Id: 5438795700, fe3090Id: 5438795600, siteLocale: 'fr-be'}], 'austria',
['canada', {currency: 'CAD', drLocale: 'en_us', fe2060SuperId: 5379432500, fe3080Id: 5438481700, fe3090Id: 5438481600, siteLocale: 'en-us'}], {
['czechia', {currency: 'CZK', drLocale: 'en_gb', fe2060SuperId: 5394902800, fe3080Id: 5438793800, fe3090Id: 5438793600, siteLocale: 'cs-cz'}], currency: 'EUR',
['denmark', {currency: 'DKK', drLocale: 'en_gb', fe2060SuperId: 5394903100, fe3080Id: 5438793300, fe3090Id: null, siteLocale: 'da-dk'}], drLocale: 'de_de',
['finland', {currency: 'EUR', drLocale: 'en_gb', fe2060SuperId: 5394903100, fe3080Id: 5438793300, fe3090Id: null, siteLocale: 'fi-fi'}], fe2060SuperId: 5394902900,
['france', {currency: 'EUR', drLocale: 'fr_fr', fe2060SuperId: 5394903200, fe3080Id: 5438795200, fe3090Id: 5438761500, siteLocale: 'fr-fr'}], fe3080Id: 5440853700,
['germany', {currency: 'EUR', drLocale: 'de_de', fe2060SuperId: 5394902900, fe3080Id: 5438792300, fe3090Id: 5438761400, siteLocale: 'de-de'}], fe3090Id: 5444941400,
['great_britain', {currency: 'GBP', drLocale: 'en_gb', fe2060SuperId: 5394903300, fe3080Id: 5438792800, fe3090Id: 5438792700, siteLocale: 'en-gb'}], siteLocale: 'de-at'
['ireland', {currency: 'GBP', drLocale: 'en_gb', fe2060SuperId: 5394903300, fe3080Id: 5438792800, fe3090Id: 5438792700, siteLocale: 'en-gb'}], }
['italy', {currency: 'EUR', drLocale: 'it_it', fe2060SuperId: 5394903400, fe3080Id: 5438796200, fe3090Id: 5438796100, siteLocale: 'it-it'}], ],
['luxembourg', {currency: 'EUR', drLocale: 'fr_fr', fe2060SuperId: 5394902700, fe3080Id: 5438795700, fe3090Id: 5438795600, siteLocale: 'fr-be'}], [
['netherlands', {currency: 'EUR', drLocale: 'nl_nl', fe2060SuperId: 5394903500, fe3080Id: 5438796700, fe3090Id: 5438796600, siteLocale: 'nl-nl'}], 'belgium',
['norway', {currency: 'NOK', drLocale: 'no_no', fe2060SuperId: 5394903600, fe3080Id: 5438797200, fe3090Id: 5438797100, siteLocale: 'nb-no'}], {
['poland', {currency: 'PLN', drLocale: 'pl_pl', fe2060SuperId: 5394903700, fe3080Id: 5438797700, fe3090Id: 5438797600, siteLocale: 'pl-pl'}], currency: 'EUR',
['portugal', {currency: 'EUR', drLocale: 'en_gb', fe2060SuperId: null, fe3080Id: 5438794300, fe3090Id: null, siteLocale: 'en-gb'}], drLocale: 'fr_fr',
['russia', {currency: 'RUB', drLocale: 'ru_ru', fe2060SuperId: null, fe3080Id: null, fe3090Id: null, siteLocale: 'ru-ru'}], fe2060SuperId: 5394902700,
['spain', {currency: 'EUR', drLocale: 'es_es', fe2060SuperId: 5394903000, fe3080Id: 5438794800, fe3090Id: 5438794700, siteLocale: 'es-es'}], fe3080Id: 5438795700,
['sweden', {currency: 'SEK', drLocale: 'sv_se', fe2060SuperId: 5394903900, fe3080Id: 5438798100, fe3090Id: 5438761600, siteLocale: 'sv-se'}], fe3090Id: 5438795600,
siteLocale: 'fr-be'
}
],
[
'canada',
{
currency: 'CAD',
drLocale: 'en_us',
fe2060SuperId: 5379432500,
fe3080Id: 5438481700,
fe3090Id: 5438481600,
siteLocale: 'en-us'
}
],
[
'czechia',
{
currency: 'CZK',
drLocale: 'en_gb',
fe2060SuperId: 5394902800,
fe3080Id: 5438793800,
fe3090Id: 5438793600,
siteLocale: 'cs-cz'
}
],
[
'denmark',
{
currency: 'DKK',
drLocale: 'en_gb',
fe2060SuperId: 5394903100,
fe3080Id: 5438793300,
fe3090Id: null,
siteLocale: 'da-dk'
}
],
[
'finland',
{
currency: 'EUR',
drLocale: 'en_gb',
fe2060SuperId: 5394903100,
fe3080Id: 5438793300,
fe3090Id: null,
siteLocale: 'fi-fi'
}
],
[
'france',
{
currency: 'EUR',
drLocale: 'fr_fr',
fe2060SuperId: 5394903200,
fe3080Id: 5438795200,
fe3090Id: 5438761500,
siteLocale: 'fr-fr'
}
],
[
'germany',
{
currency: 'EUR',
drLocale: 'de_de',
fe2060SuperId: 5394902900,
fe3080Id: 5438792300,
fe3090Id: 5438761400,
siteLocale: 'de-de'
}
],
[
'great_britain',
{
currency: 'GBP',
drLocale: 'en_gb',
fe2060SuperId: 5394903300,
fe3080Id: 5438792800,
fe3090Id: 5438792700,
siteLocale: 'en-gb'
}
],
[
'ireland',
{
currency: 'GBP',
drLocale: 'en_gb',
fe2060SuperId: 5394903300,
fe3080Id: 5438792800,
fe3090Id: 5438792700,
siteLocale: 'en-gb'
}
],
[
'italy',
{
currency: 'EUR',
drLocale: 'it_it',
fe2060SuperId: 5394903400,
fe3080Id: 5438796200,
fe3090Id: 5438796100,
siteLocale: 'it-it'
}
],
[
'luxembourg',
{
currency: 'EUR',
drLocale: 'fr_fr',
fe2060SuperId: 5394902700,
fe3080Id: 5438795700,
fe3090Id: 5438795600,
siteLocale: 'fr-be'
}
],
[
'netherlands',
{
currency: 'EUR',
drLocale: 'nl_nl',
fe2060SuperId: 5394903500,
fe3080Id: 5438796700,
fe3090Id: 5438796600,
siteLocale: 'nl-nl'
}
],
[
'norway',
{
currency: 'NOK',
drLocale: 'no_no',
fe2060SuperId: 5394903600,
fe3080Id: 5438797200,
fe3090Id: 5438797100,
siteLocale: 'nb-no'
}
],
[
'poland',
{
currency: 'PLN',
drLocale: 'pl_pl',
fe2060SuperId: 5394903700,
fe3080Id: 5438797700,
fe3090Id: 5438797600,
siteLocale: 'pl-pl'
}
],
[
'portugal',
{
currency: 'EUR',
drLocale: 'en_gb',
fe2060SuperId: null,
fe3080Id: 5438794300,
fe3090Id: null,
siteLocale: 'en-gb'
}
],
[
'russia',
{
currency: 'RUB',
drLocale: 'ru_ru',
fe2060SuperId: null,
fe3080Id: null,
fe3090Id: null,
siteLocale: 'ru-ru'
}
],
[
'spain',
{
currency: 'EUR',
drLocale: 'es_es',
fe2060SuperId: 5394903000,
fe3080Id: 5438794800,
fe3090Id: 5438794700,
siteLocale: 'es-es'
}
],
[
'sweden',
{
currency: 'SEK',
drLocale: 'sv_se',
fe2060SuperId: 5394903900,
fe3080Id: 5438798100,
fe3090Id: 5438761600,
siteLocale: 'sv-se'
}
],
// https://github.com/jef/streetmerchant/issues/407 This fe2080SuperID is for the Shield TV which is out of stock in the US // https://github.com/jef/streetmerchant/issues/407 This fe2080SuperID is for the Shield TV which is out of stock in the US
['usa', {currency: 'USD', drLocale: 'en_us', fe2060SuperId: 5355772500, fe3080Id: 5438481700, fe3090Id: 5438481600, siteLocale: 'en-us'}] [
'usa',
{
currency: 'USD',
drLocale: 'en_us',
fe2060SuperId: 5355772500,
fe3080Id: 5438481700,
fe3090Id: 5438481600,
siteLocale: 'en-us'
}
]
]); ]);
export const NvidiaApi: Store = { export const NvidiaApi: Store = {
+12 -6
View File
@@ -34,37 +34,43 @@ export const Nvidia: Store = {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3080', series: '3080',
url: 'https://www.nvidia.com/en-us/shop/geforce/gpu/?page=1&limit=9&locale=en-us&category=GPU&gpu=RTX%203080' url:
'https://www.nvidia.com/en-us/shop/geforce/gpu/?page=1&limit=9&locale=en-us&category=GPU&gpu=RTX%203080'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3080', series: '3080',
url: 'https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3080' url:
'https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3080'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3090', series: '3090',
url: 'https://www.nvidia.com/en-us/shop/geforce/gpu/?page=1&limit=9&locale=en-us&category=GPU&gpu=RTX%203090' url:
'https://www.nvidia.com/en-us/shop/geforce/gpu/?page=1&limit=9&locale=en-us&category=GPU&gpu=RTX%203090'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3090', series: '3090',
url: 'https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3090' url:
'https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3090'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: 'https://www.nvidia.com/en-us/shop/geforce/gpu/?page=1&limit=9&locale=en-us&category=GPU&gpu=RTX%203070' url:
'https://www.nvidia.com/en-us/shop/geforce/gpu/?page=1&limit=9&locale=en-us&category=GPU&gpu=RTX%203070'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: 'https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3070' url:
'https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3070'
} }
], ],
name: 'nvidia' name: 'nvidia'
+8 -5
View File
@@ -20,19 +20,22 @@ export const OfficeDepot: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.officedepot.com/a/products/4652239/EVGA-GeForce-RTX-2060-Graphic-Card/' url:
'https://www.officedepot.com/a/products/4652239/EVGA-GeForce-RTX-2060-Graphic-Card/'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.officedepot.com/a/products/7189374/PNY-GeForce-RTX-3080-10GB-GDDR6X/' url:
'https://www.officedepot.com/a/products/7189374/PNY-GeForce-RTX-3080-10GB-GDDR6X/'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.officedepot.com/a/products/7791294/PNY-GeForce-RTX-3080-10GB-GDDR6X/' url:
'https://www.officedepot.com/a/products/7791294/PNY-GeForce-RTX-3080-10GB-GDDR6X/'
} }
], ],
name: 'officedepot' name: 'officedepot'
+6 -3
View File
@@ -21,7 +21,8 @@ export const Overclockers: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.overclockers.co.uk/gigabyte-geforce-rtx-2060-oc-rev2-6144mb-gddr6-pci-express-graphics-card-gx-1bj-gi.html' url:
'https://www.overclockers.co.uk/gigabyte-geforce-rtx-2060-oc-rev2-6144mb-gddr6-pci-express-graphics-card-gx-1bj-gi.html'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -34,7 +35,8 @@ export const Overclockers: Store = {
urls: [ urls: [
{ {
series: '3070', series: '3070',
url: 'https://www.overclockers.co.uk/pc-components/graphics-cards/nvidia/geforce-rtx-3070' url:
'https://www.overclockers.co.uk/pc-components/graphics-cards/nvidia/geforce-rtx-3070'
}, },
{ {
series: '3080', series: '3080',
@@ -46,7 +48,8 @@ export const Overclockers: Store = {
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.overclockers.co.uk/pc-components/graphics-cards/nvidia/geforce-rtx-3090' url:
'https://www.overclockers.co.uk/pc-components/graphics-cards/nvidia/geforce-rtx-3090'
} }
] ]
}, },
+44 -25
View File
@@ -20,19 +20,22 @@ export const PCComponentes: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.pccomponentes.com/gigabyte-geforce-gtx-1660-super-oc-6gb-gddr6' url:
'https://www.pccomponentes.com/gigabyte-geforce-gtx-1660-super-oc-6gb-gddr6'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/gigabyte-geforce-rtx-3080-eagle-oc-10g-10gb-gddr6x' url:
'https://www.pccomponentes.com/gigabyte-geforce-rtx-3080-eagle-oc-10g-10gb-gddr6x'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/msi-geforce-rtx-3080-ventus-3x-oc-10gb-gddr6x' url:
'https://www.pccomponentes.com/msi-geforce-rtx-3080-ventus-3x-oc-10gb-gddr6x'
}, },
{ {
brand: 'asus', brand: 'asus',
@@ -44,105 +47,121 @@ export const PCComponentes: Store = {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/gigabyte-geforce-rtx-3080-gaming-oc-10g-10gb-gddr6x' url:
'https://www.pccomponentes.com/gigabyte-geforce-rtx-3080-gaming-oc-10g-10gb-gddr6x'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/msi-geforce-rtx-3080-gaming-x-trio-10gb-gddr6x' url:
'https://www.pccomponentes.com/msi-geforce-rtx-3080-gaming-x-trio-10gb-gddr6x'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/asus-tuf-geforce-rtx-3080-oc-10gb-gddr6x' url:
'https://www.pccomponentes.com/asus-tuf-geforce-rtx-3080-oc-10gb-gddr6x'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/asus-rog-strix-geforce-rtx-3080-10g-gaming-oc-10gb-gddr6x' url:
'https://www.pccomponentes.com/asus-rog-strix-geforce-rtx-3080-10g-gaming-oc-10gb-gddr6x'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/evga-geforce-rtx-3080-xc3-black-gaming-10gb-gddr6x' url:
'https://www.pccomponentes.com/evga-geforce-rtx-3080-xc3-black-gaming-10gb-gddr6x'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/zotac-gaming-geforce-rtx-3080-trinity-10gb-gddr6x' url:
'https://www.pccomponentes.com/zotac-gaming-geforce-rtx-3080-trinity-10gb-gddr6x'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x' url:
'https://www.pccomponentes.com/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/asus-rog-strix-geforce-rtx-3080-gaming-10gb-gddr6x' url:
'https://www.pccomponentes.com/asus-rog-strix-geforce-rtx-3080-gaming-10gb-gddr6x'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/zotac-gaming-geforce-rtx-3080-trinity-oc-10gb-gddr6x' url:
'https://www.pccomponentes.com/zotac-gaming-geforce-rtx-3080-trinity-oc-10gb-gddr6x'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/gigabyte-geforce-rtx-3080-vision-oc-10gb-gddr6x' url:
'https://www.pccomponentes.com/gigabyte-geforce-rtx-3080-vision-oc-10gb-gddr6x'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/evga-geforce-rtx-3080-xc3-gaming-10gb-gddr6x' url:
'https://www.pccomponentes.com/evga-geforce-rtx-3080-xc3-gaming-10gb-gddr6x'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-gddr6x' url:
'https://www.pccomponentes.com/evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-gddr6x'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/gigabyte-aorus-geforce-rtx-3080-master-10gb-gddr6x' url:
'https://www.pccomponentes.com/gigabyte-aorus-geforce-rtx-3080-master-10gb-gddr6x'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-gddr6x' url:
'https://www.pccomponentes.com/gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-gddr6x'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/evga-geforce-rtx-3080-ftw3-gaming-10gb-gddr6x' url:
'https://www.pccomponentes.com/evga-geforce-rtx-3080-ftw3-gaming-10gb-gddr6x'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10gb-gddr6x' url:
'https://www.pccomponentes.com/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10gb-gddr6x'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/pny-geforce-rtx-3080-epic-x-rgb-triple-fan-xlr8-gaming-edition-10gb-gddr6x' url:
'https://www.pccomponentes.com/pny-geforce-rtx-3080-epic-x-rgb-triple-fan-xlr8-gaming-edition-10gb-gddr6x'
} }
], ],
name: 'pccomponentes' name: 'pccomponentes'
}; };
+15 -12
View File
@@ -10,7 +10,6 @@ export const Pny: Store = {
container: 'span[itemprop="price"]', container: 'span[itemprop="price"]',
euroFormat: false euroFormat: false
} }
}, },
links: [ links: [
{ {
@@ -27,35 +26,39 @@ export const Pny: Store = {
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3070', series: '3070',
url: 'https://www.pny.com/geforce-rtx-3070-xlr8-gaming-epic-x-rgb-triple-fan' url:
'https://www.pny.com/geforce-rtx-3070-xlr8-gaming-epic-x-rgb-triple-fan'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.pny.com/geforce-rtx-3080-xlr8-gaming-epic-x-rgb-triple-fan-m' url:
'https://www.pny.com/geforce-rtx-3080-xlr8-gaming-epic-x-rgb-triple-fan-m'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.pny.com/geforce-rtx-3080-xlr8-gaming-epic-x-rgb-triple-fan-p' url:
'https://www.pny.com/geforce-rtx-3080-xlr8-gaming-epic-x-rgb-triple-fan-p'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3090', series: '3090',
url: 'https://www.pny.com/geforce-rtx-3090-xlr8-gaming-epic-x-rgb-triple-fan-m' url:
'https://www.pny.com/geforce-rtx-3090-xlr8-gaming-epic-x-rgb-triple-fan-m'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 revel',
series: '3090', series: '3090',
url: 'https://www.pny.com/geforce-rtx-3090-xlr8-gaming-epic-x-rgb-triple-fan-p' url:
'https://www.pny.com/geforce-rtx-3090-xlr8-gaming-epic-x-rgb-triple-fan-p'
} }
], ],
name: 'pny' name: 'pny'
}; };
+32 -8
View File
@@ -3,7 +3,8 @@ import {Store} from './store';
export const ProshopDE: Store = { export const ProshopDE: Store = {
labels: { labels: {
maxPrice: { maxPrice: {
container: '.site-currency-wrapper > span[class="site-currency-attention"]', container:
'.site-currency-wrapper > span[class="site-currency-attention"]',
euroFormat: true euroFormat: true
}, },
outOfStock: { outOfStock: {
@@ -20,13 +21,13 @@ export const ProshopDE: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3070', series: '3070',
url: 'https://www.proshop.de/2876843' url: 'https://www.proshop.de/2876843'
}, },
{ {
brand: 'asus', brand: 'asus',
model: ' rog strix oc', model: 'strix oc',
series: '3070', series: '3070',
url: 'https://www.proshop.de/2876845' url: 'https://www.proshop.de/2876845'
}, },
@@ -122,13 +123,13 @@ export const ProshopDE: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.proshop.de/2876857' url: 'https://www.proshop.de/2876857'
}, },
{ {
brand: 'asus', brand: 'asus',
model: ' rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.proshop.de/2876859' url: 'https://www.proshop.de/2876859'
}, },
@@ -206,13 +207,13 @@ export const ProshopDE: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.proshop.de/2876865' url: 'https://www.proshop.de/2876865'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.proshop.de/2876867' url: 'https://www.proshop.de/2876867'
}, },
@@ -251,8 +252,31 @@ export const ProshopDE: Store = {
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.proshop.de/2876881' url: 'https://www.proshop.de/2876881'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.proshop.de/2884168'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.proshop.de/2884171'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.proshop.de/2884173'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.proshop.de/2884175'
} }
], ],
name: 'proshop-de' name: 'proshop-de'
}; };
+56 -34
View File
@@ -7,7 +7,8 @@ export const ProshopDK: Store = {
text: ['1-2 dages levering', 'fjernlager'] text: ['1-2 dages levering', 'fjernlager']
}, },
maxPrice: { maxPrice: {
container: '.site-currency-wrapper > span[class="site-currency-attention"]', container:
'.site-currency-wrapper > span[class="site-currency-attention"]',
euroFormat: true euroFormat: true
}, },
outOfStock: { outOfStock: {
@@ -20,135 +21,156 @@ export const ProshopDK: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-2060-TUF-OC-6GB-GDDR6-RAM-Grafikkort/2694767' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-2060-TUF-OC-6GB-GDDR6-RAM-Grafikkort/2694767'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf gaming', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-TUF-10GB-GDDR6X-RAM-Grafikkort/2876763' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-TUF-10GB-GDDR6X-RAM-Grafikkort/2876763'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf gaming oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-TUF-OC-10GB-GDDR6X-RAM-Grafikkort/2876861' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-TUF-OC-10GB-GDDR6X-RAM-Grafikkort/2876861'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix gaming', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-ROG-STRIX-10GB-GDDR6X-RAM-Grafikkort/2876857' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-ROG-STRIX-10GB-GDDR6X-RAM-Grafikkort/2876857'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix gaming oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-ROG-STRIX-OC-10GB-GDDR6X-RAM-Grafikkort/2876859' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-ROG-STRIX-OC-10GB-GDDR6X-RAM-Grafikkort/2876859'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3080-GAMING-X-TRIO-10GB-GDDR6X-RAM-Grafikkort/2876877' url:
'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3080-GAMING-X-TRIO-10GB-GDDR6X-RAM-Grafikkort/2876877'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x', model: 'ventus 3x',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3080-Ventus-3X-10GB-GDDR6X-RAM-Grafikkort/2876878' url:
'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3080-Ventus-3X-10GB-GDDR6X-RAM-Grafikkort/2876878'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3080-Ventus-3X-OC-10GB-GDDR6X-RAM-Grafikkort/2876879' url:
'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3080-Ventus-3X-OC-10GB-GDDR6X-RAM-Grafikkort/2876879'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill 4x', model: 'ichill x3',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/Inno3D-GeForce-RTX-3080-iCHILL-X4-10GB-GDDR6X-SDRAM-Grafikkort/2878971' url:
'https://www.proshop.dk/Grafikkort/Inno3D-GeForce-RTX-3080-iCHILL-X4-10GB-GDDR6X-SDRAM-Grafikkort/2878971'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill 3x', model: 'ichill x3',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/Inno3D-GeForce-RTX-3080-iCHILL-X3-10GB-GDDR6X-SDRAM-Grafikkort/2878969' url:
'https://www.proshop.dk/Grafikkort/Inno3D-GeForce-RTX-3080-iCHILL-X3-10GB-GDDR6X-SDRAM-Grafikkort/2878969'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-GAMING-OC-10GB-GDDR6X-RAM-Grafikkort/2876838' url:
'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-GAMING-OC-10GB-GDDR6X-RAM-Grafikkort/2876838'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-Eagle-OC-10GB-GDDR6X-RAM-Grafikkort/2876837' url:
'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-Eagle-OC-10GB-GDDR6X-RAM-Grafikkort/2876837'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/Inno3D-GeForce-RTX-3080-Twin-X2-OC-10GB-GDDR6X-SDRAM-Grafikkort/2878968' url:
'https://www.proshop.dk/Grafikkort/Inno3D-GeForce-RTX-3080-Twin-X2-OC-10GB-GDDR6X-SDRAM-Grafikkort/2878968'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-Vision-OC-10GB-GDDR6X-RAM-Grafikkort/2878401' url:
'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-Vision-OC-10GB-GDDR6X-RAM-Grafikkort/2878401'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-AORUS-Master-10GB-GDDR6X-RAM-Grafikkort/2876835' url:
'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-AORUS-Master-10GB-GDDR6X-RAM-Grafikkort/2876835'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf gaming', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-TUF-24GB-GDDR6X-RAM-Grafikkort/2876764' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-TUF-24GB-GDDR6X-RAM-Grafikkort/2876764'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf gaming oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-TUF-OC-24GB-GDDR6X-RAM-Grafikkort/2876869' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-TUF-OC-24GB-GDDR6X-RAM-Grafikkort/2876869'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix gaming', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-ROG-STRIX-24GB-GDDR6X-RAM-Grafikkort/2876865' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-ROG-STRIX-24GB-GDDR6X-RAM-Grafikkort/2876865'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix gaming oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-ROG-STRIX-OC-24GB-GDDR6X-RAM-Grafikkort/2876867' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-ROG-STRIX-OC-24GB-GDDR6X-RAM-Grafikkort/2876867'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3090-GAMING-X-TRIO-24GB-GDDR6X-RAM-Grafikkort/2876881' url:
'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3090-GAMING-X-TRIO-24GB-GDDR6X-RAM-Grafikkort/2876881'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3090-AORUS-Master-24GB-GDDR6X-RAM-Grafikkort/2876840' url:
'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3090-AORUS-Master-24GB-GDDR6X-RAM-Grafikkort/2876840'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3090-AORUS-Xtreme-24GB-GDDR6X-RAM-Grafikkort/2876839' url:
'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3090-AORUS-Xtreme-24GB-GDDR6X-RAM-Grafikkort/2876839'
} }
], ],
name: 'proshop-dk' name: 'proshop-dk'
}; };
+17 -5
View File
@@ -20,7 +20,7 @@ export const Saturn: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3070', series: '3070',
url: 'https://www.saturn.de/de/product/-2691244.html' url: 'https://www.saturn.de/de/product/-2691244.html'
}, },
@@ -44,13 +44,13 @@ export const Saturn: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.saturn.de/de/product/-2681869.html' url: 'https://www.saturn.de/de/product/-2681869.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.saturn.de/de/product/-2681871.html' url: 'https://www.saturn.de/de/product/-2681871.html'
}, },
@@ -110,13 +110,13 @@ export const Saturn: Store = {
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.saturn.de/de/product/-2681863.html' url: 'https://www.saturn.de/de/product/-2681863.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.saturn.de/de/product/-2681866.html' url: 'https://www.saturn.de/de/product/-2681866.html'
}, },
@@ -155,6 +155,18 @@ export const Saturn: Store = {
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.saturn.de/de/product/-2683226.html' url: 'https://www.saturn.de/de/product/-2683226.html'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.saturn.de/de/product/-2661938.html'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.saturn.de/de/product/-2661939.html'
} }
], ],
name: 'saturn' name: 'saturn'
+26 -8
View File
@@ -4,10 +4,12 @@ import {getProductLinksBuilder} from './helpers/card';
export const Scan: Store = { export const Scan: Store = {
disableAdBlocker: true, disableAdBlocker: true,
labels: { labels: {
captcha: [{ captcha: [
container: '#challenge-form', {
text: ['hcaptcha_submit'] container: '#challenge-form',
}], text: ['hcaptcha_submit']
}
],
inStock: { inStock: {
container: '.buyPanel .priceAvailability', container: '.buyPanel .priceAvailability',
text: ['add to basket', 'in stock'] text: ['add to basket', 'in stock']
@@ -26,7 +28,20 @@ export const Scan: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.scan.co.uk/products/msi-geforce-rtx-2060-ventus-xs-oc-6gb-gddr6-vr-ready-graphics-card-1920-core-1710mhz-boost' url:
'https://www.scan.co.uk/products/msi-geforce-rtx-2060-ventus-xs-oc-6gb-gddr6-vr-ready-graphics-card-1920-core-1710mhz-boost'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.scan.co.uk/products/playstation-5-console'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.scan.co.uk/products/playstation-5-digital-edition'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -40,15 +55,18 @@ export const Scan: Store = {
urls: [ urls: [
{ {
series: '3070', series: '3070',
url: 'https://www.scan.co.uk/shop/computer-hardware/gpu-nvidia/nvidia-geforce-rtx-3070-graphics-cards' url:
'https://www.scan.co.uk/shop/computer-hardware/gpu-nvidia/nvidia-geforce-rtx-3070-graphics-cards'
}, },
{ {
series: '3080', series: '3080',
url: 'https://www.scan.co.uk/shop/computer-hardware/gpu-nvidia/nvidia-geforce-rtx-3080-graphics-cards' url:
'https://www.scan.co.uk/shop/computer-hardware/gpu-nvidia/nvidia-geforce-rtx-3080-graphics-cards'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.scan.co.uk/shop/computer-hardware/gpu-nvidia/nvidia-geforce-rtx-3090-graphics-cards' url:
'https://www.scan.co.uk/shop/computer-hardware/gpu-nvidia/nvidia-geforce-rtx-3090-graphics-cards'
} }
] ]
}, },
+95 -4
View File
@@ -10,13 +10,104 @@ export type Pricing = {
euroFormat?: boolean; euroFormat?: boolean;
}; };
export type Series = 'test:series' | '3070' | '3080' | '3090'; export type Brand =
| 'test:brand'
| 'amd'
| 'asus'
| 'evga'
| 'gainward'
| 'gigabyte'
| 'inno3d'
| 'kfa2'
| 'microsoft'
| 'msi'
| 'nvidia'
| 'palit'
| 'pny'
| 'sony'
| 'zotac';
export type Series =
| 'test:series'
| '3070'
| '3080'
| '3090'
| 'ryzen5950'
| 'ryzen5900'
| 'ryzen5800'
| 'ryzen5600'
| 'sonyps5c'
| 'sonyps5de'
| 'xboxsx'
| 'xboxss';
export type Model =
| 'test:model'
| '5600x'
| '5800x'
| '5900x'
| '5950x'
| 'amp extreme holo'
| 'amp holo'
| 'aorus'
| 'aorus master'
| 'aorus xtreme'
| 'dual'
| 'dual fan'
| 'dual oc'
| 'founders edition'
| 'ftw3'
| 'ftw3 ultra'
| 'eagle'
| 'eagle oc'
| 'gaming'
| 'gaming oc'
| 'gaming x3'
| 'ichill x2'
| 'ichill x3'
| 'ichill x4'
| 'gamerock oc'
| 'gaming x trio'
| 'gaming pro'
| 'gaming pro oc'
| 'ps5 console'
| 'ps5 digital'
| 'phantom gs'
| 'phoenix'
| 'phoenix gs'
| 'phoenix gs oc'
| 'sg oc'
| 'strix'
| 'strix oc'
| 'trinity'
| 'trinity oc'
| 'tuf'
| 'tuf oc'
| 'turbo'
| 'twin edge'
| 'twin edge oc'
| 'twin x2'
| 'twin x2 oc'
| 'uprising'
| 'ventus 2x'
| 'ventus 2x oc'
| 'ventus 3x'
| 'ventus 3x oc'
| 'vision'
| 'vision oc'
| 'xc3'
| 'xc3 black'
| 'xc3 ultra'
| 'xbox series s'
| 'xbox series x'
| 'xlr8 revel'
| 'xlr8 uprising';
export type Link = { export type Link = {
brand: 'test:brand' | 'asus' | 'evga' | 'gainward' | 'gigabyte' | 'inno3d' | 'kfa2' | 'msi' | 'nvidia' | 'palit' | 'pny' | 'zotac'; brand: Brand;
itemNumber?: string; itemNumber?: string;
series: Series; series: Series;
model: string; model: Model;
url: string; url: string;
cartUrl?: string; cartUrl?: string;
openCartAction?: (browser: Browser) => Promise<string>; openCartAction?: (browser: Browser) => Promise<string>;
@@ -34,7 +125,7 @@ export type Labels = {
maxPrice?: Pricing; maxPrice?: Pricing;
}; };
export type StatusCodeRangeArray = Array<(number | [number, number])>; export type StatusCodeRangeArray = Array<number | [number, number]>;
export type Store = { export type Store = {
realTimeInventoryLookup?: (itemNumber: string) => Promise<boolean>; realTimeInventoryLookup?: (itemNumber: string) => Promise<boolean>;
+47
View File
@@ -0,0 +1,47 @@
import {Store} from './store';
export const Target: Store = {
labels: {
inStock: [
{
container: '[data-test="preorderButton"]',
text: ['Preorder now']
},
{
container: '[data-test="shipItButton"]',
text: ['Ship it']
}
],
maxPrice: {
container: '[data-test="product-price"]'
}
},
links: [
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.target.com/p/playstation-5-console/-/A-81114595'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url:
'https://www.target.com/p/playstation-5-digital-edition-console/-/A-81114596'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.target.com/p/xbox-series-x-console/-/A-80790841'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.target.com/p/xbox-series-s-console/-/A-80790842'
}
],
name: 'target'
};
+13 -7
View File
@@ -22,7 +22,8 @@ export const Very: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.very.co.uk/msi-geforce-gtx-1660-ti-gaming-x-6g-graphics-card/1600350984.prd' url:
'https://www.very.co.uk/msi-geforce-gtx-1660-ti-gaming-x-6g-graphics-card/1600350984.prd'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -34,9 +35,11 @@ export const Very: Store = {
const titleElement = productElement.find('.productTitle').first(); const titleElement = productElement.find('.productTitle').first();
const title = titleElement.text()?.replace(/\n/g, ' ').trim(); const title = titleElement.text()?.replace(/\n/g, ' ').trim();
if (!title || ['RTX', series] if (
.map(x => title.toLowerCase().includes(x.toLowerCase())) !title ||
.filter(x => !x).length > 0 ['RTX', series]
.map((x) => title.toLowerCase().includes(x.toLowerCase()))
.filter((x) => !x).length > 0
) { ) {
continue; continue;
} }
@@ -67,15 +70,18 @@ export const Very: Store = {
urls: [ urls: [
{ {
series: '3070', series: '3070',
url: 'https://www.very.co.uk/electricals/pc-components/graphics-cards/e/b/118786.end?sort=newin,0&numProducts=100' url:
'https://www.very.co.uk/electricals/pc-components/graphics-cards/e/b/118786.end?sort=newin,0&numProducts=100'
}, },
{ {
series: '3080', series: '3080',
url: 'https://www.very.co.uk/electricals/pc-components/graphics-cards/e/b/118786.end?sort=newin,0&numProducts=100' url:
'https://www.very.co.uk/electricals/pc-components/graphics-cards/e/b/118786.end?sort=newin,0&numProducts=100'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.very.co.uk/electricals/pc-components/graphics-cards/e/b/118786.end?sort=newin,0&numProducts=100' url:
'https://www.very.co.uk/electricals/pc-components/graphics-cards/e/b/118786.end?sort=newin,0&numProducts=100'
} }
] ]
}, },
+41
View File
@@ -0,0 +1,41 @@
import {Store} from './store';
export const Walmart: Store = {
labels: {
inStock: {
container: '#ProductPrimaryCTA-cta_add_to_cart_button',
text: ['Add to cart']
},
maxPrice: {
container: 'span[class*="price-characteristic"]'
}
},
links: [
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.walmart.com/ip/PlayStation5-Console/363472942'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url:
'https://www.walmart.com/ip/Sony-PlayStation-5-Digital-Edition/493824815'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.walmart.com/ip/Xbox-Series-X/443574645'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.walmart.com/ip/Xbox-Series-S/606518560'
}
],
name: 'walmart'
};
+8 -5
View File
@@ -17,27 +17,30 @@ export const Zotac: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://store.zotac.com/zotac-gaming-geforce-rtx-2060-twin-fan-zt-t20600f-10m' url:
'https://store.zotac.com/zotac-gaming-geforce-rtx-2060-twin-fan-zt-t20600f-10m'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://store.zotac.com/zotac-gaming-geforce-rtx-3080-trinity-zt-a30800d-10p' url:
'https://store.zotac.com/zotac-gaming-geforce-rtx-3080-trinity-zt-a30800d-10p'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://store.zotac.com/zotac-gaming-geforce-rtx-3080-trinity-oc-zt-a30800j-10p' url:
'https://store.zotac.com/zotac-gaming-geforce-rtx-3080-trinity-oc-zt-a30800j-10p'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://store.zotac.com/zotac-gaming-geforce-rtx-3090-trinity-zt-a30900d-10p' url:
'https://store.zotac.com/zotac-gaming-geforce-rtx-3090-trinity-zt-a30900d-10p'
} }
], ],
name: 'zotac' name: 'zotac'
}; };
+6 -1
View File
@@ -11,7 +11,12 @@ declare module 'play-sound' {
export interface PlaySound { export interface PlaySound {
player: string; player: string;
play: ((file: string, callback: (error: Error) => void) => PlayerProcess) & ((file: string, options: PlayOptions, callback: (error: Error) => void) => PlayerProcess); play: ((file: string, callback: (error: Error) => void) => PlayerProcess) &
((
file: string,
options: PlayOptions,
callback: (error: Error) => void
) => PlayerProcess);
} }
export interface PlayerProcess { export interface PlayerProcess {
+13 -13
View File
@@ -2,19 +2,19 @@ declare module 'puppeteer-extra-plugin-block-resources' {
import {PuppeteerExtraPlugin} from 'puppeteer-extra'; import {PuppeteerExtraPlugin} from 'puppeteer-extra';
export type ResourceType = export type ResourceType =
'document' | | 'document'
'eventsource' | | 'eventsource'
'fetch' | | 'fetch'
'font' | | 'font'
'image' | | 'image'
'manifest' | | 'manifest'
'media' | | 'media'
'other' | | 'other'
'script' | | 'script'
'stylesheet' | | 'stylesheet'
'texttrack' | | 'texttrack'
'websocket' | | 'websocket'
'xhr'; | 'xhr';
export interface Options { export interface Options {
availableTypes?: Set<ResourceType>; availableTypes?: Set<ResourceType>;
+40 -8
View File
@@ -1,7 +1,9 @@
declare module '@jef/pushbullet' { declare module '@jef/pushbullet' {
export type DeviceParams = string | number | Record<string, any>; export type DeviceParams = string | number | Record<string, any>;
export type PushBulletCallback = ((error: Error) => void) | ((error?: null, response: any) => void); export type PushBulletCallback =
| ((error: Error) => void)
| ((error?: null, response: any) => void);
export interface ListOptions { export interface ListOptions {
active?: boolean; active?: boolean;
@@ -16,7 +18,11 @@ declare module '@jef/pushbullet' {
export interface PushBulletStream { export interface PushBulletStream {
connect: () => void; connect: () => void;
close: () => void; close: () => void;
on: ((event: 'connect' | 'close' | 'nop', callback: () => void) => void) & ((event: 'error', callback: (error: any) => void) => void) & ((event: 'message', callback: (message: any) => void) => void) & ((event: 'tickle', callback: (tickle: any) => void) => void) & ((event: 'push', callback: (push: any) => void) => void); on: ((event: 'connect' | 'close' | 'nop', callback: () => void) => void) &
((event: 'error', callback: (error: any) => void) => void) &
((event: 'message', callback: (message: any) => void) => void) &
((event: 'tickle', callback: (tickle: any) => void) => void) &
((event: 'push', callback: (push: any) => void) => void);
} }
export class PushBullet { export class PushBullet {
@@ -25,11 +31,31 @@ declare module '@jef/pushbullet' {
devices(options: ListOptions, callback: PushBulletCallback); devices(options: ListOptions, callback: PushBulletCallback);
devices(callback: PushBulletCallback); devices(callback: PushBulletCallback);
createDevice(options: Record<string, any>, callback: PushBulletCallback); createDevice(options: Record<string, any>, callback: PushBulletCallback);
updateDevice(deviceIden: string, deviceOptions: Record<string, any>, callback: PushBulletCallback); updateDevice(
deviceIden: string,
deviceOptions: Record<string, any>,
callback: PushBulletCallback
);
deleteDevice(deviceIden: string, callback: PushBulletCallback); deleteDevice(deviceIden: string, callback: PushBulletCallback);
note(deviceParams: DeviceParams, title: string, body: string, callback: PushBulletCallback); note(
link(deviceParams: DeviceParams, name: string, url: string, body: string, callback: PushBulletCallback); deviceParams: DeviceParams,
file(deviceParams: DeviceParams, filePath: string, message: string, callback: PushBulletCallback); title: string,
body: string,
callback: PushBulletCallback
);
link(
deviceParams: DeviceParams,
name: string,
url: string,
body: string,
callback: PushBulletCallback
);
file(
deviceParams: DeviceParams,
filePath: string,
message: string,
callback: PushBulletCallback
);
dismissPush(pushIden: DeviceParams, callback: PushBulletCallback); dismissPush(pushIden: DeviceParams, callback: PushBulletCallback);
deletePush(pushIden: DeviceParams, callback: PushBulletCallback); deletePush(pushIden: DeviceParams, callback: PushBulletCallback);
deleteAllPushes(callback: PushBulletCallback); deleteAllPushes(callback: PushBulletCallback);
@@ -50,9 +76,15 @@ declare module '@jef/pushbullet' {
unmuteChat(chatIden: string, callback: PushBulletCallback); unmuteChat(chatIden: string, callback: PushBulletCallback);
sendSMS(options: Record<string, any>, callback: PushBulletCallback); sendSMS(options: Record<string, any>, callback: PushBulletCallback);
sendClipboard(options: Record<string, any>, callback: PushBulletCallback); sendClipboard(options: Record<string, any>, callback: PushBulletCallback);
dismissEphemeral(options: Record<string, any>, callback: PushBulletCallback); dismissEphemeral(
options: Record<string, any>,
callback: PushBulletCallback
);
stream(): PushBulletStream; stream(): PushBulletStream;
enableEncryption(encryptionPassword: string, userIden: string): PushBulletStream; enableEncryption(
encryptionPassword: string,
userIden: string
): PushBulletStream;
} }
export default PushBullet; export default PushBullet;
+26 -24
View File
@@ -1,30 +1,32 @@
declare module 'pushover-notifications' { declare module 'pushover-notifications' {
export type PushoverCallback = ((error: Error) => void) | ((error?: null, response: any) => void); export type PushoverCallback =
| ((error: Error) => void)
| ((error?: null, response: any) => void);
export type Sound = export type Sound =
'pushover' | | 'pushover'
'bike' | | 'bike'
'bugle' | | 'bugle'
'cashregister' | | 'cashregister'
'classical' | | 'classical'
'cosmic' | | 'cosmic'
'falling' | | 'falling'
'gamelan' | | 'gamelan'
'incoming' | | 'incoming'
'intermission' | | 'intermission'
'magic' | | 'magic'
'mechanical' | | 'mechanical'
'pianobar' | | 'pianobar'
'siren' | | 'siren'
'spacealarm' | | 'spacealarm'
'tugboat' | | 'tugboat'
'alien' | | 'alien'
'climb' | | 'climb'
'persistent' | | 'persistent'
'echo' | | 'echo'
'updown' | | 'updown'
'vibrate' | | 'vibrate'
'none'; | 'none';
export interface PushoverOptions { export interface PushoverOptions {
token: string; token: string;
+14 -6
View File
@@ -6,16 +6,19 @@ import {logger} from './logger';
export function getSleepTime(store: Store) { export function getSleepTime(store: Store) {
const minSleep = store.minPageSleep as number; const minSleep = store.minPageSleep as number;
return minSleep + (Math.random() * ((store.maxPageSleep as number) - minSleep)); return minSleep + Math.random() * ((store.maxPageSleep as number) - minSleep);
} }
export async function delay(ms: number) { export async function delay(ms: number) {
return new Promise(resolve => { return new Promise((resolve) => {
setTimeout(resolve, ms); setTimeout(resolve, ms);
}); });
} }
export function isStatusCodeInRange(statusCode: number, range: StatusCodeRangeArray) { export function isStatusCodeInRange(
statusCode: number,
range: StatusCodeRangeArray
) {
for (const value of range) { for (const value of range) {
let min: number; let min: number;
let max: number; let max: number;
@@ -37,7 +40,7 @@ export function isStatusCodeInRange(statusCode: number, range: StatusCodeRangeAr
export async function usingResponse<T>( export async function usingResponse<T>(
browser: Browser, browser: Browser,
url: string, url: string,
cb: (response: (Response | null), page: Page, browser: Browser) => Promise<T> cb: (response: Response | null, page: Page, browser: Browser) => Promise<T>
): Promise<T> { ): Promise<T> {
return usingPage(browser, async (page, browser) => { return usingPage(browser, async (page, browser) => {
const response = await page.goto(url, {waitUntil: 'domcontentloaded'}); const response = await page.goto(url, {waitUntil: 'domcontentloaded'});
@@ -46,7 +49,10 @@ export async function usingResponse<T>(
}); });
} }
export async function usingPage<T>(browser: Browser, cb: (page: Page, browser: Browser) => Promise<T>): Promise<T> { export async function usingPage<T>(
browser: Browser,
cb: (page: Page, browser: Browser) => Promise<T>
): Promise<T> {
const page = await browser.newPage(); const page = await browser.newPage();
page.setDefaultNavigationTimeout(config.page.timeout); page.setDefaultNavigationTimeout(config.page.timeout);
await page.setUserAgent(getRandomUserAgent()); await page.setUserAgent(getRandomUserAgent());
@@ -71,5 +77,7 @@ export async function closePage(page: Page) {
} }
export function getRandomUserAgent(): string { export function getRandomUserAgent(): string {
return config.page.userAgents[Math.floor(Math.random() * config.page.userAgents.length)]; return config.page.userAgents[
Math.floor(Math.random() * config.page.userAgents.length)
];
} }
+26 -9
View File
@@ -1,13 +1,19 @@
import {IncomingMessage, Server, ServerResponse, createServer} from 'http'; import {IncomingMessage, Server, ServerResponse, createServer} from 'http';
import {config, setConfig} from '../config'; import {config, setConfig} from '../config';
import {createReadStream, readdir} from 'fs'; import {createReadStream, readdir} from 'fs';
import {getAllBrands, getAllModels, getAllSeries, storeList, updateStores} from '../store/model'; import {
getAllBrands,
getAllModels,
getAllSeries,
storeList,
updateStores
} from '../store/model';
import {join, normalize} from 'path'; import {join, normalize} from 'path';
const approot = join(__dirname, '../../'); const approot = join(__dirname, '../../');
const webroot = join(approot, './web'); const webroot = join(approot, './web');
const contentTypeMap: { [key: string]: string } = { const contentTypeMap: {[key: string]: string} = {
css: 'text/css', css: 'text/css',
htm: 'text/html', htm: 'text/html',
html: 'text/html', html: 'text/html',
@@ -19,20 +25,27 @@ const contentTypeMap: { [key: string]: string } = {
txt: 'text/plain' txt: 'text/plain'
}; };
function sendFile(response: ServerResponse, path: string, relativeTo: string = webroot) { function sendFile(
response: ServerResponse,
path: string,
relativeTo: string = webroot
) {
path = normalize(`./${path}`); path = normalize(`./${path}`);
const fsPath = join(relativeTo, path); const fsPath = join(relativeTo, path);
try { try {
const stream = createReadStream(fsPath); const stream = createReadStream(fsPath);
stream.on('error', error => { stream.on('error', (error) => {
sendError(response, error.message); sendError(response, error.message);
}); });
const pathSplit = path.split('.'); const pathSplit = path.split('.');
const ext = pathSplit[pathSplit.length - 1].toLowerCase(); const ext = pathSplit[pathSplit.length - 1].toLowerCase();
response.setHeader('Content-Type', contentTypeMap[ext] ?? contentTypeMap.txt); response.setHeader(
'Content-Type',
contentTypeMap[ext] ?? contentTypeMap.txt
);
stream.on('end', () => response.end()); stream.on('end', () => response.end());
stream.pipe(response); stream.pipe(response);
@@ -58,7 +71,11 @@ function sendConfig(response: ServerResponse) {
sendJSON(response, config); sendJSON(response, config);
} }
function handleAPI(request: IncomingMessage, response: ServerResponse, urlComponents: string[]) { function handleAPI(
request: IncomingMessage,
response: ServerResponse,
urlComponents: string[]
) {
if (urlComponents.length < 2) { if (urlComponents.length < 2) {
sendError(response, 'No API route specified', 400); sendError(response, 'No API route specified', 400);
return; return;
@@ -68,7 +85,7 @@ function handleAPI(request: IncomingMessage, response: ServerResponse, urlCompon
case 'config': case 'config':
if (request.method === 'PUT') { if (request.method === 'PUT') {
const data: string[] = []; const data: string[] = [];
request.on('data', chunk => { request.on('data', (chunk) => {
data.push(chunk); data.push(chunk);
}); });
request.on('end', () => { request.on('end', () => {
@@ -76,7 +93,7 @@ function handleAPI(request: IncomingMessage, response: ServerResponse, urlCompon
try { try {
setConfig(JSON.parse(data.join(''))); setConfig(JSON.parse(data.join('')));
updateStores(); updateStores();
} catch { } } catch {}
sendConfig(response); sendConfig(response);
}); });
@@ -158,7 +175,7 @@ export async function startAPIServer() {
} }
export async function stopAPIServer() { export async function stopAPIServer() {
return new Promise(resolve => { return new Promise((resolve) => {
if (server) { if (server) {
server.close(resolve); server.close(resolve);
server = undefined; server = undefined;

Some files were not shown because too many files have changed in this diff Show More