mirror of
https://github.com/opelly27/streetmerchant.git
synced 2026-05-20 07:37:39 +00:00
Compare commits
209 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bc2272e59a | |||
| 888b5225b8 | |||
| 0c59d1e232 | |||
| 15ec12b0a3 | |||
| f7b32e8ac5 | |||
| 9bf33eceda | |||
| 14cbd5a05b | |||
| ec0d9f50cb | |||
| 4616f60766 | |||
| 36e38068d8 | |||
| ca5553cb20 | |||
| 34a8fd475a | |||
| 0569629dc8 | |||
| 09f0236086 | |||
| e67d97fe93 | |||
| 75ee95b221 | |||
| 3c727f1c9a | |||
| 80e166c15d | |||
| 3b4fe78e95 | |||
| ac8785d1e9 | |||
| 06f3aafae6 | |||
| f2ae423fa8 | |||
| cbad0846af | |||
| a3a94c19d9 | |||
| 6fd023e81e | |||
| e836acf1e9 | |||
| 5bbdfa2abc | |||
| 1ed0593767 | |||
| cbc43304bf | |||
| feddac76d3 | |||
| 0e8774b1d0 | |||
| 0e5edee683 | |||
| 0b11238370 | |||
| 6de8c4a5ee | |||
| cf70f1ff4f | |||
| a0a961aa5b | |||
| 7d29ef80ba | |||
| e198e44613 | |||
| f7b753334f | |||
| 21e74cfe76 | |||
| ea456116da | |||
| a0a0ca8755 | |||
| c26bd8f06a | |||
| c5799fddc7 | |||
| af96c5f2e8 | |||
| 2fc018bbb2 | |||
| a72a35c755 | |||
| 202698f917 | |||
| d7f242780e | |||
| b2f5c1a3ed | |||
| 29478bff2d | |||
| beb50696fb | |||
| 490d44e1fd | |||
| 65df944973 | |||
| ce43654847 | |||
| e9a39c4092 | |||
| 4bccc6b407 | |||
| 37d62ebcd5 | |||
| af080f376d | |||
| 19eece18dc | |||
| 1774afc1c3 | |||
| 79a3f33150 | |||
| 796c2a52ac | |||
| 0b60d3cf9a | |||
| fb696bf85a | |||
| 0b8e0d498c | |||
| 8ecba2db96 | |||
| eb176d1735 | |||
| bea26450bf | |||
| 8c82705dd3 | |||
| feae978de9 | |||
| 5e6159b994 | |||
| 30a51a38be | |||
| de7036c7cc | |||
| a79ce6f406 | |||
| 0b4966e452 | |||
| be48520469 | |||
| d2efb91de4 | |||
| a519a79ee7 | |||
| 7db79345a0 | |||
| b28bf73157 | |||
| 11b6316371 | |||
| 10ce2db9ae | |||
| 364c6c25df | |||
| a8d9c033b6 | |||
| 7a441b4b65 | |||
| 09238da69c | |||
| 4d8700e856 | |||
| 1ee9d38b32 | |||
| db18157a49 | |||
| 3286d624a1 | |||
| f663579f3d | |||
| 20e8746748 | |||
| d0839beffe | |||
| 07b6b340f9 | |||
| a99eecb461 | |||
| f7f0b08e30 | |||
| efddd01aa9 | |||
| 0857b8a46e | |||
| 67605a6e28 | |||
| 80826ba0bd | |||
| 06214eb4a8 | |||
| a62bd2e587 | |||
| 4df57f578e | |||
| b4f34510d5 | |||
| 429effb544 | |||
| c2defe224a | |||
| e552c9102d | |||
| 292e3603fd | |||
| 85bbaf905e | |||
| 432d38bd5a | |||
| 2d01cfddff | |||
| 53739e05ab | |||
| 9ad9793dc1 | |||
| f6f5c6bfe7 | |||
| 28c965d653 | |||
| 4b689cb94e | |||
| c3f38fb2c9 | |||
| 239b5d3e8a | |||
| 7694829dd6 | |||
| d7921168cb | |||
| 9745190ee4 | |||
| b5435643da | |||
| af631c86f1 | |||
| 5eb36a6cb7 | |||
| 6f273305df | |||
| 6d292a11cd | |||
| 89a762e2f5 | |||
| f9b617dd69 | |||
| 7fea7d58f0 | |||
| f16a9fb331 | |||
| 777c31b420 | |||
| 229daabb34 | |||
| d0ebffd056 | |||
| 3feda151c5 | |||
| d41798ac23 | |||
| eb314afda5 | |||
| f377820894 | |||
| 8933896c5c | |||
| 88a1303f73 | |||
| 167713bb14 | |||
| 7c28c7f72b | |||
| b21b2440f7 | |||
| 63d550ca63 | |||
| 8e1744c6b1 | |||
| 0ed826fb5d | |||
| d47a3e064e | |||
| 501ea34a54 | |||
| b60ad12cf2 | |||
| ef2036b75d | |||
| c38bebb49d | |||
| 02d7c47c40 | |||
| efe0d64f06 | |||
| bd69e471f7 | |||
| bdd74e5b16 | |||
| 32702929a9 | |||
| b4de369ca8 | |||
| ccb207abeb | |||
| 841647c06c | |||
| 23d061b387 | |||
| a5249ecc7c | |||
| 0e730f4203 | |||
| bc8c14c88d | |||
| 5be33d045f | |||
| d19dd5a404 | |||
| b1f1ea6ef0 | |||
| 15e4520213 | |||
| 0904253cc6 | |||
| 318e626e78 | |||
| 0bf9ba2e18 | |||
| 9f28fe5803 | |||
| ab1fddf20c | |||
| ff79d9e70d | |||
| 050fd9faf6 | |||
| 0128718ba7 | |||
| 037056156e | |||
| d9692c7bbd | |||
| 0754feccae | |||
| e8fd2f7c5b | |||
| 314f533f0b | |||
| 4e086e9267 | |||
| dde9837829 | |||
| 25700567c5 | |||
| c02241c752 | |||
| 38937f6880 | |||
| 0362bf8081 | |||
| 815822f6f8 | |||
| f9a6fd025a | |||
| 2291b8eff5 | |||
| 8a459056c5 | |||
| 9320918335 | |||
| 0d14500d5d | |||
| 42ef7cfdce | |||
| 0a680e977b | |||
| 19fd6895e7 | |||
| e3fcc70bb3 | |||
| 71d5cb4261 | |||
| deb17d109f | |||
| 760ddf5d85 | |||
| 5db83484f3 | |||
| 85208c4452 | |||
| df3b10b9a5 | |||
| c8a9b0ba3e | |||
| 2955ea70ab | |||
| 7ec2894147 | |||
| 6924f362ba | |||
| 31a3d8f7e0 | |||
| a293f5e747 | |||
| 2d3ea40a59 |
+94
-69
@@ -2,72 +2,97 @@
|
||||
# Read https://github.com/jef/streetmerchant#customization for help on customizing this file
|
||||
#############################################################################################
|
||||
|
||||
BROWSER_TRUSTED=
|
||||
COUNTRY=
|
||||
DESKTOP_NOTIFICATIONS=
|
||||
DISCORD_NOTIFY_GROUP=
|
||||
DISCORD_WEB_HOOK=
|
||||
EMAIL_PASSWORD=
|
||||
EMAIL_TO=
|
||||
EMAIL_USERNAME=
|
||||
HEADLESS=
|
||||
IN_STOCK_WAIT_TIME=
|
||||
LOG_LEVEL=
|
||||
LOW_BANDWIDTH=
|
||||
MAX_PRICE_SERIES_3070=
|
||||
MAX_PRICE_SERIES_3080=
|
||||
MAX_PRICE_SERIES_3090=
|
||||
MICROCENTER_LOCATION=
|
||||
MQTT_BROKER_ADDRESS=
|
||||
MQTT_BROKER_PORT=
|
||||
MQTT_CLIENT_ID=
|
||||
MQTT_PASSWORD=
|
||||
MQTT_QOS=
|
||||
MQTT_TOPIC=
|
||||
MQTT_USERNAME=
|
||||
NVIDIA_ADD_TO_CART_ATTEMPTS=
|
||||
NVIDIA_SESSION_TTL=
|
||||
OPEN_BROWSER=
|
||||
PAGE_BACKOFF_MIN=
|
||||
PAGE_BACKOFF_MAX=
|
||||
PAGE_SLEEP_MIN=
|
||||
PAGE_SLEEP_MAX=
|
||||
PAGE_TIMEOUT=
|
||||
PAGERDUTY_INTEGRATION_KEY=
|
||||
PAGERDUTY_SEVERITY=
|
||||
PHONE_CARRIER=
|
||||
PHONE_NUMBER=
|
||||
PLAY_SOUND=
|
||||
PROXY_ADDRESS=
|
||||
PROXY_PORT=
|
||||
PUSHBULLET=
|
||||
PUSHOVER_TOKEN=
|
||||
PUSHOVER_USER=
|
||||
PUSHOVER_PRIORITY=
|
||||
SCREENSHOT=
|
||||
SHOW_ONLY_BRANDS=
|
||||
SHOW_ONLY_MODELS=
|
||||
SHOW_ONLY_SERIES=
|
||||
SLACK_CHANNEL=
|
||||
SLACK_TOKEN=
|
||||
SMTP_ADDRESS=
|
||||
SMTP_PORT=
|
||||
STORES=
|
||||
TELEGRAM_ACCESS_TOKEN=
|
||||
TELEGRAM_CHAT_ID=
|
||||
TWILIO_ACCOUNT_SID=
|
||||
TWILIO_AUTH_TOKEN=
|
||||
TWILIO_FROM_NUMBER=
|
||||
TWILIO_TO_NUMBER=
|
||||
TWITCH_ACCESS_TOKEN=
|
||||
TWITCH_CHANNEL=
|
||||
TWITCH_CLIENT_ID=
|
||||
TWITCH_CLIENT_SECRET=
|
||||
TWITCH_REFRESH_TOKEN=
|
||||
TWITTER_ACCESS_TOKEN_KEY=
|
||||
TWITTER_ACCESS_TOKEN_SECRET=
|
||||
TWITTER_CONSUMER_KEY=
|
||||
TWITTER_CONSUMER_SECRET=
|
||||
TWITTER_TWEET_TAGS=
|
||||
USER_AGENT=
|
||||
WEB_PORT=
|
||||
ASCII_BANNER=""
|
||||
ASCII_COLOR=""
|
||||
AUTO_ADD_TO_CART=""
|
||||
BROWSER_TRUSTED=""
|
||||
COUNTRY=""
|
||||
DESKTOP_NOTIFICATIONS=""
|
||||
DISCORD_NOTIFY_GROUP=""
|
||||
DISCORD_WEB_HOOK=""
|
||||
EMAIL_PASSWORD=""
|
||||
EMAIL_TO=""
|
||||
EMAIL_USERNAME=""
|
||||
HEADLESS=""
|
||||
IN_STOCK_WAIT_TIME=""
|
||||
LOG_LEVEL=""
|
||||
LOW_BANDWIDTH=""
|
||||
MAX_PRICE_SERIES_3060TI=""
|
||||
MAX_PRICE_SERIES_3070=""
|
||||
MAX_PRICE_SERIES_3080=""
|
||||
MAX_PRICE_SERIES_3090=""
|
||||
MAX_PRICE_SERIES_CORSAIR_SF=""
|
||||
MAX_PRICE_SERIES_RX6800=""
|
||||
MAX_PRICE_SERIES_RX6800XT=""
|
||||
MAX_PRICE_SERIES_RX6900XT=""
|
||||
MAX_PRICE_SERIES_RYZEN5600=""
|
||||
MAX_PRICE_SERIES_RYZEN5800=""
|
||||
MAX_PRICE_SERIES_RYZEN5900=""
|
||||
MAX_PRICE_SERIES_RYZEN5950=""
|
||||
MAX_PRICE_SERIES_SONYPS5C=""
|
||||
MAX_PRICE_SERIES_SONYPS5DE=""
|
||||
MAX_PRICE_SERIES_TEST=""
|
||||
MICROCENTER_LOCATION=""
|
||||
MQTT_BROKER_ADDRESS=""
|
||||
MQTT_BROKER_PORT=""
|
||||
MQTT_CLIENT_ID=""
|
||||
MQTT_PASSWORD=""
|
||||
MQTT_QOS=""
|
||||
MQTT_TOPIC=""
|
||||
MQTT_USERNAME=""
|
||||
NVIDIA_ADD_TO_CART_ATTEMPTS=""
|
||||
NVIDIA_SESSION_TTL=""
|
||||
OPEN_BROWSER=""
|
||||
PAGE_BACKOFF_MIN=""
|
||||
PAGE_BACKOFF_MAX=""
|
||||
PAGE_SLEEP_MIN=""
|
||||
PAGE_SLEEP_MAX=""
|
||||
PAGE_TIMEOUT=""
|
||||
PAGERDUTY_INTEGRATION_KEY=""
|
||||
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_NUMBER=""
|
||||
PLAY_SOUND=""
|
||||
PROXY_ADDRESS=""
|
||||
PROXY_PROTOCOL=""
|
||||
PROXY_PORT=""
|
||||
PUSHBULLET=""
|
||||
PUSHOVER_TOKEN=""
|
||||
PUSHOVER_USER=""
|
||||
PUSHOVER_PRIORITY=""
|
||||
SCREENSHOT=""
|
||||
SHOW_ONLY_BRANDS=""
|
||||
SHOW_ONLY_MODELS=""
|
||||
SHOW_ONLY_SERIES=""
|
||||
SLACK_CHANNEL=""
|
||||
SLACK_TOKEN=""
|
||||
SMTP_ADDRESS=""
|
||||
SMTP_PORT=""
|
||||
STORES=""
|
||||
TELEGRAM_ACCESS_TOKEN=""
|
||||
TELEGRAM_CHAT_ID=""
|
||||
TWILIO_ACCOUNT_SID=""
|
||||
TWILIO_AUTH_TOKEN=""
|
||||
TWILIO_FROM_NUMBER=""
|
||||
TWILIO_TO_NUMBER=""
|
||||
TWITCH_ACCESS_TOKEN=""
|
||||
TWITCH_CHANNEL=""
|
||||
TWITCH_CLIENT_ID=""
|
||||
TWITCH_CLIENT_SECRET=""
|
||||
TWITCH_REFRESH_TOKEN=""
|
||||
TWITTER_ACCESS_TOKEN_KEY=""
|
||||
TWITTER_ACCESS_TOKEN_SECRET=""
|
||||
TWITTER_CONSUMER_KEY=""
|
||||
TWITTER_CONSUMER_SECRET=""
|
||||
TWITTER_TWEET_TAGS=""
|
||||
USER_AGENT=""
|
||||
WEB_PORT=""
|
||||
|
||||
@@ -7,12 +7,35 @@ assignees: jef
|
||||
|
||||
---
|
||||
|
||||
### Description
|
||||
<!--- Feel free to join our discord server (https://discord.gg/gbVY4vB9JF) for general support --->
|
||||
<!--- If this acts as a feature request please ask yourself if this modification is something the whole userbase will benefit from --->
|
||||
|
||||
<!-- Describe the bug here. -->
|
||||
<!-- Please be as detailed as possible. -->
|
||||
<!-- Include OS, screenshots and console outputs. -->
|
||||
## Expected Behavior
|
||||
|
||||
### Possible solution
|
||||
<!--- Tell us what should happen -->
|
||||
|
||||
<!-- Describe the possible solution here. -->
|
||||
## Current Behavior
|
||||
|
||||
<!--- Tell us what happens instead of the expected behavior -->
|
||||
|
||||
## Steps to Reproduce
|
||||
|
||||
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
|
||||
<!--- reproduce this bug. Include code to reproduce, if relevant -->
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
4.
|
||||
|
||||
## Environment
|
||||
|
||||
**OS:**
|
||||
**.env file:**
|
||||
|
||||
```dotenv
|
||||
|
||||
```
|
||||
|
||||
## Logs
|
||||
|
||||
<!--- Provide a brief log -->
|
||||
|
||||
@@ -7,10 +7,10 @@ assignees: jef
|
||||
|
||||
---
|
||||
|
||||
### Description
|
||||
## Description
|
||||
|
||||
<!-- Describe the feature here. -->
|
||||
<!-- Describe the feature here -->
|
||||
|
||||
### Possible solution
|
||||
## Possible solution
|
||||
|
||||
<!-- Describe the possible solution here. -->
|
||||
<!-- Describe the possible solution here -->
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
---
|
||||
name: 🤔 Question
|
||||
about: Open to all questions
|
||||
title: ''
|
||||
labels: 'type: question'
|
||||
assignees: jef
|
||||
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
<!-- Describe the question here -->
|
||||
@@ -4,17 +4,11 @@ updates:
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "dependencies"
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "dependencies"
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "dependencies"
|
||||
|
||||
@@ -3,14 +3,12 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
jobs:
|
||||
cd:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: GoogleCloudPlatform/release-please-action@v2.5.7
|
||||
- uses: GoogleCloudPlatform/release-please-action@v2.10
|
||||
id: release
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -18,15 +16,6 @@ jobs:
|
||||
package-name: streetmerchant
|
||||
- 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
|
||||
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
|
||||
if: ${{ steps.release.outputs.release_created }}
|
||||
run: |
|
||||
@@ -35,6 +24,6 @@ jobs:
|
||||
-t "ghcr.io/${GITHUB_REPOSITORY}:latest" .
|
||||
env:
|
||||
TAG_NAME: ${{ steps.release.outputs.tag_name }}
|
||||
- name: publish latest
|
||||
- name: publish latest image
|
||||
if: ${{ steps.release.outputs.release_created }}
|
||||
run: docker push "ghcr.io/${GITHUB_REPOSITORY}"
|
||||
|
||||
@@ -3,16 +3,14 @@ on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
jobs:
|
||||
build-lint:
|
||||
build-and-lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2.1.2
|
||||
with:
|
||||
node-version: 14
|
||||
node-version: 14.15.0
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.npm
|
||||
@@ -29,12 +27,13 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: dorny/paths-filter@v2.5.1
|
||||
- uses: dorny/paths-filter@v2.6.0
|
||||
id: filter
|
||||
with:
|
||||
filters: |
|
||||
docker:
|
||||
build:
|
||||
- 'Dockerfile'
|
||||
- 'package*.json'
|
||||
- name: Build image
|
||||
if: steps.filter.outputs.docker == 'true'
|
||||
if: steps.filter.outputs.build == 'true'
|
||||
run: docker build .
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
name: nightly
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- 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 image
|
||||
run: docker push "ghcr.io/${GITHUB_REPOSITORY}"
|
||||
@@ -10,6 +10,6 @@ jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: amannn/action-semantic-pull-request@v2.1.0
|
||||
- uses: amannn/action-semantic-pull-request@v2.1.1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
name: 'Close stale issues'
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v3
|
||||
with:
|
||||
close-issue-message: ${{ env.CLOSE_MESSAGE }}
|
||||
close-pr-message: ${{ env.CLOSE_MESSAGE }}
|
||||
days-before-stale: 30
|
||||
days-before-close: 5
|
||||
exempt-issue-labels: ${{ env.EXEMPT_LABEL }}
|
||||
exempt-pr-labels: ${{ env.EXEMPT_LABEL }}
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
stale-issue-label: ${{ env.STALE_LABEL }}
|
||||
stale-pr-label: ${{ env.STALE_LABEL }}
|
||||
stale-issue-message: ${{ env.STALE_MESSAGE }}
|
||||
stale-pr-message: ${{ env.STALE_MESSAGE }}
|
||||
env:
|
||||
CLOSE_MESSAGE: 'This issue has been closed because it is stale. Reopen if necessary.'
|
||||
EXEMPT_LABEL: 'status: needs discussion'
|
||||
STALE_LABEL: 'status: stale'
|
||||
STALE_MESSAGE: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days'
|
||||
+1
-1
@@ -1 +1 @@
|
||||
15.0.1
|
||||
14.15.0
|
||||
|
||||
+133
@@ -1,5 +1,138 @@
|
||||
# Changelog
|
||||
|
||||
## [3.2.0](https://www.github.com/jef/streetmerchant/compare/v3.1.0...v3.2.0) (2020-12-06)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **bestbuy:** add 3060 series ([#1074](https://www.github.com/jef/streetmerchant/issues/1074)) ([e9a39c4](https://www.github.com/jef/streetmerchant/commit/e9a39c40925736a2126f6138c369710989904d1d))
|
||||
* **bestbuy-ca:** add 3060ti cards ([29478bf](https://www.github.com/jef/streetmerchant/commit/29478bff2d27d780cc6142526f3970b4a87290bc))
|
||||
* **notification:** add price to links ([#1209](https://www.github.com/jef/streetmerchant/issues/1209)) ([15ec12b](https://www.github.com/jef/streetmerchant/commit/15ec12b0a3a95716243bfd06f6d41959bff7c36e)), closes [#1188](https://www.github.com/jef/streetmerchant/issues/1188) [#673](https://www.github.com/jef/streetmerchant/issues/673) [#1187](https://www.github.com/jef/streetmerchant/issues/1187)
|
||||
* **proxy:** socks5 support ([#933](https://www.github.com/jef/streetmerchant/issues/933)) ([364c6c2](https://www.github.com/jef/streetmerchant/commit/364c6c25dfe9dcbeb29cb20cb46e9e8dcc2fe86b))
|
||||
* **store:** add 3060ti to newegg-ca, canadacomputer, memoryexpress ([#1172](https://www.github.com/jef/streetmerchant/issues/1172)) ([09f0236](https://www.github.com/jef/streetmerchant/commit/09f0236086c59b25ebe611041bf063d536e3cc3d))
|
||||
* **store:** add amazon-de-warehouse ([#1102](https://www.github.com/jef/streetmerchant/issues/1102)) ([6de8c4a](https://www.github.com/jef/streetmerchant/commit/6de8c4a5eec8d66fb47d87e309866ba18f3e28c7))
|
||||
* **store:** add antonline store ([#1042](https://www.github.com/jef/streetmerchant/issues/1042)) ([19eece1](https://www.github.com/jef/streetmerchant/commit/19eece18dccd4489e1e441b92061fc3b5743e4cd))
|
||||
* **store:** add argos with ps5 ([b2f5c1a](https://www.github.com/jef/streetmerchant/commit/b2f5c1a3ed93cfd56e575ec634d235565a17b6bc))
|
||||
* **store:** add awd(uk), add 3060ti link builders ([#1114](https://www.github.com/jef/streetmerchant/issues/1114)) ([36e3806](https://www.github.com/jef/streetmerchant/commit/36e38068d8cd284c741d4906d5ba5fe8cff85d24))
|
||||
* **store:** add custom labels for links ([#1183](https://www.github.com/jef/streetmerchant/issues/1183)) ([f7b32e8](https://www.github.com/jef/streetmerchant/commit/f7b32e8ac56c29207c6b30b9168c34c021a5e227)), closes [#1132](https://www.github.com/jef/streetmerchant/issues/1132) [#1163](https://www.github.com/jef/streetmerchant/issues/1163)
|
||||
* **store:** add el corte ingles ([#1107](https://www.github.com/jef/streetmerchant/issues/1107)) ([75ee95b](https://www.github.com/jef/streetmerchant/commit/75ee95b2217fb4bf667869011a009210ff8c22e7))
|
||||
* **store:** add ePrice store ([#1016](https://www.github.com/jef/streetmerchant/issues/1016)) ([30a51a3](https://www.github.com/jef/streetmerchant/commit/30a51a38bee1c399276466e5db457bbe702edd5c))
|
||||
* **store:** add Euronics DE ([#1045](https://www.github.com/jef/streetmerchant/issues/1045)) ([1774afc](https://www.github.com/jef/streetmerchant/commit/1774afc1c3010bd0b183907baa4f3486dc9e8c23))
|
||||
* **store:** add expert ([#1105](https://www.github.com/jef/streetmerchant/issues/1105)) ([202698f](https://www.github.com/jef/streetmerchant/commit/202698f9179b081bd4214979f054e5ff7c805621))
|
||||
* **store:** add Gamestop DE ([#1046](https://www.github.com/jef/streetmerchant/issues/1046)) ([79a3f33](https://www.github.com/jef/streetmerchant/commit/79a3f33150188c7ff0228a38f276ae1fe88b9714))
|
||||
* **store:** add Medimax ([#1057](https://www.github.com/jef/streetmerchant/issues/1057)) ([7d29ef8](https://www.github.com/jef/streetmerchant/commit/7d29ef80ba1ae6682b486ac0b65a516b15a19f93))
|
||||
* **store:** add Otto ([#1096](https://www.github.com/jef/streetmerchant/issues/1096)) ([af96c5f](https://www.github.com/jef/streetmerchant/commit/af96c5f2e808af7496f3c3299e4cf173105de48b))
|
||||
* **store:** add smythstoys ([1ed0593](https://www.github.com/jef/streetmerchant/commit/1ed05937676c3b6961fcbbb1f3aa80afc3411ac3))
|
||||
* **store:** add some italian stores with ps5 links ([#976](https://www.github.com/jef/streetmerchant/issues/976)) ([f663579](https://www.github.com/jef/streetmerchant/commit/f663579f3d744a5270878975407ad30b31ee0c0a))
|
||||
* **store:** add spielegrotte ([#1056](https://www.github.com/jef/streetmerchant/issues/1056)) ([cf70f1f](https://www.github.com/jef/streetmerchant/commit/cf70f1ff4f942922bfa52adcd5b905e0b39c812a))
|
||||
* **store:** add wipoid store ([#1018](https://www.github.com/jef/streetmerchant/issues/1018)) ([feae978](https://www.github.com/jef/streetmerchant/commit/feae978de9e90b96f542d2e53807144d82e380a4))
|
||||
* **store:** update the italian store links ([#1002](https://www.github.com/jef/streetmerchant/issues/1002)) ([de7036c](https://www.github.com/jef/streetmerchant/commit/de7036c7cc6dd7e436ad1d31b988d9d56ad31f76))
|
||||
* **topachat:** add `maxPrice` ([d7f2427](https://www.github.com/jef/streetmerchant/commit/d7f242780ef1a0a06d5b65ccfc0999e36a87d49d)), closes [#1097](https://www.github.com/jef/streetmerchant/issues/1097)
|
||||
* add proxy rotation (settable per store) ([#1026](https://www.github.com/jef/streetmerchant/issues/1026)) ([490d44e](https://www.github.com/jef/streetmerchant/commit/490d44e1fdfdf91db7344dd3050ba8fd8d069631))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **amazon:** price and cart buttons ([6fd023e](https://www.github.com/jef/streetmerchant/commit/6fd023e81e0c54e8fb53b45817b63cb49b8a37ce)), closes [#1125](https://www.github.com/jef/streetmerchant/issues/1125)
|
||||
* **amazon-de:** `inStock` selector ([14cbd5a](https://www.github.com/jef/streetmerchant/commit/14cbd5a05b6f9c3a3ebbc5978156ff2b090efd32)), closes [#1178](https://www.github.com/jef/streetmerchant/issues/1178)
|
||||
* **amazon-de:** remove xbox cart links ([cbc4330](https://www.github.com/jef/streetmerchant/commit/cbc43304bf49863000f422fbff4ed200ea610914)), closes [#1095](https://www.github.com/jef/streetmerchant/issues/1095)
|
||||
* **bestbuy-ca:** model always indicating in stock ([#1145](https://www.github.com/jef/streetmerchant/issues/1145)) ([06f3aaf](https://www.github.com/jef/streetmerchant/commit/06f3aafae6ec460c6227a92e6105639be71fc9b3))
|
||||
* **bestbuy-ca:** replace old evga xc3 ultra ([#1058](https://www.github.com/jef/streetmerchant/issues/1058)) ([65df944](https://www.github.com/jef/streetmerchant/commit/65df9449730bce2acb82f5edac25a91bdddd94db))
|
||||
* **canadacomputers:** add `inStock` selector, use english links ([#889](https://www.github.com/jef/streetmerchant/issues/889)) ([06214eb](https://www.github.com/jef/streetmerchant/commit/06214eb4a8a5c2d8a180e8dcf846f828d5cce2ed))
|
||||
* **memoryexpress:** add backorder to `outOfStock` selector ([#890](https://www.github.com/jef/streetmerchant/issues/890)) ([67605a6](https://www.github.com/jef/streetmerchant/commit/67605a6e280af35f210c536bc03571a84ea1a7e9))
|
||||
* **newegg:** maxPrice selector using used price ([feddac7](https://www.github.com/jef/streetmerchant/commit/feddac76d3824e947b0a96524cd940e6b45ffe70)), closes [#1052](https://www.github.com/jef/streetmerchant/issues/1052)
|
||||
* **newegg:** typo in 5800x url([#903](https://www.github.com/jef/streetmerchant/issues/903)) ([a99eecb](https://www.github.com/jef/streetmerchant/commit/a99eecb4613bc136e65afe4e5e8788316beae39e))
|
||||
* **scan:** links builder ([#1161](https://www.github.com/jef/streetmerchant/issues/1161)) ([ca5553c](https://www.github.com/jef/streetmerchant/commit/ca5553cb2044c00857412a2af009e5e7f2c1aabf))
|
||||
* **smythstoys:** add out of stock label ([5bbdfa2](https://www.github.com/jef/streetmerchant/commit/5bbdfa2abc23c2e1fb1c606227754a1701cab194))
|
||||
* **store:** add backoffStatusCodes and new captcha container ([#1110](https://www.github.com/jef/streetmerchant/issues/1110)) ([0b11238](https://www.github.com/jef/streetmerchant/commit/0b11238370040e9cd31e793e9a782ad384c22abf))
|
||||
* **store:** removes unnecessary newegg links from bestbuy ([#1126](https://www.github.com/jef/streetmerchant/issues/1126)) ([f2ae423](https://www.github.com/jef/streetmerchant/commit/f2ae423fa83d1671a98b9cf3733e587d33727a59)), closes [#1119](https://www.github.com/jef/streetmerchant/issues/1119)
|
||||
* **store:** update euroFormat for expert and otto ([#1108](https://www.github.com/jef/streetmerchant/issues/1108)) ([e198e44](https://www.github.com/jef/streetmerchant/commit/e198e44613cda27c0e67dc7e42ca514e66e9cf48))
|
||||
* **walmart:** instock container and add test:series ([21e74cf](https://www.github.com/jef/streetmerchant/commit/21e74cfe76a5ccf82247315c9951a25e44bb1ce5)), closes [#1106](https://www.github.com/jef/streetmerchant/issues/1106)
|
||||
* related products being picked up on scan ([#954](https://www.github.com/jef/streetmerchant/issues/954)) ([db18157](https://www.github.com/jef/streetmerchant/commit/db18157a490b9c9672c32de3372bff0b472a48f3))
|
||||
|
||||
## [3.1.0](https://www.github.com/jef/streetmerchant/compare/v3.0.0...v3.1.0) (2020-11-22)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **asus:** add backoff codes ([#790](https://www.github.com/jef/streetmerchant/issues/790)) ([501ea34](https://www.github.com/jef/streetmerchant/commit/501ea34a54e877600050d5a99fd3b71ec799e96a))
|
||||
* **canadacomputers:** add ryzen 5000 series ([#842](https://www.github.com/jef/streetmerchant/issues/842)) ([6f27330](https://www.github.com/jef/streetmerchant/commit/6f273305df69ac7b420b5446b4c6824866821a7e))
|
||||
* **coolmod:** add `maxPrice` ([#862](https://www.github.com/jef/streetmerchant/issues/862)) ([4b689cb](https://www.github.com/jef/streetmerchant/commit/4b689cb94e99b83c8829c11d1bfe4cd6db9fbd7a))
|
||||
* **newegg-ca:** add big navi links ([#843](https://www.github.com/jef/streetmerchant/issues/843)) ([6d292a1](https://www.github.com/jef/streetmerchant/commit/6d292a11cd53bd3893d4a0ff5d13eb2ce3319faa))
|
||||
* **notification:** add product link to email and telegram ([#816](https://www.github.com/jef/streetmerchant/issues/816)) ([777c31b](https://www.github.com/jef/streetmerchant/commit/777c31b420a38cab860d98bc6bd8b7ba990c55e7))
|
||||
* **playstation:** add `outOfStock` label ([#812](https://www.github.com/jef/streetmerchant/issues/812)) ([eb314af](https://www.github.com/jef/streetmerchant/commit/eb314afda557369dd27266429ac991c47ecc6375))
|
||||
* **store:** add `PlayStation` store ([#806](https://www.github.com/jef/streetmerchant/issues/806)) ([7c28c7f](https://www.github.com/jef/streetmerchant/commit/7c28c7f72b171ce914aba770d88e8b1213c41233))
|
||||
* **store:** add 3070 models to pccomponentes & coolmod ([#820](https://www.github.com/jef/streetmerchant/issues/820)) ([d0ebffd](https://www.github.com/jef/streetmerchant/commit/d0ebffd056dc166e3557ccf694379bf8c10148b5))
|
||||
* **store:** add amd rx 6000 series model ([#832](https://www.github.com/jef/streetmerchant/issues/832)) ([89a762e](https://www.github.com/jef/streetmerchant/commit/89a762e2f5cd2ebd56c2586b1ebead4171b67153))
|
||||
* **store:** add captcha check to saturn and mediamarkt ([#876](https://www.github.com/jef/streetmerchant/issues/876)) ([2d01cfd](https://www.github.com/jef/streetmerchant/commit/2d01cfddff557f112c6d53473dad25eb299f2fc0))
|
||||
* **store:** add corsair sfx PSUs ([#881](https://www.github.com/jef/streetmerchant/issues/881)) ([e552c91](https://www.github.com/jef/streetmerchant/commit/e552c9102dd9801dcfc35652f2aaa0b1eea18ebb))
|
||||
* **store:** add topachat ([#776](https://www.github.com/jef/streetmerchant/issues/776)) ([c38bebb](https://www.github.com/jef/streetmerchant/commit/c38bebb49dbe8243d0e3f1205150a33f9ce745aa))
|
||||
* **store:** add vsgamers ([#767](https://www.github.com/jef/streetmerchant/issues/767)) ([53739e0](https://www.github.com/jef/streetmerchant/commit/53739e05abf50bbaddb8079087339c9f353096c8))
|
||||
* add amazon-fr to stores. ([#766](https://www.github.com/jef/streetmerchant/issues/766)) ([02d7c47](https://www.github.com/jef/streetmerchant/commit/02d7c47c4093ad71dfab31f93a9b1390f4cad8a0))
|
||||
* **store:** support for canadacomputers ([#772](https://www.github.com/jef/streetmerchant/issues/772)) ([bd69e47](https://www.github.com/jef/streetmerchant/commit/bd69e471f7b47e7faf1d9858992d4157145518aa))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **amazon:** add 5800x and 5600x ([#802](https://www.github.com/jef/streetmerchant/issues/802)) ([167713b](https://www.github.com/jef/streetmerchant/commit/167713bb14080e5e1d2f77c7ee933918b6fd5cfc))
|
||||
* **bestbuy-ca:** use proper selector ([#801](https://www.github.com/jef/streetmerchant/issues/801)) ([63d550c](https://www.github.com/jef/streetmerchant/commit/63d550ca63b9bfd534f37b7747a1fae057abedb4))
|
||||
* **config:** correcting newline split for multiple user agents ([#824](https://www.github.com/jef/streetmerchant/issues/824)) ([f16a9fb](https://www.github.com/jef/streetmerchant/commit/f16a9fb331fd38590325f399bde369ffa17dbe10))
|
||||
* **store:** generate links only for selected stores ([292e360](https://www.github.com/jef/streetmerchant/commit/292e3603fd527a4454639c9abb73bd80a8a95fae)), closes [#694](https://www.github.com/jef/streetmerchant/issues/694)
|
||||
|
||||
|
||||
### Reverts
|
||||
|
||||
* correcting newline split for multiple user agents ([af631c8](https://www.github.com/jef/streetmerchant/commit/af631c86f1a74d810cabf2d0de1b7bb31d350095)), closes [#824](https://www.github.com/jef/streetmerchant/issues/824)
|
||||
* pipeline changes ([efe0d64](https://www.github.com/jef/streetmerchant/commit/efe0d64f060e812fd9846073a13837a3f2a27862))
|
||||
|
||||
## [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)
|
||||
|
||||
|
||||
|
||||
@@ -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
@@ -1,5 +1,6 @@
|
||||
# Build the source code
|
||||
FROM node:15.0.1-alpine3.12 AS builder
|
||||
FROM node:14.15.0-alpine3.12 AS builder
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/jef/streetmerchant"
|
||||
|
||||
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
||||
|
||||
@@ -14,7 +15,7 @@ COPY src/ src/
|
||||
RUN npm run build
|
||||
RUN npm prune --production
|
||||
|
||||
FROM node:15.0.1-alpine3.12
|
||||
FROM node:14.15.0-alpine3.12
|
||||
|
||||
RUN apk add --no-cache chromium
|
||||
|
||||
@@ -32,6 +33,9 @@ WORKDIR /app
|
||||
|
||||
COPY --from=builder /build/node_modules/ node_modules/
|
||||
COPY --from=builder /build/build/ build/
|
||||
COPY web/ web/
|
||||
COPY package.json package.json
|
||||
COPY version.txt version.txt
|
||||
|
||||
CMD [ "node", "./build/index.js" ]
|
||||
ENTRYPOINT ["npm", "run"]
|
||||
CMD ["start:production"]
|
||||
|
||||
@@ -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>
|
||||
<h1 align="center">streetmerchant</h1>
|
||||
<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>
|
||||
<p align="center">The world's easiest, most powerful stock checker
|
||||
<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>
|
||||
@@ -9,8 +8,7 @@
|
||||
<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/wiki">Wiki</a>
|
||||
<br/><br/>
|
||||
<a href="https://github.com/jef/streetmerchant#"><img src="https://raw.githubusercontent.com/jef/streetmerchant/main/media/terminal.gif" /></a>
|
||||
</p>
|
||||
|
||||
## Features
|
||||
|
||||
@@ -30,9 +28,16 @@ getting `streetmerchant` running!
|
||||
|
||||
### Installation: native
|
||||
|
||||
- [Node.js 15](https://nodejs.org/en/)
|
||||
| Reference | Note |
|
||||
|:---:|---|
|
||||
| tag | Example, `v1.0.0`; stable |
|
||||
| `main` | Latest HEAD; not tagged, could be unstable |
|
||||
|
||||
- [Node.js 14](https://nodejs.org/en/)
|
||||
- [git](https://git-scm.com/)
|
||||
- Clone this project `git clone https://github.com/jef/streetmerchant.git`
|
||||
- To checkout a particular ref, use `git checkout <ref name>` after cloning
|
||||
- Navigate to this project by entering `cd streetmerchant`
|
||||
- Run `npm install`
|
||||
- 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/)
|
||||
@@ -49,10 +54,20 @@ Available via GitHub Container Registry.
|
||||
|
||||
| Tag | Note |
|
||||
|:---:|---|
|
||||
| `latest` | Latest stable build |
|
||||
| `nightly` | Latest HEAD build, could be unstable |
|
||||
| `latest` | Latest release; stable |
|
||||
| `nightly` | Latest HEAD each day at midnight UTC; 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
|
||||
|
||||
@@ -71,6 +86,7 @@ environment variables are **optional**._
|
||||
|
||||
| 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` |
|
||||
| `HEADLESS` | Puppeteer to run headless or not | Debugging related, default: `true` |
|
||||
| `INCOGNITO` | Puppeteer to run incognito or not | Debugging related, default: `false` |
|
||||
@@ -83,6 +99,7 @@ environment variables are **optional**._
|
||||
| `PAGE_SLEEP_MIN` | Minimum sleep time between queries of the same product page | In milliseconds, default: `5000` |
|
||||
| `PAGE_SLEEP_MAX` | Maximum sleep time between queries of the same product page | In milliseconds, default: `10000` |
|
||||
| `PAGE_TIMEOUT` | Navigation Timeout in milliseconds | `0` for infinite, default: `30000` |
|
||||
| `PROXY_PROTOCOL` | protocol of proxy server, such as `socks5` | default: `http` |
|
||||
| `PROXY_ADDRESS` | IP Address or fqdn of proxy server |
|
||||
| `PROXY_PORT` | TCP Port number on which the proxy is listening for connections | Default: `80` |
|
||||
| `SCREENSHOT` | Capture screenshot of page if a card is found | Default: `true` |
|
||||
@@ -97,16 +114,25 @@ environment variables are **optional**._
|
||||
|
||||
| Environment variable | Description | Notes |
|
||||
|:---:|---|---|
|
||||
| `COUNTRY` | [Supported country](#supported-countries) you want to be scraped | Currently only used by Nvidia, default: `usa` |
|
||||
| `COUNTRY` | [Supported country](#supported-countries) you want to be scraped | Only used with `nvidia-api`, default: `usa` |
|
||||
| `MAX_PRICE_SERIES_3060TI` | Maximum price allowed for a match, applies 3060 Ti 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_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_CORSAIR_SF` | Maximum price allowed for a match, applies to Corsair PSUs | 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` - PSUs 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. |
|
||||
| `MAX_PRICE_SERIES_SONYPS5C` | Maximum price allowed for a match, applies PS5 console | 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` - PS5 above `1234` will be skipped. |
|
||||
| `MAX_PRICE_SERIES_SONYPS5DE` | Maximum price allowed for a match, applies PS5 digital edition | 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` - PS5 above `1234` will be skipped. |
|
||||
| `MAX_PRICE_SERIES_TEST` | Maximum price allowed for a match, applies `test:series` | 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` - PS5 above `1234` will be skipped. |
|
||||
| `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_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_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` |
|
||||
|
||||
<details>
|
||||
@@ -122,10 +148,20 @@ environment variables are **optional**._
|
||||
| Amazon | `amazon`|
|
||||
| Amazon (CA) | `amazon-ca`|
|
||||
| Amazon (DE) | `amazon-de`|
|
||||
| Amazon (DE) Warehouse | `amazon-de-warehouse`|
|
||||
| Amazon (ES) | `amazon-es`|
|
||||
| Amazon (FR) | `amazon-fr`|
|
||||
| Amazon (IT) | `amazon-it`|
|
||||
| Amazon (NL) | `amazon-nl`|
|
||||
| Amazon (UK) | `amazon-uk`|
|
||||
| AMD | `amd`|
|
||||
| AMD (CA) | `amd-ca`|
|
||||
| AMD (DE) | `amd-de`|
|
||||
| AMD (IT) | `amd-it`|
|
||||
| AntOnline | `antonline`|
|
||||
| Argos (UK) | `argos`|
|
||||
| Aria PC (UK) | `aria`|
|
||||
| ARLT (DE) | `arlt`|
|
||||
| ASUS | `asus` |
|
||||
| ASUS (DE) | `asus-de` |
|
||||
| Azerty (NL) | `azerty`|
|
||||
@@ -133,18 +169,32 @@ environment variables are **optional**._
|
||||
| Best Buy | `bestbuy`|
|
||||
| Best Buy (CA) | `bestbuy-ca`|
|
||||
| Box (UK) | `box`|
|
||||
| CanadaComputers (CA) | `canadacomputers` |
|
||||
| Caseking (DE) | `caseking`|
|
||||
| CCL (UK) | `ccl`|
|
||||
| Comet (IT) | `comet`|
|
||||
| Computeruniverse (DE) | `computeruniverse` |
|
||||
| Coolblue (NL) | `coolblue`|
|
||||
| Coolmod (ES) | `coolmod`|
|
||||
| Corsair | `corsair`|
|
||||
| Currys (UK) | `currys`|
|
||||
| Cyberport (DE) | `cyberport` |
|
||||
| eBuyer (UK) | `ebuyer`|
|
||||
| El Corte Inglés | `elcorteingles`|
|
||||
| ePrice (IT) | `eprice`|
|
||||
| Euronics (IT) | `euronics`|
|
||||
| Euronics (DE) | `euronics-de`|
|
||||
| EVGA | `evga`|
|
||||
| EVGA (EU) | `evga-eu`|
|
||||
| Expert | `expert`|
|
||||
| Galaxus (DE) | `galaxus`|
|
||||
| Game (UK) | `game`|
|
||||
| Gamestop | `gamestop`|
|
||||
| Gamestop (DE) | `gamestop-de`|
|
||||
| Kabum (BR) | `kabum`|
|
||||
| Mediamarkt (DE) | `mediamarkt`|
|
||||
| Medimax | `medimax`|
|
||||
| MemoryExpress (CA) | `memoryexpress`|
|
||||
| Micro Center | `microcenter`|
|
||||
| Mindfactory (DE) | `mindfactory` |
|
||||
| Newegg | `newegg`|
|
||||
@@ -154,15 +204,24 @@ environment variables are **optional**._
|
||||
| Nvidia | `nvidia`|
|
||||
| Nvidia (API) | `nvidia-api`|
|
||||
| Office Depot | `officedepot`|
|
||||
| Otto | `otto`|
|
||||
| Overclockers (UK) | `overclockers`|
|
||||
| PCComponentes (ES) | `pccomponentes`|
|
||||
| PlayStation | `playstation`|
|
||||
| PNY | `pny`|
|
||||
| Proshop (DE) | `proshop-de`|
|
||||
| Proshop (DK) | `proshop-dk`|
|
||||
| Saturn (DE) | `saturn`|
|
||||
| Scan (UK) | `scan`|
|
||||
| Smyths Toys (UK) | `smythstoys`|
|
||||
| Spielegrotte | `spielegrotte`|
|
||||
| Target | `target`|
|
||||
| Unieuro (IT) | `unieuro`|
|
||||
| Very (UK) | `very`|
|
||||
| Walmart | `walmart`|
|
||||
| Wipoid | `wipoid`|
|
||||
| Zotac | `zotac`|
|
||||
| TopAchat | `topachat`|
|
||||
|
||||
<details>
|
||||
<summary>Micro Center stores</summary>
|
||||
@@ -210,20 +269,50 @@ environment variables are **optional**._
|
||||
|
||||
| Brand | Model |
|
||||
|:---:|---|
|
||||
| `asus` | `dual`, `dual oc`, `rog strix`, `rog strix oc`, `tuf`, `tuf oc` |
|
||||
| `amd` | `5600x`, `5800x`, `5900x`, `5950x`, `amd reference` |
|
||||
| `asus` | `dual`, `dual oc`, `strix`, `strix oc`, `tuf`, `tuf oc` |
|
||||
| `corsair` | `750 platinum`, `600 platinum` |
|
||||
| `evga` | `ftw3`, `ftw3 ultra`, `xc3`, `xc3 black`, `xc3 ultra` |
|
||||
| `gainward` | `phantom gs`, `phoenix`, `phoenix gs`, `phoenix gs 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` |
|
||||
| `kfa2` | `sg oc` |
|
||||
| `kfa2` | `sg`, `sg oc` |
|
||||
| `microsoft` | `xbox series x`, `xbox series s` |
|
||||
| `msi` | `gaming x trio`, `ventus 2x oc`, `ventus 3x`, `ventus 3x oc` |
|
||||
| `nvidia` | `founders edition` |
|
||||
| `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` |
|
||||
| `xfx` | `merc`, `amd reference` |
|
||||
| `zotac` | `amp holo`, `amp extreme holo`, `trinity`, `trinity oc`, `twin edge`, `twin edge oc` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Supported series</summary>
|
||||
|
||||
> :point_right: Used with the `SHOW_ONLY_SERIES` variable.
|
||||
|
||||
| Series | Environment variable |
|
||||
|:---:|:---:|
|
||||
| `AMD Ryzen 5600x` | `ryzen5600` |
|
||||
| `AMD Ryzen 5800x` | `ryzen5800` |
|
||||
| `AMD Ryzen 5900x` | `ryzen5900` |
|
||||
| `AMD Ryzen 5950x` | `ryzen5950` |
|
||||
| `AMD RX 6800` | `rx6800` |
|
||||
| `AMD RX 6800XT` | `rx6800xt` |
|
||||
| `AMD RX 6900XT` | `rx6900xt` |
|
||||
| `Nvidia RTX 3060 Ti` | `3060ti` |
|
||||
| `Nvidia RTX 3070` | `3070` |
|
||||
| `Nvidia RTX 3080` | `3080` |
|
||||
| `Nvidia RTX 3090` | `3090` |
|
||||
| `Corsair SFX PSU` | `sf` |
|
||||
| `Sony PS5` | `sonyps5c` |
|
||||
| `Sony PS5 Digital Edition` | `sonyps5de` |
|
||||
| `Xbox Series S` | `xboxss` |
|
||||
| `Xbox Series X` | `xboxsx` |
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary>Supported countries (used with nvidia and nvidia-api)</summary>
|
||||
|
||||
@@ -285,8 +374,8 @@ environment variables are **optional**._
|
||||
| `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_USERNAME` | Gmail address | E.g.: `jensen.robbed.us@gmail.com` |
|
||||
| `PHONE_CARRIER` | [Supported carriers](#supported-carriers) for SMS | Email configuration required |
|
||||
| `PHONE_NUMBER` | 10 digit phone number | E.g.: `1234567890`, 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(s) | E.g.: `1234567890` or `1234567890,0987654321,11112223333`, email configuration required |
|
||||
| `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` |
|
||||
|
||||
@@ -338,6 +427,25 @@ environment variables are **optional**._
|
||||
|
||||
</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>
|
||||
<summary>Pushbullet</summary>
|
||||
|
||||
@@ -415,7 +523,6 @@ environment variables are **optional**._
|
||||
| `TWITCH_CHANNEL` | Twitch channel | |
|
||||
|
||||
</details>
|
||||
|
||||
</details>
|
||||
|
||||
## FAQ
|
||||
@@ -434,22 +541,22 @@ it. Very straight forward. Otherwise, Google more information related to your sy
|
||||
|
||||
</details>
|
||||
|
||||
**Q: Will I get banned from of the stores?** Perhaps, but getting a card is a nice outcome.
|
||||
**Q: Will I get banned from of the stores?** Perhaps, but it's the risk we're willing to take! To help minimize this, take a look at [#1050](https://github.com/jef/streetmerchant/issues/1050).
|
||||
|
||||
**Q: I got a problem and need help!** File an [issue](https://github.com/jef/streetmerchant/issues/new/choose). I'll do
|
||||
my best to get to you. I work a full time job and this is only a hobby of mine.
|
||||
**Q: I got a problem and need help!** File an [issue](https://github.com/jef/streetmerchant/issues/new/choose). I'll do my best to get to you. I work a full time job and this is only a hobby of mine.
|
||||
|
||||
**Q: How do I get the latest code?** Take look at
|
||||
this [wiki page](https://github.com/jef/streetmerchant/wiki/Troubleshoot:-General:-Getting-the-latest-code).
|
||||
**Q: How do I get the latest code?** Take look at this [wiki page](https://github.com/jef/streetmerchant/wiki/Troubleshoot:-General:-Getting-the-latest-code).
|
||||
|
||||
**Q: Why don't my notifications work?** There is probably
|
||||
an [issue](https://github.com/jef/streetmerchant/issues?q=is%3Aissue+sort%3Aupdated-desc+sound+is%3Aclosed) that
|
||||
has [already](https://github.com/jef/streetmerchant/issues/182) [been](https://github.com/jef/streetmerchant/issues/116) [resolved](https://github.com/jef/streetmerchant/issues/155)
|
||||
.
|
||||
**Q: Why don't my notifications work?** There is probably an [issue](https://github.com/jef/streetmerchant/issues?q=is%3Aissue+sort%3Aupdated-desc+sound+is%3Aclosed) that has [already](https://github.com/jef/streetmerchant/issues/182) [been](https://github.com/jef/streetmerchant/issues/116) [resolved](https://github.com/jef/streetmerchant/issues/155).
|
||||
|
||||
**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
|
||||
contributions are welcome.
|
||||
**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 contributions 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.
|
||||
See [#11](https://github.com/jef/streetmerchant/issues/11).
|
||||
**Q: How do I add a store?** Take a look at [this page](https://github.com/jef/streetmerchant/wiki/Help:-Configuration:-Adding-a-store) on the wiki.
|
||||
|
||||
**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).
|
||||
|
||||
**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).
|
||||
|
||||
**Q: I'm using streetmerchant in the cloud and X isn't working.** There is _a lot_ of undefined behavior with using streetmerchant in the cloud. Some sites may block IPs from your cloud provider. It is possible that a VPN will help circumvent these problems.
|
||||
|
||||
<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 |
Generated
+1544
-936
File diff suppressed because it is too large
Load Diff
+25
-19
@@ -9,7 +9,9 @@
|
||||
"lint:fix": "xo --fix",
|
||||
"start": "npm run build && node build/index.js",
|
||||
"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": {
|
||||
"type": "git",
|
||||
@@ -24,50 +26,54 @@
|
||||
"homepage": "https://github.com/jef/streetmerchant#readme",
|
||||
"dependencies": {
|
||||
"@jef/pushbullet": "^2.4.3",
|
||||
"@slack/web-api": "^5.13.0",
|
||||
"@slack/web-api": "^5.14.0",
|
||||
"chalk": "^4.1.0",
|
||||
"cheerio": "^1.0.0-rc.3",
|
||||
"discord-webhook-node": "^1.1.8",
|
||||
"discord.js": "^12.5.1",
|
||||
"dotenv": "^8.2.0",
|
||||
"messaging-api-telegram": "^1.0.1",
|
||||
"mqtt": "^4.2.4",
|
||||
"mqtt": "^4.2.6",
|
||||
"node-fetch": "^2.6.1",
|
||||
"node-hue-api": "^4.0.9",
|
||||
"node-notifier": "^8.0.0",
|
||||
"node-pagerduty": "^1.3.5",
|
||||
"nodemailer": "^6.4.14",
|
||||
"node-pagerduty": "^1.3.6",
|
||||
"nodemailer": "^6.4.16",
|
||||
"open": "^7.3.0",
|
||||
"play-sound": "^1.1.3",
|
||||
"puppeteer": "^5.4.1",
|
||||
"puppeteer": "^5.5.0",
|
||||
"puppeteer-extra": "^3.1.15",
|
||||
"puppeteer-extra-plugin-adblocker": "^2.11.8",
|
||||
"puppeteer-extra-plugin-adblocker": "^2.11.9",
|
||||
"puppeteer-extra-plugin-block-resources": "^2.2.7",
|
||||
"puppeteer-extra-plugin-stealth": "^2.6.5",
|
||||
"puppeteer-page-proxy": "^1.2.8",
|
||||
"pushover-notifications": "^1.2.2",
|
||||
"twilio": "^3.50.0",
|
||||
"twitch": "^4.2.7",
|
||||
"twitch-auth": "^4.2.7",
|
||||
"twitch-chat-client": "^4.2.7",
|
||||
"twilio": "^3.53.0",
|
||||
"twitch": "^4.3.3",
|
||||
"twitch-auth": "^4.3.3",
|
||||
"twitch-chat-client": "^4.3.3",
|
||||
"twitter": "^1.7.1",
|
||||
"winston": "^3.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/async": "^3.2.3",
|
||||
"@types/async": "^3.2.5",
|
||||
"@types/cheerio": "^0.22.22",
|
||||
"@types/node": "^14.14.6",
|
||||
"@types/node": "^14.14.10",
|
||||
"@types/node-fetch": "^2.5.7",
|
||||
"@types/node-notifier": "^8.0.0",
|
||||
"@types/nodemailer": "^6.4.0",
|
||||
"@types/puppeteer": "^3.0.4",
|
||||
"@types/puppeteer": "^5.4.1",
|
||||
"@types/twitter": "^1.7.0",
|
||||
"husky": "^4.3.0",
|
||||
"nodemon": "^2.0.6",
|
||||
"ts-node": "^9.0.0",
|
||||
"typescript": "^4.0.5",
|
||||
"webpack": "^5.4.0",
|
||||
"xo": "^0.33.1"
|
||||
"ts-node": "^9.1.0",
|
||||
"typescript": "^4.1.2",
|
||||
"webpack": "^5.10.0",
|
||||
"xo": "^0.35.0"
|
||||
},
|
||||
"xo": {
|
||||
"prettier": true,
|
||||
"rules": {
|
||||
"no-warning-comments": "off",
|
||||
"sort-imports": "error",
|
||||
"sort-keys": "error",
|
||||
"sort-vars": "error"
|
||||
|
||||
@@ -5,6 +5,7 @@ const link: Link = {
|
||||
brand: 'test:brand',
|
||||
cartUrl: 'https://www.example.com/cartUrl',
|
||||
model: 'test:model',
|
||||
price: 100,
|
||||
series: 'test:series',
|
||||
url: 'https://www.example.com/url'
|
||||
};
|
||||
|
||||
+13
-2
@@ -5,9 +5,20 @@ export const adBlocker = new PuppeteerExtraPluginAdblocker({
|
||||
blockTrackers: true
|
||||
});
|
||||
|
||||
export async function disableBlockerInPage(page: Page) {
|
||||
export async function enableBlockerInPage(page: Page) {
|
||||
const blockerObject = await adBlocker.getBlocker();
|
||||
if (blockerObject.isBlockingEnabled(page)) {
|
||||
await blockerObject.disableBlockingInPage(page);
|
||||
return;
|
||||
}
|
||||
|
||||
await blockerObject.enableBlockingInPage(page);
|
||||
}
|
||||
|
||||
export async function disableBlockerInPage(page: Page) {
|
||||
const blockerObject = await adBlocker.getBlocker();
|
||||
if (!blockerObject.isBlockingEnabled(page)) {
|
||||
return;
|
||||
}
|
||||
|
||||
await blockerObject.disableBlockingInPage(page);
|
||||
}
|
||||
|
||||
+20
-10
@@ -3,13 +3,23 @@ import {readFileSync} from 'fs';
|
||||
|
||||
const version = readFileSync('version.txt', 'utf8');
|
||||
|
||||
export const banner = chalk.green.bold(`
|
||||
$$\\ $$\\ $$\\ $$\\ $$\\
|
||||
\\__| $$ |\\__| $$ | $$ |
|
||||
$$$$$$$\\ $$\\ $$\\ $$\\ $$$$$$$ |$$\\ $$$$$$\\ $$$$$$$\\ $$$$$$$\\ $$$$$$\\ $$$$$$\\ $$$$$$$\\ $$$$$$$\\ $$$$$$\\ $$$$$$\\
|
||||
$$ __$$\\\\$$\\ $$ |$$ |$$ __$$ |$$ | \\____$$\\ $$$$$$\\ $$ _____|$$ __$$\\ \\____$$\\\\_$$ _| $$ _____|$$ __$$\\ $$ __$$\\ $$ __$$\\
|
||||
$$ | $$ |\\$$\\$$ / $$ |$$ / $$ |$$ | $$$$$$$ |\\______|\\$$$$$$\\ $$ | $$ | $$$$$$$ | $$ | $$ / $$ | $$ |$$$$$$$$ |$$ | \\__|
|
||||
$$ | $$ | \\$$$ / $$ |$$ | $$ |$$ |$$ __$$ | \\____$$\\ $$ | $$ |$$ __$$ | $$ |$$\\ $$ | $$ | $$ |$$ ____|$$ |
|
||||
$$ | $$ | \\$ / $$ |\\$$$$$$$ |$$ |\\$$$$$$$ | $$$$$$$ |$$ | $$ |\\$$$$$$$ | \\$$$$ |\\$$$$$$$\\ $$ | $$ |\\$$$$$$$\\ $$ |
|
||||
\\__| \\__| \\_/ \\__| \\_______|\\__| \\_______| \\_______/ \\__| \\__| \\_______| \\____/ \\_______|\\__| \\__| \\_______|\\__|
|
||||
${version}`);
|
||||
export const banner = {
|
||||
asciiVersion: `
|
||||
██████ ▄▄▄█████▓ ██▀███ ▓█████ ▓█████▄▄▄█████▓ ███▄ ▄███▓▓█████ ██▀███ ▄████▄ ██░ ██ ▄▄▄ ███▄ █ ▄▄▄█████▓
|
||||
▒██ ▒ ▓ ██▒ ▓▒▓██ ▒ ██▒▓█ ▀ ▓█ ▀▓ ██▒ ▓▒▓██▒▀█▀ ██▒▓█ ▀ ▓██ ▒ ██▒▒██▀ ▀█ ▓██░ ██▒▒████▄ ██ ▀█ █ ▓ ██▒ ▓▒
|
||||
░ ▓██▄ ▒ ▓██░ ▒░▓██ ░▄█ ▒▒███ ▒███ ▒ ▓██░ ▒░▓██ ▓██░▒███ ▓██ ░▄█ ▒▒▓█ ▄ ▒██▀▀██░▒██ ▀█▄ ▓██ ▀█ ██▒▒ ▓██░ ▒░
|
||||
▒ ██▒░ ▓██▓ ░ ▒██▀▀█▄ ▒▓█ ▄ ▒▓█ ▄░ ▓██▓ ░ ▒██ ▒██ ▒▓█ ▄ ▒██▀▀█▄ ▒▓▓▄ ▄██▒░▓█ ░██ ░██▄▄▄▄██ ▓██▒ ▐▌██▒░ ▓██▓ ░
|
||||
▒██████▒▒ ▒██▒ ░ ░██▓ ▒██▒░▒████▒░▒████▒ ▒██▒ ░ ▒██▒ ░██▒░▒████▒░██▓ ▒██▒▒ ▓███▀ ░░▓█▒░██▓ ▓█ ▓██▒▒██░ ▓██░ ▒██▒ ░
|
||||
▒ ▒▓▒ ▒ ░ ▒ ░░ ░ ▒▓ ░▒▓░░░ ▒░ ░░░ ▒░ ░ ▒ ░░ ░ ▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░░ ░▒ ▒ ░ ▒ ░░▒░▒ ▒▒ ▓▒█░░ ▒░ ▒ ▒ ▒ ░░
|
||||
░ ░▒ ░ ░ ░ ░▒ ░ ▒░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ▒ ▒ ░▒░ ░ ▒ ▒▒ ░░ ░░ ░ ▒░ ░
|
||||
░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░ ░
|
||||
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
|
||||
${version}`,
|
||||
render(ascii: boolean, hexColor: string) {
|
||||
return chalk
|
||||
.hex(hexColor)
|
||||
.bold(ascii ? this.asciiVersion : this.stringVersion);
|
||||
},
|
||||
stringVersion: `STREETMERCHANT
|
||||
${version}`
|
||||
};
|
||||
|
||||
+155
-34
@@ -1,22 +1,34 @@
|
||||
import {banner} from './banner';
|
||||
|
||||
console.info(banner);
|
||||
|
||||
import {config as config_} from 'dotenv';
|
||||
import path from 'path';
|
||||
import {readFileSync} from 'fs';
|
||||
|
||||
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.
|
||||
*
|
||||
* @param environment Interested environment variable.
|
||||
* @param array Default array. If not set, is `[]`.
|
||||
*/
|
||||
function envOrArray(environment: string | undefined, array?: string[]): string[] {
|
||||
return (environment ? (
|
||||
environment.includes('\n') ? environment.split('\n') : environment.split(',')
|
||||
) : (array ?? [])).map(s => s.trim());
|
||||
function envOrArray(
|
||||
environment: string | undefined,
|
||||
array?: string[]
|
||||
): string[] {
|
||||
return (environment
|
||||
? environment.includes('\n')
|
||||
? environment.split('\n')
|
||||
: environment.split(',')
|
||||
: array ?? []
|
||||
).map((s) => s.trim());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -25,8 +37,11 @@ function envOrArray(environment: string | undefined, array?: string[]): string[]
|
||||
* @param environment Interested environment variable.
|
||||
* @param boolean Default boolean. If not set, is `true`.
|
||||
*/
|
||||
function envOrBoolean(environment: string | undefined, boolean?: boolean): boolean {
|
||||
return environment ? environment === 'true' : (boolean ?? true);
|
||||
function envOrBoolean(
|
||||
environment: string | undefined,
|
||||
boolean?: boolean
|
||||
): boolean {
|
||||
return environment ? environment === 'true' : boolean ?? true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -36,7 +51,7 @@ function envOrBoolean(environment: string | undefined, boolean?: boolean): boole
|
||||
* @param string Default string. If not set, is `''`.
|
||||
*/
|
||||
function envOrString(environment: string | undefined, string?: string): string {
|
||||
return environment ? environment : (string ?? '');
|
||||
return environment ? environment : string ?? '';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -46,7 +61,7 @@ function envOrString(environment: string | undefined, string?: string): string {
|
||||
* @param number Default number. If not set, is `0`.
|
||||
*/
|
||||
function envOrNumber(environment: string | undefined, number?: number): number {
|
||||
return environment ? Number(environment) : (number ?? 0);
|
||||
return environment ? Number(environment) : number ?? 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -61,14 +76,24 @@ function envOrNumber(environment: string | undefined, number?: number): number {
|
||||
* @param environmentMax Max environment variable of Min/Max pair.
|
||||
* @param number Default number. If not set, is `0`.
|
||||
*/
|
||||
function envOrNumberMin(environmentMin: string | undefined, environmentMax: string | undefined, number?: number) {
|
||||
function envOrNumberMin(
|
||||
environmentMin: string | undefined,
|
||||
environmentMax: string | undefined,
|
||||
number?: number
|
||||
) {
|
||||
if (environmentMin || environmentMax) {
|
||||
if (environmentMin && environmentMax) {
|
||||
return Number(Number(environmentMin) < Number(environmentMax) ? environmentMin : environmentMax);
|
||||
return Number(
|
||||
Number(environmentMin) < Number(environmentMax)
|
||||
? environmentMin
|
||||
: environmentMax
|
||||
);
|
||||
}
|
||||
|
||||
if (environmentMax) {
|
||||
return Number(environmentMax) < (number ?? 0) ? Number(environmentMax) : (number ?? 0);
|
||||
return Number(environmentMax) < (number ?? 0)
|
||||
? Number(environmentMax)
|
||||
: number ?? 0;
|
||||
}
|
||||
|
||||
if (environmentMin) {
|
||||
@@ -91,14 +116,24 @@ function envOrNumberMin(environmentMin: string | undefined, environmentMax: stri
|
||||
* @param environmentMax Max environment variable of Min/Max pair.
|
||||
* @param number Default number. If not set, is `0`.
|
||||
*/
|
||||
function envOrNumberMax(environmentMin: string | undefined, environmentMax: string | undefined, number?: number) {
|
||||
function envOrNumberMax(
|
||||
environmentMin: string | undefined,
|
||||
environmentMax: string | undefined,
|
||||
number?: number
|
||||
) {
|
||||
if (environmentMin || environmentMax) {
|
||||
if (environmentMin && environmentMax) {
|
||||
return Number(Number(environmentMin) < Number(environmentMax) ? environmentMax : environmentMax);
|
||||
return Number(
|
||||
Number(environmentMin) < Number(environmentMax)
|
||||
? environmentMax
|
||||
: environmentMax
|
||||
);
|
||||
}
|
||||
|
||||
if (environmentMin) {
|
||||
return Number(environmentMin) > (number ?? 0) ? Number(environmentMin) : (number ?? 0);
|
||||
return Number(environmentMin) > (number ?? 0)
|
||||
? Number(environmentMin)
|
||||
: number ?? 0;
|
||||
}
|
||||
|
||||
if (environmentMax) {
|
||||
@@ -114,10 +149,26 @@ const browser = {
|
||||
isIncognito: envOrBoolean(process.env.INCOGNITO, false),
|
||||
isTrusted: envOrBoolean(process.env.BROWSER_TRUSTED, false),
|
||||
lowBandwidth: envOrBoolean(process.env.LOW_BANDWIDTH, false),
|
||||
maxBackoff: envOrNumberMax(process.env.PAGE_BACKOFF_MIN, process.env.PAGE_BACKOFF_MAX, 3600000),
|
||||
maxSleep: envOrNumberMax(process.env.PAGE_SLEEP_MIN, process.env.PAGE_SLEEP_MAX, 10000),
|
||||
minBackoff: envOrNumberMin(process.env.PAGE_BACKOFF_MIN, process.env.PAGE_BACKOFF_MAX, 10000),
|
||||
minSleep: envOrNumberMin(process.env.PAGE_SLEEP_MIN, process.env.PAGE_SLEEP_MAX, 5000),
|
||||
maxBackoff: envOrNumberMax(
|
||||
process.env.PAGE_BACKOFF_MIN,
|
||||
process.env.PAGE_BACKOFF_MAX,
|
||||
3600000
|
||||
),
|
||||
maxSleep: envOrNumberMax(
|
||||
process.env.PAGE_SLEEP_MIN,
|
||||
process.env.PAGE_SLEEP_MAX,
|
||||
10000
|
||||
),
|
||||
minBackoff: envOrNumberMin(
|
||||
process.env.PAGE_BACKOFF_MIN,
|
||||
process.env.PAGE_BACKOFF_MAX,
|
||||
10000
|
||||
),
|
||||
minSleep: envOrNumberMin(
|
||||
process.env.PAGE_SLEEP_MIN,
|
||||
process.env.PAGE_SLEEP_MAX,
|
||||
5000
|
||||
),
|
||||
open: envOrBoolean(process.env.OPEN_BROWSER)
|
||||
};
|
||||
|
||||
@@ -129,13 +180,16 @@ const notifications = {
|
||||
desktop: process.env.DESKTOP_NOTIFICATIONS === 'true',
|
||||
discord: {
|
||||
notifyGroup: envOrArray(process.env.DISCORD_NOTIFY_GROUP),
|
||||
webHookUrl: envOrArray(process.env.DISCORD_WEB_HOOK)
|
||||
webhooks: envOrArray(process.env.DISCORD_WEB_HOOK)
|
||||
},
|
||||
email: {
|
||||
password: envOrString(process.env.EMAIL_PASSWORD),
|
||||
smtpAddress: envOrString(process.env.SMTP_ADDRESS),
|
||||
smtpPort: envOrNumber(process.env.SMTP_PORT, 25),
|
||||
to: envOrString(process.env.EMAIL_TO, envOrString(process.env.EMAIL_USERNAME)),
|
||||
to: envOrString(
|
||||
process.env.EMAIL_TO,
|
||||
envOrString(process.env.EMAIL_USERNAME)
|
||||
),
|
||||
username: envOrString(process.env.EMAIL_USERNAME)
|
||||
},
|
||||
mqtt: {
|
||||
@@ -151,6 +205,18 @@ const notifications = {
|
||||
integrationKey: envOrString(process.env.PAGERDUTY_INTEGRATION_KEY),
|
||||
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: {
|
||||
availableCarriers: new Map([
|
||||
['att', 'txt.att.net'],
|
||||
@@ -168,8 +234,8 @@ const notifications = {
|
||||
['virgin', 'vmobl.com'],
|
||||
['virgin-ca', 'vmobile.ca']
|
||||
]),
|
||||
carrier: envOrString(process.env.PHONE_CARRIER),
|
||||
number: envOrString(process.env.PHONE_NUMBER)
|
||||
carrier: envOrArray(process.env.PHONE_CARRIER),
|
||||
number: envOrArray(process.env.PHONE_NUMBER)
|
||||
},
|
||||
playSound: envOrString(process.env.PLAY_SOUND),
|
||||
pushbullet: envOrString(process.env.PUSHBULLET),
|
||||
@@ -218,45 +284,100 @@ const page = {
|
||||
inStockWaitTime: envOrNumber(process.env.IN_STOCK_WAIT_TIME),
|
||||
screenshot: envOrBoolean(process.env.SCREENSHOT),
|
||||
timeout: envOrNumber(process.env.PAGE_TIMEOUT, 30000),
|
||||
userAgents: envOrArray(process.env.USER_AGENT, ['Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36']),
|
||||
userAgents: envOrArray(process.env.USER_AGENT, [
|
||||
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
|
||||
]),
|
||||
width: 1920
|
||||
};
|
||||
|
||||
const proxy = {
|
||||
address: envOrString(process.env.PROXY_ADDRESS),
|
||||
port: envOrNumber(process.env.PROXY_PORT, 80)
|
||||
port: envOrNumber(process.env.PROXY_PORT, 80),
|
||||
protocol: envOrString(process.env.PROXY_PROTOCOL, 'http')
|
||||
};
|
||||
|
||||
// Check for deprecated configuration values
|
||||
if (process.env.MAX_PRICE) {
|
||||
console.warn('ℹ MAX_PRICE is deprecated, please use MAX_PRICE_SERIES_{{series}}');
|
||||
console.warn(
|
||||
'ℹ MAX_PRICE is deprecated, please use MAX_PRICE_SERIES_{{series}}'
|
||||
);
|
||||
}
|
||||
|
||||
const store = {
|
||||
autoAddToCart: envOrBoolean(process.env.AUTO_ADD_TO_CART, true),
|
||||
country: envOrString(process.env.COUNTRY, 'usa'),
|
||||
maxPrice: {
|
||||
series: {
|
||||
'3060ti': envOrNumber(process.env.MAX_PRICE_SERIES_3060TI),
|
||||
3070: envOrNumber(process.env.MAX_PRICE_SERIES_3070),
|
||||
3080: envOrNumber(process.env.MAX_PRICE_SERIES_3080),
|
||||
3090: envOrNumber(process.env.MAX_PRICE_SERIES_3090)
|
||||
3090: envOrNumber(process.env.MAX_PRICE_SERIES_3090),
|
||||
rx6800: envOrNumber(process.env.MAX_PRICE_SERIES_RX6800),
|
||||
rx6800xt: envOrNumber(process.env.MAX_PRICE_SERIES_RX6800XT),
|
||||
rx6900xt: envOrNumber(process.env.MAX_PRICE_SERIES_RX6900XT),
|
||||
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),
|
||||
sf: envOrNumber(process.env.MAX_PRICE_SERIES_CORSAIR_SF),
|
||||
sonyps5c: envOrNumber(process.env.MAX_PRICE_SERIES_SONYPS5C),
|
||||
sonyps5de: envOrNumber(process.env.MAX_PRICE_SERIES_SONYPS5DE),
|
||||
'test:series': envOrNumber(process.env.MAX_PRICE_SERIES_TEST),
|
||||
xboxss: -1,
|
||||
xboxsx: -1
|
||||
}
|
||||
},
|
||||
microCenterLocation: envOrArray(process.env.MICROCENTER_LOCATION, ['web']),
|
||||
showOnlyBrands: envOrArray(process.env.SHOW_ONLY_BRANDS),
|
||||
showOnlyModels: envOrArray(process.env.SHOW_ONLY_MODELS).map(entry => {
|
||||
showOnlyModels: envOrArray(process.env.SHOW_ONLY_MODELS).map((entry) => {
|
||||
const [name, series] = entry.match(/[^:]+/g) ?? [];
|
||||
return {
|
||||
name: envOrString(name),
|
||||
series: envOrString(series)
|
||||
};
|
||||
}),
|
||||
showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, ['3070', '3080', '3090']),
|
||||
stores: envOrArray(process.env.STORES, ['nvidia']).map(entry => {
|
||||
showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, [
|
||||
'3060ti',
|
||||
'3070',
|
||||
'3080',
|
||||
'3090',
|
||||
'rx6800',
|
||||
'rx6800xt',
|
||||
'rx6900xt',
|
||||
'ryzen5600',
|
||||
'ryzen5800',
|
||||
'ryzen5900',
|
||||
'ryzen5950',
|
||||
'sonyps5c',
|
||||
'sonyps5de',
|
||||
'xboxss',
|
||||
'xboxsx'
|
||||
]),
|
||||
stores: envOrArray(process.env.STORES, ['nvidia']).map((entry) => {
|
||||
const [name, minPageSleep, maxPageSleep] = entry.match(/[^:]+/g) ?? [];
|
||||
|
||||
let proxyList;
|
||||
try {
|
||||
proxyList = readFileSync(`${name}.proxies`)
|
||||
.toString()
|
||||
.trim()
|
||||
.split('\n')
|
||||
.map((x) => x.trim());
|
||||
} catch {}
|
||||
|
||||
return {
|
||||
maxPageSleep: envOrNumberMax(minPageSleep, maxPageSleep, browser.maxSleep),
|
||||
minPageSleep: envOrNumberMin(minPageSleep, maxPageSleep, browser.minSleep),
|
||||
name: envOrString(name)
|
||||
maxPageSleep: envOrNumberMax(
|
||||
minPageSleep,
|
||||
maxPageSleep,
|
||||
browser.maxSleep
|
||||
),
|
||||
minPageSleep: envOrNumberMin(
|
||||
minPageSleep,
|
||||
maxPageSleep,
|
||||
browser.minSleep
|
||||
),
|
||||
name: envOrString(name),
|
||||
proxyList
|
||||
};
|
||||
})
|
||||
};
|
||||
|
||||
+8
-12
@@ -1,23 +1,14 @@
|
||||
import {startAPIServer, stopAPIServer} from './web';
|
||||
import {Browser} from 'puppeteer';
|
||||
import {adBlocker} from './adblocker';
|
||||
import {config} from './config';
|
||||
import {getSleepTime} from './util';
|
||||
import {logger} from './logger';
|
||||
import puppeteer from 'puppeteer-extra';
|
||||
import resourceBlock from 'puppeteer-extra-plugin-block-resources';
|
||||
import stealthPlugin from 'puppeteer-extra-plugin-stealth';
|
||||
import {storeList} from './store/model';
|
||||
import {tryLookupAndLoop} from './store';
|
||||
|
||||
puppeteer.use(stealthPlugin());
|
||||
if (config.browser.lowBandwidth) {
|
||||
puppeteer.use(resourceBlock({
|
||||
blockedTypes: new Set(['image', 'font'] as const)
|
||||
}));
|
||||
} else {
|
||||
puppeteer.use(adBlocker);
|
||||
}
|
||||
|
||||
let browser: Browser | undefined;
|
||||
|
||||
@@ -41,7 +32,9 @@ async function main() {
|
||||
|
||||
// Add the address of the proxy server if defined
|
||||
if (config.proxy.address) {
|
||||
args.push(`--proxy-server=http://${config.proxy.address}:${config.proxy.port}`);
|
||||
args.push(
|
||||
`--proxy-server=${config.proxy.protocol}://${config.proxy.address}:${config.proxy.port}`
|
||||
);
|
||||
}
|
||||
|
||||
await stop();
|
||||
@@ -90,8 +83,11 @@ async function stopAndExit() {
|
||||
async function loopMain() {
|
||||
try {
|
||||
await main();
|
||||
} catch (error) {
|
||||
logger.error('✖ something bad happened, resetting streetmerchant in 5 seconds', error);
|
||||
} catch (error: unknown) {
|
||||
logger.error(
|
||||
'✖ something bad happened, resetting streetmerchant in 5 seconds',
|
||||
error
|
||||
);
|
||||
setTimeout(loopMain, 5000);
|
||||
}
|
||||
}
|
||||
|
||||
+120
-30
@@ -3,26 +3,24 @@ import chalk from 'chalk';
|
||||
import {config} from './config';
|
||||
import winston from 'winston';
|
||||
|
||||
const prettyJson = winston.format.printf(info => {
|
||||
const prettyJson = winston.format.printf((info) => {
|
||||
const timestamp = new Date().toLocaleTimeString();
|
||||
|
||||
if (typeof info.message === 'object') {
|
||||
info.message = JSON.stringify(info.message, null, 4);
|
||||
let out = `${chalk.grey(`[${timestamp}]`)} ${info.level} ${chalk.grey(
|
||||
'::'
|
||||
)} ${info.message}`;
|
||||
|
||||
if (Object.keys(info.metadata).length > 0) {
|
||||
out = `${out} ${chalk.magenta(JSON.stringify(info.metadata, null, 2))}`;
|
||||
}
|
||||
|
||||
if (info.meta) {
|
||||
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}`;
|
||||
return out;
|
||||
});
|
||||
|
||||
export const logger = winston.createLogger({
|
||||
format: winston.format.combine(
|
||||
winston.format.colorize(),
|
||||
winston.format.prettyPrint(),
|
||||
winston.format.splat(),
|
||||
winston.format.simple(),
|
||||
winston.format.metadata({fillExcept: ['level', 'message', 'timestamp']}),
|
||||
prettyJson
|
||||
),
|
||||
level: config.logLevel,
|
||||
@@ -30,30 +28,67 @@ export const logger = winston.createLogger({
|
||||
});
|
||||
|
||||
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) {
|
||||
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) {
|
||||
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 {
|
||||
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`;
|
||||
},
|
||||
captcha(link: Link, store: Store, color?: boolean): string {
|
||||
if (color) {
|
||||
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('CAPTCHA');
|
||||
return (
|
||||
'✖ ' +
|
||||
buildProductString(link, store, true) +
|
||||
' :: ' +
|
||||
chalk.yellow('CAPTCHA')
|
||||
);
|
||||
}
|
||||
|
||||
return `✖ ${buildProductString(link, store)} :: CAPTCHA`;
|
||||
@@ -73,49 +108,101 @@ export const Print = {
|
||||
},
|
||||
inStockWaiting(link: Link, store: Store, color?: boolean): string {
|
||||
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`;
|
||||
},
|
||||
maxPrice(link: Link, store: Store, price: number, maxPrice: number, color?: boolean): string {
|
||||
maxPrice(
|
||||
link: Link,
|
||||
store: Store,
|
||||
maxPrice: number,
|
||||
color?: boolean
|
||||
): string {
|
||||
if (color) {
|
||||
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow(`PRICE ${price} EXCEEDS LIMIT ${maxPrice}`);
|
||||
return (
|
||||
'✖ ' +
|
||||
buildProductString(link, store, true) +
|
||||
' :: ' +
|
||||
chalk.yellow(`PRICE ${link.price ?? ''} EXCEEDS LIMIT ${maxPrice}`)
|
||||
);
|
||||
}
|
||||
|
||||
return `✖ ${buildProductString(link, store)} :: PRICE ${price} EXCEEDS LIMIT ${maxPrice}`;
|
||||
return `✖ ${buildProductString(link, store)} :: PRICE ${
|
||||
link.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) {
|
||||
return '✖ ' + buildSetupString(topic, store, true) + ' :: ' + chalk.yellow(message);
|
||||
return (
|
||||
'✖ ' +
|
||||
buildSetupString(topic, store, true) +
|
||||
' :: ' +
|
||||
chalk.yellow(message)
|
||||
);
|
||||
}
|
||||
|
||||
return `✖ ${buildSetupString(topic, store)} :: ${message}`;
|
||||
},
|
||||
noResponse(link: Link, store: Store, color?: boolean): string {
|
||||
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`;
|
||||
},
|
||||
outOfStock(link: Link, store: Store, color?: boolean): string {
|
||||
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`;
|
||||
},
|
||||
productInStock(link: Link): string {
|
||||
let productString = `Product Page: ${link.url}`;
|
||||
if (link.cartUrl) productString += `\nAdd To Cart Link: ${link.cartUrl}`;
|
||||
|
||||
return productString;
|
||||
},
|
||||
rateLimit(link: Link, store: Store, color?: boolean): string {
|
||||
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`;
|
||||
}
|
||||
};
|
||||
|
||||
function buildSetupString(topic: string, store: Store, color?: boolean): string {
|
||||
function buildSetupString(
|
||||
topic: string,
|
||||
store: Store,
|
||||
color?: boolean
|
||||
): string {
|
||||
if (color) {
|
||||
return chalk.cyan(`[${store.name}]`) + chalk.grey(` [setup (${topic})]`);
|
||||
}
|
||||
@@ -125,7 +212,10 @@ function buildSetupString(topic: string, store: Store, color?: boolean): string
|
||||
|
||||
function buildProductString(link: Link, store: Store, color?: boolean): string {
|
||||
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}`;
|
||||
|
||||
+44
-20
@@ -1,43 +1,67 @@
|
||||
import {Link, Store} from '../store/model';
|
||||
import {MessageBuilder, Webhook} from 'discord-webhook-node';
|
||||
import Discord from 'discord.js';
|
||||
import {config} from '../config';
|
||||
import {logger} from '../logger';
|
||||
|
||||
const discord = config.notifications.discord;
|
||||
const hooks = discord.webHookUrl;
|
||||
const notifyGroup = discord.notifyGroup;
|
||||
const {notifyGroup, webhooks} = discord;
|
||||
|
||||
function getIdAndToken(webhook: string) {
|
||||
const match = /.*\/webhooks\/(\d+)\/(.+)/.exec(webhook);
|
||||
|
||||
if (!match) {
|
||||
throw new Error('could not get discord webhook');
|
||||
}
|
||||
|
||||
return {
|
||||
id: match[1],
|
||||
token: match[2]
|
||||
};
|
||||
}
|
||||
|
||||
export function sendDiscordMessage(link: Link, store: Store) {
|
||||
if (discord.webHookUrl.length > 0) {
|
||||
if (webhooks.length > 0) {
|
||||
logger.debug('↗ sending discord message');
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
const embed = new MessageBuilder();
|
||||
embed.setTitle('Stock Notification');
|
||||
embed.addField('URL', link.cartUrl ? link.cartUrl : link.url, true);
|
||||
const embed = new Discord.MessageEmbed()
|
||||
.setTitle('_**Stock alert!**_')
|
||||
.setDescription(
|
||||
'> provided by [streetmerchant](https://github.com/jef/streetmerchant) with :heart:'
|
||||
)
|
||||
.setThumbnail(
|
||||
'https://raw.githubusercontent.com/jef/streetmerchant/main/media/streetmerchant-square.png'
|
||||
)
|
||||
.setColor('#52b788')
|
||||
.setTimestamp();
|
||||
|
||||
embed.addField('Store', store.name, true);
|
||||
if (link.price) embed.addField('Price', `$${link.price}`, true);
|
||||
embed.addField('Product Page', link.url);
|
||||
if (link.cartUrl) embed.addField('Add to Cart', link.cartUrl);
|
||||
embed.addField('Brand', link.brand, true);
|
||||
embed.addField('Series', link.series, true);
|
||||
embed.addField('Model', link.model, true);
|
||||
|
||||
if (notifyGroup) {
|
||||
embed.setText(notifyGroup.join(' '));
|
||||
}
|
||||
|
||||
embed.setColor(0x76B900);
|
||||
embed.setTimestamp();
|
||||
embed.addField('Series', link.series, true);
|
||||
|
||||
const promises = [];
|
||||
for (const hook of hooks) {
|
||||
promises.push(new Webhook(hook).send(embed));
|
||||
for (const webhook of webhooks) {
|
||||
const {id, token} = getIdAndToken(webhook);
|
||||
const client = new Discord.WebhookClient(id, token);
|
||||
promises.push({
|
||||
client,
|
||||
message: client.send(notifyGroup.join(' '), {
|
||||
embeds: [embed],
|
||||
username: 'streetmerchant'
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
await Promise.all(promises);
|
||||
(await Promise.all(promises)).forEach(({client}) => client.destroy());
|
||||
|
||||
logger.info('✔ discord message sent');
|
||||
} catch (error) {
|
||||
logger.error('✖ couldn\'t send discord message', error);
|
||||
} catch (error: unknown) {
|
||||
logger.error("✖ couldn't send discord message", error);
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
@@ -30,21 +30,23 @@ export function sendEmail(link: Link, store: Store) {
|
||||
logger.debug('↗ sending email');
|
||||
|
||||
const mailOptions: Mail.Options = {
|
||||
attachments: link.screenshot ? [
|
||||
{
|
||||
filename: link.screenshot,
|
||||
path: `./${link.screenshot}`
|
||||
}
|
||||
] : undefined,
|
||||
attachments: link.screenshot
|
||||
? [
|
||||
{
|
||||
filename: link.screenshot,
|
||||
path: `./${link.screenshot}`
|
||||
}
|
||||
]
|
||||
: undefined,
|
||||
from: email.username,
|
||||
subject: Print.inStock(link, store),
|
||||
text: link.cartUrl ? link.cartUrl : link.url,
|
||||
text: Print.productInStock(link),
|
||||
to: email.to
|
||||
};
|
||||
|
||||
transporter.sendMail(mailOptions, error => {
|
||||
transporter.sendMail(mailOptions, (error) => {
|
||||
if (error) {
|
||||
logger.error('✖ couldn\'t send email', error);
|
||||
logger.error("✖ couldn't send email", error);
|
||||
} else {
|
||||
logger.info('✔ email sent');
|
||||
}
|
||||
|
||||
+21
-14
@@ -8,15 +8,20 @@ let client: MqttClient.Client;
|
||||
|
||||
if (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 {
|
||||
const clientOptions: IClientOptions = {
|
||||
clean: (mqtt.clientId === ''),
|
||||
clean: mqtt.clientId === '',
|
||||
clientId: mqtt.clientId === '' ? undefined : mqtt.clientId,
|
||||
password: mqtt.password === '' ? undefined : mqtt.password,
|
||||
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 () => {
|
||||
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 pubOptions: IClientPublishOptions = {
|
||||
qos: mqtt.qos as 0 | 1 | 2,
|
||||
@@ -34,14 +42,10 @@ export function sendMqttMessage(link: Link, store: Store) {
|
||||
};
|
||||
|
||||
try {
|
||||
client.publish(
|
||||
topic,
|
||||
message,
|
||||
pubOptions
|
||||
);
|
||||
client.publish(topic, message, pubOptions);
|
||||
logger.info('✔ mqtt message sent');
|
||||
} catch (error) {
|
||||
logger.error('✖ couldn\'t send mqtt message', error);
|
||||
} catch (error: unknown) {
|
||||
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 {
|
||||
topic.trim();
|
||||
topic = topic.replace(/^\//, '');
|
||||
topic = topic.replace(/%series%/g, link.series)
|
||||
topic = topic
|
||||
.replace(/%series%/g, link.series)
|
||||
.replace(/%brand%/g, link.brand)
|
||||
.replace(/%model%/g, link.model)
|
||||
.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 {
|
||||
if (pass !== '') {
|
||||
if (isClassANet(address) ||
|
||||
if (
|
||||
isClassANet(address) ||
|
||||
isClassBNet(address) ||
|
||||
isClassCNet(address) ||
|
||||
isLinkLocal(address)) {
|
||||
isLinkLocal(address)
|
||||
) {
|
||||
logger.debug(`MQTT using private network broker: ${address}`);
|
||||
} else {
|
||||
logger.debug(`MQTT using public network broker: ${address}`);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import {Link, Store} from '../store/model';
|
||||
import {adjustPhilipsHueLights} from './philips-hue';
|
||||
import {playSound} from './sound';
|
||||
import {sendDesktopNotification} from './desktop';
|
||||
import {sendDiscordMessage} from './discord';
|
||||
@@ -21,6 +22,7 @@ export function sendNotification(link: Link, store: Store) {
|
||||
sendSms(link, store);
|
||||
sendDesktopNotification(link, store);
|
||||
// Non-priority
|
||||
adjustPhilipsHueLights();
|
||||
sendDiscordMessage(link, store);
|
||||
sendMqttMessage(link, store);
|
||||
sendPagerDutyNotification(link, store);
|
||||
|
||||
@@ -8,12 +8,11 @@ const pd = new PDClient('');
|
||||
export function sendPagerDutyNotification(link: Link, store: Store) {
|
||||
if (config.notifications.pagerduty.integrationKey) {
|
||||
logger.debug('↗ sending pagerduty message');
|
||||
const links = [
|
||||
{href: link.url, text: 'Visit Store'}
|
||||
];
|
||||
const links = [{href: link.url, text: 'Visit Store'}];
|
||||
if (link.cartUrl) {
|
||||
links.push({
|
||||
href: link.cartUrl, text: 'Add to Cart'
|
||||
href: link.cartUrl,
|
||||
text: 'Add to Cart'
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
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;
|
||||
}
|
||||
);
|
||||
}
|
||||
})();
|
||||
}
|
||||
}
|
||||
@@ -17,10 +17,11 @@ export function sendPushbulletNotification(link: Link, store: Store) {
|
||||
link.cartUrl ? link.cartUrl : link.url,
|
||||
(error: Error) => {
|
||||
if (error) {
|
||||
logger.error('✖ couldn\'t send pushbullet message', error);
|
||||
logger.error("✖ couldn't send pushbullet message", error);
|
||||
} else {
|
||||
logger.info('✔ pushbullet message sent');
|
||||
}
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ export function sendPushoverNotification(link: Link, store: Store) {
|
||||
|
||||
push.send(message, (error: Error) => {
|
||||
if (error) {
|
||||
logger.error('✖ couldn\'t send pushover message', error);
|
||||
logger.error("✖ couldn't send pushover message", error);
|
||||
} else {
|
||||
logger.info('✔ pushover message sent');
|
||||
}
|
||||
|
||||
@@ -22,13 +22,13 @@ export function sendSlackMessage(link: Link, store: Store) {
|
||||
});
|
||||
|
||||
if (!result.ok) {
|
||||
logger.error('✖ couldn\'t send slack message', result);
|
||||
logger.error("✖ couldn't send slack message", result);
|
||||
return;
|
||||
}
|
||||
|
||||
logger.info('✔ slack message sent');
|
||||
} catch (error) {
|
||||
logger.error('✖ couldn\'t send slack message', error);
|
||||
} catch (error: unknown) {
|
||||
logger.error("✖ couldn't send slack message", error);
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
+61
-34
@@ -4,48 +4,75 @@ import Mail from 'nodemailer/lib/mailer';
|
||||
import {config} from '../config';
|
||||
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];
|
||||
|
||||
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) {
|
||||
if (phone.number) {
|
||||
logger.debug('↗ sending sms');
|
||||
const carrier = phone.carrier;
|
||||
for (
|
||||
let i = 0;
|
||||
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)) {
|
||||
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()
|
||||
};
|
||||
|
||||
transporter.sendMail(mailOptions, error => {
|
||||
if (error) {
|
||||
logger.error('✖ couldn\'t send sms', error);
|
||||
} else {
|
||||
logger.info('✔ sms sent');
|
||||
}
|
||||
});
|
||||
if (!currentNumber) {
|
||||
logger.error(`✖ ${currentCarrier} is not associated with a number`);
|
||||
continue;
|
||||
} else if (!currentCarrier) {
|
||||
logger.error(`✖ ${currentNumber} is not associated with a carrier`);
|
||||
continue;
|
||||
}
|
||||
|
||||
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() {
|
||||
const carrier = phone.carrier;
|
||||
|
||||
function generateAddress(number: string, carrier: string) {
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ if (config.notifications.playSound) {
|
||||
player = playerLib();
|
||||
|
||||
if (player.player === null) {
|
||||
logger.warn('✖ couldn\'t find sound player');
|
||||
logger.warn("✖ couldn't find sound player");
|
||||
} else {
|
||||
const playerName = player.player;
|
||||
logger.info(`✔ sound player found: ${playerName}`);
|
||||
@@ -20,7 +20,7 @@ export function playSound() {
|
||||
if (config.notifications.playSound && player.player !== null) {
|
||||
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) {
|
||||
logger.error(`✖ error opening sound file: ${error.message}`);
|
||||
return;
|
||||
@@ -28,7 +28,7 @@ export function playSound() {
|
||||
|
||||
player.play(config.notifications.playSound, (error: Error) => {
|
||||
if (error) {
|
||||
logger.error('✖ couldn\'t play sound', error);
|
||||
logger.error("✖ couldn't play sound", error);
|
||||
}
|
||||
|
||||
logger.info('✔ played sound');
|
||||
|
||||
@@ -14,15 +14,20 @@ export function sendTelegramMessage(link: Link, store: Store) {
|
||||
logger.debug('↗ sending telegram message');
|
||||
|
||||
(async () => {
|
||||
const givenUrl = link.cartUrl ? link.cartUrl : link.url;
|
||||
const message = Print.productInStock(link);
|
||||
const results = [];
|
||||
|
||||
for (const chatId of telegram.chatId) {
|
||||
try {
|
||||
results.push(client.sendMessage(chatId, `${Print.inStock(link, store)}\n${givenUrl}`));
|
||||
results.push(
|
||||
client.sendMessage(
|
||||
chatId,
|
||||
`${Print.inStock(link, store)}\n${message}`
|
||||
)
|
||||
);
|
||||
logger.info('✔ telegram message sent');
|
||||
} catch (error) {
|
||||
logger.error('✖ couldn\'t send telegram message', error);
|
||||
} catch (error: unknown) {
|
||||
logger.error("✖ couldn't send telegram message", error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,8 +25,8 @@ export function sendTwilioMessage(link: Link, store: Store) {
|
||||
to: twilio.to
|
||||
});
|
||||
logger.info('✔ twilio message sent');
|
||||
} catch (error) {
|
||||
logger.error('✖ couldn\'t send twilio message', error);
|
||||
} catch (error: unknown) {
|
||||
logger.error("✖ couldn't send twilio message", error);
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
+34
-11
@@ -17,7 +17,10 @@ let tokenData = {
|
||||
};
|
||||
|
||||
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(
|
||||
@@ -25,13 +28,25 @@ const chatClient: ChatClient = new ChatClient(
|
||||
new StaticAuthProvider(twitch.clientId, tokenData.accessToken),
|
||||
{
|
||||
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}) => {
|
||||
return promises.writeFile('./twitch.json', JSON.stringify({
|
||||
accessToken,
|
||||
expiryTimestamp: expiryDate === null ? null : expiryDate.getTime(),
|
||||
refreshToken
|
||||
}, null, 4), 'utf-8');
|
||||
return promises.writeFile(
|
||||
'./twitch.json',
|
||||
JSON.stringify(
|
||||
{
|
||||
accessToken,
|
||||
expiryTimestamp:
|
||||
expiryDate === null ? null : expiryDate.getTime(),
|
||||
refreshToken
|
||||
},
|
||||
null,
|
||||
4
|
||||
),
|
||||
'utf-8'
|
||||
);
|
||||
},
|
||||
refreshToken: tokenData.refreshToken
|
||||
}
|
||||
@@ -50,8 +65,8 @@ chatClient.onJoin((channel: string, user: string) => {
|
||||
try {
|
||||
chatClient.say(channel, message);
|
||||
logger.info('✔ twitch message sent');
|
||||
} catch (error) {
|
||||
logger.error('✖ couldn\'t send twitch message', error);
|
||||
} catch (error: unknown) {
|
||||
logger.error("✖ couldn't send twitch message", error);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -65,10 +80,18 @@ chatClient.onDisconnect(() => {
|
||||
});
|
||||
|
||||
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');
|
||||
|
||||
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) {
|
||||
alreadySaying = true;
|
||||
|
||||
@@ -13,18 +13,25 @@ const client = new Twitter({
|
||||
});
|
||||
|
||||
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');
|
||||
|
||||
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) {
|
||||
status += `\n\n${twitter.tweetTags}`;
|
||||
}
|
||||
|
||||
client.post('statuses/update', {status}, error => {
|
||||
client.post('statuses/update', {status}, (error) => {
|
||||
if (error) {
|
||||
logger.error('✖ couldn\'t send twitter notification', error);
|
||||
logger.error("✖ couldn't send twitter notification", error);
|
||||
} else {
|
||||
logger.info('✔ twitter notification sent');
|
||||
}
|
||||
|
||||
+19
-13
@@ -12,14 +12,16 @@ function addNewLinks(store: Store, links: Link[], series: Series) {
|
||||
return;
|
||||
}
|
||||
|
||||
const existingUrls = new Set(store.links.map(link => link.url));
|
||||
const newLinks = links.filter(link => !existingUrls.has(link.url));
|
||||
const existingUrls = new Set(store.links.map((link) => link.url));
|
||||
const newLinks = links.filter((link) => !existingUrls.has(link.url));
|
||||
|
||||
if (newLinks.length === 0) {
|
||||
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));
|
||||
|
||||
store.links = store.links.concat(newLinks);
|
||||
@@ -43,19 +45,23 @@ export async function fetchLinks(store: Store, browser: Browser) {
|
||||
url = [url];
|
||||
}
|
||||
|
||||
url.map(x => promises.push(usingResponse(browser, x, async response => {
|
||||
const text = await response?.text();
|
||||
url.map((x) =>
|
||||
promises.push(
|
||||
usingResponse(browser, x, async (response) => {
|
||||
const text = await response?.text();
|
||||
|
||||
if (!text) {
|
||||
logger.error(Print.message('NO RESPONSE', series, store, true));
|
||||
return;
|
||||
}
|
||||
if (!text) {
|
||||
logger.error(Print.message('NO RESPONSE', series, store, true));
|
||||
return;
|
||||
}
|
||||
|
||||
const docElement = cheerio.load(text).root();
|
||||
const links = store.linksBuilder!.builder(docElement, series);
|
||||
const docElement = cheerio.load(text).root();
|
||||
const links = store.linksBuilder!.builder(docElement, series);
|
||||
|
||||
addNewLinks(store, links, series);
|
||||
})));
|
||||
addNewLinks(store, links, series);
|
||||
})
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
await Promise.all(promises);
|
||||
|
||||
+8
-4
@@ -30,10 +30,14 @@ function filterModel(model: Link['model'], series: Link['series']): boolean {
|
||||
for (const configModelEntry of config.store.showOnlyModels) {
|
||||
const sanitizedConfigModel = configModelEntry.name.replace(/\s/g, '');
|
||||
const sanitizedConfigSeries = configModelEntry.series.replace(/\s/g, '');
|
||||
if (sanitizedConfigSeries ?
|
||||
sanitizedSeries === sanitizedConfigSeries && sanitizedModel === sanitizedConfigModel :
|
||||
sanitizedModel === sanitizedConfigModel
|
||||
) {
|
||||
if (sanitizedConfigSeries) {
|
||||
if (
|
||||
sanitizedSeries === sanitizedConfigSeries &&
|
||||
sanitizedModel === sanitizedConfigModel
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
} else if (sanitizedModel === sanitizedConfigModel) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,59 +9,81 @@ export type Selector = {
|
||||
};
|
||||
|
||||
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)) {
|
||||
return query.map(x => ({
|
||||
return query.map((x) => ({
|
||||
container: x.container ?? defaultContainer,
|
||||
text: x.text
|
||||
}));
|
||||
}
|
||||
|
||||
if (Array.isArray(query)) {
|
||||
return [{
|
||||
container: defaultContainer,
|
||||
text: query
|
||||
}];
|
||||
return [
|
||||
{
|
||||
container: defaultContainer,
|
||||
text: query
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
return [{
|
||||
container: query.container ?? defaultContainer,
|
||||
text: query.text
|
||||
}];
|
||||
return [
|
||||
{
|
||||
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 resolved = await Promise.all(elementQueries.map(async query => {
|
||||
const selector = {...options, selector: query.container};
|
||||
const contents = await extractPageContents(page, selector) ?? '';
|
||||
const resolved = await Promise.all(
|
||||
elementQueries.map(async (query) => {
|
||||
const selector = {...options, selector: query.container};
|
||||
const contents = (await extractPageContents(page, selector)) ?? '';
|
||||
|
||||
if (!contents) {
|
||||
return false;
|
||||
}
|
||||
if (!contents) {
|
||||
return false;
|
||||
}
|
||||
|
||||
logger.debug(contents);
|
||||
logger.debug(contents);
|
||||
|
||||
return includesLabels(contents, query.text);
|
||||
}));
|
||||
return includesLabels(contents, query.text);
|
||||
})
|
||||
);
|
||||
|
||||
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) => {
|
||||
// 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) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (options.requireVisible && !(element.offsetWidth > 0 && element.offsetHeight > 0)) {
|
||||
if (
|
||||
options.requireVisible &&
|
||||
!(element.offsetWidth > 0 && element.offsetHeight > 0)
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -84,25 +106,32 @@ export async function extractPageContents(page: Page, selector: Selector): Promi
|
||||
* @param domText Complete DOM of website.
|
||||
* @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();
|
||||
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) {
|
||||
if (!max) {
|
||||
return null;
|
||||
}
|
||||
|
||||
export async function getPrice(
|
||||
page: Page,
|
||||
query: Pricing,
|
||||
options: Selector
|
||||
): Promise<number | null> {
|
||||
const selector = {...options, selector: query.container};
|
||||
const cardPrice = await extractPageContents(page, selector);
|
||||
const priceString = await extractPageContents(page, selector);
|
||||
|
||||
if (cardPrice) {
|
||||
const priceSeperator = query.euroFormat ? /\./g : /,/g;
|
||||
const cardpriceNumber = Number.parseFloat(cardPrice.replace(priceSeperator, '').match(/\d+/g)!.join('.'));
|
||||
if (priceString) {
|
||||
const priceSeparator = query.euroFormat ? /\./g : /,/g;
|
||||
const price = Number.parseFloat(
|
||||
priceString.replace(priceSeparator, '').match(/\d+/g)!.join('.')
|
||||
);
|
||||
|
||||
logger.debug(`Raw card price: ${cardPrice} | Limit: ${max}`);
|
||||
return cardpriceNumber > max ? cardpriceNumber : null;
|
||||
logger.debug('received price', price);
|
||||
return price;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
+250
-87
@@ -1,20 +1,117 @@
|
||||
import {Browser, Page, Response} from 'puppeteer';
|
||||
import {Browser, Page, PageEventObj, Request, Response} from 'puppeteer';
|
||||
import {Link, Store, getStores} from './model';
|
||||
import {Print, logger} from '../logger';
|
||||
import {Selector, cardPrice, pageIncludesLabels} from './includes-labels';
|
||||
import {closePage, delay, getRandomUserAgent, getSleepTime, isStatusCodeInRange} from '../util';
|
||||
import {Selector, getPrice, pageIncludesLabels} from './includes-labels';
|
||||
import {
|
||||
closePage,
|
||||
delay,
|
||||
getRandomUserAgent,
|
||||
getSleepTime,
|
||||
isStatusCodeInRange
|
||||
} from '../util';
|
||||
import {disableBlockerInPage, enableBlockerInPage} from '../adblocker';
|
||||
import {config} from '../config';
|
||||
import {disableBlockerInPage} from '../adblocker';
|
||||
import {fetchLinks} from './fetch-links';
|
||||
import {filterStoreLink} from './filter';
|
||||
import open from 'open';
|
||||
import {processBackoffDelay} from './model/helpers/backoff';
|
||||
import {sendNotification} from '../notification';
|
||||
import useProxy from 'puppeteer-page-proxy';
|
||||
|
||||
const inStock: Record<string, boolean> = {};
|
||||
|
||||
const linkBuilderLastRunTimes: Record<string, number> = {};
|
||||
|
||||
function nextProxy(store: Store) {
|
||||
if (!store.proxyList) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (store.currentProxyIndex === undefined) {
|
||||
store.currentProxyIndex = 0;
|
||||
}
|
||||
|
||||
store.currentProxyIndex++;
|
||||
if (store.currentProxyIndex >= store.proxyList.length) {
|
||||
store.currentProxyIndex = 0;
|
||||
}
|
||||
|
||||
logger.info(
|
||||
`ℹ [${store.name}] Next proxy index: ${store.currentProxyIndex} / Count: ${store.proxyList.length}`
|
||||
);
|
||||
|
||||
return store.proxyList[store.currentProxyIndex];
|
||||
}
|
||||
|
||||
async function handleLowBandwidth(request: Request) {
|
||||
if (!config.browser.lowBandwidth) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const typ = request.resourceType();
|
||||
if (typ === 'font' || typ === 'image') {
|
||||
try {
|
||||
await request.abort();
|
||||
} catch {}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
async function handleProxy(request: Request, proxy?: string) {
|
||||
if (!proxy) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
await useProxy(request, proxy);
|
||||
} catch (error: unknown) {
|
||||
logger.error(error);
|
||||
try {
|
||||
await request.abort();
|
||||
} catch {}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async function handleAdBlock(request: Request, adBlockRequestHandler: any) {
|
||||
if (!adBlockRequestHandler) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return new Promise((resolve) => {
|
||||
const continueFunc = async () => {
|
||||
resolve(false);
|
||||
};
|
||||
|
||||
const abortFunc = async () => {
|
||||
try {
|
||||
await request.abort();
|
||||
} catch {}
|
||||
|
||||
resolve(true);
|
||||
};
|
||||
|
||||
const requestProxy = new Proxy(request, {
|
||||
get(target, prop, receiver) {
|
||||
if (prop === 'continue') {
|
||||
return continueFunc;
|
||||
}
|
||||
|
||||
if (prop === 'abort') {
|
||||
return abortFunc;
|
||||
}
|
||||
|
||||
return Reflect.get(target, prop, receiver);
|
||||
}
|
||||
});
|
||||
adBlockRequestHandler(requestProxy);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Responsible for looking up information about a each product within
|
||||
* a `Store`. It's important that we ignore `no-await-in-loop` here
|
||||
@@ -28,6 +125,20 @@ async function lookup(browser: Browser, store: Store) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (store.linksBuilder) {
|
||||
logger.info(`[${store.name}] Running linksBuilder...`);
|
||||
const lastRunTime = linkBuilderLastRunTimes[store.name] ?? -1;
|
||||
const ttl = store.linksBuilder.ttl ?? Number.MAX_SAFE_INTEGER;
|
||||
if (lastRunTime === -1 || Date.now() - lastRunTime > ttl) {
|
||||
try {
|
||||
await fetchLinks(store, browser);
|
||||
linkBuilderLastRunTimes[store.name] = Date.now();
|
||||
} catch (error: unknown) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* eslint-disable no-await-in-loop */
|
||||
for (const link of store.links) {
|
||||
if (!filterStoreLink(link)) {
|
||||
@@ -39,28 +150,79 @@ async function lookup(browser: Browser, store: Store) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const context = (config.browser.isIncognito ? await browser.createIncognitoBrowserContext() : browser.defaultBrowserContext());
|
||||
const page = (config.browser.isIncognito ? await context.newPage() : await browser.newPage());
|
||||
const proxy = nextProxy(store);
|
||||
|
||||
const useAdBlock = !config.browser.lowBandwidth && !store.disableAdBlocker;
|
||||
const customContext = config.browser.isIncognito;
|
||||
|
||||
const context = customContext
|
||||
? await browser.createIncognitoBrowserContext()
|
||||
: browser.defaultBrowserContext();
|
||||
const page = await context.newPage();
|
||||
|
||||
page.setDefaultNavigationTimeout(config.page.timeout);
|
||||
await page.setUserAgent(getRandomUserAgent());
|
||||
|
||||
if (store.disableAdBlocker) {
|
||||
try {
|
||||
await disableBlockerInPage(page);
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
let adBlockRequestHandler: any;
|
||||
let pageProxy;
|
||||
if (useAdBlock) {
|
||||
const onProxyFunc = (event: keyof PageEventObj, handler: any) => {
|
||||
if (event !== 'request') {
|
||||
page.on(event, handler);
|
||||
return;
|
||||
}
|
||||
|
||||
adBlockRequestHandler = handler;
|
||||
};
|
||||
|
||||
pageProxy = new Proxy(page, {
|
||||
get(target, prop, receiver) {
|
||||
if (prop === 'on') {
|
||||
return onProxyFunc;
|
||||
}
|
||||
|
||||
return Reflect.get(target, prop, receiver);
|
||||
}
|
||||
});
|
||||
await enableBlockerInPage(pageProxy);
|
||||
}
|
||||
|
||||
await page.setRequestInterception(true);
|
||||
page.on('request', async (request) => {
|
||||
if (await handleLowBandwidth(request)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (await handleAdBlock(request, adBlockRequestHandler)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (await handleProxy(request, proxy)) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await request.continue();
|
||||
} catch {}
|
||||
});
|
||||
|
||||
let statusCode = 0;
|
||||
|
||||
try {
|
||||
statusCode = await lookupCard(browser, store, page, link);
|
||||
} catch (error) {
|
||||
logger.error(`✖ [${store.name}] ${link.brand} ${link.series} ${link.model} - ${error.message as string}`);
|
||||
} catch (error: unknown) {
|
||||
logger.error(
|
||||
`✖ [${store.name}] ${link.brand} ${link.series} ${link.model} - ${
|
||||
(error as Error).message
|
||||
}`
|
||||
);
|
||||
const client = await page.target().createCDPSession();
|
||||
await client.send('Network.clearBrowserCookies');
|
||||
await client.send('Network.clearBrowserCache');
|
||||
// Await client.send('Network.clearBrowserCache');
|
||||
}
|
||||
|
||||
if (pageProxy) {
|
||||
await disableBlockerInPage(pageProxy);
|
||||
}
|
||||
|
||||
// Must apply backoff before closing the page, e.g. if CloudFlare is
|
||||
@@ -68,16 +230,23 @@ async function lookup(browser: Browser, store: Store) {
|
||||
// before redirecting to the next page
|
||||
await processBackoffDelay(store, link, statusCode);
|
||||
await closePage(page);
|
||||
if (config.browser.isIncognito) {
|
||||
if (customContext) {
|
||||
await context.close();
|
||||
}
|
||||
}
|
||||
/* 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 response: Response | null = await page.goto(link.url, {waitUntil: givenWaitFor});
|
||||
const response: Response | null = await page.goto(link.url, {
|
||||
waitUntil: givenWaitFor
|
||||
});
|
||||
|
||||
if (!response) {
|
||||
logger.debug(Print.noResponse(link, store, true));
|
||||
@@ -96,15 +265,14 @@ async function lookupCard(browser: Browser, store: Store, page: Page, link: 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}`);
|
||||
|
||||
if (config.browser.open) {
|
||||
if (link.openCartAction === undefined) {
|
||||
await open(givenUrl);
|
||||
} else {
|
||||
await link.openCartAction(browser);
|
||||
}
|
||||
await (link.openCartAction === undefined
|
||||
? open(givenUrl)
|
||||
: link.openCartAction(browser));
|
||||
}
|
||||
|
||||
sendNotification(link, store);
|
||||
@@ -135,10 +303,64 @@ async function lookupCardInStock(store: Store, page: Page, link: Link) {
|
||||
type: 'textContent'
|
||||
};
|
||||
|
||||
if (store.labels.inStock) {
|
||||
const options = {...baseOptions, requireVisible: true, type: 'outerHTML' as const};
|
||||
if (store.labels.captcha) {
|
||||
if (await pageIncludesLabels(page, store.labels.captcha, baseOptions)) {
|
||||
logger.warn(Print.captcha(link, store, true));
|
||||
await delay(getSleepTime(store));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!await pageIncludesLabels(page, store.labels.inStock, options)) {
|
||||
if (store.labels.bannedSeller) {
|
||||
if (
|
||||
await pageIncludesLabels(page, store.labels.bannedSeller, baseOptions)
|
||||
) {
|
||||
logger.warn(Print.bannedSeller(link, store, true));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (store.labels.maxPrice) {
|
||||
const maxPrice = config.store.maxPrice.series[link.series];
|
||||
|
||||
link.price = await getPrice(page, store.labels.maxPrice, baseOptions);
|
||||
|
||||
if (link.price && link.price > maxPrice && maxPrice > 0) {
|
||||
logger.info(Print.maxPrice(link, store, maxPrice, true));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Fixme: currently causing issues
|
||||
// Do API inventory validation in realtime (no cache) if available
|
||||
// if (
|
||||
// store.realTimeInventoryLookup !== undefined &&
|
||||
// link.itemNumber !== undefined
|
||||
// ) {
|
||||
// return store.realTimeInventoryLookup(link.itemNumber);
|
||||
// }
|
||||
|
||||
if (store.labels.inStock) {
|
||||
const options = {
|
||||
...baseOptions,
|
||||
requireVisible: true,
|
||||
type: 'outerHTML' as const
|
||||
};
|
||||
|
||||
if (!(await pageIncludesLabels(page, store.labels.inStock, options))) {
|
||||
logger.info(Print.outOfStock(link, store, true));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (link.labels?.inStock) {
|
||||
const options = {
|
||||
...baseOptions,
|
||||
requireVisible: true,
|
||||
type: 'outerHTML' as const
|
||||
};
|
||||
|
||||
if (!(await pageIncludesLabels(page, link.labels.inStock, options))) {
|
||||
logger.info(Print.outOfStock(link, store, true));
|
||||
return false;
|
||||
}
|
||||
@@ -151,52 +373,6 @@ async function lookupCardInStock(store: Store, page: Page, link: Link) {
|
||||
}
|
||||
}
|
||||
|
||||
if (store.labels.bannedSeller) {
|
||||
if (await pageIncludesLabels(page, store.labels.bannedSeller, baseOptions)) {
|
||||
logger.warn(Print.bannedSeller(link, store, true));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (store.labels.maxPrice) {
|
||||
let price;
|
||||
let maxPrice = 0;
|
||||
switch (link.series) {
|
||||
case '3070':
|
||||
price = await cardPrice(page, store.labels.maxPrice, config.store.maxPrice.series['3070'], baseOptions);
|
||||
maxPrice = config.store.maxPrice.series['3070'];
|
||||
break;
|
||||
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) {
|
||||
logger.info(Print.maxPrice(link, store, price, maxPrice, true));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (store.labels.captcha) {
|
||||
if (await pageIncludesLabels(page, store.labels.captcha, baseOptions)) {
|
||||
logger.warn(Print.captcha(link, store, true));
|
||||
await delay(getSleepTime(store));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Do API inventory validation in realtime (no cache) if available
|
||||
if (store.realTimeInventoryLookup !== undefined && link.itemNumber !== undefined) {
|
||||
return store.realTimeInventoryLookup(link.itemNumber);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -206,23 +382,10 @@ export async function tryLookupAndLoop(browser: Browser, store: Store) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (store.linksBuilder) {
|
||||
const lastRunTime = linkBuilderLastRunTimes[store.name] ?? -1;
|
||||
const ttl = store.linksBuilder.ttl ?? Number.MAX_SAFE_INTEGER;
|
||||
if (lastRunTime === -1 || (Date.now() - lastRunTime) > ttl) {
|
||||
try {
|
||||
await fetchLinks(store, browser);
|
||||
linkBuilderLastRunTimes[store.name] = Date.now();
|
||||
} catch (error) {
|
||||
logger.error(error.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
logger.debug(`[${store.name}] Starting lookup...`);
|
||||
try {
|
||||
await lookup(browser, store);
|
||||
} catch (error) {
|
||||
} catch (error: unknown) {
|
||||
logger.error(error);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ export const Adorama: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
model: 'xlr8',
|
||||
model: 'xlr8 revel',
|
||||
series: '3080',
|
||||
url: 'https://www.adorama.com/pnv301tfxmpb.html'
|
||||
},
|
||||
@@ -72,13 +72,13 @@ export const Adorama: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
series: '3080',
|
||||
url: 'https://www.adorama.com/png30801tfxb.html'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
series: '3080',
|
||||
url: 'https://www.adorama.com/asrx3080o10g.html'
|
||||
},
|
||||
@@ -120,7 +120,7 @@ export const Adorama: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
series: '3090',
|
||||
url: 'https://www.adorama.com/asrx3090o24g.html'
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ export const AlternateNL: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'tuf gaming',
|
||||
model: 'tuf',
|
||||
series: '3080',
|
||||
url: 'https://www.alternate.nl/product/1672251'
|
||||
},
|
||||
@@ -54,19 +54,19 @@ export const AlternateNL: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'tuf oc gaming',
|
||||
model: 'tuf oc',
|
||||
series: '3080',
|
||||
url: 'https://www.alternate.nl/product/1672634'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc gaming',
|
||||
model: 'strix oc',
|
||||
series: '3080',
|
||||
url: 'https://www.alternate.nl/product/1672867'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3 black gaming',
|
||||
model: 'xc3 black',
|
||||
series: '3080',
|
||||
url: 'https://www.alternate.nl/product/1673512'
|
||||
},
|
||||
@@ -78,13 +78,13 @@ export const AlternateNL: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3 ultra gaming',
|
||||
model: 'xc3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.alternate.nl/product/1674164'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix gaming',
|
||||
model: 'strix',
|
||||
series: '3080',
|
||||
url: 'https://www.alternate.nl/product/1672868'
|
||||
},
|
||||
@@ -108,7 +108,7 @@ export const AlternateNL: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3 gaming',
|
||||
model: 'xc3',
|
||||
series: '3080',
|
||||
url: 'https://www.alternate.nl/product/1673520'
|
||||
},
|
||||
@@ -126,7 +126,7 @@ export const AlternateNL: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'ftw3 ultra gaming',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.alternate.nl/product/1673524'
|
||||
},
|
||||
@@ -138,7 +138,7 @@ export const AlternateNL: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'ftw3 gaming',
|
||||
model: 'ftw3',
|
||||
series: '3080',
|
||||
url: 'https://www.alternate.nl/product/1673517'
|
||||
},
|
||||
@@ -169,4 +169,3 @@ export const AlternateNL: Store = {
|
||||
],
|
||||
name: 'alternate-nl'
|
||||
};
|
||||
|
||||
|
||||
+105
-10
@@ -4,33 +4,44 @@ export const Alternate: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
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: {
|
||||
container: 'div.price > span',
|
||||
euroFormat: true
|
||||
},
|
||||
outOfStock: {
|
||||
container: '.stockStatus',
|
||||
text: ['liefertermin unbekannt']
|
||||
}
|
||||
outOfStock: [
|
||||
{
|
||||
container: '.stockStatus',
|
||||
text: ['liefertermin unbekannt']
|
||||
},
|
||||
{
|
||||
container: '.stockStatus',
|
||||
text: ['Artikel kann nicht gekauft werden']
|
||||
}
|
||||
]
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.alternate.de/product/1516616'
|
||||
url: 'https://www.alternate.de/product/1662088'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
series: '3080',
|
||||
url: 'https://www.alternate.de/product/1672868'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
series: '3080',
|
||||
url: 'https://www.alternate.de/product/1672867'
|
||||
},
|
||||
@@ -186,13 +197,13 @@ export const Alternate: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
series: '3090',
|
||||
url: 'https://www.alternate.de/product/1672870'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
series: '3090',
|
||||
url: 'https://www.alternate.de/product/1672872'
|
||||
},
|
||||
@@ -315,6 +326,90 @@ export const Alternate: Store = {
|
||||
model: 'trinity',
|
||||
series: '3090',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'xfx',
|
||||
model: 'merc',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.alternate.de/product/1698792'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
model: 'nitro oc se',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.alternate.de/product/1696478'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
model: 'nitro oc',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.alternate.de/product/1696482'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'strix lc',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.alternate.de/product/1695392'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.alternate.de/product/1697044'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url: 'https://www.alternate.de/product/1675115'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url: 'https://www.alternate.de/product/1675117'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.alternate.de/product/1676874'
|
||||
}
|
||||
],
|
||||
name: 'alternate'
|
||||
|
||||
@@ -11,124 +11,209 @@ export const AmazonCa: Store = {
|
||||
text: ['add to cart']
|
||||
},
|
||||
maxPrice: {
|
||||
container: 'span[class*="PriceString"]',
|
||||
euroFormat: false
|
||||
container: '#priceblock_ourprice'
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B07PBLD2MX&Quantity.1=1',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.amazon.ca/dp/B07PBLD2MX'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR7SV3M&Quantity.1=1',
|
||||
model: 'gaming x trio',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.ca/dp/B08HR7SV3M'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.ca/dp/B08HR5SXPS'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR3DPGW&Quantity.1=1',
|
||||
model: 'ftw3',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.ca/dp/B08HR3DPGW'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.ca/dp/B08HR3Y5GQ'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1',
|
||||
model: 'xc3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.ca/dp/B08HR55YB5'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1',
|
||||
model: 'xc3',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.ca/dp/B08HR4RJ3Q'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1',
|
||||
model: 'xc3 black',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.ca/dp/B08HR6FMF3'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1',
|
||||
model: 'gaming oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.ca/dp/B08HJTH61J'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1',
|
||||
model: 'eagle oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.ca/dp/B08HJS2JLJ'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1',
|
||||
model: 'tuf',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.ca/dp/B08HHDP9DW'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1',
|
||||
model: 'tuf oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.ca/dp/B08HH5WF97'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1',
|
||||
model: 'trinity',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.ca/dp/B08HJNKT3P'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1',
|
||||
model: 'trinity',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.ca/dp/B08HJQ182D'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.ca/dp/B08HR9D2JS'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1',
|
||||
model: 'gaming oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.ca/dp/B08HJRF2CN'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1',
|
||||
model: 'eagle oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.ca/dp/B08HJPDJTY'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1',
|
||||
model: 'tuf',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.ca/dp/B08HJGNJ81'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1',
|
||||
model: 'tuf oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.ca/dp/B08HJLLF7G'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url: 'https://www.amazon.ca/dp/B08166SLDF'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url: 'https://www.amazon.ca/dp/B0815XFSGK'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
|
||||
model: '5900x',
|
||||
series: 'ryzen5900',
|
||||
url: 'https://www.amazon.ca/dp/B08164VTWH'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url: 'https://www.amazon.ca/dp/B0815Y8J9N'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08GSC5D9G&Quantity.1=1',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.amazon.ca/dp/B08GSC5D9G'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
cartUrl:
|
||||
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08GS1N24H&Quantity.1=1',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url: 'https://www.amazon.ca/dp/B08GS1N24H'
|
||||
}
|
||||
],
|
||||
name: 'amazon-ca'
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const AmazonDeWarehouse: Store = {
|
||||
backoffStatusCodes: [403, 429, 503],
|
||||
labels: {
|
||||
captcha: {
|
||||
container: 'body',
|
||||
text: [
|
||||
'geben sie die unten angezeigten zeichen ein',
|
||||
'geben sie die zeichen unten ein'
|
||||
]
|
||||
},
|
||||
inStock: {
|
||||
container: '#a-autoid-0-announce',
|
||||
text: ['In den Einkaufswagen']
|
||||
},
|
||||
maxPrice: {
|
||||
container: 'a-size-large a-color-price olpOfferPrice a-text-bold',
|
||||
euroFormat: true
|
||||
},
|
||||
outOfStock: [
|
||||
{
|
||||
container: '.a-size-medium',
|
||||
text: [
|
||||
'Derzeit gibt es keine Verkäufer, die diesen Artikel an Ihren Standort liefern können'
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.amazon.de/gp/offer-listing/B07PW9VBK5'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.amazon.de/gp/offer-listing/B08H93ZRK9'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url: 'https://www.amazon.de/gp/offer-listing/B08H98GVK8'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url: 'https://www.amazon.de/gp/offer-listing/B087VM5XC6'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url: 'https://www.amazon.de/gp/offer-listing/B08H93ZRLL'
|
||||
}
|
||||
],
|
||||
name: 'amazon-de-warehouse'
|
||||
};
|
||||
+211
-12
@@ -5,353 +5,552 @@ export const AmazonDe: Store = {
|
||||
labels: {
|
||||
captcha: {
|
||||
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: {
|
||||
container: '#desktop_buybox',
|
||||
container: '#add-to-cart-button',
|
||||
text: ['in den einkaufswagen']
|
||||
},
|
||||
maxPrice: {
|
||||
container: 'span[class*="PriceString"]',
|
||||
container: '#priceblock_ourprice',
|
||||
euroFormat: true
|
||||
}
|
||||
},
|
||||
outOfStock: [
|
||||
{
|
||||
container: '#availability',
|
||||
text: ['Derzeit nicht verfügbar']
|
||||
}
|
||||
]
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B07PW9VBK5&Quantity.1=1',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.amazon.de/dp/B083JX52VG/'
|
||||
url: 'https://www.amazon.de/dp/B07PW9VBK5'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN7VVLJ&Quantity.1=1',
|
||||
model: 'strix',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HN7VVLJ'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN6KYS3&Quantity.1=1',
|
||||
model: 'strix oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HN6KYS3'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN37VQK&Quantity.1=1',
|
||||
model: 'tuf',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HN37VQK'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN4DSTC&Quantity.1=1',
|
||||
model: 'tuf oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HN4DSTC'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGBYWQ6&Quantity.1=1',
|
||||
model: 'ftw3',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HGBYWQ6'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGYXP4C&Quantity.1=1',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HGYXP4C'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGLN78Q&Quantity.1=1',
|
||||
model: 'xc3',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HGLN78Q'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HH1BMQQ&Quantity.1=1',
|
||||
model: 'xc3 black',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HH1BMQQ'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HJ9XFNM&Quantity.1=1',
|
||||
model: 'xc3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HJ9XFNM'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KHLDS72&Quantity.1=1',
|
||||
model: 'aorus master',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08KHLDS72'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HHZVZ3N&Quantity.1=1',
|
||||
model: 'eagle oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HHZVZ3N'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HLZXHZY&Quantity.1=1',
|
||||
model: 'gaming oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HLZXHZY'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KH7RL89&Quantity.1=1',
|
||||
model: 'vision oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08KH7RL89'
|
||||
},
|
||||
{
|
||||
brand: 'inno3d',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08JD6QPXD&Quantity.1=1',
|
||||
model: 'twin x2 oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08JD6QPXD'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HM4V2DH&Quantity.1=1',
|
||||
model: 'gaming x trio',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HM4V2DH'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HM4M621&Quantity.1=1',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HM4M621'
|
||||
},
|
||||
{
|
||||
brand: 'palit',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08JCVWTQY&Quantity.1=1',
|
||||
model: 'gaming pro',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08JCVWTQY'
|
||||
},
|
||||
{
|
||||
brand: 'palit',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08JCKYYL8&Quantity.1=1',
|
||||
model: 'gaming pro oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08JCKYYL8'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HR1NPPQ&Quantity.1=1',
|
||||
model: 'trinity',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.de/dp/B08HR1NPPQ'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN642LY&Quantity.1=1',
|
||||
model: 'strix',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HN642LY'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN51T8Q&Quantity.1=1',
|
||||
model: 'strix oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HN51T8Q'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN4FLFJ&Quantity.1=1',
|
||||
model: 'tuf',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HN4FLFJ'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN5B8FJ&Quantity.1=1',
|
||||
model: 'tuf oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HN5B8FJ'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGFNPJQ&Quantity.1=1',
|
||||
model: 'ftw3',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HGFNPJQ'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08J5NMDP7&Quantity.1=1',
|
||||
model: 'ftw3',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08J5NMDP7'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGS1SXH&Quantity.1=1',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HGS1SXH'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGZ4XSZ&Quantity.1=1',
|
||||
model: 'xc3',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HGZ4XSZ'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGKQ527&Quantity.1=1',
|
||||
model: 'xc3 black',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HGKQ527'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGTNDL4&Quantity.1=1',
|
||||
model: 'xc3 ultra',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HGTNDL4'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KH7R4FQ&Quantity.1=1',
|
||||
model: 'aorus master',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08KH7R4FQ'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1',
|
||||
model: 'eagle oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HJPDJTY'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KHKDTSJ&Quantity.1=1',
|
||||
model: 'turbo',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08KHKDTSJ'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1',
|
||||
model: 'gaming oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HJRF2CN'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HRBW6VB&Quantity.1=1',
|
||||
model: 'gaming x trio',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HRBW6VB'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HM661YM&Quantity.1=1',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HM661YM'
|
||||
},
|
||||
{
|
||||
brand: 'palit',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08JQQ1VD1&Quantity.1=1',
|
||||
model: 'gaming pro',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08JQQ1VD1'
|
||||
},
|
||||
{
|
||||
brand: 'nvidia',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HR6ZBYJ&Quantity.1=1',
|
||||
model: 'founders edition',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HR6ZBYJ'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1',
|
||||
model: 'trinity',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.de/dp/B08HJQ182D'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HSJ1622&Quantity.1=1',
|
||||
model: 'dual',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08HSJ1622'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KHFZN9P&Quantity.1=1',
|
||||
model: 'dual oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08KHFZN9P'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HT7PR9Y&Quantity.1=1',
|
||||
model: 'strix',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08HT7PR9Y'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08L8JNTXQ&Quantity.1=1',
|
||||
model: 'strix oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08L8JNTXQ'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KWPDXJZ&Quantity.1=1',
|
||||
model: 'ventus 2x oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08KWPDXJZ'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08L6PCZTR&Quantity.1=1',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08L6PCZTR'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KWN2LZG&Quantity.1=1',
|
||||
model: 'gaming x trio',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08KWN2LZG'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08M13DXSZ&Quantity.1=1',
|
||||
model: 'vision oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08M13DXSZ'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KHL21CV&Quantity.1=1',
|
||||
model: 'gaming oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08KHL21CV'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KHL2J5X&Quantity.1=1',
|
||||
model: 'eagle oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08KHL2J5X'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08L3QCZKZ&Quantity.1=1',
|
||||
model: 'xc3 black',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08L3QCZKZ'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08L3QZP7W&Quantity.1=1',
|
||||
model: 'xc3',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08L3QZP7W'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08L3Q41SM&Quantity.1=1',
|
||||
model: 'xc3 ultra',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08L3Q41SM'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HRBR7K9&Quantity.1=1',
|
||||
model: 'twin edge',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08HRBR7K9'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08LBVNKT1&Quantity.1=1',
|
||||
model: 'twin edge oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08LBVNKT1'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HBF5L3K&Quantity.1=1',
|
||||
model: 'dual fan',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08HBF5L3K'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
model: 'xlr8 rgb',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HBJB7YD&Quantity.1=1',
|
||||
model: 'xlr8 revel',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.de/dp/B08HBJB7YD'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url: 'https://www.amazon.de/dp/B08166SLDF'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url: 'https://www.amazon.de/dp/B0815XFSGK'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
|
||||
model: '5900x',
|
||||
series: 'ryzen5900',
|
||||
url: 'https://www.amazon.de/dp/B08164VTWH'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url: 'https://www.amazon.de/dp/B0815Y8J9N'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08H93ZRK9&Quantity.1=1',
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '#productTitle',
|
||||
text: ['sony playstation 5']
|
||||
}
|
||||
},
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.amazon.de/dp/B08H93ZRK9'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
cartUrl:
|
||||
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08H98GVK8&Quantity.1=1',
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '#productTitle',
|
||||
text: ['sony playstation 5']
|
||||
}
|
||||
},
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url: 'https://www.amazon.de/dp/B08H98GVK8'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
// Fixme: disabled because of #1095, enable when working again
|
||||
// cartUrl:
|
||||
// 'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08H93ZRLL&Quantity.1=1',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url: 'https://www.amazon.de/dp/B08H93ZRLL'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
// Fixme: disabled because of #1095, enable when working again
|
||||
// cartUrl:
|
||||
// 'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B087VM5XC6&Quantity.1=1',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url: 'https://www.amazon.de/dp/B087VM5XC6'
|
||||
}
|
||||
],
|
||||
name: 'amazon-de'
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const AmazonEs: Store = {
|
||||
backoffStatusCodes: [403, 429, 503],
|
||||
labels: {
|
||||
captcha: {
|
||||
container: 'body',
|
||||
@@ -11,94 +12,191 @@ export const AmazonEs: Store = {
|
||||
text: ['añadir a la cesta']
|
||||
},
|
||||
maxPrice: {
|
||||
container: 'span[class*="PriceString"]',
|
||||
euroFormat: true
|
||||
}
|
||||
container: '#priceblock_ourprice'
|
||||
},
|
||||
outOfStock: [
|
||||
{
|
||||
container: '#availability',
|
||||
text: ['No disponible']
|
||||
}
|
||||
]
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B07PW9VBK5&Quantity.1=1',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.amazon.es/dp/B083JX52VG/'
|
||||
url: 'https://www.amazon.es/dp/B07PW9VBK5'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HM4V2DH&Quantity.1=1',
|
||||
model: 'gaming x trio',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HM4V2DH'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HGYXP4C&Quantity.1=1',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HGYXP4C'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HJ9XFNM&Quantity.1=1',
|
||||
model: 'xc3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HJ9XFNM'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HGBYWQ6&Quantity.1=1',
|
||||
model: 'ftw3',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HGBYWQ6'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HGLN78Q&Quantity.1=1',
|
||||
model: 'xc3',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HGLN78Q'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HH1BMQQ&Quantity.1=1',
|
||||
model: 'xc3 black',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HH1BMQQ'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HLZXHZY&Quantity.1=1',
|
||||
model: 'gaming oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HLZXHZY'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HHZVZ3N&Quantity.1=1',
|
||||
model: 'eagle oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HHZVZ3N'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HN37VQK&Quantity.1=1',
|
||||
model: 'tuf',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HN37VQK'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HN4DSTC&Quantity.1=1',
|
||||
model: 'tuf oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HN4DSTC'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HN6KYS3&Quantity.1=1',
|
||||
model: 'strix oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HN6KYS3'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HM4M621&Quantity.1=1',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HM4M621'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HR1NPPQ&Quantity.1=1',
|
||||
model: 'trinity',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.es/dp/B08HR1NPPQ'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url: 'https://www.amazon.es/dp/B08166SLDF'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url: 'https://www.amazon.es/dp/B0815XFSGK'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
|
||||
model: '5900x',
|
||||
series: 'ryzen5900',
|
||||
url: 'https://www.amazon.es/dp/B08164VTWH'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url: 'https://www.amazon.es/dp/B0815Y8J9N'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08KKJ37F7&Quantity.1=1',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.amazon.es/dp/B08KKJ37F7'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08KJF2D25&Quantity.1=1',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url: 'https://www.amazon.es/dp/B08KJF2D25'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08H93ZRLL&Quantity.1=1',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url: 'https://www.amazon.es/dp/B08H93ZRLL'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
cartUrl:
|
||||
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B087VM5XC6&Quantity.1=1',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url: 'https://www.amazon.es/dp/B087VM5XC6'
|
||||
}
|
||||
],
|
||||
name: 'amazon-es'
|
||||
|
||||
@@ -0,0 +1,190 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const AmazonFr: Store = {
|
||||
backoffStatusCodes: [403, 429, 503],
|
||||
labels: {
|
||||
captcha: {
|
||||
container: 'body',
|
||||
text: ['entrez les caractères que vous voyez ci-dessous']
|
||||
},
|
||||
inStock: {
|
||||
container: '#desktop_buybox',
|
||||
text: ['ajouter au panier']
|
||||
},
|
||||
maxPrice: {
|
||||
container: '#priceblock_ourprice',
|
||||
euroFormat: true
|
||||
},
|
||||
outOfStock: [
|
||||
{
|
||||
container: '#availability',
|
||||
text: ['Actuellement indisponible']
|
||||
}
|
||||
]
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.amazon.fr/dp/B07PW9VBK5'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'gaming x trio',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.fr/dp/B08HR7SV3M'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.fr/dp/B08HR5SXPS'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'ftw3',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.fr/dp/B08HR3DPGW'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.fr/dp/B08HR3Y5GQ'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.fr/dp/B08HR55YB5'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.fr/dp/B08HR4RJ3Q'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3 black',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.fr/dp/B08HR6FMF3'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.fr/dp/B08HJTH61J'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.fr/dp/B08HJS2JLJ'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'tuf',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.fr/dp/B08HHDP9DW'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'tuf oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.fr/dp/B08HH5WF97'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'trinity',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.fr/dp/B08HJNKT3P'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'trinity',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.fr/dp/B08HJQ182D'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.fr/dp/B08HR9D2JS'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.fr/dp/B08HJRF2CN'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.fr/dp/B08HJPDJTY'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'tuf',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.fr/dp/B08HJGNJ81'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'tuf oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.fr/dp/B08HJLLF7G'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url: 'https://www.amazon.fr/dp/B08166SLDF'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url: 'https://www.amazon.fr/dp/B0815XFSGK'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5900x',
|
||||
series: 'ryzen5900',
|
||||
url: 'https://www.amazon.fr/dp/B08164VTWH'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url: 'https://www.amazon.fr/dp/B0815Y8J9N'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.amazon.fr/dp/B08H93ZRK9'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url: 'https://www.amazon.fr/dp/B08H98GVK8'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url: 'https://www.amazon.fr/dp/B08H93ZRLL'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url: 'https://www.amazon.fr/dp/B087VM5XC6'
|
||||
}
|
||||
],
|
||||
name: 'amazon-fr'
|
||||
};
|
||||
@@ -0,0 +1,413 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const AmazonIt: Store = {
|
||||
backoffStatusCodes: [403, 429, 503],
|
||||
labels: {
|
||||
captcha: {
|
||||
container: 'body',
|
||||
text: ['enter the characters you see below']
|
||||
},
|
||||
inStock: {
|
||||
container: '#desktop_buybox',
|
||||
text: ['Aggiungi al carrello']
|
||||
},
|
||||
maxPrice: {
|
||||
container: '#priceblock_ourprice'
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B07PW9VBK5&Quantity.1=1',
|
||||
model: 'dual',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B07PW9VBK5'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8HPKR6&Quantity.1=1',
|
||||
model: 'dual',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08L8HPKR6'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8JNTXQ&Quantity.1=1',
|
||||
model: 'strix',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08L8JNTXQ'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8KC1J7&Quantity.1=1',
|
||||
model: 'tuf',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08L8KC1J7'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1',
|
||||
model: 'gaming oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08KY266MG'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KWN2LZG&Quantity.1=1',
|
||||
model: 'gaming',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08KWN2LZG'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBJB7YD&Quantity.1=1',
|
||||
model: 'xlr8 revel',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08HBJB7YD'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBF5L3K&Quantity.1=1',
|
||||
model: 'xlr8 uprising',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08HBF5L3K'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KWPDXJZ&Quantity.1=1',
|
||||
model: 'ventus 2x oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08KWPDXJZ'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KWLMZV4&Quantity.1=1',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08KWLMZV4'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08LF32LJ6&Quantity.1=1',
|
||||
model: 'gaming',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08LF32LJ6'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8L71SM&Quantity.1=1',
|
||||
model: 'xc3 ultra',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08L8L71SM'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8L9TCZ&Quantity.1=1',
|
||||
model: 'ftw3',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08L8L9TCZ'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1',
|
||||
model: 'gaming oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08KY266MG'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08M13DXSZ&Quantity.1=1',
|
||||
model: 'vision oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08M13DXSZ'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KXZV626&Quantity.1=1',
|
||||
model: 'eagle',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.it/dp/B08KXZV626'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1',
|
||||
model: 'xlr8 revel',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.it/dp/B08HBR7QBM'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1',
|
||||
model: 'xlr8 revel',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.it/dp/B08HBTJMLJ'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.it/dp/B08HR3Y5GQ'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1',
|
||||
model: 'xc3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.it/dp/B08HR55YB5'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1',
|
||||
model: 'xc3',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.it/dp/B08HR4RJ3Q'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1',
|
||||
model: 'xc3 black',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.it/dp/B08HR6FMF3'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1',
|
||||
model: 'gaming oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.it/dp/B08HJTH61J'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1',
|
||||
model: 'eagle oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.it/dp/B08HJS2JLJ'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1',
|
||||
model: 'tuf oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.it/dp/B08HH5WF97'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1',
|
||||
model: 'tuf',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.it/dp/B08HHDP9DW'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1',
|
||||
model: 'strix oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.it/dp/B08J6GMWCQ'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.it/dp/B08HR5SXPS'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1',
|
||||
model: 'trinity',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.it/dp/B08HJNKT3P'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1',
|
||||
model: 'trinity',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.it/dp/B08HJQ182D'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1',
|
||||
model: 'xlr8 revel',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.it/dp/B08HBQWBHH'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1',
|
||||
model: 'xlr8 revel',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.it/dp/B08HBVX53D'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HRBW6VB&Quantity.1=1',
|
||||
model: 'gaming x trio',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.it/dp/B08HRBW6VB'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1',
|
||||
model: 'ventus 3x',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.it/dp/B08HR9D2JS'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1',
|
||||
model: 'gaming oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.it/dp/B08HJRF2CN'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1',
|
||||
model: 'eagle oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.it/dp/B08HJPDJTY'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1',
|
||||
model: 'tuf oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.it/dp/B08HJGNJ81'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1',
|
||||
model: 'tuf oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.it/dp/B08HJLLF7G'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url: 'https://www.amazon.it/dp/B08166SLDF'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url: 'https://www.amazon.it/dp/product/B0815XFSGK'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
|
||||
model: '5900x',
|
||||
series: 'ryzen5900',
|
||||
url: 'https://www.amazon.it/dp/B08164VTWH'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url: 'https://www.amazon.it/dp/B0815Y8J9N'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08MVC76SR&Quantity.1=1',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amazon.it/dp/B08MVC76SR'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08MVCLBWK&Quantity.1=1',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800',
|
||||
url: 'https://www.amazon.it/dp/B08MVCLBWK'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KKJ37F7&Quantity.1=1',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.amazon.it/dp/B08KKJ37F7'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KJF2D25&Quantity.1=1',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url: 'https://www.amazon.it/dp/B08KJF2D25'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08JDSW1ZW&Quantity.1=1',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url: 'https://www.amazon.it/dp/B08JDSW1ZW'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08JDTCXRG&Quantity.1=1',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url: 'https://www.amazon.it/dp/B08JDTCXRG'
|
||||
},
|
||||
{
|
||||
brand: 'corsair',
|
||||
cartUrl:
|
||||
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B07M63H81H&Quantity.1=1',
|
||||
model: '750 platinum',
|
||||
series: 'sf',
|
||||
url: 'https://www.amazon.it/dp/B07M63H81H'
|
||||
}
|
||||
],
|
||||
name: 'amazon-it'
|
||||
};
|
||||
@@ -8,10 +8,15 @@ export const AmazonNl: Store = {
|
||||
},
|
||||
inStock: {
|
||||
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: {
|
||||
container: 'span[class*="PriceString"]',
|
||||
container: '#priceblock_ourprice',
|
||||
euroFormat: true
|
||||
},
|
||||
outOfStock: [
|
||||
@@ -28,39 +33,83 @@ export const AmazonNl: Store = {
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
cartUrl:
|
||||
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B083GGYNQ6&Quantity.1=1',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.amazon.nl/dp/B083GGYNQ6'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HM4M621&Quantity.1=1',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.nl/dp/B08HM4M621'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HM4V2DH&Quantity.1=1',
|
||||
model: 'gaming x trio',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.nl/dp/B08HM4V2DH'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HJ9XFNM&Quantity.1=1',
|
||||
model: 'xc3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.nl/dp/B08HJ9XFNM'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HH1BMQQ&Quantity.1=1',
|
||||
model: 'xc3 black',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.nl/dp/B08HH1BMQQ'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix',
|
||||
cartUrl:
|
||||
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HN7VVLJ&Quantity.1=1',
|
||||
model: 'strix',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.nl/dp/B08HN7VVLJ'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url: 'https://www.amazon.nl/dp/B08166SLDF'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url: 'https://www.amazon.nl/dp/B0815XFSGK'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
|
||||
model: '5900x',
|
||||
series: 'ryzen5900',
|
||||
url: 'https://www.amazon.nl/dp/B08164VTWH'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url: 'https://www.amazon.nl/dp/B0815Y8J9N'
|
||||
}
|
||||
],
|
||||
name: 'amazon-nl'
|
||||
|
||||
@@ -14,7 +14,7 @@ export const AmazonUk: Store = {
|
||||
text: ['in stock']
|
||||
},
|
||||
maxPrice: {
|
||||
container: 'span[class*="PriceString"]'
|
||||
container: '#priceblock_ourprice'
|
||||
},
|
||||
outOfStock: [
|
||||
{
|
||||
@@ -30,15 +30,50 @@ export const AmazonUk: Store = {
|
||||
links: [
|
||||
{
|
||||
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=B0753R2TWC&Quantity.1=1',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.amazon.co.uk/dp/B081265T5Z/'
|
||||
url: 'https://www.amazon.co.uk/dp/B0753R2TWC/'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
cartUrl:
|
||||
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08H95Y452&Quantity.1=1',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.amazon.co.uk/dp/B08H95Y452'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
cartUrl:
|
||||
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08H97NYGP&Quantity.1=1',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url: 'https://www.amazon.co.uk/dp/B08H97NYGP'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
cartUrl:
|
||||
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08H93GKNJ&Quantity.1=1',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url: 'https://www.amazon.co.uk/dp/B08H93GKNJ'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
cartUrl:
|
||||
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08GD9MNZB&Quantity.1=1',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url: 'https://www.amazon.co.uk/dp/B08GD9MNZB'
|
||||
}
|
||||
],
|
||||
linksBuilder: {
|
||||
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[] = [];
|
||||
for (let i = 0; i < productElements.length; i++) {
|
||||
const productElement = productElements.eq(i);
|
||||
@@ -49,7 +84,9 @@ export const AmazonUk: Store = {
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
if (!title || !new RegExp(`RTX.*${series}`, 'i').exec(title)) {
|
||||
@@ -67,7 +104,7 @@ export const AmazonUk: Store = {
|
||||
url
|
||||
});
|
||||
} else {
|
||||
logger.error(`Failed to parse card: ${title}`);
|
||||
logger.error(`Failed to parse card: ${title}`, {url});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,6 +125,11 @@ export const AmazonUk: Store = {
|
||||
'https://www.amazon.co.uk/s?k=%2B%22RTX+3090%22+-3080+-GTX&i=computers&rh=n%3A430500031%2Cp_n_availability%3A419162031&s=relevancerank&dc&qid=1601675291',
|
||||
'https://www.amazon.co.uk/s?k=%2B%22RTX+3090%22+-3080+-GTX&i=computers&rh=n%3A430500031%2Cp_n_availability%3A419162031&s=relevancerank&dc&qid=1601675594&page=2'
|
||||
]
|
||||
},
|
||||
{
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.amazon.co.uk/s?k=%2B%22RTX+3060+TI%22+-2060+-2070+-2080+-SUPER+-GTX&i=computers&rh=n%3A430500031%2Cp_n_availability%3A419162031&s=relevancerank&dc&qid=1601675291sb_noss'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+443
-38
@@ -1,201 +1,606 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const Amazon: Store = {
|
||||
backoffStatusCodes: [403, 429, 503],
|
||||
labels: {
|
||||
captcha: {
|
||||
container: 'body',
|
||||
text: ['enter the characters you see below']
|
||||
},
|
||||
inStock: {
|
||||
container: '#desktop_buybox',
|
||||
text: ['add to cart']
|
||||
},
|
||||
inStock: [
|
||||
{
|
||||
container: '#add-to-cart-button',
|
||||
text: ['add to cart']
|
||||
},
|
||||
{
|
||||
container: '#buy-now-button',
|
||||
text: ['buy now']
|
||||
}
|
||||
],
|
||||
maxPrice: {
|
||||
container: 'span[class*="PriceString"]'
|
||||
container: '#priceblock_ourprice'
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
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=B083248S3B&Quantity.1=1',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.amazon.com/dp/B07TDN1SC5'
|
||||
url: 'https://www.amazon.com/dp/B083248S3B'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8LG4M3&Quantity.1=1',
|
||||
model: 'dual',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.com/dp/B08L8LG4M3'
|
||||
},
|
||||
{
|
||||
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: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8JNTXQ&Quantity.1=1',
|
||||
model: 'strix',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.com/dp/B08L8JNTXQ'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8KC1J7&Quantity.1=1',
|
||||
model: 'tuf',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.com/dp/B08L8KC1J7'
|
||||
},
|
||||
{
|
||||
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: 'msi',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KWN2LZG&Quantity.1=1',
|
||||
model: 'gaming',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.com/dp/B08KWN2LZG'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1',
|
||||
model: 'xlr8',
|
||||
cartUrl:
|
||||
'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=B08KWPDXJZ&Quantity.1=1',
|
||||
model: 'ventus 2x oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.com/dp/B08KWPDXJZ'
|
||||
},
|
||||
{
|
||||
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: 'zotac',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08LF32LJ6&Quantity.1=1',
|
||||
model: 'gaming',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.com/dp/B08LF32LJ6'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8L71SM&Quantity.1=1',
|
||||
model: 'xc3 ultra',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.com/dp/B08L8L71SM'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8L9TCZ&Quantity.1=1',
|
||||
model: 'ftw3',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.com/dp/B08L8L9TCZ'
|
||||
},
|
||||
{
|
||||
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: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08M13DXSZ&Quantity.1=1',
|
||||
model: 'vision oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.com/dp/B08M13DXSZ'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08M4YFNX2&Quantity.1=1',
|
||||
model: 'gaming oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.com/dp/B08M4YFNX2'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KXZV626&Quantity.1=1',
|
||||
model: 'eagle',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.com/dp/B08KXZV626'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KY322TH&Quantity.1=1',
|
||||
model: 'eagle oc',
|
||||
series: '3070',
|
||||
url: 'https://www.amazon.com/dp/B08KY322TH'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1',
|
||||
model: 'xlr8 revel',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HBR7QBM'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1',
|
||||
model: 'xlr8 rgb',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1',
|
||||
model: 'xlr8 revel',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HBTJMLJ'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HR7SV3M'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HR3Y5GQ'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HR55YB5'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HR3DPGW'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HR4RJ3Q'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HR6FMF3'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HJTH61J'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HJS2JLJ'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HH5WF97'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HHDP9DW'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6F174Z&Quantity.1=1',
|
||||
model: 'rog strix oc',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6F174Z&Quantity.1=1',
|
||||
model: 'strix oc',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08J6F174Z'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1',
|
||||
model: 'rog strix oc',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1',
|
||||
model: 'strix oc',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.com/dp/B08J6GMWCQ'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HR5SXPS'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3080',
|
||||
url: 'https://www.amazon.com/dp/B08HJNKT3P'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.com/dp/B08HJQ182D'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1',
|
||||
model: 'xlr8',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1',
|
||||
model: 'xlr8 revel',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.com/dp/B08HBQWBHH'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1',
|
||||
model: 'xlr8',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1',
|
||||
model: 'xlr8 revel',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.com/dp/B08HBVX53D'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.com/dp/B08HRBW6VB'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.com/dp/B08HR9D2JS'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.com/dp/B08HJRF2CN'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.com/dp/B08HJPDJTY'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.com/dp/B08HJGNJ81'
|
||||
},
|
||||
{
|
||||
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',
|
||||
series: '3090',
|
||||
url: 'https://www.amazon.com/dp/B08HJLLF7G'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url: 'https://www.amazon.com/dp/B08166SLDF'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url: 'https://www.amazon.com/dp/product/B0815XFSGK'
|
||||
},
|
||||
{
|
||||
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/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/B0815Y8J9N'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NS4W2ZY&Quantity.1=1',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amazon.com/dp/B08NS4W2ZY'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08MVC76SR&Quantity.1=1',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amazon.com/dp/B08MVC76SR'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NXXT7WN&Quantity.1=1',
|
||||
model: 'nitro+',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amazon.com/dp/B08NXXT7WN'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NXYNLMR&Quantity.1=1',
|
||||
model: 'pulse',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amazon.com/dp/B08NXYNLMR'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NXVNMPQ&Quantity.1=1',
|
||||
model: 'nitro+',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amazon.com/dp/B08NXVNMPQ'
|
||||
},
|
||||
{
|
||||
brand: 'xfx',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08N6ZLX9B&Quantity.1=1',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amazon.com/dp/B08N6ZLX9B'
|
||||
},
|
||||
{
|
||||
brand: 'xfx',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NX14LV1&Quantity.1=1',
|
||||
model: 'merc',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amazon.com/dp/B08NX14LV1'
|
||||
},
|
||||
{
|
||||
brand: 'xfx',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NN76VJD&Quantity.1=1',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800',
|
||||
url: 'https://www.amazon.com/dp/B08NN76VJD'
|
||||
},
|
||||
{
|
||||
brand: 'xfx',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08P5YFZCY&Quantity.1=1',
|
||||
model: 'merc',
|
||||
series: 'rx6800',
|
||||
url: 'https://www.amazon.com/dp/B08P5YFZCY'
|
||||
},
|
||||
{
|
||||
brand: 'powercolor',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08MNZM5TK&Quantity.1=1',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800',
|
||||
url: 'https://www.amazon.com/dp/B08MNZM5TK'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08MVCLBWK&Quantity.1=1',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800',
|
||||
url: 'https://www.amazon.com/dp/B08MVCLBWK'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NXZSPMY&Quantity.1=1',
|
||||
model: 'nitro+',
|
||||
series: 'rx6800',
|
||||
url: 'https://www.amazon.com/dp/B08NXZSPMY'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NXYBVDB&Quantity.1=1',
|
||||
model: 'pulse',
|
||||
series: 'rx6800',
|
||||
url: 'https://www.amazon.com/dp/B08NXYBVDB'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NWJ29NB&Quantity.1=1',
|
||||
model: 'strix oc',
|
||||
series: 'rx6800',
|
||||
url: 'https://www.amazon.com/dp/B08NWJ29NB'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08P3YT3MY&Quantity.1=1',
|
||||
model: 'tuf oc',
|
||||
series: 'rx6800',
|
||||
url: 'https://www.amazon.com/dp/B08P3YT3MY'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NWHKGS9&Quantity.1=1',
|
||||
model: 'strix lc',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amazon.com/dp/B08NWHKGS9'
|
||||
},
|
||||
{
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'corsair',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B07M63H81H&Quantity.1=1',
|
||||
model: '750 platinum',
|
||||
series: 'sf',
|
||||
url: 'https://www.amazon.com/dp/B07M63H81H'
|
||||
},
|
||||
{
|
||||
brand: 'corsair',
|
||||
cartUrl:
|
||||
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B07F84FJ1G&Quantity.1=1',
|
||||
model: '600 platinum',
|
||||
series: 'sf',
|
||||
url: 'https://www.amazon.com/dp/B07F84FJ1G'
|
||||
}
|
||||
],
|
||||
name: 'amazon'
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const AmdCa: 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/5458373400/ca'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amd.com/en/direct-buy/5458373400/ca?add-to-cart=true',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800',
|
||||
url: 'https://www.amd.com/en/direct-buy/5458373400/ca'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amd.com/en/direct-buy/5458372800/ca?add-to-cart=true',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amd.com/en/direct-buy/5458372800/ca'
|
||||
}
|
||||
],
|
||||
name: 'amd-ca'
|
||||
};
|
||||
@@ -0,0 +1,63 @@
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amd.com/de/direct-buy/5458374100/de?add-to-cart=true',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amd.com/de/direct-buy/5458374100/de'
|
||||
}
|
||||
],
|
||||
name: 'amd-de'
|
||||
};
|
||||
@@ -0,0 +1,63 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const AmdIt: 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/en/direct-buy/5450881400/it'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amd.com/en/direct-buy/5450881400/it?add-to-cart=true',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url: 'https://www.amd.com/en/direct-buy/5450881400/it'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amd.com/en/direct-buy/5450881500/it?add-to-cart=true',
|
||||
model: '5900x',
|
||||
series: 'ryzen5900',
|
||||
url: 'https://www.amd.com/en/direct-buy/5450881500/it'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amd.com/en/direct-buy/5450881600/it?add-to-cart=true',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url: 'https://www.amd.com/en/direct-buy/5450881600/it'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amd.com/en/direct-buy/5450881700/it?add-to-cart=true',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url: 'https://www.amd.com/en/direct-buy/5450881700/it'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amd.com/en/direct-buy/5458374100/it?add-to-cart=true',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amd.com/en/direct-buy/5458374100/it'
|
||||
}
|
||||
],
|
||||
name: 'amd-it'
|
||||
};
|
||||
@@ -0,0 +1,71 @@
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amd.com/en/direct-buy/5458372800/us?add-to-cart=true',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.amd.com/en/direct-buy/5458372800/us'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
cartUrl:
|
||||
'https://www.amd.com/en/direct-buy/5458373400/us?add-to-cart=true',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800',
|
||||
url: 'https://www.amd.com/en/direct-buy/5458373400/us'
|
||||
}
|
||||
],
|
||||
name: 'amd'
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const AntOnline: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '.uk-button',
|
||||
text: ['Add to Cart']
|
||||
},
|
||||
maxPrice: {
|
||||
container: '.cPrice',
|
||||
euroFormat: false
|
||||
},
|
||||
outOfStock: {
|
||||
container: '.priceView-price .priceView-hero-price span',
|
||||
text: ['Sold Out']
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url:
|
||||
'https://www.antonline.com/Sony/Electronics/Gaming_Devices/Gaming_Consoles/1409507'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url:
|
||||
'https://www.antonline.com/Microsoft/Electronics/Gaming_Devices/Gaming_Consoles/1414487'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url:
|
||||
'https://www.antonline.com/Microsoft/Electronics/Gaming_Devices/Gaming_Consoles/1409527'
|
||||
}
|
||||
],
|
||||
name: 'antonline'
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const Argos: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
container: 'button[data-test="add-to-trolley-button-button"',
|
||||
text: ['to trolley']
|
||||
},
|
||||
maxPrice: {
|
||||
container: 'li[itemprop="price"]'
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.argos.co.uk/product/5718469'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.argos.co.uk/product/6795199'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url: 'https://www.argos.co.uk/product/6795151'
|
||||
}
|
||||
],
|
||||
name: 'argos'
|
||||
};
|
||||
+24
-4
@@ -9,7 +9,7 @@ export const Aria: Store = {
|
||||
},
|
||||
maxPrice: {
|
||||
container: '.priceBig',
|
||||
euroFormat: false // Note: Aria uses non-euroFromat as price seperator
|
||||
euroFormat: false // Note: Aria uses non-euroFromat as price seperator
|
||||
},
|
||||
outOfStock: {
|
||||
container: '.fBox',
|
||||
@@ -21,7 +21,15 @@ export const Aria: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url:
|
||||
'https://www.aria.co.uk/Products/Components/Processors/AMD+CPUs/Ryzen+9+-+Socket+AM4/AMD+Ryzen+9+5950X+16+Core+AM4+CPU%2FProcessor?productId=72868'
|
||||
}
|
||||
],
|
||||
linksBuilder: {
|
||||
@@ -31,13 +39,25 @@ export const Aria: Store = {
|
||||
titleSelector: 'strong > a[href]'
|
||||
}),
|
||||
urls: [
|
||||
{
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3060+Ti'
|
||||
},
|
||||
{
|
||||
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',
|
||||
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'
|
||||
},
|
||||
{
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3060+Ti'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -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
@@ -12,55 +12,64 @@ export const AsusDe: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
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',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
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',
|
||||
model: 'tuf',
|
||||
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',
|
||||
model: 'tuf oc',
|
||||
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',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
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',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
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',
|
||||
model: 'tuf',
|
||||
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',
|
||||
model: 'tuf oc',
|
||||
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'
|
||||
|
||||
@@ -2,6 +2,7 @@ import {Store} from './store';
|
||||
import fetch from 'node-fetch';
|
||||
|
||||
export const Asus: Store = {
|
||||
backoffStatusCodes: [403, 429, 503],
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '#item_add_cart',
|
||||
@@ -47,7 +48,7 @@ export const Asus: Store = {
|
||||
{
|
||||
brand: 'asus',
|
||||
itemNumber: '202009AM290000002',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
series: '3080',
|
||||
url: 'https://store.asus.com/us/item/202009AM290000002'
|
||||
}
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
import {Store} from './store';
|
||||
import {getProductLinksBuilder} from './helpers/card';
|
||||
|
||||
export const Awd: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '.vs-stock .ty-qty-in-stock',
|
||||
text: ['item(s)']
|
||||
},
|
||||
maxPrice: {
|
||||
container: '.product-info .ty-price-num',
|
||||
euroFormat: false // Note: Awd uses non-euroFromat as price seperator
|
||||
},
|
||||
outOfStock: {
|
||||
container: '.vs-stock',
|
||||
text: ['out of stock']
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/asus-nvidia-geforce-gt-710-silent-low-profile-2gb-gddr5-graphics-card-pci-e.html'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/asus-tuf-gaming-radeon-rx-6800-oc-edition-16gb-gddr6-graphics-card.html'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/asus-rog-strix-radeon-rx-6800-oc-edition-16gb-gddr6-graphics-card.html'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/gigabyte-radeon-rx-6800-gaming-oc-16gb-gddr6-graphics-card.html'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800xt',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/gigabyte-radeon-rx-6800-xt-gaming-oc-16gb-gddr6-graphics-card.html'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/amd-ryzen-5-5600x-cpu-six-core-3.7ghz-processor-socket-am4-retail.html'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/amd-ryzen-7-5800x-cpu-eight-core-3.8ghz-processor-socket-am4-retail.html'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5900x',
|
||||
series: 'ryzen5900',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/amd-ryzen-9-5900x-cpu-twelve-core-3.7ghz-processor-socket-am4-retail.html'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/amd-ryzen-9-5950x-sixteen-core-socket-am4-3.4ghz-processor.html'
|
||||
}
|
||||
],
|
||||
linksBuilder: {
|
||||
builder: getProductLinksBuilder({
|
||||
productsSelector: '.grid-list .ty-grid-list__item',
|
||||
sitePrefix: 'https://www.awd-it.co.uk',
|
||||
titleSelector: '.title-price-wrapper',
|
||||
urlSelector: 'a[href]'
|
||||
}),
|
||||
urls: [
|
||||
{
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3070.html'
|
||||
},
|
||||
{
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3080.html'
|
||||
},
|
||||
{
|
||||
series: '3090',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3090.html'
|
||||
},
|
||||
{
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3060ti.html'
|
||||
}
|
||||
]
|
||||
},
|
||||
name: 'awd',
|
||||
waitUntil: 'domcontentloaded'
|
||||
};
|
||||
+53
-29
@@ -20,145 +20,169 @@ export const Azerty: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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',
|
||||
model: 'aorus xtreme',
|
||||
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',
|
||||
model: 'ventus 3x oc',
|
||||
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',
|
||||
model: 'tuf',
|
||||
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',
|
||||
model: 'gaming x trio',
|
||||
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',
|
||||
model: 'tuf oc',
|
||||
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',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
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',
|
||||
model: 'trinity',
|
||||
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',
|
||||
model: 'aorus master',
|
||||
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',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
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',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
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',
|
||||
model: 'tuf oc',
|
||||
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',
|
||||
model: 'tuf',
|
||||
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',
|
||||
model: 'ichill x4',
|
||||
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',
|
||||
model: 'ichill x3',
|
||||
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',
|
||||
model: 'ventus 3x oc',
|
||||
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',
|
||||
model: 'gaming x trio',
|
||||
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',
|
||||
model: 'dual fan',
|
||||
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',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'ftw3',
|
||||
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',
|
||||
model: 'xc3',
|
||||
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',
|
||||
model: 'ftw3 ultra',
|
||||
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',
|
||||
model: 'xc3 black',
|
||||
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'
|
||||
|
||||
+131
-16
@@ -17,7 +17,29 @@ export const BAndH: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'dual',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.bhphotovideo.com/c/product/1602755-REG/asus_dualrtx30708g_geforce_rtx_3070_8g.html'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
model: 'dual fan',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.bhphotovideo.com/c/product/1595984-REG/pny_technologies_vcg30708tfxppb_geforce_rtx_3070_epic_x.html'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'strix oc',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.bhphotovideo.com/c/product/1602756-REG/asus_strixrtx3070o8_rog_strix_geforce_rtx.html'
|
||||
},
|
||||
// TUF was removed from BH, not sure why so commenting out listing for now
|
||||
// {
|
||||
@@ -30,13 +52,15 @@ export const BAndH: Store = {
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc',
|
||||
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',
|
||||
model: 'trinity',
|
||||
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
|
||||
// {
|
||||
@@ -45,83 +69,174 @@ export const BAndH: Store = {
|
||||
// series: '3080',
|
||||
// url: 'https://www.bhphotovideo.com/c/product/1593650-REG/asus_tuf_rtx3080_o10g_gaming_tuf_gaming_geforce_rtx.html'
|
||||
// },
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle oc',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bhphotovideo.com/c/product/1606948-REG/gigabyte_gv_n306teagle_oc_8gd_rtx_3060_ti_eagle.html'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bhphotovideo.com/c/product/1606949-REG/gigabyte_gv_n306teagle_8gd_rtx_3060_ti_eagle.html'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'aorus',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bhphotovideo.com/c/product/1606945-REG/gigabyte_gv_n306taorus_m_8gd_aorus_rtx_3060_ti.html'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bhphotovideo.com/c/product/1606947-REG/gigabyte_gv_n306tgaming_oc_8gd_rtx_3060_ti_gaming.html'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming pro',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bhphotovideo.com/c/product/1606946-REG/gigabyte_gv_n306tgamingoc_pro_8gd_rtx_3060_ti_gaming.html'
|
||||
},
|
||||
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'gaming x trio',
|
||||
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',
|
||||
model: 'ventus 3x oc',
|
||||
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',
|
||||
model: 'gaming x trio',
|
||||
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',
|
||||
model: 'ventus 3x oc',
|
||||
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',
|
||||
model: 'trinity',
|
||||
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',
|
||||
model: 'gaming x trio',
|
||||
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',
|
||||
model: 'gaming x trio',
|
||||
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',
|
||||
model: 'ventus 3x oc',
|
||||
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',
|
||||
model: 'ventus 3x oc',
|
||||
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',
|
||||
model: 'eagle oc',
|
||||
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',
|
||||
model: 'gaming oc',
|
||||
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',
|
||||
model: 'tuf',
|
||||
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',
|
||||
model: 'tuf oc',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url:
|
||||
'https://www.bhphotovideo.com/c/product/1598377-REG/amd_100_100000065box_ryzen_5_5600x_3_7.html'
|
||||
},
|
||||
{
|
||||
brand: 'corsair',
|
||||
model: '750 platinum',
|
||||
series: 'sf',
|
||||
url:
|
||||
'https://www.bhphotovideo.com/c/product/1560680-REG/corsair_cp_9020186_na_corsair_sf750_power_supply.html'
|
||||
}
|
||||
],
|
||||
name: 'bandh'
|
||||
|
||||
@@ -3,12 +3,17 @@ import {Store} from './store';
|
||||
export const BestBuyCa: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '#root',
|
||||
text: ['available online']
|
||||
container: '.x-checkout-experience-new',
|
||||
text: ['add to cart']
|
||||
},
|
||||
maxPrice: {
|
||||
container: 'div[class^="productPricingContainer"] span[class^="screenReaderOnly_"',
|
||||
container:
|
||||
'div[class^="productPricingContainer"] span[class^="screenReaderOnly_"',
|
||||
euroFormat: false
|
||||
},
|
||||
outOfStock: {
|
||||
container: 'button.addToCartButton.disabled_XY3i_',
|
||||
text: ['Add to Cart']
|
||||
}
|
||||
},
|
||||
links: [
|
||||
@@ -16,85 +21,148 @@ export const BestBuyCa: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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/evga-geforce-gtx-1660-xc-ultra-6gb-gddr5-video-card/14119081?intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 2x oc',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3060-ti-ventus-2x-oc-8gb-gddr6-video-card/15178453?intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'nvidia',
|
||||
model: 'founders edition',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.ca/en-ca/product/nvidia-geforce-rtx-3060-ti-8gb-gddr6-video-card/15166285?intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'twin edge oc',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3060-ti-twin-edge-oc-8gb-gddr6-video-card/15178452?intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'twin edge',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3060-ti-twin-edge-8gb-gddr6-video-card/15178583?intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3060-ti-ftw3-ultra-8gb-gddr6-video-card/15200164?intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'trinity',
|
||||
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',
|
||||
model: 'ventus 3x',
|
||||
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',
|
||||
model: 'xc3 ultra',
|
||||
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/15084753?intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'tuf',
|
||||
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',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
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',
|
||||
model: 'trinity',
|
||||
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',
|
||||
model: 'tuf',
|
||||
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',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
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',
|
||||
model: 'ventus 3x',
|
||||
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',
|
||||
model: 'ventus 3x',
|
||||
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',
|
||||
model: 'twin edge oc',
|
||||
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',
|
||||
model: 'twin edge',
|
||||
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',
|
||||
model: 'founders edition',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url:
|
||||
'https://www.bestbuy.ca/en-ca/product/playstation-5-console-online-only/14962185?intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5de',
|
||||
url:
|
||||
'https://www.bestbuy.ca/en-ca/product/playstation-5-digital-edition-console-online-only/14962184?intl=nosplash'
|
||||
}
|
||||
],
|
||||
name: 'bestbuy-ca',
|
||||
|
||||
+374
-109
@@ -7,7 +7,8 @@ export const BestBuy: Store = {
|
||||
text: ['add to cart']
|
||||
},
|
||||
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
|
||||
}
|
||||
},
|
||||
@@ -16,217 +17,481 @@ export const BestBuy: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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/insignia-8qt-digital-multi-cooker-stainless-steel/6258941.p?skuId=6258941&intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'nvidia',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6429442/cart',
|
||||
model: 'founders edition',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'nvidia',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6429440/cart',
|
||||
model: 'founders edition',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432445/cart',
|
||||
model: 'rog strix',
|
||||
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/nvidia-geforce-rtx-3070-8gb-gddr6-pci-express-4-0-graphics-card-dark-platinum-and-black/6429442.p?skuId=6429442&intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6439300/cart',
|
||||
model: 'xc3 black',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432399/cart',
|
||||
model: 'xc3 black',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6436194/cart',
|
||||
model: 'xc3',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432400/cart',
|
||||
model: 'xc3 ultra',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6436196/cart',
|
||||
model: 'ftw3 ultra',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6436191/cart',
|
||||
model: 'ftw3',
|
||||
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-3070-xc3-black-gaming-8gb-gddr6x-pci-express-4-0-graphics-card/6439300.p?skuId=6439300&intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6437912/cart',
|
||||
model: 'eagle',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6437909/cart',
|
||||
model: 'gaming oc',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6430620/cart',
|
||||
model: 'gaming oc',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6430621/cart',
|
||||
model: 'eagle oc',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6436219/cart',
|
||||
model: 'vision oc',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6436223/cart',
|
||||
model: 'aorus master',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6430175/cart',
|
||||
model: 'ventus 3x oc',
|
||||
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/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437909.p?skuId=6437909&intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432654/cart',
|
||||
model: 'dual fan',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432653/cart',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6439384/cart',
|
||||
model: 'aorus',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6439384.p?skuId=6439384'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6439385/cart',
|
||||
model: 'vision',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-white/6439385.p?skuId=6439385'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6439128/cart',
|
||||
model: 'tuf',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/asus-tuf-rtx3070-8gb-gddr6-pci-express-4-0-graphics-card-black/6439128.p?skuId=6439128'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6438278/cart',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/msi-geforce-rtx-3070-ventus-3x-oc-bv-8gb-gddr6-pci-express-4-0-graphics-card-black/6438278.p?skuId=6438278'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6439127/cart',
|
||||
model: 'strix',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/asus-rog-strix-rtx3070-8gb-gddr6-pci-express-4-0-graphics-card-black/6439127.p?skuId=6439127'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6439301/cart',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/evga-geforce-rtx-3070-ftw3-ultra-gaming-8gb-gddr6x-pci-express-4-0-graphics-card/6439301.p?skuId=6439301'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6439299/cart',
|
||||
model: 'xc3 ultra',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/evga-geforce-rtx-3070-xc3-ultra-gaming-8gb-gddr6x-pci-express-4-0-graphics-card/6439299.p?skuId=6439299'
|
||||
},
|
||||
{
|
||||
brand: 'nvidia',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6429440/cart',
|
||||
model: 'founders edition',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432445/cart',
|
||||
model: 'strix',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432399/cart',
|
||||
model: 'xc3 black',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6436194/cart',
|
||||
model: 'xc3',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432400/cart',
|
||||
model: 'xc3 ultra',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6436196/cart',
|
||||
model: 'ftw3 ultra',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6436191/cart',
|
||||
model: 'ftw3',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6430620/cart',
|
||||
model: 'gaming oc',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6430621/cart',
|
||||
model: 'eagle oc',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6436219/cart',
|
||||
model: 'vision oc',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6436223/cart',
|
||||
model: 'aorus master',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6430175/cart',
|
||||
model: 'ventus 3x oc',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432655/cart',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432658/cart',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6429434/cart',
|
||||
model: 'founders edition',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432447/cart',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432446/cart',
|
||||
model: 'tuf',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6430215/cart',
|
||||
model: 'ventus 3x oc',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6430623/cart',
|
||||
model: 'gaming',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6430624/cart',
|
||||
model: 'eagle',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6434363/cart',
|
||||
model: 'xc3',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6436193/cart',
|
||||
model: 'ftw3',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6436192/cart',
|
||||
model: 'ftw3 ultra',
|
||||
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',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6432657/cart',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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: 'nvidia',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6439402/cart',
|
||||
model: 'founders edition',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/nvidia-geforce-rtx-3060-ti-8gb-gddr6-pci-express-4-0-graphics-card-steel-and-black/6439402.p?skuId=6439402&intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6441172/cart',
|
||||
model: 'ventus 2x',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/msi-geforce-rtx-3060-ti-ventus-2x-oc-bv-8gb-gddr6-pci-express-4-0-graphics-card-black-black/6441172.p?skuId=6441172&intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6442484/cart',
|
||||
model: 'gaming oc',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/gigabyte-nvidia-geforce-rtx-3060-ti-gaming-oc-8g-gddr6-pci-express-4-0-graphics-card-black/6442484.p?skuId=6442484?intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6442485/cart',
|
||||
model: 'eagle',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/gigabyte-nvidia-geforce-rtx-3060-ti-eagle-oc-8g-gddr6-pci-express-4-0-graphics-card-black/6442485.p?skuId=6442485?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'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800xt',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/msi-radeon-rx-6800-xt-16g-16gb-gddr6-pci-express-4-0-graphics-card-black-black/6440913.p?skuId=6440913'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/msi-radeon-rx-6800-16g-16gb-gddr6-pci-express-4-0-graphics-card-black-black/6441020.p?skuId=6441020'
|
||||
},
|
||||
{
|
||||
brand: 'xfx',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/xfx-amd-radeon-rx-6800-16gb-gddr6-pci-express-4-0-gaming-graphics-card-black/6442077.p?skuId=6442077'
|
||||
},
|
||||
{
|
||||
brand: 'xfx',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800xt',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/xfx-amd-radeon-rx-6800xt-16gb-gddr6-pci-express-4-0-gaming-graphics-card-black/6441226.p?skuId=6441226'
|
||||
},
|
||||
{
|
||||
brand: 'xfx',
|
||||
model: 'merc',
|
||||
series: 'rx6800xt',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/xfx-merc-319-amd-radeon-rx-6800xt-16gb-gddr6-pci-express-4-0-gaming-graphics-card-black/6442585.p?skuId=6442585'
|
||||
},
|
||||
{
|
||||
brand: 'corsair',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6351845/cart',
|
||||
model: '750 platinum',
|
||||
series: 'sf',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/corsair-sf-series-750w-atx12v-2-4-eps12v-2-92-sfx12v-80-plus-platinum-modular-power-supply-black/6351845.p?skuId=6351845'
|
||||
},
|
||||
{
|
||||
brand: 'corsair',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6351844/cart',
|
||||
model: '600 platinum',
|
||||
series: 'sf',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/corsair-sf-series-600w-atx12v-2-4-eps12v-2-92-sfx12v-80-plus-platinum-modular-power-supply-black/6351844.p?skuId=6351844'
|
||||
},
|
||||
{
|
||||
brand: 'nvidia',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6439402/cart',
|
||||
model: 'founders edition',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/nvidia-geforce-rtx-3060-ti-8gb-gddr6-pci-express-4-0-graphics-card-steel-and-black/6439402.p?skuId=6439402&intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6442484/cart',
|
||||
model: 'gaming oc',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/gigabyte-nvidia-geforce-rtx-3060-ti-gaming-oc-8g-gddr6-pci-express-4-0-graphics-card-black/6442484.p?skuId=6442484&intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6442485/cart',
|
||||
model: 'eagle oc',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/gigabyte-nvidia-geforce-rtx-3060-ti-eagle-oc-8g-gddr6-pci-express-4-0-graphics-card-black/6442485.p?skuId=6442485&intl=nosplash'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
cartUrl: 'https://api.bestbuy.com/click/-/6441172/cart',
|
||||
model: 'ventus 2x oc',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.bestbuy.com/site/msi-geforce-rtx-3060-ti-ventus-2x-oc-bv-8gb-gddr6-pci-express-4-0-graphics-card-black-black/6441172.p?skuId=6441172&intl=nosplash'
|
||||
}
|
||||
],
|
||||
name: 'bestbuy'
|
||||
|
||||
+10
-1
@@ -20,7 +20,8 @@ export const Box: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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: {
|
||||
@@ -30,6 +31,10 @@ export const Box: Store = {
|
||||
titleSelector: '.p-list-section > h3 > a[href]'
|
||||
}),
|
||||
urls: [
|
||||
{
|
||||
series: '3060ti',
|
||||
url: 'https://www.box.co.uk/rtx-3060-ti-graphics-cards'
|
||||
},
|
||||
{
|
||||
series: '3070',
|
||||
url: 'https://www.box.co.uk/rtx-3070-graphics-cards'
|
||||
@@ -41,6 +46,10 @@ export const Box: Store = {
|
||||
{
|
||||
series: '3090',
|
||||
url: 'https://www.box.co.uk/rtx-3090-graphics-cards'
|
||||
},
|
||||
{
|
||||
series: '3060ti',
|
||||
url: 'https://www.box.co.uk/rtx-3060-ti-graphics-cards'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -0,0 +1,487 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const CanadaComputers: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
container: 'div[class="pi-prod-availability"]',
|
||||
text: ['Online In Stock']
|
||||
},
|
||||
outOfStock: {
|
||||
container: 'div[class="pi-prod-availability"]',
|
||||
text: ['Not Available Online']
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181348&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183101&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3 black',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183500&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183099&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'gaming x trio',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183210&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'dual',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183635&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'dual oc',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183636&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'strix oc',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183637&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'vision oc',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184168&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'aorus master',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184167&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'twin edge oc',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183561&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 2x oc',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183208&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'twin edge',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183560&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'gaming oc',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183638&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183498&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183209&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle oc',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183100&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3 ultra',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183499&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'gaming',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184743&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181376&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'strix',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181842&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'gaming x trio',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181348&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle oc',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181354&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'gaming',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181416&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3 ultra',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181375&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'trinity',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181420&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'trinity oc',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184837&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'gaming oc',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181415&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181353&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'gaming',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184743&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 3x',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181347&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'aorus master',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=182754&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3 black',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181797&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'vision oc',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=182755&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'aorus xtreme',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183098&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'trinity oc',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183510&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle oc',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184166&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3',
|
||||
series: '3080',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181798&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'strix oc',
|
||||
series: '3090',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181841&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3090',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181854&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'gaming oc',
|
||||
series: '3090',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181413&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'trinity',
|
||||
series: '3090',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181419&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc',
|
||||
series: '3090',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181351&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'gaming x trio',
|
||||
series: '3090',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181350&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'gaming',
|
||||
series: '3090',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181414&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 3x',
|
||||
series: '3090',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181349&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3 ultra',
|
||||
series: '3090',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181853&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'aorus xtreme',
|
||||
series: '3090',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183096&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle oc',
|
||||
series: '3090',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181352&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'gaming x trio',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185086&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'tuf',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184759&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 2x oc',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185087&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'dual',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184760&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'twin edge oc',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185751&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'twin edge',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185752&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'strix',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184431&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc gaming',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185988&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185987&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle oc',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185408&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185407&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc pro',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185406&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'aorus',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185405&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'ko',
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185168&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=4_64&item_id=183432&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=4_64&item_id=183431&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5900x',
|
||||
series: 'ryzen5900',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=4_64&item_id=183430&language=en'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url:
|
||||
'https://www.canadacomputers.com/product_info.php?cPath=4_64&item_id=183427&language=en'
|
||||
}
|
||||
],
|
||||
name: 'canadacomputers',
|
||||
waitUntil: 'domcontentloaded'
|
||||
};
|
||||
+162
-51
@@ -21,255 +21,366 @@ export const Caseking: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
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',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
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',
|
||||
model: 'tuf',
|
||||
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',
|
||||
model: 'tuf oc',
|
||||
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',
|
||||
model: 'ftw3',
|
||||
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',
|
||||
model: 'ftw3 ultra',
|
||||
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',
|
||||
model: 'xc3',
|
||||
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',
|
||||
model: 'xc3 black',
|
||||
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',
|
||||
model: 'xc3 ultra',
|
||||
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',
|
||||
model: 'aorus master',
|
||||
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',
|
||||
model: 'eagle oc',
|
||||
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',
|
||||
model: 'gaming oc',
|
||||
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',
|
||||
model: 'vision oc',
|
||||
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',
|
||||
model: 'ichill x3',
|
||||
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',
|
||||
model: 'ichill x4',
|
||||
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',
|
||||
model: 'twin x2 oc',
|
||||
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',
|
||||
model: 'gaming x trio',
|
||||
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',
|
||||
model: 'ventus 3x oc',
|
||||
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',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'amp holo',
|
||||
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',
|
||||
model: 'trinity oc',
|
||||
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',
|
||||
model: 'trinity',
|
||||
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',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
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',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
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',
|
||||
model: 'tuf',
|
||||
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',
|
||||
model: 'tuf oc',
|
||||
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',
|
||||
model: 'ftw3',
|
||||
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',
|
||||
model: 'ftw3 ultra',
|
||||
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',
|
||||
model: 'xc3',
|
||||
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',
|
||||
model: 'xc3 black',
|
||||
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',
|
||||
model: 'xc3 ultra',
|
||||
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',
|
||||
model: 'eagle oc',
|
||||
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',
|
||||
model: 'gaming oc',
|
||||
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',
|
||||
model: 'gaming x3',
|
||||
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',
|
||||
model: 'ichill x3',
|
||||
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',
|
||||
model: 'ichill x4',
|
||||
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',
|
||||
model: 'gaming x trio',
|
||||
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',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'trinity',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
model: 'nitro oc se',
|
||||
series: 'rx6800xt',
|
||||
url:
|
||||
'https://www.caseking.de/sapphire-nitro-radeon-rx-6800-xt-oc-16g-16384-mb-gddr6-gcsp-215.html'
|
||||
},
|
||||
{
|
||||
brand: 'sapphire',
|
||||
model: 'nitro oc',
|
||||
series: 'rx6800xt',
|
||||
url:
|
||||
'https://www.caseking.de/sapphire-nitro-radeon-rx-6800-xt-oc-se-16g-16384-mb-gddr6-gcsp-214.html'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc',
|
||||
series: 'rx6800xt',
|
||||
url:
|
||||
'https://www.caseking.de/gigabyte-radeon-rx-6800-xt-gaming-oc-16g-16384-mb-gddr6-gcgb-356.html'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming',
|
||||
series: 'rx6800xt',
|
||||
url:
|
||||
'https://www.caseking.de/gigabyte-radeon-rx-6800-xt-16g-16384-mb-gddr6-gcgb-357.html'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'strix lc',
|
||||
series: 'rx6800xt',
|
||||
url:
|
||||
'https://www.caseking.de/asus-radeon-rx-6800-xt-rog-strix-lc-o16g-16384-mb-gddr6-gcas-416.html'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'tuf',
|
||||
series: 'rx6800xt',
|
||||
url:
|
||||
'https://www.caseking.de/asus-radeon-rx-6800-xt-tuf-o16g-16384-mb-gddr6-gcas-417.html'
|
||||
}
|
||||
],
|
||||
name: 'caseking'
|
||||
};
|
||||
|
||||
|
||||
+52
-4
@@ -2,6 +2,7 @@ import {Store} from './store';
|
||||
import {getProductLinksBuilder} from './helpers/card';
|
||||
|
||||
export const Ccl: Store = {
|
||||
backoffStatusCodes: [403, 429, 503],
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '#pnlAddToBasket',
|
||||
@@ -21,7 +22,36 @@ export const Ccl: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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/'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url:
|
||||
'https://www.cclonline.com/product/331765/100-100000065BOX/CPU-Processors/AMD-Ryzen-5-5600X-3-7GHz-Hexa-Core-Processor-with-6-Cores-12-Threads-65W-TDP-35MB-Cache-4-6GHz-Turbo-Wraith-Stealth-Cooler/CPU0679/'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url:
|
||||
'https://www.cclonline.com/product/331766/100-100000063WOF/CPU-Processors/AMD-Ryzen-7-5800X-3-8GHz-Octa-Core-Processor-with-8-Cores-16-Threads-105W-TDP-36MB-Cache-4-7GHz-Turbo-No-Cooler/CPU0680/'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5900x',
|
||||
series: 'ryzen5900',
|
||||
url:
|
||||
'https://www.cclonline.com/product/331767/100-100000061WOF/CPU-Processors/AMD-Ryzen-9-5900X-3-7GHz-Dodeca-Core-Processor-with-12-Cores-24-Threads-105W-TDP-70MB-Cache-4-8GHz-Turbo-No-Cooler/CPU0681/'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url:
|
||||
'https://www.cclonline.com/product/331768/100-100000059WOF/CPU-Processors/AMD-Ryzen-9-5950X-3-4GHz-Hexadeca-Core-Processor-with-16-Cores-32-Threads-105W-TDP-72MB-Cache-4-9GHz-Turbo-No-Cooler/CPU0682/'
|
||||
}
|
||||
],
|
||||
linksBuilder: {
|
||||
@@ -34,15 +64,33 @@ export const Ccl: Store = {
|
||||
urls: [
|
||||
{
|
||||
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',
|
||||
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',
|
||||
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/'
|
||||
},
|
||||
{
|
||||
series: 'rx6800',
|
||||
url:
|
||||
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/AMD-Radeon-RX-6800-Graphics-Cards/'
|
||||
},
|
||||
{
|
||||
series: 'rx6800xt',
|
||||
url:
|
||||
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/AMD-Radeon-RX-6800-XT-Graphics-Cards/'
|
||||
},
|
||||
{
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3060-Ti-Graphics-Cards/'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const Comet: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '.caption',
|
||||
text: ['Aggiungi al carrello']
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'sony',
|
||||
cartUrl: 'https://www.comet.it/cart/insert/PSX01802A/online',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.comet.it/ps5/sony-playstation-5'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url: 'https://www.comet.it/ps5/sony-playstation-5-digital-edition'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
cartUrl: 'https://www.comet.it/cart/insert/MIS01077A/online',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url: 'https://www.comet.it/xbox-serie-x/xbox-series-x'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
cartUrl: 'https://www.comet.it/cart/insert/MIS010761/online',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url: 'https://www.comet.it/xbox-serie-x/xbox-series-s'
|
||||
}
|
||||
],
|
||||
name: 'comet'
|
||||
};
|
||||
@@ -4,11 +4,19 @@ export const Computeruniverse: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '.availability',
|
||||
text: ['bestellartikel', 'auf lager und sofort lieferbar', 'kurzfristig verfügbar']
|
||||
text: [
|
||||
'bestellartikel',
|
||||
'auf lager und sofort lieferbar',
|
||||
'kurzfristig verfügbar'
|
||||
]
|
||||
},
|
||||
maxPrice: {
|
||||
container: '.product-price',
|
||||
euroFormat: true
|
||||
},
|
||||
outOfStock: {
|
||||
container: '.availability',
|
||||
text: ['nicht verfügbar']
|
||||
}
|
||||
},
|
||||
links: [
|
||||
@@ -16,31 +24,36 @@ export const Computeruniverse: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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',
|
||||
model: 'dual',
|
||||
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',
|
||||
model: 'dual oc',
|
||||
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',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
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',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
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',
|
||||
@@ -52,67 +65,78 @@ export const Computeruniverse: Store = {
|
||||
brand: 'gainward',
|
||||
model: 'phoenix',
|
||||
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',
|
||||
model: 'phoenix gs',
|
||||
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',
|
||||
model: 'eagle',
|
||||
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',
|
||||
model: 'eagle oc',
|
||||
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',
|
||||
model: 'gaming oc',
|
||||
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',
|
||||
model: 'ichill x3',
|
||||
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',
|
||||
model: 'ichill x4',
|
||||
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',
|
||||
model: 'gaming x trio',
|
||||
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',
|
||||
model: 'ventus 2x oc',
|
||||
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',
|
||||
model: 'ventus 3x oc',
|
||||
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',
|
||||
model: 'gaming pro',
|
||||
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',
|
||||
@@ -122,333 +146,430 @@ export const Computeruniverse: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'twin edge oc',
|
||||
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',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
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',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
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',
|
||||
model: 'tuf',
|
||||
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',
|
||||
model: 'tuf oc',
|
||||
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',
|
||||
model: 'ftw3',
|
||||
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',
|
||||
model: 'ftw3 ultra',
|
||||
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',
|
||||
model: 'xc3',
|
||||
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',
|
||||
model: 'xc3 black',
|
||||
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',
|
||||
model: 'xc3 ultra',
|
||||
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',
|
||||
model: 'phoenix',
|
||||
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',
|
||||
model: 'phoenix gs',
|
||||
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',
|
||||
model: 'aorus master',
|
||||
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',
|
||||
model: 'eagle oc',
|
||||
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',
|
||||
model: 'gaming oc',
|
||||
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',
|
||||
model: 'vision oc',
|
||||
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',
|
||||
model: 'ichill x3',
|
||||
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',
|
||||
model: 'ichill x4',
|
||||
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',
|
||||
model: 'twin x2 oc',
|
||||
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',
|
||||
model: 'sg oc',
|
||||
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',
|
||||
model: 'gaming x trio',
|
||||
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',
|
||||
model: 'ventus 3x oc',
|
||||
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',
|
||||
model: 'gaming pro',
|
||||
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',
|
||||
model: 'gaming pro oc',
|
||||
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',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'amp holo',
|
||||
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',
|
||||
model: 'amp extreme holo',
|
||||
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',
|
||||
model: 'trinity',
|
||||
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',
|
||||
model: 'trinity oc',
|
||||
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',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
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',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
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',
|
||||
model: 'tuf',
|
||||
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',
|
||||
model: 'tuf oc',
|
||||
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',
|
||||
model: 'ftw3',
|
||||
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',
|
||||
model: 'ftw3 ultra',
|
||||
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',
|
||||
model: 'xc3',
|
||||
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',
|
||||
model: 'xc3 black',
|
||||
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',
|
||||
model: 'xc3 ultra',
|
||||
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',
|
||||
model: 'phoenix',
|
||||
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',
|
||||
model: 'phoenix gs oc',
|
||||
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',
|
||||
model: 'aorus master',
|
||||
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',
|
||||
model: 'eagle oc',
|
||||
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',
|
||||
model: 'gaming oc',
|
||||
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',
|
||||
model: 'ichill x3',
|
||||
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',
|
||||
model: 'ichill x4',
|
||||
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',
|
||||
model: 'sg oc',
|
||||
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',
|
||||
model: 'gaming x trio',
|
||||
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',
|
||||
model: 'ventus 3x oc',
|
||||
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',
|
||||
model: 'gaming pro',
|
||||
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',
|
||||
model: 'gaming pro oc',
|
||||
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',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'trinity',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url:
|
||||
'https://www.computeruniverse.net/de/sony-playstation-5-weiss-schwarz-825gb-ssd'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url:
|
||||
'https://www.computeruniverse.net/de/sony-playstation-5-digital-edition-weiss-schwarz-825gb-ssd'
|
||||
}
|
||||
],
|
||||
name: 'computeruniverse'
|
||||
|
||||
@@ -60,13 +60,13 @@ export const Coolblue: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc gaming',
|
||||
model: 'strix oc',
|
||||
series: '3080',
|
||||
url: 'https://www.coolblue.nl/product/868731/'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix gaming',
|
||||
model: 'strix',
|
||||
series: '3080',
|
||||
url: 'https://www.coolblue.nl/product/868732/'
|
||||
},
|
||||
@@ -96,13 +96,13 @@ export const Coolblue: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc gaming',
|
||||
model: 'strix oc',
|
||||
series: '3090',
|
||||
url: 'https://www.coolblue.nl/product/868728/'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix gaming',
|
||||
model: 'strix',
|
||||
series: '3090',
|
||||
url: 'https://www.coolblue.nl/product/868729/'
|
||||
},
|
||||
|
||||
+157
-31
@@ -6,6 +6,10 @@ export const Coolmod: Store = {
|
||||
container: '.product-availability',
|
||||
text: ['Envío']
|
||||
},
|
||||
maxPrice: {
|
||||
container: '.text-price-total',
|
||||
euroFormat: true
|
||||
},
|
||||
outOfStock: {
|
||||
container: '.product-availability',
|
||||
text: ['Sin Stock']
|
||||
@@ -16,153 +20,275 @@ export const Coolmod: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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',
|
||||
model: 'eagle oc',
|
||||
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',
|
||||
model: 'ventus 3x oc',
|
||||
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',
|
||||
model: 'tuf',
|
||||
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',
|
||||
model: 'gaming oc',
|
||||
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',
|
||||
model: 'gaming x trio',
|
||||
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',
|
||||
model: 'tuf oc',
|
||||
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',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
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',
|
||||
model: 'xc3 black',
|
||||
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',
|
||||
model: 'trinity',
|
||||
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',
|
||||
model: 'xc3 ultra',
|
||||
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',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
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',
|
||||
model: 'trinity oc',
|
||||
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',
|
||||
model: 'vision oc',
|
||||
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',
|
||||
model: 'xc3',
|
||||
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',
|
||||
model: 'ftw3 ultra',
|
||||
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',
|
||||
model: 'aorus master',
|
||||
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',
|
||||
model: 'aorus xtreme',
|
||||
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',
|
||||
model: 'ftw3',
|
||||
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',
|
||||
model: 'xlr8 rgb',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'xlr8',
|
||||
model: 'xlr8 revel',
|
||||
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',
|
||||
model: 'sg-oc',
|
||||
model: 'sg oc',
|
||||
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',
|
||||
model: 'ichill x4',
|
||||
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',
|
||||
model: 'ichill x3',
|
||||
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',
|
||||
model: 'twin x2 oc',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'dual',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.coolmod.com/asus-dual-geforce-rtx-3070-8gb-gddr6-tarjeta-grafica-precio'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'gaming x trio',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.coolmod.com/msi-geforce-rtx-3070-gaming-x-trio-8gb-gddr6-tarjeta-grafica-precio'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 2x',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.coolmod.com/msi-geforce-rtx-3070-ventus-2x-oc-8gb-gddr6-tarjeta-grafica-precio'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.coolmod.com/evga-geforce-rtx-3070-xc3-black-gaming-8gb-gddr6-tarjeta-grafica-precio'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'strix',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3070-gaming-8gb-gddr6-tarjeta-grafica-precio'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.coolmod.com/gigabyte-geforce-rtx-3070-eagle-8gb-gddr6-tarjeta-grafica-precio'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'aorus master',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3070-master-8gb-gddr6-tarjeta-grafica-precio'
|
||||
},
|
||||
{
|
||||
brand: 'pny',
|
||||
model: 'xlr8 revel',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.coolmod.com/pny-geforce-rtx-3070-xlr8-gaming-epic-x-rgb-8gb-gddr6-tarjeta-grafica-precio'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'twin edge',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.coolmod.com/zotac-gaming-geforce-rtx-3070-twin-edge-8gb-gddr6-tarjeta-grafica-precio'
|
||||
},
|
||||
{
|
||||
brand: 'kfa2',
|
||||
model: 'sg oc',
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.coolmod.com/kfa2-geforce-rtx-3070-sg-1-click-oc-8gb-gddr6-tarjeta-grafica-precio'
|
||||
}
|
||||
],
|
||||
name: 'coolmod'
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const Corsair: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '.add_to_cart_form',
|
||||
text: ['add to cart']
|
||||
},
|
||||
maxPrice: {
|
||||
container: '.product-price',
|
||||
euroFormat: false
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url:
|
||||
'https://www.corsair.com/us/en/Categories/Products/Power-Supply-Units/Power-Supply-Units-Advanced/SF-Series/p/CP-9020181-NA'
|
||||
},
|
||||
{
|
||||
brand: 'corsair',
|
||||
model: '750 platinum',
|
||||
series: 'sf',
|
||||
url:
|
||||
'https://www.corsair.com/us/en/Categories/Products/Power-Supply-Units/Power-Supply-Units-Advanced/SF-Series/p/CP-9020186-NA'
|
||||
},
|
||||
{
|
||||
brand: 'corsair',
|
||||
model: '600 platinum',
|
||||
series: 'sf',
|
||||
url:
|
||||
'https://www.corsair.com/us/en/Categories/Products/Power-Supply-Units/Power-Supply-Units-Advanced/SF-Series/p/CP-9020182-NA'
|
||||
}
|
||||
],
|
||||
name: 'corsair'
|
||||
};
|
||||
@@ -21,7 +21,36 @@ export const Currys: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url:
|
||||
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-5-5600x-processor-10216691-pdt.html'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url:
|
||||
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-7-5800x-processor-10216690-pdt.html'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5900x',
|
||||
series: 'ryzen5900',
|
||||
url:
|
||||
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-9-5900x-processor-10216689-pdt.html'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url:
|
||||
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-9-5950x-processor-10216688-pdt.html'
|
||||
}
|
||||
],
|
||||
linksBuilder: {
|
||||
@@ -32,13 +61,30 @@ export const Currys: Store = {
|
||||
urlSelector: 'a[href]'
|
||||
}),
|
||||
urls: [
|
||||
{
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.currys.co.uk/gbuk/rtx-3060-ti/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313952/xx-criteria.html'
|
||||
},
|
||||
{
|
||||
series: '3070',
|
||||
url:
|
||||
'https://www.currys.co.uk/gbuk/rtx-3070/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313849/xx-criteria.html'
|
||||
},
|
||||
{
|
||||
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',
|
||||
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'
|
||||
},
|
||||
{
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.currys.co.uk/gbuk/rtx-3060-ti/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313952/xx-criteria.html'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -24,13 +24,13 @@ export const Cyberport: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
series: '3080',
|
||||
url: 'https://www.cyberport.de?DEEP=2E07-51S'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
series: '3080',
|
||||
url: 'https://www.cyberport.de?DEEP=2E07-51T'
|
||||
},
|
||||
@@ -93,6 +93,30 @@ export const Cyberport: Store = {
|
||||
model: 'trinity oc',
|
||||
series: '3080',
|
||||
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'
|
||||
|
||||
@@ -21,7 +21,49 @@ export const Ebuyer: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5600x',
|
||||
series: 'ryzen5600',
|
||||
url:
|
||||
'https://www.ebuyer.com/1126988-amd-ryzen-5-5600x-am4-processor-100-100000065box'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5800x',
|
||||
series: 'ryzen5800',
|
||||
url:
|
||||
'https://www.ebuyer.com/1126987-amd-ryzen-7-5800x-am4-processor-100-100000063wof'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5900x',
|
||||
series: 'ryzen5900',
|
||||
url:
|
||||
'https://www.ebuyer.com/1126986-amd-ryzen-9-5900x-am4-processor-100-100000061wof'
|
||||
},
|
||||
{
|
||||
brand: 'amd',
|
||||
model: '5950x',
|
||||
series: 'ryzen5950',
|
||||
url:
|
||||
'https://www.ebuyer.com/1126985-amd-ryzen-9-5950x-am4-processor-100-100000059wof'
|
||||
}
|
||||
],
|
||||
linksBuilder: {
|
||||
@@ -32,17 +74,40 @@ export const Ebuyer: Store = {
|
||||
urlSelector: 'a[href]'
|
||||
}),
|
||||
urls: [
|
||||
{
|
||||
series: 'rx6800',
|
||||
url:
|
||||
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-AMD/subcat/AMD-RX-6800'
|
||||
},
|
||||
{
|
||||
series: 'rx6800xt',
|
||||
url:
|
||||
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-AMD/subcat/AMD-RX-6800-XT'
|
||||
},
|
||||
{
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3060-Ti'
|
||||
},
|
||||
{
|
||||
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',
|
||||
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',
|
||||
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'
|
||||
},
|
||||
{
|
||||
series: '3060ti',
|
||||
url:
|
||||
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3060-Ti'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const Elcorteingles: Store = {
|
||||
backoffStatusCodes: [403, 429, 503],
|
||||
labels: {
|
||||
// Captcha: {
|
||||
// container: 'body',
|
||||
// text: [
|
||||
// 'geben sie die unten angezeigten zeichen ein',
|
||||
// 'geben sie die zeichen unten ein'
|
||||
// ]
|
||||
// },
|
||||
inStock: [
|
||||
{
|
||||
container: '.product_detail-purchase.mb-2.c12 .js-add-cart-text',
|
||||
text: ['a la cesta']
|
||||
}
|
||||
],
|
||||
maxPrice: {
|
||||
container: '.product_detail-buy-price-container .price._big',
|
||||
euroFormat: true
|
||||
},
|
||||
outOfStock: [
|
||||
{
|
||||
container:
|
||||
'.c12.mt-2.product_detail-add_to_cart.one_click_enabled .c12.button._normal.js-buy-button._sold_out.view-page._disabled',
|
||||
text: ['Agotado']
|
||||
},
|
||||
{
|
||||
container:
|
||||
'.product_detail-purchase.mb-2.c12 .c12.button._normal.js-buy-button._sold_out.view-page._disabled',
|
||||
text: ['No disponible']
|
||||
}
|
||||
]
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.elcorteingles.es/moda/A26324406/'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.elcorteingles.es/videojuegos/A37046604'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url: 'https://www.elcorteingles.es/videojuegos/A37046605'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url: 'https://www.elcorteingles.es/videojuegos/A37047078'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url: 'https://www.elcorteingles.es/videojuegos/A37047080'
|
||||
}
|
||||
],
|
||||
name: 'elcorteingles'
|
||||
};
|
||||
@@ -0,0 +1,77 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const Eprice: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '.form_aggiungi_articolo',
|
||||
text: ['AGGIUNGI AL CARRELLO']
|
||||
},
|
||||
maxPrice: {
|
||||
container: '#PrezzoClasic span[class*="big"]',
|
||||
euroFormat: true
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3070',
|
||||
url: 'https://www.eprice.it/schede-video-MSI/d-14039974'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'dual',
|
||||
series: '3070',
|
||||
url: 'https://www.eprice.it/schede-video-ASUS/d-14042082'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'strix',
|
||||
series: '3070',
|
||||
url: 'https://www.eprice.it/schede-video-ASUS/d-14039878'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'tuf',
|
||||
series: '3070',
|
||||
url: 'https://www.eprice.it/schede-video-ASUS/d-14039876'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'gaming',
|
||||
series: '3070',
|
||||
url: 'https://www.eprice.it/schede-video-MSI/d-14039972'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3070',
|
||||
url: 'https://www.eprice.it/schede-video-MSI/d-14039974'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 2x oc',
|
||||
series: '3070',
|
||||
url: 'https://www.eprice.it/schede-video-MSI/d-14039973'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'gaming',
|
||||
series: '3070',
|
||||
url: 'https://www.eprice.it/schede-video-ZOTAC/d-13979806'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.eprice.it/playstation-5-SONY/d-13981612'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url: 'https://www.eprice.it/playstation-5-SONY/d-13981613'
|
||||
}
|
||||
],
|
||||
name: 'eprice'
|
||||
};
|
||||
@@ -0,0 +1,60 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const EuronicsDE: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '.buy-btn--cart-text',
|
||||
text: ['Warenkorb']
|
||||
},
|
||||
maxPrice: {
|
||||
container: '.price--content',
|
||||
euroFormat: true
|
||||
},
|
||||
outOfStock: {
|
||||
container:
|
||||
'.product--buybox .alert.is--error.is--rounded .alert--content',
|
||||
text: [
|
||||
'Artikel steht derzeit nicht zur Verfügung',
|
||||
'Morgen im Laufe des Morgens und nur online unter'
|
||||
]
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url:
|
||||
'https://www.euronics.de/telefon-und-navigation/festnetz/schnurlose-telefone/kx-tg6721gb-schnurlostelefon-mit-anrufbeantworter-schwarz-4051168442801'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url:
|
||||
'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/xbox-series-x/spielekonsole/xbox-series-s-512gb-konsole-4061856838076'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url:
|
||||
'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/xbox-series-x/spielekonsole/xbox-series-x-1tb-konsole-4061856838045'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url:
|
||||
'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/playstation-5/spielekonsole/playstation-5-digital-edition-konsole-4061856837833'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url:
|
||||
'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/playstation-5/spielekonsole/playstation-5-konsole-4061856837826'
|
||||
}
|
||||
],
|
||||
name: 'euronics-de'
|
||||
};
|
||||
@@ -0,0 +1,41 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const Euronics: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '.purchaseButtonsWidth',
|
||||
text: ['Aggiungi al carrello']
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url:
|
||||
'https://www.euronics.it/console/sony-computer/playstation-5/eProd202008906'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url:
|
||||
'https://www.euronics.it/console/sony-computer/playstation-5-digital-edition/eProd202008907'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url:
|
||||
'https://www.euronics.it/console/microsoft/xbox-series-x-1tb-it-italy-sxto/eProd202008981'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url:
|
||||
'https://www.euronics.it/console/microsoft/xbox-series-s-512gb-it-italy-ltsn/eProd202008982'
|
||||
}
|
||||
],
|
||||
name: 'euronics'
|
||||
};
|
||||
@@ -0,0 +1,56 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const Expert: Store = {
|
||||
backoffStatusCodes: [403, 429, 503],
|
||||
labels: {
|
||||
inStock: [
|
||||
{
|
||||
container: 'span.widget-ArticleStatus-buttonText',
|
||||
text: ['In den Warenkorb']
|
||||
}
|
||||
],
|
||||
maxPrice: {
|
||||
container: '.widget-Container-subContent .widget-ArticlePrice-price',
|
||||
euroFormat: false
|
||||
},
|
||||
outOfStock: [
|
||||
{
|
||||
container:
|
||||
'span[style="font-size: 14pt;"] > span[style="color: #ff5e19;"]',
|
||||
text: ['Das von Ihnen ausgewählte Produkt ist ausverkauft']
|
||||
},
|
||||
{
|
||||
container: 'span.widget-ArticleStatus-statusPointText',
|
||||
text: ['Artikel ist derzeit nicht verfügbar']
|
||||
}
|
||||
]
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.expert.de/shop/11364114744-ps4-pro-1tb-jet-black.html'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.expert.de/shop/11364129744-playstation-r-5.html'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url:
|
||||
'https://www.expert.de/shop/11364133744-playstation-r-5-digital-edition.html'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url: 'https://www.expert.de/shop/11350018530-xbox-series-s.html'
|
||||
}
|
||||
],
|
||||
name: 'expert'
|
||||
};
|
||||
@@ -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'
|
||||
};
|
||||
@@ -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'
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const GamestopDE: Store = {
|
||||
labels: {
|
||||
inStock: [
|
||||
{
|
||||
container: '#btnAddToCart',
|
||||
text: ['In den Warenkorb']
|
||||
},
|
||||
{
|
||||
container: '#btnAddToCart',
|
||||
text: ['Vorbestellen']
|
||||
}
|
||||
],
|
||||
maxPrice: {
|
||||
container: '.buySection .prodPriceCont',
|
||||
euroFormat: true
|
||||
},
|
||||
outOfStock: {
|
||||
container: '.megaButton',
|
||||
text: ['Nicht verfügbar']
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.gamestop.de/PS5/Games/58665'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url: 'https://www.gamestop.de/PS5/Games/60315'
|
||||
}
|
||||
],
|
||||
name: 'gamestop-de',
|
||||
successStatusCodes: [[0, 399], 404]
|
||||
};
|
||||
@@ -2,10 +2,16 @@ import {Store} from './store';
|
||||
|
||||
export const Gamestop: Store = {
|
||||
labels: {
|
||||
inStock: {
|
||||
container: '.add-to-cart',
|
||||
text: ['add to cart']
|
||||
},
|
||||
inStock: [
|
||||
{
|
||||
container: '.add-to-cart',
|
||||
text: ['add to cart']
|
||||
},
|
||||
{
|
||||
container: '.add-to-cart',
|
||||
text: ['Pre-Order']
|
||||
}
|
||||
],
|
||||
maxPrice: {
|
||||
container: '.primary-details-row .actual-price',
|
||||
euroFormat: false
|
||||
@@ -20,13 +26,43 @@ export const Gamestop: Store = {
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
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',
|
||||
model: 'tuf oc',
|
||||
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',
|
||||
|
||||
@@ -10,7 +10,11 @@ type 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
|
||||
* 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;
|
||||
logger.debug(Print.backoff(link, store, {delay: backoffTime, statusCode}, true));
|
||||
logger.debug(
|
||||
Print.backoff(link, store, {delay: backoffTime, statusCode}, true)
|
||||
);
|
||||
|
||||
await delay(backoff.time);
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import {Link, Series} from '../store';
|
||||
import {Link, Model, Series} from '../store';
|
||||
import {logger} from '../../../logger';
|
||||
|
||||
export interface Card {
|
||||
brand: string;
|
||||
model: string;
|
||||
model: Model;
|
||||
}
|
||||
|
||||
interface LinksBuilderOptions {
|
||||
@@ -24,13 +24,10 @@ export function getProductLinksBuilder(options: LinksBuilderOptions) {
|
||||
for (let i = 0; i < productElements.length; i++) {
|
||||
const productElement = productElements.eq(i);
|
||||
const titleElement = productElement.find(options.titleSelector).first();
|
||||
let title: string;
|
||||
|
||||
if (options.titleAttribute) {
|
||||
title = titleElement.attr()?.[options.titleAttribute];
|
||||
} else {
|
||||
title = titleElement.text()?.replace(/\n/g, ' ').trim();
|
||||
}
|
||||
const title = options.titleAttribute
|
||||
? titleElement.attr()?.[options.titleAttribute]
|
||||
: titleElement.text()?.replace(/\n/g, ' ').trim();
|
||||
|
||||
if (!title) {
|
||||
continue;
|
||||
@@ -62,7 +59,7 @@ export function getProductLinksBuilder(options: LinksBuilderOptions) {
|
||||
url
|
||||
});
|
||||
} else {
|
||||
logger.error(`Failed to parse card: ${title}`);
|
||||
logger.error(`Failed to parse card: ${title}`, {url});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,7 +92,10 @@ export function parseCard(name: string): Card | null {
|
||||
}
|
||||
|
||||
// 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,
|
||||
// store whether the card contains the term "oc" and remove
|
||||
@@ -103,28 +103,31 @@ export function parseCard(name: string): Card | null {
|
||||
let isOC = false;
|
||||
|
||||
/* eslint-disable @typescript-eslint/prefer-regexp-exec */
|
||||
model = model.filter(word => {
|
||||
model = model.filter((word) => {
|
||||
if (word.toLowerCase() === 'oc') {
|
||||
isOC = true;
|
||||
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(/^(display ?port|hdmi|vga)$/i);
|
||||
!word.match(/^(display ?port|hdmi|vga)$/i)
|
||||
);
|
||||
});
|
||||
/* eslint-enable @typescript-eslint/prefer-regexp-exec */
|
||||
|
||||
if (isOC) {
|
||||
model.push('OC');
|
||||
}
|
||||
|
||||
if (model.length === 0) {
|
||||
return null;
|
||||
}
|
||||
if (isOC) model.push('oc');
|
||||
if (model.length === 0) return null;
|
||||
|
||||
return {
|
||||
brand: brand.toLowerCase(),
|
||||
model: model.join(' ').toLowerCase().replace(/ gaming\b/g, '').trim()
|
||||
model: model
|
||||
.join(' ')
|
||||
.toLowerCase()
|
||||
.replace(/ gaming\b/g, '')
|
||||
.trim() as Model
|
||||
};
|
||||
}
|
||||
|
||||
@@ -73,11 +73,16 @@ export class NvidiaCart {
|
||||
cartUrl = await this.addToCartAndGetLocationRedirect(productId);
|
||||
|
||||
break;
|
||||
} catch (error) {
|
||||
logger.error(`✖ [nvidia] ${name} could not automatically add to cart, attempt ${i + 1} of ${config.nvidia.addToCardAttempts}`, error);
|
||||
} catch (error: unknown) {
|
||||
logger.error(
|
||||
`✖ [nvidia] ${name} could not automatically add to cart, attempt ${
|
||||
i + 1
|
||||
} of ${config.nvidia.addToCardAttempts}`,
|
||||
error
|
||||
);
|
||||
logger.debug(error);
|
||||
|
||||
lastError = error;
|
||||
lastError = error as Error;
|
||||
}
|
||||
}
|
||||
/* eslint-enable no-await-in-loop */
|
||||
@@ -91,9 +96,11 @@ export class NvidiaCart {
|
||||
logger.info(cartUrl);
|
||||
|
||||
await open(cartUrl);
|
||||
} catch (error) {
|
||||
logger.error(`✖ [nvidia] ${name} could not automatically add to cart, opening page`);
|
||||
logger.debug(error);
|
||||
} catch (error: unknown) {
|
||||
logger.error(
|
||||
`✖ [nvidia] ${name} could not automatically add to cart, opening page`,
|
||||
error
|
||||
);
|
||||
|
||||
cartUrl = this.fallbackCartUrl;
|
||||
|
||||
@@ -118,33 +125,46 @@ export class NvidiaCart {
|
||||
public async refreshSessionToken(): Promise<void> {
|
||||
logger.debug('ℹ [nvidia] refreshing session token');
|
||||
try {
|
||||
const result = await usingResponse(this.browser, this.sessionUrl, async response => {
|
||||
return response?.json() as NvidiaSessionTokenJSON | undefined;
|
||||
});
|
||||
if (typeof result !== 'object' || result === null || !('session_token' in result)) {
|
||||
const result = await usingResponse(
|
||||
this.browser,
|
||||
this.sessionUrl,
|
||||
async (response) => {
|
||||
return response?.json() as NvidiaSessionTokenJSON | undefined;
|
||||
}
|
||||
);
|
||||
if (
|
||||
typeof result !== 'object' ||
|
||||
result === null ||
|
||||
!('session_token' in result)
|
||||
) {
|
||||
throw new Error('malformed response');
|
||||
}
|
||||
|
||||
this.sessionToken = result.session_token;
|
||||
logger.debug(`ℹ [nvidia] session_token=${result.session_token}`);
|
||||
} catch (error) {
|
||||
const message: string = typeof error === 'object' ? error.message : error;
|
||||
} catch (error: unknown) {
|
||||
const message: string =
|
||||
typeof error === 'object'
|
||||
? (error as Error).message
|
||||
: (error as string);
|
||||
logger.error(`✖ [nvidia] ${message}`);
|
||||
}
|
||||
}
|
||||
|
||||
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 sessionToken = await this.getSessionToken();
|
||||
|
||||
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');
|
||||
|
||||
await page.setRequestInterception(true);
|
||||
|
||||
page.on('request', interceptedRequest => {
|
||||
page.on('request', (interceptedRequest) => {
|
||||
void interceptedRequest.continue({
|
||||
headers: {
|
||||
...interceptedRequest.headers(),
|
||||
@@ -153,9 +173,7 @@ export class NvidiaCart {
|
||||
},
|
||||
method: 'POST',
|
||||
postData: JSON.stringify({
|
||||
products: [
|
||||
{productId, quantity: 1}
|
||||
]
|
||||
products: [{productId, quantity: 1}]
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
@@ -13,15 +13,23 @@ function getRegionInfo(): NvidiaRegionInfo {
|
||||
|
||||
const regionInfo = regionInfos.get(country);
|
||||
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;
|
||||
}
|
||||
|
||||
function nvidiaStockUrl(id: number, drLocale: string, currency: string): string {
|
||||
return `https://api-prod.nvidia.com/direct-sales-shop/DR/products/${drLocale}/${currency}/${id}?` +
|
||||
timestampUrlParameter().slice(1);
|
||||
function nvidiaStockUrl(
|
||||
id: number,
|
||||
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;
|
||||
@@ -45,7 +53,13 @@ export function generateOpenCartAction(id: number, cardName: string) {
|
||||
}
|
||||
|
||||
export function generateLinks(): Link[] {
|
||||
const {drLocale, fe3080Id, fe3090Id, fe2060SuperId, currency} = getRegionInfo();
|
||||
const {
|
||||
drLocale,
|
||||
fe3080Id,
|
||||
fe3090Id,
|
||||
fe2060SuperId,
|
||||
currency
|
||||
} = getRegionInfo();
|
||||
|
||||
const links: Link[] = [];
|
||||
|
||||
@@ -63,7 +77,10 @@ export function generateLinks(): Link[] {
|
||||
links.push({
|
||||
brand: 'nvidia',
|
||||
model: 'founders edition',
|
||||
openCartAction: generateOpenCartAction(fe3080Id, 'nvidia founders edition 3080'),
|
||||
openCartAction: generateOpenCartAction(
|
||||
fe3080Id,
|
||||
'nvidia founders edition 3080'
|
||||
),
|
||||
series: '3080',
|
||||
url: nvidiaStockUrl(fe3080Id, drLocale, currency)
|
||||
});
|
||||
@@ -73,7 +90,10 @@ export function generateLinks(): Link[] {
|
||||
links.push({
|
||||
brand: 'nvidia',
|
||||
model: 'founders edition',
|
||||
openCartAction: generateOpenCartAction(fe3090Id, 'nvidia founders edition 3090'),
|
||||
openCartAction: generateOpenCartAction(
|
||||
fe3090Id,
|
||||
'nvidia founders edition 3090'
|
||||
),
|
||||
series: '3090',
|
||||
url: nvidiaStockUrl(fe3090Id, drLocale, currency)
|
||||
});
|
||||
|
||||
@@ -5,29 +5,54 @@ import {AlternateNL} from './alternate-nl';
|
||||
import {Amazon} from './amazon';
|
||||
import {AmazonCa} from './amazon-ca';
|
||||
import {AmazonDe} from './amazon-de';
|
||||
import {AmazonDeWarehouse} from './amazon-de-warehouse';
|
||||
import {AmazonEs} from './amazon-es';
|
||||
import {AmazonFr} from './amazon-fr';
|
||||
import {AmazonIt} from './amazon-it';
|
||||
import {AmazonNl} from './amazon-nl';
|
||||
import {AmazonUk} from './amazon-uk';
|
||||
import {Amd} from './amd';
|
||||
import {AmdCa} from './amd-ca';
|
||||
import {AmdDe} from './amd-de';
|
||||
import {AmdIt} from './amd-it';
|
||||
import {AntOnline} from './antonline';
|
||||
import {Argos} from './argos';
|
||||
import {Aria} from './aria';
|
||||
import {Arlt} from './arlt';
|
||||
import {Asus} from './asus';
|
||||
import {AsusDe} from './asus-de';
|
||||
import {Awd} from './awd';
|
||||
import {Azerty} from './azerty';
|
||||
import {BAndH} from './bandh';
|
||||
import {BestBuy} from './bestbuy';
|
||||
import {BestBuyCa} from './bestbuy-ca';
|
||||
import {Box} from './box';
|
||||
import {CanadaComputers} from './canadacomputers';
|
||||
import {Caseking} from './caseking';
|
||||
import {Ccl} from './ccl';
|
||||
import {Comet} from './comet';
|
||||
import {Computeruniverse} from './computeruniverse';
|
||||
import {Coolblue} from './coolblue';
|
||||
import {Coolmod} from './coolmod';
|
||||
import {Corsair} from './corsair';
|
||||
import {Currys} from './currys';
|
||||
import {Cyberport} from './cyberport';
|
||||
import {Ebuyer} from './ebuyer';
|
||||
import {Elcorteingles} from './elcorteingles';
|
||||
import {Eprice} from './eprice';
|
||||
import {Euronics} from './euronics';
|
||||
import {EuronicsDE} from './euronics-de';
|
||||
import {Evga} from './evga';
|
||||
import {EvgaEu} from './evga-eu';
|
||||
import {Expert} from './expert';
|
||||
import {Galaxus} from './galaxus';
|
||||
import {Game} from './game';
|
||||
import {Gamestop} from './gamestop';
|
||||
import {GamestopDE} from './gamestop-de';
|
||||
import {Kabum} from './kabum';
|
||||
import {Mediamarkt} from './mediamarkt';
|
||||
import {Medimax} from './medimax';
|
||||
import {MemoryExpress} from './memoryexpress';
|
||||
import {MicroCenter} from './microcenter';
|
||||
import {Mindfactory} from './mindfactory';
|
||||
import {Newegg} from './newegg';
|
||||
@@ -37,15 +62,26 @@ import {Novatech} from './novatech';
|
||||
import {Nvidia} from './nvidia';
|
||||
import {NvidiaApi} from './nvidia-api';
|
||||
import {OfficeDepot} from './officedepot';
|
||||
import {Otto} from './otto';
|
||||
import {Overclockers} from './overclockers';
|
||||
import {PCComponentes} from './pccomponentes';
|
||||
import {PlayStation} from './playstation';
|
||||
import {Pny} from './pny';
|
||||
import {ProshopDE} from './proshop-de';
|
||||
import {ProshopDK} from './proshop-dk';
|
||||
import {Saturn} from './saturn';
|
||||
import {Scan} from './scan';
|
||||
import {SmythsToys} from './smythstoys';
|
||||
import {Spielegrotte} from './spielegrotte';
|
||||
import {Store} from './store';
|
||||
import {Target} from './target';
|
||||
import {TopAchat} from './topachat';
|
||||
import {Unieuro} from './unieuro';
|
||||
import {Very} from './very';
|
||||
import {VsGamers} from './vsgamers';
|
||||
import {Walmart} from './walmart';
|
||||
import {Wipoid} from './wipoid';
|
||||
import {Xbox} from './xbox';
|
||||
import {Zotac} from './zotac';
|
||||
import {logger} from '../../logger';
|
||||
|
||||
@@ -56,29 +92,54 @@ export const storeList = new Map([
|
||||
[Amazon.name, Amazon],
|
||||
[AmazonCa.name, AmazonCa],
|
||||
[AmazonDe.name, AmazonDe],
|
||||
[AmazonDeWarehouse.name, AmazonDeWarehouse],
|
||||
[AmazonEs.name, AmazonEs],
|
||||
[AmazonFr.name, AmazonFr],
|
||||
[AmazonNl.name, AmazonNl],
|
||||
[AmazonUk.name, AmazonUk],
|
||||
[AmazonIt.name, AmazonIt],
|
||||
[Amd.name, Amd],
|
||||
[AmdCa.name, AmdCa],
|
||||
[AmdDe.name, AmdDe],
|
||||
[AmdIt.name, AmdIt],
|
||||
[AntOnline.name, AntOnline],
|
||||
[Argos.name, Argos],
|
||||
[Aria.name, Aria],
|
||||
[Arlt.name, Arlt],
|
||||
[Asus.name, Asus],
|
||||
[AsusDe.name, AsusDe],
|
||||
[Awd.name, Awd],
|
||||
[Azerty.name, Azerty],
|
||||
[BAndH.name, BAndH],
|
||||
[BestBuy.name, BestBuy],
|
||||
[BestBuyCa.name, BestBuyCa],
|
||||
[Box.name, Box],
|
||||
[Caseking.name, Caseking],
|
||||
[CanadaComputers.name, CanadaComputers],
|
||||
[Ccl.name, Ccl],
|
||||
[Comet.name, Comet],
|
||||
[Computeruniverse.name, Computeruniverse],
|
||||
[Coolblue.name, Coolblue],
|
||||
[Coolmod.name, Coolmod],
|
||||
[Corsair.name, Corsair],
|
||||
[Currys.name, Currys],
|
||||
[Cyberport.name, Cyberport],
|
||||
[Ebuyer.name, Ebuyer],
|
||||
[Elcorteingles.name, Elcorteingles],
|
||||
[Eprice.name, Eprice],
|
||||
[Euronics.name, Euronics],
|
||||
[EuronicsDE.name, EuronicsDE],
|
||||
[Evga.name, Evga],
|
||||
[EvgaEu.name, EvgaEu],
|
||||
[Expert.name, Expert],
|
||||
[Galaxus.name, Galaxus],
|
||||
[Game.name, Game],
|
||||
[Gamestop.name, Gamestop],
|
||||
[GamestopDE.name, GamestopDE],
|
||||
[Kabum.name, Kabum],
|
||||
[Mediamarkt.name, Mediamarkt],
|
||||
[Medimax.name, Medimax],
|
||||
[MemoryExpress.name, MemoryExpress],
|
||||
[MicroCenter.name, MicroCenter],
|
||||
[Mindfactory.name, Mindfactory],
|
||||
[Newegg.name, Newegg],
|
||||
@@ -88,14 +149,25 @@ export const storeList = new Map([
|
||||
[Nvidia.name, Nvidia],
|
||||
[NvidiaApi.name, NvidiaApi],
|
||||
[OfficeDepot.name, OfficeDepot],
|
||||
[Otto.name, Otto],
|
||||
[Overclockers.name, Overclockers],
|
||||
[PCComponentes.name, PCComponentes],
|
||||
[PlayStation.name, PlayStation],
|
||||
[Pny.name, Pny],
|
||||
[ProshopDE.name, ProshopDE],
|
||||
[ProshopDK.name, ProshopDK],
|
||||
[Saturn.name, Saturn],
|
||||
[Scan.name, Scan],
|
||||
[SmythsToys.name, SmythsToys],
|
||||
[Spielegrotte.name, Spielegrotte],
|
||||
[Target.name, Target],
|
||||
[TopAchat.name, TopAchat],
|
||||
[Unieuro.name, Unieuro],
|
||||
[Very.name, Very],
|
||||
[VsGamers.name, VsGamers],
|
||||
[Walmart.name, Walmart],
|
||||
[Wipoid.name, Wipoid],
|
||||
[Xbox.name, Xbox],
|
||||
[Zotac.name, Zotac]
|
||||
]);
|
||||
|
||||
@@ -128,7 +200,11 @@ function filterBrandsSeriesModels() {
|
||||
|
||||
function printConfig() {
|
||||
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) {
|
||||
@@ -136,9 +212,15 @@ function printConfig() {
|
||||
}
|
||||
|
||||
if (config.store.showOnlyModels.length > 0) {
|
||||
logger.info(`ℹ selected models: ${config.store.showOnlyModels.map(entry => {
|
||||
return entry.series ? entry.name + ' (' + entry.series + ')' : entry.name;
|
||||
}).join(', ')}`);
|
||||
logger.info(
|
||||
`ℹ selected models: ${config.store.showOnlyModels
|
||||
.map((entry) => {
|
||||
return entry.series
|
||||
? entry.name + ' (' + entry.series + ')'
|
||||
: entry.name;
|
||||
})
|
||||
.join(', ')}`
|
||||
);
|
||||
}
|
||||
|
||||
if (config.store.showOnlySeries.length > 0) {
|
||||
@@ -150,10 +232,13 @@ function warnIfStoreDeprecated(store: Store) {
|
||||
switch (store.name) {
|
||||
case 'nvidia':
|
||||
case 'nvidia-api':
|
||||
logger.warn(`${store.name} is deprecated in favor of bestbuy`);
|
||||
if (config.store.country === 'usa')
|
||||
logger.warn(`${store.name} is deprecated in favor of bestbuy`);
|
||||
break;
|
||||
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;
|
||||
default:
|
||||
}
|
||||
@@ -170,6 +255,7 @@ export function updateStores() {
|
||||
stores.set(storeData.name, store);
|
||||
store.minPageSleep = storeData.minPageSleep;
|
||||
store.maxPageSleep = storeData.maxPageSleep;
|
||||
store.proxyList = storeData.proxyList;
|
||||
} else {
|
||||
logger.warn(`No store named ${storeData.name}, skipping.`);
|
||||
}
|
||||
|
||||
@@ -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'
|
||||
};
|
||||
@@ -1,36 +1,55 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const Mediamarkt: Store = {
|
||||
backoffStatusCodes: [403, 429, 503],
|
||||
labels: {
|
||||
captcha: {
|
||||
container: 'p',
|
||||
text: ['Das ging uns leider zu schnell.']
|
||||
},
|
||||
maxPrice: {
|
||||
container: 'span[font-family="price"]',
|
||||
euroFormat: false
|
||||
},
|
||||
outOfStock: [{
|
||||
container: '#root',
|
||||
text: ['dieser artikel ist aktuell nicht verfügbar.']
|
||||
},
|
||||
{
|
||||
container: '#root',
|
||||
text: ['leider keine Lieferung möglich']
|
||||
}]
|
||||
outOfStock: [
|
||||
{
|
||||
container: '#root',
|
||||
text: ['Dieser artikel ist aktuell nicht verfügbar.']
|
||||
},
|
||||
{
|
||||
container: '#root',
|
||||
text: ['Leider keine Lieferung möglich']
|
||||
}
|
||||
]
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.mediamarkt.de/de/product/-2592355.html'
|
||||
url: 'https://www.mediamarkt.de/de/product/-2641856.html'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix',
|
||||
model: 'dual',
|
||||
series: '3060ti',
|
||||
url: 'https://www.mediamarkt.de/de/product/-2701239.html'
|
||||
},
|
||||
{
|
||||
brand: 'zotac',
|
||||
model: 'twin edge',
|
||||
series: '3060ti',
|
||||
url: 'https://www.mediamarkt.de/de/product/-2704436.html'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'strix',
|
||||
series: '3070',
|
||||
url: 'https://www.mediamarkt.de/de/product/-2691243.html'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
series: '3070',
|
||||
url: 'https://www.mediamarkt.de/de/product/-2691244.html'
|
||||
},
|
||||
@@ -120,13 +139,13 @@ export const Mediamarkt: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
series: '3080',
|
||||
url: 'https://www.mediamarkt.de/de/product/-2681869.html'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
series: '3080',
|
||||
url: 'https://www.mediamarkt.de/de/product/-2681871.html'
|
||||
},
|
||||
@@ -186,13 +205,13 @@ export const Mediamarkt: Store = {
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix',
|
||||
model: 'strix',
|
||||
series: '3090',
|
||||
url: 'https://www.mediamarkt.de/de/product/-2681863.html'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'rog strix oc',
|
||||
model: 'strix oc',
|
||||
series: '3090',
|
||||
url: 'https://www.mediamarkt.de/de/product/-2681866.html'
|
||||
},
|
||||
@@ -231,6 +250,30 @@ export const Mediamarkt: Store = {
|
||||
model: 'gaming x trio',
|
||||
series: '3090',
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series x',
|
||||
series: 'xboxsx',
|
||||
url: 'https://www.mediamarkt.de/de/product/-2677360.html'
|
||||
},
|
||||
{
|
||||
brand: 'microsoft',
|
||||
model: 'xbox series s',
|
||||
series: 'xboxss',
|
||||
url: 'https://www.mediamarkt.de/de/product/-2677359.html'
|
||||
}
|
||||
],
|
||||
name: 'mediamarkt'
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
import {Store} from './store';
|
||||
|
||||
export const Medimax: Store = {
|
||||
labels: {
|
||||
inStock: [
|
||||
{
|
||||
container: '.product-cart-add-to-cart-button',
|
||||
text: ['In den Warenkorb']
|
||||
},
|
||||
{
|
||||
container: '.stock-message',
|
||||
text: ['Lieferung in']
|
||||
}
|
||||
],
|
||||
maxPrice: {
|
||||
container: '.priceOfProduct',
|
||||
euroFormat: true
|
||||
},
|
||||
outOfStock: {
|
||||
container: '.content .large',
|
||||
text: ['Ihr MEDIMAX Team']
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.medimax.de/p/1311642/drivesmart-51-lmt-d-ce'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 console',
|
||||
series: 'sonyps5c',
|
||||
url: 'https://www.medimax.de/p/1315336/play-station-5-825gb-ssd'
|
||||
},
|
||||
{
|
||||
brand: 'sony',
|
||||
model: 'ps5 digital',
|
||||
series: 'sonyps5de',
|
||||
url:
|
||||
'https://www.medimax.de/p/1315337/play-station-5-digital-edition-825gb-ssd'
|
||||
}
|
||||
],
|
||||
name: 'medimax'
|
||||
};
|
||||
@@ -0,0 +1,218 @@
|
||||
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', 'Backorder']
|
||||
}
|
||||
},
|
||||
links: [
|
||||
{
|
||||
brand: 'test:brand',
|
||||
model: 'test:model',
|
||||
series: 'test:series',
|
||||
url: 'https://www.memoryexpress.com/Products/MX79473'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'gaming x trio',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114969'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 2x oc',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114970'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'dual',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114818'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'strix',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114786'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'tuf',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114819'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'aorus',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114923'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114927'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle oc',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114926'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00115013'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114925'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc pro',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114924'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc gaming',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00115014'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'ko',
|
||||
series: '3060ti',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114888'
|
||||
},
|
||||
{
|
||||
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'
|
||||
},
|
||||
{
|
||||
brand: 'xfx',
|
||||
model: 'amd reference',
|
||||
series: 'rx6800xt',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114996'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114687'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'eagle oc',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00113955'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'gaming oc',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00113954'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3 black',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114094'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114095'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'gaming oc',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114003'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'vision oc',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114313'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'xc3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00113972'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'ventus 3x oc',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00113956'
|
||||
},
|
||||
{
|
||||
brand: 'msi',
|
||||
model: 'gaming x trio',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00113957'
|
||||
},
|
||||
{
|
||||
brand: 'evga',
|
||||
model: 'ftw3 ultra',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114024'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'aorus master',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114312'
|
||||
},
|
||||
{
|
||||
brand: 'asus',
|
||||
model: 'strix oc',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114092'
|
||||
},
|
||||
{
|
||||
brand: 'gigabyte',
|
||||
model: 'aorus xtreme',
|
||||
series: '3080',
|
||||
url: 'https://www.memoryexpress.com/Products/MX00114404'
|
||||
}
|
||||
],
|
||||
name: 'memoryexpress',
|
||||
waitUntil: 'domcontentloaded'
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user