refactor: use gts instead of xo

feat: add browser opening to test:notification
feat: add c8 and mocha for testing
feat: update Docker and ci
style: update editorconfig
This commit is contained in:
Jef LeCompte
2021-01-17 15:00:31 -05:00
parent dbde7814af
commit f87053cb02
184 changed files with 29898 additions and 32899 deletions
-5
View File
@@ -9,9 +9,4 @@ trim_trailing_whitespace = true
insert_final_newline = true insert_final_newline = true
[*.md] [*.md]
indent_style = space
indent_size = 4
[*.ts]
indent_style = tab
indent_size = 4 indent_size = 4
+2
View File
@@ -0,0 +1,2 @@
build/
docs/
+3
View File
@@ -0,0 +1,3 @@
{
"extends": "./node_modules/gts/"
}
+7 -6
View File
@@ -4,7 +4,7 @@ on:
branches: branches:
- main - main
jobs: jobs:
build-and-lint: build-lint:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@@ -18,11 +18,12 @@ jobs:
restore-keys: ${{ runner.os }}-node- restore-keys: ${{ runner.os }}-node-
- name: Add problem matcher - name: Add problem matcher
run: echo "::add-matcher::.github/xo-problem-matcher.json" run: echo "::add-matcher::.github/xo-problem-matcher.json"
- name: Pull dependencies - name: Install dependencies
run: | run: npm ci
npm ci - name: Compile TypeScript
npm run build run: npm run compile
npm run lint - name: Run linter
run: npm run lint
build-docker: build-docker:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
+1 -1
View File
@@ -2,8 +2,8 @@
.vs/ .vs/
.vscode/ .vscode/
build/ build/
coverage/
node_modules/ node_modules/
src/config/*.yaml
.env .env
dotenv dotenv
+3
View File
@@ -0,0 +1,3 @@
module.exports = {
...require('gts/.prettierrc.json')
}
+7 -7
View File
@@ -1,4 +1,4 @@
FROM node:14.15.0-alpine3.12 AS builder FROM node:14.15.4-alpine3.12 AS builder
LABEL org.opencontainers.image.source="https://github.com/jef/streetmerchant" LABEL org.opencontainers.image.source="https://github.com/jef/streetmerchant"
@@ -12,20 +12,20 @@ COPY tsconfig.json tsconfig.json
RUN npm ci RUN npm ci
COPY src/ src/ COPY src/ src/
RUN npm run build RUN npm run compile
RUN npm prune --production RUN npm prune --production
FROM node:14.15.0-alpine3.12 FROM node:14.15.4-alpine3.12
RUN apk add --no-cache chromium RUN apk add --no-cache chromium
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser \ ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser \
DOCKER=true DOCKER=true
RUN addgroup -S appuser && adduser -S -g appuser appuser \ RUN addgroup -S appuser && adduser -S -g appuser appuser \
&& mkdir -p /home/appuser/Downloads /app \ && mkdir -p /home/appuser/Downloads /app \
&& chown -R appuser:appuser /home/appuser \ && chown -R appuser:appuser /home/appuser \
&& chown -R appuser:appuser /app && chown -R appuser:appuser /app
USER appuser USER appuser
+1 -1
View File
@@ -64,7 +64,7 @@ To customize streetmerchant, make a copy of `dotenv-example` as `dotenv` and mak
The command `npm run start:dev` can be used instead of `npm run start` to automatically restart the project when filesystem changes are detected in the `src/` folder or `dotenv` file. The command `npm run start:dev` can be used instead of `npm run start` to automatically restart the project when filesystem changes are detected in the `src/` folder or `dotenv` file.
Use `npm run lint` to see any linting uses and `npm run lint:fix` to automatically fix the issues it can. Use `npm run lint` to see any linting uses and `npm run fix` to automatically fix the issues it can.
### Developing in Docker ### Developing in Docker
+6 -6
View File
@@ -1,6 +1,6 @@
app.document$.subscribe(function() { app.document$.subscribe(() => {
var tables = document.querySelectorAll("article table") const tables = document.querySelectorAll('article table');
tables.forEach(function(table) { tables.forEach(table => {
new Tablesort(table) new Tablesort(table);
}) });
}) });
+1711 -4562
View File
File diff suppressed because it is too large Load Diff
+22 -20
View File
@@ -3,15 +3,22 @@
"description": "The world's easiest, most powerful stock checker", "description": "The world's easiest, most powerful stock checker",
"main": "src/index.ts", "main": "src/index.ts",
"scripts": { "scripts": {
"all": "npm run build && npm run lint", "all": "npm run compile && npm run lint && npm run test",
"build": "tsc", "fix": "gts fix",
"lint": "xo", "lint": "gts lint",
"lint:fix": "xo --fix", "clean": "gts clean",
"start": "npm run build && node build/index.js", "compile": "tsc",
"pretest": "npm run compile",
"posttest": "npm run lint",
"start": "npm run compile && node build/src/index.js",
"start:dev": "nodemon --config nodemon.json", "start:dev": "nodemon --config nodemon.json",
"start:production": "node build/index.js", "start:production": "node build/src/index.js",
"test:notification": "npm run build && node build/__test__/notification-test.js", "test": "c8 mocha 'build/test/**/test-*.js' --exclude 'build/test/functional/**/test-*.js'",
"test:notification:production": "node build/__test__/notification-test.js" "test:notification": "npm run compile && node build/test/functional/test-notification.js",
"test:notification:production": "node build/test/functional/test-notification.js"
},
"engines": {
"node": ">=12.0.0 <15.0.0"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@@ -61,26 +68,21 @@
"devDependencies": { "devDependencies": {
"@types/async": "^3.2.5", "@types/async": "^3.2.5",
"@types/cheerio": "^0.22.23", "@types/cheerio": "^0.22.23",
"@types/mocha": "^8.2.0",
"@types/node": "^14.14.21", "@types/node": "^14.14.21",
"@types/node-fetch": "^2.5.8", "@types/node-fetch": "^2.5.8",
"@types/node-notifier": "^8.0.0", "@types/node-notifier": "^8.0.0",
"@types/nodemailer": "^6.4.0", "@types/nodemailer": "^6.4.0",
"@types/puppeteer": "^5.4.2", "@types/puppeteer": "^5.4.2",
"@types/sinon": "^9.0.10",
"@types/twitter": "^1.7.0", "@types/twitter": "^1.7.0",
"c8": "^7.4.0",
"gts": "^3.1.0",
"mocha": "^8.2.1",
"nodemon": "^2.0.7", "nodemon": "^2.0.7",
"sinon": "^9.2.3",
"ts-node": "^9.1.1", "ts-node": "^9.1.1",
"typescript": "^4.1.3", "typescript": "^4.1.3",
"webpack": "^5.14.0", "webpack": "^5.14.0"
"xo": "^0.36.1"
},
"xo": {
"prettier": true,
"ignores": "docs/javascripts",
"rules": {
"no-warning-comments": "off",
"sort-imports": "error",
"sort-keys": "error",
"sort-vars": "error"
}
} }
} }
-28
View File
@@ -1,28 +0,0 @@
import {Link, Store} from '../store/model';
import {sendNotification} from '../notification';
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'
};
const store: Store = {
currency: '',
labels: {
inStock: {
container: 'test:container',
text: ['test:text']
}
},
links: [link],
name: 'test:name'
};
/**
* Send test email.
*/
sendNotification(link, store);
+11 -11
View File
@@ -2,23 +2,23 @@ import {Page} from 'puppeteer';
import {PuppeteerExtraPluginAdblocker} from 'puppeteer-extra-plugin-adblocker'; import {PuppeteerExtraPluginAdblocker} from 'puppeteer-extra-plugin-adblocker';
export const adBlocker = new PuppeteerExtraPluginAdblocker({ export const adBlocker = new PuppeteerExtraPluginAdblocker({
blockTrackers: true blockTrackers: true,
}); });
export async function enableBlockerInPage(page: Page) { export async function enableBlockerInPage(page: Page) {
const blockerObject = await adBlocker.getBlocker(); const blockerObject = await adBlocker.getBlocker();
if (blockerObject.isBlockingEnabled(page)) { if (blockerObject.isBlockingEnabled(page)) {
return; return;
} }
await blockerObject.enableBlockingInPage(page); await blockerObject.enableBlockingInPage(page);
} }
export async function disableBlockerInPage(page: Page) { export async function disableBlockerInPage(page: Page) {
const blockerObject = await adBlocker.getBlocker(); const blockerObject = await adBlocker.getBlocker();
if (!blockerObject.isBlockingEnabled(page)) { if (!blockerObject.isBlockingEnabled(page)) {
return; return;
} }
await blockerObject.disableBlockingInPage(page); await blockerObject.disableBlockingInPage(page);
} }
+8 -8
View File
@@ -4,7 +4,7 @@ import {readFileSync} from 'fs';
const version = readFileSync('version.txt', 'utf8'); const version = readFileSync('version.txt', 'utf8');
export const banner = { export const banner = {
asciiVersion: ` asciiVersion: `
██████ ▄▄▄█████▓ ██▀███ ▓█████ ▓█████▄▄▄█████▓ ███▄ ▄███▓▓█████ ██▀███ ▄████▄ ██░ ██ ▄▄▄ ███▄ █ ▄▄▄█████▓ ██████ ▄▄▄█████▓ ██▀███ ▓█████ ▓█████▄▄▄█████▓ ███▄ ▄███▓▓█████ ██▀███ ▄████▄ ██░ ██ ▄▄▄ ███▄ █ ▄▄▄█████▓
▒██ ▒ ▓ ██▒ ▓▒▓██ ▒ ██▒▓█ ▀ ▓█ ▀▓ ██▒ ▓▒▓██▒▀█▀ ██▒▓█ ▀ ▓██ ▒ ██▒▒██▀ ▀█ ▓██░ ██▒▒████▄ ██ ▀█ █ ▓ ██▒ ▓▒ ▒██ ▒ ▓ ██▒ ▓▒▓██ ▒ ██▒▓█ ▀ ▓█ ▀▓ ██▒ ▓▒▓██▒▀█▀ ██▒▓█ ▀ ▓██ ▒ ██▒▒██▀ ▀█ ▓██░ ██▒▒████▄ ██ ▀█ █ ▓ ██▒ ▓▒
░ ▓██▄ ▒ ▓██░ ▒░▓██ ░▄█ ▒▒███ ▒███ ▒ ▓██░ ▒░▓██ ▓██░▒███ ▓██ ░▄█ ▒▒▓█ ▄ ▒██▀▀██░▒██ ▀█▄ ▓██ ▀█ ██▒▒ ▓██░ ▒░ ░ ▓██▄ ▒ ▓██░ ▒░▓██ ░▄█ ▒▒███ ▒███ ▒ ▓██░ ▒░▓██ ▓██░▒███ ▓██ ░▄█ ▒▒▓█ ▄ ▒██▀▀██░▒██ ▀█▄ ▓██ ▀█ ██▒▒ ▓██░ ▒░
@@ -15,11 +15,11 @@ export const banner = {
░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
${version}`, ${version}`,
render(ascii: boolean, hexColor: string) { render(ascii: boolean, hexColor: string) {
return chalk return chalk
.hex(hexColor) .hex(hexColor)
.bold(ascii ? this.asciiVersion : this.stringVersion); .bold(ascii ? this.asciiVersion : this.stringVersion);
}, },
stringVersion: `STREETMERCHANT stringVersion: `STREETMERCHANT
${version}` ${version}`,
}; };
+330 -333
View File
@@ -2,28 +2,29 @@ import {existsSync, readFileSync} from 'fs';
import {banner} from './banner'; import {banner} from './banner';
import dotenv from 'dotenv'; import dotenv from 'dotenv';
import path from 'path'; import path from 'path';
import * as console from 'console';
if (process.env.npm_config_conf) { if (process.env.npm_config_conf) {
if ( if (
existsSync(path.resolve(__dirname, '../' + process.env.npm_config_conf)) existsSync(path.resolve(__dirname, '../../' + process.env.npm_config_conf))
) { ) {
dotenv.config({ dotenv.config({
path: path.resolve(__dirname, '../' + process.env.npm_config_conf) path: path.resolve(__dirname, '../../' + process.env.npm_config_conf),
}); });
} else { } else {
dotenv.config({path: path.resolve(__dirname, '../.env')}); dotenv.config({path: path.resolve(__dirname, '../../.env')});
} }
} else if (existsSync(path.resolve(__dirname, '../dotenv'))) { } else if (existsSync(path.resolve(__dirname, '../../dotenv'))) {
dotenv.config({path: path.resolve(__dirname, '../dotenv')}); dotenv.config({path: path.resolve(__dirname, '../../dotenv')});
} else { } else {
dotenv.config({path: path.resolve(__dirname, '../.env')}); dotenv.config({path: path.resolve(__dirname, '../../.env')});
} }
console.info( console.info(
banner.render( banner.render(
envOrBoolean(process.env.ASCII_BANNER, false), envOrBoolean(process.env.ASCII_BANNER, false),
envOrString(process.env.BANNER_COLOR, '#808080') envOrString(process.env.BANNER_COLOR, '#808080')
) )
); );
/** /**
@@ -33,15 +34,15 @@ console.info(
* @param array Default array. If not set, is `[]`. * @param array Default array. If not set, is `[]`.
*/ */
function envOrArray( function envOrArray(
environment: string | undefined, environment: string | undefined,
array?: string[] array?: string[]
): string[] { ): string[] {
return (environment return (environment
? environment.includes('\n') ? environment.includes('\n')
? environment.split('\n') ? environment.split('\n')
: environment.split(',') : environment.split(',')
: array ?? [] : array ?? []
).map((s) => s.trim()); ).map(s => s.trim());
} }
/** /**
@@ -51,10 +52,10 @@ function envOrArray(
* @param boolean Default boolean. If not set, is `true`. * @param boolean Default boolean. If not set, is `true`.
*/ */
function envOrBoolean( function envOrBoolean(
environment: string | undefined, environment: string | undefined,
boolean?: boolean boolean?: boolean
): boolean { ): boolean {
return environment ? environment === 'true' : boolean ?? true; return environment ? environment === 'true' : boolean ?? true;
} }
/** /**
@@ -64,7 +65,7 @@ function envOrBoolean(
* @param string Default string. If not set, is `''`. * @param string Default string. If not set, is `''`.
*/ */
function envOrString(environment: string | undefined, string?: string): string { function envOrString(environment: string | undefined, string?: string): string {
return environment ? environment : string ?? ''; return environment ? environment : string ?? '';
} }
/** /**
@@ -74,7 +75,7 @@ function envOrString(environment: string | undefined, string?: string): string {
* @param number Default number. If not set, is `0`. * @param number Default number. If not set, is `0`.
*/ */
function envOrNumber(environment: string | undefined, number?: number): number { function envOrNumber(environment: string | undefined, number?: number): number {
return environment ? Number(environment) : number ?? 0; return environment ? Number(environment) : number ?? 0;
} }
/** /**
@@ -90,31 +91,31 @@ function envOrNumber(environment: string | undefined, number?: number): number {
* @param number Default number. If not set, is `0`. * @param number Default number. If not set, is `0`.
*/ */
function envOrNumberMin( function envOrNumberMin(
environmentMin: string | undefined, environmentMin: string | undefined,
environmentMax: string | undefined, environmentMax: string | undefined,
number?: number number?: number
) { ) {
if (environmentMin || environmentMax) { if (environmentMin || environmentMax) {
if (environmentMin && environmentMax) { if (environmentMin && environmentMax) {
return Number( return Number(
Number(environmentMin) < Number(environmentMax) Number(environmentMin) < Number(environmentMax)
? environmentMin ? environmentMin
: environmentMax : environmentMax
); );
} }
if (environmentMax) { if (environmentMax) {
return Number(environmentMax) < (number ?? 0) return Number(environmentMax) < (number ?? 0)
? Number(environmentMax) ? Number(environmentMax)
: number ?? 0; : number ?? 0;
} }
if (environmentMin) { if (environmentMin) {
return Number(environmentMin); return Number(environmentMin);
} }
} }
return number ?? 0; return number ?? 0;
} }
/** /**
@@ -130,68 +131,72 @@ function envOrNumberMin(
* @param number Default number. If not set, is `0`. * @param number Default number. If not set, is `0`.
*/ */
function envOrNumberMax( function envOrNumberMax(
environmentMin: string | undefined, environmentMin: string | undefined,
environmentMax: string | undefined, environmentMax: string | undefined,
number?: number number?: number
) { ) {
if (environmentMin || environmentMax) { if (environmentMin || environmentMax) {
if (environmentMin && environmentMax) { if (environmentMin && environmentMax) {
return Number( return Number(
Number(environmentMin) < Number(environmentMax) Number(environmentMin) < Number(environmentMax)
? environmentMax ? environmentMax
: environmentMax : environmentMax
); );
} }
if (environmentMin) { if (environmentMin) {
return Number(environmentMin) > (number ?? 0) return Number(environmentMin) > (number ?? 0)
? Number(environmentMin) ? Number(environmentMin)
: number ?? 0; : number ?? 0;
} }
if (environmentMax) { if (environmentMax) {
return Number(environmentMax); return Number(environmentMax);
} }
} }
return number ?? 0; return number ?? 0;
} }
function loadProxyList(filename: string) { function loadProxyList(filename: string): string[] {
return readFileSync(`${filename}.proxies`) try {
.toString() return readFileSync(`${filename}.proxies`)
.trim() .toString()
.split('\n') .trim()
.map((x) => x.trim()); .split('\n')
.map(x => x.trim());
} catch {
return [];
}
} }
const browser = { const browser = {
isHeadless: envOrBoolean(process.env.HEADLESS), isHeadless: envOrBoolean(process.env.HEADLESS),
isIncognito: envOrBoolean(process.env.INCOGNITO, false), isIncognito: envOrBoolean(process.env.INCOGNITO, false),
isTrusted: envOrBoolean(process.env.BROWSER_TRUSTED, false), isTrusted: envOrBoolean(process.env.BROWSER_TRUSTED, false),
lowBandwidth: envOrBoolean(process.env.LOW_BANDWIDTH, false), lowBandwidth: envOrBoolean(process.env.LOW_BANDWIDTH, false),
maxBackoff: envOrNumberMax( maxBackoff: envOrNumberMax(
process.env.PAGE_BACKOFF_MIN, process.env.PAGE_BACKOFF_MIN,
process.env.PAGE_BACKOFF_MAX, process.env.PAGE_BACKOFF_MAX,
3600000 3600000
), ),
maxSleep: envOrNumberMax( maxSleep: envOrNumberMax(
process.env.PAGE_SLEEP_MIN, process.env.PAGE_SLEEP_MIN,
process.env.PAGE_SLEEP_MAX, process.env.PAGE_SLEEP_MAX,
10000 10000
), ),
minBackoff: envOrNumberMin( minBackoff: envOrNumberMin(
process.env.PAGE_BACKOFF_MIN, process.env.PAGE_BACKOFF_MIN,
process.env.PAGE_BACKOFF_MAX, process.env.PAGE_BACKOFF_MAX,
10000 10000
), ),
minSleep: envOrNumberMin( minSleep: envOrNumberMin(
process.env.PAGE_SLEEP_MIN, process.env.PAGE_SLEEP_MIN,
process.env.PAGE_SLEEP_MAX, process.env.PAGE_SLEEP_MAX,
5000 5000
), ),
open: envOrBoolean(process.env.OPEN_BROWSER), open: envOrBoolean(process.env.OPEN_BROWSER),
userAgent: '' userAgent: '',
}; };
const docker = envOrBoolean(process.env.DOCKER, false); const docker = envOrBoolean(process.env.DOCKER, false);
@@ -199,262 +204,254 @@ const docker = envOrBoolean(process.env.DOCKER, false);
const logLevel = envOrString(process.env.LOG_LEVEL, 'info'); const logLevel = envOrString(process.env.LOG_LEVEL, 'info');
const notifications = { const notifications = {
desktop: process.env.DESKTOP_NOTIFICATIONS === 'true', desktop: process.env.DESKTOP_NOTIFICATIONS === 'true',
discord: { discord: {
notifyGroup: envOrArray(process.env.DISCORD_NOTIFY_GROUP), notifyGroup: envOrArray(process.env.DISCORD_NOTIFY_GROUP),
notifyGroupSeries: { notifyGroupSeries: {
'3060ti': envOrArray(process.env.DISCORD_NOTIFY_GROUP_3060TI), '3060ti': envOrArray(process.env.DISCORD_NOTIFY_GROUP_3060TI),
3070: envOrArray(process.env.DISCORD_NOTIFY_GROUP_3070), 3070: envOrArray(process.env.DISCORD_NOTIFY_GROUP_3070),
3080: envOrArray(process.env.DISCORD_NOTIFY_GROUP_3080), 3080: envOrArray(process.env.DISCORD_NOTIFY_GROUP_3080),
3090: envOrArray(process.env.DISCORD_NOTIFY_GROUP_3090), 3090: envOrArray(process.env.DISCORD_NOTIFY_GROUP_3090),
'captcha-deterrent': [], 'captcha-deterrent': [],
darkhero: envOrArray(process.env.DISCORD_NOTIFY_GROUP_DARKHERO), darkhero: envOrArray(process.env.DISCORD_NOTIFY_GROUP_DARKHERO),
rx6800: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RX6800), rx6800: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RX6800),
rx6800xt: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RX6800XT), rx6800xt: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RX6800XT),
rx6900xt: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RX6900XT), rx6900xt: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RX6900XT),
ryzen5600: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN5600), ryzen5600: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN5600),
ryzen5800: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN5800), ryzen5800: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN5800),
ryzen5900: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN5900), ryzen5900: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN5900),
ryzen5950: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN5950), ryzen5950: envOrArray(process.env.DISCORD_NOTIFY_GROUP_RYZEN5950),
sf: envOrArray(process.env.DISCORD_NOTIFY_GROUP_CORSAIR_SF), sf: envOrArray(process.env.DISCORD_NOTIFY_GROUP_CORSAIR_SF),
sonyps5c: envOrArray(process.env.DISCORD_NOTIFY_GROUP_SONYPS5C), sonyps5c: envOrArray(process.env.DISCORD_NOTIFY_GROUP_SONYPS5C),
sonyps5de: envOrArray(process.env.DISCORD_NOTIFY_GROUP_SONYPS5DE), sonyps5de: envOrArray(process.env.DISCORD_NOTIFY_GROUP_SONYPS5DE),
'test:series': envOrArray(process.env.DISCORD_NOTIFY_GROUP_TEST), 'test:series': envOrArray(process.env.DISCORD_NOTIFY_GROUP_TEST),
xboxss: envOrArray(process.env.DISCORD_NOTIFY_GROUP_XBOXSS), xboxss: envOrArray(process.env.DISCORD_NOTIFY_GROUP_XBOXSS),
xboxsx: envOrArray(process.env.DISCORD_NOTIFY_GROUP_XBOXSX) xboxsx: envOrArray(process.env.DISCORD_NOTIFY_GROUP_XBOXSX),
}, },
webhooks: envOrArray(process.env.DISCORD_WEB_HOOK) webhooks: envOrArray(process.env.DISCORD_WEB_HOOK),
}, },
email: { email: {
password: envOrString(process.env.EMAIL_PASSWORD), password: envOrString(process.env.EMAIL_PASSWORD),
smtpAddress: envOrString(process.env.SMTP_ADDRESS), smtpAddress: envOrString(process.env.SMTP_ADDRESS),
smtpPort: envOrNumber(process.env.SMTP_PORT, 25), smtpPort: envOrNumber(process.env.SMTP_PORT, 25),
to: envOrString( to: envOrString(
process.env.EMAIL_TO, process.env.EMAIL_TO,
envOrString(process.env.EMAIL_USERNAME) envOrString(process.env.EMAIL_USERNAME)
), ),
username: envOrString(process.env.EMAIL_USERNAME) username: envOrString(process.env.EMAIL_USERNAME),
}, },
mqtt: { mqtt: {
broker: envOrString(process.env.MQTT_BROKER_ADDRESS), broker: envOrString(process.env.MQTT_BROKER_ADDRESS),
clientId: envOrString(process.env.MQTT_CLIENT_ID), clientId: envOrString(process.env.MQTT_CLIENT_ID),
password: envOrString(process.env.MQTT_PASSWORD), password: envOrString(process.env.MQTT_PASSWORD),
port: envOrNumber(process.env.MQTT_BROKER_PORT, 1883), port: envOrNumber(process.env.MQTT_BROKER_PORT, 1883),
qos: envOrNumber(process.env.MQTT_QOS, 0), qos: envOrNumber(process.env.MQTT_QOS, 0),
topic: envOrString(process.env.MQTT_TOPIC, 'streetmerchant/alert'), topic: envOrString(process.env.MQTT_TOPIC, 'streetmerchant/alert'),
username: envOrString(process.env.MQTT_USERNAME) username: envOrString(process.env.MQTT_USERNAME),
}, },
pagerduty: { pagerduty: {
integrationKey: envOrString(process.env.PAGERDUTY_INTEGRATION_KEY), integrationKey: envOrString(process.env.PAGERDUTY_INTEGRATION_KEY),
severity: envOrString(process.env.PAGERDUTY_SEVERITY, 'info') severity: envOrString(process.env.PAGERDUTY_SEVERITY, 'info'),
}, },
philips_hue: { philips_hue: {
accessToken: envOrString(process.env.PHILIPS_HUE_CLOUD_ACCESS_TOKEN), accessToken: envOrString(process.env.PHILIPS_HUE_CLOUD_ACCESS_TOKEN),
apiKey: envOrString(process.env.PHILIPS_HUE_API_KEY), apiKey: envOrString(process.env.PHILIPS_HUE_API_KEY),
bridgeIp: envOrString(process.env.PHILIPS_HUE_LAN_BRIDGE_IP), bridgeIp: envOrString(process.env.PHILIPS_HUE_LAN_BRIDGE_IP),
clientId: envOrString(process.env.PHILIPS_HUE_CLOUD_CLIENT_ID), clientId: envOrString(process.env.PHILIPS_HUE_CLOUD_CLIENT_ID),
clientSecret: envOrString(process.env.PHILIPS_HUE_CLOUD_CLIENT_SECRET), clientSecret: envOrString(process.env.PHILIPS_HUE_CLOUD_CLIENT_SECRET),
lightColor: envOrString(process.env.PHILIPS_HUE_LIGHT_COLOR), lightColor: envOrString(process.env.PHILIPS_HUE_LIGHT_COLOR),
lightIds: envOrString(process.env.PHILIPS_HUE_LIGHT_IDS), lightIds: envOrString(process.env.PHILIPS_HUE_LIGHT_IDS),
lightPattern: envOrString(process.env.PHILIPS_HUE_LIGHT_PATTERN), lightPattern: envOrString(process.env.PHILIPS_HUE_LIGHT_PATTERN),
refreshToken: envOrString(process.env.PHILIPS_HUE_CLOUD_REFRESH_TOKEN), refreshToken: envOrString(process.env.PHILIPS_HUE_CLOUD_REFRESH_TOKEN),
remoteApiUsername: envOrString(process.env.PHILIPS_HUE_API_KEY) remoteApiUsername: envOrString(process.env.PHILIPS_HUE_API_KEY),
}, },
phone: { phone: {
availableCarriers: new Map([ availableCarriers: new Map([
['att', 'txt.att.net'], ['att', 'txt.att.net'],
['attgo', 'mms.att.net'], ['attgo', 'mms.att.net'],
['bell', 'txt.bell.ca'], ['bell', 'txt.bell.ca'],
['fido', 'fido.ca'], ['fido', 'fido.ca'],
['google', 'msg.fi.google.com'], ['google', 'msg.fi.google.com'],
['koodo', 'msg.koodomobile.com'], ['koodo', 'msg.koodomobile.com'],
['mint', 'mailmymobile.net'], ['mint', 'mailmymobile.net'],
['rogers', 'pcs.rogers.com'], ['rogers', 'pcs.rogers.com'],
['sprint', 'messaging.sprintpcs.com'], ['sprint', 'messaging.sprintpcs.com'],
['telus', 'msg.telus.com'], ['telus', 'msg.telus.com'],
['tmobile', 'tmomail.net'], ['tmobile', 'tmomail.net'],
['verizon', 'vtext.com'], ['verizon', 'vtext.com'],
['virgin', 'vmobl.com'], ['virgin', 'vmobl.com'],
['virgin-ca', 'vmobile.ca'], ['virgin-ca', 'vmobile.ca'],
['visible', 'vtext.com'] ['visible', 'vtext.com'],
]), ]),
carrier: envOrArray(process.env.PHONE_CARRIER), carrier: envOrArray(process.env.PHONE_CARRIER),
number: envOrArray(process.env.PHONE_NUMBER) number: envOrArray(process.env.PHONE_NUMBER),
}, },
playSound: envOrString(process.env.PLAY_SOUND), playSound: envOrString(process.env.PLAY_SOUND),
pushbullet: envOrString(process.env.PUSHBULLET), pushbullet: envOrString(process.env.PUSHBULLET),
pushover: { pushover: {
expire: envOrNumber(process.env.PUSHOVER_EXPIRE), expire: envOrNumber(process.env.PUSHOVER_EXPIRE),
priority: envOrNumber(process.env.PUSHOVER_PRIORITY), priority: envOrNumber(process.env.PUSHOVER_PRIORITY),
retry: envOrNumber(process.env.PUSHOVER_RETRY), retry: envOrNumber(process.env.PUSHOVER_RETRY),
token: envOrString(process.env.PUSHOVER_TOKEN), token: envOrString(process.env.PUSHOVER_TOKEN),
username: envOrString(process.env.PUSHOVER_USER) username: envOrString(process.env.PUSHOVER_USER),
}, },
redis: { redis: {
url: envOrString(process.env.REDIS_URL) url: envOrString(process.env.REDIS_URL),
}, },
slack: { slack: {
channel: envOrString(process.env.SLACK_CHANNEL), channel: envOrString(process.env.SLACK_CHANNEL),
token: envOrString(process.env.SLACK_TOKEN) token: envOrString(process.env.SLACK_TOKEN),
}, },
soundPlayer: envOrString(process.env.SOUND_PLAYER), soundPlayer: envOrString(process.env.SOUND_PLAYER),
telegram: { telegram: {
accessToken: envOrString(process.env.TELEGRAM_ACCESS_TOKEN), accessToken: envOrString(process.env.TELEGRAM_ACCESS_TOKEN),
chatId: envOrArray(process.env.TELEGRAM_CHAT_ID) chatId: envOrArray(process.env.TELEGRAM_CHAT_ID),
}, },
twilio: { twilio: {
accountSid: envOrString(process.env.TWILIO_ACCOUNT_SID), accountSid: envOrString(process.env.TWILIO_ACCOUNT_SID),
authToken: envOrString(process.env.TWILIO_AUTH_TOKEN), authToken: envOrString(process.env.TWILIO_AUTH_TOKEN),
from: envOrString(process.env.TWILIO_FROM_NUMBER), from: envOrString(process.env.TWILIO_FROM_NUMBER),
to: envOrString(process.env.TWILIO_TO_NUMBER) to: envOrString(process.env.TWILIO_TO_NUMBER),
}, },
twitch: { twitch: {
accessToken: envOrString(process.env.TWITCH_ACCESS_TOKEN), accessToken: envOrString(process.env.TWITCH_ACCESS_TOKEN),
channel: envOrString(process.env.TWITCH_CHANNEL), channel: envOrString(process.env.TWITCH_CHANNEL),
clientId: envOrString(process.env.TWITCH_CLIENT_ID), clientId: envOrString(process.env.TWITCH_CLIENT_ID),
clientSecret: envOrString(process.env.TWITCH_CLIENT_SECRET), clientSecret: envOrString(process.env.TWITCH_CLIENT_SECRET),
refreshToken: envOrString(process.env.TWITCH_REFRESH_TOKEN) refreshToken: envOrString(process.env.TWITCH_REFRESH_TOKEN),
}, },
twitter: { twitter: {
accessTokenKey: envOrString(process.env.TWITTER_ACCESS_TOKEN_KEY), accessTokenKey: envOrString(process.env.TWITTER_ACCESS_TOKEN_KEY),
accessTokenSecret: envOrString(process.env.TWITTER_ACCESS_TOKEN_SECRET), accessTokenSecret: envOrString(process.env.TWITTER_ACCESS_TOKEN_SECRET),
consumerKey: envOrString(process.env.TWITTER_CONSUMER_KEY), consumerKey: envOrString(process.env.TWITTER_CONSUMER_KEY),
consumerSecret: envOrString(process.env.TWITTER_CONSUMER_SECRET), consumerSecret: envOrString(process.env.TWITTER_CONSUMER_SECRET),
tweetTags: envOrString(process.env.TWITTER_TWEET_TAGS) tweetTags: envOrString(process.env.TWITTER_TWEET_TAGS),
} },
}; };
const nvidia = { const nvidia = {
addToCardAttempts: envOrNumber(process.env.NVIDIA_ADD_TO_CART_ATTEMPTS, 10), addToCardAttempts: envOrNumber(process.env.NVIDIA_ADD_TO_CART_ATTEMPTS, 10),
sessionTtl: envOrNumber(process.env.NVIDIA_SESSION_TTL, 60000) sessionTtl: envOrNumber(process.env.NVIDIA_SESSION_TTL, 60000),
}; };
const page = { const page = {
height: 1080, height: 1080,
inStockWaitTime: envOrNumber(process.env.IN_STOCK_WAIT_TIME), inStockWaitTime: envOrNumber(process.env.IN_STOCK_WAIT_TIME),
screenshot: envOrBoolean(process.env.SCREENSHOT), screenshot: envOrBoolean(process.env.SCREENSHOT),
timeout: envOrNumber(process.env.PAGE_TIMEOUT, 30000), timeout: envOrNumber(process.env.PAGE_TIMEOUT, 30000),
width: 1920 width: 1920,
}; };
const proxy = { const proxy = {
address: envOrString(process.env.PROXY_ADDRESS), 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') protocol: envOrString(process.env.PROXY_PROTOCOL, 'http'),
}; };
// Check for deprecated configuration values // Check for deprecated configuration values
if (process.env.MAX_PRICE) { if (process.env.MAX_PRICE) {
console.warn( console.warn(
' MAX_PRICE is deprecated, please use MAX_PRICE_SERIES_{{series}}' ' MAX_PRICE is deprecated, please use MAX_PRICE_SERIES_{{series}}'
); );
} }
const store = { const store = {
autoAddToCart: envOrBoolean(process.env.AUTO_ADD_TO_CART, true), autoAddToCart: envOrBoolean(process.env.AUTO_ADD_TO_CART, true),
country: envOrString(process.env.COUNTRY, 'usa'), country: envOrString(process.env.COUNTRY, 'usa'),
maxPrice: { maxPrice: {
series: { series: {
'3060ti': envOrNumber(process.env.MAX_PRICE_SERIES_3060TI), '3060ti': envOrNumber(process.env.MAX_PRICE_SERIES_3060TI),
3070: envOrNumber(process.env.MAX_PRICE_SERIES_3070), 3070: envOrNumber(process.env.MAX_PRICE_SERIES_3070),
3080: envOrNumber(process.env.MAX_PRICE_SERIES_3080), 3080: envOrNumber(process.env.MAX_PRICE_SERIES_3080),
3090: envOrNumber(process.env.MAX_PRICE_SERIES_3090), 3090: envOrNumber(process.env.MAX_PRICE_SERIES_3090),
'captcha-deterrent': 0, 'captcha-deterrent': 0,
darkhero: envOrNumber(process.env.MAX_PRICE_SERIES_DARKHERO), darkhero: envOrNumber(process.env.MAX_PRICE_SERIES_DARKHERO),
rx6800: envOrNumber(process.env.MAX_PRICE_SERIES_RX6800), rx6800: envOrNumber(process.env.MAX_PRICE_SERIES_RX6800),
rx6800xt: envOrNumber(process.env.MAX_PRICE_SERIES_RX6800XT), rx6800xt: envOrNumber(process.env.MAX_PRICE_SERIES_RX6800XT),
rx6900xt: envOrNumber(process.env.MAX_PRICE_SERIES_RX6900XT), rx6900xt: envOrNumber(process.env.MAX_PRICE_SERIES_RX6900XT),
ryzen5600: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5600), ryzen5600: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5600),
ryzen5800: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5800), ryzen5800: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5800),
ryzen5900: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5900), ryzen5900: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5900),
ryzen5950: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5950), ryzen5950: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5950),
sf: envOrNumber(process.env.MAX_PRICE_SERIES_CORSAIR_SF), sf: envOrNumber(process.env.MAX_PRICE_SERIES_CORSAIR_SF),
sonyps5c: envOrNumber(process.env.MAX_PRICE_SERIES_SONYPS5C), sonyps5c: envOrNumber(process.env.MAX_PRICE_SERIES_SONYPS5C),
sonyps5de: envOrNumber(process.env.MAX_PRICE_SERIES_SONYPS5DE), sonyps5de: envOrNumber(process.env.MAX_PRICE_SERIES_SONYPS5DE),
'test:series': envOrNumber(process.env.MAX_PRICE_SERIES_TEST), 'test:series': envOrNumber(process.env.MAX_PRICE_SERIES_TEST),
xboxss: envOrNumber(process.env.MAX_PRICE_SERIES_XBOXSS), xboxss: envOrNumber(process.env.MAX_PRICE_SERIES_XBOXSS),
xboxsx: envOrNumber(process.env.MAX_PRICE_SERIES_XBOXSX) xboxsx: envOrNumber(process.env.MAX_PRICE_SERIES_XBOXSX),
} },
}, },
microCenterLocation: envOrArray(process.env.MICROCENTER_LOCATION, ['web']), microCenterLocation: envOrArray(process.env.MICROCENTER_LOCATION, ['web']),
showOnlyBrands: envOrArray(process.env.SHOW_ONLY_BRANDS), showOnlyBrands: envOrArray(process.env.SHOW_ONLY_BRANDS),
showOnlyModels: envOrArray(process.env.SHOW_ONLY_MODELS).map((entry) => { showOnlyModels: envOrArray(process.env.SHOW_ONLY_MODELS).map(entry => {
const [name, series] = entry.match(/[^:]+/g) ?? []; const [name, series] = entry.match(/[^:]+/g) ?? [];
return { return {
name: envOrString(name), name: envOrString(name),
series: envOrString(series) series: envOrString(series),
}; };
}), }),
showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, [ showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, [
'3060ti', '3060ti',
'3070', '3070',
'3080', '3080',
'3090', '3090',
'rx6800', 'rx6800',
'rx6800xt', 'rx6800xt',
'rx6900xt', 'rx6900xt',
'ryzen5600', 'ryzen5600',
'ryzen5800', 'ryzen5800',
'ryzen5900', 'ryzen5900',
'ryzen5950', 'ryzen5950',
'sonyps5c', 'sonyps5c',
'sonyps5de', 'sonyps5de',
'xboxss', 'xboxss',
'xboxsx' 'xboxsx',
]), ]),
stores: envOrArray(process.env.STORES, ['amazon', 'bestbuy']).map( stores: envOrArray(process.env.STORES, ['amazon', 'bestbuy']).map(entry => {
(entry) => { const [name, minPageSleep, maxPageSleep] = entry.match(/[^:]+/g) ?? [];
const [name, minPageSleep, maxPageSleep] =
entry.match(/[^:]+/g) ?? [];
let proxyList; let proxyList = loadProxyList(name);
try {
proxyList = loadProxyList(name);
} catch {}
if (!proxyList) { if (proxyList.length === 0) {
try { proxyList = loadProxyList('global');
proxyList = loadProxyList('global'); }
} catch {}
}
return { return {
maxPageSleep: envOrNumberMax( maxPageSleep: envOrNumberMax(
minPageSleep, minPageSleep,
maxPageSleep, maxPageSleep,
browser.maxSleep browser.maxSleep
), ),
minPageSleep: envOrNumberMin( minPageSleep: envOrNumberMin(
minPageSleep, minPageSleep,
maxPageSleep, maxPageSleep,
browser.minSleep browser.minSleep
), ),
name: envOrString(name), name: envOrString(name),
proxyList proxyList,
}; };
} }),
)
}; };
export const defaultStoreData = { export const defaultStoreData = {
maxPageSleep: browser.maxSleep, maxPageSleep: browser.maxSleep,
minPageSleep: browser.minSleep minPageSleep: browser.minSleep,
}; };
export const config = { export const config = {
browser, browser,
docker, docker,
logLevel, logLevel,
notifications, notifications,
nvidia, nvidia,
page, page,
proxy, proxy,
store store,
}; };
export function setConfig(newConfig: any) { export function setConfig(newConfig: any) {
const writeConfig = config as any; const writeConfig = config as any;
for (const key of Object.keys(newConfig)) { for (const key of Object.keys(newConfig)) {
writeConfig[key] = newConfig[key]; writeConfig[key] = newConfig[key];
} }
} }
+62 -62
View File
@@ -1,3 +1,4 @@
import * as Process from 'process';
import {config} from './config'; // Needs to be loaded first import {config} from './config'; // Needs to be loaded first
import {startAPIServer, stopAPIServer} from './web'; // eslint-disable-line sort-imports import {startAPIServer, stopAPIServer} from './web'; // eslint-disable-line sort-imports
import {Browser} from 'puppeteer'; import {Browser} from 'puppeteer';
@@ -16,90 +17,89 @@ let browser: Browser | undefined;
* Starts the bot. * Starts the bot.
*/ */
async function main() { async function main() {
const args: string[] = []; const args: string[] = [];
// Skip Chromium Linux Sandbox // Skip Chromium Linux Sandbox
// https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#setting-up-chrome-linux-sandbox // https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#setting-up-chrome-linux-sandbox
if (config.browser.isTrusted) { if (config.browser.isTrusted) {
args.push('--no-sandbox'); args.push('--no-sandbox');
args.push('--disable-setuid-sandbox'); args.push('--disable-setuid-sandbox');
} }
// https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#tips // https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#tips
// https://stackoverflow.com/questions/48230901/docker-alpine-with-node-js-and-chromium-headless-puppeter-failed-to-launch-c // https://stackoverflow.com/questions/48230901/docker-alpine-with-node-js-and-chromium-headless-puppeter-failed-to-launch-c
if (config.docker) { if (config.docker) {
args.push('--disable-dev-shm-usage'); args.push('--disable-dev-shm-usage');
args.push('--no-sandbox'); args.push('--no-sandbox');
args.push('--disable-setuid-sandbox'); args.push('--disable-setuid-sandbox');
args.push('--headless'); args.push('--headless');
args.push('--disable-gpu'); args.push('--disable-gpu');
} }
// Add the address of the proxy server if defined // Add the address of the proxy server if defined
if (config.proxy.address) { if (config.proxy.address) {
args.push( args.push(
`--proxy-server=${config.proxy.protocol}://${config.proxy.address}:${config.proxy.port}` `--proxy-server=${config.proxy.protocol}://${config.proxy.address}:${config.proxy.port}`
); );
} }
if (args.length > 0) { if (args.length > 0) {
logger.info(' puppeteer config: ', args); logger.info(' puppeteer config: ', args);
} }
await stop(); await stop();
browser = await puppeteer.launch({ browser = await puppeteer.launch({
args, args,
defaultViewport: { defaultViewport: {
height: config.page.height, height: config.page.height,
width: config.page.width width: config.page.width,
}, },
headless: config.browser.isHeadless headless: config.browser.isHeadless,
}); });
config.browser.userAgent = await browser.userAgent(); config.browser.userAgent = await browser.userAgent();
for (const store of storeList.values()) { for (const store of storeList.values()) {
logger.debug('store links', {meta: {links: store.links}}); logger.debug('store links', {meta: {links: store.links}});
if (store.setupAction !== undefined) { if (store.setupAction !== undefined) {
store.setupAction(browser); store.setupAction(browser);
} }
setTimeout(tryLookupAndLoop, getSleepTime(store), browser, store); setTimeout(tryLookupAndLoop, getSleepTime(store), browser, store);
} }
await startAPIServer(); await startAPIServer();
} }
async function stop() { async function stop() {
await stopAPIServer(); await stopAPIServer();
if (browser) { if (browser) {
// Use temporary swap variable to avoid any race condition // Use temporary swap variable to avoid any race condition
const browserTemporary = browser; const browserTemporary = browser;
browser = undefined; browser = undefined;
await browserTemporary.close(); await browserTemporary.close();
} }
} }
async function stopAndExit() { async function stopAndExit() {
await stop(); await stop();
// eslint-disable-next-line unicorn/no-process-exit Process.exit(0);
process.exit(0);
} }
/** /**
* Will continually run until user interferes. * Will continually run until user interferes.
*/ */
async function loopMain() { async function loopMain() {
try { try {
await main(); await main();
} catch (error: unknown) { } catch (error: unknown) {
logger.error( logger.error(
'✖ something bad happened, resetting streetmerchant in 5 seconds', '✖ something bad happened, resetting streetmerchant in 5 seconds',
error error
); );
setTimeout(loopMain, 5000); setTimeout(loopMain, 5000);
} }
} }
void loopMain(); void loopMain();
+211 -216
View File
@@ -3,254 +3,249 @@ import chalk from 'chalk';
import {config} from './config'; import {config} from './config';
import winston from 'winston'; import winston from 'winston';
const prettyJson = winston.format.printf((info) => { const prettyJson = winston.format.printf(info => {
const timestamp = new Date().toLocaleTimeString(); const timestamp = new Date().toLocaleTimeString();
let out = `${chalk.grey(`[${timestamp}]`)} ${info.level} ${chalk.grey( let out = `${chalk.grey(`[${timestamp}]`)} ${info.level} ${chalk.grey(
'::' '::'
)} ${info.message}`; )} ${info.message}`;
if (Object.keys(info.metadata).length > 0) { if (Object.keys(info.metadata).length > 0) {
out = `${out} ${chalk.magenta(JSON.stringify(info.metadata, null, 2))}`; out = `${out} ${chalk.magenta(JSON.stringify(info.metadata, null, 2))}`;
} }
return out; return out;
}); });
export const logger = winston.createLogger({ export const logger = winston.createLogger({
format: winston.format.combine( format: winston.format.combine(
winston.format.colorize(), winston.format.colorize(),
winston.format.metadata({ winston.format.metadata({
fillExcept: ['level', 'message', 'timestamp'] fillExcept: ['level', 'message', 'timestamp'],
}), }),
prettyJson prettyJson
), ),
level: config.logLevel, level: config.logLevel,
transports: [new winston.transports.Console({})] transports: [new winston.transports.Console({})],
}); });
export const Print = { export const Print = {
backoff( backoff(
link: Link, link: Link,
store: Store, store: Store,
parameters: {delay: number; statusCode: number}, parameters: {delay: number; statusCode: number},
color?: boolean color?: boolean
): string { ): string {
if (color) { if (color) {
return ( return (
'✖ ' + '✖ ' +
buildProductString(link, store, true) + buildProductString(link, store, true) +
' :: ' + ' :: ' +
chalk.yellow( chalk.yellow(
`BACKOFF DELAY status=${parameters.statusCode} delay=${parameters.delay}` `BACKOFF DELAY status=${parameters.statusCode} delay=${parameters.delay}`
) )
); );
} }
return `${buildProductString(link, store)} :: BACKOFF DELAY status=${ return `${buildProductString(link, store)} :: BACKOFF DELAY status=${
parameters.statusCode parameters.statusCode
} delay=${parameters.delay}`; } delay=${parameters.delay}`;
}, },
badStatusCode( badStatusCode(
link: Link, link: Link,
store: Store, store: Store,
statusCode: number, statusCode: number,
color?: boolean color?: boolean
): string { ): string {
if (color) { if (color) {
return ( return (
'✖ ' + '✖ ' +
buildProductString(link, store, true) + buildProductString(link, store, true) +
' :: ' + ' :: ' +
chalk.yellow(`STATUS CODE ERROR ${statusCode}`) chalk.yellow(`STATUS CODE ERROR ${statusCode}`)
); );
} }
return `${buildProductString( return `${buildProductString(
link, link,
store store
)} :: STATUS CODE ERROR ${statusCode}`; )} :: STATUS CODE ERROR ${statusCode}`;
}, },
bannedSeller(link: Link, store: Store, color?: boolean): string { bannedSeller(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return ( return (
'✖ ' + '✖ ' +
buildProductString(link, store, true) + buildProductString(link, store, true) +
' :: ' + ' :: ' +
chalk.yellow('BANNED SELLER') chalk.yellow('BANNED SELLER')
); );
} }
return `${buildProductString(link, store)} :: BANNED SELLER`; return `${buildProductString(link, store)} :: BANNED SELLER`;
}, },
captcha(link: Link, store: Store, color?: boolean): string { captcha(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return ( return (
'✖ ' + '✖ ' +
buildProductString(link, store, true) + buildProductString(link, store, true) +
' :: ' + ' :: ' +
chalk.yellow('CAPTCHA') chalk.yellow('CAPTCHA')
); );
} }
return `${buildProductString(link, store)} :: CAPTCHA`; return `${buildProductString(link, store)} :: CAPTCHA`;
}, },
cloudflare(link: Link, store: Store, color?: boolean): string { cloudflare(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return ( return (
'✖ ' + '✖ ' +
buildProductString(link, store, true) + buildProductString(link, store, true) +
' :: ' + ' :: ' +
chalk.yellow('CLOUDFLARE, WAITING') chalk.yellow('CLOUDFLARE, WAITING')
); );
} }
return `${buildProductString(link, store)} :: CLOUDFLARE, WAITING`; return `${buildProductString(link, store)} :: CLOUDFLARE, WAITING`;
}, },
inStock(link: Link, store: Store, color?: boolean, sms?: boolean): string { inStock(link: Link, store: Store, color?: boolean, sms?: boolean): string {
const productString = `${buildProductString(link, store)} :: IN STOCK`; const productString = `${buildProductString(link, store)} :: IN STOCK`;
if (color) { if (color) {
return chalk.bgGreen.white.bold(`🚀🚨 ${productString} 🚨🚀`); return chalk.bgGreen.white.bold(`🚀🚨 ${productString} 🚨🚀`);
} }
if (sms) { if (sms) {
return productString; return productString;
} }
return `🚀🚨 ${productString} 🚨🚀`; return `🚀🚨 ${productString} 🚨🚀`;
}, },
inStockWaiting(link: Link, store: Store, color?: boolean): string { inStockWaiting(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return ( return (
' ' + ' ' +
buildProductString(link, store, true) + buildProductString(link, store, true) +
' :: ' + ' :: ' +
chalk.yellow('IN STOCK, WAITING') chalk.yellow('IN STOCK, WAITING')
); );
} }
return ` ${buildProductString(link, store)} :: IN STOCK, WAITING`; return ` ${buildProductString(link, store)} :: IN STOCK, WAITING`;
}, },
maxPrice( maxPrice(
link: Link, link: Link,
store: Store, store: Store,
maxPrice: number, maxPrice: number,
color?: boolean color?: boolean
): string { ): string {
if (color) { if (color) {
return ( return (
'✖ ' + '✖ ' +
buildProductString(link, store, true) + buildProductString(link, store, true) +
' :: ' + ' :: ' +
chalk.yellow( chalk.yellow(`PRICE ${link.price ?? ''} EXCEEDS LIMIT ${maxPrice}`)
`PRICE ${link.price ?? ''} EXCEEDS LIMIT ${maxPrice}` );
) }
);
}
return `${buildProductString(link, store)} :: PRICE ${ return `${buildProductString(link, store)} :: PRICE ${
link.price ?? '' link.price ?? ''
} EXCEEDS LIMIT ${maxPrice}`; } EXCEEDS LIMIT ${maxPrice}`;
}, },
message( message(
message: string, message: string,
topic: string, topic: string,
store: Store, store: Store,
color?: boolean color?: boolean
): string { ): string {
if (color) { if (color) {
return ( return (
'✖ ' + '✖ ' +
buildSetupString(topic, store, true) + buildSetupString(topic, store, true) +
' :: ' + ' :: ' +
chalk.yellow(message) chalk.yellow(message)
); );
} }
return `${buildSetupString(topic, store)} :: ${message}`; return `${buildSetupString(topic, store)} :: ${message}`;
}, },
noResponse(link: Link, store: Store, color?: boolean): string { noResponse(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return ( return (
'✖ ' + '✖ ' +
buildProductString(link, store, true) + buildProductString(link, store, true) +
' :: ' + ' :: ' +
chalk.yellow('NO RESPONSE') chalk.yellow('NO RESPONSE')
); );
} }
return `${buildProductString(link, store)} :: NO RESPONSE`; return `${buildProductString(link, store)} :: NO RESPONSE`;
}, },
outOfStock(link: Link, store: Store, color?: boolean): string { outOfStock(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return ( return (
'✖ ' + '✖ ' +
buildProductString(link, store, true) + buildProductString(link, store, true) +
' :: ' + ' :: ' +
chalk.red('OUT OF STOCK') chalk.red('OUT OF STOCK')
); );
} }
return `${buildProductString(link, store)} :: OUT OF STOCK`; return `${buildProductString(link, store)} :: OUT OF STOCK`;
}, },
productInStock(link: Link): string { productInStock(link: Link): string {
let productString = `Product Page: ${link.url}`; let productString = `Product Page: ${link.url}`;
if (link.cartUrl) if (link.cartUrl) productString += `\nAdd To Cart Link: ${link.cartUrl}`;
productString += `\nAdd To Cart Link: ${link.cartUrl}`;
return productString; return productString;
}, },
rateLimit(link: Link, store: Store, color?: boolean): string { rateLimit(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return ( return (
'✖ ' + '✖ ' +
buildProductString(link, store, true) + buildProductString(link, store, true) +
' :: ' + ' :: ' +
chalk.yellow('RATE LIMIT EXCEEDED') chalk.yellow('RATE LIMIT EXCEEDED')
); );
} }
return `${buildProductString(link, store)} :: RATE LIMIT EXCEEDED`; return `${buildProductString(link, store)} :: RATE LIMIT EXCEEDED`;
}, },
recursionLimit(link: Link, store: Store, color?: boolean): string { recursionLimit(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return ( return (
'✖ ' + '✖ ' +
buildProductString(link, store, true) + buildProductString(link, store, true) +
' :: ' + ' :: ' +
chalk.yellow('CLOUDFLARE RETRY LIMIT REACHED, ABORT') chalk.yellow('CLOUDFLARE RETRY LIMIT REACHED, ABORT')
); );
} }
return `${buildProductString( return `${buildProductString(
link, link,
store store
)} :: CLOUDFLARE RETRY LIMIT REACHED, ABORT`; )} :: CLOUDFLARE RETRY LIMIT REACHED, ABORT`;
} },
}; };
function buildSetupString( function buildSetupString(
topic: string, topic: string,
store: Store, store: Store,
color?: boolean color?: boolean
): string { ): string {
if (color) { if (color) {
return ( return chalk.cyan(`[${store.name}]`) + chalk.grey(` [setup (${topic})]`);
chalk.cyan(`[${store.name}]`) + chalk.grey(` [setup (${topic})]`) }
);
}
return `[${store.name}] [setup (${topic})]`; return `[${store.name}] [setup (${topic})]`;
} }
function buildProductString(link: Link, store: Store, color?: boolean): string { function buildProductString(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return ( return (
chalk.cyan(`[${store.name}]`) + chalk.cyan(`[${store.name}]`) +
chalk.grey(` [${link.brand} (${link.series})] ${link.model}`) chalk.grey(` [${link.brand} (${link.series})] ${link.model}`)
); );
} }
return `[${store.name}] [${link.brand} (${link.series})] ${link.model}`; return `[${store.name}] [${link.brand} (${link.series})] ${link.model}`;
} }
+15 -15
View File
@@ -7,20 +7,20 @@ import notifier from 'node-notifier';
const {desktop} = config.notifications; const {desktop} = config.notifications;
export function sendDesktopNotification(link: Link, store: Store) { export function sendDesktopNotification(link: Link, store: Store) {
if (desktop) { if (desktop) {
logger.debug('↗ sending desktop notification'); logger.debug('↗ sending desktop notification');
(async () => { (async () => {
notifier.notify({ notifier.notify({
icon: join( icon: join(
__dirname, __dirname,
'../../docs/assets/images/streetmerchant-logo.png' '../../../docs/assets/images/streetmerchant-logo.png'
), ),
message: link.cartUrl ? link.cartUrl : link.url, message: link.cartUrl ? link.cartUrl : link.url,
open: link.cartUrl ? link.cartUrl : link.url, open: link.cartUrl ? link.cartUrl : link.url,
title: Print.inStock(link, store) title: Print.inStock(link, store),
}); });
logger.info('✔ desktop notification sent'); logger.info('✔ desktop notification sent');
})(); })();
} }
} }
+57 -65
View File
@@ -6,84 +6,76 @@ import {logger} from '../logger';
const {notifyGroup, webhooks, notifyGroupSeries} = config.notifications.discord; const {notifyGroup, webhooks, notifyGroupSeries} = config.notifications.discord;
function getIdAndToken(webhook: string) { function getIdAndToken(webhook: string) {
const match = /.*\/webhooks\/(\d+)\/(.+)/.exec(webhook); const match = /.*\/webhooks\/(\d+)\/(.+)/.exec(webhook);
if (!match) { if (!match) {
throw new Error('could not get discord webhook'); throw new Error('could not get discord webhook');
} }
return { return {
id: match[1], id: match[1],
token: match[2] token: match[2],
}; };
} }
export function sendDiscordMessage(link: Link, store: Store) { export function sendDiscordMessage(link: Link, store: Store) {
if (webhooks.length > 0) { if (webhooks.length > 0) {
logger.debug('↗ sending discord message'); logger.debug('↗ sending discord message');
(async () => { (async () => {
try { try {
const embed = new Discord.MessageEmbed() const embed = new Discord.MessageEmbed()
.setTitle('_**Stock alert!**_') .setTitle('_**Stock alert!**_')
.setDescription( .setDescription(
'> provided by [streetmerchant](https://github.com/jef/streetmerchant) with :heart:' '> provided by [streetmerchant](https://github.com/jef/streetmerchant) with :heart:'
) )
.setThumbnail( .setThumbnail(
'https://raw.githubusercontent.com/jef/streetmerchant/main/docs/assets/images/streetmerchant-logo.png' 'https://raw.githubusercontent.com/jef/streetmerchant/main/docs/assets/images/streetmerchant-logo.png'
) )
.setColor('#52b788') .setColor('#52b788')
.setTimestamp(); .setTimestamp();
embed.addField('Store', store.name, true); embed.addField('Store', store.name, true);
if (link.price) if (link.price)
embed.addField( embed.addField('Price', `${store.currency}${link.price}`, true);
'Price', embed.addField('Product Page', link.url);
`${store.currency}${link.price}`, if (link.cartUrl) embed.addField('Add to Cart', link.cartUrl);
true embed.addField('Brand', link.brand, true);
); embed.addField('Model', link.model, true);
embed.addField('Product Page', link.url); embed.addField('Series', link.series, true);
if (link.cartUrl) embed.addField('Add to Cart', link.cartUrl);
embed.addField('Brand', link.brand, true);
embed.addField('Model', link.model, true);
embed.addField('Series', link.series, true);
embed.setTimestamp(); embed.setTimestamp();
let notifyText: string[] = []; let notifyText: string[] = [];
if (notifyGroup) { if (notifyGroup) {
notifyText = notifyText.concat(notifyGroup); notifyText = notifyText.concat(notifyGroup);
} }
if (Object.keys(notifyGroupSeries).indexOf(link.series) !== 0) { if (Object.keys(notifyGroupSeries).indexOf(link.series) !== 0) {
notifyText = notifyText.concat( notifyText = notifyText.concat(notifyGroupSeries[link.series]);
notifyGroupSeries[link.series] }
);
}
const promises = []; const promises = [];
for (const webhook of webhooks) { for (const webhook of webhooks) {
const {id, token} = getIdAndToken(webhook); const {id, token} = getIdAndToken(webhook);
const client = new Discord.WebhookClient(id, token); const client = new Discord.WebhookClient(id, token);
promises.push({ promises.push({
client, client,
message: client.send(notifyText.join(' '), { message: client.send(notifyText.join(' '), {
embeds: [embed], embeds: [embed],
username: 'streetmerchant' username: 'streetmerchant',
}) }),
}); });
} }
(await Promise.all(promises)).forEach(({client}) => (await Promise.all(promises)).forEach(({client}) => client.destroy());
client.destroy()
);
logger.info('✔ discord message sent'); logger.info('✔ discord message sent');
} catch (error: unknown) { } catch (error: unknown) {
logger.error("✖ couldn't send discord message", error); logger.error("✖ couldn't send discord message", error);
} }
})(); })();
} }
} }
+31 -31
View File
@@ -9,47 +9,47 @@ const {email} = config.notifications;
const transportOptions: any = {}; const transportOptions: any = {};
if (email.username && (email.password || email.smtpAddress)) { if (email.username && (email.password || email.smtpAddress)) {
transportOptions.auth = {}; transportOptions.auth = {};
transportOptions.auth.user = email.username; transportOptions.auth.user = email.username;
transportOptions.auth.pass = email.password; transportOptions.auth.pass = email.password;
} }
if (email.smtpAddress) { if (email.smtpAddress) {
transportOptions.host = email.smtpAddress; transportOptions.host = email.smtpAddress;
transportOptions.port = email.smtpPort; transportOptions.port = email.smtpPort;
} else { } else {
transportOptions.service = 'gmail'; transportOptions.service = 'gmail';
} }
export const transporter = nodemailer.createTransport({ export const transporter = nodemailer.createTransport({
...transportOptions ...transportOptions,
}); });
export function sendEmail(link: Link, store: Store) { export function sendEmail(link: Link, store: Store) {
if (email.username && (email.password || email.smtpAddress)) { if (email.username && (email.password || email.smtpAddress)) {
logger.debug('↗ sending email'); logger.debug('↗ sending email');
const mailOptions: Mail.Options = { const mailOptions: Mail.Options = {
attachments: link.screenshot attachments: link.screenshot
? [ ? [
{ {
filename: link.screenshot, filename: link.screenshot,
path: `./${link.screenshot}` path: `./${link.screenshot}`,
} },
] ]
: undefined, : undefined,
from: email.username, from: email.username,
subject: Print.inStock(link, store), subject: Print.inStock(link, store),
text: Print.productInStock(link), text: Print.productInStock(link),
to: email.to to: email.to,
}; };
transporter.sendMail(mailOptions, (error) => { transporter.sendMail(mailOptions, error => {
if (error) { if (error) {
logger.error("✖ couldn't send email", error); logger.error("✖ couldn't send email", error);
} else { } else {
logger.info('✔ email sent'); logger.info('✔ email sent');
} }
}); });
} }
} }
+67 -67
View File
@@ -7,60 +7,60 @@ const {mqtt} = config.notifications;
let client: MqttClient.Client; let client: MqttClient.Client;
if (mqtt.broker) { if (mqtt.broker) {
if (checkInsecureUsage(mqtt.password, mqtt.broker)) { if (checkInsecureUsage(mqtt.password, mqtt.broker)) {
logger.warn( logger.warn(
'✖ Insecure transport of password - Only use credentials with MQTT brokers on private networks.' '✖ Insecure transport of password - Only use credentials with MQTT brokers on private networks.'
); );
} else { } else {
const clientOptions: IClientOptions = { const clientOptions: IClientOptions = {
clean: mqtt.clientId === '', clean: mqtt.clientId === '',
clientId: mqtt.clientId === '' ? undefined : mqtt.clientId, clientId: mqtt.clientId === '' ? undefined : mqtt.clientId,
password: mqtt.password === '' ? undefined : mqtt.password, password: mqtt.password === '' ? undefined : mqtt.password,
username: mqtt.username === '' ? undefined : mqtt.username username: mqtt.username === '' ? undefined : mqtt.username,
}; };
client = MqttClient.connect( client = MqttClient.connect(
`mqtt://${mqtt.broker}:${mqtt.port}`, `mqtt://${mqtt.broker}:${mqtt.port}`,
clientOptions clientOptions
); );
} }
} }
export function sendMqttMessage(link: Link, store: Store) { export function sendMqttMessage(link: Link, store: Store) {
if (client) { if (client) {
logger.debug('↗ sending mqtt message'); logger.debug('↗ sending mqtt message');
(async () => { (async () => {
const givenUrl = link.cartUrl ? link.cartUrl : link.url; const givenUrl = link.cartUrl ? link.cartUrl : link.url;
const message = `{"msg":"${Print.inStock( const message = `{"msg":"${Print.inStock(
link, link,
store store
)}", "url":"${givenUrl}"}`; )}", "url":"${givenUrl}"}`;
const topic = generateTopic(link, store, mqtt.topic); const topic = generateTopic(link, store, mqtt.topic);
const pubOptions: IClientPublishOptions = { const pubOptions: IClientPublishOptions = {
qos: mqtt.qos as 0 | 1 | 2, qos: mqtt.qos as 0 | 1 | 2,
retain: false retain: false,
}; };
try { try {
client.publish(topic, message, pubOptions); client.publish(topic, message, pubOptions);
logger.info('✔ mqtt message sent'); logger.info('✔ mqtt message sent');
} catch (error: unknown) { } catch (error: unknown) {
logger.error("✖ couldn't send mqtt message", error); logger.error("✖ couldn't send mqtt message", error);
} }
})(); })();
} }
} }
function generateTopic(link: Link, store: Store, topic: string): string { function generateTopic(link: Link, store: Store, topic: string): string {
topic.trim(); topic.trim();
topic = topic.replace(/^\//, ''); topic = topic.replace(/^\//, '');
topic = topic topic = topic
.replace(/%series%/g, link.series) .replace(/%series%/g, link.series)
.replace(/%brand%/g, link.brand) .replace(/%brand%/g, link.brand)
.replace(/%model%/g, link.model) .replace(/%model%/g, link.model)
.replace(/%store%/g, store.name); .replace(/%store%/g, store.name);
return topic; return topic;
} }
/** /**
@@ -72,43 +72,43 @@ function generateTopic(link: Link, store: Store, topic: string): string {
* *
*/ */
function checkInsecureUsage(pass: string, address: string): boolean { function checkInsecureUsage(pass: string, address: string): boolean {
if (pass !== '') { if (pass !== '') {
if ( if (
isClassANet(address) || isClassANet(address) ||
isClassBNet(address) || isClassBNet(address) ||
isClassCNet(address) || isClassCNet(address) ||
isLinkLocal(address) isLinkLocal(address)
) { ) {
logger.debug(`MQTT using private network broker: ${address}`); logger.debug(`MQTT using private network broker: ${address}`);
} else { } else {
logger.debug(`MQTT using public network broker: ${address}`); logger.debug(`MQTT using public network broker: ${address}`);
return true; return true;
} }
} }
return false; return false;
} }
function isClassANet(address: string): boolean { function isClassANet(address: string): boolean {
const classRegex = /^(10\.(\d|[1-9]\d|[12][0-5]{2})\.(\d|[1-9]\d|[12][0-5]{2})\.(\d|[1-9]\d|[12][0-5]{2}))$/; const classRegex = /^(10\.(\d|[1-9]\d|[12][0-5]{2})\.(\d|[1-9]\d|[12][0-5]{2})\.(\d|[1-9]\d|[12][0-5]{2}))$/;
return Boolean(classRegex.exec(address)); return Boolean(classRegex.exec(address));
} }
function isClassBNet(address: string): boolean { function isClassBNet(address: string): boolean {
const classRegex = /^(172\.(1[6-9]|2\d|3[01])\.(\d|[1-9]\d|[12][0-5]{2})\.(\d|[1-9]\d|[12][0-5]{2}))$/; const classRegex = /^(172\.(1[6-9]|2\d|3[01])\.(\d|[1-9]\d|[12][0-5]{2})\.(\d|[1-9]\d|[12][0-5]{2}))$/;
return Boolean(classRegex.exec(address)); return Boolean(classRegex.exec(address));
} }
function isClassCNet(address: string): boolean { function isClassCNet(address: string): boolean {
const classRegex = /^(192\.168\.(\d|[1-9]\d|[12][0-5]{2})\.(\d|[1-9]\d|[12][0-5]{2}))$/; const classRegex = /^(192\.168\.(\d|[1-9]\d|[12][0-5]{2})\.(\d|[1-9]\d|[12][0-5]{2}))$/;
return Boolean(classRegex.exec(address)); return Boolean(classRegex.exec(address));
} }
function isLinkLocal(address: string): boolean { function isLinkLocal(address: string): boolean {
const linkLocal = /.+\.local$/; const linkLocal = /.+\.local$/;
return Boolean(linkLocal.exec(address)); return Boolean(linkLocal.exec(address));
} }
+18 -18
View File
@@ -17,22 +17,22 @@ import {sendTwitchMessage} from './twitch';
import {updateRedis} from './redis'; import {updateRedis} from './redis';
export function sendNotification(link: Link, store: Store) { export function sendNotification(link: Link, store: Store) {
// Priority // Priority
playSound(); playSound();
sendDiscordMessage(link, store); sendDiscordMessage(link, store);
sendDesktopNotification(link, store); sendDesktopNotification(link, store);
sendEmail(link, store); sendEmail(link, store);
sendSms(link, store); sendSms(link, store);
// Non-priority // Non-priority
adjustPhilipsHueLights(); adjustPhilipsHueLights();
sendMqttMessage(link, store); sendMqttMessage(link, store);
sendPagerDutyNotification(link, store); sendPagerDutyNotification(link, store);
sendPushbulletNotification(link, store); sendPushbulletNotification(link, store);
sendPushoverNotification(link, store); sendPushoverNotification(link, store);
sendSlackMessage(link, store); sendSlackMessage(link, store);
sendTelegramMessage(link, store); sendTelegramMessage(link, store);
sendTweet(link, store); sendTweet(link, store);
sendTwilioMessage(link, store); sendTwilioMessage(link, store);
sendTwitchMessage(link, store); sendTwitchMessage(link, store);
updateRedis(link, store); updateRedis(link, store);
} }
+21 -21
View File
@@ -6,26 +6,26 @@ import {config} from '../config';
const pd = new PDClient(''); const pd = new PDClient('');
export function sendPagerDutyNotification(link: Link, store: Store) { export function sendPagerDutyNotification(link: Link, store: Store) {
if (config.notifications.pagerduty.integrationKey) { if (config.notifications.pagerduty.integrationKey) {
logger.debug('↗ sending pagerduty message'); logger.debug('↗ sending pagerduty message');
const links = [{href: link.url, text: 'Visit Store'}]; const links = [{href: link.url, text: 'Visit Store'}];
if (link.cartUrl) { if (link.cartUrl) {
links.push({ links.push({
href: link.cartUrl, href: link.cartUrl,
text: 'Add to Cart' text: 'Add to Cart',
}); });
} }
pd.events.sendEvent({ pd.events.sendEvent({
dedup_key: link.url, dedup_key: link.url,
event_action: 'trigger', event_action: 'trigger',
payload: { payload: {
links, links,
severity: config.notifications.pagerduty.severity, severity: config.notifications.pagerduty.severity,
source: store.name, source: store.name,
summary: Print.inStock(link, store) summary: Print.inStock(link, store),
}, },
routing_key: config.notifications.pagerduty.integrationKey routing_key: config.notifications.pagerduty.integrationKey,
}); });
} }
} }
+108 -120
View File
@@ -5,135 +5,123 @@ import {logger} from '../logger';
const {LightState} = hueAPI.lightStates; const {LightState} = hueAPI.lightStates;
const { const {
apiKey, apiKey,
bridgeIp, bridgeIp,
lightIds, lightIds,
lightColor, lightColor,
lightPattern, lightPattern,
clientId, clientId,
clientSecret, clientSecret,
accessToken, accessToken,
refreshToken, refreshToken,
remoteApiUsername remoteApiUsername,
} = config.notifications.philips_hue; } = config.notifications.philips_hue;
// Default Light State // Default Light State
const lightState = new LightState() const lightState = new LightState()
.on(true) .on(true)
.brightness(100) .brightness(100)
.rgb(46.27, 72.55, 0); .rgb(46.27, 72.55, 0);
const adjustLightsWithAPI = (hueBridge: Api) => { const adjustLightsWithAPI = (hueBridge: Api) => {
logger.debug('Connected to Philips Hue bridge.'); logger.debug('Connected to Philips Hue bridge.');
// Set the custom light state (COLOR and METHOD here) // Set the custom light state (COLOR and METHOD here)
if (lightColor) { if (lightColor) {
const rgbArray = lightColor.split(','); const rgbArray = lightColor.split(',');
// If there's not three values, must not be RGB // If there's not three values, must not be RGB
if (rgbArray.length === 3) { if (rgbArray.length === 3) {
lightState.rgb(rgbArray[0], rgbArray[1], rgbArray[2]); lightState.rgb(rgbArray[0], rgbArray[1], rgbArray[2]);
} else { } else {
logger.debug('✖ Error assigning RGB Values'); logger.debug('✖ Error assigning RGB Values');
} }
} }
// If blink is specified, then blink the lights // If blink is specified, then blink the lights
if (lightPattern === 'blink') { if (lightPattern === 'blink') {
lightState.alertLong(); lightState.alertLong();
} }
// If we've been given light IDs, then only adjust those IDs // If we've been given light IDs, then only adjust those IDs
if (lightIds) { if (lightIds) {
const arrayOfIDs = lightIds.split(','); const arrayOfIDs = lightIds.split(',');
arrayOfIDs.forEach((light) => { arrayOfIDs.forEach(light => {
logger.debug('adjusting specified lights'); logger.debug('adjusting specified lights');
(hueBridge.lights.setLightState( (hueBridge.lights.setLightState(light, lightState) as Promise<any>).catch(
light, (error: Error) => {
lightState logger.error('Failed to adjust specified lights.');
) as Promise<any>).catch((error: Error) => { logger.error(error);
logger.error('Failed to adjust specified lights.'); throw error;
logger.error(error); }
throw error; );
}); });
}); } else {
} else { // Adjust all light IDs
// Adjust all light IDs hueBridge.lights
hueBridge.lights .getAll()
.getAll() .then((allLights: any[]) => {
.then((allLights: any[]) => { allLights.forEach((light: any) => {
allLights.forEach((light: any) => { logger.debug('adjusting all hue lights');
logger.debug('adjusting all hue lights'); (hueBridge.lights.setLightState(
(hueBridge.lights.setLightState( light,
light, lightState
lightState ) as Promise<any>).catch((error: Error) => {
) as Promise<any>).catch((error: Error) => { logger.error('Failed to adjust all lights.');
logger.error('Failed to adjust all lights.'); logger.error(error);
logger.error(error); throw error;
throw error; });
}); });
}); })
}) .catch((error: Error) => {
.catch((error: Error) => { logger.error('Failed to get all lights.');
logger.error('Failed to get all lights.'); logger.error(error);
logger.error(error); throw error;
throw error; });
}); }
}
}; };
export function adjustPhilipsHueLights() { export function adjustPhilipsHueLights() {
// Check if the required variables have been set // Check if the required variables have been set
if (apiKey && bridgeIp) { if (apiKey && bridgeIp) {
logger.info('↗ adjusting Philips Hue lights over LAN'); logger.info('↗ adjusting Philips Hue lights over LAN');
(async () => { (async () => {
logger.debug( logger.debug(
'Attempting to connect to Philips Hue bridge at ' + bridgeIp 'Attempting to connect to Philips Hue bridge at ' + bridgeIp
); );
hueAPI.api hueAPI.api
.createLocal(bridgeIp) .createLocal(bridgeIp)
.connect(apiKey) .connect(apiKey)
.then( .then(
(hueBridge) => { hueBridge => {
adjustLightsWithAPI(hueBridge); adjustLightsWithAPI(hueBridge);
logger.info('✔ adjusted Philips Hue lights over LAN'); logger.info('✔ adjusted Philips Hue lights over LAN');
}, },
(error: Error) => { (error: Error) => {
logger.error("✖ couldn't adjust hue lights.", error); logger.error("✖ couldn't adjust hue lights.", error);
} }
); );
})(); })();
} else if (apiKey && clientId && clientSecret) { } else if (apiKey && clientId && clientSecret) {
logger.info('↗ adjusting Philips Hue lights over cloud'); logger.info('↗ adjusting Philips Hue lights over cloud');
(async () => { (async () => {
logger.debug( logger.debug('Attempting to connect to Philips Hue bridge over cloud');
'Attempting to connect to Philips Hue bridge over cloud' const remoteBootstrap = hueAPI.api.createRemote(clientId, clientSecret);
); if (accessToken && refreshToken) {
const remoteBootstrap = hueAPI.api.createRemote( remoteBootstrap
clientId, .connectWithTokens(accessToken, refreshToken, remoteApiUsername)
clientSecret .then(
); hueBridge => {
if (accessToken && refreshToken) { adjustLightsWithAPI(hueBridge);
remoteBootstrap logger.info('✔ adjusted Philips Hue lights over cloud');
.connectWithTokens( },
accessToken, (error: Error) => {
refreshToken, logger.error(
remoteApiUsername 'Failed to get a remote Philips Hue connection using supplied tokens.'
) );
.then( logger.error(error);
(hueBridge) => { throw error;
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;
}
);
}
})();
}
} }
+16 -16
View File
@@ -6,22 +6,22 @@ import {config} from '../config';
const {pushbullet} = config.notifications; const {pushbullet} = config.notifications;
export function sendPushbulletNotification(link: Link, store: Store) { export function sendPushbulletNotification(link: Link, store: Store) {
if (pushbullet) { if (pushbullet) {
logger.debug('↗ sending pushbullet message'); logger.debug('↗ sending pushbullet message');
const pusher = new PushBullet(pushbullet); const pusher = new PushBullet(pushbullet);
pusher.note( pusher.note(
{}, {},
Print.inStock(link, store), Print.inStock(link, store),
link.cartUrl ? link.cartUrl : link.url, link.cartUrl ? link.cartUrl : link.url,
(error: Error) => { (error: Error) => {
if (error) { if (error) {
logger.error("✖ couldn't send pushbullet message", error); logger.error("✖ couldn't send pushbullet message", error);
} else { } else {
logger.info('✔ pushbullet message sent'); logger.info('✔ pushbullet message sent');
} }
} }
); );
} }
} }
+30 -30
View File
@@ -6,37 +6,37 @@ import {config} from '../config';
const {pushover} = config.notifications; const {pushover} = config.notifications;
export function sendPushoverNotification(link: Link, store: Store) { export function sendPushoverNotification(link: Link, store: Store) {
if (pushover.token && pushover.username) { if (pushover.token && pushover.username) {
logger.debug('↗ sending pushover message'); logger.debug('↗ sending pushover message');
const push = new Push({ const push = new Push({
token: pushover.token, token: pushover.token,
user: pushover.username user: pushover.username,
}); });
const message: PushoverMessage = const message: PushoverMessage =
pushover.priority < 2 pushover.priority < 2
? { ? {
message: link.cartUrl ? link.cartUrl : link.url, message: link.cartUrl ? link.cartUrl : link.url,
priority: pushover.priority, priority: pushover.priority,
title: Print.inStock(link, store), title: Print.inStock(link, store),
...(link.screenshot && {file: `./${link.screenshot}`}) ...(link.screenshot && {file: `./${link.screenshot}`}),
} }
: { : {
expire: pushover.expire, expire: pushover.expire,
message: link.cartUrl ? link.cartUrl : link.url, message: link.cartUrl ? link.cartUrl : link.url,
priority: pushover.priority, priority: pushover.priority,
retry: pushover.retry, retry: pushover.retry,
title: Print.inStock(link, store), title: Print.inStock(link, store),
...(link.screenshot && {file: `./${link.screenshot}`}) ...(link.screenshot && {file: `./${link.screenshot}`}),
}; };
push.send(message, (error: Error) => { push.send(message, (error: Error) => {
if (error) { if (error) {
logger.error("✖ couldn't send pushover message", error); logger.error("✖ couldn't send pushover message", error);
} else { } else {
logger.info('✔ pushover message sent'); logger.info('✔ pushover message sent');
} }
}); });
} }
} }
+26 -26
View File
@@ -7,39 +7,39 @@ const {url} = config.notifications.redis;
let client: RedisClient; let client: RedisClient;
function initRedis(): RedisClient | null { function initRedis(): RedisClient | null {
if (url) { if (url) {
client = redis.createClient({url}); client = redis.createClient({url});
} }
return null; return null;
} }
export function updateRedis(link: Link, store: Store) { export function updateRedis(link: Link, store: Store) {
try { try {
if (client) { if (client) {
const key = `${store.name}:${link.brand}:${link.model}` const key = `${store.name}:${link.brand}:${link.model}`
.split(' ') .split(' ')
.join('-'); .join('-');
const value = { const value = {
...link, ...link,
labels: store.labels, labels: store.labels,
links: store.links, links: store.links,
name: store.name, name: store.name,
updatedAt: new Date().toUTCString() updatedAt: new Date().toUTCString(),
}; };
const redisUpdated = client.set(key, JSON.stringify(value)); const redisUpdated = client.set(key, JSON.stringify(value));
if (redisUpdated) { if (redisUpdated) {
logger.info('✔ redis updated'); logger.info('✔ redis updated');
} else { } else {
logger.error(`✖ couldn't update redis for key (${key})`); logger.error(`✖ couldn't update redis for key (${key})`);
} }
} }
} catch (error: unknown) { } catch (error: unknown) {
logger.error("✖ couldn't update redis", error); logger.error("✖ couldn't update redis", error);
} }
} }
initRedis(); initRedis();
+19 -19
View File
@@ -7,27 +7,27 @@ const {channel, token} = config.notifications.slack;
const web = new WebClient(token); const web = new WebClient(token);
export function sendSlackMessage(link: Link, store: Store) { export function sendSlackMessage(link: Link, store: Store) {
if (channel && token) { if (channel && token) {
logger.debug('↗ sending slack message'); logger.debug('↗ sending slack message');
(async () => { (async () => {
const givenUrl = link.cartUrl ? link.cartUrl : link.url; const givenUrl = link.cartUrl ? link.cartUrl : link.url;
try { try {
const result = await web.chat.postMessage({ const result = await web.chat.postMessage({
channel: channel.replace('#', ''), channel: channel.replace('#', ''),
text: `${Print.inStock(link, store)}\n${givenUrl}` text: `${Print.inStock(link, store)}\n${givenUrl}`,
}); });
if (!result.ok) { if (!result.ok) {
logger.error("✖ couldn't send slack message", result); logger.error("✖ couldn't send slack message", result);
return; return;
} }
logger.info('✔ slack message sent'); logger.info('✔ slack message sent');
} catch (error: unknown) { } catch (error: unknown) {
logger.error("✖ couldn't send slack message", error); logger.error("✖ couldn't send slack message", error);
} }
})(); })();
} }
} }
+57 -55
View File
@@ -7,72 +7,74 @@ import {transporter} from './email';
const {email, phone} = config.notifications; const {email, phone} = config.notifications;
if (phone.number.length > 0 && (!email.username || !email.password)) { if (phone.number.length > 0 && (!email.username || !email.password)) {
logger.warn( logger.warn(
'✖ in order to receive sms alerts, email notifications must also be configured' '✖ in order to receive sms alerts, email notifications must also be configured'
); );
} }
if (phone.carrier.length !== phone.number.length) { if (phone.carrier.length !== phone.number.length) {
logger.warn( logger.warn(
'✖ the number of carriers must match the number of phone numbers', '✖ the number of carriers must match the number of phone numbers',
{carrier: phone.carrier, number: phone.number} {carrier: phone.carrier, number: phone.number}
); );
} }
export function sendSms(link: Link, store: Store) { export function sendSms(link: Link, store: Store) {
for ( for (
let i = 0; let i = 0;
i < Math.max(phone.number.length, phone.carrier.length); i < Math.max(phone.number.length, phone.carrier.length);
i++ i++
) { ) {
const currentNumber = phone.number[i]; const currentNumber = phone.number[i];
const currentCarrier = phone.carrier[i]; const currentCarrier = phone.carrier[i];
if (!currentNumber) { if (!currentNumber) {
logger.error(`${currentCarrier} is not associated with a number`); logger.error(`${currentCarrier} is not associated with a number`);
continue; continue;
} else if (!currentCarrier) { } else if (!currentCarrier) {
logger.error(`${currentNumber} is not associated with a carrier`); logger.error(`${currentNumber} is not associated with a carrier`);
continue; continue;
} }
if (!phone.availableCarriers.has(currentCarrier)) { if (!phone.availableCarriers.has(currentCarrier)) {
logger.error(`✖ unknown carrier ${currentCarrier}`); logger.error(`✖ unknown carrier ${currentCarrier}`);
continue; continue;
} }
logger.debug('↗ sending sms'); logger.debug('↗ sending sms');
const mailOptions: Mail.Options = { const mailOptions: Mail.Options = {
attachments: link.screenshot attachments: link.screenshot
? [ ? [
{ {
filename: link.screenshot, filename: link.screenshot,
path: `./${link.screenshot}` path: `./${link.screenshot}`,
} },
] ]
: undefined, : undefined,
from: email.username, from: email.username,
subject: Print.inStock(link, store, false, true), subject: Print.inStock(link, store, false, true),
text: link.cartUrl ? link.cartUrl : link.url, text: link.cartUrl ? link.cartUrl : link.url,
to: generateAddress(currentNumber, currentCarrier) to: generateAddress(currentNumber, currentCarrier),
}; };
transporter.sendMail(mailOptions, (error) => { transporter.sendMail(mailOptions, error => {
if (error) { if (error) {
logger.error( logger.error(
`✖ couldn't send sms to ${currentNumber} for carrier ${currentCarrier}`, `✖ couldn't send sms to ${currentNumber} for carrier ${currentCarrier}`,
error error
); );
} else { } else {
logger.info('✔ sms sent'); logger.info('✔ sms sent');
} }
}); });
} }
} }
function generateAddress(number: string, carrier: string) { function generateAddress(number: string, carrier: string): string {
if (carrier && phone.availableCarriers.has(carrier)) { if (carrier && phone.availableCarriers.has(carrier)) {
return [number, phone.availableCarriers.get(carrier)].join('@'); return [number, phone.availableCarriers.get(carrier)].join('@');
} }
return '';
} }
+24 -30
View File
@@ -6,41 +6,35 @@ import {logger} from '../logger';
let player: PlaySound; let player: PlaySound;
if (config.notifications.playSound) { if (config.notifications.playSound) {
player = config.notifications.soundPlayer player = config.notifications.soundPlayer
? playerLib({players: [config.notifications.soundPlayer]}) ? playerLib({players: [config.notifications.soundPlayer]})
: playerLib(); : playerLib();
if (player.player === null) { if (player.player === null) {
logger.warn("✖ couldn't find sound player"); logger.warn("✖ couldn't find sound player");
} else { } else {
const playerName = player.player; const playerName = player.player;
logger.info(`✔ sound player found: ${playerName}`); logger.info(`✔ sound player found: ${playerName}`);
} }
} }
export function playSound() { export function playSound() {
if (config.notifications.playSound && player.player !== null) { if (config.notifications.playSound && player.player !== null) {
logger.debug('↗ playing sound'); logger.debug('↗ playing sound');
fs.access( fs.access(config.notifications.playSound, fs.constants.F_OK, error => {
config.notifications.playSound, if (error) {
fs.constants.F_OK, logger.error(`✖ error opening sound file: ${error.message}`);
(error) => { return;
if (error) { }
logger.error(
`✖ error opening sound file: ${error.message}`
);
return;
}
player.play(config.notifications.playSound, (error: Error) => { player.play(config.notifications.playSound, (error: Error) => {
if (error) { if (error) {
logger.error("✖ couldn't play sound", error); logger.error("✖ couldn't play sound", error);
} }
logger.info('✔ played sound'); logger.info('✔ played sound');
}); });
} });
); }
}
} }
+22 -22
View File
@@ -6,32 +6,32 @@ import {config} from '../config';
const {telegram} = config.notifications; const {telegram} = config.notifications;
const client = new TelegramClient({ const client = new TelegramClient({
accessToken: telegram.accessToken accessToken: telegram.accessToken,
}); });
export function sendTelegramMessage(link: Link, store: Store) { export function sendTelegramMessage(link: Link, store: Store) {
if (telegram.accessToken && telegram.chatId) { if (telegram.accessToken && telegram.chatId) {
logger.debug('↗ sending telegram message'); logger.debug('↗ sending telegram message');
(async () => { (async () => {
const message = Print.productInStock(link); const message = Print.productInStock(link);
const results = []; const results = [];
for (const chatId of telegram.chatId) { for (const chatId of telegram.chatId) {
try { try {
results.push( results.push(
client.sendMessage( client.sendMessage(
chatId, chatId,
`${Print.inStock(link, store)}\n${message}` `${Print.inStock(link, store)}\n${message}`
) )
); );
logger.info('✔ telegram message sent'); logger.info('✔ telegram message sent');
} catch (error: unknown) { } catch (error: unknown) {
logger.error("✖ couldn't send telegram message", error); logger.error("✖ couldn't send telegram message", error);
} }
} }
await Promise.all(results); await Promise.all(results);
})(); })();
} }
} }
+25 -25
View File
@@ -7,34 +7,34 @@ const {twilio} = config.notifications;
let client: Twilio; let client: Twilio;
if (twilio.accountSid && twilio.authToken) { if (twilio.accountSid && twilio.authToken) {
client = new Twilio(twilio.accountSid, twilio.authToken); client = new Twilio(twilio.accountSid, twilio.authToken);
} }
export function sendTwilioMessage(link: Link, store: Store) { export function sendTwilioMessage(link: Link, store: Store) {
if (client) { if (client) {
logger.debug('↗ sending twilio message'); logger.debug('↗ sending twilio message');
(async () => { (async () => {
const givenUrl = link.cartUrl ? link.cartUrl : link.url; const givenUrl = link.cartUrl ? link.cartUrl : link.url;
const message = `${Print.inStock(link, store)}\n${givenUrl}`; const message = `${Print.inStock(link, store)}\n${givenUrl}`;
const numbers = twilio.to.split(','); const numbers = twilio.to.split(',');
const results = []; const results = [];
for (const number of numbers) { for (const number of numbers) {
try { try {
results.push( results.push(
client.messages.create({ client.messages.create({
body: message, body: message,
from: twilio.from, from: twilio.from,
to: number to: number,
}) })
); );
logger.info('✔ twilio message sent'); logger.info('✔ twilio message sent');
} catch (error: unknown) { } catch (error: unknown) {
logger.error("✖ couldn't send twilio message", error); logger.error("✖ couldn't send twilio message", error);
} }
} }
await Promise.all(results); await Promise.all(results);
})(); })();
} }
} }
+68 -72
View File
@@ -11,95 +11,91 @@ const messages: string[] = [];
let alreadySaying = false; let alreadySaying = false;
let tokenData = { let tokenData = {
accessToken: twitch.accessToken, accessToken: twitch.accessToken,
expiryTimestamp: 0, expiryTimestamp: 0,
refreshToken: twitch.refreshToken refreshToken: twitch.refreshToken,
}; };
if (existsSync('./twitch.json')) { if (existsSync('./twitch.json')) {
tokenData = { tokenData = {
...JSON.parse(readFileSync('./twitch.json', 'utf-8')), ...JSON.parse(readFileSync('./twitch.json', 'utf-8')),
...tokenData ...tokenData,
}; };
} }
const chatClient: ChatClient = new ChatClient( const chatClient: ChatClient = new ChatClient(
new RefreshableAuthProvider( new RefreshableAuthProvider(
new StaticAuthProvider(twitch.clientId, tokenData.accessToken), new StaticAuthProvider(twitch.clientId, tokenData.accessToken),
{ {
clientSecret: twitch.clientSecret, clientSecret: twitch.clientSecret,
expiry: expiry:
tokenData.expiryTimestamp === null tokenData.expiryTimestamp === null
? null ? null
: new Date(tokenData.expiryTimestamp), : new Date(tokenData.expiryTimestamp),
onRefresh: async ({accessToken, refreshToken, expiryDate}) => { onRefresh: async ({accessToken, refreshToken, expiryDate}) => {
return promises.writeFile( return promises.writeFile(
'./twitch.json', './twitch.json',
JSON.stringify( JSON.stringify(
{ {
accessToken, accessToken,
expiryTimestamp: expiryTimestamp:
expiryDate === null expiryDate === null ? null : expiryDate.getTime(),
? null refreshToken,
: expiryDate.getTime(), },
refreshToken null,
}, 4
null, ),
4 'utf-8'
), );
'utf-8' },
); refreshToken: tokenData.refreshToken,
}, }
refreshToken: tokenData.refreshToken ),
} {
), channels: [twitch.channel],
{ }
channels: [twitch.channel]
}
); );
chatClient.onJoin((channel: string, user: string) => { chatClient.onJoin((channel: string, user: string) => {
if (channel === `#${twitch.channel}` && user === chatClient.currentNick) { if (channel === `#${twitch.channel}` && user === chatClient.currentNick) {
while (messages.length) { while (messages.length) {
const message: string | undefined = messages.shift(); const message: string | undefined = messages.shift();
if (message !== undefined) { if (message !== undefined) {
try { try {
void chatClient.say(channel, message); void chatClient.say(channel, message);
logger.info('✔ twitch message sent'); logger.info('✔ twitch message sent');
} catch (error: unknown) { } catch (error: unknown) {
logger.error("✖ couldn't send twitch message", error); logger.error("✖ couldn't send twitch message", error);
} }
} }
} }
} }
void chatClient.quit(); void chatClient.quit();
}); });
chatClient.onDisconnect(() => { chatClient.onDisconnect(() => {
alreadySaying = false; alreadySaying = false;
}); });
export function sendTwitchMessage(link: Link, store: Store) { export function sendTwitchMessage(link: Link, store: Store) {
if ( if (
tokenData.accessToken && tokenData.accessToken &&
twitch.channel && twitch.channel &&
twitch.clientId && twitch.clientId &&
twitch.clientSecret && twitch.clientSecret &&
tokenData.refreshToken tokenData.refreshToken
) { ) {
logger.debug('↗ sending twitch message'); logger.debug('↗ sending twitch message');
messages.push( messages.push(
`${Print.inStock(link, store)}\n${ `${Print.inStock(link, store)}\n${link.cartUrl ? link.cartUrl : link.url}`
link.cartUrl ? link.cartUrl : link.url );
}`
);
if (!alreadySaying) { if (!alreadySaying) {
alreadySaying = true; alreadySaying = true;
void chatClient.connect(); void chatClient.connect();
} }
} }
} }
+25 -25
View File
@@ -6,35 +6,35 @@ import {config} from '../config';
const {twitter} = config.notifications; const {twitter} = config.notifications;
const client = new Twitter({ const client = new Twitter({
access_token_key: twitter.accessTokenKey, access_token_key: twitter.accessTokenKey,
access_token_secret: twitter.accessTokenSecret, access_token_secret: twitter.accessTokenSecret,
consumer_key: twitter.consumerKey, consumer_key: twitter.consumerKey,
consumer_secret: twitter.consumerSecret consumer_secret: twitter.consumerSecret,
}); });
export function sendTweet(link: Link, store: Store) { export function sendTweet(link: Link, store: Store) {
if ( if (
twitter.accessTokenKey && twitter.accessTokenKey &&
twitter.accessTokenSecret && twitter.accessTokenSecret &&
twitter.consumerKey && twitter.consumerKey &&
twitter.consumerSecret twitter.consumerSecret
) { ) {
logger.debug('↗ sending twitter message'); logger.debug('↗ sending twitter message');
let status = `${Print.inStock(link, store)}\n${ let status = `${Print.inStock(link, store)}\n${
link.cartUrl ? link.cartUrl : link.url link.cartUrl ? link.cartUrl : link.url
}`; }`;
if (twitter.tweetTags) { if (twitter.tweetTags) {
status += `\n\n${twitter.tweetTags}`; status += `\n\n${twitter.tweetTags}`;
} }
client.post('statuses/update', {status}, (error) => { client.post('statuses/update', {status}, error => {
if (error) { if (error) {
logger.error("✖ couldn't send twitter notification", error); logger.error("✖ couldn't send twitter notification", error);
} else { } else {
logger.info('✔ twitter notification sent'); logger.info('✔ twitter notification sent');
} }
}); });
} }
} }
+43 -56
View File
@@ -6,77 +6,64 @@ import {filterSeries} from './filter';
import {usingResponse} from '../util'; import {usingResponse} from '../util';
function addNewLinks(store: Store, links: Link[], series: Series) { function addNewLinks(store: Store, links: Link[], series: Series) {
if (links.length === 0) { if (links.length === 0) {
logger.debug( logger.debug(Print.message('NO STORE LINKS FOUND', series, store, true));
Print.message('NO STORE LINKS FOUND', series, store, true)
);
return; return;
} }
const existingUrls = new Set(store.links.map((link) => link.url)); const existingUrls = new Set(store.links.map(link => link.url));
const newLinks = links.filter((link) => !existingUrls.has(link.url)); const newLinks = links.filter(link => !existingUrls.has(link.url));
if (newLinks.length === 0) { if (newLinks.length === 0) {
return; return;
} }
logger.debug( logger.debug(
Print.message( Print.message(`FOUND ${newLinks.length} STORE LINKS`, series, store, true)
`FOUND ${newLinks.length} STORE LINKS`, );
series, logger.debug(JSON.stringify(newLinks, null, 2));
store,
true
)
);
logger.debug(JSON.stringify(newLinks, null, 2));
store.links = store.links.concat(newLinks); store.links = store.links.concat(newLinks);
} }
export async function fetchLinks(store: Store, browser: Browser) { export async function fetchLinks(store: Store, browser: Browser) {
if (!store.linksBuilder) { if (!store.linksBuilder) {
return; return;
} }
const promises: Array<Promise<void>> = []; const promises: Array<Promise<void>> = [];
for (let {series, url} of store.linksBuilder.urls) { // eslint-disable-next-line prefer-const
if (!filterSeries(series)) { for (let {series, url} of store.linksBuilder.urls) {
continue; if (!filterSeries(series)) {
} continue;
}
logger.debug( logger.debug(Print.message('DETECTING STORE LINKS', series, store, true));
Print.message('DETECTING STORE LINKS', series, store, true)
);
if (!Array.isArray(url)) { if (!Array.isArray(url)) {
url = [url]; url = [url];
} }
url.map((x) => url.map(x =>
promises.push( promises.push(
usingResponse(browser, x, async (response) => { usingResponse(browser, x, async response => {
const text = await response?.text(); const text = await response?.text();
if (!text) { if (!text) {
logger.error( logger.error(Print.message('NO RESPONSE', series, store, true));
Print.message('NO RESPONSE', series, store, true) return;
); }
return;
}
const docElement = cheerio.load(text).root(); const docElement = cheerio.load(text).root();
const links = store.linksBuilder!.builder( const links = store.linksBuilder!.builder(docElement, series);
docElement,
series
);
addNewLinks(store, links, series); addNewLinks(store, links, series);
}) })
) )
); );
} }
await Promise.all(promises); await Promise.all(promises);
} }
+33 -36
View File
@@ -7,11 +7,11 @@ import {config} from '../config';
* @param brand The brand of the GPU * @param brand The brand of the GPU
*/ */
function filterBrand(brand: Link['brand']): boolean { function filterBrand(brand: Link['brand']): boolean {
if (config.store.showOnlyBrands.length === 0) { if (config.store.showOnlyBrands.length === 0) {
return true; return true;
} }
return config.store.showOnlyBrands.includes(brand); return config.store.showOnlyBrands.includes(brand);
} }
/** /**
@@ -21,31 +21,28 @@ function filterBrand(brand: Link['brand']): boolean {
* @param series The series of the GPU * @param series The series of the GPU
*/ */
function filterModel(model: Link['model'], series: Link['series']): boolean { function filterModel(model: Link['model'], series: Link['series']): boolean {
if (config.store.showOnlyModels.length === 0) { if (config.store.showOnlyModels.length === 0) {
return true; return true;
} }
const sanitizedModel = model.replace(/\s/g, ''); const sanitizedModel = model.replace(/\s/g, '');
const sanitizedSeries = series.replace(/\s/g, ''); const sanitizedSeries = series.replace(/\s/g, '');
for (const configModelEntry of config.store.showOnlyModels) { for (const configModelEntry of config.store.showOnlyModels) {
const sanitizedConfigModel = configModelEntry.name.replace(/\s/g, ''); const sanitizedConfigModel = configModelEntry.name.replace(/\s/g, '');
const sanitizedConfigSeries = configModelEntry.series.replace( const sanitizedConfigSeries = configModelEntry.series.replace(/\s/g, '');
/\s/g, if (sanitizedConfigSeries) {
'' if (
); sanitizedSeries === sanitizedConfigSeries &&
if (sanitizedConfigSeries) { sanitizedModel === sanitizedConfigModel
if ( ) {
sanitizedSeries === sanitizedConfigSeries && return true;
sanitizedModel === sanitizedConfigModel }
) { } else if (sanitizedModel === sanitizedConfigModel) {
return true; return true;
} }
} else if (sanitizedModel === sanitizedConfigModel) { }
return true;
}
}
return false; return false;
} }
/** /**
@@ -54,11 +51,11 @@ function filterModel(model: Link['model'], series: Link['series']): boolean {
* @param series The series of the GPU * @param series The series of the GPU
*/ */
export function filterSeries(series: Link['series']): boolean { export function filterSeries(series: Link['series']): boolean {
if (config.store.showOnlySeries.length === 0) { if (config.store.showOnlySeries.length === 0) {
return true; return true;
} }
return config.store.showOnlySeries.includes(series); return config.store.showOnlySeries.includes(series);
} }
/** /**
@@ -67,9 +64,9 @@ export function filterSeries(series: Link['series']): boolean {
* @param link The store link of the GPU * @param link The store link of the GPU
*/ */
export function filterStoreLink(link: Link): boolean { export function filterStoreLink(link: Link): boolean {
return ( return (
filterBrand(link.brand) && filterBrand(link.brand) &&
filterModel(link.model, link.series) && filterModel(link.model, link.series) &&
filterSeries(link.series) filterSeries(link.series)
); );
} }
+90 -90
View File
@@ -3,101 +3,101 @@ import {Page} from 'puppeteer';
import {logger} from '../logger'; import {logger} from '../logger';
export type Selector = { export type Selector = {
requireVisible: boolean; requireVisible: boolean;
selector: string; selector: string;
type: 'innerHTML' | 'outerHTML' | 'textContent'; type: 'innerHTML' | 'outerHTML' | 'textContent';
}; };
function isElementArray(query: LabelQuery): query is Element[] { function isElementArray(query: LabelQuery): query is Element[] {
return ( return (
Array.isArray(query) && query.length > 0 && typeof query[0] === 'object' Array.isArray(query) && query.length > 0 && typeof query[0] === 'object'
); );
} }
function getQueryAsElementArray( function getQueryAsElementArray(
query: LabelQuery, query: LabelQuery,
defaultContainer: string defaultContainer: string
): Array<Required<Element>> { ): Array<Required<Element>> {
if (isElementArray(query)) { if (isElementArray(query)) {
return query.map((x) => ({ return query.map(x => ({
container: x.container ?? defaultContainer, container: x.container ?? defaultContainer,
text: x.text text: x.text,
})); }));
} }
if (Array.isArray(query)) { if (Array.isArray(query)) {
return [ return [
{ {
container: defaultContainer, container: defaultContainer,
text: query text: query,
} },
]; ];
} }
return [ return [
{ {
container: query.container ?? defaultContainer, container: query.container ?? defaultContainer,
text: query.text text: query.text,
} },
]; ];
} }
export async function pageIncludesLabels( export async function pageIncludesLabels(
page: Page, page: Page,
query: LabelQuery, query: LabelQuery,
options: Selector options: Selector
) { ) {
const elementQueries = getQueryAsElementArray(query, options.selector); const elementQueries = getQueryAsElementArray(query, options.selector);
const resolved = await Promise.all( const resolved = await Promise.all(
elementQueries.map(async (query) => { elementQueries.map(async query => {
const selector = {...options, selector: query.container}; const selector = {...options, selector: query.container};
const contents = (await extractPageContents(page, selector)) ?? ''; const contents = (await extractPageContents(page, selector)) ?? '';
if (!contents) { if (!contents) {
return false; return false;
} }
logger.debug(contents); logger.debug(contents);
return includesLabels(contents, query.text); return includesLabels(contents, query.text);
}) })
); );
return resolved.includes(true); return resolved.includes(true);
} }
export async function extractPageContents( export async function extractPageContents(
page: Page, page: Page,
selector: Selector selector: Selector
): Promise<string | null> { ): Promise<string | null> {
return page.evaluate((options: Selector) => { return page.evaluate((options: Selector) => {
const element: globalThis.HTMLElement | null = document.querySelector( const element: globalThis.HTMLElement | null = document.querySelector(
options.selector options.selector
); );
if (!element) { if (!element) {
return null; return null;
} }
if ( if (
options.requireVisible && options.requireVisible &&
!(element.offsetWidth > 0 && element.offsetHeight > 0) !(element.offsetWidth > 0 && element.offsetHeight > 0)
) { ) {
return null; return null;
} }
switch (options.type) { switch (options.type) {
case 'innerHTML': case 'innerHTML':
return element.innerHTML; return element.innerHTML;
case 'outerHTML': case 'outerHTML':
return element.outerHTML; return element.outerHTML;
case 'textContent': case 'textContent':
return element.textContent; return element.textContent;
default: default:
return 'Error: selector.type is unknown'; return 'Error: selector.type is unknown';
} }
}, selector); }, selector);
} }
/** /**
@@ -107,32 +107,32 @@ export async function extractPageContents(
* @param searchLabels Search labels for a match. * @param searchLabels Search labels for a match.
*/ */
export function includesLabels( export function includesLabels(
domText: string, domText: string,
searchLabels: string[] searchLabels: string[]
): boolean { ): boolean {
const domTextLowerCase = domText.toLowerCase(); const domTextLowerCase = domText.toLowerCase();
return searchLabels.some((label) => return searchLabels.some(label =>
domTextLowerCase.includes(label.toLowerCase()) domTextLowerCase.includes(label.toLowerCase())
); );
} }
export async function getPrice( export async function getPrice(
page: Page, page: Page,
query: Pricing, query: Pricing,
options: Selector options: Selector
): Promise<number | null> { ): Promise<number | null> {
const selector = {...options, selector: query.container}; const selector = {...options, selector: query.container};
const priceString = await extractPageContents(page, selector); const priceString = await extractPageContents(page, selector);
if (priceString) { if (priceString) {
const priceSeparator = query.euroFormat ? /\./g : /,/g; const priceSeparator = query.euroFormat ? /\./g : /,/g;
const price = Number.parseFloat( const price = Number.parseFloat(
priceString.replace(priceSeparator, '').match(/\d+/g)!.join('.') priceString.replace(priceSeparator, '').match(/\d+/g)!.join('.')
); );
logger.debug('received price', price); logger.debug('received price', price);
return price; return price;
} }
return null; return null;
} }
+408 -433
View File
@@ -1,21 +1,21 @@
import { import {
Browser, Browser,
Page, Page,
PageEventObj, PageEventObj,
Request, Request,
RespondOptions, RespondOptions,
Response Response,
} from 'puppeteer'; } from 'puppeteer';
import {Link, Store, getStores} from './model'; import {Link, Store, getStores} from './model';
import {Print, logger} from '../logger'; import {Print, logger} from '../logger';
import {Selector, getPrice, pageIncludesLabels} from './includes-labels'; import {Selector, getPrice, pageIncludesLabels} from './includes-labels';
import { import {
closePage, closePage,
delay, delay,
getRandomUserAgent, getRandomUserAgent,
getSleepTime, getSleepTime,
isStatusCodeInRange, isStatusCodeInRange,
noop noop,
} from '../util'; } from '../util';
import {disableBlockerInPage, enableBlockerInPage} from '../adblocker'; import {disableBlockerInPage, enableBlockerInPage} from '../adblocker';
import {config} from '../config'; import {config} from '../config';
@@ -31,106 +31,114 @@ const inStock: Record<string, boolean> = {};
const linkBuilderLastRunTimes: Record<string, number> = {}; const linkBuilderLastRunTimes: Record<string, number> = {};
function nextProxy(store: Store) { function nextProxy(store: Store) {
if (!store.proxyList) { if (!store.proxyList) {
return; return;
} }
if (store.currentProxyIndex === undefined) { if (store.currentProxyIndex === undefined) {
store.currentProxyIndex = 0; store.currentProxyIndex = 0;
} }
store.currentProxyIndex++; store.currentProxyIndex++;
if (store.currentProxyIndex >= store.proxyList.length) { if (store.currentProxyIndex >= store.proxyList.length) {
store.currentProxyIndex = 0; store.currentProxyIndex = 0;
} }
logger.info( logger.info(
` [${store.name}] Next proxy index: ${store.currentProxyIndex} / Count: ${store.proxyList.length}` ` [${store.name}] Next proxy index: ${store.currentProxyIndex} / Count: ${store.proxyList.length}`
); );
return store.proxyList[store.currentProxyIndex]; return store.proxyList[store.currentProxyIndex];
} }
async function handleLowBandwidth(request: Request) { async function handleLowBandwidth(request: Request) {
if (!config.browser.lowBandwidth) { if (!config.browser.lowBandwidth) {
return false; return false;
} }
const typ = request.resourceType(); const typ = request.resourceType();
if (typ === 'font' || typ === 'image') { if (typ === 'font' || typ === 'image') {
try { try {
await request.abort(); await request.abort();
} catch {} } catch {
logger.debug('Failed to abort request.');
}
return true; return true;
} }
return false; return false;
} }
async function handleProxy(request: Request, proxy?: string) { async function handleProxy(request: Request, proxy?: string) {
if (!proxy) { if (!proxy) {
return false; return false;
} }
try { try {
await useProxy(request, proxy); await useProxy(request, proxy);
} catch (error: unknown) { } catch (error: unknown) {
logger.error('handleProxy', error); logger.error('handleProxy', error);
try { try {
await request.abort(); await request.abort();
} catch {} } catch {
} logger.debug('Failed to abort request.');
}
}
return true; return true;
} }
async function handleAdBlock(request: Request, adBlockRequestHandler: any) { async function handleAdBlock(request: Request, adBlockRequestHandler: any) {
if (!adBlockRequestHandler) { if (!adBlockRequestHandler) {
return false; return false;
} }
return new Promise((resolve) => { return new Promise(resolve => {
const continueFunc = async () => { const continueFunc = async () => {
resolve(false); resolve(false);
}; };
const abortFunc = async () => { const abortFunc = async () => {
try { try {
await request.abort(); await request.abort();
} catch {} } catch {
logger.debug('Failed to abort request.');
}
resolve(true); resolve(true);
}; };
const respondFunc = async (response: RespondOptions) => { const respondFunc = async (response: RespondOptions) => {
try { try {
await request.respond(response); await request.respond(response);
} catch {} } catch {
logger.debug('Failed to abort request.');
}
resolve(true); resolve(true);
}; };
const requestProxy = new Proxy(request, { const requestProxy = new Proxy(request, {
get(target, prop, receiver) { get(target, prop, receiver) {
if (prop === 'continue') { if (prop === 'continue') {
return continueFunc; return continueFunc;
} }
if (prop === 'abort') { if (prop === 'abort') {
return abortFunc; return abortFunc;
} }
if (prop === 'respond') { if (prop === 'respond') {
return respondFunc; return respondFunc;
} }
return Reflect.get(target, prop, receiver); return Reflect.get(target, prop, receiver);
} },
}); });
adBlockRequestHandler(requestProxy); adBlockRequestHandler(requestProxy);
}); });
} }
/** /**
@@ -142,430 +150,397 @@ async function handleAdBlock(request: Request, adBlockRequestHandler: any) {
* @param store Vendor of graphics cards. * @param store Vendor of graphics cards.
*/ */
async function lookup(browser: Browser, store: Store) { async function lookup(browser: Browser, store: Store) {
if (!getStores().has(store.name)) { if (!getStores().has(store.name)) {
return; return;
} }
if (store.linksBuilder) { if (store.linksBuilder) {
const lastRunTime = linkBuilderLastRunTimes[store.name] ?? -1; const lastRunTime = linkBuilderLastRunTimes[store.name] ?? -1;
const ttl = store.linksBuilder.ttl ?? Number.MAX_SAFE_INTEGER; const ttl = store.linksBuilder.ttl ?? Number.MAX_SAFE_INTEGER;
if (lastRunTime === -1 || Date.now() - lastRunTime > ttl) { if (lastRunTime === -1 || Date.now() - lastRunTime > ttl) {
logger.info(`[${store.name}] Running linksBuilder...`); logger.info(`[${store.name}] Running linksBuilder...`);
try { try {
await fetchLinks(store, browser); await fetchLinks(store, browser);
linkBuilderLastRunTimes[store.name] = Date.now(); linkBuilderLastRunTimes[store.name] = Date.now();
} catch (error: unknown) { } catch (error: unknown) {
logger.error(error); logger.error(error);
} }
} }
} }
/* eslint-disable no-await-in-loop */ /* eslint-disable no-await-in-loop */
for (const link of store.links) { for (const link of store.links) {
if (!filterStoreLink(link)) { if (!filterStoreLink(link)) {
continue; continue;
} }
if (config.page.inStockWaitTime && inStock[link.url]) { if (config.page.inStockWaitTime && inStock[link.url]) {
logger.info(Print.inStockWaiting(link, store, true)); logger.info(Print.inStockWaiting(link, store, true));
continue; continue;
} }
const proxy = nextProxy(store); const proxy = nextProxy(store);
const useAdBlock = const useAdBlock = !config.browser.lowBandwidth && !store.disableAdBlocker;
!config.browser.lowBandwidth && !store.disableAdBlocker; const customContext = config.browser.isIncognito;
const customContext = config.browser.isIncognito;
const context = customContext const context = customContext
? await browser.createIncognitoBrowserContext() ? await browser.createIncognitoBrowserContext()
: browser.defaultBrowserContext(); : browser.defaultBrowserContext();
const page = await context.newPage(); const page = await context.newPage();
await page.setRequestInterception(true); await page.setRequestInterception(true);
page.setDefaultNavigationTimeout(config.page.timeout); page.setDefaultNavigationTimeout(config.page.timeout);
await page.setUserAgent(await getRandomUserAgent()); await page.setUserAgent(await getRandomUserAgent());
let adBlockRequestHandler: any; let adBlockRequestHandler: any;
let pageProxy; let pageProxy;
if (useAdBlock) { if (useAdBlock) {
const onProxyFunc = (event: keyof PageEventObj, handler: any) => { const onProxyFunc = (event: keyof PageEventObj, handler: any) => {
if (event !== 'request') { if (event !== 'request') {
page.on(event, handler); page.on(event, handler);
return; return;
} }
adBlockRequestHandler = handler; adBlockRequestHandler = handler;
}; };
pageProxy = new Proxy(page, { pageProxy = new Proxy(page, {
get(target, prop, receiver) { get(target, prop, receiver) {
if (prop === 'on') { if (prop === 'on') {
return onProxyFunc; return onProxyFunc;
} }
// Give dummy setRequestInterception to avoid AdBlock from messing with it // Give dummy setRequestInterception to avoid AdBlock from messing with it
if (prop === 'setRequestInterception') { if (prop === 'setRequestInterception') {
return noop; return noop;
} }
return Reflect.get(target, prop, receiver); return Reflect.get(target, prop, receiver);
} },
}); });
await enableBlockerInPage(pageProxy); await enableBlockerInPage(pageProxy);
} }
await page.setRequestInterception(true); await page.setRequestInterception(true);
page.on('request', async (request) => { page.on('request', async request => {
if (await handleLowBandwidth(request)) { if (await handleLowBandwidth(request)) {
return; return;
} }
if (await handleAdBlock(request, adBlockRequestHandler)) { if (await handleAdBlock(request, adBlockRequestHandler)) {
return; return;
} }
if (await handleProxy(request, proxy)) { if (await handleProxy(request, proxy)) {
return; return;
} }
try { try {
await request.continue(); await request.continue();
} catch {} } catch {
}); logger.debug('Failed to continue request.');
}
});
if (store.captchaDeterrent) { if (store.captchaDeterrent) {
await runCaptchaDeterrent(browser, store, page); await runCaptchaDeterrent(browser, store, page);
} }
let statusCode = 0; let statusCode = 0;
try { try {
statusCode = await lookupCard(browser, store, page, link); statusCode = await lookupCard(browser, store, page, link);
} catch (error: unknown) { } catch (error: unknown) {
logger.error( logger.error(
`✖ [${store.name}] ${link.brand} ${link.series} ${ `✖ [${store.name}] ${link.brand} ${link.series} ${link.model} - ${
link.model (error as Error).message
} - ${(error as Error).message}` }`
); );
const client = await page.target().createCDPSession(); const client = await page.target().createCDPSession();
await client.send('Network.clearBrowserCookies'); await client.send('Network.clearBrowserCookies');
} }
if (pageProxy) { if (pageProxy) {
await disableBlockerInPage(pageProxy); await disableBlockerInPage(pageProxy);
} }
// Must apply backoff before closing the page, e.g. if CloudFlare is // Must apply backoff before closing the page, e.g. if CloudFlare is
// used to detect bot traffic, it introduces a 5 second page delay // used to detect bot traffic, it introduces a 5 second page delay
// before redirecting to the next page // before redirecting to the next page
await processBackoffDelay(store, link, statusCode); await processBackoffDelay(store, link, statusCode);
await closePage(page); await closePage(page);
if (customContext) { if (customContext) {
await context.close(); await context.close();
} }
} }
/* eslint-enable no-await-in-loop */ /* eslint-enable no-await-in-loop */
} }
async function lookupCard( async function lookupCard(
browser: Browser, browser: Browser,
store: Store, store: Store,
page: Page, page: Page,
link: Link link: Link
): Promise<number> { ): Promise<number> {
const givenWaitFor = store.waitUntil ? store.waitUntil : 'networkidle0'; const givenWaitFor = store.waitUntil ? store.waitUntil : 'networkidle0';
const response: Response | null = await page.goto(link.url, { const response: Response | null = await page.goto(link.url, {
waitUntil: givenWaitFor waitUntil: givenWaitFor,
}); });
const successStatusCodes = store.successStatusCodes ?? [[0, 399]]; const successStatusCodes = store.successStatusCodes ?? [[0, 399]];
const statusCode = await handleResponse( const statusCode = await handleResponse(browser, store, page, link, response);
browser,
store,
page,
link,
response
);
if (!isStatusCodeInRange(statusCode, successStatusCodes)) { if (!isStatusCodeInRange(statusCode, successStatusCodes)) {
return statusCode; return statusCode;
} }
if (await lookupCardInStock(store, page, link)) { if (await lookupCardInStock(store, page, link)) {
const givenUrl = const givenUrl =
link.cartUrl && config.store.autoAddToCart link.cartUrl && config.store.autoAddToCart ? link.cartUrl : link.url;
? link.cartUrl logger.info(`${Print.inStock(link, store, true)}\n${givenUrl}`);
: link.url;
logger.info(`${Print.inStock(link, store, true)}\n${givenUrl}`);
if (config.browser.open) { if (config.browser.open) {
await (link.openCartAction === undefined await (link.openCartAction === undefined
? open(givenUrl) ? open(givenUrl)
: link.openCartAction(browser)); : link.openCartAction(browser));
} }
sendNotification(link, store); sendNotification(link, store);
if (config.page.inStockWaitTime) { if (config.page.inStockWaitTime) {
inStock[link.url] = true; inStock[link.url] = true;
setTimeout(() => { setTimeout(() => {
inStock[link.url] = false; inStock[link.url] = false;
}, 1000 * config.page.inStockWaitTime); }, 1000 * config.page.inStockWaitTime);
} }
if (config.page.screenshot) { if (config.page.screenshot) {
logger.debug(' saving screenshot'); logger.debug(' saving screenshot');
link.screenshot = `success-${Date.now()}.png`; link.screenshot = `success-${Date.now()}.png`;
await page.screenshot({path: link.screenshot}); await page.screenshot({path: link.screenshot});
} }
} }
return statusCode; return statusCode;
} }
// eslint-disable-next-line max-params // eslint-disable-next-line max-params
async function handleResponse( async function handleResponse(
browser: Browser, browser: Browser,
store: Store, store: Store,
page: Page, page: Page,
link: Link, link: Link,
response?: Response | null, response?: Response | null,
recursionDepth = 0 recursionDepth = 0
) { ) {
if (!response) { if (!response) {
logger.debug(Print.noResponse(link, store, true)); logger.debug(Print.noResponse(link, store, true));
} }
const successStatusCodes = store.successStatusCodes ?? [[0, 399]]; const successStatusCodes = store.successStatusCodes ?? [[0, 399]];
let statusCode = response?.status() ?? 0; let statusCode = response?.status() ?? 0;
if (!isStatusCodeInRange(statusCode, successStatusCodes)) { if (!isStatusCodeInRange(statusCode, successStatusCodes)) {
if (statusCode === 429) { if (statusCode === 429) {
logger.warn(Print.rateLimit(link, store, true)); logger.warn(Print.rateLimit(link, store, true));
} else if (statusCode === 503) { } else if (statusCode === 503) {
if (await checkIsCloudflare(store, page, link)) { if (await checkIsCloudflare(store, page, link)) {
if (recursionDepth > 4) { if (recursionDepth > 4) {
logger.warn(Print.recursionLimit(link, store, true)); logger.warn(Print.recursionLimit(link, store, true));
} else { } else {
const response: Response | null = await page.waitForNavigation( const response: Response | null = await page.waitForNavigation({
{ waitUntil: 'networkidle0',
waitUntil: 'networkidle0' });
} recursionDepth++;
); statusCode = await handleResponse(
recursionDepth++; browser,
statusCode = await handleResponse( store,
browser, page,
store, link,
page, response,
link, recursionDepth
response, );
recursionDepth }
); } else {
} logger.warn(Print.badStatusCode(link, store, statusCode, true));
} else { }
logger.warn(Print.badStatusCode(link, store, statusCode, true)); } else {
} logger.warn(Print.badStatusCode(link, store, statusCode, true));
} else { }
logger.warn(Print.badStatusCode(link, store, statusCode, true)); }
}
}
return statusCode; return statusCode;
} }
async function checkIsCloudflare(store: Store, page: Page, link: Link) { async function checkIsCloudflare(store: Store, page: Page, link: Link) {
const baseOptions: Selector = { const baseOptions: Selector = {
requireVisible: true, requireVisible: true,
selector: 'body', selector: 'body',
type: 'textContent' type: 'textContent',
}; };
const cloudflareLabel = { const cloudflareLabel = {
container: 'div[class="attribution"] a[rel="noopener noreferrer"]', container: 'div[class="attribution"] a[rel="noopener noreferrer"]',
text: ['Cloudflare'] text: ['Cloudflare'],
}; };
if (await pageIncludesLabels(page, cloudflareLabel, baseOptions)) { if (await pageIncludesLabels(page, cloudflareLabel, baseOptions)) {
logger.warn(Print.cloudflare(link, store, true)); logger.warn(Print.cloudflare(link, store, true));
return true; return true;
} }
return false; return false;
} }
async function lookupCardInStock(store: Store, page: Page, link: Link) { async function lookupCardInStock(store: Store, page: Page, link: Link) {
const baseOptions: Selector = { const baseOptions: Selector = {
requireVisible: false, requireVisible: false,
selector: store.labels.container ?? 'body', selector: store.labels.container ?? 'body',
type: 'textContent' type: 'textContent',
}; };
if (store.labels.captcha) { if (store.labels.captcha) {
if (await pageIncludesLabels(page, store.labels.captcha, baseOptions)) { if (await pageIncludesLabels(page, store.labels.captcha, baseOptions)) {
logger.warn(Print.captcha(link, store, true)); logger.warn(Print.captcha(link, store, true));
await delay(getSleepTime(store)); await delay(getSleepTime(store));
return false; return false;
} }
} }
if (store.labels.bannedSeller) { if (store.labels.bannedSeller) {
if ( if (
await pageIncludesLabels( await pageIncludesLabels(page, store.labels.bannedSeller, baseOptions)
page, ) {
store.labels.bannedSeller, logger.warn(Print.bannedSeller(link, store, true));
baseOptions return false;
) }
) { }
logger.warn(Print.bannedSeller(link, store, true));
return false;
}
}
if (store.labels.outOfStock) { if (store.labels.outOfStock) {
if ( if (await pageIncludesLabels(page, store.labels.outOfStock, baseOptions)) {
await pageIncludesLabels(page, store.labels.outOfStock, baseOptions) logger.info(Print.outOfStock(link, store, true));
) { return false;
logger.info(Print.outOfStock(link, store, true)); }
return false; }
}
}
if (store.labels.maxPrice) { if (store.labels.maxPrice) {
const maxPrice = config.store.maxPrice.series[link.series]; const maxPrice = config.store.maxPrice.series[link.series];
link.price = await getPrice(page, store.labels.maxPrice, baseOptions); link.price = await getPrice(page, store.labels.maxPrice, baseOptions);
if (link.price && link.price > maxPrice && maxPrice > 0) { if (link.price && link.price > maxPrice && maxPrice > 0) {
logger.info(Print.maxPrice(link, store, maxPrice, true)); logger.info(Print.maxPrice(link, store, maxPrice, true));
return false; return false;
} }
} }
// Fixme: currently causing issues // Fixme: currently causing issues
// Do API inventory validation in realtime (no cache) if available // Do API inventory validation in realtime (no cache) if available
// if ( // if (
// store.realTimeInventoryLookup !== undefined && // store.realTimeInventoryLookup !== undefined &&
// link.itemNumber !== undefined // link.itemNumber !== undefined
// ) { // ) {
// return store.realTimeInventoryLookup(link.itemNumber); // return store.realTimeInventoryLookup(link.itemNumber);
// } // }
if (store.labels.inStock) { if (store.labels.inStock) {
const options = { const options = {
...baseOptions, ...baseOptions,
requireVisible: true, requireVisible: true,
type: 'outerHTML' as const type: 'outerHTML' as const,
}; };
if (!(await pageIncludesLabels(page, store.labels.inStock, options))) { if (!(await pageIncludesLabels(page, store.labels.inStock, options))) {
logger.info(Print.outOfStock(link, store, true)); logger.info(Print.outOfStock(link, store, true));
return false; return false;
} }
} }
if (link.labels?.inStock) { if (link.labels?.inStock) {
const options = { const options = {
...baseOptions, ...baseOptions,
requireVisible: true, requireVisible: true,
type: 'outerHTML' as const type: 'outerHTML' as const,
}; };
if (!(await pageIncludesLabels(page, link.labels.inStock, options))) { if (!(await pageIncludesLabels(page, link.labels.inStock, options))) {
logger.info(Print.outOfStock(link, store, true)); logger.info(Print.outOfStock(link, store, true));
return false; return false;
} }
} }
return true; return true;
} }
async function runCaptchaDeterrent(browser: Browser, store: Store, page: Page) { async function runCaptchaDeterrent(browser: Browser, store: Store, page: Page) {
const successStatusCodes = store.successStatusCodes ?? [[0, 399]]; const successStatusCodes = store.successStatusCodes ?? [[0, 399]];
let statusCode = 0; let statusCode = 0;
let deterrentLinks: string[] = []; let deterrentLinks: string[] = [];
logger.debug(`[${store.name}] Navigating to random anti-captcha page...`); logger.debug(`[${store.name}] Navigating to random anti-captcha page...`);
if (store.captchaDeterrent?.hardLinks?.length) { if (store.captchaDeterrent?.hardLinks?.length) {
deterrentLinks = deterrentLinks.concat( deterrentLinks = deterrentLinks.concat(store.captchaDeterrent.hardLinks);
store.captchaDeterrent.hardLinks }
);
}
if (store.captchaDeterrent?.searchUrl) { if (store.captchaDeterrent?.searchUrl) {
if (store.captchaDeterrent.searchTerms) { if (store.captchaDeterrent.searchTerms) {
store.captchaDeterrent.searchTerms.forEach((element) => store.captchaDeterrent.searchTerms.forEach(element =>
deterrentLinks.push( deterrentLinks.push(
store.captchaDeterrent?.searchUrl store.captchaDeterrent?.searchUrl
? store.captchaDeterrent.searchUrl.replace( ? store.captchaDeterrent.searchUrl.replace('%%s', element)
'%%s', : ''
element )
) );
: '' }
) }
);
}
}
if (deterrentLinks.length > 0) { if (deterrentLinks.length > 0) {
const link: Link = { const link: Link = {
brand: 'captcha-deterrent', brand: 'captcha-deterrent',
model: 'captcha-deterrent', model: 'captcha-deterrent',
series: 'captcha-deterrent', series: 'captcha-deterrent',
url: url: deterrentLinks[Math.floor(Math.random() * deterrentLinks.length)],
deterrentLinks[ };
Math.floor(Math.random() * deterrentLinks.length) logger.debug(`Selected captcha-deterrent link: ${link.url}`);
]
};
logger.debug(`Selected captcha-deterrent link: ${link.url}`);
try { try {
const givenWaitFor = store.waitUntil const givenWaitFor = store.waitUntil ? store.waitUntil : 'networkidle0';
? store.waitUntil const response: Response | null = await page.goto(link.url, {
: 'networkidle0'; waitUntil: givenWaitFor,
const response: Response | null = await page.goto(link.url, { });
waitUntil: givenWaitFor statusCode = await handleResponse(browser, store, page, link, response);
}); setTimeout(() => {
statusCode = await handleResponse( // Do nothing
browser, }, 3000);
store, } catch (error: unknown) {
page, logger.error(error);
link, }
response
);
setTimeout(() => {
// Do nothing
}, 3000);
} catch (error: unknown) {
logger.error(error);
}
if (!isStatusCodeInRange(statusCode, successStatusCodes)) { if (!isStatusCodeInRange(statusCode, successStatusCodes)) {
logger.warn( logger.warn(
`✖ [${store.name}] - Failed to navigate to anti-captcha target: ${link.url}` `✖ [${store.name}] - Failed to navigate to anti-captcha target: ${link.url}`
); );
} }
} }
} }
export async function tryLookupAndLoop(browser: Browser, store: Store) { export async function tryLookupAndLoop(browser: Browser, store: Store) {
if (!browser.isConnected()) { if (!browser.isConnected()) {
logger.debug( logger.debug(`[${store.name}] Ending this loop as browser is disposed...`);
`[${store.name}] Ending this loop as browser is disposed...` return;
); }
return;
}
logger.debug(`[${store.name}] Starting lookup...`); logger.debug(`[${store.name}] Starting lookup...`);
try { try {
await lookup(browser, store); await lookup(browser, store);
} catch (error: unknown) { } catch (error: unknown) {
logger.error(error); logger.error(error);
} }
const sleepTime = getSleepTime(store); const sleepTime = getSleepTime(store);
logger.debug(`[${store.name}] Lookup done, next one in ${sleepTime} ms`); logger.debug(`[${store.name}] Lookup done, next one in ${sleepTime} ms`);
setTimeout(tryLookupAndLoop, sleepTime, browser, store); setTimeout(tryLookupAndLoop, sleepTime, browser, store);
} }
+230 -230
View File
@@ -1,234 +1,234 @@
import {Store} from './store'; import {Store} from './store';
export const AComPC: Store = { export const AComPC: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.filial_stock', container: '.filial_stock',
text: ['lagernd', 'im Zulauf'] text: ['lagernd', 'im Zulauf'],
}, },
maxPrice: { maxPrice: {
container: '.price', container: '.price',
euroFormat: true euroFormat: true,
}, },
outOfStock: [ outOfStock: [
{ {
container: '.filial_stock', container: '.filial_stock',
text: ['nicht lieferbar'] text: ['nicht lieferbar'],
} },
] ],
}, },
links: [ links: [
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-ROG-STRIX-RTX3080-10G-GAMING-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-2-x-HDMI-3-x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-ROG-STRIX-RTX3080-10G-GAMING-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-2-x-HDMI-3-x-DisplayPort.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-ROG-STRIX-RTX3080-O10G-GAMING-OC-Edition-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-2-x-HDMI-3-x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-ROG-STRIX-RTX3080-O10G-GAMING-OC-Edition-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-2-x-HDMI-3-x-DisplayPort.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-TUF-Gaming-GeForce-RTX-3080-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-TUF-Gaming-GeForce-RTX-3080-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-TUF-Gaming-GeForce-RTX-3080-OC-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-TUF-Gaming-GeForce-RTX-3080-OC-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-AORUS-GeForce-RTX-3080-MASTER-10G-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-3-x-DisplayPort-3-x-HDMI.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-AORUS-GeForce-RTX-3080-MASTER-10G-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-3-x-DisplayPort-3-x-HDMI.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-AORUS-GeForce-RTX-3080-XTREME-10G-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-3-x-DisplayPort-3-x-HDMI.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-AORUS-GeForce-RTX-3080-XTREME-10G-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-3-x-DisplayPort-3-x-HDMI.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-GeForce-RTX-3080-Eagle-OC-10G-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-GeForce-RTX-3080-Eagle-OC-10G-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle', model: 'eagle',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-GeForce-RTX-3080-Eagle-10G-Grafikkarte-10.240-MB.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-GeForce-RTX-3080-Eagle-10G-Grafikkarte-10.240-MB.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-GeForce-RTX-3080-GAMING-OC-10G-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-GeForce-RTX-3080-GAMING-OC-10G-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-GeForce-RTX-3080-Vision-OC-10G-Grafikkarten-GF-RTX-3080-10GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DP-weiss.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-GeForce-RTX-3080-Vision-OC-10G-Grafikkarten-GF-RTX-3080-10GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DP-weiss.html',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Inno3D-GeForce-RTX-3080-Twin-X2-OC-Grafikkarten-GF-RTX-3080-10-GB-GDDR6-PCIe-4.0-x16-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Inno3D-GeForce-RTX-3080-Twin-X2-OC-Grafikkarten-GF-RTX-3080-10-GB-GDDR6-PCIe-4.0-x16-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/MSI-GeForce-RTX-3080-Gaming-X-Trio-10G-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/MSI-GeForce-RTX-3080-Gaming-X-Trio-10G-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/MSI-GeForce-RTX-3080-Ventus-3X-10G-OC-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/MSI-GeForce-RTX-3080-Ventus-3X-10G-OC-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-x16-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'amp holo', model: 'amp holo',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ZOTAC-GAMING-GeForce-RTX-3080-AMP-Holo-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-HDMI-3-x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ZOTAC-GAMING-GeForce-RTX-3080-AMP-Holo-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-HDMI-3-x-DisplayPort.html',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ZOTAC-GAMING-GeForce-RTX-3080-Trinity-OC-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-HDMI-3-x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ZOTAC-GAMING-GeForce-RTX-3080-Trinity-OC-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-HDMI-3-x-DisplayPort.html',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ZOTAC-GAMING-GeForce-RTX-3080-Trinity-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ZOTAC-GAMING-GeForce-RTX-3080-Trinity-Grafikkarten-GF-RTX-3080-10-GB-GDDR6X-PCIe-4.0-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3090', series: '3090',
url: url:
'https://www.acom-pc.de/Peripherie-Zubehoer/noch-nicht-kategorisierte-Artikel/ASUS-ROG-Strix-GeForce-RTX-3090-ROG-STRIX-RTX3090-24G-GAMING-24GB-GDDR6X-2x-HDMI-3x-DP-90YV0F90-M0NM00-.html' 'https://www.acom-pc.de/Peripherie-Zubehoer/noch-nicht-kategorisierte-Artikel/ASUS-ROG-Strix-GeForce-RTX-3090-ROG-STRIX-RTX3090-24G-GAMING-24GB-GDDR6X-2x-HDMI-3x-DP-90YV0F90-M0NM00-.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-ROG-STRIX-RTX3090-O24G-GAMING-OC-Edition-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-2-x-HDMI-3-x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-ROG-STRIX-RTX3090-O24G-GAMING-OC-Edition-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-2-x-HDMI-3-x-DisplayPort.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-TUF-Gaming-GeForce-RTX-3090-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-TUF-Gaming-GeForce-RTX-3090-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-TUF-Gaming-GeForce-RTX-3090-OC-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ASUS-TUF-Gaming-GeForce-RTX-3090-OC-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3090', series: '3090',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-Aorus-GeForce-RTX-3090-Master-24G-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-Aorus-GeForce-RTX-3090-Master-24G-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-GeForce-RTX-3090-Eagle-OC-24G-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-GeForce-RTX-3090-Eagle-OC-24G-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-GeForce-RTX-3090-Gaming-OC-24G-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/Gigabyte-GeForce-RTX-3090-Gaming-OC-24G-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-2x-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/MSI-RTX-3090-GAMING-X-TRIO-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/MSI-RTX-3090-GAMING-X-TRIO-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/MSI-GeForce-RTX-3090-Ventus-3X-24G-OC-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/MSI-GeForce-RTX-3090-Ventus-3X-24G-OC-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-x16-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: url:
'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ZOTAC-GAMING-GeForce-RTX-3090-Trinity-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-HDMI-3x-DisplayPort.html' 'https://www.acom-pc.de/Hardware-Software/Grafikkarten-Zubehoer/Grafikkarten-NVIDIA-PCI-Express/ZOTAC-GAMING-GeForce-RTX-3090-Trinity-Grafikkarten-GF-RTX-3090-24-GB-GDDR6X-PCIe-4.0-HDMI-3x-DisplayPort.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: url:
'https://www.acom-pc.de/Hardware-Software/CPU-Prozessor-/-CPU-Kuehler-Zubehoer/AMD-CPU/AMD-CPU-Socket-AM4/AMD-RYZEN-5-5600X-4.60GHZ-6-CORE-SKT-AM4-35MB-65W-PIB.html' 'https://www.acom-pc.de/Hardware-Software/CPU-Prozessor-/-CPU-Kuehler-Zubehoer/AMD-CPU/AMD-CPU-Socket-AM4/AMD-RYZEN-5-5600X-4.60GHZ-6-CORE-SKT-AM4-35MB-65W-PIB.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: url:
'https://www.acom-pc.de/Hardware-Software/CPU-Prozessor-/-CPU-Kuehler-Zubehoer/AMD-CPU/AMD-CPU-Socket-AM4/AMD-RYZEN-7-5800X-4.70GHZ-8-CORE-SKT-AM4-36MB-105W-WOF.html' 'https://www.acom-pc.de/Hardware-Software/CPU-Prozessor-/-CPU-Kuehler-Zubehoer/AMD-CPU/AMD-CPU-Socket-AM4/AMD-RYZEN-7-5800X-4.70GHZ-8-CORE-SKT-AM4-36MB-105W-WOF.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: url:
'https://www.acom-pc.de/Hardware-Software/CPU-Prozessor-/-CPU-Kuehler-Zubehoer/AMD-CPU/AMD-CPU-Socket-AM4/AMD-Ryzen-9-5900X-AMD-Ryzen-9-Socket-AM4-PC-7nm-AMD-3-7-GHz-AM4.html' 'https://www.acom-pc.de/Hardware-Software/CPU-Prozessor-/-CPU-Kuehler-Zubehoer/AMD-CPU/AMD-CPU-Socket-AM4/AMD-Ryzen-9-5900X-AMD-Ryzen-9-Socket-AM4-PC-7nm-AMD-3-7-GHz-AM4.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: url:
'https://www.acom-pc.de/Hardware-Software/CPU-Prozessor-/-CPU-Kuehler-Zubehoer/AMD-CPU/AMD-CPU-Socket-AM4/AMD-RYZEN-9-5950X-4.90GHZ-16-CORE-SKT-AM4-72MB-105W-WOF.html' 'https://www.acom-pc.de/Hardware-Software/CPU-Prozessor-/-CPU-Kuehler-Zubehoer/AMD-CPU/AMD-CPU-Socket-AM4/AMD-RYZEN-9-5950X-4.90GHZ-16-CORE-SKT-AM4-72MB-105W-WOF.html',
} },
], ],
name: 'acompc' name: 'acompc',
}; };
+126 -126
View File
@@ -1,130 +1,130 @@
import {Store} from './store'; import {Store} from './store';
export const Adorama: Store = { export const Adorama: Store = {
currency: '$', currency: '$',
labels: { labels: {
captcha: { captcha: {
container: 'body', container: 'body',
text: ['please verify you are a human'] text: ['please verify you are a human'],
}, },
inStock: { inStock: {
container: '.buy-section.purchase', container: '.buy-section.purchase',
text: ['add to cart'] text: ['add to cart'],
}, },
maxPrice: { maxPrice: {
container: '.your-price', container: '.your-price',
euroFormat: false euroFormat: false,
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.adorama.com/ev08gp43067k.html' url: 'https://www.adorama.com/ev08gp43067k.html',
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 revel', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.adorama.com/pnv301tfxmpb.html' url: 'https://www.adorama.com/pnv301tfxmpb.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.adorama.com/msig380gxt1.html' url: 'https://www.adorama.com/msig380gxt1.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.adorama.com/ev10g53897kr.html' url: 'https://www.adorama.com/ev10g53897kr.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.adorama.com/ev10g53885kr.html' url: 'https://www.adorama.com/ev10g53885kr.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.adorama.com/ev10g53895kr.html' url: 'https://www.adorama.com/ev10g53895kr.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.adorama.com/ev10g53883kr.html' url: 'https://www.adorama.com/ev10g53883kr.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.adorama.com/ev10g53881kr.html' url: 'https://www.adorama.com/ev10g53881kr.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.adorama.com/msig38v3x10c.html' url: 'https://www.adorama.com/msig38v3x10c.html',
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 revel', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 'https://www.adorama.com/png30801tfxb.html' url: 'https://www.adorama.com/png30801tfxb.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.adorama.com/asrx3080o10g.html' url: 'https://www.adorama.com/asrx3080o10g.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.adorama.com/astr3080o10g.html' url: 'https://www.adorama.com/astr3080o10g.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.adorama.com/astrx308010g.html' url: 'https://www.adorama.com/astrx308010g.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.adorama.com/msig390gxt24.html' url: 'https://www.adorama.com/msig390gxt24.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.adorama.com/msig39v3x24c.html' url: 'https://www.adorama.com/msig39v3x24c.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.adorama.com/asrtx309024g.html' url: 'https://www.adorama.com/asrtx309024g.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.adorama.com/ast3090o24g.html' url: 'https://www.adorama.com/ast3090o24g.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.adorama.com/asrx3090o24g.html' url: 'https://www.adorama.com/asrx3090o24g.html',
} },
], ],
name: 'adorama' name: 'adorama',
}; };
+325 -325
View File
@@ -1,329 +1,329 @@
import {Store} from './store'; import {Store} from './store';
export const Akinformatica: Store = { export const Akinformatica: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: [ inStock: [
{ {
container: '#dispOnLine .available', container: '#dispOnLine .available',
text: ['Disponibile Online'] text: ['Disponibile Online'],
}, },
{ {
container: '#addCartLinkButton', container: '#addCartLinkButton',
text: ['Aggiungi al carrello'] text: ['Aggiungi al carrello'],
} },
], ],
maxPrice: { maxPrice: {
container: '#PrezzoListinoIvatoLabel', container: '#PrezzoListinoIvatoLabel',
euroFormat: true euroFormat: true,
}, },
outOfStock: [ outOfStock: [
{ {
container: '#dispOnLine .available .disabled', container: '#dispOnLine .available .disabled',
text: ['Disponibile Online'] text: ['Disponibile Online'],
}, },
{ {
container: '#preOrderPanel > label', container: '#preOrderPanel > label',
text: ['PRE-ORDINI APERTI'] text: ['PRE-ORDINI APERTI'],
} },
] ],
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://shop.akinformatica.it/catalogo/adata-xpg/mouse-gaming-adata-xpg-primer---wired--rgb_4710273777139.aspx' 'https://shop.akinformatica.it/catalogo/adata-xpg/mouse-gaming-adata-xpg-primer---wired--rgb_4710273777139.aspx',
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3070', series: '3070',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-palit-geforce-rtx3070-gamingpro-oc-8gb-gddr6x_4710562242089.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-palit-geforce-rtx3070-gamingpro-oc-8gb-gddr6x_4710562242089.aspx',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge', model: 'twin edge',
series: '3070', series: '3070',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-zotac-gaming-geforce-rtx-3070-twin-edge-8g_4895173622472.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-zotac-gaming-geforce-rtx-3070-twin-edge-8g_4895173622472.aspx',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 2x oc', model: 'ventus 2x oc',
series: '3070', series: '3070',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-msi-geforce-rtx-3070-ventus-2x-oc-8g_4719072763091.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-msi-geforce-rtx-3070-ventus-2x-oc-8g_4719072763091.aspx',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-asus-geforce-rtx-3070-dual-o8g-8g_4718017927864.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-asus-geforce-rtx-3070-dual-o8g-8g_4718017927864.aspx',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle', model: 'eagle',
series: '3070', series: '3070',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-gigabyte-geforce-rtx-3070-eagle-8gb_4719331307738.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-gigabyte-geforce-rtx-3070-eagle-8gb_4719331307738.aspx',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-msi-geforce-rtx-3070-ventus-3x-oc-8g_4719072763084.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-msi-geforce-rtx-3070-ventus-3x-oc-8g_4719072763084.aspx',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3070', series: '3070',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-msi-geforce-rtx-3070-gaming-x-trio-8g_4719072763053.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-msi-geforce-rtx-3070-gaming-x-trio-8g_4719072763053.aspx',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-zotac-gaming-geforce-rtx-3070-twin-edge-oc-8g_4895173622489.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-zotac-gaming-geforce-rtx-3070-twin-edge-oc-8g_4895173622489.aspx',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3070', series: '3070',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-gigabyte-geforce-rtx-3070-eagle-oc-8gb_4719331307677.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-gigabyte-geforce-rtx-3070-eagle-oc-8gb_4719331307677.aspx',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3070', series: '3070',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-asus-geforce-rtx-3070-tuf-o8g-8g_4718017948678.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-asus-geforce-rtx-3070-tuf-o8g-8g_4718017948678.aspx',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3070', series: '3070',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-gigabyte-geforce-rtx-3070-gaming-oc-8gb_4719331307691.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-gigabyte-geforce-rtx-3070-gaming-oc-8gb_4719331307691.aspx',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3070', series: '3070',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-asus-geforce-rtx-3070-rog-strix-gaming-oc-8g_4718017938150.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3070/vga-asus-geforce-rtx-3070-rog-strix-gaming-oc-8g_4718017938150.aspx',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-msi-geforce-rtx-3090-gaming-x-trio-24g_4719072762506.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-msi-geforce-rtx-3090-gaming-x-trio-24g_4719072762506.aspx',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-zotac-geforce-rtx-3090-trinity-24g_4895173622427.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-zotac-geforce-rtx-3090-trinity-24g_4895173622427.aspx',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'suprim x', model: 'suprim x',
series: '3090', series: '3090',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-msi-geforce-rtx-3090-suprim-x-24g_4719072762490.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-msi-geforce-rtx-3090-suprim-x-24g_4719072762490.aspx',
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 epic x', model: 'xlr8 epic x',
series: '3090', series: '3090',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-pny-geforce-rtx-3090-epic-x-xlr8-gaming-24g_0751492639536.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-pny-geforce-rtx-3090-epic-x-xlr8-gaming-24g_0751492639536.aspx',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x', model: 'ventus 3x',
series: '3090', series: '3090',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-msi-geforce-rtx-3090-ventus-3x-24g-oc--consegne-da-marzo_4719072762476.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-msi-geforce-rtx-3090-ventus-3x-24g-oc--consegne-da-marzo_4719072762476.aspx',
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gamerock', model: 'gamerock',
series: '3090', series: '3090',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-palit-geforce-rtx3090-gamerock-24gb-gddr6x_4710562242041.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-palit-geforce-rtx3090-gamerock-24gb-gddr6x_4710562242041.aspx',
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3090', series: '3090',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-palit-geforce-rtx3090-gamingpro-24gb-gddr6x_4710562241969.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-palit-geforce-rtx3090-gamingpro-24gb-gddr6x_4710562241969.aspx',
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gamerock oc', model: 'gamerock oc',
series: '3090', series: '3090',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-palit-geforce-rtx3090-gamerock-oc-24gb-gddr6x_4710562242065.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-palit-geforce-rtx3090-gamerock-oc-24gb-gddr6x_4710562242065.aspx',
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3090', series: '3090',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-palit-geforce-rtx3090-gamingpro-oc-24gb-gddr6x_4710562242027.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3090/vga-palit-geforce-rtx3090-gamingpro-oc-24gb-gddr6x_4710562242027.aspx',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: url:
'https://shop.akinformatica.it/catalogo/amd-am4/cpu-amd-ryzen-5-5600x---6-core--max-boost-4-60-ghz--socket-am4_0730143312042.aspx' 'https://shop.akinformatica.it/catalogo/amd-am4/cpu-amd-ryzen-5-5600x---6-core--max-boost-4-60-ghz--socket-am4_0730143312042.aspx',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: url:
'https://shop.akinformatica.it/catalogo/amd-am4/cpu-amd-ryzen-7-5800x---8-core--max-boost-4-70-ghz--socket-am4_0730143312714.aspx' 'https://shop.akinformatica.it/catalogo/amd-am4/cpu-amd-ryzen-7-5800x---8-core--max-boost-4-70-ghz--socket-am4_0730143312714.aspx',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: url:
'https://shop.akinformatica.it/catalogo/amd-am4/cpu-amd-ryzen-9-5950x---16-core--max-boost-4-90-ghz--socket-am4_0730143312745.aspx' 'https://shop.akinformatica.it/catalogo/amd-am4/cpu-amd-ryzen-9-5950x---16-core--max-boost-4-90-ghz--socket-am4_0730143312745.aspx',
}, },
{ {
brand: 'sapphire', brand: 'sapphire',
model: 'nitro+ se', model: 'nitro+ se',
series: 'rx6800', series: 'rx6800',
url: url:
'https://shop.akinformatica.it/catalogo/amd-rx-6800-6800-xt/vga-sapphire-radeon-rx-6800-xt-nitro--oc-se-16g_4895106289901.aspx' 'https://shop.akinformatica.it/catalogo/amd-rx-6800-6800-xt/vga-sapphire-radeon-rx-6800-xt-nitro--oc-se-16g_4895106289901.aspx',
}, },
{ {
brand: 'sapphire', brand: 'sapphire',
model: 'nitro+', model: 'nitro+',
series: 'rx6800', series: 'rx6800',
url: url:
'https://shop.akinformatica.it/catalogo/amd-rx-6800-6800-xt/vga-sapphire-radeon-rx-6800-xt-nitro--16g_4895106289925.aspx' 'https://shop.akinformatica.it/catalogo/amd-rx-6800-6800-xt/vga-sapphire-radeon-rx-6800-xt-nitro--16g_4895106289925.aspx',
}, },
{ {
brand: 'sapphire', brand: 'sapphire',
model: 'amd reference', model: 'amd reference',
series: 'rx6900xt', series: 'rx6900xt',
url: url:
'https://shop.akinformatica.it/catalogo/amd-rx-6900-xt/vga-sapphire-radeon-rx-6900-xt-16g_4895106290136.aspx' 'https://shop.akinformatica.it/catalogo/amd-rx-6900-xt/vga-sapphire-radeon-rx-6900-xt-16g_4895106290136.aspx',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-msi-geforce-rtx-3080-ventus-3x-10g-oc--consegne-da-marzo_4719072762520.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-msi-geforce-rtx-3080-ventus-3x-10g-oc--consegne-da-marzo_4719072762520.aspx',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-zotac-geforce-rtx-3080-trinity-10g_4895173622403.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-zotac-geforce-rtx-3080-trinity-10g_4895173622403.aspx',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-asus-geforce-rtx-3080-rog-strix-gaming-oc-10g_4718017928786.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-asus-geforce-rtx-3080-rog-strix-gaming-oc-10g_4718017928786.aspx',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-msi-geforce-rtx-3080-gaming-x-trio-10g_4719072762544.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-msi-geforce-rtx-3080-gaming-x-trio-10g_4719072762544.aspx',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3080', series: '3080',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-asus-geforce-rtx-3080-rog-strix-gaming-10g_4718017909150.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-asus-geforce-rtx-3080-rog-strix-gaming-10g_4718017909150.aspx',
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 epic x', model: 'xlr8 epic x',
series: '3080', series: '3080',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-pny-geforce-rtx-3080-epic-x-xlr8-gaming-10g_0751492639567.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-pny-geforce-rtx-3080-epic-x-xlr8-gaming-10g_0751492639567.aspx',
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 epic x', model: 'xlr8 epic x',
series: '3080', series: '3080',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-pny-geforce-rtx-3080-epic-x-xlr8-gaming-10g_0751492639550.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-pny-geforce-rtx-3080-epic-x-xlr8-gaming-10g_0751492639550.aspx',
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3080', series: '3080',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-palit-geforce-rtx3080-gamingpro-oc-10gb-gddr6x_4710562242003.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3080/vga-palit-geforce-rtx3080-gamingpro-oc-10gb-gddr6x_4710562242003.aspx',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 2x oc', model: 'ventus 2x oc',
series: '3060ti', series: '3060ti',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3060ti/vga-msi-geforce-rtx-3060ti-ventus-2x-oc-8g-_4719072763121.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3060ti/vga-msi-geforce-rtx-3060ti-ventus-2x-oc-8g-_4719072763121.aspx',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3060ti', series: '3060ti',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3060ti/vga-msi-geforce-rtx-3060ti-gaming-x-trio-8g-_4719072763145.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3060ti/vga-msi-geforce-rtx-3060ti-gaming-x-trio-8g-_4719072763145.aspx',
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'dual oc', model: 'dual oc',
series: '3060ti', series: '3060ti',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3060ti/vga-palit-geforce-rtx-3060ti-dual-oc-8g-gddr6-256bit-3xdp--hdmi-_4710562242287.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3060ti/vga-palit-geforce-rtx-3060ti-dual-oc-8g-gddr6-256bit-3xdp--hdmi-_4710562242287.aspx',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3060ti', series: '3060ti',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3060ti/vga-msi-geforce-rtx-3060ti-ventus-3x-oc-8g_4719072763152.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3060ti/vga-msi-geforce-rtx-3060ti-ventus-3x-oc-8g_4719072763152.aspx',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge', model: 'twin edge',
series: '3060ti', series: '3060ti',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3060ti/vga-zotac-gaming-geforce-rtx-3060ti-twin-edge-8g_4895173622502.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3060ti/vga-zotac-gaming-geforce-rtx-3060ti-twin-edge-8g_4895173622502.aspx',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge oc', model: 'twin edge oc',
series: '3060ti', series: '3060ti',
url: url:
'https://shop.akinformatica.it/catalogo/nvidia-rtx-3060ti/vga-zotac-gaming-geforce-rtx-3060ti-twin-edge-oc-8g_4895173622519.aspx' 'https://shop.akinformatica.it/catalogo/nvidia-rtx-3060ti/vga-zotac-gaming-geforce-rtx-3060ti-twin-edge-oc-8g_4895173622519.aspx',
} },
], ],
name: 'akinformatica', name: 'akinformatica',
successStatusCodes: [[0, 399], 404] successStatusCodes: [[0, 399], 404],
}; };
+60 -60
View File
@@ -1,64 +1,64 @@
import {Store} from './store'; import {Store} from './store';
export const Allneeds: Store = { export const Allneeds: Store = {
backoffStatusCodes: [403, 429], backoffStatusCodes: [403, 429],
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: '.amstockstatus', container: '.amstockstatus',
text: ['In Stock'] text: ['In Stock'],
}, },
maxPrice: { maxPrice: {
container: 'span.price', container: 'span.price',
euroFormat: false euroFormat: false,
}, },
outOfStock: { outOfStock: {
container: '.amstockstatus', container: '.amstockstatus',
text: ['sold out'] text: ['sold out'],
} },
}, },
links: [ links: [
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc white', model: 'strix oc white',
series: '3080', series: '3080',
url: url:
'https://allneeds.com.au/asus-geforce-rtx-3080-rog-strix-gaming-oc-10gb-video-card-white-edition-limited-edition' 'https://allneeds.com.au/asus-geforce-rtx-3080-rog-strix-gaming-oc-10gb-video-card-white-edition-limited-edition',
}, },
{ {
brand: 'sapphire', brand: 'sapphire',
model: 'nitro+', model: 'nitro+',
series: 'rx6900xt', series: 'rx6900xt',
url: url:
'https://allneeds.com.au/sapphire-nitro-radeon-rx-6900-xt-16gb-video-card-11308-01-20g' 'https://allneeds.com.au/sapphire-nitro-radeon-rx-6900-xt-16gb-video-card-11308-01-20g',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: url:
'https://allneeds.com.au/amd-ryzen-9-5950x-processor-100-100000059wof' 'https://allneeds.com.au/amd-ryzen-9-5950x-processor-100-100000059wof',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: url:
'https://allneeds.com.au/amd-ryzen-9-5900x-processor-100-100000061wof' 'https://allneeds.com.au/amd-ryzen-9-5900x-processor-100-100000061wof',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://allneeds.com.au/amd-ryzen-7-5800x-processor' url: 'https://allneeds.com.au/amd-ryzen-7-5800x-processor',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: url:
'https://allneeds.com.au/amd-ryzen-5-5600x-with-wraith-stealth-100-100000065box' 'https://allneeds.com.au/amd-ryzen-5-5600x-with-wraith-stealth-100-100000065box',
} },
], ],
name: 'allneeds' name: 'allneeds',
}; };
+168 -168
View File
@@ -1,172 +1,172 @@
import {Store} from './store'; import {Store} from './store';
export const AlternateNL: Store = { export const AlternateNL: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.stockStatus', container: '.stockStatus',
text: ['Direct leverbaar'] text: ['Direct leverbaar'],
}, },
maxPrice: { maxPrice: {
container: 'div.price > span', container: 'div.price > span',
euroFormat: true euroFormat: true,
}, },
outOfStock: { outOfStock: {
container: '.stockStatus', container: '.stockStatus',
text: ['Levertermijn onbekend', 'pre-order'] text: ['Levertermijn onbekend', 'pre-order'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.alternate.nl/product/1516616' url: 'https://www.alternate.nl/product/1516616',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672756' url: 'https://www.alternate.nl/product/1672756',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672345' url: 'https://www.alternate.nl/product/1672345',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672251' url: 'https://www.alternate.nl/product/1672251',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672753' url: 'https://www.alternate.nl/product/1672753',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672343' url: 'https://www.alternate.nl/product/1672343',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672634' url: 'https://www.alternate.nl/product/1672634',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672867' url: 'https://www.alternate.nl/product/1672867',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673512' url: 'https://www.alternate.nl/product/1673512',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672612' url: 'https://www.alternate.nl/product/1672612',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1674164' url: 'https://www.alternate.nl/product/1674164',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1672868' url: 'https://www.alternate.nl/product/1672868',
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673431' url: 'https://www.alternate.nl/product/1673431',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1677989' url: 'https://www.alternate.nl/product/1677989',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1681134' url: 'https://www.alternate.nl/product/1681134',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673520' url: 'https://www.alternate.nl/product/1673520',
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673442' url: 'https://www.alternate.nl/product/1673442',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673136' url: 'https://www.alternate.nl/product/1673136',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673524' url: 'https://www.alternate.nl/product/1673524',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1680168' url: 'https://www.alternate.nl/product/1680168',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673517' url: 'https://www.alternate.nl/product/1673517',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'amp holo', model: 'amp holo',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1677985' url: 'https://www.alternate.nl/product/1677985',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'amp extreme holo', model: 'amp extreme holo',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1677982' url: 'https://www.alternate.nl/product/1677982',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673137' url: 'https://www.alternate.nl/product/1673137',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3080', series: '3080',
url: 'https://www.alternate.nl/product/1673134' url: 'https://www.alternate.nl/product/1673134',
} },
], ],
name: 'alternate-nl' name: 'alternate-nl',
}; };
+431 -431
View File
@@ -1,435 +1,435 @@
import {Store} from './store'; import {Store} from './store';
export const Alternate: Store = { export const Alternate: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.stockStatus', container: '.stockStatus',
text: [ text: [
'auf lager', 'auf lager',
'ware neu eingetroffen', 'ware neu eingetroffen',
'in kürze versandfertig', 'in kürze versandfertig',
'ware im zulauf' 'ware im zulauf',
] ],
}, },
maxPrice: { maxPrice: {
container: 'div.price > span', container: 'div.price > span',
euroFormat: true euroFormat: true,
}, },
outOfStock: [ outOfStock: [
{ {
container: '.stockStatus', container: '.stockStatus',
text: ['liefertermin unbekannt'] text: ['liefertermin unbekannt'],
}, },
{ {
container: '.stockStatus', container: '.stockStatus',
text: ['Artikel kann nicht gekauft werden'] text: ['Artikel kann nicht gekauft werden'],
} },
] ],
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.alternate.de/product/1662088' url: 'https://www.alternate.de/product/1662088',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1672868' url: 'https://www.alternate.de/product/1672868',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1672867' url: 'https://www.alternate.de/product/1672867',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1672251' url: 'https://www.alternate.de/product/1672251',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1672634' url: 'https://www.alternate.de/product/1672634',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1673517' url: 'https://www.alternate.de/product/1673517',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1673524' url: 'https://www.alternate.de/product/1673524',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1673512' url: 'https://www.alternate.de/product/1673512',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1673520' url: 'https://www.alternate.de/product/1673520',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1674164' url: 'https://www.alternate.de/product/1674164',
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phantom gs', model: 'phantom gs',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1688597' url: 'https://www.alternate.de/product/1688597',
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1673442' url: 'https://www.alternate.de/product/1673442',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1680168' url: 'https://www.alternate.de/product/1680168',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1680168' url: 'https://www.alternate.de/product/1680168',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1672756' url: 'https://www.alternate.de/product/1672756',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1672753' url: 'https://www.alternate.de/product/1672753',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1681134' url: 'https://www.alternate.de/product/1681134',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1673136' url: 'https://www.alternate.de/product/1673136',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1673134' url: 'https://www.alternate.de/product/1673134',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1673137' url: 'https://www.alternate.de/product/1673137',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1672343' url: 'https://www.alternate.de/product/1672343',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1672345' url: 'https://www.alternate.de/product/1672345',
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gamerock oc', model: 'gamerock oc',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1688594' url: 'https://www.alternate.de/product/1688594',
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1673431' url: 'https://www.alternate.de/product/1673431',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'amp extreme holo', model: 'amp extreme holo',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1677982' url: 'https://www.alternate.de/product/1677982',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'amp holo', model: 'amp holo',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1677985' url: 'https://www.alternate.de/product/1677985',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1677989' url: 'https://www.alternate.de/product/1677989',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.alternate.de/product/1672612' url: 'https://www.alternate.de/product/1672612',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1672870' url: 'https://www.alternate.de/product/1672870',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1672872' url: 'https://www.alternate.de/product/1672872',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1672259' url: 'https://www.alternate.de/product/1672259',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1672629' url: 'https://www.alternate.de/product/1672629',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1673530' url: 'https://www.alternate.de/product/1673530',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1673531' url: 'https://www.alternate.de/product/1673531',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1673521' url: 'https://www.alternate.de/product/1673521',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1673525' url: 'https://www.alternate.de/product/1673525',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1673529' url: 'https://www.alternate.de/product/1673529',
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1673440' url: 'https://www.alternate.de/product/1673440',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1680670' url: 'https://www.alternate.de/product/1680670',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1687793' url: 'https://www.alternate.de/product/1687793',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1672744' url: 'https://www.alternate.de/product/1672744',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1672749' url: 'https://www.alternate.de/product/1672749',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'turbo', model: 'turbo',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1687703' url: 'https://www.alternate.de/product/1687703',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'gaming x3', model: 'gaming x3',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1673131' url: 'https://www.alternate.de/product/1673131',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1673135' url: 'https://www.alternate.de/product/1673135',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1673129' url: 'https://www.alternate.de/product/1673129',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1672341' url: 'https://www.alternate.de/product/1672341',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1672346' url: 'https://www.alternate.de/product/1672346',
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1673434' url: 'https://www.alternate.de/product/1673434',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.alternate.de/product/1672611' url: 'https://www.alternate.de/product/1672611',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://www.alternate.de/product/1685588' url: 'https://www.alternate.de/product/1685588',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://www.alternate.de/product/1685585' url: 'https://www.alternate.de/product/1685585',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.alternate.de/product/1685590' url: 'https://www.alternate.de/product/1685590',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.alternate.de/product/1685584' url: 'https://www.alternate.de/product/1685584',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.alternate.de/product/1651220' url: 'https://www.alternate.de/product/1651220',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.alternate.de/product/1651221' url: 'https://www.alternate.de/product/1651221',
}, },
{ {
brand: 'xfx', brand: 'xfx',
model: 'merc', model: 'merc',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://www.alternate.de/product/1698792' url: 'https://www.alternate.de/product/1698792',
}, },
{ {
brand: 'sapphire', brand: 'sapphire',
model: 'nitro oc se', model: 'nitro oc se',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://www.alternate.de/product/1696478' url: 'https://www.alternate.de/product/1696478',
}, },
{ {
brand: 'sapphire', brand: 'sapphire',
model: 'nitro oc', model: 'nitro oc',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://www.alternate.de/product/1696482' url: 'https://www.alternate.de/product/1696482',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix lc', model: 'strix lc',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://www.alternate.de/product/1695392' url: 'https://www.alternate.de/product/1695392',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://www.alternate.de/product/1697044' url: 'https://www.alternate.de/product/1697044',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: 'rx6900xt', series: 'rx6900xt',
url: 'https://www.alternate.de/product/1702773' url: 'https://www.alternate.de/product/1702773',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'amd reference', model: 'amd reference',
series: 'rx6900xt', series: 'rx6900xt',
url: 'https://www.alternate.de/product/1700508' url: 'https://www.alternate.de/product/1700508',
}, },
{ {
brand: 'xfx', brand: 'xfx',
model: 'merc', model: 'merc',
series: 'rx6900xt', series: 'rx6900xt',
url: 'https://www.alternate.de/product/1704614' url: 'https://www.alternate.de/product/1704614',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: 'https://www.alternate.de/product/1675115' url: 'https://www.alternate.de/product/1675115',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: 'https://www.alternate.de/product/1675117' url: 'https://www.alternate.de/product/1675117',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.alternate.de/product/1676874' url: 'https://www.alternate.de/product/1676874',
} },
], ],
name: 'alternate' name: 'alternate',
}; };
+289 -289
View File
@@ -1,293 +1,293 @@
import {Store} from './store'; import {Store} from './store';
export const AmazonCa: Store = { export const AmazonCa: Store = {
currency: '$', currency: '$',
labels: { labels: {
captcha: { captcha: {
container: 'body', container: 'body',
text: ['enter the characters you see below'] text: ['enter the characters you see below'],
}, },
inStock: { inStock: {
container: '#desktop_buybox', container: '#desktop_buybox',
text: ['add to cart'] text: ['add to cart'],
}, },
maxPrice: { maxPrice: {
container: '#priceblock_ourprice' container: '#priceblock_ourprice',
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B07PBLD2MX&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B07PBLD2MX&Quantity.1=1',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amazon.ca/dp/B07PBLD2MX' url: 'https://www.amazon.ca/dp/B07PBLD2MX',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08KWN2LZG&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08KWN2LZG&Quantity.1=1',
model: 'gaming x trio', model: 'gaming x trio',
series: '3070', series: '3070',
url: 'https://www.amazon.ca/dp/B08KWN2LZG' url: 'https://www.amazon.ca/dp/B08KWN2LZG',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08KWLMZV4&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08KWLMZV4&Quantity.1=1',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: 'https://www.amazon.ca/dp/B08KWLMZV4' url: 'https://www.amazon.ca/dp/B08KWLMZV4',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08LW46GH2&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08LW46GH2&Quantity.1=1',
model: 'xc3', model: 'xc3',
series: '3070', series: '3070',
url: 'https://www.amazon.ca/dp/B08LW46GH2' url: 'https://www.amazon.ca/dp/B08LW46GH2',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08L8L71SM&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08L8L71SM&Quantity.1=1',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3070', series: '3070',
url: 'https://www.amazon.ca/dp/B08L8L71SM' url: 'https://www.amazon.ca/dp/B08L8L71SM',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08L8L9TCZ&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08L8L9TCZ&Quantity.1=1',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3070', series: '3070',
url: 'https://www.amazon.ca/dp/B08L8L9TCZ' url: 'https://www.amazon.ca/dp/B08L8L9TCZ',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR7SV3M&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR7SV3M&Quantity.1=1',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.amazon.ca/dp/B08HR7SV3M' url: 'https://www.amazon.ca/dp/B08HR7SV3M',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.amazon.ca/dp/B08HR5SXPS' url: 'https://www.amazon.ca/dp/B08HR5SXPS',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR3DPGW&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR3DPGW&Quantity.1=1',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.amazon.ca/dp/B08HR3DPGW' url: 'https://www.amazon.ca/dp/B08HR3DPGW',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.amazon.ca/dp/B08HR3Y5GQ' url: 'https://www.amazon.ca/dp/B08HR3Y5GQ',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.amazon.ca/dp/B08HR55YB5' url: 'https://www.amazon.ca/dp/B08HR55YB5',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.amazon.ca/dp/B08HR4RJ3Q' url: 'https://www.amazon.ca/dp/B08HR4RJ3Q',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.amazon.ca/dp/B08HR6FMF3' url: 'https://www.amazon.ca/dp/B08HR6FMF3',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.amazon.ca/dp/B08HJTH61J' url: 'https://www.amazon.ca/dp/B08HJTH61J',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.amazon.ca/dp/B08HJS2JLJ' url: 'https://www.amazon.ca/dp/B08HJS2JLJ',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.amazon.ca/dp/B08HHDP9DW' url: 'https://www.amazon.ca/dp/B08HHDP9DW',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.amazon.ca/dp/B08HH5WF97' url: 'https://www.amazon.ca/dp/B08HH5WF97',
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.amazon.ca/dp/B08HJNKT3P' url: 'https://www.amazon.ca/dp/B08HJNKT3P',
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.amazon.ca/dp/B08HJQ182D' url: 'https://www.amazon.ca/dp/B08HJQ182D',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.amazon.ca/dp/B08HR9D2JS' url: 'https://www.amazon.ca/dp/B08HR9D2JS',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.amazon.ca/dp/B08HJRF2CN' url: 'https://www.amazon.ca/dp/B08HJRF2CN',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://www.amazon.ca/dp/B08HJPDJTY' url: 'https://www.amazon.ca/dp/B08HJPDJTY',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.amazon.ca/dp/B08HJGNJ81' url: 'https://www.amazon.ca/dp/B08HJGNJ81',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.amazon.ca/dp/B08HJLLF7G' url: 'https://www.amazon.ca/dp/B08HJLLF7G',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://www.amazon.ca/dp/B08166SLDF' url: 'https://www.amazon.ca/dp/B08166SLDF',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://www.amazon.ca/dp/B0815XFSGK' url: 'https://www.amazon.ca/dp/B0815XFSGK',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.amazon.ca/dp/B08164VTWH' url: 'https://www.amazon.ca/dp/B08164VTWH',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.amazon.ca/dp/B0815Y8J9N' url: 'https://www.amazon.ca/dp/B0815Y8J9N',
}, },
{ {
brand: 'sony', brand: 'sony',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08GSC5D9G&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08GSC5D9G&Quantity.1=1',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.amazon.ca/dp/B08GSC5D9G' url: 'https://www.amazon.ca/dp/B08GSC5D9G',
}, },
{ {
brand: 'sony', brand: 'sony',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08GS1N24H&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08GS1N24H&Quantity.1=1',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.amazon.ca/dp/B08GS1N24H' url: 'https://www.amazon.ca/dp/B08GS1N24H',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08H75RTZ8&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08H75RTZ8&Quantity.1=1',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: 'https://www.amazon.ca/dp/B08H75RTZ8' url: 'https://www.amazon.ca/dp/B08H75RTZ8',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08G9J44ZN&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08G9J44ZN&Quantity.1=1',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: 'https://www.amazon.ca/dp/B08G9J44ZN' url: 'https://www.amazon.ca/dp/B08G9J44ZN',
}, },
{ {
brand: 'xfx', brand: 'xfx',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08NX14LV1&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08NX14LV1&Quantity.1=1',
model: 'merc', model: 'merc',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://www.amazon.ca/dp/B08NX14LV1' url: 'https://www.amazon.ca/dp/B08NX14LV1',
}, },
{ {
brand: 'sapphire', brand: 'sapphire',
cartUrl: cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08PQ585CX&Quantity.1=1', 'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08PQ585CX&Quantity.1=1',
model: 'pulse', model: 'pulse',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://www.amazon.ca/dp/B08PQ585CX' url: 'https://www.amazon.ca/dp/B08PQ585CX',
} },
], ],
name: 'amazon-ca' name: 'amazon-ca',
}; };
+60 -60
View File
@@ -1,64 +1,64 @@
import {Store} from './store'; import {Store} from './store';
export const AmazonDeWarehouse: Store = { export const AmazonDeWarehouse: Store = {
backoffStatusCodes: [403, 429, 503], backoffStatusCodes: [403, 429, 503],
currency: '€', currency: '€',
labels: { labels: {
captcha: { captcha: {
container: 'body', container: 'body',
text: [ text: [
'geben sie die unten angezeigten zeichen ein', 'geben sie die unten angezeigten zeichen ein',
'geben sie die zeichen unten ein' 'geben sie die zeichen unten ein',
] ],
}, },
inStock: { inStock: {
container: '#a-autoid-0-announce', container: '#a-autoid-0-announce',
text: ['In den Einkaufswagen'] text: ['In den Einkaufswagen'],
}, },
maxPrice: { maxPrice: {
container: '.olpOfferPrice', container: '.olpOfferPrice',
euroFormat: true euroFormat: true,
}, },
outOfStock: [ outOfStock: [
{ {
container: '.a-size-medium', container: '.a-size-medium',
text: [ text: [
'Derzeit gibt es keine Verkäufer, die diesen Artikel an Ihren Standort liefern können' 'Derzeit gibt es keine Verkäufer, die diesen Artikel an Ihren Standort liefern können',
] ],
} },
] ],
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amazon.de/gp/offer-listing/B07PW9VBK5' url: 'https://www.amazon.de/gp/offer-listing/B07PW9VBK5',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.amazon.de/gp/offer-listing/B08H93ZRK9' url: 'https://www.amazon.de/gp/offer-listing/B08H93ZRK9',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.amazon.de/gp/offer-listing/B08H98GVK8' url: 'https://www.amazon.de/gp/offer-listing/B08H98GVK8',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: 'https://www.amazon.de/gp/offer-listing/B087VM5XC6' url: 'https://www.amazon.de/gp/offer-listing/B087VM5XC6',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: 'https://www.amazon.de/gp/offer-listing/B08H93ZRLL' url: 'https://www.amazon.de/gp/offer-listing/B08H93ZRLL',
} },
], ],
name: 'amazon-de-warehouse' name: 'amazon-de-warehouse',
}; };
File diff suppressed because it is too large Load Diff
+200 -200
View File
@@ -1,204 +1,204 @@
import {Store} from './store'; import {Store} from './store';
export const AmazonEs: Store = { export const AmazonEs: Store = {
backoffStatusCodes: [403, 429, 503], backoffStatusCodes: [403, 429, 503],
currency: '€', currency: '€',
labels: { labels: {
captcha: { captcha: {
container: 'body', container: 'body',
text: ['introduzca los caracteres que ve a continuación'] text: ['introduzca los caracteres que ve a continuación'],
}, },
inStock: { inStock: {
container: '#desktop_buybox', container: '#desktop_buybox',
text: ['añadir a la cesta'] text: ['añadir a la cesta'],
}, },
maxPrice: { maxPrice: {
container: '#priceblock_ourprice' container: '#priceblock_ourprice',
}, },
outOfStock: [ outOfStock: [
{ {
container: '#availability', container: '#availability',
text: ['No disponible'] text: ['No disponible'],
} },
] ],
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B07PW9VBK5&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B07PW9VBK5&Quantity.1=1',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amazon.es/dp/B07PW9VBK5' url: 'https://www.amazon.es/dp/B07PW9VBK5',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HM4V2DH&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HM4V2DH&Quantity.1=1',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HM4V2DH' url: 'https://www.amazon.es/dp/B08HM4V2DH',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HGYXP4C&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HGYXP4C&Quantity.1=1',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HGYXP4C' url: 'https://www.amazon.es/dp/B08HGYXP4C',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HJ9XFNM&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HJ9XFNM&Quantity.1=1',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HJ9XFNM' url: 'https://www.amazon.es/dp/B08HJ9XFNM',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HGBYWQ6&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HGBYWQ6&Quantity.1=1',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HGBYWQ6' url: 'https://www.amazon.es/dp/B08HGBYWQ6',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HGLN78Q&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HGLN78Q&Quantity.1=1',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HGLN78Q' url: 'https://www.amazon.es/dp/B08HGLN78Q',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HH1BMQQ&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HH1BMQQ&Quantity.1=1',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HH1BMQQ' url: 'https://www.amazon.es/dp/B08HH1BMQQ',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HLZXHZY&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HLZXHZY&Quantity.1=1',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HLZXHZY' url: 'https://www.amazon.es/dp/B08HLZXHZY',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HHZVZ3N&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HHZVZ3N&Quantity.1=1',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HHZVZ3N' url: 'https://www.amazon.es/dp/B08HHZVZ3N',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HN37VQK&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HN37VQK&Quantity.1=1',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HN37VQK' url: 'https://www.amazon.es/dp/B08HN37VQK',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HN4DSTC&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HN4DSTC&Quantity.1=1',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HN4DSTC' url: 'https://www.amazon.es/dp/B08HN4DSTC',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HN6KYS3&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HN6KYS3&Quantity.1=1',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HN6KYS3' url: 'https://www.amazon.es/dp/B08HN6KYS3',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HM4M621&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HM4M621&Quantity.1=1',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HM4M621' url: 'https://www.amazon.es/dp/B08HM4M621',
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HR1NPPQ&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HR1NPPQ&Quantity.1=1',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.amazon.es/dp/B08HR1NPPQ' url: 'https://www.amazon.es/dp/B08HR1NPPQ',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://www.amazon.es/dp/B08166SLDF' url: 'https://www.amazon.es/dp/B08166SLDF',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://www.amazon.es/dp/B0815XFSGK' url: 'https://www.amazon.es/dp/B0815XFSGK',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.amazon.es/dp/B08164VTWH' url: 'https://www.amazon.es/dp/B08164VTWH',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.amazon.es/dp/B0815Y8J9N' url: 'https://www.amazon.es/dp/B0815Y8J9N',
}, },
{ {
brand: 'sony', brand: 'sony',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08KKJ37F7&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08KKJ37F7&Quantity.1=1',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.amazon.es/dp/B08KKJ37F7' url: 'https://www.amazon.es/dp/B08KKJ37F7',
}, },
{ {
brand: 'sony', brand: 'sony',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08KJF2D25&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08KJF2D25&Quantity.1=1',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.amazon.es/dp/B08KJF2D25' url: 'https://www.amazon.es/dp/B08KJF2D25',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08H93ZRLL&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08H93ZRLL&Quantity.1=1',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: 'https://www.amazon.es/dp/B08H93ZRLL' url: 'https://www.amazon.es/dp/B08H93ZRLL',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
cartUrl: cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B087VM5XC6&Quantity.1=1', 'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B087VM5XC6&Quantity.1=1',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: 'https://www.amazon.es/dp/B087VM5XC6' url: 'https://www.amazon.es/dp/B087VM5XC6',
} },
], ],
name: 'amazon-es' name: 'amazon-es',
}; };
+187 -187
View File
@@ -1,191 +1,191 @@
import {Store} from './store'; import {Store} from './store';
export const AmazonFr: Store = { export const AmazonFr: Store = {
backoffStatusCodes: [403, 429, 503], backoffStatusCodes: [403, 429, 503],
currency: '€', currency: '€',
labels: { labels: {
captcha: { captcha: {
container: 'body', container: 'body',
text: ['entrez les caractères que vous voyez ci-dessous'] text: ['entrez les caractères que vous voyez ci-dessous'],
}, },
inStock: { inStock: {
container: '#desktop_buybox', container: '#desktop_buybox',
text: ['ajouter au panier'] text: ['ajouter au panier'],
}, },
maxPrice: { maxPrice: {
container: '#priceblock_ourprice', container: '#priceblock_ourprice',
euroFormat: true euroFormat: true,
}, },
outOfStock: [ outOfStock: [
{ {
container: '#availability', container: '#availability',
text: ['Actuellement indisponible'] text: ['Actuellement indisponible'],
} },
] ],
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amazon.fr/dp/B07PW9VBK5' url: 'https://www.amazon.fr/dp/B07PW9VBK5',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.amazon.fr/dp/B08HR7SV3M' url: 'https://www.amazon.fr/dp/B08HR7SV3M',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.amazon.fr/dp/B08HR5SXPS' url: 'https://www.amazon.fr/dp/B08HR5SXPS',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.amazon.fr/dp/B08HR3DPGW' url: 'https://www.amazon.fr/dp/B08HR3DPGW',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.amazon.fr/dp/B08HR3Y5GQ' url: 'https://www.amazon.fr/dp/B08HR3Y5GQ',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.amazon.fr/dp/B08HR55YB5' url: 'https://www.amazon.fr/dp/B08HR55YB5',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.amazon.fr/dp/B08HR4RJ3Q' url: 'https://www.amazon.fr/dp/B08HR4RJ3Q',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.amazon.fr/dp/B08HR6FMF3' url: 'https://www.amazon.fr/dp/B08HR6FMF3',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.amazon.fr/dp/B08HJTH61J' url: 'https://www.amazon.fr/dp/B08HJTH61J',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.amazon.fr/dp/B08HJS2JLJ' url: 'https://www.amazon.fr/dp/B08HJS2JLJ',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.amazon.fr/dp/B08HHDP9DW' url: 'https://www.amazon.fr/dp/B08HHDP9DW',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.amazon.fr/dp/B08HH5WF97' url: 'https://www.amazon.fr/dp/B08HH5WF97',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.amazon.fr/dp/B08HJNKT3P' url: 'https://www.amazon.fr/dp/B08HJNKT3P',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.amazon.fr/dp/B08HJQ182D' url: 'https://www.amazon.fr/dp/B08HJQ182D',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.amazon.fr/dp/B08HR9D2JS' url: 'https://www.amazon.fr/dp/B08HR9D2JS',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.amazon.fr/dp/B08HJRF2CN' url: 'https://www.amazon.fr/dp/B08HJRF2CN',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://www.amazon.fr/dp/B08HJPDJTY' url: 'https://www.amazon.fr/dp/B08HJPDJTY',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.amazon.fr/dp/B08HJGNJ81' url: 'https://www.amazon.fr/dp/B08HJGNJ81',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.amazon.fr/dp/B08HJLLF7G' url: 'https://www.amazon.fr/dp/B08HJLLF7G',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://www.amazon.fr/dp/B08166SLDF' url: 'https://www.amazon.fr/dp/B08166SLDF',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://www.amazon.fr/dp/B0815XFSGK' url: 'https://www.amazon.fr/dp/B0815XFSGK',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.amazon.fr/dp/B08164VTWH' url: 'https://www.amazon.fr/dp/B08164VTWH',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.amazon.fr/dp/B0815Y8J9N' url: 'https://www.amazon.fr/dp/B0815Y8J9N',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.amazon.fr/dp/B08H93ZRK9' url: 'https://www.amazon.fr/dp/B08H93ZRK9',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.amazon.fr/dp/B08H98GVK8' url: 'https://www.amazon.fr/dp/B08H98GVK8',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: 'https://www.amazon.fr/dp/B08H93ZRLL' url: 'https://www.amazon.fr/dp/B08H93ZRLL',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: 'https://www.amazon.fr/dp/B087VM5XC6' url: 'https://www.amazon.fr/dp/B087VM5XC6',
} },
], ],
name: 'amazon-fr' name: 'amazon-fr',
}; };
+411 -413
View File
@@ -1,417 +1,415 @@
import {Store} from './store'; import {Store} from './store';
export const AmazonIt: Store = { export const AmazonIt: Store = {
backoffStatusCodes: [403, 429, 503], backoffStatusCodes: [403, 429, 503],
currency: '€', currency: '€',
labels: { labels: {
captcha: { captcha: {
container: 'body', container: 'body',
text: [ text: ['Inserisci i caratteri visualizzati nello spazio sottostante'],
'Inserisci i caratteri visualizzati nello spazio sottostante' },
] inStock: {
}, container: '#desktop_buybox',
inStock: { text: ['Aggiungi al carrello'],
container: '#desktop_buybox', },
text: ['Aggiungi al carrello'] maxPrice: {
}, container: '#priceblock_ourprice',
maxPrice: { euroFormat: true,
container: '#priceblock_ourprice', },
euroFormat: true },
} links: [
}, {
links: [ brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KHFZN9P&Quantity.1=1',
cartUrl: model: 'dual',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KHFZN9P&Quantity.1=1', series: '3070',
model: 'dual', url: 'https://www.amazon.it/dp/B08KHFZN9P',
series: '3070', },
url: 'https://www.amazon.it/dp/B08KHFZN9P' {
}, brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8HPKR6&Quantity.1=1',
cartUrl: model: 'dual',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8HPKR6&Quantity.1=1', series: '3070',
model: 'dual', url: 'https://www.amazon.it/dp/B08L8HPKR6',
series: '3070', },
url: 'https://www.amazon.it/dp/B08L8HPKR6' {
}, brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8JNTXQ&Quantity.1=1',
cartUrl: model: 'strix',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8JNTXQ&Quantity.1=1', series: '3070',
model: 'strix', url: 'https://www.amazon.it/dp/B08L8JNTXQ',
series: '3070', },
url: 'https://www.amazon.it/dp/B08L8JNTXQ' {
}, brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8KC1J7&Quantity.1=1',
cartUrl: model: 'tuf',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8KC1J7&Quantity.1=1', series: '3070',
model: 'tuf', url: 'https://www.amazon.it/dp/B08L8KC1J7',
series: '3070', },
url: 'https://www.amazon.it/dp/B08L8KC1J7' {
}, brand: 'gigabyte',
{ cartUrl:
brand: 'gigabyte', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1',
cartUrl: model: 'gaming oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1', series: '3070',
model: 'gaming oc', url: 'https://www.amazon.it/dp/B08KY266MG',
series: '3070', },
url: 'https://www.amazon.it/dp/B08KY266MG' {
}, brand: 'msi',
{ cartUrl:
brand: 'msi', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KWN2LZG&Quantity.1=1',
cartUrl: model: 'gaming',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KWN2LZG&Quantity.1=1', series: '3070',
model: 'gaming', url: 'https://www.amazon.it/dp/B08KWN2LZG',
series: '3070', },
url: 'https://www.amazon.it/dp/B08KWN2LZG' {
}, brand: 'pny',
{ cartUrl:
brand: 'pny', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBJB7YD&Quantity.1=1',
cartUrl: model: 'xlr8 revel',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBJB7YD&Quantity.1=1', series: '3070',
model: 'xlr8 revel', url: 'https://www.amazon.it/dp/B08HBJB7YD',
series: '3070', },
url: 'https://www.amazon.it/dp/B08HBJB7YD' {
}, brand: 'pny',
{ cartUrl:
brand: 'pny', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBF5L3K&Quantity.1=1',
cartUrl: model: 'xlr8 uprising',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBF5L3K&Quantity.1=1', series: '3070',
model: 'xlr8 uprising', url: 'https://www.amazon.it/dp/B08HBF5L3K',
series: '3070', },
url: 'https://www.amazon.it/dp/B08HBF5L3K' {
}, brand: 'msi',
{ cartUrl:
brand: 'msi', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KWPDXJZ&Quantity.1=1',
cartUrl: model: 'ventus 2x oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KWPDXJZ&Quantity.1=1', series: '3070',
model: 'ventus 2x oc', url: 'https://www.amazon.it/dp/B08KWPDXJZ',
series: '3070', },
url: 'https://www.amazon.it/dp/B08KWPDXJZ' {
}, brand: 'msi',
{ cartUrl:
brand: 'msi', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KWLMZV4&Quantity.1=1',
cartUrl: model: 'ventus 3x oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KWLMZV4&Quantity.1=1', series: '3070',
model: 'ventus 3x oc', url: 'https://www.amazon.it/dp/B08KWLMZV4',
series: '3070', },
url: 'https://www.amazon.it/dp/B08KWLMZV4' {
}, brand: 'zotac',
{ cartUrl:
brand: 'zotac', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08LF32LJ6&Quantity.1=1',
cartUrl: model: 'gaming',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08LF32LJ6&Quantity.1=1', series: '3070',
model: 'gaming', url: 'https://www.amazon.it/dp/B08LF32LJ6',
series: '3070', },
url: 'https://www.amazon.it/dp/B08LF32LJ6' {
}, brand: 'evga',
{ cartUrl:
brand: 'evga', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8L71SM&Quantity.1=1',
cartUrl: model: 'xc3 ultra',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8L71SM&Quantity.1=1', series: '3070',
model: 'xc3 ultra', url: 'https://www.amazon.it/dp/B08L8L71SM',
series: '3070', },
url: 'https://www.amazon.it/dp/B08L8L71SM' {
}, brand: 'evga',
{ cartUrl:
brand: 'evga', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8L9TCZ&Quantity.1=1',
cartUrl: model: 'ftw3 ultra',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8L9TCZ&Quantity.1=1', series: '3070',
model: 'ftw3 ultra', url: 'https://www.amazon.it/dp/B08L8L9TCZ',
series: '3070', },
url: 'https://www.amazon.it/dp/B08L8L9TCZ' {
}, brand: 'gigabyte',
{ cartUrl:
brand: 'gigabyte', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1',
cartUrl: model: 'gaming oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1', series: '3070',
model: 'gaming oc', url: 'https://www.amazon.it/dp/B08KY266MG',
series: '3070', },
url: 'https://www.amazon.it/dp/B08KY266MG' {
}, brand: 'gigabyte',
{ cartUrl:
brand: 'gigabyte', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08M13DXSZ&Quantity.1=1',
cartUrl: model: 'vision oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08M13DXSZ&Quantity.1=1', series: '3070',
model: 'vision oc', url: 'https://www.amazon.it/dp/B08M13DXSZ',
series: '3070', },
url: 'https://www.amazon.it/dp/B08M13DXSZ' {
}, brand: 'gigabyte',
{ cartUrl:
brand: 'gigabyte', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KXZV626&Quantity.1=1',
cartUrl: model: 'eagle',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KXZV626&Quantity.1=1', series: '3070',
model: 'eagle', url: 'https://www.amazon.it/dp/B08KXZV626',
series: '3070', },
url: 'https://www.amazon.it/dp/B08KXZV626' {
}, brand: 'pny',
{ cartUrl:
brand: 'pny', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1',
cartUrl: model: 'xlr8 revel',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1', series: '3080',
model: 'xlr8 revel', url: 'https://www.amazon.it/dp/B08HBR7QBM',
series: '3080', },
url: 'https://www.amazon.it/dp/B08HBR7QBM' {
}, brand: 'pny',
{ cartUrl:
brand: 'pny', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1',
cartUrl: model: 'xlr8 revel',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1', series: '3080',
model: 'xlr8 revel', url: 'https://www.amazon.it/dp/B08HBTJMLJ',
series: '3080', },
url: 'https://www.amazon.it/dp/B08HBTJMLJ' {
}, brand: 'evga',
{ cartUrl:
brand: 'evga', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1',
cartUrl: model: 'ftw3 ultra',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1', series: '3080',
model: 'ftw3 ultra', url: 'https://www.amazon.it/dp/B08HR3Y5GQ',
series: '3080', },
url: 'https://www.amazon.it/dp/B08HR3Y5GQ' {
}, brand: 'evga',
{ cartUrl:
brand: 'evga', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1',
cartUrl: model: 'xc3 ultra',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1', series: '3080',
model: 'xc3 ultra', url: 'https://www.amazon.it/dp/B08HR55YB5',
series: '3080', },
url: 'https://www.amazon.it/dp/B08HR55YB5' {
}, brand: 'evga',
{ cartUrl:
brand: 'evga', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1',
cartUrl: model: 'xc3',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1', series: '3080',
model: 'xc3', url: 'https://www.amazon.it/dp/B08HR4RJ3Q',
series: '3080', },
url: 'https://www.amazon.it/dp/B08HR4RJ3Q' {
}, brand: 'evga',
{ cartUrl:
brand: 'evga', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1',
cartUrl: model: 'xc3 black',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1', series: '3080',
model: 'xc3 black', url: 'https://www.amazon.it/dp/B08HR6FMF3',
series: '3080', },
url: 'https://www.amazon.it/dp/B08HR6FMF3' {
}, brand: 'gigabyte',
{ cartUrl:
brand: 'gigabyte', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1',
cartUrl: model: 'gaming oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1', series: '3080',
model: 'gaming oc', url: 'https://www.amazon.it/dp/B08HJTH61J',
series: '3080', },
url: 'https://www.amazon.it/dp/B08HJTH61J' {
}, brand: 'gigabyte',
{ cartUrl:
brand: 'gigabyte', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1',
cartUrl: model: 'eagle oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1', series: '3080',
model: 'eagle oc', url: 'https://www.amazon.it/dp/B08HJS2JLJ',
series: '3080', },
url: 'https://www.amazon.it/dp/B08HJS2JLJ' {
}, brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1',
cartUrl: model: 'tuf oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1', series: '3080',
model: 'tuf oc', url: 'https://www.amazon.it/dp/B08HH5WF97',
series: '3080', },
url: 'https://www.amazon.it/dp/B08HH5WF97' {
}, brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1',
cartUrl: model: 'tuf',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1', series: '3080',
model: 'tuf', url: 'https://www.amazon.it/dp/B08HHDP9DW',
series: '3080', },
url: 'https://www.amazon.it/dp/B08HHDP9DW' {
}, brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1',
cartUrl: model: 'strix oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1', series: '3090',
model: 'strix oc', url: 'https://www.amazon.it/dp/B08J6GMWCQ',
series: '3090', },
url: 'https://www.amazon.it/dp/B08J6GMWCQ' {
}, brand: 'msi',
{ cartUrl:
brand: 'msi', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1',
cartUrl: model: 'ventus 3x oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1', series: '3080',
model: 'ventus 3x oc', url: 'https://www.amazon.it/dp/B08HR5SXPS',
series: '3080', },
url: 'https://www.amazon.it/dp/B08HR5SXPS' {
}, brand: 'zotac',
{ cartUrl:
brand: 'zotac', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1',
cartUrl: model: 'trinity',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1', series: '3080',
model: 'trinity', url: 'https://www.amazon.it/dp/B08HJNKT3P',
series: '3080', },
url: 'https://www.amazon.it/dp/B08HJNKT3P' {
}, brand: 'zotac',
{ cartUrl:
brand: 'zotac', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1',
cartUrl: model: 'trinity',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1', series: '3090',
model: 'trinity', url: 'https://www.amazon.it/dp/B08HJQ182D',
series: '3090', },
url: 'https://www.amazon.it/dp/B08HJQ182D' {
}, brand: 'pny',
{ cartUrl:
brand: 'pny', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1',
cartUrl: model: 'xlr8 revel',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1', series: '3090',
model: 'xlr8 revel', url: 'https://www.amazon.it/dp/B08HBQWBHH',
series: '3090', },
url: 'https://www.amazon.it/dp/B08HBQWBHH' {
}, brand: 'pny',
{ cartUrl:
brand: 'pny', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1',
cartUrl: model: 'xlr8 revel',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1', series: '3090',
model: 'xlr8 revel', url: 'https://www.amazon.it/dp/B08HBVX53D',
series: '3090', },
url: 'https://www.amazon.it/dp/B08HBVX53D' {
}, brand: 'msi',
{ cartUrl:
brand: 'msi', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HRBW6VB&Quantity.1=1',
cartUrl: model: 'gaming x trio',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HRBW6VB&Quantity.1=1', series: '3090',
model: 'gaming x trio', url: 'https://www.amazon.it/dp/B08HRBW6VB',
series: '3090', },
url: 'https://www.amazon.it/dp/B08HRBW6VB' {
}, brand: 'msi',
{ cartUrl:
brand: 'msi', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1',
cartUrl: model: 'ventus 3x',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1', series: '3090',
model: 'ventus 3x', url: 'https://www.amazon.it/dp/B08HR9D2JS',
series: '3090', },
url: 'https://www.amazon.it/dp/B08HR9D2JS' {
}, brand: 'gigabyte',
{ cartUrl:
brand: 'gigabyte', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1',
cartUrl: model: 'gaming oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1', series: '3090',
model: 'gaming oc', url: 'https://www.amazon.it/dp/B08HJRF2CN',
series: '3090', },
url: 'https://www.amazon.it/dp/B08HJRF2CN' {
}, brand: 'gigabyte',
{ cartUrl:
brand: 'gigabyte', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1',
cartUrl: model: 'eagle oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1', series: '3090',
model: 'eagle oc', url: 'https://www.amazon.it/dp/B08HJPDJTY',
series: '3090', },
url: 'https://www.amazon.it/dp/B08HJPDJTY' {
}, brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1',
cartUrl: model: 'tuf oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1', series: '3090',
model: 'tuf oc', url: 'https://www.amazon.it/dp/B08HJGNJ81',
series: '3090', },
url: 'https://www.amazon.it/dp/B08HJGNJ81' {
}, brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1',
cartUrl: model: 'tuf oc',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1', series: '3090',
model: 'tuf oc', url: 'https://www.amazon.it/dp/B08HJLLF7G',
series: '3090', },
url: 'https://www.amazon.it/dp/B08HJLLF7G' {
}, brand: 'amd',
{ cartUrl:
brand: 'amd', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
cartUrl: model: '5600x',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1', series: 'ryzen5600',
model: '5600x', url: 'https://www.amazon.it/dp/B08166SLDF',
series: 'ryzen5600', },
url: 'https://www.amazon.it/dp/B08166SLDF' {
}, brand: 'amd',
{ cartUrl:
brand: 'amd', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
cartUrl: model: '5800x',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1', series: 'ryzen5800',
model: '5800x', url: 'https://www.amazon.it/dp/product/B0815XFSGK',
series: 'ryzen5800', },
url: 'https://www.amazon.it/dp/product/B0815XFSGK' {
}, brand: 'amd',
{ cartUrl:
brand: 'amd', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
cartUrl: model: '5900x',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1', series: 'ryzen5900',
model: '5900x', url: 'https://www.amazon.it/dp/B08164VTWH',
series: 'ryzen5900', },
url: 'https://www.amazon.it/dp/B08164VTWH' {
}, brand: 'amd',
{ cartUrl:
brand: 'amd', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
cartUrl: model: '5950x',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1', series: 'ryzen5950',
model: '5950x', url: 'https://www.amazon.it/dp/B0815Y8J9N',
series: 'ryzen5950', },
url: 'https://www.amazon.it/dp/B0815Y8J9N' {
}, brand: 'sapphire',
{ cartUrl:
brand: 'sapphire', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08MVC76SR&Quantity.1=1',
cartUrl: model: 'amd reference',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08MVC76SR&Quantity.1=1', series: 'rx6800xt',
model: 'amd reference', url: 'https://www.amazon.it/dp/B08MVC76SR',
series: 'rx6800xt', },
url: 'https://www.amazon.it/dp/B08MVC76SR' {
}, brand: 'sapphire',
{ cartUrl:
brand: 'sapphire', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08MVCLBWK&Quantity.1=1',
cartUrl: model: 'amd reference',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08MVCLBWK&Quantity.1=1', series: 'rx6800',
model: 'amd reference', url: 'https://www.amazon.it/dp/B08MVCLBWK',
series: 'rx6800', },
url: 'https://www.amazon.it/dp/B08MVCLBWK' {
}, brand: 'sony',
{ cartUrl:
brand: 'sony', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KKJ37F7&Quantity.1=1',
cartUrl: model: 'ps5 console',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KKJ37F7&Quantity.1=1', series: 'sonyps5c',
model: 'ps5 console', url: 'https://www.amazon.it/dp/B08KKJ37F7',
series: 'sonyps5c', },
url: 'https://www.amazon.it/dp/B08KKJ37F7' {
}, brand: 'sony',
{ cartUrl:
brand: 'sony', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KJF2D25&Quantity.1=1',
cartUrl: model: 'ps5 digital',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KJF2D25&Quantity.1=1', series: 'sonyps5de',
model: 'ps5 digital', url: 'https://www.amazon.it/dp/B08KJF2D25',
series: 'sonyps5de', },
url: 'https://www.amazon.it/dp/B08KJF2D25' {
}, brand: 'microsoft',
{ cartUrl:
brand: 'microsoft', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08JDSW1ZW&Quantity.1=1',
cartUrl: model: 'xbox series x',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08JDSW1ZW&Quantity.1=1', series: 'xboxsx',
model: 'xbox series x', url: 'https://www.amazon.it/dp/B08JDSW1ZW',
series: 'xboxsx', },
url: 'https://www.amazon.it/dp/B08JDSW1ZW' {
}, brand: 'microsoft',
{ cartUrl:
brand: 'microsoft', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08JDTCXRG&Quantity.1=1',
cartUrl: model: 'xbox series s',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08JDTCXRG&Quantity.1=1', series: 'xboxss',
model: 'xbox series s', url: 'https://www.amazon.it/dp/B08JDTCXRG',
series: 'xboxss', },
url: 'https://www.amazon.it/dp/B08JDTCXRG' {
}, brand: 'corsair',
{ cartUrl:
brand: 'corsair', 'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B07M63H81H&Quantity.1=1',
cartUrl: model: '750 platinum',
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B07M63H81H&Quantity.1=1', series: 'sf',
model: '750 platinum', url: 'https://www.amazon.it/dp/B07M63H81H',
series: 'sf', },
url: 'https://www.amazon.it/dp/B07M63H81H' ],
} name: 'amazon-it',
],
name: 'amazon-it'
}; };
+234 -236
View File
@@ -1,240 +1,238 @@
import {Store} from './store'; import {Store} from './store';
export const AmazonNl: Store = { export const AmazonNl: Store = {
currency: '€', currency: '€',
labels: { labels: {
captcha: { captcha: {
container: 'body', container: 'body',
text: ['voer de karakters in die u hieronder ziet'] text: ['voer de karakters in die u hieronder ziet'],
}, },
inStock: [ inStock: [
{ {
container: '#add-to-cart-button', container: '#add-to-cart-button',
text: ['in winkelwagen'] text: ['in winkelwagen'],
}, },
{ {
container: '#buy-now-button', container: '#buy-now-button',
text: ['nu kopen'] text: ['nu kopen'],
} },
], ],
maxPrice: { maxPrice: {
container: '#priceblock_ourprice', container: '#priceblock_ourprice',
euroFormat: true euroFormat: true,
}, },
outOfStock: [ outOfStock: [
{ {
container: '#availability', container: '#availability',
text: ['tijdelijk niet'] text: ['tijdelijk niet'],
}, },
{ {
container: '#outOfStock', container: '#outOfStock',
text: [ text: ['we weten niet of en wanneer dit item weer op voorraad is'],
'we weten niet of en wanneer dit item weer op voorraad is' },
] ],
} },
] links: [
}, {
links: [ brand: 'test:brand',
{ cartUrl:
brand: 'test:brand', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B085K45C3S&Quantity.1=1',
cartUrl: model: 'test:model',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B085K45C3S&Quantity.1=1', series: 'test:series',
model: 'test:model', url: 'https://www.amazon.nl/dp/B085K45C3S',
series: 'test:series', },
url: 'https://www.amazon.nl/dp/B085K45C3S' {
}, brand: 'msi',
{ cartUrl:
brand: 'msi', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HM4M621&Quantity.1=1',
cartUrl: model: 'ventus 3x oc',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HM4M621&Quantity.1=1', series: '3080',
model: 'ventus 3x oc', url: 'https://www.amazon.nl/dp/B08HM4M621',
series: '3080', },
url: 'https://www.amazon.nl/dp/B08HM4M621' {
}, brand: 'msi',
{ cartUrl:
brand: 'msi', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HM4V2DH&Quantity.1=1',
cartUrl: model: 'gaming x trio',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HM4V2DH&Quantity.1=1', series: '3080',
model: 'gaming x trio', url: 'https://www.amazon.nl/dp/B08HM4V2DH',
series: '3080', },
url: 'https://www.amazon.nl/dp/B08HM4V2DH' {
}, brand: 'evga',
{ cartUrl:
brand: 'evga', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HJ9XFNM&Quantity.1=1',
cartUrl: model: 'xc3 ultra',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HJ9XFNM&Quantity.1=1', series: '3080',
model: 'xc3 ultra', url: 'https://www.amazon.nl/dp/B08HJ9XFNM',
series: '3080', },
url: 'https://www.amazon.nl/dp/B08HJ9XFNM' {
}, brand: 'evga',
{ cartUrl:
brand: 'evga', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HH1BMQQ&Quantity.1=1',
cartUrl: model: 'xc3 black',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HH1BMQQ&Quantity.1=1', series: '3080',
model: 'xc3 black', url: 'https://www.amazon.nl/dp/B08HH1BMQQ',
series: '3080', },
url: 'https://www.amazon.nl/dp/B08HH1BMQQ' {
}, brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HN7VVLJ&Quantity.1=1',
cartUrl: model: 'strix',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HN7VVLJ&Quantity.1=1', series: '3080',
model: 'strix', url: 'https://www.amazon.nl/dp/B08HN7VVLJ',
series: '3080', },
url: 'https://www.amazon.nl/dp/B08HN7VVLJ' {
}, brand: 'msi',
{ cartUrl:
brand: 'msi', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08P2DQ28S&Quantity.1=1',
cartUrl: model: 'ventus 2x oc',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08P2DQ28S&Quantity.1=1', series: '3060ti',
model: 'ventus 2x oc', url: 'https://www.amazon.nl/dp/B08P2DQ28S',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08P2DQ28S' {
}, brand: 'msi',
{ cartUrl:
brand: 'msi', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08NW2YJB2&Quantity.1=1',
cartUrl: model: 'ventus 2x oc',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08NW2YJB2&Quantity.1=1', series: '3060ti',
model: 'ventus 2x oc', url: 'https://www.amazon.nl/dp/B08NW2YJB2',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08NW2YJB2' {
}, brand: 'zotac',
{ cartUrl:
brand: 'zotac', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08P3XJLJJ&Quantity.1=1',
cartUrl: model: 'twin edge',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08P3XJLJJ&Quantity.1=1', series: '3060ti',
model: 'twin edge', url: 'https://www.amazon.nl/dp/B08P3XJLJJ',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08P3XJLJJ' {
}, brand: 'zotac',
{ cartUrl:
brand: 'zotac', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08P3V572B&Quantity.1=1',
cartUrl: model: 'twin edge oc',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08P3V572B&Quantity.1=1', series: '3060ti',
model: 'twin edge oc', url: 'https://www.amazon.nl/dp/B08P3V572B',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08P3V572B' {
}, brand: 'zotac',
{ cartUrl:
brand: 'zotac', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08P3BJ9Y8&Quantity.1=1',
cartUrl: model: 'twin edge oc',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08P3BJ9Y8&Quantity.1=1', series: '3060ti',
model: 'twin edge oc', url: 'https://www.amazon.nl/dp/B08P3BJ9Y8',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08P3BJ9Y8' {
}, brand: 'gigabyte',
{ cartUrl:
brand: 'gigabyte', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08P3JPX8P&Quantity.1=1',
cartUrl: model: 'eagle',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08P3JPX8P&Quantity.1=1', series: '3060ti',
model: 'eagle', url: 'https://www.amazon.nl/dp/B08P3JPX8P',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08P3JPX8P' {
}, brand: 'gigabyte',
{ cartUrl:
brand: 'gigabyte', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08NW2X37Z&Quantity.1=1',
cartUrl: model: 'gaming oc',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08NW2X37Z&Quantity.1=1', series: '3060ti',
model: 'gaming oc', url: 'https://www.amazon.nl/dp/B08NW2X37Z',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08NW2X37Z' {
}, brand: 'gigabyte',
{ cartUrl:
brand: 'gigabyte', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08NW528S1&Quantity.1=1',
cartUrl: model: 'eagle oc',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08NW528S1&Quantity.1=1', series: '3060ti',
model: 'eagle oc', url: 'https://www.amazon.nl/dp/B08NW528S1',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08NW528S1' {
}, brand: 'pny',
{ cartUrl:
brand: 'pny', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08NW693LG&Quantity.1=1',
cartUrl: model: 'xlr8 revel',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08NW693LG&Quantity.1=1', series: '3060ti',
model: 'xlr8 revel', url: 'https://www.amazon.nl/dp/B08NW693LG',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08NW693LG' {
}, brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B083Z5P6TX&Quantity.1=1',
cartUrl: model: 'tuf oc',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B083Z5P6TX&Quantity.1=1', series: '3060ti',
model: 'tuf oc', url: 'https://www.amazon.nl/dp/B083Z5P6TX',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B083Z5P6TX' {
}, brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08NZ4G4T2&Quantity.1=1',
cartUrl: model: 'tuf oc',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08NZ4G4T2&Quantity.1=1', series: '3060ti',
model: 'tuf oc', url: 'https://www.amazon.nl/dp/B08NZ4G4T2',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08NZ4G4T2' {
}, brand: 'asus',
{ cartUrl:
brand: 'asus', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08P2HBBLX&Quantity.1=1',
cartUrl: model: 'dual oc',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08P2HBBLX&Quantity.1=1', series: '3060ti',
model: 'dual oc', url: 'https://www.amazon.nl/dp/B08P2HBBLX',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08P2HBBLX' {
}, brand: 'evga',
{ cartUrl:
brand: 'evga', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08PDN36R3&Quantity.1=1',
cartUrl: model: 'ftw3',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08PDN36R3&Quantity.1=1', series: '3060ti',
model: 'ftw3', url: 'https://www.amazon.nl/dp/B08PDN36R3',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08PDN36R3' {
}, brand: 'evga',
{ cartUrl:
brand: 'evga', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08PDP837W&Quantity.1=1',
cartUrl: model: 'xc gaming',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08PDP837W&Quantity.1=1', series: '3060ti',
model: 'xc gaming', url: 'https://www.amazon.nl/dp/B08PDP837W',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08PDP837W' {
}, brand: 'evga',
{ cartUrl:
brand: 'evga', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08PDMVPZ4&Quantity.1=1',
cartUrl: model: 'xc3 black',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08PDMVPZ4&Quantity.1=1', series: '3060ti',
model: 'xc3 black', url: 'https://www.amazon.nl/dp/B08PDMVPZ4',
series: '3060ti', },
url: 'https://www.amazon.nl/dp/B08PDMVPZ4' {
}, brand: 'amd',
{ cartUrl:
brand: 'amd', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
cartUrl: model: '5600x',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1', series: 'ryzen5600',
model: '5600x', url: 'https://www.amazon.nl/dp/B08166SLDF',
series: 'ryzen5600', },
url: 'https://www.amazon.nl/dp/B08166SLDF' {
}, brand: 'amd',
{ cartUrl:
brand: 'amd', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
cartUrl: model: '5800x',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1', series: 'ryzen5800',
model: '5800x', url: 'https://www.amazon.nl/dp/B0815XFSGK',
series: 'ryzen5800', },
url: 'https://www.amazon.nl/dp/B0815XFSGK' {
}, brand: 'amd',
{ cartUrl:
brand: 'amd', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
cartUrl: model: '5900x',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1', series: 'ryzen5900',
model: '5900x', url: 'https://www.amazon.nl/dp/B08164VTWH',
series: 'ryzen5900', },
url: 'https://www.amazon.nl/dp/B08164VTWH' {
}, brand: 'amd',
{ cartUrl:
brand: 'amd', 'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
cartUrl: model: '5950x',
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1', series: 'ryzen5950',
model: '5950x', url: 'https://www.amazon.nl/dp/B0815Y8J9N',
series: 'ryzen5950', },
url: 'https://www.amazon.nl/dp/B0815Y8J9N' ],
} name: 'amazon-nl',
],
name: 'amazon-nl'
}; };
File diff suppressed because it is too large Load Diff
+496 -496
View File
@@ -1,500 +1,500 @@
import {Link, Store} from './store'; import {Link, Store} from './store';
export const AmazonUk: Store = { export const AmazonUk: Store = {
backoffStatusCodes: [403, 429, 503], backoffStatusCodes: [403, 429, 503],
currency: '£', currency: '£',
labels: { labels: {
captcha: { captcha: {
container: 'body', container: 'body',
text: ['enter the characters you see below'] text: ['enter the characters you see below'],
}, },
inStock: { inStock: {
container: '#availability', container: '#availability',
text: ['in stock'] text: ['in stock'],
}, },
maxPrice: { maxPrice: {
container: '#priceblock_ourprice' container: '#priceblock_ourprice',
}, },
outOfStock: [ outOfStock: [
{ {
container: '#availability', container: '#availability',
text: ['out of stock', 'unavailable'] text: ['out of stock', 'unavailable'],
}, },
{ {
container: '#backInStock', container: '#backInStock',
text: ['unavailable'] text: ['unavailable'],
} },
] ],
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B0753R2TWC&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B0753R2TWC&Quantity.1=1',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amazon.co.uk/dp/B0753R2TWC/' url: 'https://www.amazon.co.uk/dp/B0753R2TWC/',
}, },
{ {
brand: 'sony', brand: 'sony',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08H95Y452&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08H95Y452&Quantity.1=1',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.amazon.co.uk/dp/B08H95Y452' url: 'https://www.amazon.co.uk/dp/B08H95Y452',
}, },
{ {
brand: 'sony', brand: 'sony',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08H97NYGP&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08H97NYGP&Quantity.1=1',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.amazon.co.uk/dp/B08H97NYGP' url: 'https://www.amazon.co.uk/dp/B08H97NYGP',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08H93GKNJ&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08H93GKNJ&Quantity.1=1',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: 'https://www.amazon.co.uk/dp/B08H93GKNJ' url: 'https://www.amazon.co.uk/dp/B08H93GKNJ',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08GD9MNZB&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08GD9MNZB&Quantity.1=1',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: 'https://www.amazon.co.uk/dp/B08GD9MNZB' url: 'https://www.amazon.co.uk/dp/B08GD9MNZB',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: url:
'https://www.amazon.co.uk/AMD-Ryzen-5600X-Processor-Cache/dp/B08166SLDF' 'https://www.amazon.co.uk/AMD-Ryzen-5600X-Processor-Cache/dp/B08166SLDF',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: url:
'https://www.amazon.co.uk/AMD-Ryzen-5800X-Processor-Cache/dp/B0815XFSGK' 'https://www.amazon.co.uk/AMD-Ryzen-5800X-Processor-Cache/dp/B0815XFSGK',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: url:
'https://www.amazon.co.uk/AMD-Ryzen-5900X-Processor-Cache/dp/B08164VTWH' 'https://www.amazon.co.uk/AMD-Ryzen-5900X-Processor-Cache/dp/B08164VTWH',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: url:
'https://www.amazon.co.uk/AMD-Ryzen-5950X-Processor-Cache/dp/B0815Y8J9N' 'https://www.amazon.co.uk/AMD-Ryzen-5950X-Processor-Cache/dp/B0815Y8J9N',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HN7VVLJ&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HN7VVLJ&Quantity.1=1',
model: 'strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HN7VVLJ' url: 'https://www.amazon.co.uk/dp/B08HN7VVLJ',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HN6KYS3&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HN6KYS3&Quantity.1=1',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HN6KYS3' url: 'https://www.amazon.co.uk/dp/B08HN6KYS3',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HN37VQK&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HN37VQK&Quantity.1=1',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HN37VQK' url: 'https://www.amazon.co.uk/dp/B08HN37VQK',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HN4DSTC&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HN4DSTC&Quantity.1=1',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HN4DSTC' url: 'https://www.amazon.co.uk/dp/B08HN4DSTC',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HGBYWQ6&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HGBYWQ6&Quantity.1=1',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HGBYWQ6' url: 'https://www.amazon.co.uk/dp/B08HGBYWQ6',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HGYXP4C&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HGYXP4C&Quantity.1=1',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HGYXP4C' url: 'https://www.amazon.co.uk/dp/B08HGYXP4C',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HGLN78Q&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HGLN78Q&Quantity.1=1',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HGLN78Q' url: 'https://www.amazon.co.uk/dp/B08HGLN78Q',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HH1BMQQ&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HH1BMQQ&Quantity.1=1',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HH1BMQQ' url: 'https://www.amazon.co.uk/dp/B08HH1BMQQ',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HJ9XFNM&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HJ9XFNM&Quantity.1=1',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HJ9XFNM' url: 'https://www.amazon.co.uk/dp/B08HJ9XFNM',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KHLDS72&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KHLDS72&Quantity.1=1',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08KHLDS72' url: 'https://www.amazon.co.uk/dp/B08KHLDS72',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HHZVZ3N&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HHZVZ3N&Quantity.1=1',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HHZVZ3N' url: 'https://www.amazon.co.uk/dp/B08HHZVZ3N',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HLZXHZY&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HLZXHZY&Quantity.1=1',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HLZXHZY' url: 'https://www.amazon.co.uk/dp/B08HLZXHZY',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KH7RL89&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KH7RL89&Quantity.1=1',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08KH7RL89' url: 'https://www.amazon.co.uk/dp/B08KH7RL89',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08JD6QPXD&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08JD6QPXD&Quantity.1=1',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08JD6QPXD' url: 'https://www.amazon.co.uk/dp/B08JD6QPXD',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HM4V2DH&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HM4V2DH&Quantity.1=1',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HM4V2DH' url: 'https://www.amazon.co.uk/dp/B08HM4V2DH',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HM4M621&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HM4M621&Quantity.1=1',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HM4M621' url: 'https://www.amazon.co.uk/dp/B08HM4M621',
}, },
{ {
brand: 'palit', brand: 'palit',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08JCVWTQY&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08JCVWTQY&Quantity.1=1',
model: 'gaming pro', model: 'gaming pro',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08JCVWTQY' url: 'https://www.amazon.co.uk/dp/B08JCVWTQY',
}, },
{ {
brand: 'palit', brand: 'palit',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08JCKYYL8&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08JCKYYL8&Quantity.1=1',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08JCKYYL8' url: 'https://www.amazon.co.uk/dp/B08JCKYYL8',
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HR1NPPQ&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HR1NPPQ&Quantity.1=1',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.amazon.co.uk/dp/B08HR1NPPQ' url: 'https://www.amazon.co.uk/dp/B08HR1NPPQ',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KHFZN9P&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KHFZN9P&Quantity.1=1',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08KHFZN9P' url: 'https://www.amazon.co.uk/dp/B08KHFZN9P',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08L8HPKR6&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08L8HPKR6&Quantity.1=1',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08L8HPKR6' url: 'https://www.amazon.co.uk/dp/B08L8HPKR6',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08L8JNTXQ&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08L8JNTXQ&Quantity.1=1',
model: 'strix', model: 'strix',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08L8JNTXQ' url: 'https://www.amazon.co.uk/dp/B08L8JNTXQ',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08L8KC1J7&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08L8KC1J7&Quantity.1=1',
model: 'tuf', model: 'tuf',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08L8KC1J7' url: 'https://www.amazon.co.uk/dp/B08L8KC1J7',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1',
model: 'gaming oc', model: 'gaming oc',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08KY266MG' url: 'https://www.amazon.co.uk/dp/B08KY266MG',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KWN2LZG&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KWN2LZG&Quantity.1=1',
model: 'gaming', model: 'gaming',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08KWN2LZG' url: 'https://www.amazon.co.uk/dp/B08KWN2LZG',
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HBJB7YD&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HBJB7YD&Quantity.1=1',
model: 'xlr8 revel', model: 'xlr8 revel',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08HBJB7YD' url: 'https://www.amazon.co.uk/dp/B08HBJB7YD',
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HBF5L3K&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08HBF5L3K&Quantity.1=1',
model: 'xlr8 uprising', model: 'xlr8 uprising',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08HBF5L3K' url: 'https://www.amazon.co.uk/dp/B08HBF5L3K',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KWPDXJZ&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KWPDXJZ&Quantity.1=1',
model: 'ventus 2x oc', model: 'ventus 2x oc',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08KWPDXJZ' url: 'https://www.amazon.co.uk/dp/B08KWPDXJZ',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KWLMZV4&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KWLMZV4&Quantity.1=1',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08KWLMZV4' url: 'https://www.amazon.co.uk/dp/B08KWLMZV4',
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08LF32LJ6&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08LF32LJ6&Quantity.1=1',
model: 'gaming', model: 'gaming',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08LF32LJ6' url: 'https://www.amazon.co.uk/dp/B08LF32LJ6',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08L8L71SM&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08L8L71SM&Quantity.1=1',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08L8L71SM' url: 'https://www.amazon.co.uk/dp/B08L8L71SM',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08L8L9TCZ&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08L8L9TCZ&Quantity.1=1',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08L8L9TCZ' url: 'https://www.amazon.co.uk/dp/B08L8L9TCZ',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1',
model: 'gaming oc', model: 'gaming oc',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08KY266MG' url: 'https://www.amazon.co.uk/dp/B08KY266MG',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08M13DXSZ&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08M13DXSZ&Quantity.1=1',
model: 'vision oc', model: 'vision oc',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08M13DXSZ' url: 'https://www.amazon.co.uk/dp/B08M13DXSZ',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KXZV626&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08KXZV626&Quantity.1=1',
model: 'eagle', model: 'eagle',
series: '3070', series: '3070',
url: 'https://www.amazon.co.uk/dp/B08KXZV626' url: 'https://www.amazon.co.uk/dp/B08KXZV626',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08P2DQ28S&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08P2DQ28S&Quantity.1=1',
model: 'ventus 2x oc', model: 'ventus 2x oc',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08P2DQ28S' url: 'https://www.amazon.co.uk/dp/B08P2DQ28S',
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08NW2YJB2&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08NW2YJB2&Quantity.1=1',
model: 'ventus 2x oc', model: 'ventus 2x oc',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08NW2YJB2' url: 'https://www.amazon.co.uk/dp/B08NW2YJB2',
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08P3XJLJJ&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08P3XJLJJ&Quantity.1=1',
model: 'twin edge', model: 'twin edge',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08P3XJLJJ' url: 'https://www.amazon.co.uk/dp/B08P3XJLJJ',
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08P3V572B&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08P3V572B&Quantity.1=1',
model: 'twin edge oc', model: 'twin edge oc',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08P3V572B' url: 'https://www.amazon.co.uk/dp/B08P3V572B',
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08P3BJ9Y8&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08P3BJ9Y8&Quantity.1=1',
model: 'twin edge oc', model: 'twin edge oc',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08P3BJ9Y8' url: 'https://www.amazon.co.uk/dp/B08P3BJ9Y8',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08P3JPX8P&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08P3JPX8P&Quantity.1=1',
model: 'eagle', model: 'eagle',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08P3JPX8P' url: 'https://www.amazon.co.uk/dp/B08P3JPX8P',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08NW2X37Z&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08NW2X37Z&Quantity.1=1',
model: 'gaming oc', model: 'gaming oc',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08NW2X37Z' url: 'https://www.amazon.co.uk/dp/B08NW2X37Z',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08NW528S1&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08NW528S1&Quantity.1=1',
model: 'eagle oc', model: 'eagle oc',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08NW528S1' url: 'https://www.amazon.co.uk/dp/B08NW528S1',
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08NW693LG&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08NW693LG&Quantity.1=1',
model: 'xlr8 revel', model: 'xlr8 revel',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08NW693LG' url: 'https://www.amazon.co.uk/dp/B08NW693LG',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B083Z5P6TX&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B083Z5P6TX&Quantity.1=1',
model: 'tuf oc', model: 'tuf oc',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B083Z5P6TX' url: 'https://www.amazon.co.uk/dp/B083Z5P6TX',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08NZ4G4T2&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08NZ4G4T2&Quantity.1=1',
model: 'tuf oc', model: 'tuf oc',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08NZ4G4T2' url: 'https://www.amazon.co.uk/dp/B08NZ4G4T2',
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08P2HBBLX&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08P2HBBLX&Quantity.1=1',
model: 'dual oc', model: 'dual oc',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08P2HBBLX' url: 'https://www.amazon.co.uk/dp/B08P2HBBLX',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08PDN36R3&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08PDN36R3&Quantity.1=1',
model: 'ftw3', model: 'ftw3',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08PDN36R3' url: 'https://www.amazon.co.uk/dp/B08PDN36R3',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08PDP837W&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08PDP837W&Quantity.1=1',
model: 'xc gaming', model: 'xc gaming',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08PDP837W' url: 'https://www.amazon.co.uk/dp/B08PDP837W',
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08PDMVPZ4&Quantity.1=1', 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08PDMVPZ4&Quantity.1=1',
model: 'xc3 black', model: 'xc3 black',
series: '3060ti', series: '3060ti',
url: 'https://www.amazon.co.uk/dp/B08PDMVPZ4' url: 'https://www.amazon.co.uk/dp/B08PDMVPZ4',
} },
], ],
name: 'amazon-uk' name: 'amazon-uk',
}; };
+749 -750
View File
File diff suppressed because it is too large Load Diff
+44 -44
View File
@@ -1,48 +1,48 @@
import {Store} from './store'; import {Store} from './store';
export const AmdCa: Store = { export const AmdCa: Store = {
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: '.btn-shopping-cart', container: '.btn-shopping-cart',
text: ['add to cart'] text: ['add to cart'],
}, },
maxPrice: { maxPrice: {
container: '.product-page-description h4', container: '.product-page-description h4',
euroFormat: false euroFormat: false,
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amd.com/en/direct-buy/5458373400/ca' url: 'https://www.amd.com/en/direct-buy/5458373400/ca',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5458373400/ca?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5458373400/ca?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6800', series: 'rx6800',
url: 'https://www.amd.com/en/direct-buy/5458373400/ca' url: 'https://www.amd.com/en/direct-buy/5458373400/ca',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5458372800/ca?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5458372800/ca?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://www.amd.com/en/direct-buy/5458372800/ca' url: 'https://www.amd.com/en/direct-buy/5458372800/ca',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5458372200/ca?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5458372200/ca?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6900xt', series: 'rx6900xt',
url: 'https://www.amd.com/en/direct-buy/5458372200/ca' url: 'https://www.amd.com/en/direct-buy/5458372200/ca',
} },
], ],
name: 'amd-ca' name: 'amd-ca',
}; };
+80 -80
View File
@@ -1,84 +1,84 @@
import {Store} from './store'; import {Store} from './store';
export const AmdDe: Store = { export const AmdDe: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.btn-shopping-cart', container: '.btn-shopping-cart',
text: ['add to cart'] text: ['add to cart'],
}, },
maxPrice: { maxPrice: {
container: '.product-page-description h4', container: '.product-page-description h4',
euroFormat: true euroFormat: true,
}, },
outOfStock: { outOfStock: {
container: '.btn-radeon', container: '.btn-radeon',
text: ['ausverkauft'] text: ['ausverkauft'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amd.com/de/direct-buy/5450881400/de' url: 'https://www.amd.com/de/direct-buy/5450881400/de',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/de/direct-buy/5450881400/de?add-to-cart=true', 'https://www.amd.com/de/direct-buy/5450881400/de?add-to-cart=true',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.amd.com/de/direct-buy/5450881400/de' url: 'https://www.amd.com/de/direct-buy/5450881400/de',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/de/direct-buy/5450881500/de?add-to-cart=true', 'https://www.amd.com/de/direct-buy/5450881500/de?add-to-cart=true',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.amd.com/de/direct-buy/5450881500/de' url: 'https://www.amd.com/de/direct-buy/5450881500/de',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/de/direct-buy/5450881600/de?add-to-cart=true', 'https://www.amd.com/de/direct-buy/5450881600/de?add-to-cart=true',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://www.amd.com/de/direct-buy/5450881600/de' url: 'https://www.amd.com/de/direct-buy/5450881600/de',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/de/direct-buy/5450881700/de?add-to-cart=true', 'https://www.amd.com/de/direct-buy/5450881700/de?add-to-cart=true',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://www.amd.com/de/direct-buy/5450881700/de' url: 'https://www.amd.com/de/direct-buy/5450881700/de',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/de/direct-buy/5458374000/de?add-to-cart=true', 'https://www.amd.com/de/direct-buy/5458374000/de?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6800', series: 'rx6800',
url: 'https://www.amd.com/de/direct-buy/5458374000/de' url: 'https://www.amd.com/de/direct-buy/5458374000/de',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/de/direct-buy/5458374100/de?add-to-cart=true', 'https://www.amd.com/de/direct-buy/5458374100/de?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://www.amd.com/de/direct-buy/5458374100/de' url: 'https://www.amd.com/de/direct-buy/5458374100/de',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/de/direct-buy/5458374200/de?add-to-cart=true', 'https://www.amd.com/de/direct-buy/5458374200/de?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6900xt', series: 'rx6900xt',
url: 'https://www.amd.com/de/direct-buy/5458374200/de' url: 'https://www.amd.com/de/direct-buy/5458374200/de',
} },
], ],
name: 'amd-de' name: 'amd-de',
}; };
+60 -60
View File
@@ -1,64 +1,64 @@
import {Store} from './store'; import {Store} from './store';
export const AmdIt: Store = { export const AmdIt: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.btn-shopping-cart', container: '.btn-shopping-cart',
text: ['add to cart'] text: ['add to cart'],
}, },
maxPrice: { maxPrice: {
container: '.product-page-description h4', container: '.product-page-description h4',
euroFormat: true euroFormat: true,
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amd.com/en/direct-buy/5450881400/it' url: 'https://www.amd.com/en/direct-buy/5450881400/it',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5450881400/it?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5450881400/it?add-to-cart=true',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.amd.com/en/direct-buy/5450881400/it' url: 'https://www.amd.com/en/direct-buy/5450881400/it',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5450881500/it?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5450881500/it?add-to-cart=true',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.amd.com/en/direct-buy/5450881500/it' url: 'https://www.amd.com/en/direct-buy/5450881500/it',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5450881600/it?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5450881600/it?add-to-cart=true',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://www.amd.com/en/direct-buy/5450881600/it' url: 'https://www.amd.com/en/direct-buy/5450881600/it',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5450881700/it?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5450881700/it?add-to-cart=true',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://www.amd.com/en/direct-buy/5450881700/it' url: 'https://www.amd.com/en/direct-buy/5450881700/it',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5458374100/it?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5458374100/it?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://www.amd.com/en/direct-buy/5458374100/it' url: 'https://www.amd.com/en/direct-buy/5458374100/it',
} },
], ],
name: 'amd-it' name: 'amd-it',
}; };
+92 -92
View File
@@ -1,96 +1,96 @@
import {Store} from './store'; import {Store} from './store';
export const AmdUk: Store = { export const AmdUk: Store = {
currency: '£', currency: '£',
labels: { labels: {
inStock: [ inStock: [
{ {
container: '.btn-shopping-cart', container: '.btn-shopping-cart',
text: ['add to cart'] text: ['add to cart'],
}, },
{ {
container: '.btn-radeon', container: '.btn-radeon',
text: ['add to cart'] text: ['add to cart'],
} },
], ],
maxPrice: { maxPrice: {
container: '.product-page-description h4', container: '.product-page-description h4',
euroFormat: false euroFormat: false,
}, },
outOfStock: [ outOfStock: [
{ {
container: '.product-out-of-stock', container: '.product-out-of-stock',
text: ['out of stock'] text: ['out of stock'],
}, },
{ {
container: '.btn-radeon', container: '.btn-radeon',
text: ['sold out'] text: ['sold out'],
} },
] ],
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amd.com/en/direct-buy/5450881400/gb' url: 'https://www.amd.com/en/direct-buy/5450881400/gb',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5450881400/gb?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5450881400/gb?add-to-cart=true',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.amd.com/en/direct-buy/5450881400/gb' url: 'https://www.amd.com/en/direct-buy/5450881400/gb',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5450881500/gb?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5450881500/gb?add-to-cart=true',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.amd.com/en/direct-buy/5450881500/gb' url: 'https://www.amd.com/en/direct-buy/5450881500/gb',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5450881600/gb?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5450881600/gb?add-to-cart=true',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://www.amd.com/en/direct-buy/5450881600/gb' url: 'https://www.amd.com/en/direct-buy/5450881600/gb',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5450881700/gb?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5450881700/gb?add-to-cart=true',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://www.amd.com/en/direct-buy/5450881700/gb' url: 'https://www.amd.com/en/direct-buy/5450881700/gb',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5458374000/gb?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5458374000/gb?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6800', series: 'rx6800',
url: 'https://www.amd.com/en/direct-buy/5458374000/gb' url: 'https://www.amd.com/en/direct-buy/5458374000/gb',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5458374100/gb?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5458374100/gb?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://www.amd.com/en/direct-buy/5458374100/gb' url: 'https://www.amd.com/en/direct-buy/5458374100/gb',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5458374200/gb?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5458374200/gb?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6900xt', series: 'rx6900xt',
url: 'https://www.amd.com/en/direct-buy/5458374200/gb' url: 'https://www.amd.com/en/direct-buy/5458374200/gb',
} },
], ],
name: 'amd-uk' name: 'amd-uk',
}; };
+76 -76
View File
@@ -1,80 +1,80 @@
import {Store} from './store'; import {Store} from './store';
export const Amd: Store = { export const Amd: Store = {
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: '.btn-shopping-cart', container: '.btn-shopping-cart',
text: ['add to cart'] text: ['add to cart'],
}, },
maxPrice: { maxPrice: {
container: '.product-page-description h4', container: '.product-page-description h4',
euroFormat: false euroFormat: false,
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amd.com/en/direct-buy/5450881400/us' url: 'https://www.amd.com/en/direct-buy/5450881400/us',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5450881400/us?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5450881400/us?add-to-cart=true',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.amd.com/en/direct-buy/5450881400/us' url: 'https://www.amd.com/en/direct-buy/5450881400/us',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5450881500/us?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5450881500/us?add-to-cart=true',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.amd.com/en/direct-buy/5450881500/us' url: 'https://www.amd.com/en/direct-buy/5450881500/us',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5450881600/us?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5450881600/us?add-to-cart=true',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://www.amd.com/en/direct-buy/5450881600/us' url: 'https://www.amd.com/en/direct-buy/5450881600/us',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5450881700/us?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5450881700/us?add-to-cart=true',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://www.amd.com/en/direct-buy/5450881700/us' url: 'https://www.amd.com/en/direct-buy/5450881700/us',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5458372200/us?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5458372200/us?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6900xt', series: 'rx6900xt',
url: 'https://www.amd.com/en/direct-buy/5458372200/us' url: 'https://www.amd.com/en/direct-buy/5458372200/us',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5458372800/us?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5458372800/us?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://www.amd.com/en/direct-buy/5458372800/us' url: 'https://www.amd.com/en/direct-buy/5458372800/us',
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: cartUrl:
'https://www.amd.com/en/direct-buy/5458373400/us?add-to-cart=true', 'https://www.amd.com/en/direct-buy/5458373400/us?add-to-cart=true',
model: 'amd reference', model: 'amd reference',
series: 'rx6800', series: 'rx6800',
url: 'https://www.amd.com/en/direct-buy/5458373400/us' url: 'https://www.amd.com/en/direct-buy/5458373400/us',
} },
], ],
name: 'amd' name: 'amd',
}; };
+39 -39
View File
@@ -1,43 +1,43 @@
import {Store} from './store'; import {Store} from './store';
export const AntOnline: Store = { export const AntOnline: Store = {
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: '.uk-button', container: '.uk-button',
text: ['Add to Cart'] text: ['Add to Cart'],
}, },
maxPrice: { maxPrice: {
container: '.cPrice', container: '.cPrice',
euroFormat: false euroFormat: false,
}, },
outOfStock: { outOfStock: {
container: '.priceView-price .priceView-hero-price span', container: '.priceView-price .priceView-hero-price span',
text: ['Sold Out'] text: ['Sold Out'],
} },
}, },
links: [ links: [
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: url:
'https://www.antonline.com/Sony/Electronics/Gaming_Devices/Gaming_Consoles/1409507' 'https://www.antonline.com/Sony/Electronics/Gaming_Devices/Gaming_Consoles/1409507',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: url:
'https://www.antonline.com/Microsoft/Electronics/Gaming_Devices/Gaming_Consoles/1414487' 'https://www.antonline.com/Microsoft/Electronics/Gaming_Devices/Gaming_Consoles/1414487',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: url:
'https://www.antonline.com/Microsoft/Electronics/Gaming_Devices/Gaming_Consoles/1409527' 'https://www.antonline.com/Microsoft/Electronics/Gaming_Devices/Gaming_Consoles/1409527',
} },
], ],
name: 'antonline' name: 'antonline',
}; };
+31 -31
View File
@@ -1,35 +1,35 @@
import {Store} from './store'; import {Store} from './store';
export const ArgosIE: Store = { export const ArgosIE: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.btnbuyreserve', container: '.btnbuyreserve',
text: ['buy or reserve'] text: ['buy or reserve'],
}, },
maxPrice: { maxPrice: {
container: '.price' container: '.price',
}, },
outOfStock: { outOfStock: {
container: '#subCopy', container: '#subCopy',
text: ["We're working hard to get more stock."] text: ["We're working hard to get more stock."],
} },
}, },
links: [ links: [
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: url:
'http://www.argos.ie/static/Product/partNumber/8448262/Trail/searchtext%3EXBOX+SERIES+X.htm' 'http://www.argos.ie/static/Product/partNumber/8448262/Trail/searchtext%3EXBOX+SERIES+X.htm',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: url:
'http://www.argos.ie/static/Product/partNumber/8349000/Trail/searchtext%3EPS5+CONSOLE.htm' 'http://www.argos.ie/static/Product/partNumber/8349000/Trail/searchtext%3EPS5+CONSOLE.htm',
} },
], ],
name: 'argos-ie' name: 'argos-ie',
}; };
+43 -43
View File
@@ -1,47 +1,47 @@
import {Store} from './store'; import {Store} from './store';
export const Argos: Store = { export const Argos: Store = {
currency: '£', currency: '£',
labels: { labels: {
inStock: { inStock: {
container: 'button[data-test="add-to-trolley-button-button"', container: 'button[data-test="add-to-trolley-button-button"',
text: ['to trolley'] text: ['to trolley'],
}, },
maxPrice: { maxPrice: {
container: 'li[itemprop="price"]' container: 'li[itemprop="price"]',
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.argos.co.uk/product/5718469' url: 'https://www.argos.co.uk/product/5718469',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.argos.co.uk/product/8349000' url: 'https://www.argos.co.uk/product/8349000',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.argos.co.uk/product/8349024' url: 'https://www.argos.co.uk/product/8349024',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: 'https://www.argos.co.uk/product/8448262' url: 'https://www.argos.co.uk/product/8448262',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: 'https://www.argos.co.uk/product/8448248' url: 'https://www.argos.co.uk/product/8448248',
} },
], ],
name: 'argos' name: 'argos',
}; };
+62 -62
View File
@@ -2,66 +2,66 @@ import {Store} from './store';
import {getProductLinksBuilder} from './helpers/card'; import {getProductLinksBuilder} from './helpers/card';
export const Aria: Store = { export const Aria: Store = {
currency: '£', currency: '£',
labels: { labels: {
inStock: { inStock: {
container: '#addQuantity', container: '#addQuantity',
text: ['add to shopping basket'] text: ['add to shopping basket'],
}, },
maxPrice: { maxPrice: {
container: '.priceBig', container: '.priceBig',
euroFormat: false // Note: Aria uses non-euroFromat as price seperator euroFormat: false, // Note: Aria uses non-euroFromat as price seperator
}, },
outOfStock: { outOfStock: {
container: '.fBox', container: '.fBox',
text: ['out of stock', 'there is currently no stock of this item'] text: ['out of stock', 'there is currently no stock of this item'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 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' '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', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 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' '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: { linksBuilder: {
builder: getProductLinksBuilder({ builder: getProductLinksBuilder({
productsSelector: '#productListingInner .listTable .listTableTr', productsSelector: '#productListingInner .listTable .listTableTr',
sitePrefix: 'https://www.aria.co.uk', sitePrefix: 'https://www.aria.co.uk',
titleSelector: 'strong > a[href]' titleSelector: 'strong > a[href]',
}), }),
urls: [ urls: [
{ {
series: '3060ti', series: '3060ti',
url: url:
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3060+Ti' 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3060+Ti',
}, },
{ {
series: '3070', series: '3070',
url: url:
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3070' 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3070',
}, },
{ {
series: '3080', series: '3080',
url: url:
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3080' 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3080',
}, },
{ {
series: '3090', series: '3090',
url: url:
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3090' 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3090',
} },
] ],
}, },
name: 'aria', name: 'aria',
waitUntil: 'domcontentloaded' waitUntil: 'domcontentloaded',
}; };
+137 -137
View File
@@ -1,141 +1,141 @@
import {Store} from './store'; import {Store} from './store';
export const Arlt: Store = { export const Arlt: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.articleDesc .shippingtext', container: '.articleDesc .shippingtext',
text: ['auf Lager', 'Lieferzeit 2-3 Werktage', 'Ware im Zulauf'] text: ['auf Lager', 'Lieferzeit 2-3 Werktage', 'Ware im Zulauf'],
}, },
maxPrice: { maxPrice: {
container: '.articleprice .price', container: '.articleprice .price',
euroFormat: true euroFormat: true,
}, },
outOfStock: { outOfStock: {
container: '.articleDesc .shippingtext', container: '.articleDesc .shippingtext',
text: ['Neuer Artikel in Kürze verfügbar', 'Liefertermin unbekannt'] text: ['Neuer Artikel in Kürze verfügbar', 'Liefertermin unbekannt'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://www.arlt.com/ASUS-GeForce-GTX1650-Super-TUF-GTX1650S-O4G-GAMING.html' 'https://www.arlt.com/ASUS-GeForce-GTX1650-Super-TUF-GTX1650S-O4G-GAMING.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: url:
'https://www.arlt.com/Gaming/Gaming-Hardware/Grafikkarten/ASUS-Dual-GeForce-RTX-3070.html' 'https://www.arlt.com/Gaming/Gaming-Hardware/Grafikkarten/ASUS-Dual-GeForce-RTX-3070.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'dual oc', model: 'dual oc',
series: '3070', series: '3070',
url: url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/ASUS-Dual-GeForce-RTX-3070-OC.html' 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/ASUS-Dual-GeForce-RTX-3070-OC.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3070', series: '3070',
url: url:
'https://www.arlt.com/Gaming/Gaming-Hardware/Grafikkarten/ASUS-TUF-Gaming-GeForce-RTX-3070-OC.html' 'https://www.arlt.com/Gaming/Gaming-Hardware/Grafikkarten/ASUS-TUF-Gaming-GeForce-RTX-3070-OC.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3070', series: '3070',
url: url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3070/ASUS-ROG-Strix-GeForce-RTX-3070.html' 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3070/ASUS-ROG-Strix-GeForce-RTX-3070.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 2x oc', model: 'ventus 2x oc',
series: '3070', series: '3070',
url: url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3070/MSI-GeForce-RTX-3070-Ventus-2X-OC.html' 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3070/MSI-GeForce-RTX-3070-Ventus-2X-OC.html',
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix', model: 'phoenix',
series: '3070', series: '3070',
url: url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/Gainward-GeForce-RTX-3070-Phoenix.html' 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/Gainward-GeForce-RTX-3070-Phoenix.html',
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3070', series: '3070',
url: url:
'https://www.arlt.com/Gaming/Gaming-Hardware/Gainward-GeForce-RTX-3070-Phoenix-GS.html' 'https://www.arlt.com/Gaming/Gaming-Hardware/Gainward-GeForce-RTX-3070-Phoenix-GS.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/ASUS-TUF-Gaming-GeForce-RTX-3080-OC.html' 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/ASUS-TUF-Gaming-GeForce-RTX-3080-OC.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3080/MSI-GeForce-RTX-3080-Ventus-3X-OC.html' 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3080/MSI-GeForce-RTX-3080-Ventus-3X-OC.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3090/ASUS-TUF-Gaming-GeForce-RTX-3090-OC.html' 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3090/ASUS-TUF-Gaming-GeForce-RTX-3090-OC.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: url:
'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3090/ASUS-ROG-Strix-GeForce-RTX-3090-OC.html' 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3090/ASUS-ROG-Strix-GeForce-RTX-3090-OC.html',
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3090', series: '3090',
url: url:
'https://www.arlt.com/Gaming/Gaming-Hardware/Gainward-GeForce-RTX-3090-Phoenix-GS.html' 'https://www.arlt.com/Gaming/Gaming-Hardware/Gainward-GeForce-RTX-3090-Phoenix-GS.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: url:
'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-5-5600X-boxed.html' 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-5-5600X-boxed.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: url:
'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-7-5800X-boxed.html' 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-7-5800X-boxed.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: url:
'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5900X-boxed.html' 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5900X-boxed.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: url:
'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5950X-boxed.html' 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5950X-boxed.html',
} },
], ],
name: 'arlt' name: 'arlt',
}; };
+73 -73
View File
@@ -1,77 +1,77 @@
import {Store} from './store'; import {Store} from './store';
export const AsusDe: Store = { export const AsusDe: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.buybox--button', container: '.buybox--button',
text: ['in den warenkorb'] text: ['in den warenkorb'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2766/asus-rog-strix-rtx2060s-o8g-evo-v2-gaming' 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2766/asus-rog-strix-rtx2060s-o8g-evo-v2-gaming',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3080', series: '3080',
url: url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2828/asus-rog-strix-rtx3080-10g-gaming' 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2828/asus-rog-strix-rtx3080-10g-gaming',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2829/asus-rog-strix-rtx3080-o10g-gaming' 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2829/asus-rog-strix-rtx3080-o10g-gaming',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2824/asus-tuf-rtx3080-10g-gaming' 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2824/asus-tuf-rtx3080-10g-gaming',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2825/asus-tuf-rtx3080-o10g-gaming' 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2825/asus-tuf-rtx3080-o10g-gaming',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3090', series: '3090',
url: url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2826/asus-rog-strix-rtx3090-24g-gaming' 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2826/asus-rog-strix-rtx3090-24g-gaming',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2827/asus-rog-strix-rtx3090-o24g-gaming' 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2827/asus-rog-strix-rtx3090-o24g-gaming',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2822/asus-tuf-rtx3090-24g-gaming' 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2822/asus-tuf-rtx3090-24g-gaming',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2823/asus-tuf-rtx3090-o24g-gaming' 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2823/asus-tuf-rtx3090-o24g-gaming',
} },
], ],
name: 'asus-de' name: 'asus-de',
}; };
+183 -185
View File
@@ -2,191 +2,189 @@ import {Store} from './store';
import fetch from 'node-fetch'; import fetch from 'node-fetch';
export const Asus: Store = { export const Asus: Store = {
backoffStatusCodes: [403, 429, 503], backoffStatusCodes: [403, 429, 503],
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: '#item_add_cart', container: '#item_add_cart',
text: ['add to cart'] text: ['add to cart'],
}, },
outOfStock: { outOfStock: {
container: '#off_sale', container: '#off_sale',
text: ['sold out'] text: ['sold out'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
itemNumber: '202006AM260000003', itemNumber: '202006AM260000003',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://store.asus.com/us/item/202006AM260000003' url: 'https://store.asus.com/us/item/202006AM260000003',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202012AM030000004', itemNumber: '202012AM030000004',
model: 'tuf oc', model: 'tuf oc',
series: '3060ti', series: '3060ti',
url: 'https://store.asus.com/us/item/202012AM030000004' url: 'https://store.asus.com/us/item/202012AM030000004',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202012AM030000003', itemNumber: '202012AM030000003',
model: 'dual', model: 'dual',
series: '3060ti', series: '3060ti',
url: 'https://store.asus.com/us/item/202012AM030000003' url: 'https://store.asus.com/us/item/202012AM030000003',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202012AM030000005', itemNumber: '202012AM030000005',
model: 'strix oc', model: 'strix oc',
series: '3060ti', series: '3060ti',
url: 'https://store.asus.com/us/item/202012AM030000005' url: 'https://store.asus.com/us/item/202012AM030000005',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202012AM030000002', itemNumber: '202012AM030000002',
model: 'ko', model: 'ko',
series: '3060ti', series: '3060ti',
url: 'https://store.asus.com/us/item/202012AM030000002' url: 'https://store.asus.com/us/item/202012AM030000002',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202010AM310000002', itemNumber: '202010AM310000002',
model: 'tuf oc', model: 'tuf oc',
series: '3070', series: '3070',
url: 'https://store.asus.com/us/item/202010AM310000002' url: 'https://store.asus.com/us/item/202010AM310000002',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202011AM240000001', itemNumber: '202011AM240000001',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: 'https://store.asus.com/us/item/202011AM240000001' url: 'https://store.asus.com/us/item/202011AM240000001',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202010AM310000001', itemNumber: '202010AM310000001',
model: 'strix', model: 'strix',
series: '3070', series: '3070',
url: 'https://store.asus.com/us/item/202010AM310000001' url: 'https://store.asus.com/us/item/202010AM310000001',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202011AM070000002', itemNumber: '202011AM070000002',
model: 'ko oc', model: 'ko oc',
series: '3070', series: '3070',
url: 'https://store.asus.com/us/item/202011AM070000002' url: 'https://store.asus.com/us/item/202011AM070000002',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202011AM070000003', itemNumber: '202011AM070000003',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: 'https://store.asus.com/us/item/202011AM070000003' url: 'https://store.asus.com/us/item/202011AM070000003',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202101AM070000001', itemNumber: '202101AM070000001',
model: 'strix oc', model: 'strix oc',
series: '3070', series: '3070',
url: 'https://store.asus.com/us/item/202101AM070000001' url: 'https://store.asus.com/us/item/202101AM070000001',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202012AM160000002', itemNumber: '202012AM160000002',
model: 'strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://store.asus.com/us/item/202012AM160000002' url: 'https://store.asus.com/us/item/202012AM160000002',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202011AM190000001', itemNumber: '202011AM190000001',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://store.asus.com/us/item/202011AM190000001' url: 'https://store.asus.com/us/item/202011AM190000001',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202012AM220000002', itemNumber: '202012AM220000002',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://store.asus.com/us/item/202012AM220000002' url: 'https://store.asus.com/us/item/202012AM220000002',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202009AM150000004', itemNumber: '202009AM150000004',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://store.asus.com/us/item/202009AM150000004' url: 'https://store.asus.com/us/item/202009AM150000004',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202101AM070000002', itemNumber: '202101AM070000002',
model: 'ekwb', model: 'ekwb',
series: '3080', series: '3080',
url: 'https://store.asus.com/us/item/202101AM070000002' url: 'https://store.asus.com/us/item/202101AM070000002',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202011AM190000002', itemNumber: '202011AM190000002',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://store.asus.com/us/item/202011AM190000002' url: 'https://store.asus.com/us/item/202011AM190000002',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202009AM150000003', itemNumber: '202009AM150000003',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://store.asus.com/us/item/202009AM150000003' url: 'https://store.asus.com/us/item/202009AM150000003',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202010AM310000004', itemNumber: '202010AM310000004',
model: 'strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://store.asus.com/us/item/202010AM310000004' url: 'https://store.asus.com/us/item/202010AM310000004',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202012AM220000001', itemNumber: '202012AM220000001',
model: 'strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://store.asus.com/us/item/202012AM220000001' url: 'https://store.asus.com/us/item/202012AM220000001',
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '202011AM200000003', itemNumber: '202011AM200000003',
model: 'crosshair viii', model: 'crosshair viii',
series: 'darkhero', series: 'darkhero',
url: 'https://store.asus.com/us/item/202011AM200000003' url: 'https://store.asus.com/us/item/202011AM200000003',
} },
], ],
name: 'asus', name: 'asus',
realTimeInventoryLookup: async (itemNumber: string) => { realTimeInventoryLookup: async (itemNumber: string) => {
const request_url = const request_url = 'https://store.asus.com/us/category/get_real_time_data';
'https://store.asus.com/us/category/get_real_time_data'; const response = await fetch(request_url, {
const response = await fetch(request_url, { body: 'sm_seq_list%5B%5D=' + itemNumber,
body: 'sm_seq_list%5B%5D=' + itemNumber, headers: {
headers: { 'accept-language': 'en-US,en;q=0.9',
'accept-language': 'en-US,en;q=0.9', 'cache-control': 'no-cache',
'cache-control': 'no-cache', 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'content-type': },
'application/x-www-form-urlencoded; charset=UTF-8' method: 'POST',
}, });
method: 'POST' const response_json = await response.json();
});
const response_json = await response.json();
if (response_json.data[itemNumber] !== undefined) { if (response_json.data[itemNumber] !== undefined) {
const item_info = response_json.data[itemNumber].market_info; const item_info = response_json.data[itemNumber].market_info;
if (item_info.buy === true || item_info.quantity > 0) { if (item_info.buy === true || item_info.quantity > 0) {
return true; return true;
} }
} }
return false; return false;
}, },
successStatusCodes: [[0, 399], 404] successStatusCodes: [[0, 399], 404],
}; };
+88 -88
View File
@@ -2,92 +2,92 @@ import {Store} from './store';
import {getProductLinksBuilder} from './helpers/card'; import {getProductLinksBuilder} from './helpers/card';
export const Awd: Store = { export const Awd: Store = {
currency: '£', currency: '£',
labels: { labels: {
inStock: { inStock: {
container: '.vs-stock .ty-qty-in-stock', container: '.vs-stock .ty-qty-in-stock',
text: ['item(s)'] text: ['item(s)'],
}, },
maxPrice: { maxPrice: {
container: '.ty-price', container: '.ty-price',
euroFormat: false // Note: Awd uses non-euroFromat as price seperator euroFormat: false, // Note: Awd uses non-euroFromat as price seperator
}, },
outOfStock: { outOfStock: {
container: '.vs-stock.ty-float-left', container: '.vs-stock.ty-float-left',
text: ['Out-of-stock'] text: ['Out-of-stock'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://www.awd-it.co.uk/asus-nvidia-geforce-gt-710-silent-low-profile-2gb-gddr5-graphics-card-pci-e.html' 'https://www.awd-it.co.uk/asus-nvidia-geforce-gt-710-silent-low-profile-2gb-gddr5-graphics-card-pci-e.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: url:
'https://www.awd-it.co.uk/amd-ryzen-5-5600x-cpu-six-core-3.7ghz-processor-socket-am4-retail.html' 'https://www.awd-it.co.uk/amd-ryzen-5-5600x-cpu-six-core-3.7ghz-processor-socket-am4-retail.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: url:
'https://www.awd-it.co.uk/amd-ryzen-7-5800x-cpu-eight-core-3.8ghz-processor-socket-am4-retail.html' 'https://www.awd-it.co.uk/amd-ryzen-7-5800x-cpu-eight-core-3.8ghz-processor-socket-am4-retail.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: url:
'https://www.awd-it.co.uk/amd-ryzen-9-5900x-cpu-twelve-core-3.7ghz-processor-socket-am4-retail.html' 'https://www.awd-it.co.uk/amd-ryzen-9-5900x-cpu-twelve-core-3.7ghz-processor-socket-am4-retail.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: url:
'https://www.awd-it.co.uk/amd-ryzen-9-5950x-sixteen-core-socket-am4-3.4ghz-processor.html' 'https://www.awd-it.co.uk/amd-ryzen-9-5950x-sixteen-core-socket-am4-3.4ghz-processor.html',
} },
], ],
linksBuilder: { linksBuilder: {
builder: getProductLinksBuilder({ builder: getProductLinksBuilder({
productsSelector: '.grid-list .ty-grid-list__item', productsSelector: '.grid-list .ty-grid-list__item',
sitePrefix: 'https://www.awd-it.co.uk', sitePrefix: 'https://www.awd-it.co.uk',
titleSelector: '.product-title' titleSelector: '.product-title',
}), }),
urls: [ urls: [
{ {
series: 'rx6800', series: 'rx6800',
url: url:
'https://www.awd-it.co.uk/components/graphics-cards/ati/amd-radeon-6800-6800xt.html' 'https://www.awd-it.co.uk/components/graphics-cards/ati/amd-radeon-6800-6800xt.html',
}, },
{ {
series: '3060ti', series: '3060ti',
url: url:
'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3060ti.html' 'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3060ti.html',
}, },
{ {
series: '3070', series: '3070',
url: url:
'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3070.html' 'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3070.html',
}, },
{ {
series: '3080', series: '3080',
url: url:
'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3080.html' 'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3080.html',
}, },
{ {
series: '3090', series: '3090',
url: url:
'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3090.html' 'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3090.html',
} },
] ],
}, },
name: 'awd', name: 'awd',
waitUntil: 'domcontentloaded' waitUntil: 'domcontentloaded',
}; };
+214 -214
View File
@@ -1,218 +1,218 @@
import {Store} from './store'; import {Store} from './store';
export const Azerty: Store = { export const Azerty: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.orderdelay', container: '.orderdelay',
text: ['Volgende werkdag in huis', '1 werkdag', '2-3 werkdagen'] text: ['Volgende werkdag in huis', '1 werkdag', '2-3 werkdagen'],
}, },
maxPrice: { maxPrice: {
container: '.mod_article .price', container: '.mod_article .price',
euroFormat: true euroFormat: true,
}, },
outOfStock: { outOfStock: {
container: '.orderdelay', container: '.orderdelay',
text: ['Onbekend', 'meer dan 10 werkdagen', 'Pre-order'] text: ['Onbekend', 'meer dan 10 werkdagen', 'Pre-order'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://azerty.nl/product/gigabyte/3756757/geforce-rtx-2060-oc-6g-grafische-kaart-geforce-rtx-2060' 'https://azerty.nl/product/gigabyte/3756757/geforce-rtx-2060-oc-6g-grafische-kaart-geforce-rtx-2060',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: url:
'https://azerty.nl/product/gigabyte/4349658/aorus-geforce-rtx-3080-xtreme-10g-grafische-kaart-gf-rtx-3080' 'https://azerty.nl/product/gigabyte/4349658/aorus-geforce-rtx-3080-xtreme-10g-grafische-kaart-gf-rtx-3080',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: url:
'https://azerty.nl/product/msi/4346262/geforce-rtx-3080-ventus-3x-10g-oc-grafische-kaart-rtx-3080' 'https://azerty.nl/product/msi/4346262/geforce-rtx-3080-ventus-3x-10g-oc-grafische-kaart-rtx-3080',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: url:
'https://azerty.nl/product/asus/4346679/tuf-gaming-geforce-rtx-3080-grafische-kaart-gf-rtx-3080' 'https://azerty.nl/product/asus/4346679/tuf-gaming-geforce-rtx-3080-grafische-kaart-gf-rtx-3080',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: url:
'https://azerty.nl/product/msi/4346263/geforce-rtx-3080-gaming-x-trio-10g-grafische-kaart-rtx-3080' 'https://azerty.nl/product/msi/4346263/geforce-rtx-3080-gaming-x-trio-10g-grafische-kaart-rtx-3080',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: url:
'https://azerty.nl/product/asus/4348176/tuf-gaming-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080' 'https://azerty.nl/product/asus/4348176/tuf-gaming-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: url:
'https://azerty.nl/product/asus/4348174/rog-strix-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080' 'https://azerty.nl/product/asus/4348174/rog-strix-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: url:
'https://azerty.nl/product/zotac/4352301/gaming-geforce-rtx-3080-trinity-oc-grafische-kaart-gf-rtx-3080' 'https://azerty.nl/product/zotac/4352301/gaming-geforce-rtx-3080-trinity-oc-grafische-kaart-gf-rtx-3080',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: url:
'https://azerty.nl/product/gigabyte/4349651/aorus-geforce-rtx-3080-master-10g-grafische-kaart-gf-rtx-3080' 'https://azerty.nl/product/gigabyte/4349651/aorus-geforce-rtx-3080-master-10g-grafische-kaart-gf-rtx-3080',
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 revel', model: 'xlr8 revel',
series: '3080', series: '3080',
url: 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' 'https://azerty.nl/product/pny/4342269/geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-triple-fan-gaming-edition-grafische-kaart-gf-rtx-3080',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/asus/4363892/rog-strix-gaming-geforce-rtx-3070-o8g-videokaart-8-gb-gddr6' 'https://azerty.nl/product/asus/4363892/rog-strix-gaming-geforce-rtx-3070-o8g-videokaart-8-gb-gddr6',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/asus/4373096/rog-strix-gaming-geforce-rtx-3070-8g-videokaart-8-gb-gddr6' 'https://azerty.nl/product/asus/4373096/rog-strix-gaming-geforce-rtx-3070-8g-videokaart-8-gb-gddr6',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/asus/4363910/tuf-gaming-geforce-rtx-3070-oc-videokaart-8-gb-gddr6' 'https://azerty.nl/product/asus/4363910/tuf-gaming-geforce-rtx-3070-oc-videokaart-8-gb-gddr6',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/asus/4373099/tuf-gaming-geforce-rtx-3070-videokaart-8-gb-gddr6' 'https://azerty.nl/product/asus/4373099/tuf-gaming-geforce-rtx-3070-videokaart-8-gb-gddr6',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/inno3d/4369725/geforce-rtx-3070-ichill-x4-videokaart-8-gb-ddr6' 'https://azerty.nl/product/inno3d/4369725/geforce-rtx-3070-ichill-x4-videokaart-8-gb-ddr6',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/inno3d/4369726/geforce-rtx-3070-ichill-x3-videokaart-8-gb-ddr6' 'https://azerty.nl/product/inno3d/4369726/geforce-rtx-3070-ichill-x3-videokaart-8-gb-ddr6',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/msi/4374747/geforce-rtx-3070-ventus-3x-oc-videokaart-8-gb-gddr6' 'https://azerty.nl/product/msi/4374747/geforce-rtx-3070-ventus-3x-oc-videokaart-8-gb-gddr6',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/msi/4365398/geforce-rtx-3070-gaming-x-trio-videokaart-8-gb-gddr6' 'https://azerty.nl/product/msi/4365398/geforce-rtx-3070-gaming-x-trio-videokaart-8-gb-gddr6',
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'dual fan', model: 'dual fan',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/pny/4342270/uprising-dual-fan-geforce-rtx-3070' 'https://azerty.nl/product/pny/4342270/uprising-dual-fan-geforce-rtx-3070',
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 revel', model: 'xlr8 revel',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/pny/4342271/epic-x-rgb-geforce-rtx-3070-triple-fan-gaming-edition-xlr8--videokaart-8-gb-gddr6x' 'https://azerty.nl/product/pny/4342271/epic-x-rgb-geforce-rtx-3070-triple-fan-gaming-edition-xlr8--videokaart-8-gb-gddr6x',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/evga/4377247/geforce-rtx-3070-ftw3-videokaart-8-gb-gddr6' 'https://azerty.nl/product/evga/4377247/geforce-rtx-3070-ftw3-videokaart-8-gb-gddr6',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/evga/4377248/xc3-geforce-rtx-3070-xc3-videokaart-8-gb-gddr6' 'https://azerty.nl/product/evga/4377248/xc3-geforce-rtx-3070-xc3-videokaart-8-gb-gddr6',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/evga/4377250/ftw3-ultra-geforce-rtx-3070-videokaart-8-gb-gddr6' 'https://azerty.nl/product/evga/4377250/ftw3-ultra-geforce-rtx-3070-videokaart-8-gb-gddr6',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3070', series: '3070',
url: url:
'https://azerty.nl/product/evga/4377252/xc3-black-geforce-rtx-3070-videokaart-8-gb-gddr6' 'https://azerty.nl/product/evga/4377252/xc3-black-geforce-rtx-3070-videokaart-8-gb-gddr6',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: url:
'https://azerty.nl/product/amd/4368019/ryzen-5-5600x-processor-3-7-ghz-4-6-ghz-' 'https://azerty.nl/product/amd/4368019/ryzen-5-5600x-processor-3-7-ghz-4-6-ghz-',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: url:
'https://azerty.nl/product/amd/4368018/ryzen-7-5800x-processor-3-8-ghz-4-7-ghz-' 'https://azerty.nl/product/amd/4368018/ryzen-7-5800x-processor-3-8-ghz-4-7-ghz-',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: url:
'https://azerty.nl/product/amd/4368017/ryzen-9-5900x-processor-3-7-ghz-4-8-ghz-' 'https://azerty.nl/product/amd/4368017/ryzen-9-5900x-processor-3-7-ghz-4-8-ghz-',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: url:
'https://azerty.nl/product/amd/4368016/ryzen-9-5950x-processor-3-4-ghz-4-9-ghz-' 'https://azerty.nl/product/amd/4368016/ryzen-9-5950x-processor-3-4-ghz-4-9-ghz-',
} },
], ],
name: 'azerty' name: 'azerty',
}; };
+334 -334
View File
@@ -1,339 +1,339 @@
import {Store} from './store'; import {Store} from './store';
export const BAndH: Store = { export const BAndH: Store = {
backoffStatusCodes: [403, 429], backoffStatusCodes: [403, 429],
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: 'div[data-selenium="addToCartSection"]', container: 'div[data-selenium="addToCartSection"]',
text: ['add to cart'] text: ['add to cart'],
}, },
maxPrice: { maxPrice: {
container: 'div[data-selenium="pricingPrice"]', container: 'div[data-selenium="pricingPrice"]',
euroFormat: false euroFormat: false,
}, },
outOfStock: { outOfStock: {
container: 'button[data-selenium="notifyAvailabilityButton"]', container: 'button[data-selenium="notifyAvailabilityButton"]',
text: ['notify when available'] text: ['notify when available'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://www.bhphotovideo.com/c/product/1452927-REG/evga_06g_p4_2063_kr_geforce_rtx_2060_xc.html' 'https://www.bhphotovideo.com/c/product/1452927-REG/evga_06g_p4_2063_kr_geforce_rtx_2060_xc.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: url:
'https://www.bhphotovideo.com/c/product/1602755-REG/asus_dualrtx30708g_geforce_rtx_3070_8g.html' 'https://www.bhphotovideo.com/c/product/1602755-REG/asus_dualrtx30708g_geforce_rtx_3070_8g.html',
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'dual fan', model: 'dual fan',
series: '3070', series: '3070',
url: url:
'https://www.bhphotovideo.com/c/product/1595984-REG/pny_technologies_vcg30708tfxppb_geforce_rtx_3070_epic_x.html' 'https://www.bhphotovideo.com/c/product/1595984-REG/pny_technologies_vcg30708tfxppb_geforce_rtx_3070_epic_x.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3070', series: '3070',
url: url:
'https://www.bhphotovideo.com/c/product/1602756-REG/asus_strixrtx3070o8_rog_strix_geforce_rtx.html' 'https://www.bhphotovideo.com/c/product/1602756-REG/asus_strixrtx3070o8_rog_strix_geforce_rtx.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'dual oc', model: 'dual oc',
series: '3070', series: '3070',
url: url:
'https://www.bhphotovideo.com/c/product/1603974-REG/asus_dualrtx3070o8g_dual_geforce_rtx_3070.html' 'https://www.bhphotovideo.com/c/product/1603974-REG/asus_dualrtx3070o8g_dual_geforce_rtx_3070.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'ko oc', model: 'ko oc',
series: '3070', series: '3070',
url: url:
'https://www.bhphotovideo.com/c/product/1606745-REG/asus_90yv0fq2_m0aa00_ko_nvidia_geforce_rtx.html' 'https://www.bhphotovideo.com/c/product/1606745-REG/asus_90yv0fq2_m0aa00_ko_nvidia_geforce_rtx.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3070', series: '3070',
url: url:
'https://www.bhphotovideo.com/c/product/1606746-REG/asus_tuf_rtx3070_o8g_gaming_tuf_gaming_nvidia_geforce.html' 'https://www.bhphotovideo.com/c/product/1606746-REG/asus_tuf_rtx3070_o8g_gaming_tuf_gaming_nvidia_geforce.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'ekwb', model: 'ekwb',
series: '3070', series: '3070',
url: url:
'https://www.bhphotovideo.com/c/product/1614305-REG/asus_rtx3070_8g_ek_ekwb_geforce_rtx_3070.html' 'https://www.bhphotovideo.com/c/product/1614305-REG/asus_rtx3070_8g_ek_ekwb_geforce_rtx_3070.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix white', model: 'strix white',
series: '3070', series: '3070',
url: url:
'https://www.bhphotovideo.com/c/product/1614300-REG/asus_rog_strix_rtx3070_o8g_white_rog_strix_geforce_rtx.html' 'https://www.bhphotovideo.com/c/product/1614300-REG/asus_rog_strix_rtx3070_o8g_white_rog_strix_geforce_rtx.html',
}, },
// TUF was removed from BH, not sure why so commenting out listing for now // TUF was removed from BH, not sure why so commenting out listing for now
// { // {
// brand: 'asus', // brand: 'asus',
// model: 'tuf', // model: 'tuf',
// series: '3080', // series: '3080',
// url: 'https://www.bhphotovideo.com/c/product/1593649-REG/asus_tuf_rtx3080_10g_gaming_tuf_gaming_geforce_rtx.html' // url: 'https://www.bhphotovideo.com/c/product/1593649-REG/asus_tuf_rtx3080_10g_gaming_tuf_gaming_geforce_rtx.html'
// }, // },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: url:
'https://www.bhphotovideo.com/c/product/1593333-REG/gigabyte_gv_n3080gaming_oc_10gd_geforce_rtx_3080_gaming.html' 'https://www.bhphotovideo.com/c/product/1593333-REG/gigabyte_gv_n3080gaming_oc_10gd_geforce_rtx_3080_gaming.html',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: url:
'https://www.bhphotovideo.com/c/product/1592969-REG/zotac_zt_a30800d_10p_gaming_geforce_rtx_3080.html' 'https://www.bhphotovideo.com/c/product/1592969-REG/zotac_zt_a30800d_10p_gaming_geforce_rtx_3080.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: url:
'https://www.bhphotovideo.com/c/product/1593650-REG/asus_tuf_rtx3080_o10g_gaming_tuf_gaming_geforce_rtx.html' 'https://www.bhphotovideo.com/c/product/1593650-REG/asus_tuf_rtx3080_o10g_gaming_tuf_gaming_geforce_rtx.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: url:
'https://www.bhphotovideo.com/c/product/1603617-REG/asus_rog_strix_rtx3080_o10g_gaming_rog_strix_geforce_rtx.html' 'https://www.bhphotovideo.com/c/product/1603617-REG/asus_rog_strix_rtx3080_o10g_gaming_rog_strix_geforce_rtx.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix white', model: 'strix white',
series: '3080', series: '3080',
url: url:
'https://www.bhphotovideo.com/c/product/1614301-REG/asus_rog_strix_rtx3080_o10g_white_rog_strix_geforce_rtx.html' 'https://www.bhphotovideo.com/c/product/1614301-REG/asus_rog_strix_rtx3080_o10g_white_rog_strix_geforce_rtx.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'ekwb', model: 'ekwb',
series: '3080', series: '3080',
url: url:
'https://www.bhphotovideo.com/c/product/1614303-REG/asus_rtx3080_10g_ek_ekwb_geforce_rtx_3080.html' 'https://www.bhphotovideo.com/c/product/1614303-REG/asus_rtx3080_10g_ek_ekwb_geforce_rtx_3080.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'ko oc', model: 'ko oc',
series: '3060ti', series: '3060ti',
url: url:
'https://www.bhphotovideo.com/c/product/1609756-REG/asus_ko_rtx3060ti_o8g_gaming_ko_geforce_rtx_3060.html' 'https://www.bhphotovideo.com/c/product/1609756-REG/asus_ko_rtx3060ti_o8g_gaming_ko_geforce_rtx_3060.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3060ti', series: '3060ti',
url: url:
'https://www.bhphotovideo.com/c/product/1607025-REG/asus_tuf_rtx3060ti_o8g_gaming_geforce_rtx_3060_ti.html' 'https://www.bhphotovideo.com/c/product/1607025-REG/asus_tuf_rtx3060ti_o8g_gaming_geforce_rtx_3060_ti.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3060ti', series: '3060ti',
url: url:
'https://www.bhphotovideo.com/c/product/1606948-REG/gigabyte_gv_n306teagle_oc_8gd_rtx_3060_ti_eagle.html' 'https://www.bhphotovideo.com/c/product/1606948-REG/gigabyte_gv_n306teagle_oc_8gd_rtx_3060_ti_eagle.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle', model: 'eagle',
series: '3060ti', series: '3060ti',
url: url:
'https://www.bhphotovideo.com/c/product/1606949-REG/gigabyte_gv_n306teagle_8gd_rtx_3060_ti_eagle.html' 'https://www.bhphotovideo.com/c/product/1606949-REG/gigabyte_gv_n306teagle_8gd_rtx_3060_ti_eagle.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus', model: 'aorus',
series: '3060ti', series: '3060ti',
url: url:
'https://www.bhphotovideo.com/c/product/1606945-REG/gigabyte_gv_n306taorus_m_8gd_aorus_rtx_3060_ti.html' 'https://www.bhphotovideo.com/c/product/1606945-REG/gigabyte_gv_n306taorus_m_8gd_aorus_rtx_3060_ti.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3060ti', series: '3060ti',
url: url:
'https://www.bhphotovideo.com/c/product/1606947-REG/gigabyte_gv_n306tgaming_oc_8gd_rtx_3060_ti_gaming.html' 'https://www.bhphotovideo.com/c/product/1606947-REG/gigabyte_gv_n306tgaming_oc_8gd_rtx_3060_ti_gaming.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming pro', model: 'gaming pro',
series: '3060ti', series: '3060ti',
url: url:
'https://www.bhphotovideo.com/c/product/1606946-REG/gigabyte_gv_n306tgamingoc_pro_8gd_rtx_3060_ti_gaming.html' 'https://www.bhphotovideo.com/c/product/1606946-REG/gigabyte_gv_n306tgamingoc_pro_8gd_rtx_3060_ti_gaming.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: url:
'https://www.bhphotovideo.com/c/product/1593996-REG/msi_g3080gxt10_geforce_rtx_3080_gaming.html' 'https://www.bhphotovideo.com/c/product/1593996-REG/msi_g3080gxt10_geforce_rtx_3080_gaming.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: url:
'https://www.bhphotovideo.com/c/product/1593997-REG/msi_g3080v3x10c_geforce_rtx_3080_ventus.html' 'https://www.bhphotovideo.com/c/product/1593997-REG/msi_g3080v3x10c_geforce_rtx_3080_ventus.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: url:
'https://www.bhphotovideo.com/c/product/1593645-REG/msi_geforce_rtx_3080_gaming.html' 'https://www.bhphotovideo.com/c/product/1593645-REG/msi_geforce_rtx_3080_gaming.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: url:
'https://www.bhphotovideo.com/c/product/1593646-REG/msi_geforce_rtx_3080_ventus.html' 'https://www.bhphotovideo.com/c/product/1593646-REG/msi_geforce_rtx_3080_ventus.html',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: url:
'https://www.bhphotovideo.com/c/product/1592970-REG/zotac_zt_a30900d_10p_gaming_geforce_rtx_3090.html' 'https://www.bhphotovideo.com/c/product/1592970-REG/zotac_zt_a30900d_10p_gaming_geforce_rtx_3090.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: url:
'https://www.bhphotovideo.com/c/product/1593647-REG/msi_geforce_rtx_3090_gaming.html' 'https://www.bhphotovideo.com/c/product/1593647-REG/msi_geforce_rtx_3090_gaming.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: url:
'https://www.bhphotovideo.com/c/product/1593994-REG/msi_g3090gxt24_geforce_rtx_3090_gaming.html' 'https://www.bhphotovideo.com/c/product/1593994-REG/msi_g3090gxt24_geforce_rtx_3090_gaming.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: url:
'https://www.bhphotovideo.com/c/product/1593648-REG/msi_geforce_rtx_3090_ventus.html' 'https://www.bhphotovideo.com/c/product/1593648-REG/msi_geforce_rtx_3090_ventus.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: url:
'https://www.bhphotovideo.com/c/product/1593995-REG/msi_g3090v3x24c_geforce_rtx_3090_ventus.html' 'https://www.bhphotovideo.com/c/product/1593995-REG/msi_g3090v3x24c_geforce_rtx_3090_ventus.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: url:
'https://www.bhphotovideo.com/c/product/1593334-REG/gigabyte_gv_n3090eagle_oc_24gd_geforce_rtx_3090_eagle.html' 'https://www.bhphotovideo.com/c/product/1593334-REG/gigabyte_gv_n3090eagle_oc_24gd_geforce_rtx_3090_eagle.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: url:
'https://www.bhphotovideo.com/c/product/1593335-REG/gigabyte_gv_n3090gaming_oc_24gd_geforce_rtx3090_gaming_oc.html' 'https://www.bhphotovideo.com/c/product/1593335-REG/gigabyte_gv_n3090gaming_oc_24gd_geforce_rtx3090_gaming_oc.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: url:
'https://www.bhphotovideo.com/c/product/1594454-REG/asus_90yv0fd0_m0am00_tuf_gaming_geforce_rtx.html' 'https://www.bhphotovideo.com/c/product/1594454-REG/asus_90yv0fd0_m0am00_tuf_gaming_geforce_rtx.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: url:
'https://www.bhphotovideo.com/c/product/1594451-REG/asus_90yv0fd1_m0am00_tuf_gaming_geforce_rtx.html' 'https://www.bhphotovideo.com/c/product/1594451-REG/asus_90yv0fd1_m0am00_tuf_gaming_geforce_rtx.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'ekwb', model: 'ekwb',
series: '3090', series: '3090',
url: url:
'https://www.bhphotovideo.com/c/product/1607043-REG/asus_rtx3090_24g_ek_geforce_rtx_3090_24g.html' 'https://www.bhphotovideo.com/c/product/1607043-REG/asus_rtx3090_24g_ek_geforce_rtx_3090_24g.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3090', series: '3090',
url: url:
'https://www.bhphotovideo.com/c/product/1601764-REG/asus_rog_strix_rtx3090_o24g_gaming_rog_strix_geforce_rtx.html' 'https://www.bhphotovideo.com/c/product/1601764-REG/asus_rog_strix_rtx3090_o24g_gaming_rog_strix_geforce_rtx.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix white', model: 'strix white',
series: '3090', series: '3090',
url: url:
'https://www.bhphotovideo.com/c/product/1614302-REG/asus_rog_strix_rtx3090_o24g_white_rog_strix_geforce_rtx.html' 'https://www.bhphotovideo.com/c/product/1614302-REG/asus_rog_strix_rtx3090_o24g_white_rog_strix_geforce_rtx.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: url:
'https://www.bhphotovideo.com/c/product/1598372-REG/amd_100_100000059wof_ryzen_9_5950x_3_4.html' 'https://www.bhphotovideo.com/c/product/1598372-REG/amd_100_100000059wof_ryzen_9_5950x_3_4.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: url:
'https://www.bhphotovideo.com/c/product/1598373-REG/amd_100_100000061wof_ryzen_9_5900x_3_7.html' 'https://www.bhphotovideo.com/c/product/1598373-REG/amd_100_100000061wof_ryzen_9_5900x_3_7.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: url:
'https://www.bhphotovideo.com/c/product/1598376-REG/amd_100_100000063wof_ryzen_7_5800x_3_8.html' 'https://www.bhphotovideo.com/c/product/1598376-REG/amd_100_100000063wof_ryzen_7_5800x_3_8.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: url:
'https://www.bhphotovideo.com/c/product/1598377-REG/amd_100_100000065box_ryzen_5_5600x_3_7.html' 'https://www.bhphotovideo.com/c/product/1598377-REG/amd_100_100000065box_ryzen_5_5600x_3_7.html',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: url:
'https://www.bhphotovideo.com/c/product/1598377-REG/amd_100_100000065box_ryzen_5_5600x_3_7.html' 'https://www.bhphotovideo.com/c/product/1598377-REG/amd_100_100000065box_ryzen_5_5600x_3_7.html',
}, },
{ {
brand: 'corsair', brand: 'corsair',
model: '750 platinum', model: '750 platinum',
series: 'sf', series: 'sf',
url: url:
'https://www.bhphotovideo.com/c/product/1560680-REG/corsair_cp_9020186_na_corsair_sf750_power_supply.html' 'https://www.bhphotovideo.com/c/product/1560680-REG/corsair_cp_9020186_na_corsair_sf750_power_supply.html',
} },
], ],
name: 'bandh' name: 'bandh',
}; };
+204 -204
View File
@@ -1,208 +1,208 @@
import {Store} from './store'; import {Store} from './store';
export const BestBuyCa: Store = { export const BestBuyCa: Store = {
currency: '$', currency: '$',
labels: { labels: {
maxPrice: { maxPrice: {
container: 'div[class*="pricingContainer"]', container: 'div[class*="pricingContainer"]',
euroFormat: false euroFormat: false,
}, },
outOfStock: { outOfStock: {
container: '.addToCartButton:disabled', container: '.addToCartButton:disabled',
text: ['add to cart'] text: ['add to cart'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://www.bestbuy.ca/en-ca/product/google-nest-hello-wi-fi-video-doorbell-black-white/12222651' 'https://www.bestbuy.ca/en-ca/product/google-nest-hello-wi-fi-video-doorbell-black-white/12222651',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 2x oc', model: 'ventus 2x oc',
series: '3060ti', series: '3060ti',
url: url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3060-ti-ventus-2x-oc-8gb-gddr6-video-card/15178453?intl=nosplash' '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', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3060ti', series: '3060ti',
url: url:
'https://www.bestbuy.ca/en-ca/product/nvidia-geforce-rtx-3060-ti-8gb-gddr6-video-card/15166285?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/nvidia-geforce-rtx-3060-ti-8gb-gddr6-video-card/15166285?intl=nosplash',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge oc', model: 'twin edge oc',
series: '3060ti', series: '3060ti',
url: url:
'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3060-ti-twin-edge-oc-8gb-gddr6-video-card/15178452?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3060-ti-twin-edge-oc-8gb-gddr6-video-card/15178452?intl=nosplash',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3060ti', series: '3060ti',
url: url:
'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3060-ti-ftw3-ultra-8gb-gddr6-video-card/15200164?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3060-ti-ftw3-ultra-8gb-gddr6-video-card/15200164?intl=nosplash',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: url:
'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3080-trinity-10gb-gddr6x-video-card/14953249?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3080-trinity-10gb-gddr6x-video-card/14953249?intl=nosplash',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: url:
'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3080-trinity-oc-10gb-gddr6x-video-card/15000077?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3080-trinity-oc-10gb-gddr6x-video-card/15000077?intl=nosplash',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x', model: 'ventus 3x',
series: '3080', series: '3080',
url: url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3080-ventus-3x-10gb-gddr6x-video-card/14950588?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3080-ventus-3x-10gb-gddr6x-video-card/14950588?intl=nosplash',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: url:
'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-video-card/15084753?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-video-card/15084753?intl=nosplash',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: url:
'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-video-card-english/14961449?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-video-card-english/14961449?intl=nosplash',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: url:
'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3080-10gb-gddr6x-video-card/14953248?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3080-10gb-gddr6x-video-card/14953248?intl=nosplash',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3080', series: '3080',
url: url:
'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-video-card/14954116?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-video-card/14954116?intl=nosplash',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: url:
'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3090-trinity-24gb-gddr6x-video-card/14953250?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3090-trinity-24gb-gddr6x-video-card/14953250?intl=nosplash',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: url:
'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3090-24gb-gddr6x-video-card/14953247?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3090-24gb-gddr6x-video-card/14953247?intl=nosplash',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3090', series: '3090',
url: url:
'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3090-24gb-gddr6x-video-card/14954117?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3090-24gb-gddr6x-video-card/14954117?intl=nosplash',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3090-ventus-3x-oc-24gb-gddr6x-video-card/14966477?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3090-ventus-3x-oc-24gb-gddr6x-video-card/14966477?intl=nosplash',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3090', series: '3090',
url: url:
'https://www.bestbuy.ca/en-ca/product/evga-nvidia-geforce-rtx-3090-xc3-ultra-gaming-24gb-gddr6x-video-card/14967857?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/evga-nvidia-geforce-rtx-3090-xc3-ultra-gaming-24gb-gddr6x-video-card/14967857?intl=nosplash',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3070-ventus-3x-oc-8gb-gddr6x-video-card/15038016?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3070-ventus-3x-oc-8gb-gddr6x-video-card/15038016?intl=nosplash',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: url:
'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-oc-8gb-gddr6x-video-card/15000078?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-oc-8gb-gddr6x-video-card/15000078?intl=nosplash',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge', model: 'twin edge',
series: '3070', series: '3070',
url: url:
'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-8gb-gddr6x-video-card/15000079?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-8gb-gddr6x-video-card/15000079?intl=nosplash',
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: url:
'https://www.bestbuy.ca/en-ca/product/nvidia-geforce-rtx-3070-8gb-gddr6-video-card-only-at-best-buy/15078017?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/nvidia-geforce-rtx-3070-8gb-gddr6-video-card-only-at-best-buy/15078017?intl=nosplash',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3070', series: '3070',
url: url:
'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3070-xc3-ultra-8gb-gddr6-video-card/15147122?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3070-xc3-ultra-8gb-gddr6-video-card/15147122?intl=nosplash',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3070', series: '3070',
url: url:
'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3070-xc3-black-8gb-gddr6-video-card/15081879?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3070-xc3-black-8gb-gddr6-video-card/15081879?intl=nosplash',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: url:
'https://www.bestbuy.ca/en-ca/product/playstation-5-console-online-only/14962185?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/playstation-5-console-online-only/14962185?intl=nosplash',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5de', series: 'sonyps5de',
url: url:
'https://www.bestbuy.ca/en-ca/product/playstation-5-digital-edition-console-online-only/14962184?intl=nosplash' 'https://www.bestbuy.ca/en-ca/product/playstation-5-digital-edition-console-online-only/14962184?intl=nosplash',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: url:
'https://www.bestbuy.ca/en-ca/product/xbox-series-x-1tb-console-new-model-online-only/14964951' 'https://www.bestbuy.ca/en-ca/product/xbox-series-x-1tb-console-new-model-online-only/14964951',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: url:
'https://www.bestbuy.ca/en-ca/product/xbox-series-s-512gb-console-new-model-online-only/14964950' 'https://www.bestbuy.ca/en-ca/product/xbox-series-s-512gb-console-new-model-online-only/14964950',
} },
], ],
name: 'bestbuy-ca', name: 'bestbuy-ca',
waitUntil: 'domcontentloaded' waitUntil: 'domcontentloaded',
}; };
+461 -462
View File
@@ -1,466 +1,465 @@
import {Store} from './store'; import {Store} from './store';
export const BestBuy: Store = { export const BestBuy: Store = {
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: container: '[data-sticky-media-gallery] .fulfillment-add-to-cart-button',
'[data-sticky-media-gallery] .fulfillment-add-to-cart-button', text: ['add to cart'],
text: ['add to cart'] },
}, maxPrice: {
maxPrice: { container:
container: '[data-sticky-media-gallery] .priceView-price .priceView-hero-price span',
'[data-sticky-media-gallery] .priceView-price .priceView-hero-price span' },
} },
}, links: [
links: [ {
{ brand: 'test:brand',
brand: 'test:brand', model: 'test:model',
model: 'test:model', series: 'test:series',
series: 'test:series', url: 'https://api.bestbuy.com/click/-/6258941/pdp',
url: 'https://api.bestbuy.com/click/-/6258941/pdp' },
}, {
{ brand: 'nvidia',
brand: 'nvidia', cartUrl: 'https://api.bestbuy.com/click/-/6429442/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6429442/cart', model: 'founders edition',
model: 'founders edition', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6429442/pdp',
url: 'https://api.bestbuy.com/click/-/6429442/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6439300/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6439300/cart', model: 'xc3 black',
model: 'xc3 black', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6439300/pdp',
url: 'https://api.bestbuy.com/click/-/6439300/pdp' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6437912/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6437912/cart', model: 'eagle',
model: 'eagle', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6437912/pdp',
url: 'https://api.bestbuy.com/click/-/6437912/pdp' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6437909/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6437909/cart', model: 'gaming oc',
model: 'gaming oc', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6437909/pdp',
url: 'https://api.bestbuy.com/click/-/6437909/pdp' },
}, {
{ brand: 'pny',
brand: 'pny', cartUrl: 'https://api.bestbuy.com/click/-/6432654/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6432654/cart', model: 'dual fan',
model: 'dual fan', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6432654/pdp',
url: 'https://api.bestbuy.com/click/-/6432654/pdp' },
}, {
{ brand: 'pny',
brand: 'pny', cartUrl: 'https://api.bestbuy.com/click/-/6432653/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6432653/cart', model: 'xlr8 revel',
model: 'xlr8 revel', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6432653/pdp',
url: 'https://api.bestbuy.com/click/-/6432653/pdp' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6439384/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6439384/cart', model: 'aorus',
model: 'aorus', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6439384/pdp',
url: 'https://api.bestbuy.com/click/-/6439384/pdp' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6439385/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6439385/cart', model: 'vision',
model: 'vision', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6439385/pdp',
url: 'https://api.bestbuy.com/click/-/6439385/pdp' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl: 'https://api.bestbuy.com/click/-/6439128/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6439128/cart', model: 'tuf',
model: 'tuf', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6439128/pdp',
url: 'https://api.bestbuy.com/click/-/6439128/pdp' },
}, {
{ brand: 'msi',
brand: 'msi', cartUrl: 'https://api.bestbuy.com/click/-/6438278/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6438278/cart', model: 'ventus 3x oc',
model: 'ventus 3x oc', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6438278/pdp',
url: 'https://api.bestbuy.com/click/-/6438278/pdp' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl: 'https://api.bestbuy.com/click/-/6439127/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6439127/cart', model: 'strix',
model: 'strix', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6439127/pdp',
url: 'https://api.bestbuy.com/click/-/6439127/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6439301/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6439301/cart', model: 'ftw3 ultra',
model: 'ftw3 ultra', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6439301/pdp',
url: 'https://api.bestbuy.com/click/-/6439301/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6439299/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6439299/cart', model: 'xc3 ultra',
model: 'xc3 ultra', series: '3070',
series: '3070', url: 'https://api.bestbuy.com/click/-/6439299/pdp',
url: 'https://api.bestbuy.com/click/-/6439299/pdp' },
}, {
{ brand: 'nvidia',
brand: 'nvidia', cartUrl: 'https://api.bestbuy.com/click/-/6429440/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6429440/cart', model: 'founders edition',
model: 'founders edition', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6429440/pdp',
url: 'https://api.bestbuy.com/click/-/6429440/pdp' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl: 'https://api.bestbuy.com/click/-/6432445/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6432445/cart', model: 'strix',
model: 'strix', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6432445/pdp',
url: 'https://api.bestbuy.com/click/-/6432445/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6432399/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6432399/cart', model: 'xc3 black',
model: 'xc3 black', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6432399/pdp',
url: 'https://api.bestbuy.com/click/-/6432399/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6436194/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6436194/cart', model: 'xc3',
model: 'xc3', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6436194/pdp',
url: 'https://api.bestbuy.com/click/-/6436194/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6432400/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6432400/cart', model: 'xc3 ultra',
model: 'xc3 ultra', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6432400/pdp',
url: 'https://api.bestbuy.com/click/-/6432400/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6436196/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6436196/cart', model: 'ftw3 ultra',
model: 'ftw3 ultra', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6436196/pdp',
url: 'https://api.bestbuy.com/click/-/6436196/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6436191/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6436191/cart', model: 'ftw3',
model: 'ftw3', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6436191/pdp',
url: 'https://api.bestbuy.com/click/-/6436191/pdp' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6430620/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6430620/cart', model: 'gaming oc',
model: 'gaming oc', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6430620/pdp',
url: 'https://api.bestbuy.com/click/-/6430620/pdp' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6430621/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6430621/cart', model: 'eagle oc',
model: 'eagle oc', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6430621/pdp',
url: 'https://api.bestbuy.com/click/-/6430621/pdp' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6436219/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6436219/cart', model: 'vision oc',
model: 'vision oc', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6436219/pdp',
url: 'https://api.bestbuy.com/click/-/6436219/pdp' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6436223/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6436223/cart', model: 'aorus master',
model: 'aorus master', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6436223/pdp',
url: 'https://api.bestbuy.com/click/-/6436223/pdp' },
}, {
{ brand: 'msi',
brand: 'msi', cartUrl: 'https://api.bestbuy.com/click/-/6430175/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6430175/cart', model: 'ventus 3x oc',
model: 'ventus 3x oc', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6430175/pdp',
url: 'https://api.bestbuy.com/click/-/6430175/pdp' },
}, {
{ brand: 'pny',
brand: 'pny', cartUrl: 'https://api.bestbuy.com/click/-/6432655/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6432655/cart', model: 'xlr8 revel',
model: 'xlr8 revel', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6432655/pdp',
url: 'https://api.bestbuy.com/click/-/6432655/pdp' },
}, {
{ brand: 'pny',
brand: 'pny', cartUrl: 'https://api.bestbuy.com/click/-/6432658/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6432658/cart', model: 'xlr8 revel',
model: 'xlr8 revel', series: '3080',
series: '3080', url: 'https://api.bestbuy.com/click/-/6432658/pdp',
url: 'https://api.bestbuy.com/click/-/6432658/pdp' },
}, {
{ brand: 'nvidia',
brand: 'nvidia', cartUrl: 'https://api.bestbuy.com/click/-/6429434/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6429434/cart', model: 'founders edition',
model: 'founders edition', series: '3090',
series: '3090', url: 'https://api.bestbuy.com/click/-/6429434/pdp',
url: 'https://api.bestbuy.com/click/-/6429434/pdp' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl: 'https://api.bestbuy.com/click/-/6432447/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6432447/cart', model: 'strix',
model: 'strix', series: '3090',
series: '3090', url: 'https://api.bestbuy.com/click/-/6432447/pdp',
url: 'https://api.bestbuy.com/click/-/6432447/pdp' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl: 'https://api.bestbuy.com/click/-/6432446/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6432446/cart', model: 'tuf',
model: 'tuf', series: '3090',
series: '3090', url: 'https://api.bestbuy.com/click/-/6432446/pdp',
url: 'https://api.bestbuy.com/click/-/6432446/pdp' },
}, {
{ brand: 'msi',
brand: 'msi', cartUrl: 'https://api.bestbuy.com/click/-/6430215/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6430215/cart', model: 'ventus 3x oc',
model: 'ventus 3x oc', series: '3090',
series: '3090', url: 'https://api.bestbuy.com/click/-/6430215/pdp',
url: 'https://api.bestbuy.com/click/-/6430215/pdp' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6430623/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6430623/cart', model: 'gaming',
model: 'gaming', series: '3090',
series: '3090', url: 'https://api.bestbuy.com/click/-/6430623/pdp',
url: 'https://api.bestbuy.com/click/-/6430623/pdp' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6430624/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6430624/cart', model: 'eagle',
model: 'eagle', series: '3090',
series: '3090', url: 'https://api.bestbuy.com/click/-/6430624/pdp',
url: 'https://api.bestbuy.com/click/-/6430624/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6434363/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6434363/cart', model: 'xc3',
model: 'xc3', series: '3090',
series: '3090', url: 'https://api.bestbuy.com/click/-/6434363/pdp',
url: 'https://api.bestbuy.com/click/-/6434363/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6436193/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6436193/cart', model: 'ftw3',
model: 'ftw3', series: '3090',
series: '3090', url: 'https://api.bestbuy.com/click/-/6436193/pdp',
url: 'https://api.bestbuy.com/click/-/6436193/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6436192/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6436192/cart', model: 'ftw3 ultra',
model: 'ftw3 ultra', series: '3090',
series: '3090', url: 'https://api.bestbuy.com/click/-/6436192/pdp',
url: 'https://api.bestbuy.com/click/-/6436192/pdp' },
}, {
{ brand: 'pny',
brand: 'pny', cartUrl: 'https://api.bestbuy.com/click/-/6432657/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6432657/cart', model: 'xlr8 revel',
model: 'xlr8 revel', series: '3090',
series: '3090', url: 'https://api.bestbuy.com/click/-/6432657/pdp',
url: 'https://api.bestbuy.com/click/-/6432657/pdp' },
}, {
{ brand: 'nvidia',
brand: 'nvidia', cartUrl: 'https://api.bestbuy.com/click/-/6439402/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6439402/cart', model: 'founders edition',
model: 'founders edition', series: '3060ti',
series: '3060ti', url: 'https://api.bestbuy.com/click/-/6439402/pdp',
url: 'https://api.bestbuy.com/click/-/6439402/pdp' },
}, {
{ brand: 'msi',
brand: 'msi', cartUrl: 'https://api.bestbuy.com/click/-/6441172/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6441172/cart', model: 'ventus 2x',
model: 'ventus 2x', series: '3060ti',
series: '3060ti', url: 'https://api.bestbuy.com/click/-/6441172/pdp',
url: 'https://api.bestbuy.com/click/-/6441172/pdp' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6442484/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6442484/cart', model: 'gaming oc',
model: 'gaming oc', series: '3060ti',
series: '3060ti', url: 'https://api.bestbuy.com/click/-/6442484/pdp',
url: 'https://api.bestbuy.com/click/-/6442484/pdp' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6442485/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6442485/cart', model: 'eagle',
model: 'eagle', series: '3060ti',
series: '3060ti', url: 'https://api.bestbuy.com/click/-/6442485/pdp',
url: 'https://api.bestbuy.com/click/-/6442485/pdp' },
}, {
{ brand: 'amd',
brand: 'amd', cartUrl: 'https://api.bestbuy.com/click/-/6438942/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6438942/cart', model: '5900x',
model: '5900x', series: 'ryzen5900',
series: 'ryzen5900', url: 'https://api.bestbuy.com/click/-/6438942/pdp',
url: 'https://api.bestbuy.com/click/-/6438942/pdp' },
}, {
{ brand: 'amd',
brand: 'amd', cartUrl: 'https://api.bestbuy.com/click/-/6438941/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6438941/cart', model: '5950x',
model: '5950x', series: 'ryzen5950',
series: 'ryzen5950', url: 'https://api.bestbuy.com/click/-/6438941/pdp',
url: 'https://api.bestbuy.com/click/-/6438941/pdp' },
}, {
{ brand: 'amd',
brand: 'amd', cartUrl: 'https://api.bestbuy.com/click/-/6439000/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6439000/cart', model: '5800x',
model: '5800x', series: 'ryzen5800',
series: 'ryzen5800', url: 'https://api.bestbuy.com/click/-/6439000/pdp',
url: 'https://api.bestbuy.com/click/-/6439000/pdp' },
}, {
{ brand: 'amd',
brand: 'amd', cartUrl: 'https://api.bestbuy.com/click/-/6438943/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6438943/cart', model: '5600x',
model: '5600x', series: 'ryzen5600',
series: 'ryzen5600', url: 'https://api.bestbuy.com/click/-/6438943/pdp',
url: 'https://api.bestbuy.com/click/-/6438943/pdp' },
}, {
{ brand: 'sony',
brand: 'sony', cartUrl: 'https://api.bestbuy.com/click/-/6426149/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6426149/cart', model: 'ps5 console',
model: 'ps5 console', series: 'sonyps5c',
series: 'sonyps5c', url: 'https://api.bestbuy.com/click/-/6426149/pdp',
url: 'https://api.bestbuy.com/click/-/6426149/pdp' },
}, {
{ brand: 'sony',
brand: 'sony', cartUrl: 'https://api.bestbuy.com/click/-/6430161/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6430161/cart', model: 'ps5 digital',
model: 'ps5 digital', series: 'sonyps5de',
series: 'sonyps5de', url: 'https://api.bestbuy.com/click/-/6430161/pdp',
url: 'https://api.bestbuy.com/click/-/6430161/pdp' },
}, {
{ brand: 'microsoft',
brand: 'microsoft', cartUrl: 'https://api.bestbuy.com/click/-/6428324/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6428324/cart', model: 'xbox series x',
model: 'xbox series x', series: 'xboxsx',
series: 'xboxsx', url: 'https://api.bestbuy.com/click/-/6428324/pdp',
url: 'https://api.bestbuy.com/click/-/6428324/pdp' },
}, {
{ brand: 'microsoft',
brand: 'microsoft', cartUrl: 'https://api.bestbuy.com/click/-/6430277/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6430277/cart', model: 'xbox series s',
model: 'xbox series s', series: 'xboxss',
series: 'xboxss', url: 'https://api.bestbuy.com/click/-/6430277/pdp',
url: 'https://api.bestbuy.com/click/-/6430277/pdp' },
}, {
{ brand: 'msi',
brand: 'msi', cartUrl: 'https://api.bestbuy.com/click/-/6440913/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6440913/cart', model: 'amd reference',
model: 'amd reference', series: 'rx6800xt',
series: 'rx6800xt', url: 'https://api.bestbuy.com/click/-/6440913/pdp',
url: 'https://api.bestbuy.com/click/-/6440913/pdp' },
}, {
{ brand: 'msi',
brand: 'msi', cartUrl: 'https://api.bestbuy.com/click/-/6441020/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6441020/cart', model: 'amd reference',
model: 'amd reference', series: 'rx6800',
series: 'rx6800', url: 'https://api.bestbuy.com/click/-/6441020/pdp',
url: 'https://api.bestbuy.com/click/-/6441020/pdp' },
}, {
{ brand: 'xfx',
brand: 'xfx', cartUrl: 'https://api.bestbuy.com/click/-/6442077/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6442077/cart', model: 'amd reference',
model: 'amd reference', series: 'rx6800',
series: 'rx6800', url: 'https://api.bestbuy.com/click/-/6442077/pdp',
url: 'https://api.bestbuy.com/click/-/6442077/pdp' },
}, {
{ brand: 'xfx',
brand: 'xfx', cartUrl: 'https://api.bestbuy.com/click/-/6441226/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6441226/cart', model: 'amd reference',
model: 'amd reference', series: 'rx6800xt',
series: 'rx6800xt', url: 'https://api.bestbuy.com/click/-/6441226/pdp',
url: 'https://api.bestbuy.com/click/-/6441226/pdp' },
}, {
{ brand: 'xfx',
brand: 'xfx', cartUrl: 'https://api.bestbuy.com/click/-/6442585/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6442585/cart', model: 'merc',
model: 'merc', series: 'rx6800xt',
series: 'rx6800xt', url: 'https://api.bestbuy.com/click/-/6442585/pdp',
url: 'https://api.bestbuy.com/click/-/6442585/pdp' },
}, {
{ brand: 'xfx',
brand: 'xfx', cartUrl: 'https://api.bestbuy.com/click/-/6444358/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6444358/cart', model: 'amd reference',
model: 'amd reference', series: 'rx6900xt',
series: 'rx6900xt', url: 'https://api.bestbuy.com/click/-/6444358/pdp',
url: 'https://api.bestbuy.com/click/-/6444358/pdp' },
}, {
{ brand: 'msi',
brand: 'msi', cartUrl: 'https://api.bestbuy.com/click/-/6444716/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6444716/cart', model: 'amd reference',
model: 'amd reference', series: 'rx6900xt',
series: 'rx6900xt', url: 'https://api.bestbuy.com/click/-/6444716/pdp',
url: 'https://api.bestbuy.com/click/-/6444716/pdp' },
}, {
{ brand: 'xfx',
brand: 'xfx', cartUrl: 'https://api.bestbuy.com/click/-/6445157/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6445157/cart', model: 'merc',
model: 'merc', series: 'rx6900xt',
series: 'rx6900xt', url: 'https://api.bestbuy.com/click/-/6445157/pdp',
url: 'https://api.bestbuy.com/click/-/6445157/pdp' },
}, {
{ brand: 'corsair',
brand: 'corsair', cartUrl: 'https://api.bestbuy.com/click/-/6351845/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6351845/cart', model: '750 platinum',
model: '750 platinum', series: 'sf',
series: 'sf', url: 'https://api.bestbuy.com/click/-/6351845/pdp',
url: 'https://api.bestbuy.com/click/-/6351845/pdp' },
}, {
{ brand: 'corsair',
brand: 'corsair', cartUrl: 'https://api.bestbuy.com/click/-/6351844/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6351844/cart', model: '600 platinum',
model: '600 platinum', series: 'sf',
series: 'sf', url: 'https://api.bestbuy.com/click/-/6351844/pdp',
url: 'https://api.bestbuy.com/click/-/6351844/pdp' },
}, {
{ brand: 'pny',
brand: 'pny', cartUrl: 'https://api.bestbuy.com/click/-/6446660/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6446660/cart', model: 'xlr8 uprising',
model: 'xlr8 uprising', series: '3060ti',
series: '3060ti', url: 'https://api.bestbuy.com/click/-/6446660/pdp',
url: 'https://api.bestbuy.com/click/-/6446660/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6444445/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6444445/cart', model: 'xc gaming',
model: 'xc gaming', series: '3060ti',
series: '3060ti', url: 'https://api.bestbuy.com/click/-/6444445/pdp',
url: 'https://api.bestbuy.com/click/-/6444445/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6444444/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6444444/cart', model: 'ftw3',
model: 'ftw3', series: '3060ti',
series: '3060ti', url: 'https://api.bestbuy.com/click/-/6444444/pdp',
url: 'https://api.bestbuy.com/click/-/6444444/pdp' },
}, {
{ brand: 'evga',
brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6444449/cart',
cartUrl: 'https://api.bestbuy.com/click/-/6444449/cart', model: 'ftw3',
model: 'ftw3', series: '3060ti',
series: '3060ti', url: 'https://api.bestbuy.com/click/-/6444449/pdp',
url: 'https://api.bestbuy.com/click/-/6444449/pdp' },
} ],
], name: 'bestbuy',
name: 'bestbuy'
}; };
+85 -87
View File
@@ -2,91 +2,89 @@ import {Store} from './store';
import {getProductLinksBuilder} from './helpers/card'; import {getProductLinksBuilder} from './helpers/card';
export const Box: Store = { export const Box: Store = {
backoffStatusCodes: [403, 429, 503], backoffStatusCodes: [403, 429, 503],
currency: '£', currency: '£',
labels: { labels: {
inStock: { inStock: {
container: '#divBuyButton', container: '#divBuyButton',
text: ['add to basket'] text: ['add to basket'],
}, },
maxPrice: { maxPrice: {
container: '.p-price', container: '.p-price',
euroFormat: false // Note: Box uses non-euroFromat as price seperator euroFormat: false, // Note: Box uses non-euroFromat as price seperator
}, },
outOfStock: { outOfStock: {
container: '#divBuyButton', container: '#divBuyButton',
text: ['request stock alert', 'coming soon'] text: ['request stock alert', 'coming soon'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://www.box.co.uk/Gigabyte-GeForce-RTX-2080-Super-8GB-Wind_2724554.html' 'https://www.box.co.uk/Gigabyte-GeForce-RTX-2080-Super-8GB-Wind_2724554.html',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: url:
'https://www.box.co.uk/CFI-1015A-Sony-Playstation-5-Console_3199689.html' 'https://www.box.co.uk/CFI-1015A-Sony-Playstation-5-Console_3199689.html',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: url:
'https://www.box.co.uk/CFI-1015B-Sony-PlayStation-5-Digital-Edition-Conso_3199692.html' 'https://www.box.co.uk/CFI-1015B-Sony-PlayStation-5-Digital-Edition-Conso_3199692.html',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: url: 'https://www.box.co.uk/RRT-00007-Xbox-Series-X-Console_3201195.html',
'https://www.box.co.uk/RRT-00007-Xbox-Series-X-Console_3201195.html' },
}, {
{ brand: 'microsoft',
brand: 'microsoft', model: 'xbox series s',
model: 'xbox series s', series: 'xboxss',
series: 'xboxss', url: 'https://www.box.co.uk/RRS-00007-Xbox-Series-S-Console_3201197.html',
url: },
'https://www.box.co.uk/RRS-00007-Xbox-Series-S-Console_3201197.html' {
}, brand: 'amd',
{ model: 'tuf oc',
brand: 'amd', series: 'rx6900xt',
model: 'tuf oc', url:
series: 'rx6900xt', 'https://www.box.co.uk/90YV0GE0-M0NM00-ASUS-Radeon-RX-X6900XT-16GB-OC-Gaming-Gr_3561243.html',
url: },
'https://www.box.co.uk/90YV0GE0-M0NM00-ASUS-Radeon-RX-X6900XT-16GB-OC-Gaming-Gr_3561243.html' ],
} linksBuilder: {
], builder: getProductLinksBuilder({
linksBuilder: { productsSelector: '.products-right .p-list',
builder: getProductLinksBuilder({ sitePrefix: 'https://www.box.co.uk',
productsSelector: '.products-right .p-list', titleSelector: '.p-list-section > h3 > a[href]',
sitePrefix: 'https://www.box.co.uk', }),
titleSelector: '.p-list-section > h3 > a[href]' urls: [
}), {
urls: [ series: '3060ti',
{ url: 'https://www.box.co.uk/rtx-3060-ti-graphics-cards',
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',
series: '3070', },
url: 'https://www.box.co.uk/rtx-3070-graphics-cards' {
}, series: '3080',
{ url: 'https://www.box.co.uk/rtx-3080-graphics-cards',
series: '3080', },
url: 'https://www.box.co.uk/rtx-3080-graphics-cards' {
}, series: '3090',
{ url: 'https://www.box.co.uk/rtx-3090-graphics-cards',
series: '3090', },
url: 'https://www.box.co.uk/rtx-3090-graphics-cards' ],
} },
] name: 'box',
}, waitUntil: 'domcontentloaded',
name: 'box',
waitUntil: 'domcontentloaded'
}; };
+167 -167
View File
@@ -1,171 +1,171 @@
import {Store} from './store'; import {Store} from './store';
export const Bpctech: Store = { export const Bpctech: Store = {
backoffStatusCodes: [403, 429], backoffStatusCodes: [403, 429],
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: '.productStockStatus', container: '.productStockStatus',
text: ['in stock'] text: ['in stock'],
}, },
maxPrice: { maxPrice: {
container: 'div.price-box.price-final_price > span > span', container: 'div.price-box.price-final_price > span > span',
euroFormat: false euroFormat: false,
} },
}, },
links: [ links: [
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/tuf-rtx3080-10g-gaming-asus-geforce-rtx-3080-tuf-gaming-10gb-video-card.html' 'https://www.bpctech.com.au/tuf-rtx3080-10g-gaming-asus-geforce-rtx-3080-tuf-gaming-10gb-video-card.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/tuf-rtx3080-o10g-gaming-asus-geforce-rtx-3080-tuf-gaming-oc-10gb-video-card.html' 'https://www.bpctech.com.au/tuf-rtx3080-o10g-gaming-asus-geforce-rtx-3080-tuf-gaming-oc-10gb-video-card.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/rog-strix-rtx3080-o10g-gaming-asus-geforce-rtx-3080-rog-strix-oc-10gb-video-card.html' 'https://www.bpctech.com.au/rog-strix-rtx3080-o10g-gaming-asus-geforce-rtx-3080-rog-strix-oc-10gb-video-card.html',
}, },
// { // {
// brand: 'colorful', // brand: 'colorful',
// model: 'igame advanced oc', // model: 'igame advanced oc',
// series: '3080', // series: '3080',
// url: 'https://www.bpctech.com.au/colorful-advancedoc10g-v-colorful-igame-geforce-rtx-3080-advanced-oc-10g-v-video-card.html' // url: 'https://www.bpctech.com.au/colorful-advancedoc10g-v-colorful-igame-geforce-rtx-3080-advanced-oc-10g-v-video-card.html'
// }, // },
// { // {
// brand: 'colorful', // brand: 'colorful',
// model: 'igame vulcan oc', // model: 'igame vulcan oc',
// series: '3080', // series: '3080',
// url: 'https://www.bpctech.com.au/colorful-vulcanoc10g-v-colorful-igame-geforce-rtx-3080-vulcan-oc-10g-video-card.html' // url: 'https://www.bpctech.com.au/colorful-vulcanoc10g-v-colorful-igame-geforce-rtx-3080-vulcan-oc-10g-video-card.html'
// }, // },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/10g-p5-3897-kr-evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-video-card.html' 'https://www.bpctech.com.au/10g-p5-3897-kr-evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-video-card.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/10g-p5-3881-kr-evga-geforce-rtx-3080-xc3-black-gaming-10gb-video-card.html' 'https://www.bpctech.com.au/10g-p5-3881-kr-evga-geforce-rtx-3080-xc3-black-gaming-10gb-video-card.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/10g-p5-3885-kr-evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-video-card.html' 'https://www.bpctech.com.au/10g-p5-3885-kr-evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-video-card.html',
}, },
{ {
brand: 'galax', brand: 'galax',
model: 'sg oc', model: 'sg oc',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/38nwm3md99nn-galax-geforce-rtx-3080-sg-1-click-oc-10gb-video-card.html' 'https://www.bpctech.com.au/38nwm3md99nn-galax-geforce-rtx-3080-sg-1-click-oc-10gb-video-card.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/gv-n3080vision-oc-10gd-gigabyte-geforce-rtx-3080-vision-oc-10gb-video-card.html' 'https://www.bpctech.com.au/gv-n3080vision-oc-10gd-gigabyte-geforce-rtx-3080-vision-oc-10gb-video-card.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/gv-n3080gaming-oc-10gd-gigabyte-geforce-rtx-3080-gaming-oc-10gb-video-card.html' 'https://www.bpctech.com.au/gv-n3080gaming-oc-10gd-gigabyte-geforce-rtx-3080-gaming-oc-10gb-video-card.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/gv-n3080aorus-m-10gd-gigabyte-geforce-rtx-3080-aorus-master-10g-video-card.html' 'https://www.bpctech.com.au/gv-n3080aorus-m-10gd-gigabyte-geforce-rtx-3080-aorus-master-10g-video-card.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/gv-n3080aorus-x-10gd-gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-video-card.html' 'https://www.bpctech.com.au/gv-n3080aorus-x-10gd-gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-video-card.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme waterforce', model: 'aorus xtreme waterforce',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/gv-n3080aorusx-w-10gd-gigabyte-aorus-geforce-rtx-3080-xtreme-waterforce-10gb-video-card.html' 'https://www.bpctech.com.au/gv-n3080aorusx-w-10gd-gigabyte-aorus-geforce-rtx-3080-xtreme-waterforce-10gb-video-card.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/gv-n3080eagle-oc-10gd-gigabyte-geforce-rtx-3080-eagle-oc-10gb-video-card.html' 'https://www.bpctech.com.au/gv-n3080eagle-oc-10gd-gigabyte-geforce-rtx-3080-eagle-oc-10gb-video-card.html',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/c30804-106xx-1810va36-inno3d-geforce-rtx-3080-ichill-x4-10gb-video-card.html' 'https://www.bpctech.com.au/c30804-106xx-1810va36-inno3d-geforce-rtx-3080-ichill-x4-10gb-video-card.html',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/c30803-106xx-1810va37-inno3d-geforce-rtx-3080-ichill-x3-10gb-video-card.html' 'https://www.bpctech.com.au/c30803-106xx-1810va37-inno3d-geforce-rtx-3080-ichill-x3-10gb-video-card.html',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/n30802-106xx-1810va34-inno3d-geforce-rtx-3080-twin-x2-oc-10gb-video-card.html' 'https://www.bpctech.com.au/n30802-106xx-1810va34-inno3d-geforce-rtx-3080-twin-x2-oc-10gb-video-card.html',
}, },
{ {
brand: 'leadtek', brand: 'leadtek',
model: 'hurricane', model: 'hurricane',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/rtx3080-hurricane-leadtek-geforce-rtx-3080-hurricane-10gb-video-card.html' 'https://www.bpctech.com.au/rtx3080-hurricane-leadtek-geforce-rtx-3080-hurricane-10gb-video-card.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'suprim x', model: 'suprim x',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/rtx3080-suprim-x-10g-msi-geforce-rtx-3080-suprim-x-10gb-video-card.html' 'https://www.bpctech.com.au/rtx3080-suprim-x-10g-msi-geforce-rtx-3080-suprim-x-10gb-video-card.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/rtx3080-ventus-3x-10g-oc-msi-rtx-3080-ventus-3x-10g-oc-video-card.html' 'https://www.bpctech.com.au/rtx3080-ventus-3x-10g-oc-msi-rtx-3080-ventus-3x-10g-oc-video-card.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: url:
'https://www.bpctech.com.au/rtx3080-gaming-x-trio-10g-msi-rtx-3080-gaming-x-trio-10g-video-card.html' 'https://www.bpctech.com.au/rtx3080-gaming-x-trio-10g-msi-rtx-3080-gaming-x-trio-10g-video-card.html',
} },
], ],
name: 'bpctech' name: 'bpctech',
}; };
+39 -39
View File
@@ -1,43 +1,43 @@
import {Store} from './store'; import {Store} from './store';
export const BpmPower: Store = { export const BpmPower: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.dispoSiProd >span', container: '.dispoSiProd >span',
text: ['Disponibile'] text: ['Disponibile'],
}, },
maxPrice: { maxPrice: {
container: 'p.prezzoScheda:nth-child(1)', container: 'p.prezzoScheda:nth-child(1)',
euroFormat: true euroFormat: true,
}, },
outOfStock: { outOfStock: {
container: '.dispoSiProd >span', container: '.dispoSiProd >span',
text: ['Esaurito'] text: ['Esaurito'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://www.bpm-power.com/it/online/audio/auricolari-audio/apple-airpods-2-2019-b1492931' 'https://www.bpm-power.com/it/online/audio/auricolari-audio/apple-airpods-2-2019-b1492931',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: url:
'https://www.bpm-power.com/it/online/componenti-pc/schede-video/nvidia-msi-rtx-3070-b1710142' 'https://www.bpm-power.com/it/online/componenti-pc/schede-video/nvidia-msi-rtx-3070-b1710142',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: url:
'https://www.bpm-power.com/it/online/componenti-pc/processori/cpu-amd-ryzen-7-b1710075' 'https://www.bpm-power.com/it/online/componenti-pc/processori/cpu-amd-ryzen-7-b1710075',
} },
], ],
name: 'bpm-power' name: 'bpm-power',
}; };
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+100 -100
View File
@@ -2,104 +2,104 @@ import {Store} from './store';
import {getProductLinksBuilder} from './helpers/card'; import {getProductLinksBuilder} from './helpers/card';
export const Ccl: Store = { export const Ccl: Store = {
backoffStatusCodes: [403, 429, 503], backoffStatusCodes: [403, 429, 503],
currency: '£', currency: '£',
labels: { labels: {
inStock: { inStock: {
container: '#pnlAddToBasket', container: '#pnlAddToBasket',
text: ['add to basket'] text: ['add to basket'],
}, },
maxPrice: { maxPrice: {
container: '#pnlPriceText > p', container: '#pnlPriceText > p',
euroFormat: false // Note: CCL uses non-euroFromat as price seperator euroFormat: false, // Note: CCL uses non-euroFromat as price seperator
}, },
outOfStock: { outOfStock: {
container: '#pnlSoldOut', container: '#pnlSoldOut',
text: ['sold out', 'coming soon'] text: ['sold out', 'coming soon'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 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/' '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', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 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/' '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', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 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/' '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', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 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/' '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', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 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/' '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: { linksBuilder: {
builder: getProductLinksBuilder({ builder: getProductLinksBuilder({
productsSelector: '.productListingContainerOuter .productList', productsSelector: '.productListingContainerOuter .productList',
sitePrefix: 'https://www.cclonline.com', sitePrefix: 'https://www.cclonline.com',
titleAttribute: 'title', titleAttribute: 'title',
titleSelector: '.productList_Detail a[title]' titleSelector: '.productList_Detail a[title]',
}), }),
urls: [ urls: [
{ {
series: '3060ti', series: '3060ti',
url: url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3060-Ti-Graphics-Cards/' 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3060-Ti-Graphics-Cards/',
}, },
{ {
series: '3070', series: '3070',
url: url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3070-Graphics-Cards/' 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3070-Graphics-Cards/',
}, },
{ {
series: '3080', series: '3080',
url: url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3080-Graphics-Cards/' 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3080-Graphics-Cards/',
}, },
{ {
series: '3090', series: '3090',
url: url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3090-Graphics-Cards/' 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3090-Graphics-Cards/',
}, },
{ {
series: 'rx6800', series: 'rx6800',
url: url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/AMD-Radeon-RX-6800-Graphics-Cards/' 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/AMD-Radeon-RX-6800-Graphics-Cards/',
}, },
{ {
series: 'rx6800xt', series: 'rx6800xt',
url: url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/AMD-Radeon-RX-6800-XT-Graphics-Cards/' 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/AMD-Radeon-RX-6800-XT-Graphics-Cards/',
}, },
{ {
series: 'rx6900xt', series: 'rx6900xt',
url: url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/attributeslist/1268064/' 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/attributeslist/1268064/',
} },
] ],
}, },
name: 'ccl', name: 'ccl',
waitUntil: 'domcontentloaded' waitUntil: 'domcontentloaded',
}; };
+82 -84
View File
@@ -1,88 +1,86 @@
import {Store} from './store'; import {Store} from './store';
export const Centrecom: Store = { export const Centrecom: Store = {
backoffStatusCodes: [403, 429], backoffStatusCodes: [403, 429],
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: container: '.prod_stores_stock > li:nth-child(1) > span:nth-child(2)',
'.prod_stores_stock > li:nth-child(1) > span:nth-child(2)', text: ['In Stock'],
text: ['In Stock'] },
}, maxPrice: {
maxPrice: { container: 'div.prod_price_current.product-price > span',
container: 'div.prod_price_current.product-price > span', euroFormat: false,
euroFormat: false },
}, outOfStock: {
outOfStock: { container: '.prod_stores_stock > li:nth-child(1) > span:nth-child(2)',
container: text: ['Sold Out'],
'.prod_stores_stock > li:nth-child(1) > span:nth-child(2)', },
text: ['Sold Out'] },
} links: [
}, {
links: [ brand: 'asus',
{ model: 'tuf oc',
brand: 'asus', series: '3080',
model: 'tuf oc', url:
series: '3080', 'https://www.centrecom.com.au/asus-geforce-rtx-3080-tuf-oc-10gb-gaming-graphics-card',
url: },
'https://www.centrecom.com.au/asus-geforce-rtx-3080-tuf-oc-10gb-gaming-graphics-card' {
}, brand: 'galax',
{ model: 'sg oc',
brand: 'galax', series: '3080',
model: 'sg oc', url:
series: '3080', 'https://www.centrecom.com.au/galax-geforce-rtx-3080-sg-1-click-oc-graphics-card',
url: },
'https://www.centrecom.com.au/galax-geforce-rtx-3080-sg-1-click-oc-graphics-card' {
}, brand: 'gigabyte',
{ model: 'aorus master',
brand: 'gigabyte', series: '3080',
model: 'aorus master', url:
series: '3080', 'https://www.centrecom.com.au/gigabyte-aorus-geforce-rtx-3080-master-graphics-card',
url: },
'https://www.centrecom.com.au/gigabyte-aorus-geforce-rtx-3080-master-graphics-card' {
}, brand: 'gigabyte',
{ model: 'aorus xtreme',
brand: 'gigabyte', series: '3080',
model: 'aorus xtreme', url:
series: '3080', 'https://www.centrecom.com.au/gigabyte-geforce-rtx-3080-aorus-extreme-10gb-gddr6x-graphics-card',
url: },
'https://www.centrecom.com.au/gigabyte-geforce-rtx-3080-aorus-extreme-10gb-gddr6x-graphics-card' {
}, brand: 'gigabyte',
{ model: 'eagle oc',
brand: 'gigabyte', series: '3080',
model: 'eagle oc', url:
series: '3080', 'https://www.centrecom.com.au/gigabyte-geforce-rtx-3080-eagle-oc-10g-graphics-card',
url: },
'https://www.centrecom.com.au/gigabyte-geforce-rtx-3080-eagle-oc-10g-graphics-card' {
}, brand: 'gigabyte',
{ model: 'gaming oc',
brand: 'gigabyte', series: '3080',
model: 'gaming oc', url:
series: '3080', 'https://www.centrecom.com.au/gigabyte-geforce-rtx-3080-gaming-oc-10g-graphics-card',
url: },
'https://www.centrecom.com.au/gigabyte-geforce-rtx-3080-gaming-oc-10g-graphics-card' {
}, brand: 'msi',
{ model: 'gaming x trio',
brand: 'msi', series: '3080',
model: 'gaming x trio', url:
series: '3080', 'https://www.centrecom.com.au/msi-geforce-rtx-3080-gaming-x-trio-10g-graphics-card',
url: },
'https://www.centrecom.com.au/msi-geforce-rtx-3080-gaming-x-trio-10g-graphics-card' {
}, brand: 'msi',
{ model: 'suprim x',
brand: 'msi', series: '3080',
model: 'suprim x', url:
series: '3080', 'https://www.centrecom.com.au/msi-geforce-rtx-3080-suprim-x-10g-graphics-card',
url: },
'https://www.centrecom.com.au/msi-geforce-rtx-3080-suprim-x-10g-graphics-card' {
}, brand: 'msi',
{ model: 'ventus 3x oc',
brand: 'msi', series: '3080',
model: 'ventus 3x oc', url:
series: '3080', 'https://www.centrecom.com.au/msi-geforce-rtx-3080-ventus-3x-oc-10gb-graphics-card',
url: },
'https://www.centrecom.com.au/msi-geforce-rtx-3080-ventus-3x-oc-10gb-graphics-card' ],
} name: 'centrecom',
],
name: 'centrecom'
}; };
+37 -37
View File
@@ -1,41 +1,41 @@
import {Store} from './store'; import {Store} from './store';
export const Comet: Store = { export const Comet: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.caption', container: '.caption',
text: ['Aggiungi al carrello'] text: ['Aggiungi al carrello'],
} },
}, },
links: [ links: [
{ {
brand: 'sony', brand: 'sony',
cartUrl: 'https://www.comet.it/cart/insert/PSX01802A/online', cartUrl: 'https://www.comet.it/cart/insert/PSX01802A/online',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.comet.it/ps5/sony-playstation-5' url: 'https://www.comet.it/ps5/sony-playstation-5',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.comet.it/ps5/sony-playstation-5-digital-edition' url: 'https://www.comet.it/ps5/sony-playstation-5-digital-edition',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
cartUrl: 'https://www.comet.it/cart/insert/MIS01077A/online', cartUrl: 'https://www.comet.it/cart/insert/MIS01077A/online',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: 'https://www.comet.it/xbox-serie-x/xbox-series-x' url: 'https://www.comet.it/xbox-serie-x/xbox-series-x',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
cartUrl: 'https://www.comet.it/cart/insert/MIS010761/online', cartUrl: 'https://www.comet.it/cart/insert/MIS010761/online',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: 'https://www.comet.it/xbox-serie-x/xbox-series-s' url: 'https://www.comet.it/xbox-serie-x/xbox-series-s',
} },
], ],
name: 'comet' name: 'comet',
}; };
+294 -294
View File
@@ -1,298 +1,298 @@
import {Store} from './store'; import {Store} from './store';
export const ComputerAlliance: Store = { export const ComputerAlliance: Store = {
backoffStatusCodes: [403, 429], backoffStatusCodes: [403, 429],
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: container:
'#main > div.col-md-12 > div:nth-child(1) > div.col-sm-7.product-information > div:nth-child(5) > div > ul > li:nth-child(1) > a', '#main > div.col-md-12 > div:nth-child(1) > div.col-sm-7.product-information > div:nth-child(5) > div > ul > li:nth-child(1) > a',
text: ['In Stock'] text: ['In Stock'],
}, },
maxPrice: { maxPrice: {
container: 'span.price', container: 'span.price',
euroFormat: false euroFormat: false,
}, },
outOfStock: { outOfStock: {
container: container:
'#main > div.col-md-12 > div:nth-child(1) > div.col-sm-7.product-information > div:nth-child(5) > div > ul > li:nth-child(1) > a', '#main > div.col-md-12 > div:nth-child(1) > div.col-sm-7.product-information > div:nth-child(5) > div > ul > li:nth-child(1) > a',
text: ['Out of Stock'] text: ['Out of Stock'],
} },
}, },
links: [ links: [
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/asus-rtx3080-10gb-tuf-gaming-pcie-video-card-tuf-rtx3080-10g-gaming' 'https://www.computeralliance.com.au/asus-rtx3080-10gb-tuf-gaming-pcie-video-card-tuf-rtx3080-10g-gaming',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/asus-rtx3080-10gb-tuf-oc-gaming-pcie-video-card-tuf-rtx3080-o10g-gaming' 'https://www.computeralliance.com.au/asus-rtx3080-10gb-tuf-oc-gaming-pcie-video-card-tuf-rtx3080-o10g-gaming',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/asus-rtx3080-10gb-rog-strix-oc-gaming-pcie-video-card-rog-strix-rtx3080-o10g-gaming' 'https://www.computeralliance.com.au/asus-rtx3080-10gb-rog-strix-oc-gaming-pcie-video-card-rog-strix-rtx3080-o10g-gaming',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/evga-rtx3080-10gb-ftw3-ultra-gaming-pcie-video-card-10g-p5-3897-kr' 'https://www.computeralliance.com.au/evga-rtx3080-10gb-ftw3-ultra-gaming-pcie-video-card-10g-p5-3897-kr',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/evga-rtx3080-10gb-xc3-ultra-gaming-pcie-video-card-10g-p5-3885-kr' 'https://www.computeralliance.com.au/evga-rtx3080-10gb-xc3-ultra-gaming-pcie-video-card-10g-p5-3885-kr',
}, },
{ {
brand: 'galax', brand: 'galax',
model: 'sg oc', model: 'sg oc',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/galax-rtx3080-10gb-sg-1-click-oc-pcie-video-card-38nwm3md99nn' 'https://www.computeralliance.com.au/galax-rtx3080-10gb-sg-1-click-oc-pcie-video-card-38nwm3md99nn',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/gigabyte-rtx3080-10gb-aorus-master-pcie-video-card-gv-n3080aorus-m-10gd' 'https://www.computeralliance.com.au/gigabyte-rtx3080-10gb-aorus-master-pcie-video-card-gv-n3080aorus-m-10gd',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/gigabyte-rtx3080-10gb-aorus-xtreme-pcie-video-card-gv-n3080aorus-x-10gd' 'https://www.computeralliance.com.au/gigabyte-rtx3080-10gb-aorus-xtreme-pcie-video-card-gv-n3080aorus-x-10gd',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/gigabyte-rtx3080-10gb-eagle-oc-pcie-video-card-gv-n3080eagle-oc-10gd' 'https://www.computeralliance.com.au/gigabyte-rtx3080-10gb-eagle-oc-pcie-video-card-gv-n3080eagle-oc-10gd',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/gigabyte-rtx3080-10gb-gaming-oc-pcie-video-card-gv-n3080gaming-oc-10gd' 'https://www.computeralliance.com.au/gigabyte-rtx3080-10gb-gaming-oc-pcie-video-card-gv-n3080gaming-oc-10gd',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/gigabyte-rtx3080-10gb-vision-oc-pcie-video-card-gv-n3080vision-oc-10gd' 'https://www.computeralliance.com.au/gigabyte-rtx3080-10gb-vision-oc-pcie-video-card-gv-n3080vision-oc-10gd',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/inno3d-geforce-rtx-3080-ichill-x4-10gb-video-card-c30804-106xx-1810va36' 'https://www.computeralliance.com.au/inno3d-geforce-rtx-3080-ichill-x4-10gb-video-card-c30804-106xx-1810va36',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/msi-rtx3080-10gb-gaming-x-trio-pcie-video-card' 'https://www.computeralliance.com.au/msi-rtx3080-10gb-gaming-x-trio-pcie-video-card',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'suprim x', model: 'suprim x',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/msi-rtx3080-10gb-suprim-x-pcie-video-card' 'https://www.computeralliance.com.au/msi-rtx3080-10gb-suprim-x-pcie-video-card',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: url:
'https://www.computeralliance.com.au/msi-rtx3080-10gb-ventus-3x-oc-pcie-video-card' 'https://www.computeralliance.com.au/msi-rtx3080-10gb-ventus-3x-oc-pcie-video-card',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/asus-rtx3090-24gb-tuf-gaming-pcie-video-card-tuf-rtx3090-24g-gaming' 'https://www.computeralliance.com.au/asus-rtx3090-24gb-tuf-gaming-pcie-video-card-tuf-rtx3090-24g-gaming',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/asus-rtx3090-24gb-tuf-gaming-pcie-oc-video-card-tuf-rtx3090-o24g-gaming' 'https://www.computeralliance.com.au/asus-rtx3090-24gb-tuf-gaming-pcie-oc-video-card-tuf-rtx3090-o24g-gaming',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/asus-rtx3090-24gb-rog-strix-oc-pcie-video-card-rog-strix-rtx3090-o24g-gaming' 'https://www.computeralliance.com.au/asus-rtx3090-24gb-rog-strix-oc-pcie-video-card-rog-strix-rtx3090-o24g-gaming',
}, },
{ {
brand: 'galax', brand: 'galax',
model: 'sg oc', model: 'sg oc',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/galax-rtx3090-24gb-sg-1-click-oc-pcie-video-card-39nsm5md1gna' 'https://www.computeralliance.com.au/galax-rtx3090-24gb-sg-1-click-oc-pcie-video-card-39nsm5md1gna',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/gigabyte-rtx3090-24gb-aorus-master-pcie-video-card-gv-n3090aorus-m-24gd' 'https://www.computeralliance.com.au/gigabyte-rtx3090-24gb-aorus-master-pcie-video-card-gv-n3090aorus-m-24gd',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/gigabyte-rtx3090-24gb-aorus-xtreme-pcie-video-card-gv-n3090aorus-x-24gd' 'https://www.computeralliance.com.au/gigabyte-rtx3090-24gb-aorus-xtreme-pcie-video-card-gv-n3090aorus-x-24gd',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/gigabyte-rtx3090-24gb-eagle-oc-pcie-video-card-gv-n3090eagle-oc-24gd' 'https://www.computeralliance.com.au/gigabyte-rtx3090-24gb-eagle-oc-pcie-video-card-gv-n3090eagle-oc-24gd',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/gigabyte-rtx3090-24gb-gaming-oc-pcie-video-card-gv-n3090gaming-oc-24gd' 'https://www.computeralliance.com.au/gigabyte-rtx3090-24gb-gaming-oc-pcie-video-card-gv-n3090gaming-oc-24gd',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/gigabyte-rtx3090-24gb-vision-oc-pcie-video-card-gv-n3090vision-oc-24gd' 'https://www.computeralliance.com.au/gigabyte-rtx3090-24gb-vision-oc-pcie-video-card-gv-n3090vision-oc-24gd',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/inno3d-geforce-rtx-3090-ichill-x4-24gb-video-card-c30904-246xx-1880va36' 'https://www.computeralliance.com.au/inno3d-geforce-rtx-3090-ichill-x4-24gb-video-card-c30904-246xx-1880va36',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/msi-rtx3090-24gb-ventus-3x-oc-pcie-video-card' 'https://www.computeralliance.com.au/msi-rtx3090-24gb-ventus-3x-oc-pcie-video-card',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/msi-rtx3090-24gb-gaming-x-trio-pcie-video-card' 'https://www.computeralliance.com.au/msi-rtx3090-24gb-gaming-x-trio-pcie-video-card',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'suprim x', model: 'suprim x',
series: '3090', series: '3090',
url: url:
'https://www.computeralliance.com.au/msi-rtx3090-24gb-suprim-x-pcie-video-card' 'https://www.computeralliance.com.au/msi-rtx3090-24gb-suprim-x-pcie-video-card',
}, },
{ {
brand: 'asrock', brand: 'asrock',
model: 'amd reference', model: 'amd reference',
series: 'rx6800', series: 'rx6800',
url: url:
'https://www.computeralliance.com.au/asrock-rx6800-16gb-pcie-video-card' 'https://www.computeralliance.com.au/asrock-rx6800-16gb-pcie-video-card',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix lc', model: 'strix lc',
series: 'rx6800xt', series: 'rx6800xt',
url: url:
'https://www.computeralliance.com.au/asus-rx6800xt-16gb-rog-strix-liquid-cooled-oc-gaming-pcie-video-card' 'https://www.computeralliance.com.au/asus-rx6800xt-16gb-rog-strix-liquid-cooled-oc-gaming-pcie-video-card',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: 'rx6800', series: 'rx6800',
url: url:
'https://www.computeralliance.com.au/gigabyte-rx6800-16gb-gaming-oc-pcie-video-card-gv-r68gaming-oc-16gd' 'https://www.computeralliance.com.au/gigabyte-rx6800-16gb-gaming-oc-pcie-video-card-gv-r68gaming-oc-16gd',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: 'rx6800xt', series: 'rx6800xt',
url: url:
'https://www.computeralliance.com.au/gigabyte-rx6800xt-16gb-gaming-oc-pcie-video-card-gv-r68xtgaming-oc-16gd' 'https://www.computeralliance.com.au/gigabyte-rx6800xt-16gb-gaming-oc-pcie-video-card-gv-r68xtgaming-oc-16gd',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'amd reference', model: 'amd reference',
series: 'rx6800', series: 'rx6800',
url: url:
'https://www.computeralliance.com.au/msi-rx6800-16gb-pcie-video-card' 'https://www.computeralliance.com.au/msi-rx6800-16gb-pcie-video-card',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: 'rx6800xt', series: 'rx6800xt',
url: url:
'https://www.computeralliance.com.au/msi-rx6800xt-16gb-gaming-x-trio-pcie-video-card' 'https://www.computeralliance.com.au/msi-rx6800xt-16gb-gaming-x-trio-pcie-video-card',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'amd reference', model: 'amd reference',
series: 'rx6900xt', series: 'rx6900xt',
url: url:
'https://www.computeralliance.com.au/asus-rx6900xt-16gb-pcie-video-card-rx6900xt-16g' 'https://www.computeralliance.com.au/asus-rx6900xt-16gb-pcie-video-card-rx6900xt-16g',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: url:
'https://www.computeralliance.com.au/amd-am4-ryzen-9-5950x-16-core-4.9ghz-cpu-no-heatsink-100-100000059wof' 'https://www.computeralliance.com.au/amd-am4-ryzen-9-5950x-16-core-4.9ghz-cpu-no-heatsink-100-100000059wof',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: url:
'https://www.computeralliance.com.au/amd-am4-ryzen-9-5900x-12-core-4.8ghz-cpu-no-heatsink-100-100000061wof' 'https://www.computeralliance.com.au/amd-am4-ryzen-9-5900x-12-core-4.8ghz-cpu-no-heatsink-100-100000061wof',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: url:
'https://www.computeralliance.com.au/amd-am4-ryzen-7-5800x-8-core-4.7ghz-cpu-(no-heatsink)-100-100000063wof' 'https://www.computeralliance.com.au/amd-am4-ryzen-7-5800x-8-core-4.7ghz-cpu-(no-heatsink)-100-100000063wof',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: url:
'https://www.computeralliance.com.au/amd-am4-ryzen-5-5600x-6-core-4.6ghz-cpu-100-100000065box' 'https://www.computeralliance.com.au/amd-am4-ryzen-5-5600x-6-core-4.6ghz-cpu-100-100000065box',
} },
], ],
name: 'computeralliance' name: 'computeralliance',
}; };
File diff suppressed because it is too large Load Diff
+120 -120
View File
@@ -1,124 +1,124 @@
import {Store} from './store'; import {Store} from './store';
export const Coolblue: Store = { export const Coolblue: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.product-order', container: '.product-order',
text: ['bestel snel', 'morgen in huis'] text: ['bestel snel', 'morgen in huis'],
}, },
maxPrice: { maxPrice: {
container: '.js-order-block .sales-price__current', container: '.js-order-block .sales-price__current',
euroFormat: true euroFormat: true,
}, },
outOfStock: { outOfStock: {
container: '.product-order', container: '.product-order',
text: ['binnenkort leverbaar', 'tijdelijk uitverkocht'] text: ['binnenkort leverbaar', 'tijdelijk uitverkocht'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.coolblue.nl/product/826844/' url: 'https://www.coolblue.nl/product/826844/',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.coolblue.nl/product/868737/' url: 'https://www.coolblue.nl/product/868737/',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.coolblue.nl/product/868741/' url: 'https://www.coolblue.nl/product/868741/',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.coolblue.nl/product/868726/' url: 'https://www.coolblue.nl/product/868726/',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.coolblue.nl/product/868736/' url: 'https://www.coolblue.nl/product/868736/',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.coolblue.nl/product/868740/' url: 'https://www.coolblue.nl/product/868740/',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.coolblue.nl/product/868733/' url: 'https://www.coolblue.nl/product/868733/',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.coolblue.nl/product/868731/' url: 'https://www.coolblue.nl/product/868731/',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.coolblue.nl/product/868732/' url: 'https://www.coolblue.nl/product/868732/',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.coolblue.nl/product/868738/' url: 'https://www.coolblue.nl/product/868738/',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.coolblue.nl/product/868739/' url: 'https://www.coolblue.nl/product/868739/',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.coolblue.nl/product/868730/' url: 'https://www.coolblue.nl/product/868730/',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.coolblue.nl/product/868727/' url: 'https://www.coolblue.nl/product/868727/',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://www.coolblue.nl/product/868728/' url: 'https://www.coolblue.nl/product/868728/',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3090', series: '3090',
url: 'https://www.coolblue.nl/product/868729/' url: 'https://www.coolblue.nl/product/868729/',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.coolblue.nl/product/868734/' url: 'https://www.coolblue.nl/product/868734/',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://www.coolblue.nl/product/868735/' url: 'https://www.coolblue.nl/product/868735/',
} },
], ],
name: 'coolblue' name: 'coolblue',
}; };
+291 -291
View File
@@ -1,295 +1,295 @@
import {Store} from './store'; import {Store} from './store';
export const Coolmod: Store = { export const Coolmod: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.product-availability', container: '.product-availability',
text: ['Envío'] text: ['Envío'],
}, },
maxPrice: { maxPrice: {
container: '.text-price-total', container: '.text-price-total',
euroFormat: true euroFormat: true,
}, },
outOfStock: { outOfStock: {
container: '.product-availability', container: '.product-availability',
text: ['Sin Stock'] text: ['Sin Stock'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://www.coolmod.com/kfa2-geforce-rtx-2060-super-1-click-oc-8gb-gddr6-tarjeta-grafica-precio' 'https://www.coolmod.com/kfa2-geforce-rtx-2060-super-1-click-oc-8gb-gddr6-tarjeta-grafica-precio',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/gigabyte-geforce-rtx-3080-eagle-oc-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-eagle-oc-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/msi-geforce-rtx-3080-ventus-3x-oc-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/msi-geforce-rtx-3080-ventus-3x-oc-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-gaming-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-gaming-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/gigabyte-geforce-rtx-3080-gaming-oc-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-gaming-oc-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/msi-geforce-rtx-3080-gaming-x-trio-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/msi-geforce-rtx-3080-gaming-x-trio-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-oc-gaming-10gb-gddr6x-tarjeta-grfica-precio' 'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-oc-gaming-10gb-gddr6x-tarjeta-grfica-precio',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-oc-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-oc-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-black-gaming-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-black-gaming-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-tarjeta-grfica-precio' 'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-tarjeta-grfica-precio',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-oc-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-oc-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/gigabyte-geforce-rtx-3080-vision-oc-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-vision-oc-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-gaming-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-gaming-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-master-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-master-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-gaming-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-gaming-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 revel', model: 'xlr8 revel',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 revel', model: 'xlr8 revel',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'kfa2', brand: 'kfa2',
model: 'sg oc', model: 'sg oc',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/kfa2-geforce-rtx-3080-sg-1-click-oc-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/kfa2-geforce-rtx-3080-sg-1-click-oc-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x4-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x4-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x3-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x3-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: url:
'https://www.coolmod.com/inno3d-geforce-rtx-3080-twin-x2-oc-10gb-gddr6x-tarjeta-grafica-precio' 'https://www.coolmod.com/inno3d-geforce-rtx-3080-twin-x2-oc-10gb-gddr6x-tarjeta-grafica-precio',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: url:
'https://www.coolmod.com/amd-ryzen-5-5600x-46ghz-socket-am4-boxed-procesador-precio' 'https://www.coolmod.com/amd-ryzen-5-5600x-46ghz-socket-am4-boxed-procesador-precio',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: url:
'https://www.coolmod.com/amd-ryzen-7-5800x-47ghz-socket-am4-boxed-procesador-precio' 'https://www.coolmod.com/amd-ryzen-7-5800x-47ghz-socket-am4-boxed-procesador-precio',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: url:
'https://www.coolmod.com/amd-ryzen-9-5900x-48ghz-socket-am4-boxed-procesador-precio' 'https://www.coolmod.com/amd-ryzen-9-5900x-48ghz-socket-am4-boxed-procesador-precio',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: url:
'https://www.coolmod.com/amd-ryzen-9-5950x-49ghz-socket-am4-boxed-procesador-precio' 'https://www.coolmod.com/amd-ryzen-9-5950x-49ghz-socket-am4-boxed-procesador-precio',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: url:
'https://www.coolmod.com/asus-dual-geforce-rtx-3070-8gb-gddr6-tarjeta-grafica-precio' 'https://www.coolmod.com/asus-dual-geforce-rtx-3070-8gb-gddr6-tarjeta-grafica-precio',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3070', series: '3070',
url: url:
'https://www.coolmod.com/msi-geforce-rtx-3070-gaming-x-trio-8gb-gddr6-tarjeta-grafica-precio' 'https://www.coolmod.com/msi-geforce-rtx-3070-gaming-x-trio-8gb-gddr6-tarjeta-grafica-precio',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 2x', model: 'ventus 2x',
series: '3070', series: '3070',
url: url:
'https://www.coolmod.com/msi-geforce-rtx-3070-ventus-2x-oc-8gb-gddr6-tarjeta-grafica-precio' 'https://www.coolmod.com/msi-geforce-rtx-3070-ventus-2x-oc-8gb-gddr6-tarjeta-grafica-precio',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3070', series: '3070',
url: url:
'https://www.coolmod.com/evga-geforce-rtx-3070-xc3-black-gaming-8gb-gddr6-tarjeta-grafica-precio' 'https://www.coolmod.com/evga-geforce-rtx-3070-xc3-black-gaming-8gb-gddr6-tarjeta-grafica-precio',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3070', series: '3070',
url: url:
'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3070-gaming-8gb-gddr6-tarjeta-grafica-precio' 'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3070-gaming-8gb-gddr6-tarjeta-grafica-precio',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle', model: 'eagle',
series: '3070', series: '3070',
url: url:
'https://www.coolmod.com/gigabyte-geforce-rtx-3070-eagle-8gb-gddr6-tarjeta-grafica-precio' 'https://www.coolmod.com/gigabyte-geforce-rtx-3070-eagle-8gb-gddr6-tarjeta-grafica-precio',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3070', series: '3070',
url: url:
'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3070-master-8gb-gddr6-tarjeta-grafica-precio' 'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3070-master-8gb-gddr6-tarjeta-grafica-precio',
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 revel', model: 'xlr8 revel',
series: '3070', series: '3070',
url: url:
'https://www.coolmod.com/pny-geforce-rtx-3070-xlr8-gaming-epic-x-rgb-8gb-gddr6-tarjeta-grafica-precio' 'https://www.coolmod.com/pny-geforce-rtx-3070-xlr8-gaming-epic-x-rgb-8gb-gddr6-tarjeta-grafica-precio',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge', model: 'twin edge',
series: '3070', series: '3070',
url: url:
'https://www.coolmod.com/zotac-gaming-geforce-rtx-3070-twin-edge-8gb-gddr6-tarjeta-grafica-precio' 'https://www.coolmod.com/zotac-gaming-geforce-rtx-3070-twin-edge-8gb-gddr6-tarjeta-grafica-precio',
}, },
{ {
brand: 'kfa2', brand: 'kfa2',
model: 'sg oc', model: 'sg oc',
series: '3070', series: '3070',
url: url:
'https://www.coolmod.com/kfa2-geforce-rtx-3070-sg-1-click-oc-8gb-gddr6-tarjeta-grafica-precio' 'https://www.coolmod.com/kfa2-geforce-rtx-3070-sg-1-click-oc-8gb-gddr6-tarjeta-grafica-precio',
} },
], ],
name: 'coolmod' name: 'coolmod',
}; };
+35 -35
View File
@@ -1,39 +1,39 @@
import {Store} from './store'; import {Store} from './store';
export const Corsair: Store = { export const Corsair: Store = {
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: '.add_to_cart_form', container: '.add_to_cart_form',
text: ['add to cart'] text: ['add to cart'],
}, },
maxPrice: { maxPrice: {
container: '.product-price', container: '.product-price',
euroFormat: false euroFormat: false,
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://www.corsair.com/us/en/Categories/Products/Power-Supply-Units/Power-Supply-Units-Advanced/SF-Series/p/CP-9020181-NA' 'https://www.corsair.com/us/en/Categories/Products/Power-Supply-Units/Power-Supply-Units-Advanced/SF-Series/p/CP-9020181-NA',
}, },
{ {
brand: 'corsair', brand: 'corsair',
model: '750 platinum', model: '750 platinum',
series: 'sf', series: 'sf',
url: url:
'https://www.corsair.com/us/en/Categories/Products/Power-Supply-Units/Power-Supply-Units-Advanced/SF-Series/p/CP-9020186-NA' 'https://www.corsair.com/us/en/Categories/Products/Power-Supply-Units/Power-Supply-Units-Advanced/SF-Series/p/CP-9020186-NA',
}, },
{ {
brand: 'corsair', brand: 'corsair',
model: '600 platinum', model: '600 platinum',
series: 'sf', series: 'sf',
url: url:
'https://www.corsair.com/us/en/Categories/Products/Power-Supply-Units/Power-Supply-Units-Advanced/SF-Series/p/CP-9020182-NA' 'https://www.corsair.com/us/en/Categories/Products/Power-Supply-Units/Power-Supply-Units-Advanced/SF-Series/p/CP-9020182-NA',
} },
], ],
name: 'corsair' name: 'corsair',
}; };
+150 -150
View File
@@ -1,154 +1,154 @@
import {Store} from './store'; import {Store} from './store';
export const Cpl: Store = { export const Cpl: Store = {
backoffStatusCodes: [403, 429], backoffStatusCodes: [403, 429],
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: container:
'div.product-stock > table > tbody > tr:nth-child(1) > td.stock-value', 'div.product-stock > table > tbody > tr:nth-child(1) > td.stock-value',
text: ['In Stock'] text: ['In Stock'],
}, },
outOfStock: { outOfStock: {
container: container:
'div.product-stock > table > tbody > tr:nth-child(1) > td.stock-value', 'div.product-stock > table > tbody > tr:nth-child(1) > td.stock-value',
text: ['Pre Order'] text: ['Pre Order'],
} },
}, },
links: [ links: [
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/asus-rog-strix-rtx3080-10g-gaming-graphics-card.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/asus-rog-strix-rtx3080-10g-gaming-graphics-card.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/asus-tuf-rtx3080-10g-gaming-graphics-card.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/asus-tuf-rtx3080-10g-gaming-graphics-card.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/asus-tuf-rtx3080-o10g-gaming-graphics-card.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/asus-tuf-rtx3080-o10g-gaming-graphics-card.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/evga-geforce-rtx-3080-ftw3-gaming-10g-p5-3895-kr-10gb-gddr6x-icx3-technology-argb-led-metal-backplate-hdmi-dpx3.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/evga-geforce-rtx-3080-ftw3-gaming-10g-p5-3895-kr-10gb-gddr6x-icx3-technology-argb-led-metal-backplate-hdmi-dpx3.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/evga-geforce-rtx-3080-ftw3-ultra-gaming-10g-p5-3897-kr-10gb-gddr6x-icx3-technology-argb-led-metal-backplate-hdmi-dpx3.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/evga-geforce-rtx-3080-ftw3-ultra-gaming-10g-p5-3897-kr-10gb-gddr6x-icx3-technology-argb-led-metal-backplate-hdmi-dpx3.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/evga-geforce-rtx-3080-xc3-black-gaming-10g-p5-3881-kr-10gb-gddr6x-icx3-cooling-argb-led-hdmi-dpx3.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/evga-geforce-rtx-3080-xc3-black-gaming-10g-p5-3881-kr-10gb-gddr6x-icx3-cooling-argb-led-hdmi-dpx3.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/evga-geforce-rtx-3080-xc3-gaming-10g-p5-3883-kr-10gb-gddr6x-icx3-cooling-argb-led-metal-backplate-hdmi-dpx3.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/evga-geforce-rtx-3080-xc3-gaming-10g-p5-3883-kr-10gb-gddr6x-icx3-cooling-argb-led-metal-backplate-hdmi-dpx3.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/evga-geforce-rtx-3080-xc3-ultra-gaming-10g-p5-3885-kr-10gb-gddr6x-icx3-cooling-argb-led-metal-backplate-hdmi-dpx3.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/evga-geforce-rtx-3080-xc3-ultra-gaming-10g-p5-3885-kr-10gb-gddr6x-icx3-cooling-argb-led-metal-backplate-hdmi-dpx3.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/gigabyte-gv-n3080aorus-m-10gd-aorus-geforce-rtx-3080-master-10gb.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/gigabyte-gv-n3080aorus-m-10gd-aorus-geforce-rtx-3080-master-10gb.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/gigabyte-aorus-geforce-rtx-3080-xtreme-10g.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/gigabyte-aorus-geforce-rtx-3080-xtreme-10g.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/gigabyte-geforce-rtx-3080-eagle-oc-10gb-graphics-card-gv-n3080eagle-oc-10gd.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/gigabyte-geforce-rtx-3080-eagle-oc-10gb-graphics-card-gv-n3080eagle-oc-10gd.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/gigabyte-gv-n3080gaming-oc-10gd-graphics-card.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/gigabyte-gv-n3080gaming-oc-10gd-graphics-card.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/gigabyte-gv-n3080vision-oc-10gd-geforce-rtx-3080-vision-oc-10gb.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/gigabyte-gv-n3080vision-oc-10gd-geforce-rtx-3080-vision-oc-10gb.html',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/inno3d-c30803-106xx-1810va37-geforce-rtx-3080-ichill-x3-10g.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/inno3d-c30803-106xx-1810va37-geforce-rtx-3080-ichill-x3-10g.html',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/inno3d-c30804-106xx-1810va36-geforce-rtx-3080-ichill-x4-10g.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/inno3d-c30804-106xx-1810va36-geforce-rtx-3080-ichill-x4-10g.html',
}, },
{ {
brand: 'leadtek', brand: 'leadtek',
model: 'hurricane', model: 'hurricane',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/leadtek-12789000110-geforce-rtx-3080-hurricane.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/leadtek-12789000110-geforce-rtx-3080-hurricane.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/msi-rtx-3080-gaming-x-trio-10g-graphics-card.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/msi-rtx-3080-gaming-x-trio-10g-graphics-card.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'suprim x', model: 'suprim x',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/msi-geforce-rtx-3080-suprim-x-10g-graphics-card.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/msi-geforce-rtx-3080-suprim-x-10g-graphics-card.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: url:
'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/msi-rtx-3080-ventus-3x-10g-oc-graphics-card.html' 'https://cplonline.com.au/graphics-cards/geforce-rtx-3080/msi-rtx-3080-ventus-3x-10g-oc-graphics-card.html',
} },
], ],
name: 'cpl' name: 'cpl',
}; };
+112 -113
View File
@@ -2,117 +2,116 @@ import {Store} from './store';
import {getProductLinksBuilder} from './helpers/card'; import {getProductLinksBuilder} from './helpers/card';
export const Currys: Store = { export const Currys: Store = {
currency: '£', currency: '£',
labels: { labels: {
inStock: { inStock: {
container: '#product-actions button', container: '#product-actions button',
text: ['add to basket'] text: ['add to basket'],
}, },
maxPrice: { maxPrice: {
container: container: '#product-actions span[class*="ProductPriceBlock__Price"]',
'#product-actions span[class*="ProductPriceBlock__Price"]', euroFormat: false, // Note: Currys uses non-euroFromat as price seperator
euroFormat: false // Note: Currys uses non-euroFromat as price seperator },
}, outOfStock: {
outOfStock: { container: '#product-actions .unavailable',
container: '#product-actions .unavailable', text: ['not available for delivery'],
text: ['not available for delivery'] },
} },
}, links: [
links: [ {
{ brand: 'test:brand',
brand: 'test:brand', model: 'test:model',
model: 'test:model', series: 'test:series',
series: 'test:series', url:
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',
'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',
brand: 'amd', model: '5600x',
model: '5600x', series: 'ryzen5600',
series: 'ryzen5600', url:
url: 'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-5-5600x-processor-10216691-pdt.html',
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-5-5600x-processor-10216691-pdt.html' },
}, {
{ brand: 'amd',
brand: 'amd', model: '5800x',
model: '5800x', series: 'ryzen5800',
series: 'ryzen5800', url:
url: 'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-7-5800x-processor-10216690-pdt.html',
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-7-5800x-processor-10216690-pdt.html' },
}, {
{ brand: 'amd',
brand: 'amd', model: '5900x',
model: '5900x', series: 'ryzen5900',
series: 'ryzen5900', url:
url: 'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-9-5900x-processor-10216689-pdt.html',
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-9-5900x-processor-10216689-pdt.html' },
}, {
{ brand: 'amd',
brand: 'amd', model: '5950x',
model: '5950x', series: 'ryzen5950',
series: 'ryzen5950', url:
url: 'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-9-5950x-processor-10216688-pdt.html',
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-9-5950x-processor-10216688-pdt.html' },
}, {
{ brand: 'sony',
brand: 'sony', model: 'ps5 console',
model: 'ps5 console', series: 'sonyps5c',
series: 'sonyps5c', url:
url: 'https://www.currys.co.uk/gbuk/gaming/console-gaming/consoles/sony-playstation-5-825-gb-10203370-pdt.html',
'https://www.currys.co.uk/gbuk/gaming/console-gaming/consoles/sony-playstation-5-825-gb-10203370-pdt.html' },
}, {
{ brand: 'sony',
brand: 'sony', model: 'ps5 digital',
model: 'ps5 digital', series: 'sonyps5de',
series: 'sonyps5de', url:
url: 'https://www.currys.co.uk/gbuk/playstation-5-sony-1714-commercial.html',
'https://www.currys.co.uk/gbuk/playstation-5-sony-1714-commercial.html' },
}, {
{ brand: 'microsoft',
brand: 'microsoft', model: 'xbox series x',
model: 'xbox series x', series: 'xboxsx',
series: 'xboxsx', url:
url: 'https://www.currys.co.uk/gbuk/gaming/console-gaming/consoles/microsoft-xbox-series-x-1-tb-10203371-pdt.html',
'https://www.currys.co.uk/gbuk/gaming/console-gaming/consoles/microsoft-xbox-series-x-1-tb-10203371-pdt.html' },
}, {
{ brand: 'microsoft',
brand: 'microsoft', model: 'xbox series s',
model: 'xbox series s', series: 'xboxss',
series: 'xboxss', url:
url: 'https://www.currys.co.uk/gbuk/gaming/console-gaming/consoles/microsoft-xbox-series-s-512-gb-ssd-10205195-pdt.html',
'https://www.currys.co.uk/gbuk/gaming/console-gaming/consoles/microsoft-xbox-series-s-512-gb-ssd-10205195-pdt.html' },
} ],
], linksBuilder: {
linksBuilder: { builder: getProductLinksBuilder({
builder: getProductLinksBuilder({ productsSelector: '.resultList .product',
productsSelector: '.resultList .product', sitePrefix: 'https://www.currys.co.uk',
sitePrefix: 'https://www.currys.co.uk', titleSelector: '.productTitle',
titleSelector: '.productTitle', urlSelector: 'a[href]',
urlSelector: 'a[href]' }),
}), urls: [
urls: [ {
{ series: '3060ti',
series: '3060ti', url:
url: 'https://www.currys.co.uk/gbuk/rtx-3060-ti/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313952/xx-criteria.html',
'https://www.currys.co.uk/gbuk/rtx-3060-ti/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313952/xx-criteria.html' },
}, {
{ series: '3070',
series: '3070', url:
url: 'https://www.currys.co.uk/gbuk/rtx-3070/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313849/xx-criteria.html',
'https://www.currys.co.uk/gbuk/rtx-3070/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313849/xx-criteria.html' },
}, {
{ series: '3080',
series: '3080', url:
url: 'https://www.currys.co.uk/gbuk/rtx-3080/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313767/xx-criteria.html',
'https://www.currys.co.uk/gbuk/rtx-3080/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313767/xx-criteria.html' },
}, {
{ series: '3090',
series: '3090', url:
url: 'https://www.currys.co.uk/gbuk/rtx-3090/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313725/xx-criteria.html',
'https://www.currys.co.uk/gbuk/rtx-3090/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313725/xx-criteria.html' },
} ],
] },
}, name: 'currys',
name: 'currys', waitUntil: 'domcontentloaded',
waitUntil: 'domcontentloaded'
}; };
+120 -120
View File
@@ -1,124 +1,124 @@
import {Store} from './store'; import {Store} from './store';
export const Cyberport: Store = { export const Cyberport: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.tooltipAvailabilityParent', container: '.tooltipAvailabilityParent',
text: ['sofort verfügbar'] text: ['sofort verfügbar'],
}, },
maxPrice: { maxPrice: {
container: '#productDetailOverview .price', container: '#productDetailOverview .price',
euroFormat: true euroFormat: true,
}, },
outOfStock: { outOfStock: {
container: '.tooltipAvailabilityParent', container: '.tooltipAvailabilityParent',
text: ['noch nicht verfügbar'] text: ['noch nicht verfügbar'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.cyberport.de?DEEP=2E12-3KL' url: 'https://www.cyberport.de?DEEP=2E12-3KL',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E07-51S' url: 'https://www.cyberport.de?DEEP=2E07-51S',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E07-51T' url: 'https://www.cyberport.de?DEEP=2E07-51T',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E07-51L' url: 'https://www.cyberport.de?DEEP=2E07-51L',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E07-51N' url: 'https://www.cyberport.de?DEEP=2E07-51N',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E21-537' url: 'https://www.cyberport.de?DEEP=2E21-537',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E21-52Y' url: 'https://www.cyberport.de?DEEP=2E21-52Y',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3090', series: '3090',
url: 'https://www.cyberport.de?DEEP=2e21-532' url: 'https://www.cyberport.de?DEEP=2e21-532',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E21-52Z' url: 'https://www.cyberport.de?DEEP=2E21-52Z',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E12-3L6' url: 'https://www.cyberport.de?DEEP=2E12-3L6',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E12-3L7c' url: 'https://www.cyberport.de?DEEP=2E12-3L7c',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E13-1H4' url: 'https://www.cyberport.de?DEEP=2E13-1H4',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.cyberport.de?DEEP=2E13-1H7' url: 'https://www.cyberport.de?DEEP=2E13-1H7',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://www.cyberport.de?DEEP=2001-71p' url: 'https://www.cyberport.de?DEEP=2001-71p',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://www.cyberport.de/?DEEP=2001-71n' url: 'https://www.cyberport.de/?DEEP=2001-71n',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.cyberport.de?DEEP=2001-71m' url: 'https://www.cyberport.de?DEEP=2001-71m',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.cyberport.de?DEEP=2001-71l' url: 'https://www.cyberport.de?DEEP=2001-71l',
} },
], ],
name: 'cyberport' name: 'cyberport',
}; };
+217 -217
View File
@@ -1,221 +1,221 @@
import {Store} from './store'; import {Store} from './store';
export const Dcomp: Store = { export const Dcomp: Store = {
backoffStatusCodes: [403, 429], backoffStatusCodes: [403, 429],
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: '#cart-info > button.btn.addToCart', container: '#cart-info > button.btn.addToCart',
text: ['Add to', ''] text: ['Add to', ''],
}, },
maxPrice: { maxPrice: {
container: '#prodprice', container: '#prodprice',
euroFormat: false euroFormat: false,
}, },
outOfStock: { outOfStock: {
container: '#cart-info > button.btn.notifyMe', container: '#cart-info > button.btn.notifyMe',
text: ['Notify Me'] text: ['Notify Me'],
} },
}, },
links: [ links: [
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3172' url: 'https://dcomp.com.au/productdetail/3172',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3205' url: 'https://dcomp.com.au/productdetail/3205',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3206' url: 'https://dcomp.com.au/productdetail/3206',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3183' url: 'https://dcomp.com.au/productdetail/3183',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3310' url: 'https://dcomp.com.au/productdetail/3310',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme waterforce', model: 'aorus xtreme waterforce',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3307' url: 'https://dcomp.com.au/productdetail/3307',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme waterforce wb', model: 'aorus xtreme waterforce wb',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3308' url: 'https://dcomp.com.au/productdetail/3308',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3136' url: 'https://dcomp.com.au/productdetail/3136',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3135' url: 'https://dcomp.com.au/productdetail/3135',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3166' url: 'https://dcomp.com.au/productdetail/3166',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3199' url: 'https://dcomp.com.au/productdetail/3199',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'suprim x', model: 'suprim x',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3306' url: 'https://dcomp.com.au/productdetail/3306',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://dcomp.com.au/productdetail/3141' url: 'https://dcomp.com.au/productdetail/3141',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://dcomp.com.au/productdetail/3226' url: 'https://dcomp.com.au/productdetail/3226',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix oc', model: 'strix oc',
series: '3090', series: '3090',
url: 'https://dcomp.com.au/productdetail/3281' url: 'https://dcomp.com.au/productdetail/3281',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3090', series: '3090',
url: 'https://dcomp.com.au/productdetail/3309' url: 'https://dcomp.com.au/productdetail/3309',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3090', series: '3090',
url: 'https://dcomp.com.au/productdetail/3263' url: 'https://dcomp.com.au/productdetail/3263',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme waterforce', model: 'aorus xtreme waterforce',
series: '3090', series: '3090',
url: 'https://dcomp.com.au/productdetail/3388' url: 'https://dcomp.com.au/productdetail/3388',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme waterforce wb', model: 'aorus xtreme waterforce wb',
series: '3090', series: '3090',
url: 'https://dcomp.com.au/productdetail/3417' url: 'https://dcomp.com.au/productdetail/3417',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://dcomp.com.au/productdetail/3234' url: 'https://dcomp.com.au/productdetail/3234',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://dcomp.com.au/productdetail/3158' url: 'https://dcomp.com.au/productdetail/3158',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3090', series: '3090',
url: 'https://dcomp.com.au/productdetail/3235' url: 'https://dcomp.com.au/productdetail/3235',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://dcomp.com.au/productdetail/3168' url: 'https://dcomp.com.au/productdetail/3168',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://dcomp.com.au/productdetail/3167' url: 'https://dcomp.com.au/productdetail/3167',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'suprim x', model: 'suprim x',
series: '3090', series: '3090',
url: 'https://dcomp.com.au/productdetail/3300' url: 'https://dcomp.com.au/productdetail/3300',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: 'rx6800', series: 'rx6800',
url: 'https://dcomp.com.au/productdetail/3358' url: 'https://dcomp.com.au/productdetail/3358',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'amd reference', model: 'amd reference',
series: 'rx6800', series: 'rx6800',
url: 'https://dcomp.com.au/productdetail/3386' url: 'https://dcomp.com.au/productdetail/3386',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://dcomp.com.au/productdetail/3421' url: 'https://dcomp.com.au/productdetail/3421',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: 'rx6800xt', series: 'rx6800xt',
url: 'https://dcomp.com.au/productdetail/3387' url: 'https://dcomp.com.au/productdetail/3387',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: 'rx6900xt', series: 'rx6900xt',
url: 'https://dcomp.com.au/productdetail/3422' url: 'https://dcomp.com.au/productdetail/3422',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://dcomp.com.au/productdetail/3270' url: 'https://dcomp.com.au/productdetail/3270',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://dcomp.com.au/productdetail/3289' url: 'https://dcomp.com.au/productdetail/3289',
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://dcomp.com.au/productdetail/3265' url: 'https://dcomp.com.au/productdetail/3265',
} },
], ],
name: 'dcomp' name: 'dcomp',
}; };
+269 -270
View File
@@ -1,274 +1,273 @@
import {Store} from './store'; import {Store} from './store';
export const Drako: Store = { export const Drako: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: [ inStock: [
{ {
container: container: '#bottom_left_panel > div:nth-child(9) > div:nth-child(2)',
'#bottom_left_panel > div:nth-child(9) > div:nth-child(2)', text: ['ordinabile'],
text: ['ordinabile'] },
} ],
], maxPrice: {
maxPrice: { container: '.price',
container: '.price', euroFormat: true,
euroFormat: true },
} },
}, links: [
links: [ {
{ brand: 'test:brand',
brand: 'test:brand', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=22674&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=22674&action=add_product', model: 'test:model',
model: 'test:model', series: 'test:series',
series: 'test:series', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=22674',
'http://www.drako.it/drako_catalog/product_info.php?products_id=22674' },
}, {
{ brand: 'kfa2',
brand: 'kfa2', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24303&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24303&action=add_product', model: 'sg',
model: 'sg', series: '3090',
series: '3090', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24303',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24303' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24286&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24286&action=add_product', model: 'gaming oc',
model: 'gaming oc', series: '3090',
series: '3090', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24286',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24286' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24722&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24722&action=add_product', model: 'strix oc',
model: 'strix oc', series: '3090',
series: '3090', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24722',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24722' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24288&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24288&action=add_product', model: 'strix',
model: 'strix', series: '3090',
series: '3090', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24288',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24288' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24291&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24291&action=add_product', model: 'tuf oc',
model: 'tuf oc', series: '3090',
series: '3090', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24291',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24291' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24680&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24680&action=add_product', model: 'ekwb',
model: 'ekwb', series: '3090',
series: '3090', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24680',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24680' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24290&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24290&action=add_product', model: 'tuf',
model: 'tuf', series: '3090',
series: '3090', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24290',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24290' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24666&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24666&action=add_product', model: 'ekwb',
model: 'ekwb', series: '3080',
series: '3080', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24666',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24666' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24289&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24289&action=add_product', model: 'strix oc',
model: 'strix oc', series: '3080',
series: '3080', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24289',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24289' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24723&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24723&action=add_product', model: 'strix white',
model: 'strix white', series: '3080',
series: '3080', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24723',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24723' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24287&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24287&action=add_product', model: 'strix',
model: 'strix', series: '3080',
series: '3080', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24287',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24287' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24293&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24293&action=add_product', model: 'tuf oc',
model: 'tuf oc', series: '3080',
series: '3080', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24293',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24293' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24292&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24292&action=add_product', model: 'tuf',
model: 'tuf', series: '3080',
series: '3080', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24292',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24292' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24420&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24420&action=add_product', model: 'dual',
model: 'dual', series: '3070',
series: '3070', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24420',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24420' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24422&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24422&action=add_product', model: 'strix',
model: 'strix', series: '3070',
series: '3070', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24422',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24422' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24721&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24721&action=add_product', model: 'tuf',
model: 'tuf', series: '3070',
series: '3070', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24721',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24721' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24421&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24421&action=add_product', model: 'tuf oc',
model: 'tuf oc', series: '3070',
series: '3070', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24421',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24421' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24426&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24426&action=add_product', model: 'aorus master',
model: 'aorus master', series: '3070',
series: '3070', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24426',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24426' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24423&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24423&action=add_product', model: 'eagle oc',
model: 'eagle oc', series: '3070',
series: '3070', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24423',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24423' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24425&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24425&action=add_product', model: 'gaming oc',
model: 'gaming oc', series: '3070',
series: '3070', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24425',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24425' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24424&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24424&action=add_product', model: 'eagle',
model: 'eagle', series: '3070',
series: '3070', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24424',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24424' },
}, {
{ brand: 'kfa2',
brand: 'kfa2', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24292&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24292&action=add_product', model: 'sg',
model: 'sg', series: '3070',
series: '3070', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24475',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24475' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24604&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24604&action=add_product', model: 'strix',
model: 'strix', series: 'rx6800',
series: 'rx6800', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24604',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24604' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24605&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24605&action=add_product', model: 'tuf',
model: 'tuf', series: 'rx6800',
series: 'rx6800', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24605',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24605' },
}, {
{ brand: 'asus',
brand: 'asus', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24606&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24606&action=add_product', model: 'tuf oc',
model: 'tuf oc', series: 'rx6800',
series: 'rx6800', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24606',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24606' },
}, {
{ brand: 'gigabyte',
brand: 'gigabyte', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24606&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24606&action=add_product', model: 'amd reference',
model: 'amd reference', series: 'rx6800',
series: 'rx6800', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24606',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24606' },
}, {
{ brand: 'amd',
brand: 'amd', cartUrl:
cartUrl: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24456&action=add_product',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24456&action=add_product', model: '5600x',
model: '5600x', series: 'ryzen5600',
series: 'ryzen5600', url:
url: 'http://www.drako.it/drako_catalog/product_info.php?products_id=24456',
'http://www.drako.it/drako_catalog/product_info.php?products_id=24456' },
} ],
], name: 'drako',
name: 'drako', successStatusCodes: [[0, 399], 404],
successStatusCodes: [[0, 399], 404]
}; };
+45 -46
View File
@@ -1,50 +1,49 @@
import {Store} from './store'; import {Store} from './store';
export const EbGames: Store = { export const EbGames: Store = {
currency: '$', currency: '$',
labels: { labels: {
maxPrice: { maxPrice: {
container: '.singleVariantText .prodPriceCont' container: '.singleVariantText .prodPriceCont',
}, },
outOfStock: { outOfStock: {
container: '#btnAddToCart[style*="display:none;"] ', container: '#btnAddToCart[style*="display:none;"] ',
text: ['add to cart'] text: ['add to cart'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url: 'https://www.ebgames.ca/Switch/Games/727918/mario-kart-8-deluxe',
'https://www.ebgames.ca/Switch/Games/727918/mario-kart-8-deluxe' },
}, {
{ brand: 'sony',
brand: 'sony', model: 'ps5 console',
model: 'ps5 console', series: 'sonyps5c',
series: 'sonyps5c', url: 'https://www.ebgames.ca/PS5/Games/877522',
url: 'https://www.ebgames.ca/PS5/Games/877522' },
}, {
{ brand: 'sony',
brand: 'sony', model: 'ps5 digital',
model: 'ps5 digital', series: 'sonyps5de',
series: 'sonyps5de', url: 'https://www.ebgames.ca/PS5/Games/877523',
url: 'https://www.ebgames.ca/PS5/Games/877523' },
}, {
{ brand: 'microsoft',
brand: 'microsoft', model: 'xbox series x',
model: 'xbox series x', series: 'xboxsx',
series: 'xboxsx', url:
url: 'https://www.ebgames.ca/Xbox%20Series%20X/Games/877779/xbox-series-x',
'https://www.ebgames.ca/Xbox%20Series%20X/Games/877779/xbox-series-x' },
}, {
{ brand: 'microsoft',
brand: 'microsoft', model: 'xbox series s',
model: 'xbox series s', series: 'xboxss',
series: 'xboxss', url:
url: 'https://www.ebgames.ca/Xbox%20Series%20X/Games/877780/xbox-series-s',
'https://www.ebgames.ca/Xbox%20Series%20X/Games/877780/xbox-series-s' },
} ],
], name: 'ebgames',
name: 'ebgames'
}; };
+126 -127
View File
@@ -2,131 +2,130 @@ import {Store} from './store';
import {getProductLinksBuilder} from './helpers/card'; import {getProductLinksBuilder} from './helpers/card';
export const Ebuyer: Store = { export const Ebuyer: Store = {
currency: '£', currency: '£',
labels: { labels: {
inStock: { inStock: {
container: '.purchase-info__cta', container: '.purchase-info__cta',
text: ['add to basket', 'pre-order'] text: ['add to basket', 'pre-order'],
}, },
maxPrice: { maxPrice: {
container: '.purchase-info__price .price', container: '.purchase-info__price .price',
euroFormat: false // Note: ebuyer uses non-euroFromat as price seperator euroFormat: false, // Note: ebuyer uses non-euroFromat as price seperator
}, },
outOfStock: { outOfStock: {
container: '.purchase-info', container: '.purchase-info',
text: ['coming soon'] text: ['coming soon'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://www.ebuyer.com/874209-gigabyte-geforce-rtx-2060-windforce-6gb-oc-graphics-card-gv-n2060wf2oc-6gd-v2' 'https://www.ebuyer.com/874209-gigabyte-geforce-rtx-2060-windforce-6gb-oc-graphics-card-gv-n2060wf2oc-6gd-v2',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: url:
'https://www.ebuyer.com/1133940-sony-playstation-5-console-cfi-1016a' 'https://www.ebuyer.com/1133940-sony-playstation-5-console-cfi-1016a',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: url:
'https://www.ebuyer.com/1133942-sony-playstation-5-digital-edition-cfi-1016b-' 'https://www.ebuyer.com/1133942-sony-playstation-5-digital-edition-cfi-1016b-',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: url: 'https://www.ebuyer.com/1133948-xbox-series-x-console-rrt-00007',
'https://www.ebuyer.com/1133948-xbox-series-x-console-rrt-00007' },
}, {
{ brand: 'microsoft',
brand: 'microsoft', model: 'xbox series s',
model: 'xbox series s', series: 'xboxss',
series: 'xboxss', url:
url: 'https://www.ebuyer.com/1133947-xbox-series-s-all-digital-console-rrs-00007',
'https://www.ebuyer.com/1133947-xbox-series-s-all-digital-console-rrs-00007' },
}, {
{ brand: 'amd',
brand: 'amd', model: '5600x',
model: '5600x', series: 'ryzen5600',
series: 'ryzen5600', url:
url: 'https://www.ebuyer.com/1126988-amd-ryzen-5-5600x-am4-processor-100-100000065box',
'https://www.ebuyer.com/1126988-amd-ryzen-5-5600x-am4-processor-100-100000065box' },
}, {
{ brand: 'amd',
brand: 'amd', model: '5800x',
model: '5800x', series: 'ryzen5800',
series: 'ryzen5800', url:
url: 'https://www.ebuyer.com/1126987-amd-ryzen-7-5800x-am4-processor-100-100000063wof',
'https://www.ebuyer.com/1126987-amd-ryzen-7-5800x-am4-processor-100-100000063wof' },
}, {
{ brand: 'amd',
brand: 'amd', model: '5900x',
model: '5900x', series: 'ryzen5900',
series: 'ryzen5900', url:
url: 'https://www.ebuyer.com/1126986-amd-ryzen-9-5900x-am4-processor-100-100000061wof',
'https://www.ebuyer.com/1126986-amd-ryzen-9-5900x-am4-processor-100-100000061wof' },
}, {
{ brand: 'amd',
brand: 'amd', model: '5950x',
model: '5950x', series: 'ryzen5950',
series: 'ryzen5950', url:
url: 'https://www.ebuyer.com/1126985-amd-ryzen-9-5950x-am4-processor-100-100000059wof',
'https://www.ebuyer.com/1126985-amd-ryzen-9-5950x-am4-processor-100-100000059wof' },
} ],
], linksBuilder: {
linksBuilder: { builder: getProductLinksBuilder({
builder: getProductLinksBuilder({ productsSelector: '#list-view .listing-product',
productsSelector: '#list-view .listing-product', sitePrefix: 'https://www.ebuyer.com',
sitePrefix: 'https://www.ebuyer.com', titleSelector: '.listing-product-title',
titleSelector: '.listing-product-title', urlSelector: 'a[href]',
urlSelector: 'a[href]' }),
}), urls: [
urls: [ {
{ series: 'rx6800',
series: 'rx6800', url:
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-AMD/subcat/AMD-RX-6800',
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-AMD/subcat/AMD-RX-6800' },
}, {
{ series: 'rx6800xt',
series: 'rx6800xt', url:
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-AMD/subcat/AMD-RX-6800-XT',
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-AMD/subcat/AMD-RX-6800-XT' },
}, {
{ series: 'rx6900xt',
series: 'rx6900xt', url:
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-AMD/subcat/AMD-RX-6900-XT',
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-AMD/subcat/AMD-RX-6900-XT' },
}, {
{ series: '3060ti',
series: '3060ti', url:
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3060-Ti',
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3060-Ti' },
}, {
{ series: '3070',
series: '3070', url:
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3070',
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3070' },
}, {
{ series: '3080',
series: '3080', url:
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3080',
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3080' },
}, {
{ series: '3090',
series: '3090', url:
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3090',
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3090' },
} ],
] },
}, name: 'ebuyer',
name: 'ebuyer', waitUntil: 'domcontentloaded',
waitUntil: 'domcontentloaded'
}; };
+66 -67
View File
@@ -1,71 +1,70 @@
import {Store} from './store'; import {Store} from './store';
export const Elcorteingles: Store = { export const Elcorteingles: Store = {
backoffStatusCodes: [403, 429, 503], backoffStatusCodes: [403, 429, 503],
currency: '€', currency: '€',
labels: { labels: {
// Captcha: { // Captcha: {
// container: 'body', // container: 'body',
// text: [ // text: [
// 'geben sie die unten angezeigten zeichen ein', // 'geben sie die unten angezeigten zeichen ein',
// 'geben sie die zeichen unten ein' // 'geben sie die zeichen unten ein'
// ] // ]
// }, // },
inStock: [ inStock: [
{ {
container: container: '.product_detail-purchase.mb-2.c12 .js-add-cart-text',
'.product_detail-purchase.mb-2.c12 .js-add-cart-text', text: ['a la cesta'],
text: ['a la cesta'] },
} ],
], maxPrice: {
maxPrice: { container: '.product_detail-buy-price-container .price._big',
container: '.product_detail-buy-price-container .price._big', euroFormat: true,
euroFormat: true },
}, outOfStock: [
outOfStock: [ {
{ container:
container: '.c12.mt-2.product_detail-add_to_cart.one_click_enabled .c12.button._normal.js-buy-button._sold_out.view-page._disabled',
'.c12.mt-2.product_detail-add_to_cart.one_click_enabled .c12.button._normal.js-buy-button._sold_out.view-page._disabled', text: ['Agotado'],
text: ['Agotado'] },
}, {
{ container:
container: '.product_detail-purchase.mb-2.c12 .c12.button._normal.js-buy-button._sold_out.view-page._disabled',
'.product_detail-purchase.mb-2.c12 .c12.button._normal.js-buy-button._sold_out.view-page._disabled', text: ['No disponible'],
text: ['No disponible'] },
} ],
] },
}, links: [
links: [ {
{ brand: 'test:brand',
brand: 'test:brand', model: 'test:model',
model: 'test:model', series: 'test:series',
series: 'test:series', url: 'https://www.elcorteingles.es/moda/A26324406/',
url: 'https://www.elcorteingles.es/moda/A26324406/' },
}, {
{ brand: 'sony',
brand: 'sony', model: 'ps5 console',
model: 'ps5 console', series: 'sonyps5c',
series: 'sonyps5c', url: 'https://www.elcorteingles.es/videojuegos/A37046604',
url: 'https://www.elcorteingles.es/videojuegos/A37046604' },
}, {
{ brand: 'sony',
brand: 'sony', model: 'ps5 digital',
model: 'ps5 digital', series: 'sonyps5de',
series: 'sonyps5de', url: 'https://www.elcorteingles.es/videojuegos/A37046605',
url: 'https://www.elcorteingles.es/videojuegos/A37046605' },
}, {
{ brand: 'microsoft',
brand: 'microsoft', model: 'xbox series x',
model: 'xbox series x', series: 'xboxsx',
series: 'xboxsx', url: 'https://www.elcorteingles.es/videojuegos/A37047078',
url: 'https://www.elcorteingles.es/videojuegos/A37047078' },
}, {
{ brand: 'microsoft',
brand: 'microsoft', model: 'xbox series s',
model: 'xbox series s', series: 'xboxss',
series: 'xboxss', url: 'https://www.elcorteingles.es/videojuegos/A37047080',
url: 'https://www.elcorteingles.es/videojuegos/A37047080' },
} ],
], name: 'elcorteingles',
name: 'elcorteingles'
}; };
+84 -84
View File
@@ -1,88 +1,88 @@
import {Store} from './store'; import {Store} from './store';
export const Eprice: Store = { export const Eprice: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.topSideDx', container: '.topSideDx',
text: ['disponibile', 'pochi pezzi'] text: ['disponibile', 'pochi pezzi'],
}, },
maxPrice: { maxPrice: {
container: '#PrezzoClasic span[class*="big"]', container: '#PrezzoClasic span[class*="big"]',
euroFormat: true euroFormat: true,
}, },
outOfStock: { outOfStock: {
container: '.dispo', container: '.dispo',
text: ['ESAURITO O FUORI PROD.'] text: ['ESAURITO O FUORI PROD.'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.eprice.it/cuffie-con-microfono-APPLE/d-9030906' url: 'https://www.eprice.it/cuffie-con-microfono-APPLE/d-9030906',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: 'https://www.eprice.it/schede-video-MSI/d-14039974' url: 'https://www.eprice.it/schede-video-MSI/d-14039974',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: 'https://www.eprice.it/schede-video-ASUS/d-14042082' url: 'https://www.eprice.it/schede-video-ASUS/d-14042082',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix', model: 'strix',
series: '3070', series: '3070',
url: 'https://www.eprice.it/schede-video-ASUS/d-14039878' url: 'https://www.eprice.it/schede-video-ASUS/d-14039878',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3070', series: '3070',
url: 'https://www.eprice.it/schede-video-ASUS/d-14039876' url: 'https://www.eprice.it/schede-video-ASUS/d-14039876',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming', model: 'gaming',
series: '3070', series: '3070',
url: 'https://www.eprice.it/schede-video-MSI/d-14039972' url: 'https://www.eprice.it/schede-video-MSI/d-14039972',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: 'https://www.eprice.it/schede-video-MSI/d-14039974' url: 'https://www.eprice.it/schede-video-MSI/d-14039974',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 2x oc', model: 'ventus 2x oc',
series: '3070', series: '3070',
url: 'https://www.eprice.it/schede-video-MSI/d-14039973' url: 'https://www.eprice.it/schede-video-MSI/d-14039973',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'gaming', model: 'gaming',
series: '3070', series: '3070',
url: 'https://www.eprice.it/schede-video-ZOTAC/d-13979806' url: 'https://www.eprice.it/schede-video-ZOTAC/d-13979806',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.eprice.it/playstation-5-SONY/d-13981612' url: 'https://www.eprice.it/playstation-5-SONY/d-13981612',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.eprice.it/playstation-5-SONY/d-13981613' url: 'https://www.eprice.it/playstation-5-SONY/d-13981613',
} },
], ],
name: 'eprice' name: 'eprice',
}; };
+102 -102
View File
@@ -1,106 +1,106 @@
import {Store} from './store'; import {Store} from './store';
export const Equippr: Store = { export const Equippr: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: 'buybox--button-container', container: 'buybox--button-container',
text: ['in den warenkorb'] text: ['in den warenkorb'],
}, },
maxPrice: { maxPrice: {
container: '.product--price', container: '.product--price',
euroFormat: true euroFormat: true,
}, },
outOfStock: { outOfStock: {
container: '.product--buybox', container: '.product--buybox',
text: ['bald verfügbar'] text: ['bald verfügbar'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://www.equippr.de/amd-ryzen-5-2600x-6x-3-60-ghz-box-yd260xbcafbox-2000034.html' 'https://www.equippr.de/amd-ryzen-5-2600x-6x-3-60-ghz-box-yd260xbcafbox-2000034.html',
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'dual oc', model: 'dual oc',
series: '3060ti', series: '3060ti',
url: url:
'https://www.equippr.de/asus-geforce-rtx-3060-ti-dual-8-gb-gddr6-retail-2066580.html' 'https://www.equippr.de/asus-geforce-rtx-3060-ti-dual-8-gb-gddr6-retail-2066580.html',
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3060ti', series: '3060ti',
url: url:
'https://www.equippr.de/inno3d-geforce-rtx-3060-ti-ichill-x3-8-gb-gddr6-2066593.html' 'https://www.equippr.de/inno3d-geforce-rtx-3060-ti-ichill-x3-8-gb-gddr6-2066593.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus', model: 'aorus',
series: '3060ti', series: '3060ti',
url: url:
'https://www.equippr.de/gigabyte-geforce-rtx-3060-ti-aorus-8-gb-gddr6-retail-2066569.html' 'https://www.equippr.de/gigabyte-geforce-rtx-3060-ti-aorus-8-gb-gddr6-retail-2066569.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3060ti', series: '3060ti',
url: url:
'https://www.equippr.de/msi-geforce-rtx-3060-ti-gaming-x-trio-8-gb-gddr6-retail-2066573.html' 'https://www.equippr.de/msi-geforce-rtx-3060-ti-gaming-x-trio-8-gb-gddr6-retail-2066573.html',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 2x', model: 'ventus 2x',
series: '3060ti', series: '3060ti',
url: url:
'https://www.equippr.de/msi-geforce-rtx-3060-ti-ventus-2x-oc-8-gb-gddr6-retail-2066574.html' 'https://www.equippr.de/msi-geforce-rtx-3060-ti-ventus-2x-oc-8-gb-gddr6-retail-2066574.html',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: url:
'https://www.equippr.de/zotac-geforce-rtx-3070-twin-edge-oc-8-gb-gddr6-retail-2064130.html' 'https://www.equippr.de/zotac-geforce-rtx-3070-twin-edge-oc-8-gb-gddr6-retail-2064130.html',
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge', model: 'twin edge',
series: '3070', series: '3070',
url: url:
'https://www.equippr.de/zotac-geforce-rtx-3070-twin-edge-8-gb-gddr6-retail-2060897.html' 'https://www.equippr.de/zotac-geforce-rtx-3070-twin-edge-8-gb-gddr6-retail-2060897.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle', model: 'eagle',
series: '3070', series: '3070',
url: url:
'https://www.equippr.de/gigabyte-geforce-rtx-3070-eagle-8-gb-gddr6-retail-2063884.html' 'https://www.equippr.de/gigabyte-geforce-rtx-3070-eagle-8-gb-gddr6-retail-2063884.html',
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3070', series: '3070',
url: url:
'https://www.equippr.de/gigabyte-geforce-rtx-3070-eagle-oc-8-gb-gddr6-retail-2063882.html' 'https://www.equippr.de/gigabyte-geforce-rtx-3070-eagle-oc-8-gb-gddr6-retail-2063882.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: url:
'https://www.equippr.de/evga-geforce-rtx-3080-xc3-ultra-gaming-10-gb-gddr6x-retail-2061393.html' 'https://www.equippr.de/evga-geforce-rtx-3080-xc3-ultra-gaming-10-gb-gddr6x-retail-2061393.html',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: url:
'https://www.equippr.de/evga-geforce-rtx-3080-xc3-gaming-10-gb-gddr6x-retail-2061391.html' 'https://www.equippr.de/evga-geforce-rtx-3080-xc3-gaming-10-gb-gddr6x-retail-2061391.html',
} },
], ],
name: 'equippr' name: 'equippr',
}; };
+57 -57
View File
@@ -1,61 +1,61 @@
import {Store} from './store'; import {Store} from './store';
export const EuronicsDE: Store = { export const EuronicsDE: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.buy-btn--cart-text', container: '.buy-btn--cart-text',
text: ['Warenkorb'] text: ['Warenkorb'],
}, },
maxPrice: { maxPrice: {
container: '.price--content', container: '.price--content',
euroFormat: true euroFormat: true,
}, },
outOfStock: { outOfStock: {
container: container:
'.product--buybox .alert.is--error.is--rounded .alert--content', '.product--buybox .alert.is--error.is--rounded .alert--content',
text: [ text: [
'Artikel steht derzeit nicht zur Verfügung', 'Artikel steht derzeit nicht zur Verfügung',
'Morgen im Laufe des Morgens und nur online unter' 'Morgen im Laufe des Morgens und nur online unter',
] ],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: url:
'https://www.euronics.de/telefon-und-navigation/festnetz/schnurlose-telefone/kx-tg6721gb-schnurlostelefon-mit-anrufbeantworter-schwarz-4051168442801' 'https://www.euronics.de/telefon-und-navigation/festnetz/schnurlose-telefone/kx-tg6721gb-schnurlostelefon-mit-anrufbeantworter-schwarz-4051168442801',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: url:
'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/xbox-series-x/spielekonsole/xbox-series-s-512gb-konsole-4061856838076' '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', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: url:
'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/xbox-series-x/spielekonsole/xbox-series-x-1tb-konsole-4061856838045' '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', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: url:
'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/playstation-5/spielekonsole/playstation-5-digital-edition-konsole-4061856837833' 'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/playstation-5/spielekonsole/playstation-5-digital-edition-konsole-4061856837833',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: url:
'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/playstation-5/spielekonsole/playstation-5-konsole-4061856837826' 'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/playstation-5/spielekonsole/playstation-5-konsole-4061856837826',
} },
], ],
name: 'euronics-de' name: 'euronics-de',
}; };
+38 -38
View File
@@ -1,42 +1,42 @@
import {Store} from './store'; import {Store} from './store';
export const Euronics: Store = { export const Euronics: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.purchaseButtonsWidth', container: '.purchaseButtonsWidth',
text: ['Aggiungi al carrello'] text: ['Aggiungi al carrello'],
} },
}, },
links: [ links: [
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: url:
'https://www.euronics.it/console/sony-computer/playstation-5/eProd202008906' 'https://www.euronics.it/console/sony-computer/playstation-5/eProd202008906',
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: url:
'https://www.euronics.it/console/sony-computer/playstation-5-digital-edition/eProd202008907' 'https://www.euronics.it/console/sony-computer/playstation-5-digital-edition/eProd202008907',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: url:
'https://www.euronics.it/console/microsoft/xbox-series-x-1tb-it-italy-sxto/eProd202008981' 'https://www.euronics.it/console/microsoft/xbox-series-x-1tb-it-italy-sxto/eProd202008981',
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: url:
'https://www.euronics.it/console/microsoft/xbox-series-s-512gb-it-italy-ltsn/eProd202008982' 'https://www.euronics.it/console/microsoft/xbox-series-s-512gb-it-italy-ltsn/eProd202008982',
} },
], ],
name: 'euronics' name: 'euronics',
}; };
+109 -110
View File
@@ -1,114 +1,113 @@
import {Store} from './store'; import {Store} from './store';
export const Evatech: Store = { export const Evatech: Store = {
backoffStatusCodes: [403, 429], backoffStatusCodes: [403, 429],
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: '.product_detail_add_to_cart > span:nth-child(2)', container: '.product_detail_add_to_cart > span:nth-child(2)',
text: ['ADD TO CART'] text: ['ADD TO CART'],
}, },
maxPrice: { maxPrice: {
container: '.product_detail_price', container: '.product_detail_price',
euroFormat: false euroFormat: false,
}, },
outOfStock: { outOfStock: {
container: '.product_detail_add_to_cart > div:nth-child(2)', container: '.product_detail_add_to_cart > div:nth-child(2)',
text: ['SOLD OUT'] text: ['SOLD OUT'],
} },
}, },
links: [ links: [
{ {
brand: 'colorful', brand: 'colorful',
model: 'igame ultra oc', model: 'igame ultra oc',
series: '3080', series: '3080',
url: url:
'https://evatech.com.au/product/6511/colorful-igame-rtx-3080-ultra-oc-10g' 'https://evatech.com.au/product/6511/colorful-igame-rtx-3080-ultra-oc-10g',
}, },
{ {
brand: 'colorful', brand: 'colorful',
model: 'igame advanced oc', model: 'igame advanced oc',
series: '3080', series: '3080',
url: url:
'https://evatech.com.au/product/6507/colorful-igame-rtx-3080-advanced-oc-10g' 'https://evatech.com.au/product/6507/colorful-igame-rtx-3080-advanced-oc-10g',
}, },
{ {
brand: 'colorful', brand: 'colorful',
model: 'igame vulcan oc', model: 'igame vulcan oc',
series: '3080', series: '3080',
url: url:
'https://evatech.com.au/product/6514/colorful-igame-rtx-3080-vulcan-oc-10g' 'https://evatech.com.au/product/6514/colorful-igame-rtx-3080-vulcan-oc-10g',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'suprim x', model: 'suprim x',
series: '3080', series: '3080',
url: url:
'https://evatech.com.au/product/6574/msi-geforce-rtx-3080-suprim-x-10g' 'https://evatech.com.au/product/6574/msi-geforce-rtx-3080-suprim-x-10g',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: url:
'https://evatech.com.au/product/6505/msi-rtx-3080-gamingx-trio-10g-oc' 'https://evatech.com.au/product/6505/msi-rtx-3080-gamingx-trio-10g-oc',
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: url: 'https://evatech.com.au/product/6494/msi-rtx-3080-ventus-3x-10g-oc',
'https://evatech.com.au/product/6494/msi-rtx-3080-ventus-3x-10g-oc' },
}, {
{ brand: 'zotac',
brand: 'zotac', model: 'trinity',
model: 'trinity', series: '3080',
series: '3080', url:
url: 'https://evatech.com.au/product/6496/zotac-rtx3080-trinity-10gb-gddr6x',
'https://evatech.com.au/product/6496/zotac-rtx3080-trinity-10gb-gddr6x' },
}, {
{ brand: 'colorful',
brand: 'colorful', model: 'igame advanced oc',
model: 'igame advanced oc', series: '3090',
series: '3090', url:
url: 'https://evatech.com.au/product/6513/colorful-igame-rtx-3090-advance-oc-24g',
'https://evatech.com.au/product/6513/colorful-igame-rtx-3090-advance-oc-24g' },
}, {
{ brand: 'msi',
brand: 'msi', model: 'ventus 3x oc',
model: 'ventus 3x oc', series: '3090',
series: '3090', url:
url: 'https://evatech.com.au/product/6524/msi-geforce-rtx-3090-ventus-3x-oc-24gb',
'https://evatech.com.au/product/6524/msi-geforce-rtx-3090-ventus-3x-oc-24gb' },
}, {
{ brand: 'msi',
brand: 'msi', model: 'gaming x trio',
model: 'gaming x trio', series: '3090',
series: '3090', url:
url: 'https://evatech.com.au/product/6550/msi-rtx-3090-gaming-x-trio-24gb',
'https://evatech.com.au/product/6550/msi-rtx-3090-gaming-x-trio-24gb' },
}, {
{ brand: 'msi',
brand: 'msi', model: 'suprim x',
model: 'suprim x', series: '3090',
series: '3090', url:
url: 'https://evatech.com.au/product/6573/msi-geforce-rtx-3090-suprim-x-24g',
'https://evatech.com.au/product/6573/msi-geforce-rtx-3090-suprim-x-24g' },
}, {
{ brand: 'amd',
brand: 'amd', model: '5900x',
model: '5900x', series: 'ryzen5900',
series: 'ryzen5900', url:
url: 'https://evatech.com.au/product/6558/amd-ryzen-9-5900x-12core-24-thread-base37ghz-boost48ghz-preorder',
'https://evatech.com.au/product/6558/amd-ryzen-9-5900x-12core-24-thread-base37ghz-boost48ghz-preorder' },
}, {
{ brand: 'amd',
brand: 'amd', model: '5800x',
model: '5800x', series: 'ryzen5800',
series: 'ryzen5800', url:
url: 'https://evatech.com.au/product/6557/amd-ryzen-7-5800x-8core-16-thread-base38ghz-boost47ghz-preorder',
'https://evatech.com.au/product/6557/amd-ryzen-7-5800x-8core-16-thread-base38ghz-boost47ghz-preorder' },
} ],
], name: 'evatech',
name: 'evatech'
}; };
+70 -70
View File
@@ -1,74 +1,74 @@
import {Store} from './store'; import {Store} from './store';
export const EvgaEu: Store = { export const EvgaEu: Store = {
currency: '€', currency: '€',
labels: { labels: {
inStock: { inStock: {
container: '.product-buy-specs', container: '.product-buy-specs',
text: ['add to cart'] text: ['add to cart'],
} },
}, },
links: [ links: [
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://eu.evga.com/products/product.aspx?pn=10G-P5-3895-KR' url: 'https://eu.evga.com/products/product.aspx?pn=10G-P5-3895-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://eu.evga.com/products/product.aspx?pn=10G-P5-3897-KR' url: 'https://eu.evga.com/products/product.aspx?pn=10G-P5-3897-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://eu.evga.com/products/product.aspx?pn=10G-P5-3883-KR' url: 'https://eu.evga.com/products/product.aspx?pn=10G-P5-3883-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://eu.evga.com/products/product.aspx?pn=10G-P5-3881-KR' url: 'https://eu.evga.com/products/product.aspx?pn=10G-P5-3881-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://eu.evga.com/products/product.aspx?pn=10G-P5-3885-KR' url: 'https://eu.evga.com/products/product.aspx?pn=10G-P5-3885-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://eu.evga.com/products/product.aspx?pn=24G-P5-3985-KR' url: 'https://eu.evga.com/products/product.aspx?pn=24G-P5-3985-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://eu.evga.com/products/product.aspx?pn=24G-P5-3987-KR' url: 'https://eu.evga.com/products/product.aspx?pn=24G-P5-3987-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://eu.evga.com/products/product.aspx?pn=24G-P5-3973-KR' url: 'https://eu.evga.com/products/product.aspx?pn=24G-P5-3973-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3090', series: '3090',
url: 'https://eu.evga.com/products/product.aspx?pn=24G-P5-3971-KR' url: 'https://eu.evga.com/products/product.aspx?pn=24G-P5-3971-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3090', series: '3090',
url: 'https://eu.evga.com/products/product.aspx?pn=24G-P5-3975-KR' url: 'https://eu.evga.com/products/product.aspx?pn=24G-P5-3975-KR',
} },
], ],
name: 'evga-eu' name: 'evga-eu',
}; };
+118 -118
View File
@@ -1,122 +1,122 @@
import {Store} from './store'; import {Store} from './store';
export const Evga: Store = { export const Evga: Store = {
currency: '$', currency: '$',
labels: { labels: {
inStock: { inStock: {
container: '.product-buy-specs', container: '.product-buy-specs',
text: ['add to cart'] text: ['add to cart'],
} },
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.evga.com/products/product.aspx?pn=06G-P4-2065-KR' url: 'https://www.evga.com/products/product.aspx?pn=06G-P4-2065-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc gaming', model: 'xc gaming',
series: '3060ti', series: '3060ti',
url: 'https://www.evga.com/products/product.aspx?pn=08G-P5-3663-KR' url: 'https://www.evga.com/products/product.aspx?pn=08G-P5-3663-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3060ti', series: '3060ti',
url: 'https://www.evga.com/products/product.aspx?pn=08G-P5-3665-KR' url: 'https://www.evga.com/products/product.aspx?pn=08G-P5-3665-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3060ti', series: '3060ti',
url: 'https://www.evga.com/products/product.aspx?pn=08G-P5-3667-KR' url: 'https://www.evga.com/products/product.aspx?pn=08G-P5-3667-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3070', series: '3070',
url: 'https://www.evga.com/products/product.aspx?pn=08G-P5-3751-KR' url: 'https://www.evga.com/products/product.aspx?pn=08G-P5-3751-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3070', series: '3070',
url: 'https://www.evga.com/products/product.aspx?pn=08G-P5-3755-KR' url: 'https://www.evga.com/products/product.aspx?pn=08G-P5-3755-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3070', series: '3070',
url: 'https://www.evga.com/products/product.aspx?pn=08G-P5-3767-KR' url: 'https://www.evga.com/products/product.aspx?pn=08G-P5-3767-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.evga.com/products/product.aspx?pn=10G-P5-3881-KR' url: 'https://www.evga.com/products/product.aspx?pn=10G-P5-3881-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.evga.com/products/product.aspx?pn=10G-P5-3897-KR' url: 'https://www.evga.com/products/product.aspx?pn=10G-P5-3897-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra hydro copper', model: 'ftw3 ultra hydro copper',
series: '3080', series: '3080',
url: 'https://www.evga.com/products/product.aspx?pn=10G-P5-3897-KR' url: 'https://www.evga.com/products/product.aspx?pn=10G-P5-3897-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.evga.com/products/product.aspx?pn=10G-P5-3895-KR' url: 'https://www.evga.com/products/product.aspx?pn=10G-P5-3895-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.evga.com/products/product.aspx?pn=10G-P5-3883-KR' url: 'https://www.evga.com/products/product.aspx?pn=10G-P5-3883-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.evga.com/products/product.aspx?pn=10G-P5-3885-KR' url: 'https://www.evga.com/products/product.aspx?pn=10G-P5-3885-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3090', series: '3090',
url: 'https://www.evga.com/products/product.aspx?pn=24G-P5-3971-KR' url: 'https://www.evga.com/products/product.aspx?pn=24G-P5-3971-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://www.evga.com/products/product.aspx?pn=24G-P5-3987-KR' url: 'https://www.evga.com/products/product.aspx?pn=24G-P5-3987-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://www.evga.com/products/product.aspx?pn=24G-P5-3985-KR' url: 'https://www.evga.com/products/product.aspx?pn=24G-P5-3985-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://www.evga.com/products/product.aspx?pn=24G-P5-3973-KR' url: 'https://www.evga.com/products/product.aspx?pn=24G-P5-3973-KR',
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3090', series: '3090',
url: 'https://www.evga.com/products/product.aspx?pn=24G-P5-3975-KR' url: 'https://www.evga.com/products/product.aspx?pn=24G-P5-3975-KR',
} },
], ],
name: 'evga' name: 'evga',
}; };
+53 -55
View File
@@ -1,59 +1,57 @@
import {Store} from './store'; import {Store} from './store';
export const Expert: Store = { export const Expert: Store = {
backoffStatusCodes: [403, 429, 503], backoffStatusCodes: [403, 429, 503],
currency: '€', currency: '€',
labels: { labels: {
inStock: [ inStock: [
{ {
container: 'span.widget-ArticleStatus-buttonText', container: 'span.widget-ArticleStatus-buttonText',
text: ['In den Warenkorb'] text: ['In den Warenkorb'],
} },
], ],
maxPrice: { maxPrice: {
container: container: '.widget-Container-subContent .widget-ArticlePrice-price',
'.widget-Container-subContent .widget-ArticlePrice-price', euroFormat: false,
euroFormat: false },
}, outOfStock: [
outOfStock: [ {
{ container:
container: 'span[style="font-size: 14pt;"] > span[style="color: #ff5e19;"]',
'span[style="font-size: 14pt;"] > span[style="color: #ff5e19;"]', text: ['Das von Ihnen ausgewählte Produkt ist ausverkauft'],
text: ['Das von Ihnen ausgewählte Produkt ist ausverkauft'] },
}, {
{ container: 'span.widget-ArticleStatus-statusPointText',
container: 'span.widget-ArticleStatus-statusPointText', text: ['Artikel ist derzeit nicht verfügbar'],
text: ['Artikel ist derzeit nicht verfügbar'] },
} ],
] },
}, links: [
links: [ {
{ brand: 'test:brand',
brand: 'test:brand', model: 'test:model',
model: 'test:model', series: 'test:series',
series: 'test:series', url: 'https://www.expert.de/shop/11364114744-ps4-pro-1tb-jet-black.html',
url: },
'https://www.expert.de/shop/11364114744-ps4-pro-1tb-jet-black.html' {
}, brand: 'sony',
{ model: 'ps5 console',
brand: 'sony', series: 'sonyps5c',
model: 'ps5 console', url: 'https://www.expert.de/shop/11364129744-playstation-r-5.html',
series: 'sonyps5c', },
url: 'https://www.expert.de/shop/11364129744-playstation-r-5.html' {
}, brand: 'sony',
{ model: 'ps5 digital',
brand: 'sony', series: 'sonyps5de',
model: 'ps5 digital', url:
series: 'sonyps5de', 'https://www.expert.de/shop/11364133744-playstation-r-5-digital-edition.html',
url: },
'https://www.expert.de/shop/11364133744-playstation-r-5-digital-edition.html' {
}, brand: 'microsoft',
{ model: 'xbox series s',
brand: 'microsoft', series: 'xboxss',
model: 'xbox series s', url: 'https://www.expert.de/shop/11350018530-xbox-series-s.html',
series: 'xboxss', },
url: 'https://www.expert.de/shop/11350018530-xbox-series-s.html' ],
} name: 'expert',
],
name: 'expert'
}; };

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