feat: fix metadata in logging, lint prettier, typed Models (#747)

This commit is contained in:
Jef LeCompte
2020-11-10 10:38:14 -05:00
committed by GitHub
parent 0bf9ba2e18
commit 318e626e78
78 changed files with 2416 additions and 1021 deletions
+2 -2
View File
@@ -70,11 +70,11 @@
"xo": "^0.33.1" "xo": "^0.33.1"
}, },
"xo": { "xo": {
"prettier": true,
"rules": { "rules": {
"sort-imports": "error", "sort-imports": "error",
"sort-keys": "error", "sort-keys": "error",
"sort-vars": "error", "sort-vars": "error"
"max-params": 0
} }
}, },
"husky": { "husky": {
+9 -8
View File
@@ -8,16 +8,17 @@ export const banner = {
██████ ▄▄▄█████▓ ██▀███ ▓█████ ▓█████▄▄▄█████▓ ███▄ ▄███▓▓█████ ██▀███ ▄████▄ ██░ ██ ▄▄▄ ███▄ █ ▄▄▄█████▓ ██████ ▄▄▄█████▓ ██▀███ ▓█████ ▓█████▄▄▄█████▓ ███▄ ▄███▓▓█████ ██▀███ ▄████▄ ██░ ██ ▄▄▄ ███▄ █ ▄▄▄█████▓
▒██ ▒ ▓ ██▒ ▓▒▓██ ▒ ██▒▓█ ▀ ▓█ ▀▓ ██▒ ▓▒▓██▒▀█▀ ██▒▓█ ▀ ▓██ ▒ ██▒▒██▀ ▀█ ▓██░ ██▒▒████▄ ██ ▀█ █ ▓ ██▒ ▓▒ ▒██ ▒ ▓ ██▒ ▓▒▓██ ▒ ██▒▓█ ▀ ▓█ ▀▓ ██▒ ▓▒▓██▒▀█▀ ██▒▓█ ▀ ▓██ ▒ ██▒▒██▀ ▀█ ▓██░ ██▒▒████▄ ██ ▀█ █ ▓ ██▒ ▓▒
░ ▓██▄ ▒ ▓██░ ▒░▓██ ░▄█ ▒▒███ ▒███ ▒ ▓██░ ▒░▓██ ▓██░▒███ ▓██ ░▄█ ▒▒▓█ ▄ ▒██▀▀██░▒██ ▀█▄ ▓██ ▀█ ██▒▒ ▓██░ ▒░ ░ ▓██▄ ▒ ▓██░ ▒░▓██ ░▄█ ▒▒███ ▒███ ▒ ▓██░ ▒░▓██ ▓██░▒███ ▓██ ░▄█ ▒▒▓█ ▄ ▒██▀▀██░▒██ ▀█▄ ▓██ ▀█ ██▒▒ ▓██░ ▒░
▒ ██▒░ ▓██▓ ░ ▒██▀▀█▄ ▒▓█ ▄ ▒▓█ ▄░ ▓██▓ ░ ▒██ ▒██ ▒▓█ ▄ ▒██▀▀█▄ ▒▓▓▄ ▄██▒░▓█ ░██ ░██▄▄▄▄██ ▓██▒ ▐▌██▒░ ▓██▓ ░ ▒ ██▒░ ▓██▓ ░ ▒██▀▀█▄ ▒▓█ ▄ ▒▓█ ▄░ ▓██▓ ░ ▒██ ▒██ ▒▓█ ▄ ▒██▀▀█▄ ▒▓▓▄ ▄██▒░▓█ ░██ ░██▄▄▄▄██ ▓██▒ ▐▌██▒░ ▓██▓ ░
▒██████▒▒ ▒██▒ ░ ░██▓ ▒██▒░▒████▒░▒████▒ ▒██▒ ░ ▒██▒ ░██▒░▒████▒░██▓ ▒██▒▒ ▓███▀ ░░▓█▒░██▓ ▓█ ▓██▒▒██░ ▓██░ ▒██▒ ░ ▒██████▒▒ ▒██▒ ░ ░██▓ ▒██▒░▒████▒░▒████▒ ▒██▒ ░ ▒██▒ ░██▒░▒████▒░██▓ ▒██▒▒ ▓███▀ ░░▓█▒░██▓ ▓█ ▓██▒▒██░ ▓██░ ▒██▒ ░
▒ ▒▓▒ ▒ ░ ▒ ░░ ░ ▒▓ ░▒▓░░░ ▒░ ░░░ ▒░ ░ ▒ ░░ ░ ▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░░ ░▒ ▒ ░ ▒ ░░▒░▒ ▒▒ ▓▒█░░ ▒░ ▒ ▒ ▒ ░░ ▒ ▒▓▒ ▒ ░ ▒ ░░ ░ ▒▓ ░▒▓░░░ ▒░ ░░░ ▒░ ░ ▒ ░░ ░ ▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░░ ░▒ ▒ ░ ▒ ░░▒░▒ ▒▒ ▓▒█░░ ▒░ ▒ ▒ ▒ ░░
░ ░▒ ░ ░ ░ ░▒ ░ ▒░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ▒ ▒ ░▒░ ░ ▒ ▒▒ ░░ ░░ ░ ▒░ ░ ░ ░▒ ░ ░ ░ ░▒ ░ ▒░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ▒ ▒ ░▒░ ░ ▒ ▒▒ ░░ ░░ ░ ▒░ ░
░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
${version}`, ${version}`,
render(ascii: boolean, hexColor: string) { render(ascii: boolean, hexColor: string) {
return chalk.hex(hexColor).bold(ascii ? this.asciiVersion : this.stringVersion); return chalk
.hex(hexColor)
.bold(ascii ? this.asciiVersion : this.stringVersion);
}, },
stringVersion: `STREETMERCHANT stringVersion: `STREETMERCHANT
${version}` ${version}`
+104 -27
View File
@@ -5,7 +5,12 @@ import path from 'path';
config_({path: path.resolve(__dirname, '../.env')}); config_({path: path.resolve(__dirname, '../.env')});
console.info(banner.render(envOrBoolean(process.env.ASCII_BANNER, false), envOrString(process.env.BANNER_COLOR, '#808080'))); console.info(
banner.render(
envOrBoolean(process.env.ASCII_BANNER, false),
envOrString(process.env.BANNER_COLOR, '#808080')
)
);
/** /**
* Returns environment variable, given array, or default array. * Returns environment variable, given array, or default array.
@@ -13,10 +18,16 @@ console.info(banner.render(envOrBoolean(process.env.ASCII_BANNER, false), envOrS
* @param environment Interested environment variable. * @param environment Interested environment variable.
* @param array Default array. If not set, is `[]`. * @param array Default array. If not set, is `[]`.
*/ */
function envOrArray(environment: string | undefined, array?: string[]): string[] { function envOrArray(
return (environment ? ( environment: string | undefined,
environment.includes('\n') ? environment.split('\n') : environment.split(',') array?: string[]
) : (array ?? [])).map(s => s.trim()); ): string[] {
return (environment
? environment.includes('\n')
? environment.split('\n')
: environment.split(',')
: array ?? []
).map((s) => s.trim());
} }
/** /**
@@ -25,8 +36,11 @@ function envOrArray(environment: string | undefined, array?: string[]): string[]
* @param environment Interested environment variable. * @param environment Interested environment variable.
* @param boolean Default boolean. If not set, is `true`. * @param boolean Default boolean. If not set, is `true`.
*/ */
function envOrBoolean(environment: string | undefined, boolean?: boolean): boolean { function envOrBoolean(
return environment ? environment === 'true' : (boolean ?? true); environment: string | undefined,
boolean?: boolean
): boolean {
return environment ? environment === 'true' : boolean ?? true;
} }
/** /**
@@ -36,7 +50,7 @@ function envOrBoolean(environment: string | undefined, boolean?: boolean): boole
* @param string Default string. If not set, is `''`. * @param string Default string. If not set, is `''`.
*/ */
function envOrString(environment: string | undefined, string?: string): string { function envOrString(environment: string | undefined, string?: string): string {
return environment ? environment : (string ?? ''); return environment ? environment : string ?? '';
} }
/** /**
@@ -46,7 +60,7 @@ function envOrString(environment: string | undefined, string?: string): string {
* @param number Default number. If not set, is `0`. * @param number Default number. If not set, is `0`.
*/ */
function envOrNumber(environment: string | undefined, number?: number): number { function envOrNumber(environment: string | undefined, number?: number): number {
return environment ? Number(environment) : (number ?? 0); return environment ? Number(environment) : number ?? 0;
} }
/** /**
@@ -61,14 +75,24 @@ function envOrNumber(environment: string | undefined, number?: number): number {
* @param environmentMax Max environment variable of Min/Max pair. * @param environmentMax Max environment variable of Min/Max pair.
* @param number Default number. If not set, is `0`. * @param number Default number. If not set, is `0`.
*/ */
function envOrNumberMin(environmentMin: string | undefined, environmentMax: string | undefined, number?: number) { function envOrNumberMin(
environmentMin: string | undefined,
environmentMax: string | undefined,
number?: number
) {
if (environmentMin || environmentMax) { if (environmentMin || environmentMax) {
if (environmentMin && environmentMax) { if (environmentMin && environmentMax) {
return Number(Number(environmentMin) < Number(environmentMax) ? environmentMin : environmentMax); return Number(
Number(environmentMin) < Number(environmentMax)
? environmentMin
: environmentMax
);
} }
if (environmentMax) { if (environmentMax) {
return Number(environmentMax) < (number ?? 0) ? Number(environmentMax) : (number ?? 0); return Number(environmentMax) < (number ?? 0)
? Number(environmentMax)
: number ?? 0;
} }
if (environmentMin) { if (environmentMin) {
@@ -91,14 +115,24 @@ function envOrNumberMin(environmentMin: string | undefined, environmentMax: stri
* @param environmentMax Max environment variable of Min/Max pair. * @param environmentMax Max environment variable of Min/Max pair.
* @param number Default number. If not set, is `0`. * @param number Default number. If not set, is `0`.
*/ */
function envOrNumberMax(environmentMin: string | undefined, environmentMax: string | undefined, number?: number) { function envOrNumberMax(
environmentMin: string | undefined,
environmentMax: string | undefined,
number?: number
) {
if (environmentMin || environmentMax) { if (environmentMin || environmentMax) {
if (environmentMin && environmentMax) { if (environmentMin && environmentMax) {
return Number(Number(environmentMin) < Number(environmentMax) ? environmentMax : environmentMax); return Number(
Number(environmentMin) < Number(environmentMax)
? environmentMax
: environmentMax
);
} }
if (environmentMin) { if (environmentMin) {
return Number(environmentMin) > (number ?? 0) ? Number(environmentMin) : (number ?? 0); return Number(environmentMin) > (number ?? 0)
? Number(environmentMin)
: number ?? 0;
} }
if (environmentMax) { if (environmentMax) {
@@ -114,10 +148,26 @@ const browser = {
isIncognito: envOrBoolean(process.env.INCOGNITO, false), isIncognito: envOrBoolean(process.env.INCOGNITO, false),
isTrusted: envOrBoolean(process.env.BROWSER_TRUSTED, false), isTrusted: envOrBoolean(process.env.BROWSER_TRUSTED, false),
lowBandwidth: envOrBoolean(process.env.LOW_BANDWIDTH, false), lowBandwidth: envOrBoolean(process.env.LOW_BANDWIDTH, false),
maxBackoff: envOrNumberMax(process.env.PAGE_BACKOFF_MIN, process.env.PAGE_BACKOFF_MAX, 3600000), maxBackoff: envOrNumberMax(
maxSleep: envOrNumberMax(process.env.PAGE_SLEEP_MIN, process.env.PAGE_SLEEP_MAX, 10000), process.env.PAGE_BACKOFF_MIN,
minBackoff: envOrNumberMin(process.env.PAGE_BACKOFF_MIN, process.env.PAGE_BACKOFF_MAX, 10000), process.env.PAGE_BACKOFF_MAX,
minSleep: envOrNumberMin(process.env.PAGE_SLEEP_MIN, process.env.PAGE_SLEEP_MAX, 5000), 3600000
),
maxSleep: envOrNumberMax(
process.env.PAGE_SLEEP_MIN,
process.env.PAGE_SLEEP_MAX,
10000
),
minBackoff: envOrNumberMin(
process.env.PAGE_BACKOFF_MIN,
process.env.PAGE_BACKOFF_MAX,
10000
),
minSleep: envOrNumberMin(
process.env.PAGE_SLEEP_MIN,
process.env.PAGE_SLEEP_MAX,
5000
),
open: envOrBoolean(process.env.OPEN_BROWSER) open: envOrBoolean(process.env.OPEN_BROWSER)
}; };
@@ -135,7 +185,10 @@ const notifications = {
password: envOrString(process.env.EMAIL_PASSWORD), password: envOrString(process.env.EMAIL_PASSWORD),
smtpAddress: envOrString(process.env.SMTP_ADDRESS), smtpAddress: envOrString(process.env.SMTP_ADDRESS),
smtpPort: envOrNumber(process.env.SMTP_PORT, 25), smtpPort: envOrNumber(process.env.SMTP_PORT, 25),
to: envOrString(process.env.EMAIL_TO, envOrString(process.env.EMAIL_USERNAME)), to: envOrString(
process.env.EMAIL_TO,
envOrString(process.env.EMAIL_USERNAME)
),
username: envOrString(process.env.EMAIL_USERNAME) username: envOrString(process.env.EMAIL_USERNAME)
}, },
mqtt: { mqtt: {
@@ -230,7 +283,9 @@ const page = {
inStockWaitTime: envOrNumber(process.env.IN_STOCK_WAIT_TIME), inStockWaitTime: envOrNumber(process.env.IN_STOCK_WAIT_TIME),
screenshot: envOrBoolean(process.env.SCREENSHOT), screenshot: envOrBoolean(process.env.SCREENSHOT),
timeout: envOrNumber(process.env.PAGE_TIMEOUT, 30000), timeout: envOrNumber(process.env.PAGE_TIMEOUT, 30000),
userAgents: envOrArray(process.env.USER_AGENT, ['Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36']), userAgents: envOrArray(process.env.USER_AGENT, [
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
]),
width: 1920 width: 1920
}; };
@@ -241,7 +296,9 @@ const proxy = {
// Check for deprecated configuration values // Check for deprecated configuration values
if (process.env.MAX_PRICE) { if (process.env.MAX_PRICE) {
console.warn(' MAX_PRICE is deprecated, please use MAX_PRICE_SERIES_{{series}}'); console.warn(
' MAX_PRICE is deprecated, please use MAX_PRICE_SERIES_{{series}}'
);
} }
const store = { const store = {
@@ -264,19 +321,39 @@ const store = {
}, },
microCenterLocation: envOrArray(process.env.MICROCENTER_LOCATION, ['web']), microCenterLocation: envOrArray(process.env.MICROCENTER_LOCATION, ['web']),
showOnlyBrands: envOrArray(process.env.SHOW_ONLY_BRANDS), showOnlyBrands: envOrArray(process.env.SHOW_ONLY_BRANDS),
showOnlyModels: envOrArray(process.env.SHOW_ONLY_MODELS).map(entry => { showOnlyModels: envOrArray(process.env.SHOW_ONLY_MODELS).map((entry) => {
const [name, series] = entry.match(/[^:]+/g) ?? []; const [name, series] = entry.match(/[^:]+/g) ?? [];
return { return {
name: envOrString(name), name: envOrString(name),
series: envOrString(series) series: envOrString(series)
}; };
}), }),
showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, ['3070', '3080', '3090', 'ryzen5600', 'ryzen5800', 'ryzen5900', 'ryzen5950', 'sonyps5c', 'sonyps5de', 'xboxsx', 'xboxss']), showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, [
stores: envOrArray(process.env.STORES, ['nvidia']).map(entry => { '3070',
'3080',
'3090',
'ryzen5600',
'ryzen5800',
'ryzen5900',
'ryzen5950',
'sonyps5c',
'sonyps5de',
'xboxsx',
'xboxss'
]),
stores: envOrArray(process.env.STORES, ['nvidia']).map((entry) => {
const [name, minPageSleep, maxPageSleep] = entry.match(/[^:]+/g) ?? []; const [name, minPageSleep, maxPageSleep] = entry.match(/[^:]+/g) ?? [];
return { return {
maxPageSleep: envOrNumberMax(minPageSleep, maxPageSleep, browser.maxSleep), maxPageSleep: envOrNumberMax(
minPageSleep: envOrNumberMin(minPageSleep, maxPageSleep, browser.minSleep), minPageSleep,
maxPageSleep,
browser.maxSleep
),
minPageSleep: envOrNumberMin(
minPageSleep,
maxPageSleep,
browser.minSleep
),
name: envOrString(name) name: envOrString(name)
}; };
}) })
+12 -5
View File
@@ -12,9 +12,11 @@ import {tryLookupAndLoop} from './store';
puppeteer.use(stealthPlugin()); puppeteer.use(stealthPlugin());
if (config.browser.lowBandwidth) { if (config.browser.lowBandwidth) {
puppeteer.use(resourceBlock({ puppeteer.use(
blockedTypes: new Set(['image', 'font'] as const) resourceBlock({
})); blockedTypes: new Set(['image', 'font'] as const)
})
);
} else { } else {
puppeteer.use(adBlocker); puppeteer.use(adBlocker);
} }
@@ -41,7 +43,9 @@ async function main() {
// Add the address of the proxy server if defined // Add the address of the proxy server if defined
if (config.proxy.address) { if (config.proxy.address) {
args.push(`--proxy-server=http://${config.proxy.address}:${config.proxy.port}`); args.push(
`--proxy-server=http://${config.proxy.address}:${config.proxy.port}`
);
} }
await stop(); await stop();
@@ -91,7 +95,10 @@ async function loopMain() {
try { try {
await main(); await main();
} catch (error) { } catch (error) {
logger.error('✖ something bad happened, resetting streetmerchant in 5 seconds', error); logger.error(
'✖ something bad happened, resetting streetmerchant in 5 seconds',
error
);
setTimeout(loopMain, 5000); setTimeout(loopMain, 5000);
} }
} }
+116 -30
View File
@@ -3,26 +3,24 @@ import chalk from 'chalk';
import {config} from './config'; import {config} from './config';
import winston from 'winston'; import winston from 'winston';
const prettyJson = winston.format.printf(info => { const prettyJson = winston.format.printf((info) => {
const timestamp = new Date().toLocaleTimeString(); const timestamp = new Date().toLocaleTimeString();
if (typeof info.message === 'object') { let out = `${chalk.grey(`[${timestamp}]`)} ${info.level} ${chalk.grey(
info.message = JSON.stringify(info.message, null, 4); '::'
)} ${info.message}`;
if (Object.keys(info.metadata).length > 0) {
out = `${out} ${chalk.magenta(JSON.stringify(info.metadata, null, 2))}`;
} }
if (info.meta) { return out;
return chalk.grey(`[${timestamp}]`) + ` ${info.level} ` + chalk.grey('::') + ` ${info.message} ${chalk.magenta(JSON.stringify(info.meta, null, 2))}`;
}
return chalk.grey(`[${timestamp}]`) + ` ${info.level} ` + chalk.grey('::') + ` ${info.message}`;
}); });
export const logger = winston.createLogger({ export const logger = winston.createLogger({
format: winston.format.combine( format: winston.format.combine(
winston.format.colorize(), winston.format.colorize(),
winston.format.prettyPrint(), winston.format.metadata({fillExcept: ['level', 'message', 'timestamp']}),
winston.format.splat(),
winston.format.simple(),
prettyJson prettyJson
), ),
level: config.logLevel, level: config.logLevel,
@@ -30,30 +28,67 @@ export const logger = winston.createLogger({
}); });
export const Print = { export const Print = {
backoff(link: Link, store: Store, parameters: {delay: number; statusCode: number}, color?: boolean): string { backoff(
link: Link,
store: Store,
parameters: {delay: number; statusCode: number},
color?: boolean
): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow(`BACKOFF DELAY status=${parameters.statusCode} delay=${parameters.delay}`); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow(
`BACKOFF DELAY status=${parameters.statusCode} delay=${parameters.delay}`
)
);
} }
return `${buildProductString(link, store)} :: BACKOFF DELAY status=${parameters.statusCode} delay=${parameters.delay}`; return `${buildProductString(link, store)} :: BACKOFF DELAY status=${
parameters.statusCode
} delay=${parameters.delay}`;
}, },
badStatusCode(link: Link, store: Store, statusCode: number, color?: boolean): string { badStatusCode(
link: Link,
store: Store,
statusCode: number,
color?: boolean
): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow(`STATUS CODE ERROR ${statusCode}`); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow(`STATUS CODE ERROR ${statusCode}`)
);
} }
return `${buildProductString(link, store)} :: STATUS CODE ERROR ${statusCode}`; return `${buildProductString(
link,
store
)} :: STATUS CODE ERROR ${statusCode}`;
}, },
bannedSeller(link: Link, store: Store, color?: boolean): string { bannedSeller(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('BANNED SELLER'); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow('BANNED SELLER')
);
} }
return `${buildProductString(link, store)} :: BANNED SELLER`; return `${buildProductString(link, store)} :: BANNED SELLER`;
}, },
captcha(link: Link, store: Store, color?: boolean): string { captcha(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('CAPTCHA'); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow('CAPTCHA')
);
} }
return `${buildProductString(link, store)} :: CAPTCHA`; return `${buildProductString(link, store)} :: CAPTCHA`;
@@ -73,49 +108,97 @@ export const Print = {
}, },
inStockWaiting(link: Link, store: Store, color?: boolean): string { inStockWaiting(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return ' ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('IN STOCK, WAITING'); return (
' ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow('IN STOCK, WAITING')
);
} }
return ` ${buildProductString(link, store)} :: IN STOCK, WAITING`; return ` ${buildProductString(link, store)} :: IN STOCK, WAITING`;
}, },
maxPrice(link: Link, store: Store, price: number, maxPrice: number, color?: boolean): string { maxPrice(
link: Link,
store: Store,
price: number,
maxPrice: number,
color?: boolean
): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow(`PRICE ${price} EXCEEDS LIMIT ${maxPrice}`); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow(`PRICE ${price} EXCEEDS LIMIT ${maxPrice}`)
);
} }
return `${buildProductString(link, store)} :: PRICE ${price} EXCEEDS LIMIT ${maxPrice}`; return `${buildProductString(
link,
store
)} :: PRICE ${price} EXCEEDS LIMIT ${maxPrice}`;
}, },
message(message: string, topic: string, store: Store, color?: boolean): string { message(
message: string,
topic: string,
store: Store,
color?: boolean
): string {
if (color) { if (color) {
return '✖ ' + buildSetupString(topic, store, true) + ' :: ' + chalk.yellow(message); return (
'✖ ' +
buildSetupString(topic, store, true) +
' :: ' +
chalk.yellow(message)
);
} }
return `${buildSetupString(topic, store)} :: ${message}`; return `${buildSetupString(topic, store)} :: ${message}`;
}, },
noResponse(link: Link, store: Store, color?: boolean): string { noResponse(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('NO RESPONSE'); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow('NO RESPONSE')
);
} }
return `${buildProductString(link, store)} :: NO RESPONSE`; return `${buildProductString(link, store)} :: NO RESPONSE`;
}, },
outOfStock(link: Link, store: Store, color?: boolean): string { outOfStock(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.red('OUT OF STOCK'); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.red('OUT OF STOCK')
);
} }
return `${buildProductString(link, store)} :: OUT OF STOCK`; return `${buildProductString(link, store)} :: OUT OF STOCK`;
}, },
rateLimit(link: Link, store: Store, color?: boolean): string { rateLimit(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('RATE LIMIT EXCEEDED'); return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow('RATE LIMIT EXCEEDED')
);
} }
return `${buildProductString(link, store)} :: RATE LIMIT EXCEEDED`; return `${buildProductString(link, store)} :: RATE LIMIT EXCEEDED`;
} }
}; };
function buildSetupString(topic: string, store: Store, color?: boolean): string { function buildSetupString(
topic: string,
store: Store,
color?: boolean
): string {
if (color) { if (color) {
return chalk.cyan(`[${store.name}]`) + chalk.grey(` [setup (${topic})]`); return chalk.cyan(`[${store.name}]`) + chalk.grey(` [setup (${topic})]`);
} }
@@ -125,7 +208,10 @@ function buildSetupString(topic: string, store: Store, color?: boolean): string
function buildProductString(link: Link, store: Store, color?: boolean): string { function buildProductString(link: Link, store: Store, color?: boolean): string {
if (color) { if (color) {
return chalk.cyan(`[${store.name}]`) + chalk.grey(` [${link.brand} (${link.series})] ${link.model}`); return (
chalk.cyan(`[${store.name}]`) +
chalk.grey(` [${link.brand} (${link.series})] ${link.model}`)
);
} }
return `[${store.name}] [${link.brand} (${link.series})] ${link.model}`; return `[${store.name}] [${link.brand} (${link.series})] ${link.model}`;
+2 -2
View File
@@ -25,7 +25,7 @@ export function sendDiscordMessage(link: Link, store: Store) {
embed.setText(notifyGroup.join(' ')); embed.setText(notifyGroup.join(' '));
} }
embed.setColor(0x76B900); embed.setColor(0x76b900);
embed.setTimestamp(); embed.setTimestamp();
const promises = []; const promises = [];
@@ -37,7 +37,7 @@ export function sendDiscordMessage(link: Link, store: Store) {
logger.info('✔ discord message sent'); logger.info('✔ discord message sent');
} catch (error) { } catch (error) {
logger.error('✖ couldn\'t send discord message', error); logger.error("✖ couldn't send discord message", error);
} }
})(); })();
} }
+10 -8
View File
@@ -30,21 +30,23 @@ export function sendEmail(link: Link, store: Store) {
logger.debug('↗ sending email'); logger.debug('↗ sending email');
const mailOptions: Mail.Options = { const mailOptions: Mail.Options = {
attachments: link.screenshot ? [ attachments: link.screenshot
{ ? [
filename: link.screenshot, {
path: `./${link.screenshot}` filename: link.screenshot,
} path: `./${link.screenshot}`
] : undefined, }
]
: undefined,
from: email.username, from: email.username,
subject: Print.inStock(link, store), subject: Print.inStock(link, store),
text: link.cartUrl ? link.cartUrl : link.url, text: link.cartUrl ? link.cartUrl : link.url,
to: email.to to: email.to
}; };
transporter.sendMail(mailOptions, error => { transporter.sendMail(mailOptions, (error) => {
if (error) { if (error) {
logger.error('✖ couldn\'t send email', error); logger.error("✖ couldn't send email", error);
} else { } else {
logger.info('✔ email sent'); logger.info('✔ email sent');
} }
+20 -13
View File
@@ -8,15 +8,20 @@ let client: MqttClient.Client;
if (mqtt.broker) { if (mqtt.broker) {
if (checkInsecureUsage(mqtt.password, mqtt.broker)) { if (checkInsecureUsage(mqtt.password, mqtt.broker)) {
logger.warn('✖ Insecure transport of password - Only use credentials with MQTT brokers on private networks.'); logger.warn(
'✖ Insecure transport of password - Only use credentials with MQTT brokers on private networks.'
);
} else { } else {
const clientOptions: IClientOptions = { const clientOptions: IClientOptions = {
clean: (mqtt.clientId === ''), clean: mqtt.clientId === '',
clientId: mqtt.clientId === '' ? undefined : mqtt.clientId, clientId: mqtt.clientId === '' ? undefined : mqtt.clientId,
password: mqtt.password === '' ? undefined : mqtt.password, password: mqtt.password === '' ? undefined : mqtt.password,
username: mqtt.username === '' ? undefined : mqtt.username username: mqtt.username === '' ? undefined : mqtt.username
}; };
client = MqttClient.connect(`mqtt://${mqtt.broker}:${mqtt.port}`, clientOptions); client = MqttClient.connect(
`mqtt://${mqtt.broker}:${mqtt.port}`,
clientOptions
);
} }
} }
@@ -26,7 +31,10 @@ export function sendMqttMessage(link: Link, store: Store) {
(async () => { (async () => {
const givenUrl = link.cartUrl ? link.cartUrl : link.url; const givenUrl = link.cartUrl ? link.cartUrl : link.url;
const message = `{"msg":"${Print.inStock(link, store)}", "url":"${givenUrl}"}`; const message = `{"msg":"${Print.inStock(
link,
store
)}", "url":"${givenUrl}"}`;
const topic = generateTopic(link, store, mqtt.topic); const topic = generateTopic(link, store, mqtt.topic);
const pubOptions: IClientPublishOptions = { const pubOptions: IClientPublishOptions = {
qos: mqtt.qos as 0 | 1 | 2, qos: mqtt.qos as 0 | 1 | 2,
@@ -34,14 +42,10 @@ export function sendMqttMessage(link: Link, store: Store) {
}; };
try { try {
client.publish( client.publish(topic, message, pubOptions);
topic,
message,
pubOptions
);
logger.info('✔ mqtt message sent'); logger.info('✔ mqtt message sent');
} catch (error) { } catch (error) {
logger.error('✖ couldn\'t send mqtt message', error); logger.error("✖ couldn't send mqtt message", error);
} }
})(); })();
} }
@@ -50,7 +54,8 @@ export function sendMqttMessage(link: Link, store: Store) {
function generateTopic(link: Link, store: Store, topic: string): string { function generateTopic(link: Link, store: Store, topic: string): string {
topic.trim(); topic.trim();
topic = topic.replace(/^\//, ''); topic = topic.replace(/^\//, '');
topic = topic.replace(/%series%/g, link.series) topic = topic
.replace(/%series%/g, link.series)
.replace(/%brand%/g, link.brand) .replace(/%brand%/g, link.brand)
.replace(/%model%/g, link.model) .replace(/%model%/g, link.model)
.replace(/%store%/g, store.name); .replace(/%store%/g, store.name);
@@ -68,10 +73,12 @@ function generateTopic(link: Link, store: Store, topic: string): string {
*/ */
function checkInsecureUsage(pass: string, address: string): boolean { function checkInsecureUsage(pass: string, address: string): boolean {
if (pass !== '') { if (pass !== '') {
if (isClassANet(address) || if (
isClassANet(address) ||
isClassBNet(address) || isClassBNet(address) ||
isClassCNet(address) || isClassCNet(address) ||
isLinkLocal(address)) { isLinkLocal(address)
) {
logger.debug(`MQTT using private network broker: ${address}`); logger.debug(`MQTT using private network broker: ${address}`);
} else { } else {
logger.debug(`MQTT using public network broker: ${address}`); logger.debug(`MQTT using public network broker: ${address}`);
+3 -4
View File
@@ -8,12 +8,11 @@ const pd = new PDClient('');
export function sendPagerDutyNotification(link: Link, store: Store) { export function sendPagerDutyNotification(link: Link, store: Store) {
if (config.notifications.pagerduty.integrationKey) { if (config.notifications.pagerduty.integrationKey) {
logger.debug('↗ sending pagerduty message'); logger.debug('↗ sending pagerduty message');
const links = [ const links = [{href: link.url, text: 'Visit Store'}];
{href: link.url, text: 'Visit Store'}
];
if (link.cartUrl) { if (link.cartUrl) {
links.push({ links.push({
href: link.cartUrl, text: 'Add to Cart' href: link.cartUrl,
text: 'Add to Cart'
}); });
} }
+57 -38
View File
@@ -43,29 +43,37 @@ const adjustLightsWithAPI = (hueBridge: Api) => {
// 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 all hue lights'); logger.debug('adjusting all hue lights');
(hueBridge.lights.setLightState(light, lightState) as Promise<any>).catch((error: Error) => { (hueBridge.lights.setLightState(light, lightState) as Promise<any>).catch(
logger.error('Failed to adjust all lights.'); (error: Error) => {
logger.error('Failed to adjust all lights.');
logger.error(error);
throw error;
}
);
});
} else {
// Adjust all light IDs
hueBridge.lights
.getAll()
.then((allLights: any[]) => {
allLights.forEach((light: any) => {
logger.debug('adjusting specified lights');
(hueBridge.lights.setLightState(light, lightState) as Promise<
any
>).catch((error: Error) => {
logger.error('Failed to adjust specified lights.');
logger.error(error);
throw error;
});
});
})
.catch((error: Error) => {
logger.error('Failed to get all lights.');
logger.error(error); logger.error(error);
throw error; throw error;
}); });
});
} else { // Adjust all light IDs
hueBridge.lights.getAll().then((allLights: any[]) => {
allLights.forEach((light: any) => {
logger.debug('adjusting specified lights');
(hueBridge.lights.setLightState(light, lightState) as Promise<any>).catch((error: Error) => {
logger.error('Failed to adjust specified lights.');
logger.error(error);
throw error;
});
});
}).catch((error: Error) => {
logger.error('Failed to get all lights.');
logger.error(error);
throw error;
});
} }
}; };
@@ -74,15 +82,21 @@ export function adjustPhilipsHueLights() {
if (hue.apiKey && hue.bridgeIp) { if (hue.apiKey && hue.bridgeIp) {
logger.info('↗ adjusting Philips Hue lights over LAN'); logger.info('↗ adjusting Philips Hue lights over LAN');
(async () => { (async () => {
logger.debug('Attempting to connect to Philips Hue bridge at ' + bridgeIp); logger.debug(
hueAPI.api.createLocal(bridgeIp).connect(apiKey).then( 'Attempting to connect to Philips Hue bridge at ' + bridgeIp
hueBridge => { );
adjustLightsWithAPI(hueBridge); hueAPI.api
logger.info('✔ adjusted Philips Hue lights over LAN'); .createLocal(bridgeIp)
}, .connect(apiKey)
(error: Error) => { .then(
logger.error('✖ couldn\'t adjust hue lights.', error); (hueBridge) => {
}); adjustLightsWithAPI(hueBridge);
logger.info('✔ adjusted Philips Hue lights over LAN');
},
(error: Error) => {
logger.error("✖ couldn't adjust hue lights.", error);
}
);
})(); })();
} else if (hue.apiKey && hue.clientId && hue.clientSecret) { } else if (hue.apiKey && hue.clientId && hue.clientSecret) {
logger.info('↗ adjusting Philips Hue lights over cloud'); logger.info('↗ adjusting Philips Hue lights over cloud');
@@ -90,16 +104,21 @@ export function adjustPhilipsHueLights() {
logger.debug('Attempting to connect to Philips Hue bridge over cloud'); logger.debug('Attempting to connect to Philips Hue bridge over cloud');
const remoteBootstrap = hueAPI.api.createRemote(clientId, clientSecret); const remoteBootstrap = hueAPI.api.createRemote(clientId, clientSecret);
if (hue.accessToken && hue.refreshToken) { if (hue.accessToken && hue.refreshToken) {
remoteBootstrap.connectWithTokens(accessToken, refreshToken, remoteApiUsername) remoteBootstrap
.then(hueBridge => { .connectWithTokens(accessToken, refreshToken, remoteApiUsername)
adjustLightsWithAPI(hueBridge); .then(
logger.info('✔ adjusted Philips Hue lights over cloud'); (hueBridge) => {
}, adjustLightsWithAPI(hueBridge);
(error: Error) => { logger.info('✔ adjusted Philips Hue lights over cloud');
logger.error('Failed to get a remote Philips Hue connection using supplied tokens.'); },
logger.error(error); (error: Error) => {
throw error; logger.error(
}); 'Failed to get a remote Philips Hue connection using supplied tokens.'
);
logger.error(error);
throw error;
}
);
} }
})(); })();
} }
+3 -2
View File
@@ -17,10 +17,11 @@ export function sendPushbulletNotification(link: Link, store: Store) {
link.cartUrl ? link.cartUrl : link.url, link.cartUrl ? link.cartUrl : link.url,
(error: Error) => { (error: Error) => {
if (error) { if (error) {
logger.error('✖ couldn\'t send pushbullet message', error); logger.error("✖ couldn't send pushbullet message", error);
} else { } else {
logger.info('✔ pushbullet message sent'); logger.info('✔ pushbullet message sent');
} }
}); }
);
} }
} }
+1 -1
View File
@@ -21,7 +21,7 @@ export function sendPushoverNotification(link: Link, store: Store) {
push.send(message, (error: Error) => { push.send(message, (error: Error) => {
if (error) { if (error) {
logger.error('✖ couldn\'t send pushover message', error); logger.error("✖ couldn't send pushover message", error);
} else { } else {
logger.info('✔ pushover message sent'); logger.info('✔ pushover message sent');
} }
+2 -2
View File
@@ -22,13 +22,13 @@ export function sendSlackMessage(link: Link, store: Store) {
}); });
if (!result.ok) { if (!result.ok) {
logger.error('✖ couldn\'t send slack message', result); logger.error("✖ couldn't send slack message", result);
return; return;
} }
logger.info('✔ slack message sent'); logger.info('✔ slack message sent');
} catch (error) { } catch (error) {
logger.error('✖ couldn\'t send slack message', error); logger.error("✖ couldn't send slack message", error);
} }
})(); })();
} }
+28 -14
View File
@@ -4,18 +4,27 @@ import Mail from 'nodemailer/lib/mailer';
import {config} from '../config'; import {config} from '../config';
import {transporter} from './email'; import {transporter} from './email';
if (config.notifications.phone.number && !config.notifications.email.username) {
logger.warn('✖ in order to receive sms alerts, email notifications must also be configured');
}
const [email, phone] = [config.notifications.email, config.notifications.phone]; const [email, phone] = [config.notifications.email, config.notifications.phone];
if (phone.number.length > 0 && (!email.username || !email.password)) {
logger.warn(
'✖ in order to receive sms alerts, email notifications must also be configured'
);
}
if (phone.carrier.length !== phone.number.length) { if (phone.carrier.length !== phone.number.length) {
logger.warn('✖ the number of carriers must match the number of phone numbers'); logger.warn(
'✖ the number of carriers must match the number of phone numbers',
{carrier: phone.carrier, number: phone.number}
);
} }
export function sendSms(link: Link, store: Store) { export function sendSms(link: Link, store: Store) {
for (let i = 0; i < Math.max(phone.number.length, phone.carrier.length); i++) { for (
let i = 0;
i < Math.max(phone.number.length, phone.carrier.length);
i++
) {
const currentNumber = phone.number[i]; const currentNumber = phone.number[i];
const currentCarrier = phone.carrier[i]; const currentCarrier = phone.carrier[i];
@@ -35,21 +44,26 @@ export function sendSms(link: Link, store: Store) {
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, {
path: `./${link.screenshot}` filename: 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(`✖ couldn't send sms to ${currentNumber} for carrier ${currentCarrier}`, error); logger.error(
`✖ couldn't send sms to ${currentNumber} for carrier ${currentCarrier}`,
error
);
} else { } else {
logger.info('✔ sms sent'); logger.info('✔ sms sent');
} }
+3 -3
View File
@@ -9,7 +9,7 @@ if (config.notifications.playSound) {
player = playerLib(); player = playerLib();
if (player.player === null) { if (player.player === null) {
logger.warn('✖ couldn\'t find sound player'); logger.warn("✖ couldn't find sound player");
} else { } else {
const playerName = player.player; const playerName = player.player;
logger.info(`✔ sound player found: ${playerName}`); logger.info(`✔ sound player found: ${playerName}`);
@@ -20,7 +20,7 @@ export function playSound() {
if (config.notifications.playSound && player.player !== null) { if (config.notifications.playSound && player.player !== null) {
logger.debug('↗ playing sound'); logger.debug('↗ playing sound');
fs.access(config.notifications.playSound, fs.constants.F_OK, error => { fs.access(config.notifications.playSound, fs.constants.F_OK, (error) => {
if (error) { if (error) {
logger.error(`✖ error opening sound file: ${error.message}`); logger.error(`✖ error opening sound file: ${error.message}`);
return; return;
@@ -28,7 +28,7 @@ export function playSound() {
player.play(config.notifications.playSound, (error: Error) => { player.play(config.notifications.playSound, (error: Error) => {
if (error) { if (error) {
logger.error('✖ couldn\'t play sound', error); logger.error("✖ couldn't play sound", error);
} }
logger.info('✔ played sound'); logger.info('✔ played sound');
+7 -2
View File
@@ -19,10 +19,15 @@ export function sendTelegramMessage(link: Link, store: Store) {
for (const chatId of telegram.chatId) { for (const chatId of telegram.chatId) {
try { try {
results.push(client.sendMessage(chatId, `${Print.inStock(link, store)}\n${givenUrl}`)); results.push(
client.sendMessage(
chatId,
`${Print.inStock(link, store)}\n${givenUrl}`
)
);
logger.info('✔ telegram message sent'); logger.info('✔ telegram message sent');
} catch (error) { } catch (error) {
logger.error('✖ couldn\'t send telegram message', error); logger.error("✖ couldn't send telegram message", error);
} }
} }
+1 -1
View File
@@ -26,7 +26,7 @@ export function sendTwilioMessage(link: Link, store: Store) {
}); });
logger.info('✔ twilio message sent'); logger.info('✔ twilio message sent');
} catch (error) { } catch (error) {
logger.error('✖ couldn\'t send twilio message', error); logger.error("✖ couldn't send twilio message", error);
} }
})(); })();
} }
+33 -10
View File
@@ -17,7 +17,10 @@ let tokenData = {
}; };
if (existsSync('./twitch.json')) { if (existsSync('./twitch.json')) {
tokenData = {...JSON.parse(readFileSync('./twitch.json', 'utf-8')), ...tokenData}; tokenData = {
...JSON.parse(readFileSync('./twitch.json', 'utf-8')),
...tokenData
};
} }
const chatClient: ChatClient = new ChatClient( const chatClient: ChatClient = new ChatClient(
@@ -25,13 +28,25 @@ const chatClient: ChatClient = new ChatClient(
new StaticAuthProvider(twitch.clientId, tokenData.accessToken), new StaticAuthProvider(twitch.clientId, tokenData.accessToken),
{ {
clientSecret: twitch.clientSecret, clientSecret: twitch.clientSecret,
expiry: tokenData.expiryTimestamp === null ? null : new Date(tokenData.expiryTimestamp), expiry:
tokenData.expiryTimestamp === null
? null
: new Date(tokenData.expiryTimestamp),
onRefresh: async ({accessToken, refreshToken, expiryDate}) => { onRefresh: async ({accessToken, refreshToken, expiryDate}) => {
return promises.writeFile('./twitch.json', JSON.stringify({ return promises.writeFile(
accessToken, './twitch.json',
expiryTimestamp: expiryDate === null ? null : expiryDate.getTime(), JSON.stringify(
refreshToken {
}, null, 4), 'utf-8'); accessToken,
expiryTimestamp:
expiryDate === null ? null : expiryDate.getTime(),
refreshToken
},
null,
4
),
'utf-8'
);
}, },
refreshToken: tokenData.refreshToken refreshToken: tokenData.refreshToken
} }
@@ -51,7 +66,7 @@ chatClient.onJoin((channel: string, user: string) => {
chatClient.say(channel, message); chatClient.say(channel, message);
logger.info('✔ twitch message sent'); logger.info('✔ twitch message sent');
} catch (error) { } catch (error) {
logger.error('✖ couldn\'t send twitch message', error); logger.error("✖ couldn't send twitch message", error);
} }
} }
} }
@@ -65,10 +80,18 @@ chatClient.onDisconnect(() => {
}); });
export function sendTwitchMessage(link: Link, store: Store) { export function sendTwitchMessage(link: Link, store: Store) {
if (tokenData.accessToken && twitch.channel && twitch.clientId && twitch.clientSecret && tokenData.refreshToken) { if (
tokenData.accessToken &&
twitch.channel &&
twitch.clientId &&
twitch.clientSecret &&
tokenData.refreshToken
) {
logger.debug('↗ sending twitch message'); logger.debug('↗ sending twitch message');
messages.push(`${Print.inStock(link, store)}\n${link.cartUrl ? link.cartUrl : link.url}`); messages.push(
`${Print.inStock(link, store)}\n${link.cartUrl ? link.cartUrl : link.url}`
);
if (!alreadySaying) { if (!alreadySaying) {
alreadySaying = true; alreadySaying = true;
+11 -4
View File
@@ -13,18 +13,25 @@ const client = new Twitter({
}); });
export function sendTweet(link: Link, store: Store) { export function sendTweet(link: Link, store: Store) {
if (twitter.accessTokenKey && twitter.accessTokenSecret && twitter.consumerKey && twitter.consumerSecret) { if (
twitter.accessTokenKey &&
twitter.accessTokenSecret &&
twitter.consumerKey &&
twitter.consumerSecret
) {
logger.debug('↗ sending twitter message'); logger.debug('↗ sending twitter message');
let status = `${Print.inStock(link, store)}\n${link.cartUrl ? link.cartUrl : link.url}`; let status = `${Print.inStock(link, store)}\n${
link.cartUrl ? link.cartUrl : link.url
}`;
if (twitter.tweetTags) { if (twitter.tweetTags) {
status += `\n\n${twitter.tweetTags}`; status += `\n\n${twitter.tweetTags}`;
} }
client.post('statuses/update', {status}, error => { client.post('statuses/update', {status}, (error) => {
if (error) { if (error) {
logger.error('✖ couldn\'t send twitter notification', error); logger.error("✖ couldn't send twitter notification", error);
} else { } else {
logger.info('✔ twitter notification sent'); logger.info('✔ twitter notification sent');
} }
+19 -13
View File
@@ -12,14 +12,16 @@ function addNewLinks(store: Store, links: Link[], series: Series) {
return; return;
} }
const existingUrls = new Set(store.links.map(link => link.url)); const existingUrls = new Set(store.links.map((link) => link.url));
const newLinks = links.filter(link => !existingUrls.has(link.url)); const newLinks = links.filter((link) => !existingUrls.has(link.url));
if (newLinks.length === 0) { if (newLinks.length === 0) {
return; return;
} }
logger.debug(Print.message(`FOUND ${newLinks.length} STORE LINKS`, series, store, true)); logger.debug(
Print.message(`FOUND ${newLinks.length} STORE LINKS`, series, store, true)
);
logger.debug(JSON.stringify(newLinks, null, 2)); logger.debug(JSON.stringify(newLinks, null, 2));
store.links = store.links.concat(newLinks); store.links = store.links.concat(newLinks);
@@ -43,19 +45,23 @@ export async function fetchLinks(store: Store, browser: Browser) {
url = [url]; url = [url];
} }
url.map(x => promises.push(usingResponse(browser, x, async response => { url.map((x) =>
const text = await response?.text(); promises.push(
usingResponse(browser, x, async (response) => {
const text = await response?.text();
if (!text) { if (!text) {
logger.error(Print.message('NO RESPONSE', series, store, true)); logger.error(Print.message('NO RESPONSE', series, store, true));
return; return;
} }
const docElement = cheerio.load(text).root(); const docElement = cheerio.load(text).root();
const links = store.linksBuilder!.builder(docElement, series); const links = store.linksBuilder!.builder(docElement, series);
addNewLinks(store, links, series); addNewLinks(store, links, series);
}))); })
)
);
} }
await Promise.all(promises); await Promise.all(promises);
+8 -4
View File
@@ -30,10 +30,14 @@ function filterModel(model: Link['model'], series: Link['series']): boolean {
for (const configModelEntry of config.store.showOnlyModels) { for (const configModelEntry of config.store.showOnlyModels) {
const sanitizedConfigModel = configModelEntry.name.replace(/\s/g, ''); const sanitizedConfigModel = configModelEntry.name.replace(/\s/g, '');
const sanitizedConfigSeries = configModelEntry.series.replace(/\s/g, ''); const sanitizedConfigSeries = configModelEntry.series.replace(/\s/g, '');
if (sanitizedConfigSeries ? if (sanitizedConfigSeries) {
sanitizedSeries === sanitizedConfigSeries && sanitizedModel === sanitizedConfigModel : if (
sanitizedModel === sanitizedConfigModel sanitizedSeries === sanitizedConfigSeries &&
) { sanitizedModel === sanitizedConfigModel
) {
return true;
}
} else if (sanitizedModel === sanitizedConfigModel) {
return true; return true;
} }
} }
+63 -28
View File
@@ -9,59 +9,82 @@ export type Selector = {
}; };
function isElementArray(query: LabelQuery): query is Element[] { function isElementArray(query: LabelQuery): query is Element[] {
return Array.isArray(query) && query.length > 0 && typeof query[0] === 'object'; return (
Array.isArray(query) && query.length > 0 && typeof query[0] === 'object'
);
} }
function getQueryAsElementArray(query: LabelQuery, defaultContainer: string): Array<Required<Element>> { function getQueryAsElementArray(
query: LabelQuery,
defaultContainer: string
): Array<Required<Element>> {
if (isElementArray(query)) { if (isElementArray(query)) {
return query.map(x => ({ return query.map((x) => ({
container: x.container ?? defaultContainer, container: x.container ?? defaultContainer,
text: x.text text: x.text
})); }));
} }
if (Array.isArray(query)) { if (Array.isArray(query)) {
return [{ return [
container: defaultContainer, {
text: query container: defaultContainer,
}]; text: query
}
];
} }
return [{ return [
container: query.container ?? defaultContainer, {
text: query.text container: query.container ?? defaultContainer,
}]; text: query.text
}
];
} }
export async function pageIncludesLabels(page: Page, query: LabelQuery, options: Selector) { export async function pageIncludesLabels(
page: Page,
query: LabelQuery,
options: Selector
) {
const elementQueries = getQueryAsElementArray(query, options.selector); const elementQueries = getQueryAsElementArray(query, options.selector);
const resolved = await Promise.all(elementQueries.map(async query => { const resolved = await Promise.all(
const selector = {...options, selector: query.container}; elementQueries.map(async (query) => {
const contents = await extractPageContents(page, selector) ?? ''; const selector = {...options, selector: query.container};
const contents = (await extractPageContents(page, selector)) ?? '';
if (!contents) { if (!contents) {
return false; return false;
} }
logger.debug(contents); logger.debug(contents);
return includesLabels(contents, query.text); return includesLabels(contents, query.text);
})); })
);
return resolved.includes(true); return resolved.includes(true);
} }
export async function extractPageContents(page: Page, selector: Selector): Promise<string | null> { export async function extractPageContents(
page: Page,
selector: Selector
): Promise<string | null> {
return page.evaluate((options: Selector) => { return page.evaluate((options: Selector) => {
// eslint-disable-next-line no-undef // eslint-disable-next-line no-undef
const element: globalThis.HTMLElement | null = document.querySelector(options.selector); const element: globalThis.HTMLElement | null = document.querySelector(
options.selector
);
if (!element) { if (!element) {
return null; return null;
} }
if (options.requireVisible && !(element.offsetWidth > 0 && element.offsetHeight > 0)) { if (
options.requireVisible &&
!(element.offsetWidth > 0 && element.offsetHeight > 0)
) {
return null; return null;
} }
@@ -84,12 +107,22 @@ export async function extractPageContents(page: Page, selector: Selector): Promi
* @param domText Complete DOM of website. * @param domText Complete DOM of website.
* @param searchLabels Search labels for a match. * @param searchLabels Search labels for a match.
*/ */
export function includesLabels(domText: string, searchLabels: string[]): boolean { export function includesLabels(
domText: string,
searchLabels: string[]
): boolean {
const domTextLowerCase = domText.toLowerCase(); const domTextLowerCase = domText.toLowerCase();
return searchLabels.some(label => domTextLowerCase.includes(label.toLowerCase())); return searchLabels.some((label) =>
domTextLowerCase.includes(label.toLowerCase())
);
} }
export async function cardPrice(page: Page, query: Pricing, max: number, options: Selector): Promise<number | null> { export async function cardPrice(
page: Page,
query: Pricing,
max: number,
options: Selector
): Promise<number | null> {
if (!max || max === -1) { if (!max || max === -1) {
return null; return null;
} }
@@ -99,7 +132,9 @@ export async function cardPrice(page: Page, query: Pricing, max: number, options
if (cardPrice) { if (cardPrice) {
const priceSeperator = query.euroFormat ? /\./g : /,/g; const priceSeperator = query.euroFormat ? /\./g : /,/g;
const cardpriceNumber = Number.parseFloat(cardPrice.replace(priceSeperator, '').match(/\d+/g)!.join('.')); const cardpriceNumber = Number.parseFloat(
cardPrice.replace(priceSeperator, '').match(/\d+/g)!.join('.')
);
logger.debug(`Raw card price: ${cardPrice} | Limit: ${max}`); logger.debug(`Raw card price: ${cardPrice} | Limit: ${max}`);
return cardpriceNumber > max ? cardpriceNumber : null; return cardpriceNumber > max ? cardpriceNumber : null;
+48 -13
View File
@@ -2,7 +2,13 @@ import {Browser, Page, Response} from 'puppeteer';
import {Link, Store, getStores} from './model'; import {Link, Store, getStores} from './model';
import {Print, logger} from '../logger'; import {Print, logger} from '../logger';
import {Selector, cardPrice, pageIncludesLabels} from './includes-labels'; import {Selector, cardPrice, pageIncludesLabels} from './includes-labels';
import {closePage, delay, getRandomUserAgent, getSleepTime, isStatusCodeInRange} from '../util'; import {
closePage,
delay,
getRandomUserAgent,
getSleepTime,
isStatusCodeInRange
} from '../util';
import {config} from '../config'; import {config} from '../config';
import {disableBlockerInPage} from '../adblocker'; import {disableBlockerInPage} from '../adblocker';
import {fetchLinks} from './fetch-links'; import {fetchLinks} from './fetch-links';
@@ -39,8 +45,12 @@ async function lookup(browser: Browser, store: Store) {
continue; continue;
} }
const context = (config.browser.isIncognito ? await browser.createIncognitoBrowserContext() : browser.defaultBrowserContext()); const context = config.browser.isIncognito
const page = (config.browser.isIncognito ? await context.newPage() : await browser.newPage()); ? await browser.createIncognitoBrowserContext()
: browser.defaultBrowserContext();
const page = config.browser.isIncognito
? await context.newPage()
: await browser.newPage();
page.setDefaultNavigationTimeout(config.page.timeout); page.setDefaultNavigationTimeout(config.page.timeout);
await page.setUserAgent(getRandomUserAgent()); await page.setUserAgent(getRandomUserAgent());
@@ -57,7 +67,11 @@ async function lookup(browser: Browser, store: Store) {
try { try {
statusCode = await lookupCard(browser, store, page, link); statusCode = await lookupCard(browser, store, page, link);
} catch (error) { } catch (error) {
logger.error(`✖ [${store.name}] ${link.brand} ${link.series} ${link.model} - ${error.message as string}`); logger.error(
`✖ [${store.name}] ${link.brand} ${link.series} ${link.model} - ${
error.message as string
}`
);
const client = await page.target().createCDPSession(); const client = await page.target().createCDPSession();
await client.send('Network.clearBrowserCookies'); await client.send('Network.clearBrowserCookies');
await client.send('Network.clearBrowserCache'); await client.send('Network.clearBrowserCache');
@@ -75,9 +89,16 @@ async function lookup(browser: Browser, store: Store) {
/* eslint-enable no-await-in-loop */ /* eslint-enable no-await-in-loop */
} }
async function lookupCard(browser: Browser, store: Store, page: Page, link: Link): Promise<number> { async function lookupCard(
browser: Browser,
store: Store,
page: Page,
link: Link
): Promise<number> {
const givenWaitFor = store.waitUntil ? store.waitUntil : 'networkidle0'; const givenWaitFor = store.waitUntil ? store.waitUntil : 'networkidle0';
const response: Response | null = await page.goto(link.url, {waitUntil: givenWaitFor}); const response: Response | null = await page.goto(link.url, {
waitUntil: givenWaitFor
});
if (!response) { if (!response) {
logger.debug(Print.noResponse(link, store, true)); logger.debug(Print.noResponse(link, store, true));
@@ -136,9 +157,13 @@ async function lookupCardInStock(store: Store, page: Page, link: Link) {
}; };
if (store.labels.inStock) { if (store.labels.inStock) {
const options = {...baseOptions, requireVisible: true, type: 'outerHTML' as const}; const options = {
...baseOptions,
requireVisible: true,
type: 'outerHTML' as const
};
if (!await pageIncludesLabels(page, store.labels.inStock, options)) { if (!(await pageIncludesLabels(page, store.labels.inStock, options))) {
logger.info(Print.outOfStock(link, store, true)); logger.info(Print.outOfStock(link, store, true));
return false; return false;
} }
@@ -152,17 +177,24 @@ async function lookupCardInStock(store: Store, page: Page, link: Link) {
} }
if (store.labels.bannedSeller) { if (store.labels.bannedSeller) {
if (await pageIncludesLabels(page, store.labels.bannedSeller, baseOptions)) { if (
await pageIncludesLabels(page, store.labels.bannedSeller, baseOptions)
) {
logger.warn(Print.bannedSeller(link, store, true)); logger.warn(Print.bannedSeller(link, store, true));
return false; return false;
} }
} }
if (store.labels.maxPrice) { if (store.labels.maxPrice) {
const price = await cardPrice(page, store.labels.maxPrice, config.store.maxPrice.series[link.series], baseOptions); const price = await cardPrice(
page,
store.labels.maxPrice,
config.store.maxPrice.series[link.series],
baseOptions
);
const maxPrice = config.store.maxPrice.series[link.series]; const maxPrice = config.store.maxPrice.series[link.series];
if (price) { if (price) {
logger.info(Print.maxPrice(link, store, price, maxPrice, true)); logger.info(Print.maxPrice(link, store, price, maxPrice, true));
return false; return false;
} }
} }
@@ -176,7 +208,10 @@ async function lookupCardInStock(store: Store, page: Page, link: Link) {
} }
// Do API inventory validation in realtime (no cache) if available // Do API inventory validation in realtime (no cache) if available
if (store.realTimeInventoryLookup !== undefined && link.itemNumber !== undefined) { if (
store.realTimeInventoryLookup !== undefined &&
link.itemNumber !== undefined
) {
return store.realTimeInventoryLookup(link.itemNumber); return store.realTimeInventoryLookup(link.itemNumber);
} }
@@ -192,7 +227,7 @@ export async function tryLookupAndLoop(browser: Browser, store: Store) {
if (store.linksBuilder) { if (store.linksBuilder) {
const lastRunTime = linkBuilderLastRunTimes[store.name] ?? -1; const lastRunTime = linkBuilderLastRunTimes[store.name] ?? -1;
const ttl = store.linksBuilder.ttl ?? Number.MAX_SAFE_INTEGER; const ttl = store.linksBuilder.ttl ?? Number.MAX_SAFE_INTEGER;
if (lastRunTime === -1 || (Date.now() - lastRunTime) > ttl) { if (lastRunTime === -1 || Date.now() - lastRunTime > ttl) {
try { try {
await fetchLinks(store, browser); await fetchLinks(store, browser);
linkBuilderLastRunTimes[store.name] = Date.now(); linkBuilderLastRunTimes[store.name] = Date.now();
-1
View File
@@ -169,4 +169,3 @@ export const AlternateNL: Store = {
], ],
name: 'alternate-nl' name: 'alternate-nl'
}; };
+6 -1
View File
@@ -4,7 +4,12 @@ export const Alternate: Store = {
labels: { labels: {
inStock: { inStock: {
container: '.stockStatus', container: '.stockStatus',
text: ['auf lager', 'ware neu eingetroffen', 'in kürze versandfertig', 'ware im zulauf'] text: [
'auf lager',
'ware neu eingetroffen',
'in kürze versandfertig',
'ware im zulauf'
]
}, },
maxPrice: { maxPrice: {
container: 'div.price > span', container: 'div.price > span',
+4 -1
View File
@@ -5,7 +5,10 @@ export const AmazonDe: Store = {
labels: { labels: {
captcha: { captcha: {
container: 'body', container: 'body',
text: ['geben sie die unten angezeigten zeichen ein', 'geben sie die zeichen unten ein'] text: [
'geben sie die unten angezeigten zeichen ein',
'geben sie die zeichen unten ein'
]
}, },
inStock: { inStock: {
container: '#desktop_buybox', container: '#desktop_buybox',
+6 -1
View File
@@ -8,7 +8,12 @@ export const AmazonNl: Store = {
}, },
inStock: { inStock: {
container: '#availability', container: '#availability',
text: ['op voorraad', 'verkrijgbaar vanaf', 'wordt gewoonlijk verzonden binnen', 'nog slechts'] text: [
'op voorraad',
'verkrijgbaar vanaf',
'wordt gewoonlijk verzonden binnen',
'nog slechts'
]
}, },
maxPrice: { maxPrice: {
container: 'span[class*="PriceString"]', container: 'span[class*="PriceString"]',
+12 -5
View File
@@ -30,21 +30,24 @@ export const AmazonUk: Store = {
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
cartUrl: 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B081265T5Z&Quantity.1=1', cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B081265T5Z&Quantity.1=1',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amazon.co.uk/dp/B081265T5Z/' url: 'https://www.amazon.co.uk/dp/B081265T5Z/'
}, },
{ {
brand: 'sony', brand: 'sony',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC5L3RG&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC5L3RG&Quantity.1=1',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.amazon.com/dp/B08FC5L3RG' url: 'https://www.amazon.com/dp/B08FC5L3RG'
}, },
{ {
brand: 'sony', brand: 'sony',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08H97NYGP&Quantity.1=1', cartUrl:
'https://www.amazon.com/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/'
@@ -52,7 +55,9 @@ export const AmazonUk: Store = {
], ],
linksBuilder: { linksBuilder: {
builder: (docElement, series) => { builder: (docElement, series) => {
const productElements = docElement.find('.s-result-list .s-result-item[data-asin]'); const productElements = docElement.find(
'.s-result-list .s-result-item[data-asin]'
);
const links: Link[] = []; const links: Link[] = [];
for (let i = 0; i < productElements.length; i++) { for (let i = 0; i < productElements.length; i++) {
const productElement = productElements.eq(i); const productElement = productElements.eq(i);
@@ -63,7 +68,9 @@ export const AmazonUk: Store = {
} }
const url = `https://www.amazon.co.uk/dp/${asin}/`; const url = `https://www.amazon.co.uk/dp/${asin}/`;
const titleElement = productElement.find('.sg-col-inner h2 a.a-text-normal[href] span').first(); const titleElement = productElement
.find('.sg-col-inner h2 a.a-text-normal[href] span')
.first();
const title = titleElement.text().trim(); const title = titleElement.text().trim();
if (!title || !new RegExp(`RTX.*${series}`, 'i').exec(title)) { if (!title || !new RegExp(`RTX.*${series}`, 'i').exec(title)) {
+74 -37
View File
@@ -17,259 +17,296 @@ export const Amazon: Store = {
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B07TDN1SC5&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B07TDN1SC5&Quantity.1=1',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.amazon.com/dp/B07TDN1SC5' url: 'https://www.amazon.com/dp/B07TDN1SC5'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8HPKR6&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8HPKR6&Quantity.1=1',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: 'https://www.amazon.com/dp/B08L8HPKR6' url: 'https://www.amazon.com/dp/B08L8HPKR6'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08LW46GH2&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08LW46GH2&Quantity.1=1',
model: 'xc3 black', model: 'xc3 black',
series: '3070', series: '3070',
url: 'https://www.amazon.com/dp/B08LW46GH2' url: 'https://www.amazon.com/dp/B08LW46GH2'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1', cartUrl:
'https://www.amazon.com/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.com/dp/B08KY266MG' url: 'https://www.amazon.com/dp/B08KY266MG'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBJB7YD&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBJB7YD&Quantity.1=1',
model: 'xlr8', model: 'xlr8',
series: '3070', series: '3070',
url: 'https://www.amazon.com/dp/B08HBJB7YD' url: 'https://www.amazon.com/dp/B08HBJB7YD'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBF5L3K&Quantity.1=1', cartUrl:
'https://www.amazon.com/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.com/dp/B08HBF5L3K' url: 'https://www.amazon.com/dp/B08HBF5L3K'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KWLMZV4&Quantity.1=1', cartUrl:
'https://www.amazon.com/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.com/dp/B08KWLMZV4' url: 'https://www.amazon.com/dp/B08KWLMZV4'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08LF1CWT2&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08LF1CWT2&Quantity.1=1',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: 'https://www.amazon.com/dp/B08LF1CWT2' url: 'https://www.amazon.com/dp/B08LF1CWT2'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1',
model: 'xlr8', model: 'xlr8',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HBR7QBM' url: 'https://www.amazon.com/dp/B08HBR7QBM'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HBTJMLJ' url: 'https://www.amazon.com/dp/B08HBTJMLJ'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR7SV3M&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR7SV3M&Quantity.1=1',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR7SV3M' url: 'https://www.amazon.com/dp/B08HR7SV3M'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR3Y5GQ' url: 'https://www.amazon.com/dp/B08HR3Y5GQ'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR55YB5' url: 'https://www.amazon.com/dp/B08HR55YB5'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR3DPGW&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR3DPGW&Quantity.1=1',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR3DPGW' url: 'https://www.amazon.com/dp/B08HR3DPGW'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR4RJ3Q' url: 'https://www.amazon.com/dp/B08HR4RJ3Q'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR6FMF3' url: 'https://www.amazon.com/dp/B08HR6FMF3'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HJTH61J' url: 'https://www.amazon.com/dp/B08HJTH61J'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HJS2JLJ' url: 'https://www.amazon.com/dp/B08HJS2JLJ'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HH5WF97' url: 'https://www.amazon.com/dp/B08HH5WF97'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HHDP9DW' url: 'https://www.amazon.com/dp/B08HHDP9DW'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6F174Z&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6F174Z&Quantity.1=1',
model: 'rog strix oc', model: 'rog strix oc',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08J6F174Z' url: 'https://www.amazon.com/dp/B08J6F174Z'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1',
model: 'rog strix oc', model: 'rog strix oc',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08J6GMWCQ' url: 'https://www.amazon.com/dp/B08J6GMWCQ'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HR5SXPS' url: 'https://www.amazon.com/dp/B08HR5SXPS'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.amazon.com/dp/B08HJNKT3P' url: 'https://www.amazon.com/dp/B08HJNKT3P'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HJQ182D' url: 'https://www.amazon.com/dp/B08HJQ182D'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1',
model: 'xlr8', model: 'xlr8',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HBQWBHH' url: 'https://www.amazon.com/dp/B08HBQWBHH'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1',
model: 'xlr8', model: 'xlr8',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HBVX53D' url: 'https://www.amazon.com/dp/B08HBVX53D'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HRBW6VB&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HRBW6VB&Quantity.1=1',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HRBW6VB' url: 'https://www.amazon.com/dp/B08HRBW6VB'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1',
model: 'ventus 3x', model: 'ventus 3x',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HR9D2JS' url: 'https://www.amazon.com/dp/B08HR9D2JS'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HJRF2CN' url: 'https://www.amazon.com/dp/B08HJRF2CN'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HJPDJTY' url: 'https://www.amazon.com/dp/B08HJPDJTY'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HJGNJ81' url: 'https://www.amazon.com/dp/B08HJGNJ81'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.amazon.com/dp/B08HJLLF7G' url: 'https://www.amazon.com/dp/B08HJLLF7G'
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.amazon.com/dp/product/B08164VTWH' url: 'https://www.amazon.com/dp/product/B08164VTWH'
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.amazon.com/dp/product/B0815Y8J9N' url: 'https://www.amazon.com/dp/product/B0815Y8J9N'
}, },
{ {
brand: 'sony', brand: 'sony',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC5L3RG&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC5L3RG&Quantity.1=1',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.amazon.com/dp/B08FC5L3RG' url: 'https://www.amazon.com/dp/B08FC5L3RG'
}, },
{ {
brand: 'sony', brand: 'sony',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC6MR62&Quantity.1=1', cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC6MR62&Quantity.1=1',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.amazon.com/dp/B08FC6MR62' url: 'https://www.amazon.com/dp/B08FC6MR62'
+8 -4
View File
@@ -20,28 +20,32 @@ export const AMDDe: Store = {
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: 'https://www.amd.com/de/direct-buy/5450881400/de?add-to-cart=true', cartUrl:
'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: 'https://www.amd.com/de/direct-buy/5450881500/de?add-to-cart=true', cartUrl:
'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: 'https://www.amd.com/de/direct-buy/5450881600/de?add-to-cart=true', cartUrl:
'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: 'https://www.amd.com/de/direct-buy/5450881700/de?add-to-cart=true', cartUrl:
'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'
+8 -4
View File
@@ -20,28 +20,32 @@ export const AMD: Store = {
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: 'https://www.amd.com/en/direct-buy/5450881400/us?add-to-cart=true', cartUrl:
'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: 'https://www.amd.com/en/direct-buy/5450881500/us?add-to-cart=true', cartUrl:
'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: 'https://www.amd.com/en/direct-buy/5450881600/us?add-to-cart=true', cartUrl:
'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: 'https://www.amd.com/en/direct-buy/5450881700/us?add-to-cart=true', cartUrl:
'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'
+7 -4
View File
@@ -9,7 +9,7 @@ export const Aria: Store = {
}, },
maxPrice: { maxPrice: {
container: '.priceBig', container: '.priceBig',
euroFormat: false // Note: Aria uses non-euroFromat as price seperator euroFormat: false // Note: Aria uses non-euroFromat as price seperator
}, },
outOfStock: { outOfStock: {
container: '.fBox', container: '.fBox',
@@ -21,7 +21,8 @@ export const Aria: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+2060+Super/Gigabyte+NVIDIA+GeForce+RTX+2060+SUPER+8GB+WINDFORCE+OC+Turing+Graphics+Card+%2B+RTX+Bundle%21?productId=71541' url:
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+2060+Super/Gigabyte+NVIDIA+GeForce+RTX+2060+SUPER+8GB+WINDFORCE+OC+Turing+Graphics+Card+%2B+RTX+Bundle%21?productId=71541'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -33,11 +34,13 @@ export const Aria: Store = {
urls: [ urls: [
{ {
series: '3080', series: '3080',
url: 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3080' url:
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3080'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3090' url:
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3090'
} }
] ]
}, },
+34 -17
View File
@@ -20,103 +20,120 @@ export const Arlt: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.arlt.com/ASUS-GeForce-GTX1650-Super-TUF-GTX1650S-O4G-GAMING.html' url:
'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: 'https://www.arlt.com/Gaming/Gaming-Hardware/Grafikkarten/ASUS-Dual-GeForce-RTX-3070.html' url:
'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: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/ASUS-Dual-GeForce-RTX-3070-OC.html' url:
'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: 'https://www.arlt.com/Gaming/Gaming-Hardware/Grafikkarten/ASUS-TUF-Gaming-GeForce-RTX-3070-OC.html' url:
'https://www.arlt.com/Gaming/Gaming-Hardware/Grafikkarten/ASUS-TUF-Gaming-GeForce-RTX-3070-OC.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3070', series: '3070',
url: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3070/ASUS-ROG-Strix-GeForce-RTX-3070.html' url:
'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: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3070/MSI-GeForce-RTX-3070-Ventus-2X-OC.html' url:
'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: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/Gainward-GeForce-RTX-3070-Phoenix.html' url:
'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: 'https://www.arlt.com/Gaming/Gaming-Hardware/Gainward-GeForce-RTX-3070-Phoenix-GS.html' url:
'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: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/ASUS-TUF-Gaming-GeForce-RTX-3080-OC.html' url:
'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: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3080/MSI-GeForce-RTX-3080-Ventus-3X-OC.html' url:
'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: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3090/ASUS-TUF-Gaming-GeForce-RTX-3090-OC.html' url:
'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: 'rog strix oc', model: 'rog strix oc',
series: '3090', series: '3090',
url: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3090/ASUS-ROG-Strix-GeForce-RTX-3090-OC.html' url:
'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: 'https://www.arlt.com/Gaming/Gaming-Hardware/Gainward-GeForce-RTX-3090-Phoenix-GS.html' url:
'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: 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-5-5600X-boxed.html' url:
'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: 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-7-5800X-boxed.html' url:
'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: 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5900X-boxed.html' url:
'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: 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5950X-boxed.html' url:
'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5950X-boxed.html'
} }
], ],
name: 'arlt' name: 'arlt'
+18 -9
View File
@@ -12,55 +12,64 @@ export const AsusDe: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2766/asus-rog-strix-rtx2060s-o8g-evo-v2-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2766/asus-rog-strix-rtx2060s-o8g-evo-v2-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3080', series: '3080',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2828/asus-rog-strix-rtx3080-10g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2828/asus-rog-strix-rtx3080-10g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'rog strix oc',
series: '3080', series: '3080',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2829/asus-rog-strix-rtx3080-o10g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2829/asus-rog-strix-rtx3080-o10g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2824/asus-tuf-rtx3080-10g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2824/asus-tuf-rtx3080-10g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2825/asus-tuf-rtx3080-o10g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2825/asus-tuf-rtx3080-o10g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3090', series: '3090',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2826/asus-rog-strix-rtx3090-24g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2826/asus-rog-strix-rtx3090-24g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'rog strix oc',
series: '3090', series: '3090',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2827/asus-rog-strix-rtx3090-o24g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2827/asus-rog-strix-rtx3090-o24g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2822/asus-tuf-rtx3090-24g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2822/asus-tuf-rtx3090-24g-gaming'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2823/asus-tuf-rtx3090-o24g-gaming' url:
'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2823/asus-tuf-rtx3090-o24g-gaming'
} }
], ],
name: 'asus-de' name: 'asus-de'
+48 -24
View File
@@ -20,145 +20,169 @@ export const Azerty: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://azerty.nl/product/gigabyte/3756757/geforce-rtx-2060-oc-6g-grafische-kaart-geforce-rtx-2060' url:
'https://azerty.nl/product/gigabyte/3756757/geforce-rtx-2060-oc-6g-grafische-kaart-geforce-rtx-2060'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/gigabyte/4349658/aorus-geforce-rtx-3080-xtreme-10g-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/gigabyte/4349658/aorus-geforce-rtx-3080-xtreme-10g-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/msi/4346262/geforce-rtx-3080-ventus-3x-10g-oc-grafische-kaart-rtx-3080' url:
'https://azerty.nl/product/msi/4346262/geforce-rtx-3080-ventus-3x-10g-oc-grafische-kaart-rtx-3080'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/asus/4346679/tuf-gaming-geforce-rtx-3080-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/asus/4346679/tuf-gaming-geforce-rtx-3080-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/msi/4346263/geforce-rtx-3080-gaming-x-trio-10g-grafische-kaart-rtx-3080' url:
'https://azerty.nl/product/msi/4346263/geforce-rtx-3080-gaming-x-trio-10g-grafische-kaart-rtx-3080'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/asus/4348176/tuf-gaming-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/asus/4348176/tuf-gaming-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'rog strix oc',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/asus/4348174/rog-strix-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/asus/4348174/rog-strix-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/zotac/4352301/gaming-geforce-rtx-3080-trinity-oc-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/zotac/4352301/gaming-geforce-rtx-3080-trinity-oc-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/gigabyte/4349651/aorus-geforce-rtx-3080-master-10g-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/gigabyte/4349651/aorus-geforce-rtx-3080-master-10g-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://azerty.nl/product/pny/4342269/geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-triple-fan-gaming-edition-grafische-kaart-gf-rtx-3080' url:
'https://azerty.nl/product/pny/4342269/geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-triple-fan-gaming-edition-grafische-kaart-gf-rtx-3080'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'rog strix oc',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/asus/4363892/rog-strix-gaming-geforce-rtx-3070-o8g-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/asus/4363892/rog-strix-gaming-geforce-rtx-3070-o8g-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/asus/4373096/rog-strix-gaming-geforce-rtx-3070-8g-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/asus/4373096/rog-strix-gaming-geforce-rtx-3070-8g-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/asus/4363910/tuf-gaming-geforce-rtx-3070-oc-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/asus/4363910/tuf-gaming-geforce-rtx-3070-oc-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/asus/4373099/tuf-gaming-geforce-rtx-3070-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/asus/4373099/tuf-gaming-geforce-rtx-3070-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/inno3d/4369725/geforce-rtx-3070-ichill-x4-videokaart-8-gb-ddr6' url:
'https://azerty.nl/product/inno3d/4369725/geforce-rtx-3070-ichill-x4-videokaart-8-gb-ddr6'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/inno3d/4369726/geforce-rtx-3070-ichill-x3-videokaart-8-gb-ddr6' url:
'https://azerty.nl/product/inno3d/4369726/geforce-rtx-3070-ichill-x3-videokaart-8-gb-ddr6'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/msi/4374747/geforce-rtx-3070-ventus-3x-oc-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/msi/4374747/geforce-rtx-3070-ventus-3x-oc-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/msi/4365398/geforce-rtx-3070-gaming-x-trio-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/msi/4365398/geforce-rtx-3070-gaming-x-trio-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'dual fan', model: 'dual fan',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/pny/4342270/uprising-dual-fan-geforce-rtx-3070' url:
'https://azerty.nl/product/pny/4342270/uprising-dual-fan-geforce-rtx-3070'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/pny/4342271/epic-x-rgb-geforce-rtx-3070-triple-fan-gaming-edition-xlr8--videokaart-8-gb-gddr6x' url:
'https://azerty.nl/product/pny/4342271/epic-x-rgb-geforce-rtx-3070-triple-fan-gaming-edition-xlr8--videokaart-8-gb-gddr6x'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/evga/4377247/geforce-rtx-3070-ftw3-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/evga/4377247/geforce-rtx-3070-ftw3-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/evga/4377248/xc3-geforce-rtx-3070-xc3-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/evga/4377248/xc3-geforce-rtx-3070-xc3-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/evga/4377250/ftw3-ultra-geforce-rtx-3070-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/evga/4377250/ftw3-ultra-geforce-rtx-3070-videokaart-8-gb-gddr6'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3070', series: '3070',
url: 'https://azerty.nl/product/evga/4377252/xc3-black-geforce-rtx-3070-videokaart-8-gb-gddr6' url:
'https://azerty.nl/product/evga/4377252/xc3-black-geforce-rtx-3070-videokaart-8-gb-gddr6'
} }
], ],
name: 'azerty' name: 'azerty'
+40 -20
View File
@@ -17,7 +17,8 @@ export const BAndH: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.bhphotovideo.com/c/product/1452927-REG/evga_06g_p4_2063_kr_geforce_rtx_2060_xc.html' url:
'https://www.bhphotovideo.com/c/product/1452927-REG/evga_06g_p4_2063_kr_geforce_rtx_2060_xc.html'
}, },
// TUF was removed from BH, not sure why so commenting out listing for now // TUF was removed from BH, not sure why so commenting out listing for now
// { // {
@@ -30,13 +31,15 @@ export const BAndH: Store = {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.bhphotovideo.com/c/product/1593333-REG/gigabyte_gv_n3080gaming_oc_10gd_geforce_rtx_3080_gaming.html' url:
'https://www.bhphotovideo.com/c/product/1593333-REG/gigabyte_gv_n3080gaming_oc_10gd_geforce_rtx_3080_gaming.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.bhphotovideo.com/c/product/1592969-REG/zotac_zt_a30800d_10p_gaming_geforce_rtx_3080.html' url:
'https://www.bhphotovideo.com/c/product/1592969-REG/zotac_zt_a30800d_10p_gaming_geforce_rtx_3080.html'
}, },
// TUF was removed from BH, not sure why so commenting out listing for now // TUF was removed from BH, not sure why so commenting out listing for now
// { // {
@@ -49,103 +52,120 @@ export const BAndH: Store = {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.bhphotovideo.com/c/product/1593996-REG/msi_g3080gxt10_geforce_rtx_3080_gaming.html' url:
'https://www.bhphotovideo.com/c/product/1593996-REG/msi_g3080gxt10_geforce_rtx_3080_gaming.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.bhphotovideo.com/c/product/1593997-REG/msi_g3080v3x10c_geforce_rtx_3080_ventus.html' url:
'https://www.bhphotovideo.com/c/product/1593997-REG/msi_g3080v3x10c_geforce_rtx_3080_ventus.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.bhphotovideo.com/c/product/1593645-REG/msi_geforce_rtx_3080_gaming.html' url:
'https://www.bhphotovideo.com/c/product/1593645-REG/msi_geforce_rtx_3080_gaming.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.bhphotovideo.com/c/product/1593646-REG/msi_geforce_rtx_3080_ventus.html' url:
'https://www.bhphotovideo.com/c/product/1593646-REG/msi_geforce_rtx_3080_ventus.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1592970-REG/zotac_zt_a30900d_10p_gaming_geforce_rtx_3090.html' url:
'https://www.bhphotovideo.com/c/product/1592970-REG/zotac_zt_a30900d_10p_gaming_geforce_rtx_3090.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1593647-REG/msi_geforce_rtx_3090_gaming.html' url:
'https://www.bhphotovideo.com/c/product/1593647-REG/msi_geforce_rtx_3090_gaming.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1593994-REG/msi_g3090gxt24_geforce_rtx_3090_gaming.html' url:
'https://www.bhphotovideo.com/c/product/1593994-REG/msi_g3090gxt24_geforce_rtx_3090_gaming.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1593648-REG/msi_geforce_rtx_3090_ventus.html' url:
'https://www.bhphotovideo.com/c/product/1593648-REG/msi_geforce_rtx_3090_ventus.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1593995-REG/msi_g3090v3x24c_geforce_rtx_3090_ventus.html' url:
'https://www.bhphotovideo.com/c/product/1593995-REG/msi_g3090v3x24c_geforce_rtx_3090_ventus.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1593334-REG/gigabyte_gv_n3090eagle_oc_24gd_geforce_rtx_3090_eagle.html' url:
'https://www.bhphotovideo.com/c/product/1593334-REG/gigabyte_gv_n3090eagle_oc_24gd_geforce_rtx_3090_eagle.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1593335-REG/gigabyte_gv_n3090gaming_oc_24gd_geforce_rtx3090_gaming_oc.html' url:
'https://www.bhphotovideo.com/c/product/1593335-REG/gigabyte_gv_n3090gaming_oc_24gd_geforce_rtx3090_gaming_oc.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1594454-REG/asus_90yv0fd0_m0am00_tuf_gaming_geforce_rtx.html' url:
'https://www.bhphotovideo.com/c/product/1594454-REG/asus_90yv0fd0_m0am00_tuf_gaming_geforce_rtx.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.bhphotovideo.com/c/product/1594451-REG/asus_90yv0fd1_m0am00_tuf_gaming_geforce_rtx.html' url:
'https://www.bhphotovideo.com/c/product/1594451-REG/asus_90yv0fd1_m0am00_tuf_gaming_geforce_rtx.html'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.bhphotovideo.com/c/product/1598372-REG/amd_100_100000059wof_ryzen_9_5950x_3_4.html' url:
'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: 'https://www.bhphotovideo.com/c/product/1598373-REG/amd_100_100000061wof_ryzen_9_5900x_3_7.html' url:
'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: 'https://www.bhphotovideo.com/c/product/1598376-REG/amd_100_100000063wof_ryzen_7_5800x_3_8.html' url:
'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: 'https://www.bhphotovideo.com/c/product/1598377-REG/amd_100_100000065box_ryzen_5_5600x_3_7.html' url:
'https://www.bhphotovideo.com/c/product/1598377-REG/amd_100_100000065box_ryzen_5_5600x_3_7.html'
} }
], ],
name: 'bandh' name: 'bandh'
+30 -15
View File
@@ -7,7 +7,8 @@ export const BestBuyCa: Store = {
text: ['available online'] text: ['available online']
}, },
maxPrice: { maxPrice: {
container: 'div[class^="productPricingContainer"] span[class^="screenReaderOnly_"', container:
'div[class^="productPricingContainer"] span[class^="screenReaderOnly_"',
euroFormat: false euroFormat: false
} }
}, },
@@ -16,85 +17,99 @@ export const BestBuyCa: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-2060-super-gaming-x-8gb-gddr6-video-card/14419420?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-2060-super-gaming-x-8gb-gddr6-video-card/14419420?intl=nosplash'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3080-trinity-10gb-gddr6x-video-card/14953249?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3080-trinity-10gb-gddr6x-video-card/14953249?intl=nosplash'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x', model: 'ventus 3x',
series: '3080', series: '3080',
url: 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3080-ventus-3x-10gb-gddr6x-video-card/14950588?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3080-ventus-3x-10gb-gddr6x-video-card/14950588?intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-video-card/14961449?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-video-card/14961449?intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3080-10gb-gddr6x-video-card/14953248?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3080-10gb-gddr6x-video-card/14953248?intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3080', series: '3080',
url: 'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-video-card/14954116?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-video-card/14954116?intl=nosplash'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3090-trinity-24gb-gddr6x-video-card/14953250?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3090-trinity-24gb-gddr6x-video-card/14953250?intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3090-24gb-gddr6x-video-card/14953247?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3090-24gb-gddr6x-video-card/14953247?intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3090', series: '3090',
url: 'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3090-24gb-gddr6x-video-card/14954117?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3090-24gb-gddr6x-video-card/14954117?intl=nosplash'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x', model: 'ventus 3x',
series: '3090', series: '3090',
url: 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3090-ventus-3x-oc-24gb-gddr6x-video-card/14966477?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3090-ventus-3x-oc-24gb-gddr6x-video-card/14966477?intl=nosplash'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x', model: 'ventus 3x',
series: '3070', series: '3070',
url: 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3070-ventus-3x-oc-8gb-gddr6x-video-card/15038016?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3070-ventus-3x-oc-8gb-gddr6x-video-card/15038016?intl=nosplash'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: 'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-oc-8gb-gddr6x-video-card/15000078?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-oc-8gb-gddr6x-video-card/15000078?intl=nosplash'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge', model: 'twin edge',
series: '3070', series: '3070',
url: 'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-8gb-gddr6x-video-card/15000079?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-8gb-gddr6x-video-card/15000079?intl=nosplash'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: 'https://www.bestbuy.ca/en-ca/product/nvidia-geforce-rtx-3070-8gb-gddr6-video-card-only-at-best-buy/15078017?intl=nosplash' url:
'https://www.bestbuy.ca/en-ca/product/nvidia-geforce-rtx-3070-8gb-gddr6-video-card-only-at-best-buy/15078017?intl=nosplash'
} }
], ],
name: 'bestbuy-ca', name: 'bestbuy-ca',
+80 -40
View File
@@ -7,7 +7,8 @@ export const BestBuy: Store = {
text: ['add to cart'] text: ['add to cart']
}, },
maxPrice: { maxPrice: {
container: '[data-sticky-media-gallery] .priceView-price .priceView-hero-price span', container:
'[data-sticky-media-gallery] .priceView-price .priceView-hero-price span',
euroFormat: false euroFormat: false
} }
}, },
@@ -16,271 +17,310 @@ export const BestBuy: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.bestbuy.com/site/evga-ko-ultra-gaming-nvidia-geforce-rtx-2060-6gb-gddr6-pci-express-3-0-graphics-card-black-gray/6403801.p?skuId=6403801&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-ko-ultra-gaming-nvidia-geforce-rtx-2060-6gb-gddr6-pci-express-3-0-graphics-card-black-gray/6403801.p?skuId=6403801&intl=nosplash'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
cartUrl: 'https://api.bestbuy.com/click/-/6429442/cart', cartUrl: 'https://api.bestbuy.com/click/-/6429442/cart',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: 'https://www.bestbuy.com/site/nvidia-geforce-rtx-3070-8gb-gddr6-pci-express-4-0-graphics-card-dark-platinum-and-black/6429442.p?skuId=6429442&intl=nosplash' url:
'https://www.bestbuy.com/site/nvidia-geforce-rtx-3070-8gb-gddr6-pci-express-4-0-graphics-card-dark-platinum-and-black/6429442.p?skuId=6429442&intl=nosplash'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
cartUrl: 'https://api.bestbuy.com/click/-/6429440/cart', cartUrl: 'https://api.bestbuy.com/click/-/6429440/cart',
model: 'founders edition', model: 'founders edition',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/nvidia-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429440.p?skuId=6429440&intl=nosplash' url:
'https://www.bestbuy.com/site/nvidia-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429440.p?skuId=6429440&intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://api.bestbuy.com/click/-/6432445/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432445/cart',
model: 'rog strix', model: 'rog strix',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/asus-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-strix-graphics-card-black/6432445.p?skuId=6432445&intl=nosplash' url:
'https://www.bestbuy.com/site/asus-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-strix-graphics-card-black/6432445.p?skuId=6432445&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6439300/cart', cartUrl: 'https://api.bestbuy.com/click/-/6439300/cart',
model: 'xc3 black', model: 'xc3 black',
series: '3070', series: '3070',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3070-xc3-black-gaming-8gb-gddr6x-pci-express-4-0-graphics-card/6439300.p?skuId=6439300&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3070-xc3-black-gaming-8gb-gddr6x-pci-express-4-0-graphics-card/6439300.p?skuId=6439300&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6432399/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432399/cart',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6432399.p?skuId=6432399&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6432399.p?skuId=6432399&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6436194/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436194/cart',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436194.p?skuId=6436194&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436194.p?skuId=6436194&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6432400/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432400/cart',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6432400.p?skuId=6432400&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6432400.p?skuId=6432400&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6436196/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436196/cart',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436196.p?skuId=6436196&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436196.p?skuId=6436196&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6436191/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436191/cart',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436191.p?skuId=6436191&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436191.p?skuId=6436191&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6437912/cart', cartUrl: 'https://api.bestbuy.com/click/-/6437912/cart',
model: 'eagle', model: 'eagle',
series: '3070', series: '3070',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437912.p?skuId=6437912&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437912.p?skuId=6437912&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6437909/cart', cartUrl: 'https://api.bestbuy.com/click/-/6437909/cart',
model: 'gaming oc', model: 'gaming oc',
series: '3070', series: '3070',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437909.p?skuId=6437909&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437909.p?skuId=6437909&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6430620/cart', cartUrl: 'https://api.bestbuy.com/click/-/6430620/cart',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6430620.p?acampID=0&cmp=RMX&loc=Hatch&ref=198&skuId=6430620&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6430620.p?acampID=0&cmp=RMX&loc=Hatch&ref=198&skuId=6430620&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6430621/cart', cartUrl: 'https://api.bestbuy.com/click/-/6430621/cart',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6430621.p?skuId=6430621&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6430621.p?skuId=6430621&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6436219/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436219/cart',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-white/6436219.p?skuId=6436219&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-white/6436219.p?skuId=6436219&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6436223/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436223/cart',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6436223.p?skuId=6436223&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6436223.p?skuId=6436223&intl=nosplash'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://api.bestbuy.com/click/-/6430175/cart', cartUrl: 'https://api.bestbuy.com/click/-/6430175/cart',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/msi-geforce-rtx-3080-ventus-3x-10g-oc-bv-gddr6x-pci-express-4-0-graphic-card-black-silver/6430175.p?skuId=6430175&intl=nosplash' url:
'https://www.bestbuy.com/site/msi-geforce-rtx-3080-ventus-3x-10g-oc-bv-gddr6x-pci-express-4-0-graphic-card-black-silver/6430175.p?skuId=6430175&intl=nosplash'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://api.bestbuy.com/click/-/6432654/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432654/cart',
model: 'dual fan', model: 'dual fan',
series: '3070', series: '3070',
url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3070-8gb-dual-fan-graphics-card/6432654.p?skuId=6432654&intl=nosplash' url:
'https://www.bestbuy.com/site/pny-geforce-rtx-3070-8gb-dual-fan-graphics-card/6432654.p?skuId=6432654&intl=nosplash'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://api.bestbuy.com/click/-/6432653/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432653/cart',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3070', series: '3070',
url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3070-8gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432653.p?skuId=6432653&intl=nosplash' url:
'https://www.bestbuy.com/site/pny-geforce-rtx-3070-8gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432653.p?skuId=6432653&intl=nosplash'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://api.bestbuy.com/click/-/6432655/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432655/cart',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432655.p?skuId=6432655&intl=nosplash' url:
'https://www.bestbuy.com/site/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432655.p?skuId=6432655&intl=nosplash'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://api.bestbuy.com/click/-/6432658/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432658/cart',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432658.p?skuId=6432658&intl=nosplash' url:
'https://www.bestbuy.com/site/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432658.p?skuId=6432658&intl=nosplash'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
cartUrl: 'https://api.bestbuy.com/click/-/6429434/cart', cartUrl: 'https://api.bestbuy.com/click/-/6429434/cart',
model: 'founders edition', model: 'founders edition',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/nvidia-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429434.p?skuId=6429434&intl=nosplash' url:
'https://www.bestbuy.com/site/nvidia-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429434.p?skuId=6429434&intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://api.bestbuy.com/click/-/6432447/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432447/cart',
model: 'rog strix', model: 'rog strix',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/asus-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-strix-graphics-card-black/6432447.p?skuId=6432447&intl=nosplash' url:
'https://www.bestbuy.com/site/asus-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-strix-graphics-card-black/6432447.p?skuId=6432447&intl=nosplash'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://api.bestbuy.com/click/-/6432446/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432446/cart',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/asus-tuf-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card-black/6432446.p?skuId=6432446&intl=nosplash' url:
'https://www.bestbuy.com/site/asus-tuf-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card-black/6432446.p?skuId=6432446&intl=nosplash'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://api.bestbuy.com/click/-/6430215/cart', cartUrl: 'https://api.bestbuy.com/click/-/6430215/cart',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/msi-geforce-rtx-3090-ventus-3x-24g-oc-bv-24gb-gddr6x-pci-express-4-0-graphics-card-black-silver/6430215.p?skuId=6430215&intl=nosplash' url:
'https://www.bestbuy.com/site/msi-geforce-rtx-3090-ventus-3x-24g-oc-bv-24gb-gddr6x-pci-express-4-0-graphics-card-black-silver/6430215.p?skuId=6430215&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6430623/cart', cartUrl: 'https://api.bestbuy.com/click/-/6430623/cart',
model: 'gaming', model: 'gaming',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3090-24g-gddr6x-pci-express-4-0-graphics-card-black/6430623.p?skuId=6430623&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3090-24g-gddr6x-pci-express-4-0-graphics-card-black/6430623.p?skuId=6430623&intl=nosplash'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6430624/cart', cartUrl: 'https://api.bestbuy.com/click/-/6430624/cart',
model: 'eagle', model: 'eagle',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3090-24g-gddr6x-pci-express-4-0-graphics-card-black/6430624.p?skuId=6430624&intl=nosplash' url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3090-24g-gddr6x-pci-express-4-0-graphics-card-black/6430624.p?skuId=6430624&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6434363/cart', cartUrl: 'https://api.bestbuy.com/click/-/6434363/cart',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6434363.p?skuId=6434363&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6434363.p?skuId=6434363&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6436193/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436193/cart',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6436193.p?skuId=6436193&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6436193.p?skuId=6436193&intl=nosplash'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6436192/cart', cartUrl: 'https://api.bestbuy.com/click/-/6436192/cart',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6436192.p?skuId=6436192&intl=nosplash' url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6436192.p?skuId=6436192&intl=nosplash'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://api.bestbuy.com/click/-/6432657/cart', cartUrl: 'https://api.bestbuy.com/click/-/6432657/cart',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3090', series: '3090',
url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3090-24gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432657.p?skuId=6432657&intl=nosplash' url:
'https://www.bestbuy.com/site/pny-geforce-rtx-3090-24gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432657.p?skuId=6432657&intl=nosplash'
}, },
{ {
brand: 'amd', 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://www.bestbuy.com/site/amd-ryzen-9-5900x-4th-gen-12-core-24-threads-unlocked-desktop-processor-without-cooler/6438942.p?skuId=6438942&intl=nosplash' url:
'https://www.bestbuy.com/site/amd-ryzen-9-5900x-4th-gen-12-core-24-threads-unlocked-desktop-processor-without-cooler/6438942.p?skuId=6438942&intl=nosplash'
}, },
{ {
brand: 'amd', 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://www.bestbuy.com/site/amd-ryzen-9-5950x-4th-gen-16-core-32-threads-unlocked-desktop-processor-without-cooler/6438941.p?skuId=6438941&intl=nosplash' url:
'https://www.bestbuy.com/site/amd-ryzen-9-5950x-4th-gen-16-core-32-threads-unlocked-desktop-processor-without-cooler/6438941.p?skuId=6438941&intl=nosplash'
}, },
{ {
brand: 'amd', 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://www.bestbuy.com/site/amd-ryzen-7-5800x-4th-gen-8-core-16-threads-unlocked-desktop-processor-without-cooler/6439000.p?skuId=6439000&intl=nosplash' url:
'https://www.bestbuy.com/site/amd-ryzen-7-5800x-4th-gen-8-core-16-threads-unlocked-desktop-processor-without-cooler/6439000.p?skuId=6439000&intl=nosplash'
}, },
{ {
brand: 'amd', 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://www.bestbuy.com/site/amd-ryzen-5-5600x-4th-gen-6-core-12-threads-unlocked-desktop-processor-with-wraith-stealth-cooler/6438943.p?skuId=6438943&intl=nosplash' url:
'https://www.bestbuy.com/site/amd-ryzen-5-5600x-4th-gen-6-core-12-threads-unlocked-desktop-processor-with-wraith-stealth-cooler/6438943.p?skuId=6438943&intl=nosplash'
}, },
{ {
brand: 'sony', 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://www.bestbuy.com/site/sony-playstation-5-console/6426149.p?skuId=6426149&intl=nosplash' url:
'https://www.bestbuy.com/site/sony-playstation-5-console/6426149.p?skuId=6426149&intl=nosplash'
}, },
{ {
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://www.bestbuy.com/site/sony-playstation-5-digital-edition-console/6430161.p?skuId=6430161&intl=nosplash' url:
'https://www.bestbuy.com/site/sony-playstation-5-digital-edition-console/6430161.p?skuId=6430161&intl=nosplash'
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: 'https://www.bestbuy.com/site/microsoft-xbox-series-x-1tb-console-black/6428324.p?skuId=6428324' url:
'https://www.bestbuy.com/site/microsoft-xbox-series-x-1tb-console-black/6428324.p?skuId=6428324'
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: 'https://www.bestbuy.com/site/microsoft-xbox-series-s-512-gb-all-digital-console-disc-free-gaming-white/6430277.p?skuId=6430277' url:
'https://www.bestbuy.com/site/microsoft-xbox-series-s-512-gb-all-digital-console-disc-free-gaming-white/6430277.p?skuId=6430277'
} }
], ],
name: 'bestbuy' name: 'bestbuy'
+2 -1
View File
@@ -20,7 +20,8 @@ export const Box: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.box.co.uk/Gigabyte-GeForce-RTX-2080-Super-8GB-Wind_2724554.html' url:
'https://www.box.co.uk/Gigabyte-GeForce-RTX-2080-Super-8GB-Wind_2724554.html'
} }
], ],
linksBuilder: { linksBuilder: {
+92 -47
View File
@@ -21,279 +21,324 @@ export const Caseking: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.caseking.de/evga-geforce-rtx-2060-super-xc-ultra-gaming-8192-mb-gddr6-gcev-385.html' url:
'https://www.caseking.de/evga-geforce-rtx-2060-super-xc-ultra-gaming-8192-mb-gddr6-gcev-385.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3080', series: '3080',
url: 'https://www.caseking.de/asus-geforce-rtx-3080-rog-strix-10g-10240-mb-gddr6x-gcas-400.html' url:
'https://www.caseking.de/asus-geforce-rtx-3080-rog-strix-10g-10240-mb-gddr6x-gcas-400.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'rog strix oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/asus-geforce-rtx-3080-rog-strix-o10g-10240-mb-gddr6x-gcas-399.html' url:
'https://www.caseking.de/asus-geforce-rtx-3080-rog-strix-o10g-10240-mb-gddr6x-gcas-399.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.caseking.de/asus-geforce-rtx-3080-tuf-gaming-10g-10240-mb-gddr6x-gcas-394.html' url:
'https://www.caseking.de/asus-geforce-rtx-3080-tuf-gaming-10g-10240-mb-gddr6x-gcas-394.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/asus-geforce-rtx-3080-tuf-gaming-o10g-10240-mb-gddr6x-gcas-396.html' url:
'https://www.caseking.de/asus-geforce-rtx-3080-tuf-gaming-o10g-10240-mb-gddr6x-gcas-396.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.caseking.de/evga-geforce-rtx-3080-ftw3-gaming-10240-mb-gddr6x-gcev-416.html' url:
'https://www.caseking.de/evga-geforce-rtx-3080-ftw3-gaming-10240-mb-gddr6x-gcev-416.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.caseking.de/evga-geforce-rtx-3080-ftw3-ultra-gaming-10240-mb-gddr6x-gcev-417.html' url:
'https://www.caseking.de/evga-geforce-rtx-3080-ftw3-ultra-gaming-10240-mb-gddr6x-gcev-417.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.caseking.de/evga-geforce-rtx-3080-xc3-gaming-10240-mb-gddr6x-gcev-415.html' url:
'https://www.caseking.de/evga-geforce-rtx-3080-xc3-gaming-10240-mb-gddr6x-gcev-415.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.caseking.de/evga-geforce-rtx-3080-xc3-black-gaming-10240-mb-gddr6x-gcev-414.html' url:
'https://www.caseking.de/evga-geforce-rtx-3080-xc3-black-gaming-10240-mb-gddr6x-gcev-414.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.caseking.de/evga-geforce-rtx-3080-xc3-ultra-gaming-10240-mb-gddr6x-gcev-423.html' url:
'https://www.caseking.de/evga-geforce-rtx-3080-xc3-ultra-gaming-10240-mb-gddr6x-gcev-423.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.caseking.de/gigabyte-aorus-geforce-rtx-3080-master-10g-10240-mb-gddr6x-gcgb-331.html' url:
'https://www.caseking.de/gigabyte-aorus-geforce-rtx-3080-master-10g-10240-mb-gddr6x-gcgb-331.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/gigabyte-geforce-rtx-3080-eagle-oc-10g-10240-mb-gddr6x-gcgb-326.html' url:
'https://www.caseking.de/gigabyte-geforce-rtx-3080-eagle-oc-10g-10240-mb-gddr6x-gcgb-326.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/gigabyte-geforce-rtx-3080-gaming-oc-10g-10240-mb-gddr6x-gcgb-327.html' url:
'https://www.caseking.de/gigabyte-geforce-rtx-3080-gaming-oc-10g-10240-mb-gddr6x-gcgb-327.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/gigabyte-geforce-rtx-3080-vision-oc-10g-10240-mb-gddr6x-gcgb-332.html' url:
'https://www.caseking.de/gigabyte-geforce-rtx-3080-vision-oc-10g-10240-mb-gddr6x-gcgb-332.html'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: 'https://www.caseking.de/inno3d-geforce-rtx-3080-ichill-x3-10240-mb-gddr6x-gci3-170.html' url:
'https://www.caseking.de/inno3d-geforce-rtx-3080-ichill-x3-10240-mb-gddr6x-gci3-170.html'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3080', series: '3080',
url: 'https://www.caseking.de/inno3d-geforce-rtx-3080-ichill-x4-10240-mb-gddr6x-gci3-169.html' url:
'https://www.caseking.de/inno3d-geforce-rtx-3080-ichill-x4-10240-mb-gddr6x-gci3-169.html'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/inno3d-geforce-rtx-3080-twin-x2-oc-10240-mb-gddr6x-gci3-171.html' url:
'https://www.caseking.de/inno3d-geforce-rtx-3080-twin-x2-oc-10240-mb-gddr6x-gci3-171.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.caseking.de/msi-geforce-rtx-3080-gaming-x-trio-10g-10240-mb-gddr6x-gcmc-248.html' url:
'https://www.caseking.de/msi-geforce-rtx-3080-gaming-x-trio-10g-10240-mb-gddr6x-gcmc-248.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/msi-geforce-rtx-3080-ventus-3x-10g-oc-10240-mb-gddr6x-gcmc-247.html' url:
'https://www.caseking.de/msi-geforce-rtx-3080-ventus-3x-10g-oc-10240-mb-gddr6x-gcmc-247.html'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.caseking.de/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10240-mb-gddr6x-gcpn-075.html' url:
'https://www.caseking.de/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10240-mb-gddr6x-gcpn-075.html'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.caseking.de/pny-geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-10240-mb-gddr6x-gcpn-076.html' url:
'https://www.caseking.de/pny-geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-10240-mb-gddr6x-gcpn-076.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'amp holo', model: 'amp holo',
series: '3080', series: '3080',
url: 'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-amp-holo-10240-mb-gddr6x-gczt-166.html' url:
'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-amp-holo-10240-mb-gddr6x-gczt-166.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-trinity-oc-10240-mb-gddr6x-gczt-167.html' url:
'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-trinity-oc-10240-mb-gddr6x-gczt-167.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-trinity-10240-mb-gddr6x-gczt-163.html' url:
'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-trinity-10240-mb-gddr6x-gczt-163.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3090', series: '3090',
url: 'https://www.caseking.de/asus-geforce-rtx-3090-rog-strix-24g-24576-mb-gddr6x-gcas-397.html' url:
'https://www.caseking.de/asus-geforce-rtx-3090-rog-strix-24g-24576-mb-gddr6x-gcas-397.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'rog strix oc',
series: '3090', series: '3090',
url: 'https://www.caseking.de/asus-geforce-rtx-3090-rog-strix-o24g-24576-mb-gddr6x-gcas-398.html' url:
'https://www.caseking.de/asus-geforce-rtx-3090-rog-strix-o24g-24576-mb-gddr6x-gcas-398.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.caseking.de/asus-geforce-rtx-3090-tuf-gaming-24g-24576-mb-gddr6x-gcas-393.html' url:
'https://www.caseking.de/asus-geforce-rtx-3090-tuf-gaming-24g-24576-mb-gddr6x-gcas-393.html'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.caseking.de/asus-geforce-rtx-3090-tuf-gaming-o24g-24576-mb-gddr6x-gcas-395.html' url:
'https://www.caseking.de/asus-geforce-rtx-3090-tuf-gaming-o24g-24576-mb-gddr6x-gcas-395.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://www.caseking.de/evga-geforce-rtx-3090-ftw3-gaming-24576-mb-gddr6x-gcev-421.html' url:
'https://www.caseking.de/evga-geforce-rtx-3090-ftw3-gaming-24576-mb-gddr6x-gcev-421.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://www.caseking.de/evga-geforce-rtx-3090-ftw3-ultra-gaming-24576-mb-gddr6x-gcev-422.html' url:
'https://www.caseking.de/evga-geforce-rtx-3090-ftw3-ultra-gaming-24576-mb-gddr6x-gcev-422.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://www.caseking.de/evga-geforce-rtx-3090-xc3-gaming-24576-mb-gddr6x-gcev-419.html' url:
'https://www.caseking.de/evga-geforce-rtx-3090-xc3-gaming-24576-mb-gddr6x-gcev-419.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3090', series: '3090',
url: 'https://www.caseking.de/evga-geforce-rtx-3090-xc3-black-gaming-24576-mb-gddr6x-gcev-418.html' url:
'https://www.caseking.de/evga-geforce-rtx-3090-xc3-black-gaming-24576-mb-gddr6x-gcev-418.html'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3090', series: '3090',
url: 'https://www.caseking.de/evga-geforce-rtx-3090-xc3-ultra-gaming-24576-mb-gddr6x-gcev-420.html' url:
'https://www.caseking.de/evga-geforce-rtx-3090-xc3-ultra-gaming-24576-mb-gddr6x-gcev-420.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://www.caseking.de/gigabyte-geforce-rtx-3090-eagle-oc-24g-24576-mb-gddr6x-gcgb-329.html' url:
'https://www.caseking.de/gigabyte-geforce-rtx-3090-eagle-oc-24g-24576-mb-gddr6x-gcgb-329.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.caseking.de/gigabyte-geforce-rtx-3090-gaming-oc-24g-24576-mb-gddr6x-gcgb-328.html' url:
'https://www.caseking.de/gigabyte-geforce-rtx-3090-gaming-oc-24g-24576-mb-gddr6x-gcgb-328.html'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'gaming x3', model: 'gaming x3',
series: '3090', series: '3090',
url: 'https://www.caseking.de/inno3d-geforce-rtx-3090-gaming-x3-24576-mb-gddr6x-gci3-172.html' url:
'https://www.caseking.de/inno3d-geforce-rtx-3090-gaming-x3-24576-mb-gddr6x-gci3-172.html'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3090', series: '3090',
url: 'https://www.caseking.de/inno3d-geforce-rtx-3090-ichill-x3-24576-mb-gddr6x-gci3-168.html' url:
'https://www.caseking.de/inno3d-geforce-rtx-3090-ichill-x3-24576-mb-gddr6x-gci3-168.html'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3090', series: '3090',
url: 'https://www.caseking.de/inno3d-geforce-rtx-3090-ichill-x4-24576-mb-gddr6x-gci3-167.html' url:
'https://www.caseking.de/inno3d-geforce-rtx-3090-ichill-x4-24576-mb-gddr6x-gci3-167.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.caseking.de/msi-geforce-rtx-3090-gaming-x-trio-24g-24576-mb-gddr6x-gcmc-244.html' url:
'https://www.caseking.de/msi-geforce-rtx-3090-gaming-x-trio-24g-24576-mb-gddr6x-gcmc-244.html'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3090', series: '3090',
url: 'https://www.caseking.de/pny-geforce-rtx-3090-xlr8-gaming-epic-x-rgb-24576-mb-gddr6x-gcpn-073.html' url:
'https://www.caseking.de/pny-geforce-rtx-3090-xlr8-gaming-epic-x-rgb-24576-mb-gddr6x-gcpn-073.html'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3090', series: '3090',
url: 'https://www.caseking.de/pny-geforce-rtx-3090-xlr8-gaming-revel-epic-x-rgb-24576-mb-gddr6x-gcpn-074.html' url:
'https://www.caseking.de/pny-geforce-rtx-3090-xlr8-gaming-revel-epic-x-rgb-24576-mb-gddr6x-gcpn-074.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.caseking.de/zotac-gaming-geforce-rtx-3090-trinity-24576-mb-gddr6x-gczt-162.html' url:
'https://www.caseking.de/zotac-gaming-geforce-rtx-3090-trinity-24576-mb-gddr6x-gczt-162.html'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://www.caseking.de/amd-ryzen-5-5600x-3-7-ghz-vermeer-am4-mit-amd-wraith-stealth-kuehler-hpam-202.html' url:
'https://www.caseking.de/amd-ryzen-5-5600x-3-7-ghz-vermeer-am4-mit-amd-wraith-stealth-kuehler-hpam-202.html'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://www.caseking.de/amd-ryzen-7-5800x-3-8-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-203.html' url:
'https://www.caseking.de/amd-ryzen-7-5800x-3-8-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-203.html'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.caseking.de/amd-ryzen-9-5900x-3-7-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-204.html' url:
'https://www.caseking.de/amd-ryzen-9-5900x-3-7-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-204.html'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.caseking.de/amd-ryzen-9-5950x-3-4-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-205.html' url:
'https://www.caseking.de/amd-ryzen-9-5950x-3-4-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-205.html'
} }
], ],
name: 'caseking' name: 'caseking'
}; };
+8 -4
View File
@@ -21,7 +21,8 @@ export const Ccl: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.cclonline.com/product/296443/RTX-2060-SUPER-VENTUS-GP-OC/Graphics-Cards/MSI-GeForce-RTX-2060-SUPER-VENTUS-GP-OC-8GB-Overclocked-Graphics-Card/VGA5671/' url:
'https://www.cclonline.com/product/296443/RTX-2060-SUPER-VENTUS-GP-OC/Graphics-Cards/MSI-GeForce-RTX-2060-SUPER-VENTUS-GP-OC-8GB-Overclocked-Graphics-Card/VGA5671/'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -34,15 +35,18 @@ export const Ccl: Store = {
urls: [ urls: [
{ {
series: '3070', series: '3070',
url: 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3070-Graphics-Cards/' url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3070-Graphics-Cards/'
}, },
{ {
series: '3080', series: '3080',
url: 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3080-Graphics-Cards/' url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3080-Graphics-Cards/'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3090-Graphics-Cards/' url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3090-Graphics-Cards/'
} }
] ]
}, },
+155 -76
View File
@@ -4,7 +4,11 @@ export const Computeruniverse: Store = {
labels: { labels: {
inStock: { inStock: {
container: '.availability', container: '.availability',
text: ['bestellartikel', 'auf lager und sofort lieferbar', 'kurzfristig verfügbar'] text: [
'bestellartikel',
'auf lager und sofort lieferbar',
'kurzfristig verfügbar'
]
}, },
maxPrice: { maxPrice: {
container: '.product-price', container: '.product-price',
@@ -16,31 +20,36 @@ export const Computeruniverse: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.computeruniverse.net/de/gainward-geforce-gtx-1660-super-ghost-6-gb-high-end-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-gtx-1660-super-ghost-6-gb-high-end-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/asus-geforce-rtx3070-dual-rtx3070-8g-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-geforce-rtx3070-dual-rtx3070-8g-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'dual oc', model: 'dual oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/asus-geforce-rtx3070-dual-oc-dual-rtx3070-o8g-8-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-geforce-rtx3070-dual-oc-dual-rtx3070-o8g-8-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3070-gaming-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3070-gaming-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'rog strix oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3070-gaming-oc-8-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3070-gaming-oc-8-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
@@ -52,67 +61,78 @@ export const Computeruniverse: Store = {
brand: 'gainward', brand: 'gainward',
model: 'phoenix', model: 'phoenix',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3070-phoenix-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-rtx3070-phoenix-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3070-phoenix-gs-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-rtx3070-phoenix-gs-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle', model: 'eagle',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-eagle-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-eagle-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-eagle-oc-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-eagle-oc-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-gaming-oc-8-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-gaming-oc-8-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3070-ichill-x3' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3070-ichill-x3'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3070-ichill-x4' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3070-ichill-x4'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3070-gaming-x-trio-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3070-gaming-x-trio-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 2x oc', model: 'ventus 2x oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3070-ventus-2x-oc-8-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3070-ventus-2x-oc-8-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3070-ventus-3x-oc-8-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3070-ventus-3x-oc-8-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3070-gaming-pro-8-gb' url:
'https://www.computeruniverse.net/de/palit-geforce-rtx3070-gaming-pro-8-gb'
}, },
{ {
brand: 'pny', brand: 'pny',
@@ -124,355 +144,414 @@ export const Computeruniverse: Store = {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/pny-geforce-rtx3070-xlr8-gaming-epic-x-rgb-p-8-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/pny-geforce-rtx3070-xlr8-gaming-epic-x-rgb-p-8-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3070-twin-edge-oc-8-gb-oc' url:
'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3070-twin-edge-oc-8-gb-oc'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3080-gaming-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3080-gaming-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'rog strix oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3080-gaming-oc-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3080-gaming-oc-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3080-gaming-tuf-rtx3080-10g-gaming-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3080-gaming-tuf-rtx3080-10g-gaming-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3080-gaming-oc-tuf-rtx3080-o10g-gaming-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3080-gaming-oc-tuf-rtx3080-o10g-gaming-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-ftw3-10-gb-high-end-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3080-ftw3-10-gb-high-end-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-ultra-ftw3-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3080-ultra-ftw3-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-black-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-black-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-ultra-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-ultra-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix', model: 'phoenix',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3080-phoenix-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-rtx3080-phoenix-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3080-phoenix-gs-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-rtx3080-phoenix-gs-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/gigabyte-aorus-geforce-rtx3080-master-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-aorus-geforce-rtx3080-master-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-eagle-oc-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-eagle-oc-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-gaming-oc-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-gaming-oc-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-vision-oc-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-vision-oc-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-ichill-x3-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-ichill-x3-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-ichill-x4-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-ichill-x4-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-twin-x2-oc-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-twin-x2-oc-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'kfa2', brand: 'kfa2',
model: 'sg oc', model: 'sg oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/kfa-geforce-rtx3080-sg-oc-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/kfa-geforce-rtx3080-sg-oc-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3080-gaming-x-trio-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3080-gaming-x-trio-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3080-ventus-3x-oc-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3080-ventus-3x-oc-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3080-gamingpro-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/palit-geforce-rtx3080-gamingpro-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3080-gamingpro-oc-10-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/palit-geforce-rtx3080-gamingpro-oc-10-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-p-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-p-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/pny-geforce-rtx3080-xlr8-gaming-epic-x-rgb-m-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/pny-geforce-rtx3080-xlr8-gaming-epic-x-rgb-m-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'amp holo', model: 'amp holo',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/zotac-geforce-rtx3080-amp-holo-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/zotac-geforce-rtx3080-amp-holo-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'amp extreme holo', model: 'amp extreme holo',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/zotac-geforce-rtx3080-amp-extreme-holo-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/zotac-geforce-rtx3080-amp-extreme-holo-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3080-trinity-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3080-trinity-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3080-trinity-oc-10-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3080-trinity-oc-10-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3090-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3090-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'rog strix oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3090-gaming-oc-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3090-gaming-oc-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3090-gaming-tuf-rtx3090-24g-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3090-gaming-tuf-rtx3090-24g-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3090-gaming-oc-tuf-rtx3090-o24g-gaming-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3090-gaming-oc-tuf-rtx3090-o24g-gaming-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-ftw3-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3090-ftw3-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-ftw3-ultra-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3090-ftw3-ultra-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-black-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-black-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-ultra-gaming-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-ultra-gaming-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix', model: 'phoenix',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3090-phoenix-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-rtx3090-phoenix-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs oc', model: 'phoenix gs oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3090-phoenix-gs-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gainward-geforce-rtx3090-phoenix-gs-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/gigabyte-aorus-geforce-rtx3090-master-24gb' url:
'https://www.computeruniverse.net/de/gigabyte-aorus-geforce-rtx3090-master-24gb'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3090-eagle-oc-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3090-eagle-oc-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3090-gaming-oc-24-gb-oc' url:
'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3090-gaming-oc-24-gb-oc'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3090-ichill-x3-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3090-ichill-x3-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3090-ichill-x4-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/inno3d-geforce-rtx3090-ichill-x4-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'kfa2', brand: 'kfa2',
model: 'sg oc', model: 'sg oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/kfa-geforce-rtx3090-sg-oc-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/kfa-geforce-rtx3090-sg-oc-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3090-gaming-x-trio-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3090-gaming-x-trio-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3090-ventus-3x-oc-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/msi-geforce-rtx3090-ventus-3x-oc-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3090-gamingpro-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/palit-geforce-rtx3090-gamingpro-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3090-gamingpro-oc-24-gb-oc-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/palit-geforce-rtx3090-gamingpro-oc-24-gb-oc-enthusiast-grafikkarte'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/pny-geforce-rtx3090-xlr8-gaming-epic-x-rgb-m-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/pny-geforce-rtx3090-xlr8-gaming-epic-x-rgb-m-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/pny-geforce-rtx3090-xlr8-gaming-epic-x-rgb-p-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/pny-geforce-rtx3090-xlr8-gaming-epic-x-rgb-p-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx-3090-trinity-24-gb-enthusiast-grafikkarte' url:
'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx-3090-trinity-24-gb-enthusiast-grafikkarte'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://www.computeruniverse.net/de/amd-ryzen-5-5600x-boxed-mit-wraith-stealth-kuehler' url:
'https://www.computeruniverse.net/de/amd-ryzen-5-5600x-boxed-mit-wraith-stealth-kuehler'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://www.computeruniverse.net/de/amd-ryzen-7-5800x-box-ohne-kuehler' url:
'https://www.computeruniverse.net/de/amd-ryzen-7-5800x-box-ohne-kuehler'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.computeruniverse.net/de/amd-ryzen-9-5900x-box-ohne-kuehler' url:
'https://www.computeruniverse.net/de/amd-ryzen-9-5900x-box-ohne-kuehler'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.computeruniverse.net/de/amd-ryzen-9-5950x-box-ohne-kuehler' url:
'https://www.computeruniverse.net/de/amd-ryzen-9-5950x-box-ohne-kuehler'
} }
], ],
name: 'computeruniverse' name: 'computeruniverse'
+50 -26
View File
@@ -16,153 +16,177 @@ export const Coolmod: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.coolmod.com/kfa2-geforce-rtx-2060-super-1-click-oc-8gb-gddr6-tarjeta-grafica-precio' url:
'https://www.coolmod.com/kfa2-geforce-rtx-2060-super-1-click-oc-8gb-gddr6-tarjeta-grafica-precio'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-eagle-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/gigabyte-geforce-rtx-3080-eagle-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/msi-geforce-rtx-3080-ventus-3x-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/msi-geforce-rtx-3080-ventus-3x-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-gaming-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-gaming-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-gaming-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/gigabyte-geforce-rtx-3080-gaming-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/msi-geforce-rtx-3080-gaming-x-trio-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/msi-geforce-rtx-3080-gaming-x-trio-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-oc-gaming-10gb-gddr6x-tarjeta-grfica-precio' url:
'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-oc-gaming-10gb-gddr6x-tarjeta-grfica-precio'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'rog strix oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-black-gaming-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-black-gaming-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-tarjeta-grfica-precio' url:
'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-tarjeta-grfica-precio'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-vision-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/gigabyte-geforce-rtx-3080-vision-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-gaming-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-gaming-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-master-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-master-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-gaming-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-gaming-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8', model: 'xlr8',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'kfa2', brand: 'kfa2',
model: 'sg-oc', model: 'sg-oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/kfa2-geforce-rtx-3080-sg-1-click-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/kfa2-geforce-rtx-3080-sg-1-click-oc-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x4', model: 'ichill x4',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x4-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x4-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x3-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x3-10gb-gddr6x-tarjeta-grafica-precio'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.coolmod.com/inno3d-geforce-rtx-3080-twin-x2-oc-10gb-gddr6x-tarjeta-grafica-precio' url:
'https://www.coolmod.com/inno3d-geforce-rtx-3080-twin-x2-oc-10gb-gddr6x-tarjeta-grafica-precio'
} }
], ],
name: 'coolmod' name: 'coolmod'
}; };
+6 -3
View File
@@ -21,7 +21,8 @@ export const Currys: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/graphics-cards/msi-geforce-rtx-2060-8-gb-super-ventus-gp-oc-graphics-card-10196803-pdt.html' url:
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/graphics-cards/msi-geforce-rtx-2060-8-gb-super-ventus-gp-oc-graphics-card-10196803-pdt.html'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -34,11 +35,13 @@ export const Currys: Store = {
urls: [ urls: [
{ {
series: '3080', series: '3080',
url: 'https://www.currys.co.uk/gbuk/rtx-3080/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313767/xx-criteria.html' url:
'https://www.currys.co.uk/gbuk/rtx-3080/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313767/xx-criteria.html'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.currys.co.uk/gbuk/rtx-3090/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313725/xx-criteria.html' url:
'https://www.currys.co.uk/gbuk/rtx-3090/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313725/xx-criteria.html'
} }
] ]
}, },
+10 -5
View File
@@ -21,7 +21,8 @@ export const Ebuyer: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.ebuyer.com/874209-gigabyte-geforce-rtx-2060-windforce-6gb-oc-graphics-card-gv-n2060wf2oc-6gd-v2' url:
'https://www.ebuyer.com/874209-gigabyte-geforce-rtx-2060-windforce-6gb-oc-graphics-card-gv-n2060wf2oc-6gd-v2'
}, },
{ {
brand: 'sony', brand: 'sony',
@@ -33,7 +34,8 @@ export const Ebuyer: Store = {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.ebuyer.com/1125332-sony-playstation-5-digital-edition-cfi-1015b' url:
'https://www.ebuyer.com/1125332-sony-playstation-5-digital-edition-cfi-1015b'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -46,15 +48,18 @@ export const Ebuyer: Store = {
urls: [ urls: [
{ {
series: '3070', series: '3070',
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3070' url:
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3070'
}, },
{ {
series: '3080', series: '3080',
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3080' url:
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3080'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3090' url:
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3090'
} }
] ]
}, },
+2 -1
View File
@@ -20,7 +20,8 @@ export const Game: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.game.co.uk/en/ea-sports-fifa-21-500gb-ps4-bundle-2832947' url:
'https://www.game.co.uk/en/ea-sports-fifa-21-500gb-ps4-bundle-2832947'
}, },
{ {
brand: 'sony', brand: 'sony',
+12 -6
View File
@@ -26,37 +26,43 @@ export const Gamestop: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.gamestop.com/nav-pc-hardware-desktops/products/clx-set-tgmsetgxe9600bm-gaming-desktop/11096665' url:
'https://www.gamestop.com/nav-pc-hardware-desktops/products/clx-set-tgmsetgxe9600bm-gaming-desktop/11096665'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.gamestop.com/video-games/pc/components/graphics-cards/products/tuf-gaming-geforce-rtx-3080-graphics-card/11109446.html' url:
'https://www.gamestop.com/video-games/pc/components/graphics-cards/products/tuf-gaming-geforce-rtx-3080-graphics-card/11109446.html'
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 console', model: 'ps5 console',
series: 'sonyps5c', series: 'sonyps5c',
url: 'https://www.gamestop.com/video-games/playstation-5/consoles/products/playstation-5/11108140' url:
'https://www.gamestop.com/video-games/playstation-5/consoles/products/playstation-5/11108140'
}, },
{ {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.gamestop.com/video-games/playstation-5/consoles/products/playstation-5-digital-edition/11108141' url:
'https://www.gamestop.com/video-games/playstation-5/consoles/products/playstation-5-digital-edition/11108141'
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series x', model: 'xbox series x',
series: 'xboxsx', series: 'xboxsx',
url: 'https://www.gamestop.com/video-games/xbox-series-x/consoles/products/xbox-series-x/11108371.html?condition=New' url:
'https://www.gamestop.com/video-games/xbox-series-x/consoles/products/xbox-series-x/11108371.html?condition=New'
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
model: 'xbox series s', model: 'xbox series s',
series: 'xboxss', series: 'xboxss',
url: 'https://www.gamestop.com/video-games/xbox-series-x/consoles/products/xbox-series-s-digital-edition/11108372.html?condition=New' url:
'https://www.gamestop.com/video-games/xbox-series-x/consoles/products/xbox-series-s-digital-edition/11108372.html?condition=New'
} }
], ],
name: 'gamestop', name: 'gamestop',
+8 -2
View File
@@ -10,7 +10,11 @@ type Backoff = {
const stores: Record<string, Backoff> = {}; const stores: Record<string, Backoff> = {};
export async function processBackoffDelay(store: Store, link: Link, statusCode: number): Promise<number> { export async function processBackoffDelay(
store: Store,
link: Link,
statusCode: number
): Promise<number> {
/** /**
* We treat statusCode 0 as successful as some of the puppeteer plugins * We treat statusCode 0 as successful as some of the puppeteer plugins
* cause side-effects resulting in an empty response object even though * cause side-effects resulting in an empty response object even though
@@ -41,7 +45,9 @@ export async function processBackoffDelay(store: Store, link: Link, statusCode:
} }
const backoffTime = backoff.time; const backoffTime = backoff.time;
logger.debug(Print.backoff(link, store, {delay: backoffTime, statusCode}, true)); logger.debug(
Print.backoff(link, store, {delay: backoffTime, statusCode}, true)
);
await delay(backoff.time); await delay(backoff.time);
+16 -5
View File
@@ -95,7 +95,10 @@ export function parseCard(name: string): Card | null {
} }
// Split non spaced TitleCase words only after extracting brand // Split non spaced TitleCase words only after extracting brand
model = model.join(' ').replace(/([A-Z][a-z]+)([A-Z][a-z]+)/g, '$1 $2').split(' '); model = model
.join(' ')
.replace(/([A-Z][a-z]+)([A-Z][a-z]+)/g, '$1 $2')
.split(' ');
// Some vendors have oc at the beginning of the product name, // Some vendors have oc at the beginning of the product name,
// store whether the card contains the term "oc" and remove // store whether the card contains the term "oc" and remove
@@ -103,15 +106,19 @@ export function parseCard(name: string): Card | null {
let isOC = false; let isOC = false;
/* eslint-disable @typescript-eslint/prefer-regexp-exec */ /* eslint-disable @typescript-eslint/prefer-regexp-exec */
model = model.filter(word => { model = model.filter((word) => {
if (word.toLowerCase() === 'oc') { if (word.toLowerCase() === 'oc') {
isOC = true; isOC = true;
return false; return false;
} }
return !word.match(/^(nvidia|geforce|ge|force|rtx|amp[ae]re|graphics|card|gpu|pci-?e(xpress)?|ray-?tracing|ray|tracing|core|boost|epicx)$/i) && return (
!word.match(
/^(nvidia|geforce|ge|force|rtx|amp[ae]re|graphics|card|gpu|pci-?e(xpress)?|ray-?tracing|ray|tracing|core|boost|epicx)$/i
) &&
!word.match(/^(\d+(?:gb?|mhz)?|gb|mhz|g?ddr(\d+x?)?)$/i) && !word.match(/^(\d+(?:gb?|mhz)?|gb|mhz|g?ddr(\d+x?)?)$/i) &&
!word.match(/^(display ?port|hdmi|vga)$/i); !word.match(/^(display ?port|hdmi|vga)$/i)
);
}); });
/* eslint-enable @typescript-eslint/prefer-regexp-exec */ /* eslint-enable @typescript-eslint/prefer-regexp-exec */
@@ -125,6 +132,10 @@ export function parseCard(name: string): Card | null {
return { return {
brand: brand.toLowerCase(), brand: brand.toLowerCase(),
model: model.join(' ').toLowerCase().replace(/ gaming\b/g, '').trim() model: model
.join(' ')
.toLowerCase()
.replace(/ gaming\b/g, '')
.trim()
}; };
} }
+27 -12
View File
@@ -74,7 +74,12 @@ export class NvidiaCart {
break; break;
} catch (error) { } catch (error) {
logger.error(`✖ [nvidia] ${name} could not automatically add to cart, attempt ${i + 1} of ${config.nvidia.addToCardAttempts}`, error); logger.error(
`✖ [nvidia] ${name} could not automatically add to cart, attempt ${
i + 1
} of ${config.nvidia.addToCardAttempts}`,
error
);
logger.debug(error); logger.debug(error);
lastError = error; lastError = error;
@@ -92,7 +97,9 @@ export class NvidiaCart {
await open(cartUrl); await open(cartUrl);
} catch (error) { } catch (error) {
logger.error(`✖ [nvidia] ${name} could not automatically add to cart, opening page`); logger.error(
`✖ [nvidia] ${name} could not automatically add to cart, opening page`
);
logger.debug(error); logger.debug(error);
cartUrl = this.fallbackCartUrl; cartUrl = this.fallbackCartUrl;
@@ -118,10 +125,18 @@ export class NvidiaCart {
public async refreshSessionToken(): Promise<void> { public async refreshSessionToken(): Promise<void> {
logger.debug(' [nvidia] refreshing session token'); logger.debug(' [nvidia] refreshing session token');
try { try {
const result = await usingResponse(this.browser, this.sessionUrl, async response => { const result = await usingResponse(
return response?.json() as NvidiaSessionTokenJSON | undefined; this.browser,
}); this.sessionUrl,
if (typeof result !== 'object' || result === null || !('session_token' in result)) { async (response) => {
return response?.json() as NvidiaSessionTokenJSON | undefined;
}
);
if (
typeof result !== 'object' ||
result === null ||
!('session_token' in result)
) {
throw new Error('malformed response'); throw new Error('malformed response');
} }
@@ -133,18 +148,20 @@ export class NvidiaCart {
} }
} }
protected async addToCartAndGetLocationRedirect(productId: number): Promise<string> { protected async addToCartAndGetLocationRedirect(
productId: number
): Promise<string> {
const url = 'https://api-prod.nvidia.com/direct-sales-shop/DR/add-to-cart'; const url = 'https://api-prod.nvidia.com/direct-sales-shop/DR/add-to-cart';
const sessionToken = await this.getSessionToken(); const sessionToken = await this.getSessionToken();
logger.info(` [nvidia] session_token=${sessionToken}`); logger.info(` [nvidia] session_token=${sessionToken}`);
const locationData = await usingPage(this.browser, async page => { const locationData = await usingPage(this.browser, async (page) => {
page.removeAllListeners('request'); page.removeAllListeners('request');
await page.setRequestInterception(true); await page.setRequestInterception(true);
page.on('request', interceptedRequest => { page.on('request', (interceptedRequest) => {
void interceptedRequest.continue({ void interceptedRequest.continue({
headers: { headers: {
...interceptedRequest.headers(), ...interceptedRequest.headers(),
@@ -153,9 +170,7 @@ export class NvidiaCart {
}, },
method: 'POST', method: 'POST',
postData: JSON.stringify({ postData: JSON.stringify({
products: [ products: [{productId, quantity: 1}]
{productId, quantity: 1}
]
}) })
}); });
}); });
+27 -7
View File
@@ -13,15 +13,23 @@ function getRegionInfo(): NvidiaRegionInfo {
const regionInfo = regionInfos.get(country); const regionInfo = regionInfos.get(country);
if (!regionInfo) { if (!regionInfo) {
throw new Error(`LogicException could not retrieve region info for ${country}`); throw new Error(
`LogicException could not retrieve region info for ${country}`
);
} }
return regionInfo; return regionInfo;
} }
function nvidiaStockUrl(id: number, drLocale: string, currency: string): string { function nvidiaStockUrl(
return `https://api-prod.nvidia.com/direct-sales-shop/DR/products/${drLocale}/${currency}/${id}?` + id: number,
timestampUrlParameter().slice(1); drLocale: string,
currency: string
): string {
return (
`https://api-prod.nvidia.com/direct-sales-shop/DR/products/${drLocale}/${currency}/${id}?` +
timestampUrlParameter().slice(1)
);
} }
let cart: NvidiaCart; let cart: NvidiaCart;
@@ -45,7 +53,13 @@ export function generateOpenCartAction(id: number, cardName: string) {
} }
export function generateLinks(): Link[] { export function generateLinks(): Link[] {
const {drLocale, fe3080Id, fe3090Id, fe2060SuperId, currency} = getRegionInfo(); const {
drLocale,
fe3080Id,
fe3090Id,
fe2060SuperId,
currency
} = getRegionInfo();
const links: Link[] = []; const links: Link[] = [];
@@ -63,7 +77,10 @@ export function generateLinks(): Link[] {
links.push({ links.push({
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
openCartAction: generateOpenCartAction(fe3080Id, 'nvidia founders edition 3080'), openCartAction: generateOpenCartAction(
fe3080Id,
'nvidia founders edition 3080'
),
series: '3080', series: '3080',
url: nvidiaStockUrl(fe3080Id, drLocale, currency) url: nvidiaStockUrl(fe3080Id, drLocale, currency)
}); });
@@ -73,7 +90,10 @@ export function generateLinks(): Link[] {
links.push({ links.push({
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
openCartAction: generateOpenCartAction(fe3090Id, 'nvidia founders edition 3090'), openCartAction: generateOpenCartAction(
fe3090Id,
'nvidia founders edition 3090'
),
series: '3090', series: '3090',
url: nvidiaStockUrl(fe3090Id, drLocale, currency) url: nvidiaStockUrl(fe3090Id, drLocale, currency)
}); });
+17 -5
View File
@@ -144,7 +144,11 @@ function filterBrandsSeriesModels() {
function printConfig() { function printConfig() {
if (config.store.stores.length > 0) { if (config.store.stores.length > 0) {
logger.info(` selected stores: ${config.store.stores.map(store => store.name).join(', ')}`); logger.info(
` selected stores: ${config.store.stores
.map((store) => store.name)
.join(', ')}`
);
} }
if (config.store.showOnlyBrands.length > 0) { if (config.store.showOnlyBrands.length > 0) {
@@ -152,9 +156,15 @@ function printConfig() {
} }
if (config.store.showOnlyModels.length > 0) { if (config.store.showOnlyModels.length > 0) {
logger.info(` selected models: ${config.store.showOnlyModels.map(entry => { logger.info(
return entry.series ? entry.name + ' (' + entry.series + ')' : entry.name; ` selected models: ${config.store.showOnlyModels
}).join(', ')}`); .map((entry) => {
return entry.series
? entry.name + ' (' + entry.series + ')'
: entry.name;
})
.join(', ')}`
);
} }
if (config.store.showOnlySeries.length > 0) { if (config.store.showOnlySeries.length > 0) {
@@ -169,7 +179,9 @@ function warnIfStoreDeprecated(store: Store) {
logger.warn(`${store.name} is deprecated in favor of bestbuy`); logger.warn(`${store.name} is deprecated in favor of bestbuy`);
break; break;
case 'evga': case 'evga':
logger.warn(`${store.name} is deprecated since they only support queuing`); logger.warn(
`${store.name} is deprecated since they only support queuing`
);
break; break;
default: default:
} }
+10 -8
View File
@@ -6,14 +6,16 @@ export const Mediamarkt: Store = {
container: 'span[font-family="price"]', container: 'span[font-family="price"]',
euroFormat: false euroFormat: false
}, },
outOfStock: [{ outOfStock: [
container: '#root', {
text: ['dieser artikel ist aktuell nicht verfügbar.'] container: '#root',
}, text: ['dieser artikel ist aktuell nicht verfügbar.']
{ },
container: '#root', {
text: ['leider keine Lieferung möglich'] container: '#root',
}] text: ['leider keine Lieferung möglich']
}
]
}, },
links: [ links: [
{ {
+4 -2
View File
@@ -3,11 +3,13 @@ import {Store} from './store';
export const MemoryExpress: Store = { export const MemoryExpress: Store = {
labels: { labels: {
maxPrice: { maxPrice: {
container: '#ProductPricing .GrandTotal.c-capr-pricing__grand-total > div', container:
'#ProductPricing .GrandTotal.c-capr-pricing__grand-total > div',
euroFormat: false euroFormat: false
}, },
outOfStock: { outOfStock: {
container: '.c-capr-inventory-selector__details-online .c-capr-inventory-store__availability', container:
'.c-capr-inventory-selector__details-online .c-capr-inventory-store__availability',
text: ['Out of Stock'] text: ['Out of Stock']
} }
}, },
+30 -15
View File
@@ -20,91 +20,106 @@ export const Mindfactory: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.mindfactory.de/product_info.php/8GB-MSI-GeForce-RTX2070Super-GAMING-X-DDR6--Retail-_1329683.html' url:
'https://www.mindfactory.de/product_info.php/8GB-MSI-GeForce-RTX2070Super-GAMING-X-DDR6--Retail-_1329683.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-RTX3080-AORUS-MASTER-GDDR6X-3xHDMI-3xDP--Retail-_1378681.html' url:
'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-RTX3080-AORUS-MASTER-GDDR6X-3xHDMI-3xDP--Retail-_1378681.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-RTX3080-AORUS-XTREME-GDDR6X-3xHDMI-3xDP--Retail-_1380484.html' url:
'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-RTX3080-AORUS-XTREME-GDDR6X-3xHDMI-3xDP--Retail-_1380484.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-GeForce-RTX-3080-Gaming-OC-3xDP-2x-HDMI--Retail-_1376263.html' url:
'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-GeForce-RTX-3080-Gaming-OC-3xDP-2x-HDMI--Retail-_1376263.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-RTX3080-VISION-OC-GDDR6X-2xHDMI-3xDP--Retail-_1378682.html' url:
'https://www.mindfactory.de/product_info.php/10GB-Gigabyte-RTX3080-VISION-OC-GDDR6X-2xHDMI-3xDP--Retail-_1378682.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-MSI-GeForce-RTX-3080-Gaming-X-TRIO--Retail-_1376481.html' url:
'https://www.mindfactory.de/product_info.php/10GB-MSI-GeForce-RTX-3080-Gaming-X-TRIO--Retail-_1376481.html'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-Palit-GeForce-RTX-3080-GamingPro--Retail-_1376483.html' url:
'https://www.mindfactory.de/product_info.php/10GB-Palit-GeForce-RTX-3080-GamingPro--Retail-_1376483.html'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.mindfactory.de/product_info.php/10GB-Zotac-GeForce-RTX-3080-TRINITY-OC--GDDR6X-_1377143.html' url:
'https://www.mindfactory.de/product_info.php/10GB-Zotac-GeForce-RTX-3080-TRINITY-OC--GDDR6X-_1377143.html'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.mindfactory.de/product_info.php/24GB-Gigabyte-GeForce-3090-Gaming-OC--Retail-_1377265.html' url:
'https://www.mindfactory.de/product_info.php/24GB-Gigabyte-GeForce-3090-Gaming-OC--Retail-_1377265.html'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x', model: 'ventus 3x',
series: '3090', series: '3090',
url: 'https://www.mindfactory.de/product_info.php/24GB-MSI-GeForce-RTX-3090-VENTUS-3X-DDR6--Retail-_1377475.html' url:
'https://www.mindfactory.de/product_info.php/24GB-MSI-GeForce-RTX-3090-VENTUS-3X-DDR6--Retail-_1377475.html'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3090', series: '3090',
url: 'https://www.mindfactory.de/product_info.php/24GB-Palit-GeForce-RTX-3090-GamingPro-DDR6--Retail-_1377233.html' url:
'https://www.mindfactory.de/product_info.php/24GB-Palit-GeForce-RTX-3090-GamingPro-DDR6--Retail-_1377233.html'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
url: 'https://www.mindfactory.de/product_info.php/AMD-Ryzen-5-5600X-6x-3-70GHz-So-AM4-BOX_1380726.html' url:
'https://www.mindfactory.de/product_info.php/AMD-Ryzen-5-5600X-6x-3-70GHz-So-AM4-BOX_1380726.html'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
url: 'https://www.mindfactory.de/product_info.php/AMD-Ryzen-7-5800X-8x-3-80GHz-So-AM4-WOF_1380727.html' url:
'https://www.mindfactory.de/product_info.php/AMD-Ryzen-7-5800X-8x-3-80GHz-So-AM4-WOF_1380727.html'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
url: 'https://www.mindfactory.de/product_info.php/AMD-Ryzen-9-5900X-12x-3-70GHz-So-AM4-WOF_1380728.html' url:
'https://www.mindfactory.de/product_info.php/AMD-Ryzen-9-5900X-12x-3-70GHz-So-AM4-WOF_1380728.html'
}, },
{ {
brand: 'amd', brand: 'amd',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
url: 'https://www.mindfactory.de/product_info.php/AMD-Ryzen-9-5950X-16x-3-40GHz-So-AM4-WOF_1380729.html' url:
'https://www.mindfactory.de/product_info.php/AMD-Ryzen-9-5950X-16x-3-40GHz-So-AM4-WOF_1380729.html'
} }
], ],
name: 'mindfactory' name: 'mindfactory'
+107 -52
View File
@@ -22,350 +22,400 @@ export const NeweggCa: Store = {
itemNumber: '14-500-495', itemNumber: '14-500-495',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.newegg.ca/evga-geforce-rtx-2060-06g-p4-2066-kr/p/N82E16814487488' url:
'https://www.newegg.ca/evga-geforce-rtx-2060-06g-p4-2066-kr/p/N82E16814487488'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-453', itemNumber: '14-126-453',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/asus-geforce-rtx-3080-tuf-rtx3080-10g-gaming/p/N82E16814126453' url:
'https://www.newegg.ca/asus-geforce-rtx-3080-tuf-rtx3080-10g-gaming/p/N82E16814126453'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-519', itemNumber: '14-487-519',
model: 'ftw3 gaming', model: 'ftw3 gaming',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3895-kr/p/N82E16814487519' url:
'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3895-kr/p/N82E16814487519'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-518', itemNumber: '14-487-518',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3897-kr/p/N82E16814487518' url:
'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3897-kr/p/N82E16814487518'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-522', itemNumber: '14-487-522',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3881-kr/p/N82E16814487522' url:
'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3881-kr/p/N82E16814487522'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-521', itemNumber: '14-487-521',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3883-kr/p/N82E16814487521' url:
'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3883-kr/p/N82E16814487521'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-520', itemNumber: '14-487-520',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3885-kr/p/N82E16814487520' url:
'https://www.newegg.ca/evga-geforce-rtx-3080-10g-p5-3885-kr/p/N82E16814487520'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-600', itemNumber: '14-137-600',
model: 'ventus 3x', model: 'ventus 3x',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g/p/N82E16814137600' url:
'https://www.newegg.ca/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g/p/N82E16814137600'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-598', itemNumber: '14-137-598',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g-oc/p/N82E16814137598' url:
'https://www.newegg.ca/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g-oc/p/N82E16814137598'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-597', itemNumber: '14-137-597',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/msi-geforce-rtx-3080-rtx-3080-gaming-x-trio-10g/p/N82E16814137597' url:
'https://www.newegg.ca/msi-geforce-rtx-3080-rtx-3080-gaming-x-trio-10g/p/N82E16814137597'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '149-32-329', itemNumber: '149-32-329',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080gaming-oc-10gd/p/N82E16814932329' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080gaming-oc-10gd/p/N82E16814932329'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '149-32-330', itemNumber: '149-32-330',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080eagle-oc-10gd/p/N82E16814932330' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080eagle-oc-10gd/p/N82E16814932330'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-336', itemNumber: '14-932-336',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080aorus-m-10gd/p/N82E16814932336' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080aorus-m-10gd/p/N82E16814932336'
}, },
{ {
brand: 'zotac', brand: 'zotac',
itemNumber: '14-950-502', itemNumber: '14-950-502',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/zotac-geforce-rtx-3080-zt-a30800d-10p/p/N82E16814500502' url:
'https://www.newegg.ca/zotac-geforce-rtx-3080-zt-a30800d-10p/p/N82E16814500502'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-457', itemNumber: '14-126-457',
model: 'rog strix', model: 'rog strix',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/asus-geforce-rtx-3080-rog-strix-rtx3080-o10g-gaming/p/N82E16814126457' url:
'https://www.newegg.ca/asus-geforce-rtx-3080-rog-strix-rtx3080-o10g-gaming/p/N82E16814126457'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-452', itemNumber: '14-126-452',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/asus-geforce-rtx-3080-tuf-rtx3080-o10g-gaming/p/N82E16814126452' url:
'https://www.newegg.ca/asus-geforce-rtx-3080-tuf-rtx3080-o10g-gaming/p/N82E16814126452'
}, },
{ {
brand: 'zotac', brand: 'zotac',
itemNumber: '14-500-504', itemNumber: '14-500-504',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/zotac-geforce-rtx-3080-zt-t30800j-10p/p/N82E16814500504' url:
'https://www.newegg.ca/zotac-geforce-rtx-3080-zt-t30800j-10p/p/N82E16814500504'
}, },
{ {
brand: 'pny', brand: 'pny',
itemNumber: '14-133-809', itemNumber: '14-133-809',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/pny-geforce-rtx-3080-vcg308010tfxppb/p/N82E16814133809' url:
'https://www.newegg.ca/pny-geforce-rtx-3080-vcg308010tfxppb/p/N82E16814133809'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-337', itemNumber: '14-932-337',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080vision-oc-10gd/p/N82E16814932337' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3080-gv-n3080vision-oc-10gd/p/N82E16814932337'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-595', itemNumber: '14-137-595',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/msi-geforce-rtx-3090-rtx-3090-gaming-x-trio-24g/p/N82E16814137595' url:
'https://www.newegg.ca/msi-geforce-rtx-3090-rtx-3090-gaming-x-trio-24g/p/N82E16814137595'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-327', itemNumber: '14-932-327',
model: 'gaming oc', model: 'gaming oc',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3090-gv-n3090gaming-oc-24gd/p/N82E16814932327' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3090-gv-n3090gaming-oc-24gd/p/N82E16814932327'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-596', itemNumber: '14-137-596',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/msi-geforce-rtx-3090-rtx-3090-ventus-3x-24g-oc/p/N82E16814137596' url:
'https://www.newegg.ca/msi-geforce-rtx-3090-rtx-3090-ventus-3x-24g-oc/p/N82E16814137596'
}, },
{ {
brand: 'zotac', brand: 'zotac',
itemNumber: '14-500-503', itemNumber: '14-500-503',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/zotac-geforce-rtx-3090-zt-a30900d-10p/p/N82E16814500503' url:
'https://www.newegg.ca/zotac-geforce-rtx-3090-zt-a30900d-10p/p/N82E16814500503'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-454', itemNumber: '14-126-454',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/asus-geforce-rtx-3090-tuf-rtx3090-o24g-gaming/p/N82E16814126454' url:
'https://www.newegg.ca/asus-geforce-rtx-3090-tuf-rtx3090-o24g-gaming/p/N82E16814126454'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-456', itemNumber: '14-126-456',
model: 'rog strix', model: 'rog strix',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/asus-geforce-rtx-3090-rog-strix-rtx3090-o24g-gaming/p/N82E16814126456' url:
'https://www.newegg.ca/asus-geforce-rtx-3090-rog-strix-rtx3090-o24g-gaming/p/N82E16814126456'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-524', itemNumber: '14-487-524',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3975-kr/p/N82E16814487524' url:
'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3975-kr/p/N82E16814487524'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-523', itemNumber: '14-487-523',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3973-kr/p/N82E16814487523' url:
'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3973-kr/p/N82E16814487523'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-526', itemNumber: '14-487-526',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3987-kr/p/N82E16814487526' url:
'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3987-kr/p/N82E16814487526'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-525', itemNumber: '14-487-525',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3985-kr/p/N82E16814487525' url:
'https://www.newegg.ca/evga-geforce-rtx-3090-24g-p5-3985-kr/p/N82E16814487525'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-602', itemNumber: '14-137-602',
model: 'ventus 2x', model: 'ventus 2x',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/msi-geforce-rtx-3070-rtx-3070-ventus-2x-oc/p/N82E16814137602' url:
'https://www.newegg.ca/msi-geforce-rtx-3070-rtx-3070-ventus-2x-oc/p/N82E16814137602'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-601', itemNumber: '14-137-601',
model: 'ventus 3x', model: 'ventus 3x',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/msi-geforce-rtx-3070-rtx-3070-ventus-3x-oc/p/N82E16814137601' url:
'https://www.newegg.ca/msi-geforce-rtx-3070-rtx-3070-ventus-3x-oc/p/N82E16814137601'
}, },
{ {
brand: 'msi', brand: 'msi',
itemNumber: '14-137-603', itemNumber: '14-137-603',
model: 'gaming x trio', model: 'gaming x trio',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/msi-geforce-rtx-3070-rtx-3070-gaming-x-trio/p/N82E16814137603' url:
'https://www.newegg.ca/msi-geforce-rtx-3070-rtx-3070-gaming-x-trio/p/N82E16814137603'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-460', itemNumber: '14-126-460',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/asus-geforce-rtx-3070-dual-rtx3070-8g/p/N82E16814126460' url:
'https://www.newegg.ca/asus-geforce-rtx-3070-dual-rtx3070-8g/p/N82E16814126460'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-459', itemNumber: '14-126-459',
model: 'dual oc', model: 'dual oc',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/asus-geforce-rtx-3070-dual-rtx3070-o8g/p/N82E16814126459' url:
'https://www.newegg.ca/asus-geforce-rtx-3070-dual-rtx3070-o8g/p/N82E16814126459'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-342', itemNumber: '14-932-342',
model: 'gaming oc', model: 'gaming oc',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070gaming-oc-8gd/p/N82E16814932342' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070gaming-oc-8gd/p/N82E16814932342'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-458', itemNumber: '14-126-458',
model: 'rog strix', model: 'rog strix',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/asus-geforce-rtx-3070-rog-strix-rtx3070-o8g-gaming/p/N82E16814126458' url:
'https://www.newegg.ca/asus-geforce-rtx-3070-rog-strix-rtx3070-o8g-gaming/p/N82E16814126458'
}, },
{ {
brand: 'zotac', brand: 'zotac',
itemNumber: '14-500-501', itemNumber: '14-500-501',
model: 'twin edge', model: 'twin edge',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/zotac-geforce-rtx-3070-zt-a30700e-10p/p/N82E16814500501' url:
'https://www.newegg.ca/zotac-geforce-rtx-3070-zt-a30700e-10p/p/N82E16814500501'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-344', itemNumber: '14-932-344',
model: 'eagle', model: 'eagle',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070eagle-8gd/p/N82E16814932344' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070eagle-8gd/p/N82E16814932344'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-528', itemNumber: '14-487-528',
model: 'xc3 black gaming', model: 'xc3 black gaming',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3751-kr/p/N82E16814487528' url:
'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3751-kr/p/N82E16814487528'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-360', itemNumber: '14-932-360',
model: 'vision oc', model: 'vision oc',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070vision-oc-8gd/p/N82E16814932360' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070vision-oc-8gd/p/N82E16814932360'
}, },
{ {
brand: 'zotac', brand: 'zotac',
itemNumber: '14-500-505', itemNumber: '14-500-505',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/zotac-geforce-rtx-3070-zt-a30700h-10p/p/N82E16814500505' url:
'https://www.newegg.ca/zotac-geforce-rtx-3070-zt-a30700h-10p/p/N82E16814500505'
}, },
{ {
brand: 'pny', brand: 'pny',
itemNumber: '14-133-812', itemNumber: '14-133-812',
model: 'uprising', model: 'uprising',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/pny-geforce-rtx-3070-vcg30708dfmpb/p/N82E16814133812' url:
'https://www.newegg.ca/pny-geforce-rtx-3070-vcg30708dfmpb/p/N82E16814133812'
}, },
{ {
brand: 'asus', brand: 'asus',
itemNumber: '14-126-461', itemNumber: '14-126-461',
model: 'tuf', model: 'tuf',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/asus-geforce-rtx-3070-tuf-rtx3070-o8g-gaming/p/N82E16814126461' url:
'https://www.newegg.ca/asus-geforce-rtx-3070-tuf-rtx3070-o8g-gaming/p/N82E16814126461'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-531', itemNumber: '14-487-531',
model: 'ftw3 gaming', model: 'ftw3 gaming',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3765-kr/p/N82E16814487531' url:
'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3765-kr/p/N82E16814487531'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-359', itemNumber: '14-932-359',
model: 'aorus', model: 'aorus',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070aorus-m-8gd/p/N82E16814932359' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070aorus-m-8gd/p/N82E16814932359'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
itemNumber: '14-932-343', itemNumber: '14-932-343',
model: 'eagle oc', model: 'eagle oc',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070eagle-oc-8gd/p/N82E16814932343' url:
'https://www.newegg.ca/gigabyte-geforce-rtx-3070-gv-n3070eagle-oc-8gd/p/N82E16814932343'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-530', itemNumber: '14-487-530',
model: 'xc3 ultra gaming', model: 'xc3 ultra gaming',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3755-kr/p/N82E16814487530' url:
'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3755-kr/p/N82E16814487530'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-532', itemNumber: '14-487-532',
model: 'ftw3 ultra gaming', model: 'ftw3 ultra gaming',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3767-kr/p/N82E16814487532' url:
'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3767-kr/p/N82E16814487532'
}, },
{ {
brand: 'pny', brand: 'pny',
itemNumber: '14-133-811', itemNumber: '14-133-811',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/pny-geforce-rtx-3070-vcg30708tfxppb/p/N82E16814133811' url:
'https://www.newegg.ca/pny-geforce-rtx-3070-vcg30708tfxppb/p/N82E16814133811'
}, },
{ {
brand: 'evga', brand: 'evga',
itemNumber: '14-487-529', itemNumber: '14-487-529',
model: 'xc3 gaming', model: 'xc3 gaming',
series: '3070', series: '3070',
url: 'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3753-kr/p/N82E16814487529' url:
'https://www.newegg.ca/evga-geforce-rtx-3070-08g-p5-3753-kr/p/N82E16814487529'
}, },
{ {
brand: 'amd', brand: 'amd',
@@ -398,9 +448,14 @@ export const NeweggCa: Store = {
], ],
name: 'newegg-ca', name: 'newegg-ca',
realTimeInventoryLookup: async (itemNumber: string) => { realTimeInventoryLookup: async (itemNumber: string) => {
const request_url = 'https://www.newegg.ca/product/api/ProductRealtime?ItemNumber=' + itemNumber; const request_url =
'https://www.newegg.ca/product/api/ProductRealtime?ItemNumber=' +
itemNumber;
const response = await fetch(request_url); const response = await fetch(request_url);
const response_json = await response.json(); const response_json = await response.json();
return response_json.MainItem !== undefined && response_json.MainItem.Instock === true; return (
response_json.MainItem !== undefined &&
response_json.MainItem.Instock === true
);
} }
}; };
+209 -103
View File
@@ -22,395 +22,493 @@ export const Newegg: Store = {
itemNumber: '14-500-495', itemNumber: '14-500-495',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.newegg.com/zotac-geforce-rtx-2060-zt-t20600k-10m/p/N82E16814500495' url:
'https://www.newegg.com/zotac-geforce-rtx-2060-zt-t20600k-10m/p/N82E16814500495'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126453', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126453',
itemNumber: '14-126-453', itemNumber: '14-126-453',
model: 'tuf', model: 'tuf',
series: '3080', series: '3080',
url: 'https://www.newegg.com/asus-geforce-rtx-3080-tuf-rtx3080-10g-gaming/p/N82E16814126453' url:
'https://www.newegg.com/asus-geforce-rtx-3080-tuf-rtx3080-10g-gaming/p/N82E16814126453'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487518', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487518',
itemNumber: '14-487-518', itemNumber: '14-487-518',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3897-kr/p/N82E16814487518' url:
'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3897-kr/p/N82E16814487518'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487519', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487519',
itemNumber: '14-487-519', itemNumber: '14-487-519',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3895-kr/p/N82E16814487519' url:
'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3895-kr/p/N82E16814487519'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487522', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487522',
itemNumber: '14-487-522', itemNumber: '14-487-522',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3881-kr/p/N82E16814487522' url:
'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3881-kr/p/N82E16814487522'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487521', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487521',
itemNumber: '14-487-521', itemNumber: '14-487-521',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3883-kr/p/N82E16814487521' url:
'https://www.newegg.com/evga-geforce-rtx-3080-10g-p5-3883-kr/p/N82E16814487521'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137600', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137600',
itemNumber: '14-137-600', itemNumber: '14-137-600',
model: 'ventus 3x', model: 'ventus 3x',
series: '3080', series: '3080',
url: 'https://www.newegg.com/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g/p/N82E16814137600' url:
'https://www.newegg.com/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g/p/N82E16814137600'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137598', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137598',
itemNumber: '14-137-598', itemNumber: '14-137-598',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.newegg.com/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g-oc/p/N82E16814137598' url:
'https://www.newegg.com/msi-geforce-rtx-3080-rtx-3080-ventus-3x-10g-oc/p/N82E16814137598'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137597', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137597',
itemNumber: '14-137-597', itemNumber: '14-137-597',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.newegg.com/msi-geforce-rtx-3080-rtx-3080-gaming-x-trio-10g/p/N82E16814137597' url:
'https://www.newegg.com/msi-geforce-rtx-3080-rtx-3080-gaming-x-trio-10g/p/N82E16814137597'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932329', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932329',
itemNumber: '149-32-329', itemNumber: '149-32-329',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3080-gv-n3080gaming-oc-10gd/p/N82E16814932329' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3080-gv-n3080gaming-oc-10gd/p/N82E16814932329'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932330', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932330',
itemNumber: '149-32-330', itemNumber: '149-32-330',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3080-gv-n3080eagle-oc-10gd/p/N82E16814932330' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3080-gv-n3080eagle-oc-10gd/p/N82E16814932330'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932336', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932336',
itemNumber: '14-932-336', itemNumber: '14-932-336',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3080-gv-n3080aorus-m-10gd/p/N82E16814932336' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3080-gv-n3080aorus-m-10gd/p/N82E16814932336'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500502', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500502',
itemNumber: '14-950-502', itemNumber: '14-950-502',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.newegg.com/zotac-geforce-rtx-3080-zt-a30800d-10p/p/N82E16814500502' url:
'https://www.newegg.com/zotac-geforce-rtx-3080-zt-a30800d-10p/p/N82E16814500502'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126457', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126457',
itemNumber: '14-126-457', itemNumber: '14-126-457',
model: 'rog strix', model: 'rog strix',
series: '3080', series: '3080',
url: 'https://www.newegg.com/asus-geforce-rtx-3080-rog-strix-rtx3080-o10g-gaming/p/N82E16814126457' url:
'https://www.newegg.com/asus-geforce-rtx-3080-rog-strix-rtx3080-o10g-gaming/p/N82E16814126457'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126452', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126452',
itemNumber: '14-126-452', itemNumber: '14-126-452',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.newegg.com/asus-geforce-rtx-3080-tuf-rtx3080-o10g-gaming/p/N82E16814126452' url:
'https://www.newegg.com/asus-geforce-rtx-3080-tuf-rtx3080-o10g-gaming/p/N82E16814126452'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500504', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500504',
itemNumber: '14-500-504', itemNumber: '14-500-504',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.newegg.com/zotac-geforce-rtx-3080-zt-t30800j-10p/p/N82E16814500504' url:
'https://www.newegg.com/zotac-geforce-rtx-3080-zt-t30800j-10p/p/N82E16814500504'
}, },
{ {
brand: 'pny', brand: 'pny',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814133809', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814133809',
itemNumber: '14-133-809', itemNumber: '14-133-809',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.newegg.com/pny-geforce-rtx-3080-vcg308010tfxppb/p/N82E16814133809' url:
'https://www.newegg.com/pny-geforce-rtx-3080-vcg308010tfxppb/p/N82E16814133809'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126455', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126455',
itemNumber: '14-126-455', itemNumber: '14-126-455',
model: 'tuf', model: 'tuf',
series: '3090', series: '3090',
url: 'https://www.newegg.com/asus-geforce-rtx-3090-tuf-rtx3090-24g-gaming/p/N82E16814126455' url:
'https://www.newegg.com/asus-geforce-rtx-3090-tuf-rtx3090-24g-gaming/p/N82E16814126455'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126456', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126456',
itemNumber: '14-126-456', itemNumber: '14-126-456',
model: 'rog strix', model: 'rog strix',
series: '3090', series: '3090',
url: 'https://www.newegg.com/asus-geforce-rtx-3090-rog-strix-rtx3090-o24g-gaming/p/N82E16814126456' url:
'https://www.newegg.com/asus-geforce-rtx-3090-rog-strix-rtx3090-o24g-gaming/p/N82E16814126456'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137595', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137595',
itemNumber: '14-137-595', itemNumber: '14-137-595',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.newegg.com/msi-geforce-rtx-3090-rtx-3090-gaming-x-trio-24g/p/N82E16814137595' url:
'https://www.newegg.com/msi-geforce-rtx-3090-rtx-3090-gaming-x-trio-24g/p/N82E16814137595'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137596', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137596',
itemNumber: '14-137-596', itemNumber: '14-137-596',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3090', series: '3090',
url: 'https://www.newegg.com/msi-geforce-rtx-3090-rtx-3090-ventus-3x-24g-oc/p/N82E16814137596' url:
'https://www.newegg.com/msi-geforce-rtx-3090-rtx-3090-ventus-3x-24g-oc/p/N82E16814137596'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500503', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500503',
itemNumber: '14-500-503', itemNumber: '14-500-503',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.newegg.com/zotac-geforce-rtx-3090-zt-a30900d-10p/p/N82E16814500503' url:
'https://www.newegg.com/zotac-geforce-rtx-3090-zt-a30900d-10p/p/N82E16814500503'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137599', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137599',
itemNumber: '14-137-599', itemNumber: '14-137-599',
model: 'ventus 3x', model: 'ventus 3x',
series: '3090', series: '3090',
url: 'https://www.newegg.com/msi-geforce-rtx-3090-rtx-3090-ventus-3x-24g/p/N82E16814137599' url:
'https://www.newegg.com/msi-geforce-rtx-3090-rtx-3090-ventus-3x-24g/p/N82E16814137599'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487525', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487525',
itemNumber: '14-487-525', itemNumber: '14-487-525',
model: 'ftw3', model: 'ftw3',
series: '3090', series: '3090',
url: 'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3985-kr/p/N82E16814487525' url:
'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3985-kr/p/N82E16814487525'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487524', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487524',
itemNumber: '14-487-524', itemNumber: '14-487-524',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3090', series: '3090',
url: 'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3975-kr/p/N82E16814487524' url:
'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3975-kr/p/N82E16814487524'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487526', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487526',
itemNumber: '14-487-526', itemNumber: '14-487-526',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3090', series: '3090',
url: 'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3987-kr/p/N82E16814487526' url:
'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3987-kr/p/N82E16814487526'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487527', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487527',
itemNumber: '14-487-527', itemNumber: '14-487-527',
model: 'xc3 black', model: 'xc3 black',
series: '3090', series: '3090',
url: 'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3971-kr/p/N82E16814487527' url:
'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3971-kr/p/N82E16814487527'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487523', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487523',
itemNumber: '14-487-523', itemNumber: '14-487-523',
model: 'xc3', model: 'xc3',
series: '3090', series: '3090',
url: 'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3973-kr/p/N82E16814487523' url:
'https://www.newegg.com/evga-geforce-rtx-3090-24g-p5-3973-kr/p/N82E16814487523'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932327', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932327',
itemNumber: '14-932-327', itemNumber: '14-932-327',
model: 'gaming', model: 'gaming',
series: '3090', series: '3090',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3090-gv-n3090gaming-oc-24gd/p/N82E16814932327' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3090-gv-n3090gaming-oc-24gd/p/N82E16814932327'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932328', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932328',
itemNumber: '14-932-328', itemNumber: '14-932-328',
model: 'eagle', model: 'eagle',
series: '3090', series: '3090',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3090-gv-n3090eagle-oc-24gd/p/N82E16814932328' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3090-gv-n3090eagle-oc-24gd/p/N82E16814932328'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137601', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137601',
itemNumber: '14-137-601', itemNumber: '14-137-601',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/msi-geforce-rtx-3070-rtx-3070-ventus-3x-oc/p/N82E16814137601' url:
'https://www.newegg.com/msi-geforce-rtx-3070-rtx-3070-ventus-3x-oc/p/N82E16814137601'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137602', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137602',
itemNumber: '14-137-602', itemNumber: '14-137-602',
model: 'ventus 2x oc', model: 'ventus 2x oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/msi-geforce-rtx-3070-rtx-3070-ventus-2x-oc/p/N82E16814137602' url:
'https://www.newegg.com/msi-geforce-rtx-3070-rtx-3070-ventus-2x-oc/p/N82E16814137602'
}, },
{ {
brand: 'msi', brand: 'msi',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137603', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814137603',
itemNumber: '14-137-603', itemNumber: '14-137-603',
model: 'gaming x trio', model: 'gaming x trio',
series: '3070', series: '3070',
url: 'https://www.newegg.com/msi-geforce-rtx-3070-rtx-3070-gaming-x-trio/p/N82E16814137603' url:
'https://www.newegg.com/msi-geforce-rtx-3070-rtx-3070-gaming-x-trio/p/N82E16814137603'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932360', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932360',
itemNumber: '14-932-360', itemNumber: '14-932-360',
model: 'vision oc', model: 'vision oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070vision-oc-8gd/p/N82E16814932360' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070vision-oc-8gd/p/N82E16814932360'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126459', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126459',
itemNumber: '14-126-459', itemNumber: '14-126-459',
model: 'dual oc', model: 'dual oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/asus-geforce-rtx-3070-dual-rtx3070-o8g/p/N82E16814126459' url:
'https://www.newegg.com/asus-geforce-rtx-3070-dual-rtx3070-o8g/p/N82E16814126459'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126458', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126458',
itemNumber: '14-126-458', itemNumber: '14-126-458',
model: 'rog strix', model: 'rog strix',
series: '3070', series: '3070',
url: 'https://www.newegg.com/asus-geforce-rtx-3070-rog-strix-rtx3070-o8g-gaming/p/N82E16814126458' url:
'https://www.newegg.com/asus-geforce-rtx-3070-rog-strix-rtx3070-o8g-gaming/p/N82E16814126458'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500501', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500501',
itemNumber: '14-500-501', itemNumber: '14-500-501',
model: 'twin edge', model: 'twin edge',
series: '3070', series: '3070',
url: 'https://www.newegg.com/zotac-geforce-rtx-3070-zt-a30700e-10p/p/N82E16814500501' url:
'https://www.newegg.com/zotac-geforce-rtx-3070-zt-a30700e-10p/p/N82E16814500501'
}, },
{ {
brand: 'zotac', brand: 'zotac',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500505', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814500505',
itemNumber: '14-500-505', itemNumber: '14-500-505',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/zotac-geforce-rtx-3070-zt-a30700h-10p/p/N82E16814500505' url:
'https://www.newegg.com/zotac-geforce-rtx-3070-zt-a30700h-10p/p/N82E16814500505'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932342', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932342',
itemNumber: '14-932-342', itemNumber: '14-932-342',
model: 'gaming oc', model: 'gaming oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070gaming-oc-8gd/p/N82E16814932342' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070gaming-oc-8gd/p/N82E16814932342'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487532', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487532',
itemNumber: '14-487-532', itemNumber: '14-487-532',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3070', series: '3070',
url: 'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3767-kr/p/N82E16814487532' url:
'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3767-kr/p/N82E16814487532'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487530', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487530',
itemNumber: '14-487-530', itemNumber: '14-487-530',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3070', series: '3070',
url: 'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3755-kr/p/N82E16814487530' url:
'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3755-kr/p/N82E16814487530'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487528', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487528',
itemNumber: '14-487-528', itemNumber: '14-487-528',
model: 'xc3 black', model: 'xc3 black',
series: '3070', series: '3070',
url: 'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3751-kr/p/N82E16814487528' url:
'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3751-kr/p/N82E16814487528'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932343', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932343',
itemNumber: '14-932-343', itemNumber: '14-932-343',
model: 'eagle oc', model: 'eagle oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070eagle-oc-8gd/p/N82E16814932343' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070eagle-oc-8gd/p/N82E16814932343'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932344', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932344',
itemNumber: '14-932-344', itemNumber: '14-932-344',
model: 'eagle', model: 'eagle',
series: '3070', series: '3070',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070eagle-8gd/p/N82E16814932344' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070eagle-8gd/p/N82E16814932344'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487529', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487529',
itemNumber: '14-487-529', itemNumber: '14-487-529',
model: 'xc3', model: 'xc3',
series: '3070', series: '3070',
url: 'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3753-kr/p/N82E16814487529' url:
'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3753-kr/p/N82E16814487529'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126460', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126460',
itemNumber: '14-126-460', itemNumber: '14-126-460',
model: 'dual', model: 'dual',
series: '3070', series: '3070',
url: 'https://www.newegg.com/asus-geforce-rtx-3070-dual-rtx3070-8g/p/N82E16814126460' url:
'https://www.newegg.com/asus-geforce-rtx-3070-dual-rtx3070-8g/p/N82E16814126460'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932359', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814932359',
itemNumber: '14-932-359', itemNumber: '14-932-359',
model: 'aorus master', model: 'aorus master',
series: '3070', series: '3070',
url: 'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070aorus-m-8gd/p/N82E16814932359' url:
'https://www.newegg.com/gigabyte-geforce-rtx-3070-gv-n3070aorus-m-8gd/p/N82E16814932359'
}, },
{ {
brand: 'evga', brand: 'evga',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487531', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814487531',
itemNumber: '14-487-531', itemNumber: '14-487-531',
model: 'ftw3', model: 'ftw3',
series: '3070', series: '3070',
url: 'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3765-kr/p/N82E16814487531' url:
'https://www.newegg.com/evga-geforce-rtx-3070-08g-p5-3765-kr/p/N82E16814487531'
}, },
{ {
brand: 'asus', brand: 'asus',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126461', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16814126461',
itemNumber: '14-126-461', itemNumber: '14-126-461',
model: 'tuf oc', model: 'tuf oc',
series: '3070', series: '3070',
url: 'https://www.newegg.com/asus-geforce-rtx-3070-tuf-rtx3070-o8g-gaming/p/N82E16814126461' url:
'https://www.newegg.com/asus-geforce-rtx-3070-tuf-rtx3070-o8g-gaming/p/N82E16814126461'
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113663', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113663',
itemNumber: '19-113-663', itemNumber: '19-113-663',
model: '5950x', model: '5950x',
series: 'ryzen5950', series: 'ryzen5950',
@@ -418,7 +516,8 @@ export const Newegg: Store = {
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113664', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113664',
itemNumber: '19-113-664', itemNumber: '19-113-664',
model: '5900x', model: '5900x',
series: 'ryzen5900', series: 'ryzen5900',
@@ -426,7 +525,8 @@ export const Newegg: Store = {
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113665', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113665',
itemNumber: '19-113-665', itemNumber: '19-113-665',
model: '5800x', model: '5800x',
series: 'ryzen5800', series: 'ryzen5800',
@@ -434,7 +534,8 @@ export const Newegg: Store = {
}, },
{ {
brand: 'amd', brand: 'amd',
cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113666', cartUrl:
'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113666',
itemNumber: '19-113-666', itemNumber: '19-113-666',
model: '5600x', model: '5600x',
series: 'ryzen5600', series: 'ryzen5600',
@@ -455,9 +556,14 @@ export const Newegg: Store = {
], ],
name: 'newegg', name: 'newegg',
realTimeInventoryLookup: async (itemNumber: string) => { realTimeInventoryLookup: async (itemNumber: string) => {
const request_url = 'https://www.newegg.com/product/api/ProductRealtime?ItemNumber=' + itemNumber; const request_url =
'https://www.newegg.com/product/api/ProductRealtime?ItemNumber=' +
itemNumber;
const response = await fetch(request_url); const response = await fetch(request_url);
const response_json = await response.json(); const response_json = await response.json();
return response_json.MainItem !== undefined && response_json.MainItem.Instock === true; return (
response_json.MainItem !== undefined &&
response_json.MainItem.Instock === true
);
} }
}; };
+91 -50
View File
@@ -4,221 +4,262 @@ export const Notebooksbilliger: Store = {
labels: { labels: {
inStock: { inStock: {
container: '.warehouse', container: '.warehouse',
text: ['sofort ab lager', 'verfügbarkeit: ca. 2-4 werktage', 'verfügbarkeit: ca. 5-10 werktage'] text: [
'sofort ab lager',
'verfügbarkeit: ca. 2-4 werktage',
'verfügbarkeit: ca. 5-10 werktage'
]
}, },
maxPrice: { maxPrice: {
container: 'form[name="cart_quantity"] span[class*="product-price__regular"]', container:
'form[name="cart_quantity"] span[class*="product-price__regular"]',
euroFormat: true euroFormat: true
}, },
outOfStock: [{ outOfStock: [
container: '.warehouse', {
text: ['liefertermin noch unbestimmt'] container: '.warehouse',
}, text: ['liefertermin noch unbestimmt']
{ },
container: '.soldOut', {
text: ['dieses produkt ist leider ausverkauft.'] container: '.soldOut',
}, text: ['dieses produkt ist leider ausverkauft.']
{ },
container: '.just_inStore', {
text: ['dieses Produkt kann nur in unseren unten genannten Stores gekauft werden.'] container: '.just_inStore',
}, text: [
{ 'dieses Produkt kann nur in unseren unten genannten Stores gekauft werden.'
container: '#product_error_text', ]
text: ['leider ist dieser artikel nicht mehr verfügbar.'] },
}] {
container: '#product_error_text',
text: ['leider ist dieser artikel nicht mehr verfügbar.']
}
]
}, },
links: [ links: [
{ {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.notebooksbilliger.de/gainward+geforce+rtx+2070+super+phoenix+v1+grafikkarte+656238' url:
'https://www.notebooksbilliger.de/gainward+geforce+rtx+2070+super+phoenix+v1+grafikkarte+656238'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3070+ichill+x3+grafikkarte+684162' url:
'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3070+ichill+x3+grafikkarte+684162'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2', model: 'twin x2',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3070+twin+x2+grafikkarte+685496' url:
'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3070+twin+x2+grafikkarte+685496'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3070+twin+x2+oc+grafikkarte+685500' url:
'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3070+twin+x2+oc+grafikkarte+685500'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3070+founders+edition+685357' url:
'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3070+founders+edition+685357'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3070+founders+edition+685359' url:
'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3070+founders+edition+685359'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix', model: 'phoenix',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/gainward+geforce+rtx+3070+phoenix+8gb+gddr6+grafikkarte+685073' url:
'https://www.notebooksbilliger.de/gainward+geforce+rtx+3070+phoenix+8gb+gddr6+grafikkarte+685073'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/gainward+geforce+rtx+3070+phoenix+gs+8gb+gddr6+grafikkarte+681575' url:
'https://www.notebooksbilliger.de/gainward+geforce+rtx+3070+phoenix+gs+8gb+gddr6+grafikkarte+681575'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'uprising', model: 'uprising',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/pny+geforce+rtx+3070+8gb+uprising+dual+fan+edition+grafikkarte+685520' url:
'https://www.notebooksbilliger.de/pny+geforce+rtx+3070+8gb+uprising+dual+fan+edition+grafikkarte+685520'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/pny+geforce+rtx+3070+8gb+xlr8+gaming+revel+epic+x+rgb+685560' url:
'https://www.notebooksbilliger.de/pny+geforce+rtx+3070+8gb+xlr8+gaming+revel+epic+x+rgb+685560'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf', model: 'tuf',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/asus+tuf+gaming+geforce+rtx+3070+8gb+grafikkarte+685524' url:
'https://www.notebooksbilliger.de/asus+tuf+gaming+geforce+rtx+3070+8gb+grafikkarte+685524'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge', model: 'twin edge',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/zotac+gaming+geforce+rtx+3070+twin+edge+8gb+gddr6+grafikkarte+677561' url:
'https://www.notebooksbilliger.de/zotac+gaming+geforce+rtx+3070+twin+edge+8gb+gddr6+grafikkarte+677561'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'twin edge oc', model: 'twin edge oc',
series: '3070', series: '3070',
url: 'https://www.notebooksbilliger.de/zotac+gaming+geforce+rtx+3070+twin+edge+oc+8gb+gddr6+grafikkarte+684216' url:
'https://www.notebooksbilliger.de/zotac+gaming+geforce+rtx+3070+twin+edge+oc+8gb+gddr6+grafikkarte+684216'
}, },
{ {
brand: 'gainward', brand: 'gainward',
model: 'phoenix gs', model: 'phoenix gs',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/gainward+geforce+rtx+3080+phoenix+gs+10gb+gddr6x+grafikkarte+677618' url:
'https://www.notebooksbilliger.de/gainward+geforce+rtx+3080+phoenix+gs+10gb+gddr6x+grafikkarte+677618'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/gigabyte+geforce+rtx+3080+eagle+oc+10gb+gddr6x+grafikkarte+677501' url:
'https://www.notebooksbilliger.de/gigabyte+geforce+rtx+3080+eagle+oc+10gb+gddr6x+grafikkarte+677501'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/gigabyte+geforce+rtx+3080+gaming+oc+10gb+gddr6x+grafikkarte+677499' url:
'https://www.notebooksbilliger.de/gigabyte+geforce+rtx+3080+gaming+oc+10gb+gddr6x+grafikkarte+677499'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill x3', model: 'ichill x3',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3080+ichill+x3+grafikkarte+678588' url:
'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3080+ichill+x3+grafikkarte+678588'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3080+twin+x2+oc+grafikkarte+679190' url:
'https://www.notebooksbilliger.de/inno3d+geforce+rtx+3080+twin+x2+oc+grafikkarte+679190'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/msi+geforce+rtx+3080+gaming+x+trio+10g+grafikkarte+678527' url:
'https://www.notebooksbilliger.de/msi+geforce+rtx+3080+gaming+x+trio+10g+grafikkarte+678527'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3080+founders+edition+683301' url:
'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3080+founders+edition+683301'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3080+founders+edition+685126' url:
'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3080+founders+edition+685126'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro', model: 'gaming pro',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/palit+geforce+rtx+3080+gamingpro+10gb+gddr6x+grafikkarte+677609' url:
'https://www.notebooksbilliger.de/palit+geforce+rtx+3080+gamingpro+10gb+gddr6x+grafikkarte+677609'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/palit+geforce+rtx+3080+gamingpro+oc+10gb+gddr6x+grafikkarte+677606' url:
'https://www.notebooksbilliger.de/palit+geforce+rtx+3080+gamingpro+oc+10gb+gddr6x+grafikkarte+677606'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/pny+geforce+rtx+3080+xlr8+gaming+10gb+gddr6x+grafikkarte+677407' url:
'https://www.notebooksbilliger.de/pny+geforce+rtx+3080+xlr8+gaming+10gb+gddr6x+grafikkarte+677407'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.notebooksbilliger.de/pny+geforce+rtx+3080+10gb+xlr8+gaming+revel+epic+x+grafikkarte+677412' url:
'https://www.notebooksbilliger.de/pny+geforce+rtx+3080+10gb+xlr8+gaming+revel+epic+x+grafikkarte+677412'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/asus+rog+strix+geforce+rtx+3090+24gb+gddr6x+grafikkarte+677343' url:
'https://www.notebooksbilliger.de/asus+rog+strix+geforce+rtx+3090+24gb+gddr6x+grafikkarte+677343'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'rog strix oc',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/asus+rog+strix+geforce+rtx+3090+oc+24gb+gddr6x+grafikkarte+677308' url:
'https://www.notebooksbilliger.de/asus+rog+strix+geforce+rtx+3090+oc+24gb+gddr6x+grafikkarte+677308'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/gigabyte+geforce+rtx+3090+master+24gb+gddr6x+grafikkarte+683868' url:
'https://www.notebooksbilliger.de/gigabyte+geforce+rtx+3090+master+24gb+gddr6x+grafikkarte+683868'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3090+founders+edition+683300' url:
'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3090+founders+edition+683300'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3090+founders+edition+685124' url:
'https://www.notebooksbilliger.de/nvidia+geforce+rtx+3090+founders+edition+685124'
}, },
{ {
brand: 'palit', brand: 'palit',
model: 'gaming pro oc', model: 'gaming pro oc',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/palit+geforce+rtx+3090+gamingpro+oc+24gb+gddr6x+grafikkarte+677599' url:
'https://www.notebooksbilliger.de/palit+geforce+rtx+3090+gamingpro+oc+24gb+gddr6x+grafikkarte+677599'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://www.notebooksbilliger.de/zotac+gaming+geforce+rtx+3090+trinity+24gb+gddr6x+grafikkarte+677550' url:
'https://www.notebooksbilliger.de/zotac+gaming+geforce+rtx+3090+trinity+24gb+gddr6x+grafikkarte+677550'
}, },
{ {
brand: 'amd', brand: 'amd',
+6 -3
View File
@@ -26,7 +26,8 @@ export const Novatech: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.novatech.co.uk/products/gigabyte-geforce-rtx-2060-oc-v2-6g-graphics-card/gv-n2060oc-6gdv2.html' url:
'https://www.novatech.co.uk/products/gigabyte-geforce-rtx-2060-oc-v2-6g-graphics-card/gv-n2060oc-6gdv2.html'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -39,11 +40,13 @@ export const Novatech: Store = {
urls: [ urls: [
{ {
series: '3080', series: '3080',
url: 'https://www.novatech.co.uk/products/components/nvidiageforcegraphicscards/nvidiartxseries/nvidiartx3080/?i=200' url:
'https://www.novatech.co.uk/products/components/nvidiageforcegraphicscards/nvidiartxseries/nvidiartx3080/?i=200'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.novatech.co.uk/products/components/nvidiageforcegraphicscards/nvidiartxseries/nvidiartx3090/?i=200' url:
'https://www.novatech.co.uk/products/components/nvidiageforcegraphicscards/nvidiartxseries/nvidiartx3090/?i=200'
} }
] ]
}, },
+220 -20
View File
@@ -13,27 +13,227 @@ export interface NvidiaRegionInfo {
} }
export const regionInfos = new Map<string, NvidiaRegionInfo>([ export const regionInfos = new Map<string, NvidiaRegionInfo>([
['austria', {currency: 'EUR', drLocale: 'de_de', fe2060SuperId: 5394902900, fe3080Id: 5440853700, fe3090Id: 5444941400, siteLocale: 'de-at'}], [
['belgium', {currency: 'EUR', drLocale: 'fr_fr', fe2060SuperId: 5394902700, fe3080Id: 5438795700, fe3090Id: 5438795600, siteLocale: 'fr-be'}], 'austria',
['canada', {currency: 'CAD', drLocale: 'en_us', fe2060SuperId: 5379432500, fe3080Id: 5438481700, fe3090Id: 5438481600, siteLocale: 'en-us'}], {
['czechia', {currency: 'CZK', drLocale: 'en_gb', fe2060SuperId: 5394902800, fe3080Id: 5438793800, fe3090Id: 5438793600, siteLocale: 'cs-cz'}], currency: 'EUR',
['denmark', {currency: 'DKK', drLocale: 'en_gb', fe2060SuperId: 5394903100, fe3080Id: 5438793300, fe3090Id: null, siteLocale: 'da-dk'}], drLocale: 'de_de',
['finland', {currency: 'EUR', drLocale: 'en_gb', fe2060SuperId: 5394903100, fe3080Id: 5438793300, fe3090Id: null, siteLocale: 'fi-fi'}], fe2060SuperId: 5394902900,
['france', {currency: 'EUR', drLocale: 'fr_fr', fe2060SuperId: 5394903200, fe3080Id: 5438795200, fe3090Id: 5438761500, siteLocale: 'fr-fr'}], fe3080Id: 5440853700,
['germany', {currency: 'EUR', drLocale: 'de_de', fe2060SuperId: 5394902900, fe3080Id: 5438792300, fe3090Id: 5438761400, siteLocale: 'de-de'}], fe3090Id: 5444941400,
['great_britain', {currency: 'GBP', drLocale: 'en_gb', fe2060SuperId: 5394903300, fe3080Id: 5438792800, fe3090Id: 5438792700, siteLocale: 'en-gb'}], siteLocale: 'de-at'
['ireland', {currency: 'GBP', drLocale: 'en_gb', fe2060SuperId: 5394903300, fe3080Id: 5438792800, fe3090Id: 5438792700, siteLocale: 'en-gb'}], }
['italy', {currency: 'EUR', drLocale: 'it_it', fe2060SuperId: 5394903400, fe3080Id: 5438796200, fe3090Id: 5438796100, siteLocale: 'it-it'}], ],
['luxembourg', {currency: 'EUR', drLocale: 'fr_fr', fe2060SuperId: 5394902700, fe3080Id: 5438795700, fe3090Id: 5438795600, siteLocale: 'fr-be'}], [
['netherlands', {currency: 'EUR', drLocale: 'nl_nl', fe2060SuperId: 5394903500, fe3080Id: 5438796700, fe3090Id: 5438796600, siteLocale: 'nl-nl'}], 'belgium',
['norway', {currency: 'NOK', drLocale: 'no_no', fe2060SuperId: 5394903600, fe3080Id: 5438797200, fe3090Id: 5438797100, siteLocale: 'nb-no'}], {
['poland', {currency: 'PLN', drLocale: 'pl_pl', fe2060SuperId: 5394903700, fe3080Id: 5438797700, fe3090Id: 5438797600, siteLocale: 'pl-pl'}], currency: 'EUR',
['portugal', {currency: 'EUR', drLocale: 'en_gb', fe2060SuperId: null, fe3080Id: 5438794300, fe3090Id: null, siteLocale: 'en-gb'}], drLocale: 'fr_fr',
['russia', {currency: 'RUB', drLocale: 'ru_ru', fe2060SuperId: null, fe3080Id: null, fe3090Id: null, siteLocale: 'ru-ru'}], fe2060SuperId: 5394902700,
['spain', {currency: 'EUR', drLocale: 'es_es', fe2060SuperId: 5394903000, fe3080Id: 5438794800, fe3090Id: 5438794700, siteLocale: 'es-es'}], fe3080Id: 5438795700,
['sweden', {currency: 'SEK', drLocale: 'sv_se', fe2060SuperId: 5394903900, fe3080Id: 5438798100, fe3090Id: 5438761600, siteLocale: 'sv-se'}], fe3090Id: 5438795600,
siteLocale: 'fr-be'
}
],
[
'canada',
{
currency: 'CAD',
drLocale: 'en_us',
fe2060SuperId: 5379432500,
fe3080Id: 5438481700,
fe3090Id: 5438481600,
siteLocale: 'en-us'
}
],
[
'czechia',
{
currency: 'CZK',
drLocale: 'en_gb',
fe2060SuperId: 5394902800,
fe3080Id: 5438793800,
fe3090Id: 5438793600,
siteLocale: 'cs-cz'
}
],
[
'denmark',
{
currency: 'DKK',
drLocale: 'en_gb',
fe2060SuperId: 5394903100,
fe3080Id: 5438793300,
fe3090Id: null,
siteLocale: 'da-dk'
}
],
[
'finland',
{
currency: 'EUR',
drLocale: 'en_gb',
fe2060SuperId: 5394903100,
fe3080Id: 5438793300,
fe3090Id: null,
siteLocale: 'fi-fi'
}
],
[
'france',
{
currency: 'EUR',
drLocale: 'fr_fr',
fe2060SuperId: 5394903200,
fe3080Id: 5438795200,
fe3090Id: 5438761500,
siteLocale: 'fr-fr'
}
],
[
'germany',
{
currency: 'EUR',
drLocale: 'de_de',
fe2060SuperId: 5394902900,
fe3080Id: 5438792300,
fe3090Id: 5438761400,
siteLocale: 'de-de'
}
],
[
'great_britain',
{
currency: 'GBP',
drLocale: 'en_gb',
fe2060SuperId: 5394903300,
fe3080Id: 5438792800,
fe3090Id: 5438792700,
siteLocale: 'en-gb'
}
],
[
'ireland',
{
currency: 'GBP',
drLocale: 'en_gb',
fe2060SuperId: 5394903300,
fe3080Id: 5438792800,
fe3090Id: 5438792700,
siteLocale: 'en-gb'
}
],
[
'italy',
{
currency: 'EUR',
drLocale: 'it_it',
fe2060SuperId: 5394903400,
fe3080Id: 5438796200,
fe3090Id: 5438796100,
siteLocale: 'it-it'
}
],
[
'luxembourg',
{
currency: 'EUR',
drLocale: 'fr_fr',
fe2060SuperId: 5394902700,
fe3080Id: 5438795700,
fe3090Id: 5438795600,
siteLocale: 'fr-be'
}
],
[
'netherlands',
{
currency: 'EUR',
drLocale: 'nl_nl',
fe2060SuperId: 5394903500,
fe3080Id: 5438796700,
fe3090Id: 5438796600,
siteLocale: 'nl-nl'
}
],
[
'norway',
{
currency: 'NOK',
drLocale: 'no_no',
fe2060SuperId: 5394903600,
fe3080Id: 5438797200,
fe3090Id: 5438797100,
siteLocale: 'nb-no'
}
],
[
'poland',
{
currency: 'PLN',
drLocale: 'pl_pl',
fe2060SuperId: 5394903700,
fe3080Id: 5438797700,
fe3090Id: 5438797600,
siteLocale: 'pl-pl'
}
],
[
'portugal',
{
currency: 'EUR',
drLocale: 'en_gb',
fe2060SuperId: null,
fe3080Id: 5438794300,
fe3090Id: null,
siteLocale: 'en-gb'
}
],
[
'russia',
{
currency: 'RUB',
drLocale: 'ru_ru',
fe2060SuperId: null,
fe3080Id: null,
fe3090Id: null,
siteLocale: 'ru-ru'
}
],
[
'spain',
{
currency: 'EUR',
drLocale: 'es_es',
fe2060SuperId: 5394903000,
fe3080Id: 5438794800,
fe3090Id: 5438794700,
siteLocale: 'es-es'
}
],
[
'sweden',
{
currency: 'SEK',
drLocale: 'sv_se',
fe2060SuperId: 5394903900,
fe3080Id: 5438798100,
fe3090Id: 5438761600,
siteLocale: 'sv-se'
}
],
// https://github.com/jef/streetmerchant/issues/407 This fe2080SuperID is for the Shield TV which is out of stock in the US // https://github.com/jef/streetmerchant/issues/407 This fe2080SuperID is for the Shield TV which is out of stock in the US
['usa', {currency: 'USD', drLocale: 'en_us', fe2060SuperId: 5355772500, fe3080Id: 5438481700, fe3090Id: 5438481600, siteLocale: 'en-us'}] [
'usa',
{
currency: 'USD',
drLocale: 'en_us',
fe2060SuperId: 5355772500,
fe3080Id: 5438481700,
fe3090Id: 5438481600,
siteLocale: 'en-us'
}
]
]); ]);
export const NvidiaApi: Store = { export const NvidiaApi: Store = {
+12 -6
View File
@@ -34,37 +34,43 @@ export const Nvidia: Store = {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3080', series: '3080',
url: 'https://www.nvidia.com/en-us/shop/geforce/gpu/?page=1&limit=9&locale=en-us&category=GPU&gpu=RTX%203080' url:
'https://www.nvidia.com/en-us/shop/geforce/gpu/?page=1&limit=9&locale=en-us&category=GPU&gpu=RTX%203080'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3080', series: '3080',
url: 'https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3080' url:
'https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3080'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3090', series: '3090',
url: 'https://www.nvidia.com/en-us/shop/geforce/gpu/?page=1&limit=9&locale=en-us&category=GPU&gpu=RTX%203090' url:
'https://www.nvidia.com/en-us/shop/geforce/gpu/?page=1&limit=9&locale=en-us&category=GPU&gpu=RTX%203090'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3090', series: '3090',
url: 'https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3090' url:
'https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3090'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: 'https://www.nvidia.com/en-us/shop/geforce/gpu/?page=1&limit=9&locale=en-us&category=GPU&gpu=RTX%203070' url:
'https://www.nvidia.com/en-us/shop/geforce/gpu/?page=1&limit=9&locale=en-us&category=GPU&gpu=RTX%203070'
}, },
{ {
brand: 'nvidia', brand: 'nvidia',
model: 'founders edition', model: 'founders edition',
series: '3070', series: '3070',
url: 'https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3070' url:
'https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3070'
} }
], ],
name: 'nvidia' name: 'nvidia'
+6 -3
View File
@@ -20,19 +20,22 @@ export const OfficeDepot: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.officedepot.com/a/products/4652239/EVGA-GeForce-RTX-2060-Graphic-Card/' url:
'https://www.officedepot.com/a/products/4652239/EVGA-GeForce-RTX-2060-Graphic-Card/'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8', model: 'xlr8',
series: '3080', series: '3080',
url: 'https://www.officedepot.com/a/products/7189374/PNY-GeForce-RTX-3080-10GB-GDDR6X/' url:
'https://www.officedepot.com/a/products/7189374/PNY-GeForce-RTX-3080-10GB-GDDR6X/'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.officedepot.com/a/products/7791294/PNY-GeForce-RTX-3080-10GB-GDDR6X/' url:
'https://www.officedepot.com/a/products/7791294/PNY-GeForce-RTX-3080-10GB-GDDR6X/'
} }
], ],
name: 'officedepot' name: 'officedepot'
+6 -3
View File
@@ -21,7 +21,8 @@ export const Overclockers: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.overclockers.co.uk/gigabyte-geforce-rtx-2060-oc-rev2-6144mb-gddr6-pci-express-graphics-card-gx-1bj-gi.html' url:
'https://www.overclockers.co.uk/gigabyte-geforce-rtx-2060-oc-rev2-6144mb-gddr6-pci-express-graphics-card-gx-1bj-gi.html'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -34,7 +35,8 @@ export const Overclockers: Store = {
urls: [ urls: [
{ {
series: '3070', series: '3070',
url: 'https://www.overclockers.co.uk/pc-components/graphics-cards/nvidia/geforce-rtx-3070' url:
'https://www.overclockers.co.uk/pc-components/graphics-cards/nvidia/geforce-rtx-3070'
}, },
{ {
series: '3080', series: '3080',
@@ -46,7 +48,8 @@ export const Overclockers: Store = {
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.overclockers.co.uk/pc-components/graphics-cards/nvidia/geforce-rtx-3090' url:
'https://www.overclockers.co.uk/pc-components/graphics-cards/nvidia/geforce-rtx-3090'
} }
] ]
}, },
+40 -21
View File
@@ -20,19 +20,22 @@ export const PCComponentes: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.pccomponentes.com/gigabyte-geforce-gtx-1660-super-oc-6gb-gddr6' url:
'https://www.pccomponentes.com/gigabyte-geforce-gtx-1660-super-oc-6gb-gddr6'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/gigabyte-geforce-rtx-3080-eagle-oc-10g-10gb-gddr6x' url:
'https://www.pccomponentes.com/gigabyte-geforce-rtx-3080-eagle-oc-10g-10gb-gddr6x'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/msi-geforce-rtx-3080-ventus-3x-oc-10gb-gddr6x' url:
'https://www.pccomponentes.com/msi-geforce-rtx-3080-ventus-3x-oc-10gb-gddr6x'
}, },
{ {
brand: 'asus', brand: 'asus',
@@ -44,105 +47,121 @@ export const PCComponentes: Store = {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/gigabyte-geforce-rtx-3080-gaming-oc-10g-10gb-gddr6x' url:
'https://www.pccomponentes.com/gigabyte-geforce-rtx-3080-gaming-oc-10g-10gb-gddr6x'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/msi-geforce-rtx-3080-gaming-x-trio-10gb-gddr6x' url:
'https://www.pccomponentes.com/msi-geforce-rtx-3080-gaming-x-trio-10gb-gddr6x'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf oc', model: 'tuf oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/asus-tuf-geforce-rtx-3080-oc-10gb-gddr6x' url:
'https://www.pccomponentes.com/asus-tuf-geforce-rtx-3080-oc-10gb-gddr6x'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix oc', model: 'rog strix oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/asus-rog-strix-geforce-rtx-3080-10g-gaming-oc-10gb-gddr6x' url:
'https://www.pccomponentes.com/asus-rog-strix-geforce-rtx-3080-10g-gaming-oc-10gb-gddr6x'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 black', model: 'xc3 black',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/evga-geforce-rtx-3080-xc3-black-gaming-10gb-gddr6x' url:
'https://www.pccomponentes.com/evga-geforce-rtx-3080-xc3-black-gaming-10gb-gddr6x'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/zotac-gaming-geforce-rtx-3080-trinity-10gb-gddr6x' url:
'https://www.pccomponentes.com/zotac-gaming-geforce-rtx-3080-trinity-10gb-gddr6x'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3 ultra', model: 'xc3 ultra',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x' url:
'https://www.pccomponentes.com/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'rog strix', model: 'rog strix',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/asus-rog-strix-geforce-rtx-3080-gaming-10gb-gddr6x' url:
'https://www.pccomponentes.com/asus-rog-strix-geforce-rtx-3080-gaming-10gb-gddr6x'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/zotac-gaming-geforce-rtx-3080-trinity-oc-10gb-gddr6x' url:
'https://www.pccomponentes.com/zotac-gaming-geforce-rtx-3080-trinity-oc-10gb-gddr6x'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/gigabyte-geforce-rtx-3080-vision-oc-10gb-gddr6x' url:
'https://www.pccomponentes.com/gigabyte-geforce-rtx-3080-vision-oc-10gb-gddr6x'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'xc3', model: 'xc3',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/evga-geforce-rtx-3080-xc3-gaming-10gb-gddr6x' url:
'https://www.pccomponentes.com/evga-geforce-rtx-3080-xc3-gaming-10gb-gddr6x'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3 ultra', model: 'ftw3 ultra',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-gddr6x' url:
'https://www.pccomponentes.com/evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-gddr6x'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/gigabyte-aorus-geforce-rtx-3080-master-10gb-gddr6x' url:
'https://www.pccomponentes.com/gigabyte-aorus-geforce-rtx-3080-master-10gb-gddr6x'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-gddr6x' url:
'https://www.pccomponentes.com/gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-gddr6x'
}, },
{ {
brand: 'evga', brand: 'evga',
model: 'ftw3', model: 'ftw3',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/evga-geforce-rtx-3080-ftw3-gaming-10gb-gddr6x' url:
'https://www.pccomponentes.com/evga-geforce-rtx-3080-ftw3-gaming-10gb-gddr6x'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10gb-gddr6x' url:
'https://www.pccomponentes.com/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10gb-gddr6x'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8', model: 'xlr8',
series: '3080', series: '3080',
url: 'https://www.pccomponentes.com/pny-geforce-rtx-3080-epic-x-rgb-triple-fan-xlr8-gaming-edition-10gb-gddr6x' url:
'https://www.pccomponentes.com/pny-geforce-rtx-3080-epic-x-rgb-triple-fan-xlr8-gaming-edition-10gb-gddr6x'
} }
], ],
name: 'pccomponentes' name: 'pccomponentes'
}; };
+10 -7
View File
@@ -10,7 +10,6 @@ export const Pny: Store = {
container: 'span[itemprop="price"]', container: 'span[itemprop="price"]',
euroFormat: false euroFormat: false
} }
}, },
links: [ links: [
{ {
@@ -29,33 +28,37 @@ export const Pny: Store = {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3070', series: '3070',
url: 'https://www.pny.com/geforce-rtx-3070-xlr8-gaming-epic-x-rgb-triple-fan' url:
'https://www.pny.com/geforce-rtx-3070-xlr8-gaming-epic-x-rgb-triple-fan'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.pny.com/geforce-rtx-3080-xlr8-gaming-epic-x-rgb-triple-fan-m' url:
'https://www.pny.com/geforce-rtx-3080-xlr8-gaming-epic-x-rgb-triple-fan-m'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3080', series: '3080',
url: 'https://www.pny.com/geforce-rtx-3080-xlr8-gaming-epic-x-rgb-triple-fan-p' url:
'https://www.pny.com/geforce-rtx-3080-xlr8-gaming-epic-x-rgb-triple-fan-p'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3090', series: '3090',
url: 'https://www.pny.com/geforce-rtx-3090-xlr8-gaming-epic-x-rgb-triple-fan-m' url:
'https://www.pny.com/geforce-rtx-3090-xlr8-gaming-epic-x-rgb-triple-fan-m'
}, },
{ {
brand: 'pny', brand: 'pny',
model: 'xlr8 rgb', model: 'xlr8 rgb',
series: '3090', series: '3090',
url: 'https://www.pny.com/geforce-rtx-3090-xlr8-gaming-epic-x-rgb-triple-fan-p' url:
'https://www.pny.com/geforce-rtx-3090-xlr8-gaming-epic-x-rgb-triple-fan-p'
} }
], ],
name: 'pny' name: 'pny'
}; };
+2 -2
View File
@@ -3,7 +3,8 @@ import {Store} from './store';
export const ProshopDE: Store = { export const ProshopDE: Store = {
labels: { labels: {
maxPrice: { maxPrice: {
container: '.site-currency-wrapper > span[class="site-currency-attention"]', container:
'.site-currency-wrapper > span[class="site-currency-attention"]',
euroFormat: true euroFormat: true
}, },
outOfStock: { outOfStock: {
@@ -279,4 +280,3 @@ export const ProshopDE: Store = {
], ],
name: 'proshop-de' name: 'proshop-de'
}; };
+46 -24
View File
@@ -7,7 +7,8 @@ export const ProshopDK: Store = {
text: ['1-2 dages levering', 'fjernlager'] text: ['1-2 dages levering', 'fjernlager']
}, },
maxPrice: { maxPrice: {
container: '.site-currency-wrapper > span[class="site-currency-attention"]', container:
'.site-currency-wrapper > span[class="site-currency-attention"]',
euroFormat: true euroFormat: true
}, },
outOfStock: { outOfStock: {
@@ -20,135 +21,156 @@ export const ProshopDK: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-2060-TUF-OC-6GB-GDDR6-RAM-Grafikkort/2694767' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-2060-TUF-OC-6GB-GDDR6-RAM-Grafikkort/2694767'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf gaming', model: 'tuf gaming',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-TUF-10GB-GDDR6X-RAM-Grafikkort/2876763' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-TUF-10GB-GDDR6X-RAM-Grafikkort/2876763'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf gaming oc', model: 'tuf gaming oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-TUF-OC-10GB-GDDR6X-RAM-Grafikkort/2876861' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-TUF-OC-10GB-GDDR6X-RAM-Grafikkort/2876861'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix gaming', model: 'strix gaming',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-ROG-STRIX-10GB-GDDR6X-RAM-Grafikkort/2876857' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-ROG-STRIX-10GB-GDDR6X-RAM-Grafikkort/2876857'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix gaming oc', model: 'strix gaming oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-ROG-STRIX-OC-10GB-GDDR6X-RAM-Grafikkort/2876859' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3080-ROG-STRIX-OC-10GB-GDDR6X-RAM-Grafikkort/2876859'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3080-GAMING-X-TRIO-10GB-GDDR6X-RAM-Grafikkort/2876877' url:
'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3080-GAMING-X-TRIO-10GB-GDDR6X-RAM-Grafikkort/2876877'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x', model: 'ventus 3x',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3080-Ventus-3X-10GB-GDDR6X-RAM-Grafikkort/2876878' url:
'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3080-Ventus-3X-10GB-GDDR6X-RAM-Grafikkort/2876878'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'ventus 3x oc', model: 'ventus 3x oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3080-Ventus-3X-OC-10GB-GDDR6X-RAM-Grafikkort/2876879' url:
'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3080-Ventus-3X-OC-10GB-GDDR6X-RAM-Grafikkort/2876879'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill 4x', model: 'ichill 4x',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/Inno3D-GeForce-RTX-3080-iCHILL-X4-10GB-GDDR6X-SDRAM-Grafikkort/2878971' url:
'https://www.proshop.dk/Grafikkort/Inno3D-GeForce-RTX-3080-iCHILL-X4-10GB-GDDR6X-SDRAM-Grafikkort/2878971'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'ichill 3x', model: 'ichill 3x',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/Inno3D-GeForce-RTX-3080-iCHILL-X3-10GB-GDDR6X-SDRAM-Grafikkort/2878969' url:
'https://www.proshop.dk/Grafikkort/Inno3D-GeForce-RTX-3080-iCHILL-X3-10GB-GDDR6X-SDRAM-Grafikkort/2878969'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'gaming oc', model: 'gaming oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-GAMING-OC-10GB-GDDR6X-RAM-Grafikkort/2876838' url:
'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-GAMING-OC-10GB-GDDR6X-RAM-Grafikkort/2876838'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'eagle oc', model: 'eagle oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-Eagle-OC-10GB-GDDR6X-RAM-Grafikkort/2876837' url:
'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-Eagle-OC-10GB-GDDR6X-RAM-Grafikkort/2876837'
}, },
{ {
brand: 'inno3d', brand: 'inno3d',
model: 'twin x2 oc', model: 'twin x2 oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/Inno3D-GeForce-RTX-3080-Twin-X2-OC-10GB-GDDR6X-SDRAM-Grafikkort/2878968' url:
'https://www.proshop.dk/Grafikkort/Inno3D-GeForce-RTX-3080-Twin-X2-OC-10GB-GDDR6X-SDRAM-Grafikkort/2878968'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'vision oc', model: 'vision oc',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-Vision-OC-10GB-GDDR6X-RAM-Grafikkort/2878401' url:
'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-Vision-OC-10GB-GDDR6X-RAM-Grafikkort/2878401'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3080', series: '3080',
url: 'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-AORUS-Master-10GB-GDDR6X-RAM-Grafikkort/2876835' url:
'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3080-AORUS-Master-10GB-GDDR6X-RAM-Grafikkort/2876835'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf gaming', model: 'tuf gaming',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-TUF-24GB-GDDR6X-RAM-Grafikkort/2876764' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-TUF-24GB-GDDR6X-RAM-Grafikkort/2876764'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'tuf gaming oc', model: 'tuf gaming oc',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-TUF-OC-24GB-GDDR6X-RAM-Grafikkort/2876869' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-TUF-OC-24GB-GDDR6X-RAM-Grafikkort/2876869'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix gaming', model: 'strix gaming',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-ROG-STRIX-24GB-GDDR6X-RAM-Grafikkort/2876865' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-ROG-STRIX-24GB-GDDR6X-RAM-Grafikkort/2876865'
}, },
{ {
brand: 'asus', brand: 'asus',
model: 'strix gaming oc', model: 'strix gaming oc',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-ROG-STRIX-OC-24GB-GDDR6X-RAM-Grafikkort/2876867' url:
'https://www.proshop.dk/Grafikkort/ASUS-GeForce-RTX-3090-ROG-STRIX-OC-24GB-GDDR6X-RAM-Grafikkort/2876867'
}, },
{ {
brand: 'msi', brand: 'msi',
model: 'gaming x trio', model: 'gaming x trio',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3090-GAMING-X-TRIO-24GB-GDDR6X-RAM-Grafikkort/2876881' url:
'https://www.proshop.dk/Grafikkort/MSI-GeForce-RTX-3090-GAMING-X-TRIO-24GB-GDDR6X-RAM-Grafikkort/2876881'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus master', model: 'aorus master',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3090-AORUS-Master-24GB-GDDR6X-RAM-Grafikkort/2876840' url:
'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3090-AORUS-Master-24GB-GDDR6X-RAM-Grafikkort/2876840'
}, },
{ {
brand: 'gigabyte', brand: 'gigabyte',
model: 'aorus xtreme', model: 'aorus xtreme',
series: '3090', series: '3090',
url: 'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3090-AORUS-Xtreme-24GB-GDDR6X-RAM-Grafikkort/2876839' url:
'https://www.proshop.dk/Grafikkort/GIGABYTE-GeForce-RTX-3090-AORUS-Xtreme-24GB-GDDR6X-RAM-Grafikkort/2876839'
} }
], ],
name: 'proshop-dk' name: 'proshop-dk'
}; };
+14 -8
View File
@@ -4,10 +4,12 @@ import {getProductLinksBuilder} from './helpers/card';
export const Scan: Store = { export const Scan: Store = {
disableAdBlocker: true, disableAdBlocker: true,
labels: { labels: {
captcha: [{ captcha: [
container: '#challenge-form', {
text: ['hcaptcha_submit'] container: '#challenge-form',
}], text: ['hcaptcha_submit']
}
],
inStock: { inStock: {
container: '.buyPanel .priceAvailability', container: '.buyPanel .priceAvailability',
text: ['add to basket', 'in stock'] text: ['add to basket', 'in stock']
@@ -26,7 +28,8 @@ export const Scan: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.scan.co.uk/products/msi-geforce-rtx-2060-ventus-xs-oc-6gb-gddr6-vr-ready-graphics-card-1920-core-1710mhz-boost' url:
'https://www.scan.co.uk/products/msi-geforce-rtx-2060-ventus-xs-oc-6gb-gddr6-vr-ready-graphics-card-1920-core-1710mhz-boost'
}, },
{ {
brand: 'sony', brand: 'sony',
@@ -52,15 +55,18 @@ export const Scan: Store = {
urls: [ urls: [
{ {
series: '3070', series: '3070',
url: 'https://www.scan.co.uk/shop/computer-hardware/gpu-nvidia/nvidia-geforce-rtx-3070-graphics-cards' url:
'https://www.scan.co.uk/shop/computer-hardware/gpu-nvidia/nvidia-geforce-rtx-3070-graphics-cards'
}, },
{ {
series: '3080', series: '3080',
url: 'https://www.scan.co.uk/shop/computer-hardware/gpu-nvidia/nvidia-geforce-rtx-3080-graphics-cards' url:
'https://www.scan.co.uk/shop/computer-hardware/gpu-nvidia/nvidia-geforce-rtx-3080-graphics-cards'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.scan.co.uk/shop/computer-hardware/gpu-nvidia/nvidia-geforce-rtx-3090-graphics-cards' url:
'https://www.scan.co.uk/shop/computer-hardware/gpu-nvidia/nvidia-geforce-rtx-3090-graphics-cards'
} }
] ]
}, },
+86 -3
View File
@@ -10,10 +10,93 @@ export type Pricing = {
euroFormat?: boolean; euroFormat?: boolean;
}; };
export type Series = 'test:series' | '3070' | '3080' | '3090' | 'ryzen5950' | 'ryzen5900' | 'ryzen5800' | 'ryzen5600' | 'sonyps5c' | 'sonyps5de' | 'xboxsx' | 'xboxss'; export type Series =
| 'test:series'
| '3070'
| '3080'
| '3090'
| 'ryzen5950'
| 'ryzen5900'
| 'ryzen5800'
| 'ryzen5600'
| 'sonyps5c'
| 'sonyps5de'
| 'xboxsx'
| 'xboxss';
export type Model =
| 'test:model'
| '5600x'
| '5800x'
| '5900x'
| '5950x'
| 'amp extreme holo'
| 'amp holo'
| 'aorus master'
| 'aorus xtreme'
| 'dual'
| 'dual fan'
| 'dual oc'
| 'founders edition'
| 'ftw3'
| 'ftw3 ultra'
| 'eagle'
| 'eagle oc'
| 'gaming'
| 'gaming oc'
| 'gaming x3'
| 'ichill x3'
| 'ichill x4'
| 'gamerock oc'
| 'gaming x trio'
| 'gaming pro'
| 'gaming pro oc'
| 'ps5 console'
| 'ps5 digital'
| 'phantom gs'
| 'phoenix'
| 'phoenix gs'
| 'phoenix gs oc'
| 'rog strix'
| 'rog strix oc'
| 'sg oc'
| 'tuf'
| 'tuf oc'
| 'turbo'
| 'ventus 2s oc'
| 'ventus 3x'
| 'ventus 3x oc'
| 'trinity'
| 'trinity oc'
| 'twin edge'
| 'twin edge oc'
| 'twin x2 oc'
| 'vision'
| 'vision oc'
| 'xc3'
| 'xc3 ultra'
| 'xboxss'
| 'xboxsx'
| 'xlr8'
| 'xlr8 rgb';
export type Link = { export type Link = {
brand: 'test:brand' | 'amd' | 'asus' | 'evga' | 'gainward' | 'gigabyte' | 'inno3d' | 'kfa2' | 'msi' | 'nvidia' | 'palit' | 'pny'| 'sony' | 'zotac' | 'microsoft'; brand:
| 'test:brand'
| 'amd'
| 'asus'
| 'evga'
| 'gainward'
| 'gigabyte'
| 'inno3d'
| 'kfa2'
| 'microsoft'
| 'msi'
| 'nvidia'
| 'palit'
| 'pny'
| 'sony'
| 'zotac';
itemNumber?: string; itemNumber?: string;
series: Series; series: Series;
model: string; model: string;
@@ -34,7 +117,7 @@ export type Labels = {
maxPrice?: Pricing; maxPrice?: Pricing;
}; };
export type StatusCodeRangeArray = Array<(number | [number, number])>; export type StatusCodeRangeArray = Array<number | [number, number]>;
export type Store = { export type Store = {
realTimeInventoryLookup?: (itemNumber: string) => Promise<boolean>; realTimeInventoryLookup?: (itemNumber: string) => Promise<boolean>;
+2 -1
View File
@@ -27,7 +27,8 @@ export const Target: Store = {
brand: 'sony', brand: 'sony',
model: 'ps5 digital', model: 'ps5 digital',
series: 'sonyps5de', series: 'sonyps5de',
url: 'https://www.target.com/p/playstation-5-digital-edition-console/-/A-81114596' url:
'https://www.target.com/p/playstation-5-digital-edition-console/-/A-81114596'
}, },
{ {
brand: 'microsoft', brand: 'microsoft',
+13 -7
View File
@@ -22,7 +22,8 @@ export const Very: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://www.very.co.uk/msi-geforce-gtx-1660-ti-gaming-x-6g-graphics-card/1600350984.prd' url:
'https://www.very.co.uk/msi-geforce-gtx-1660-ti-gaming-x-6g-graphics-card/1600350984.prd'
} }
], ],
linksBuilder: { linksBuilder: {
@@ -34,9 +35,11 @@ export const Very: Store = {
const titleElement = productElement.find('.productTitle').first(); const titleElement = productElement.find('.productTitle').first();
const title = titleElement.text()?.replace(/\n/g, ' ').trim(); const title = titleElement.text()?.replace(/\n/g, ' ').trim();
if (!title || ['RTX', series] if (
.map(x => title.toLowerCase().includes(x.toLowerCase())) !title ||
.filter(x => !x).length > 0 ['RTX', series]
.map((x) => title.toLowerCase().includes(x.toLowerCase()))
.filter((x) => !x).length > 0
) { ) {
continue; continue;
} }
@@ -67,15 +70,18 @@ export const Very: Store = {
urls: [ urls: [
{ {
series: '3070', series: '3070',
url: 'https://www.very.co.uk/electricals/pc-components/graphics-cards/e/b/118786.end?sort=newin,0&numProducts=100' url:
'https://www.very.co.uk/electricals/pc-components/graphics-cards/e/b/118786.end?sort=newin,0&numProducts=100'
}, },
{ {
series: '3080', series: '3080',
url: 'https://www.very.co.uk/electricals/pc-components/graphics-cards/e/b/118786.end?sort=newin,0&numProducts=100' url:
'https://www.very.co.uk/electricals/pc-components/graphics-cards/e/b/118786.end?sort=newin,0&numProducts=100'
}, },
{ {
series: '3090', series: '3090',
url: 'https://www.very.co.uk/electricals/pc-components/graphics-cards/e/b/118786.end?sort=newin,0&numProducts=100' url:
'https://www.very.co.uk/electricals/pc-components/graphics-cards/e/b/118786.end?sort=newin,0&numProducts=100'
} }
] ]
}, },
+8 -5
View File
@@ -17,27 +17,30 @@ export const Zotac: Store = {
brand: 'test:brand', brand: 'test:brand',
model: 'test:model', model: 'test:model',
series: 'test:series', series: 'test:series',
url: 'https://store.zotac.com/zotac-gaming-geforce-rtx-2060-twin-fan-zt-t20600f-10m' url:
'https://store.zotac.com/zotac-gaming-geforce-rtx-2060-twin-fan-zt-t20600f-10m'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3080', series: '3080',
url: 'https://store.zotac.com/zotac-gaming-geforce-rtx-3080-trinity-zt-a30800d-10p' url:
'https://store.zotac.com/zotac-gaming-geforce-rtx-3080-trinity-zt-a30800d-10p'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity oc', model: 'trinity oc',
series: '3080', series: '3080',
url: 'https://store.zotac.com/zotac-gaming-geforce-rtx-3080-trinity-oc-zt-a30800j-10p' url:
'https://store.zotac.com/zotac-gaming-geforce-rtx-3080-trinity-oc-zt-a30800j-10p'
}, },
{ {
brand: 'zotac', brand: 'zotac',
model: 'trinity', model: 'trinity',
series: '3090', series: '3090',
url: 'https://store.zotac.com/zotac-gaming-geforce-rtx-3090-trinity-zt-a30900d-10p' url:
'https://store.zotac.com/zotac-gaming-geforce-rtx-3090-trinity-zt-a30900d-10p'
} }
], ],
name: 'zotac' name: 'zotac'
}; };
+6 -1
View File
@@ -11,7 +11,12 @@ declare module 'play-sound' {
export interface PlaySound { export interface PlaySound {
player: string; player: string;
play: ((file: string, callback: (error: Error) => void) => PlayerProcess) & ((file: string, options: PlayOptions, callback: (error: Error) => void) => PlayerProcess); play: ((file: string, callback: (error: Error) => void) => PlayerProcess) &
((
file: string,
options: PlayOptions,
callback: (error: Error) => void
) => PlayerProcess);
} }
export interface PlayerProcess { export interface PlayerProcess {
+13 -13
View File
@@ -2,19 +2,19 @@ declare module 'puppeteer-extra-plugin-block-resources' {
import {PuppeteerExtraPlugin} from 'puppeteer-extra'; import {PuppeteerExtraPlugin} from 'puppeteer-extra';
export type ResourceType = export type ResourceType =
'document' | | 'document'
'eventsource' | | 'eventsource'
'fetch' | | 'fetch'
'font' | | 'font'
'image' | | 'image'
'manifest' | | 'manifest'
'media' | | 'media'
'other' | | 'other'
'script' | | 'script'
'stylesheet' | | 'stylesheet'
'texttrack' | | 'texttrack'
'websocket' | | 'websocket'
'xhr'; | 'xhr';
export interface Options { export interface Options {
availableTypes?: Set<ResourceType>; availableTypes?: Set<ResourceType>;
+40 -8
View File
@@ -1,7 +1,9 @@
declare module '@jef/pushbullet' { declare module '@jef/pushbullet' {
export type DeviceParams = string | number | Record<string, any>; export type DeviceParams = string | number | Record<string, any>;
export type PushBulletCallback = ((error: Error) => void) | ((error?: null, response: any) => void); export type PushBulletCallback =
| ((error: Error) => void)
| ((error?: null, response: any) => void);
export interface ListOptions { export interface ListOptions {
active?: boolean; active?: boolean;
@@ -16,7 +18,11 @@ declare module '@jef/pushbullet' {
export interface PushBulletStream { export interface PushBulletStream {
connect: () => void; connect: () => void;
close: () => void; close: () => void;
on: ((event: 'connect' | 'close' | 'nop', callback: () => void) => void) & ((event: 'error', callback: (error: any) => void) => void) & ((event: 'message', callback: (message: any) => void) => void) & ((event: 'tickle', callback: (tickle: any) => void) => void) & ((event: 'push', callback: (push: any) => void) => void); on: ((event: 'connect' | 'close' | 'nop', callback: () => void) => void) &
((event: 'error', callback: (error: any) => void) => void) &
((event: 'message', callback: (message: any) => void) => void) &
((event: 'tickle', callback: (tickle: any) => void) => void) &
((event: 'push', callback: (push: any) => void) => void);
} }
export class PushBullet { export class PushBullet {
@@ -25,11 +31,31 @@ declare module '@jef/pushbullet' {
devices(options: ListOptions, callback: PushBulletCallback); devices(options: ListOptions, callback: PushBulletCallback);
devices(callback: PushBulletCallback); devices(callback: PushBulletCallback);
createDevice(options: Record<string, any>, callback: PushBulletCallback); createDevice(options: Record<string, any>, callback: PushBulletCallback);
updateDevice(deviceIden: string, deviceOptions: Record<string, any>, callback: PushBulletCallback); updateDevice(
deviceIden: string,
deviceOptions: Record<string, any>,
callback: PushBulletCallback
);
deleteDevice(deviceIden: string, callback: PushBulletCallback); deleteDevice(deviceIden: string, callback: PushBulletCallback);
note(deviceParams: DeviceParams, title: string, body: string, callback: PushBulletCallback); note(
link(deviceParams: DeviceParams, name: string, url: string, body: string, callback: PushBulletCallback); deviceParams: DeviceParams,
file(deviceParams: DeviceParams, filePath: string, message: string, callback: PushBulletCallback); title: string,
body: string,
callback: PushBulletCallback
);
link(
deviceParams: DeviceParams,
name: string,
url: string,
body: string,
callback: PushBulletCallback
);
file(
deviceParams: DeviceParams,
filePath: string,
message: string,
callback: PushBulletCallback
);
dismissPush(pushIden: DeviceParams, callback: PushBulletCallback); dismissPush(pushIden: DeviceParams, callback: PushBulletCallback);
deletePush(pushIden: DeviceParams, callback: PushBulletCallback); deletePush(pushIden: DeviceParams, callback: PushBulletCallback);
deleteAllPushes(callback: PushBulletCallback); deleteAllPushes(callback: PushBulletCallback);
@@ -50,9 +76,15 @@ declare module '@jef/pushbullet' {
unmuteChat(chatIden: string, callback: PushBulletCallback); unmuteChat(chatIden: string, callback: PushBulletCallback);
sendSMS(options: Record<string, any>, callback: PushBulletCallback); sendSMS(options: Record<string, any>, callback: PushBulletCallback);
sendClipboard(options: Record<string, any>, callback: PushBulletCallback); sendClipboard(options: Record<string, any>, callback: PushBulletCallback);
dismissEphemeral(options: Record<string, any>, callback: PushBulletCallback); dismissEphemeral(
options: Record<string, any>,
callback: PushBulletCallback
);
stream(): PushBulletStream; stream(): PushBulletStream;
enableEncryption(encryptionPassword: string, userIden: string): PushBulletStream; enableEncryption(
encryptionPassword: string,
userIden: string
): PushBulletStream;
} }
export default PushBullet; export default PushBullet;
+26 -24
View File
@@ -1,30 +1,32 @@
declare module 'pushover-notifications' { declare module 'pushover-notifications' {
export type PushoverCallback = ((error: Error) => void) | ((error?: null, response: any) => void); export type PushoverCallback =
| ((error: Error) => void)
| ((error?: null, response: any) => void);
export type Sound = export type Sound =
'pushover' | | 'pushover'
'bike' | | 'bike'
'bugle' | | 'bugle'
'cashregister' | | 'cashregister'
'classical' | | 'classical'
'cosmic' | | 'cosmic'
'falling' | | 'falling'
'gamelan' | | 'gamelan'
'incoming' | | 'incoming'
'intermission' | | 'intermission'
'magic' | | 'magic'
'mechanical' | | 'mechanical'
'pianobar' | | 'pianobar'
'siren' | | 'siren'
'spacealarm' | | 'spacealarm'
'tugboat' | | 'tugboat'
'alien' | | 'alien'
'climb' | | 'climb'
'persistent' | | 'persistent'
'echo' | | 'echo'
'updown' | | 'updown'
'vibrate' | | 'vibrate'
'none'; | 'none';
export interface PushoverOptions { export interface PushoverOptions {
token: string; token: string;
+14 -6
View File
@@ -6,16 +6,19 @@ import {logger} from './logger';
export function getSleepTime(store: Store) { export function getSleepTime(store: Store) {
const minSleep = store.minPageSleep as number; const minSleep = store.minPageSleep as number;
return minSleep + (Math.random() * ((store.maxPageSleep as number) - minSleep)); return minSleep + Math.random() * ((store.maxPageSleep as number) - minSleep);
} }
export async function delay(ms: number) { export async function delay(ms: number) {
return new Promise(resolve => { return new Promise((resolve) => {
setTimeout(resolve, ms); setTimeout(resolve, ms);
}); });
} }
export function isStatusCodeInRange(statusCode: number, range: StatusCodeRangeArray) { export function isStatusCodeInRange(
statusCode: number,
range: StatusCodeRangeArray
) {
for (const value of range) { for (const value of range) {
let min: number; let min: number;
let max: number; let max: number;
@@ -37,7 +40,7 @@ export function isStatusCodeInRange(statusCode: number, range: StatusCodeRangeAr
export async function usingResponse<T>( export async function usingResponse<T>(
browser: Browser, browser: Browser,
url: string, url: string,
cb: (response: (Response | null), page: Page, browser: Browser) => Promise<T> cb: (response: Response | null, page: Page, browser: Browser) => Promise<T>
): Promise<T> { ): Promise<T> {
return usingPage(browser, async (page, browser) => { return usingPage(browser, async (page, browser) => {
const response = await page.goto(url, {waitUntil: 'domcontentloaded'}); const response = await page.goto(url, {waitUntil: 'domcontentloaded'});
@@ -46,7 +49,10 @@ export async function usingResponse<T>(
}); });
} }
export async function usingPage<T>(browser: Browser, cb: (page: Page, browser: Browser) => Promise<T>): Promise<T> { export async function usingPage<T>(
browser: Browser,
cb: (page: Page, browser: Browser) => Promise<T>
): Promise<T> {
const page = await browser.newPage(); const page = await browser.newPage();
page.setDefaultNavigationTimeout(config.page.timeout); page.setDefaultNavigationTimeout(config.page.timeout);
await page.setUserAgent(getRandomUserAgent()); await page.setUserAgent(getRandomUserAgent());
@@ -71,5 +77,7 @@ export async function closePage(page: Page) {
} }
export function getRandomUserAgent(): string { export function getRandomUserAgent(): string {
return config.page.userAgents[Math.floor(Math.random() * config.page.userAgents.length)]; return config.page.userAgents[
Math.floor(Math.random() * config.page.userAgents.length)
];
} }
+26 -9
View File
@@ -1,13 +1,19 @@
import {IncomingMessage, Server, ServerResponse, createServer} from 'http'; import {IncomingMessage, Server, ServerResponse, createServer} from 'http';
import {config, setConfig} from '../config'; import {config, setConfig} from '../config';
import {createReadStream, readdir} from 'fs'; import {createReadStream, readdir} from 'fs';
import {getAllBrands, getAllModels, getAllSeries, storeList, updateStores} from '../store/model'; import {
getAllBrands,
getAllModels,
getAllSeries,
storeList,
updateStores
} from '../store/model';
import {join, normalize} from 'path'; import {join, normalize} from 'path';
const approot = join(__dirname, '../../'); const approot = join(__dirname, '../../');
const webroot = join(approot, './web'); const webroot = join(approot, './web');
const contentTypeMap: { [key: string]: string } = { const contentTypeMap: {[key: string]: string} = {
css: 'text/css', css: 'text/css',
htm: 'text/html', htm: 'text/html',
html: 'text/html', html: 'text/html',
@@ -19,20 +25,27 @@ const contentTypeMap: { [key: string]: string } = {
txt: 'text/plain' txt: 'text/plain'
}; };
function sendFile(response: ServerResponse, path: string, relativeTo: string = webroot) { function sendFile(
response: ServerResponse,
path: string,
relativeTo: string = webroot
) {
path = normalize(`./${path}`); path = normalize(`./${path}`);
const fsPath = join(relativeTo, path); const fsPath = join(relativeTo, path);
try { try {
const stream = createReadStream(fsPath); const stream = createReadStream(fsPath);
stream.on('error', error => { stream.on('error', (error) => {
sendError(response, error.message); sendError(response, error.message);
}); });
const pathSplit = path.split('.'); const pathSplit = path.split('.');
const ext = pathSplit[pathSplit.length - 1].toLowerCase(); const ext = pathSplit[pathSplit.length - 1].toLowerCase();
response.setHeader('Content-Type', contentTypeMap[ext] ?? contentTypeMap.txt); response.setHeader(
'Content-Type',
contentTypeMap[ext] ?? contentTypeMap.txt
);
stream.on('end', () => response.end()); stream.on('end', () => response.end());
stream.pipe(response); stream.pipe(response);
@@ -58,7 +71,11 @@ function sendConfig(response: ServerResponse) {
sendJSON(response, config); sendJSON(response, config);
} }
function handleAPI(request: IncomingMessage, response: ServerResponse, urlComponents: string[]) { function handleAPI(
request: IncomingMessage,
response: ServerResponse,
urlComponents: string[]
) {
if (urlComponents.length < 2) { if (urlComponents.length < 2) {
sendError(response, 'No API route specified', 400); sendError(response, 'No API route specified', 400);
return; return;
@@ -68,7 +85,7 @@ function handleAPI(request: IncomingMessage, response: ServerResponse, urlCompon
case 'config': case 'config':
if (request.method === 'PUT') { if (request.method === 'PUT') {
const data: string[] = []; const data: string[] = [];
request.on('data', chunk => { request.on('data', (chunk) => {
data.push(chunk); data.push(chunk);
}); });
request.on('end', () => { request.on('end', () => {
@@ -76,7 +93,7 @@ function handleAPI(request: IncomingMessage, response: ServerResponse, urlCompon
try { try {
setConfig(JSON.parse(data.join(''))); setConfig(JSON.parse(data.join('')));
updateStores(); updateStores();
} catch { } } catch {}
sendConfig(response); sendConfig(response);
}); });
@@ -158,7 +175,7 @@ export async function startAPIServer() {
} }
export async function stopAPIServer() { export async function stopAPIServer() {
return new Promise(resolve => { return new Promise((resolve) => {
if (server) { if (server) {
server.close(resolve); server.close(resolve);
server = undefined; server = undefined;