diff --git a/package.json b/package.json index 576547bd70..4434c85130 100644 --- a/package.json +++ b/package.json @@ -70,11 +70,11 @@ "xo": "^0.33.1" }, "xo": { + "prettier": true, "rules": { "sort-imports": "error", "sort-keys": "error", - "sort-vars": "error", - "max-params": 0 + "sort-vars": "error" } }, "husky": { diff --git a/src/banner.ts b/src/banner.ts index 54e61832cb..5bd2734a59 100644 --- a/src/banner.ts +++ b/src/banner.ts @@ -8,16 +8,17 @@ export const banner = { ██████ ▄▄▄█████▓ ██▀███ ▓█████ ▓█████▄▄▄█████▓ ███▄ ▄███▓▓█████ ██▀███ ▄████▄ ██░ ██ ▄▄▄ ███▄ █ ▄▄▄█████▓ ▒██ ▒ ▓ ██▒ ▓▒▓██ ▒ ██▒▓█ ▀ ▓█ ▀▓ ██▒ ▓▒▓██▒▀█▀ ██▒▓█ ▀ ▓██ ▒ ██▒▒██▀ ▀█ ▓██░ ██▒▒████▄ ██ ▀█ █ ▓ ██▒ ▓▒ ░ ▓██▄ ▒ ▓██░ ▒░▓██ ░▄█ ▒▒███ ▒███ ▒ ▓██░ ▒░▓██ ▓██░▒███ ▓██ ░▄█ ▒▒▓█ ▄ ▒██▀▀██░▒██ ▀█▄ ▓██ ▀█ ██▒▒ ▓██░ ▒░ - ▒ ██▒░ ▓██▓ ░ ▒██▀▀█▄ ▒▓█ ▄ ▒▓█ ▄░ ▓██▓ ░ ▒██ ▒██ ▒▓█ ▄ ▒██▀▀█▄ ▒▓▓▄ ▄██▒░▓█ ░██ ░██▄▄▄▄██ ▓██▒ ▐▌██▒░ ▓██▓ ░ -▒██████▒▒ ▒██▒ ░ ░██▓ ▒██▒░▒████▒░▒████▒ ▒██▒ ░ ▒██▒ ░██▒░▒████▒░██▓ ▒██▒▒ ▓███▀ ░░▓█▒░██▓ ▓█ ▓██▒▒██░ ▓██░ ▒██▒ ░ -▒ ▒▓▒ ▒ ░ ▒ ░░ ░ ▒▓ ░▒▓░░░ ▒░ ░░░ ▒░ ░ ▒ ░░ ░ ▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░░ ░▒ ▒ ░ ▒ ░░▒░▒ ▒▒ ▓▒█░░ ▒░ ▒ ▒ ▒ ░░ -░ ░▒ ░ ░ ░ ░▒ ░ ▒░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ▒ ▒ ░▒░ ░ ▒ ▒▒ ░░ ░░ ░ ▒░ ░ -░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░ ░ - ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ - + ▒ ██▒░ ▓██▓ ░ ▒██▀▀█▄ ▒▓█ ▄ ▒▓█ ▄░ ▓██▓ ░ ▒██ ▒██ ▒▓█ ▄ ▒██▀▀█▄ ▒▓▓▄ ▄██▒░▓█ ░██ ░██▄▄▄▄██ ▓██▒ ▐▌██▒░ ▓██▓ ░ +▒██████▒▒ ▒██▒ ░ ░██▓ ▒██▒░▒████▒░▒████▒ ▒██▒ ░ ▒██▒ ░██▒░▒████▒░██▓ ▒██▒▒ ▓███▀ ░░▓█▒░██▓ ▓█ ▓██▒▒██░ ▓██░ ▒██▒ ░ +▒ ▒▓▒ ▒ ░ ▒ ░░ ░ ▒▓ ░▒▓░░░ ▒░ ░░░ ▒░ ░ ▒ ░░ ░ ▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░░ ░▒ ▒ ░ ▒ ░░▒░▒ ▒▒ ▓▒█░░ ▒░ ▒ ▒ ▒ ░░ +░ ░▒ ░ ░ ░ ░▒ ░ ▒░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ▒ ▒ ░▒░ ░ ▒ ▒▒ ░░ ░░ ░ ▒░ ░ +░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░ ░ + ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ${version}`, 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 ${version}` diff --git a/src/config.ts b/src/config.ts index a395b2594f..f27ad7ddab 100644 --- a/src/config.ts +++ b/src/config.ts @@ -5,7 +5,12 @@ import path from 'path'; 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. @@ -13,10 +18,16 @@ console.info(banner.render(envOrBoolean(process.env.ASCII_BANNER, false), envOrS * @param environment Interested environment variable. * @param array Default array. If not set, is `[]`. */ -function envOrArray(environment: string | undefined, array?: string[]): string[] { - return (environment ? ( - environment.includes('\n') ? environment.split('\n') : environment.split(',') - ) : (array ?? [])).map(s => s.trim()); +function envOrArray( + environment: string | undefined, + array?: string[] +): string[] { + return (environment + ? environment.includes('\n') + ? environment.split('\n') + : environment.split(',') + : array ?? [] + ).map((s) => s.trim()); } /** @@ -25,8 +36,11 @@ function envOrArray(environment: string | undefined, array?: string[]): string[] * @param environment Interested environment variable. * @param boolean Default boolean. If not set, is `true`. */ -function envOrBoolean(environment: string | undefined, boolean?: boolean): boolean { - return environment ? environment === 'true' : (boolean ?? true); +function envOrBoolean( + environment: string | undefined, + boolean?: boolean +): boolean { + return environment ? environment === 'true' : boolean ?? true; } /** @@ -36,7 +50,7 @@ function envOrBoolean(environment: string | undefined, boolean?: boolean): boole * @param string Default string. If not set, is `''`. */ function envOrString(environment: string | undefined, string?: string): string { - return environment ? environment : (string ?? ''); + return environment ? environment : string ?? ''; } /** @@ -46,7 +60,7 @@ function envOrString(environment: string | undefined, string?: string): string { * @param number Default number. If not set, is `0`. */ function envOrNumber(environment: string | undefined, number?: number): number { - return environment ? Number(environment) : (number ?? 0); + return environment ? Number(environment) : number ?? 0; } /** @@ -61,14 +75,24 @@ function envOrNumber(environment: string | undefined, number?: number): number { * @param environmentMax Max environment variable of Min/Max pair. * @param number Default number. If not set, is `0`. */ -function envOrNumberMin(environmentMin: string | undefined, environmentMax: string | undefined, number?: number) { +function envOrNumberMin( + environmentMin: string | undefined, + environmentMax: string | undefined, + number?: number +) { if (environmentMin || environmentMax) { if (environmentMin && environmentMax) { - return Number(Number(environmentMin) < Number(environmentMax) ? environmentMin : environmentMax); + return Number( + Number(environmentMin) < Number(environmentMax) + ? environmentMin + : environmentMax + ); } if (environmentMax) { - return Number(environmentMax) < (number ?? 0) ? Number(environmentMax) : (number ?? 0); + return Number(environmentMax) < (number ?? 0) + ? Number(environmentMax) + : number ?? 0; } if (environmentMin) { @@ -91,14 +115,24 @@ function envOrNumberMin(environmentMin: string | undefined, environmentMax: stri * @param environmentMax Max environment variable of Min/Max pair. * @param number Default number. If not set, is `0`. */ -function envOrNumberMax(environmentMin: string | undefined, environmentMax: string | undefined, number?: number) { +function envOrNumberMax( + environmentMin: string | undefined, + environmentMax: string | undefined, + number?: number +) { if (environmentMin || environmentMax) { if (environmentMin && environmentMax) { - return Number(Number(environmentMin) < Number(environmentMax) ? environmentMax : environmentMax); + return Number( + Number(environmentMin) < Number(environmentMax) + ? environmentMax + : environmentMax + ); } if (environmentMin) { - return Number(environmentMin) > (number ?? 0) ? Number(environmentMin) : (number ?? 0); + return Number(environmentMin) > (number ?? 0) + ? Number(environmentMin) + : number ?? 0; } if (environmentMax) { @@ -114,10 +148,26 @@ const browser = { isIncognito: envOrBoolean(process.env.INCOGNITO, false), isTrusted: envOrBoolean(process.env.BROWSER_TRUSTED, false), lowBandwidth: envOrBoolean(process.env.LOW_BANDWIDTH, false), - maxBackoff: envOrNumberMax(process.env.PAGE_BACKOFF_MIN, process.env.PAGE_BACKOFF_MAX, 3600000), - maxSleep: envOrNumberMax(process.env.PAGE_SLEEP_MIN, process.env.PAGE_SLEEP_MAX, 10000), - minBackoff: envOrNumberMin(process.env.PAGE_BACKOFF_MIN, process.env.PAGE_BACKOFF_MAX, 10000), - minSleep: envOrNumberMin(process.env.PAGE_SLEEP_MIN, process.env.PAGE_SLEEP_MAX, 5000), + maxBackoff: envOrNumberMax( + process.env.PAGE_BACKOFF_MIN, + process.env.PAGE_BACKOFF_MAX, + 3600000 + ), + maxSleep: envOrNumberMax( + process.env.PAGE_SLEEP_MIN, + process.env.PAGE_SLEEP_MAX, + 10000 + ), + minBackoff: envOrNumberMin( + process.env.PAGE_BACKOFF_MIN, + process.env.PAGE_BACKOFF_MAX, + 10000 + ), + minSleep: envOrNumberMin( + process.env.PAGE_SLEEP_MIN, + process.env.PAGE_SLEEP_MAX, + 5000 + ), open: envOrBoolean(process.env.OPEN_BROWSER) }; @@ -135,7 +185,10 @@ const notifications = { password: envOrString(process.env.EMAIL_PASSWORD), smtpAddress: envOrString(process.env.SMTP_ADDRESS), smtpPort: envOrNumber(process.env.SMTP_PORT, 25), - to: envOrString(process.env.EMAIL_TO, envOrString(process.env.EMAIL_USERNAME)), + to: envOrString( + process.env.EMAIL_TO, + envOrString(process.env.EMAIL_USERNAME) + ), username: envOrString(process.env.EMAIL_USERNAME) }, mqtt: { @@ -230,7 +283,9 @@ const page = { inStockWaitTime: envOrNumber(process.env.IN_STOCK_WAIT_TIME), screenshot: envOrBoolean(process.env.SCREENSHOT), timeout: envOrNumber(process.env.PAGE_TIMEOUT, 30000), - userAgents: envOrArray(process.env.USER_AGENT, ['Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36']), + userAgents: envOrArray(process.env.USER_AGENT, [ + 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' + ]), width: 1920 }; @@ -241,7 +296,9 @@ const proxy = { // Check for deprecated configuration values if (process.env.MAX_PRICE) { - console.warn('ℹ MAX_PRICE is deprecated, please use MAX_PRICE_SERIES_{{series}}'); + console.warn( + 'ℹ MAX_PRICE is deprecated, please use MAX_PRICE_SERIES_{{series}}' + ); } const store = { @@ -264,19 +321,39 @@ const store = { }, microCenterLocation: envOrArray(process.env.MICROCENTER_LOCATION, ['web']), showOnlyBrands: envOrArray(process.env.SHOW_ONLY_BRANDS), - showOnlyModels: envOrArray(process.env.SHOW_ONLY_MODELS).map(entry => { + showOnlyModels: envOrArray(process.env.SHOW_ONLY_MODELS).map((entry) => { const [name, series] = entry.match(/[^:]+/g) ?? []; return { name: envOrString(name), series: envOrString(series) }; }), - showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, ['3070', '3080', '3090', 'ryzen5600', 'ryzen5800', 'ryzen5900', 'ryzen5950', 'sonyps5c', 'sonyps5de', 'xboxsx', 'xboxss']), - stores: envOrArray(process.env.STORES, ['nvidia']).map(entry => { + showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, [ + '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) ?? []; return { - maxPageSleep: envOrNumberMax(minPageSleep, maxPageSleep, browser.maxSleep), - minPageSleep: envOrNumberMin(minPageSleep, maxPageSleep, browser.minSleep), + maxPageSleep: envOrNumberMax( + minPageSleep, + maxPageSleep, + browser.maxSleep + ), + minPageSleep: envOrNumberMin( + minPageSleep, + maxPageSleep, + browser.minSleep + ), name: envOrString(name) }; }) diff --git a/src/index.ts b/src/index.ts index 9c32eadb68..c828d49098 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,9 +12,11 @@ import {tryLookupAndLoop} from './store'; puppeteer.use(stealthPlugin()); if (config.browser.lowBandwidth) { - puppeteer.use(resourceBlock({ - blockedTypes: new Set(['image', 'font'] as const) - })); + puppeteer.use( + resourceBlock({ + blockedTypes: new Set(['image', 'font'] as const) + }) + ); } else { puppeteer.use(adBlocker); } @@ -41,7 +43,9 @@ async function main() { // Add the address of the proxy server if defined if (config.proxy.address) { - args.push(`--proxy-server=http://${config.proxy.address}:${config.proxy.port}`); + args.push( + `--proxy-server=http://${config.proxy.address}:${config.proxy.port}` + ); } await stop(); @@ -91,7 +95,10 @@ async function loopMain() { try { await main(); } 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); } } diff --git a/src/logger.ts b/src/logger.ts index 69914b0763..c82157e23d 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -3,26 +3,24 @@ import chalk from 'chalk'; import {config} from './config'; import winston from 'winston'; -const prettyJson = winston.format.printf(info => { +const prettyJson = winston.format.printf((info) => { const timestamp = new Date().toLocaleTimeString(); - if (typeof info.message === 'object') { - info.message = JSON.stringify(info.message, null, 4); - } + let out = `${chalk.grey(`[${timestamp}]`)} ${info.level} ${chalk.grey( + '::' + )} ${info.message}`; - if (info.meta) { - return chalk.grey(`[${timestamp}]`) + ` ${info.level} ` + chalk.grey('::') + ` ${info.message} ${chalk.magenta(JSON.stringify(info.meta, null, 2))}`; + if (Object.keys(info.metadata).length > 0) { + out = `${out} ${chalk.magenta(JSON.stringify(info.metadata, null, 2))}`; } - return chalk.grey(`[${timestamp}]`) + ` ${info.level} ` + chalk.grey('::') + ` ${info.message}`; + return out; }); export const logger = winston.createLogger({ format: winston.format.combine( winston.format.colorize(), - winston.format.prettyPrint(), - winston.format.splat(), - winston.format.simple(), + winston.format.metadata({fillExcept: ['level', 'message', 'timestamp']}), prettyJson ), level: config.logLevel, @@ -30,30 +28,67 @@ export const logger = winston.createLogger({ }); export const Print = { - backoff(link: Link, store: Store, parameters: {delay: number; statusCode: number}, color?: boolean): string { + backoff( + link: Link, + store: Store, + parameters: {delay: number; statusCode: number}, + color?: boolean + ): string { if (color) { - return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow(`BACKOFF DELAY status=${parameters.statusCode} delay=${parameters.delay}`); + return ( + '✖ ' + + buildProductString(link, store, true) + + ' :: ' + + chalk.yellow( + `BACKOFF DELAY status=${parameters.statusCode} delay=${parameters.delay}` + ) + ); } - return `✖ ${buildProductString(link, store)} :: BACKOFF DELAY status=${parameters.statusCode} delay=${parameters.delay}`; + return `✖ ${buildProductString(link, store)} :: BACKOFF DELAY status=${ + parameters.statusCode + } delay=${parameters.delay}`; }, - badStatusCode(link: Link, store: Store, statusCode: number, color?: boolean): string { + badStatusCode( + link: Link, + store: Store, + statusCode: number, + color?: boolean + ): string { if (color) { - return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow(`STATUS CODE ERROR ${statusCode}`); + return ( + '✖ ' + + buildProductString(link, store, true) + + ' :: ' + + chalk.yellow(`STATUS CODE ERROR ${statusCode}`) + ); } - return `✖ ${buildProductString(link, store)} :: STATUS CODE ERROR ${statusCode}`; + return `✖ ${buildProductString( + link, + store + )} :: STATUS CODE ERROR ${statusCode}`; }, bannedSeller(link: Link, store: Store, color?: boolean): string { if (color) { - return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('BANNED SELLER'); + return ( + '✖ ' + + buildProductString(link, store, true) + + ' :: ' + + chalk.yellow('BANNED SELLER') + ); } return `✖ ${buildProductString(link, store)} :: BANNED SELLER`; }, captcha(link: Link, store: Store, color?: boolean): string { if (color) { - return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('CAPTCHA'); + return ( + '✖ ' + + buildProductString(link, store, true) + + ' :: ' + + chalk.yellow('CAPTCHA') + ); } return `✖ ${buildProductString(link, store)} :: CAPTCHA`; @@ -73,49 +108,97 @@ export const Print = { }, inStockWaiting(link: Link, store: Store, color?: boolean): string { if (color) { - return 'ℹ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('IN STOCK, WAITING'); + return ( + 'ℹ ' + + buildProductString(link, store, true) + + ' :: ' + + chalk.yellow('IN STOCK, WAITING') + ); } return `ℹ ${buildProductString(link, store)} :: IN STOCK, WAITING`; }, - maxPrice(link: Link, store: Store, price: number, maxPrice: number, color?: boolean): string { + maxPrice( + link: Link, + store: Store, + price: number, + maxPrice: number, + color?: boolean + ): string { if (color) { - return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow(`PRICE ${price} EXCEEDS LIMIT ${maxPrice}`); + return ( + '✖ ' + + buildProductString(link, store, true) + + ' :: ' + + chalk.yellow(`PRICE ${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) { - return '✖ ' + buildSetupString(topic, store, true) + ' :: ' + chalk.yellow(message); + return ( + '✖ ' + + buildSetupString(topic, store, true) + + ' :: ' + + chalk.yellow(message) + ); } return `✖ ${buildSetupString(topic, store)} :: ${message}`; }, noResponse(link: Link, store: Store, color?: boolean): string { if (color) { - return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('NO RESPONSE'); + return ( + '✖ ' + + buildProductString(link, store, true) + + ' :: ' + + chalk.yellow('NO RESPONSE') + ); } return `✖ ${buildProductString(link, store)} :: NO RESPONSE`; }, outOfStock(link: Link, store: Store, color?: boolean): string { if (color) { - return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.red('OUT OF STOCK'); + return ( + '✖ ' + + buildProductString(link, store, true) + + ' :: ' + + chalk.red('OUT OF STOCK') + ); } return `✖ ${buildProductString(link, store)} :: OUT OF STOCK`; }, rateLimit(link: Link, store: Store, color?: boolean): string { if (color) { - return '✖ ' + buildProductString(link, store, true) + ' :: ' + chalk.yellow('RATE LIMIT EXCEEDED'); + return ( + '✖ ' + + buildProductString(link, store, true) + + ' :: ' + + chalk.yellow('RATE LIMIT EXCEEDED') + ); } return `✖ ${buildProductString(link, store)} :: RATE LIMIT EXCEEDED`; } }; -function buildSetupString(topic: string, store: Store, color?: boolean): string { +function buildSetupString( + topic: string, + store: Store, + color?: boolean +): string { if (color) { return chalk.cyan(`[${store.name}]`) + chalk.grey(` [setup (${topic})]`); } @@ -125,7 +208,10 @@ function buildSetupString(topic: string, store: Store, color?: boolean): string function buildProductString(link: Link, store: Store, color?: boolean): string { if (color) { - return chalk.cyan(`[${store.name}]`) + chalk.grey(` [${link.brand} (${link.series})] ${link.model}`); + return ( + chalk.cyan(`[${store.name}]`) + + chalk.grey(` [${link.brand} (${link.series})] ${link.model}`) + ); } return `[${store.name}] [${link.brand} (${link.series})] ${link.model}`; diff --git a/src/notification/discord.ts b/src/notification/discord.ts index 4bb86e8a90..ee1fc7927e 100644 --- a/src/notification/discord.ts +++ b/src/notification/discord.ts @@ -25,7 +25,7 @@ export function sendDiscordMessage(link: Link, store: Store) { embed.setText(notifyGroup.join(' ')); } - embed.setColor(0x76B900); + embed.setColor(0x76b900); embed.setTimestamp(); const promises = []; @@ -37,7 +37,7 @@ export function sendDiscordMessage(link: Link, store: Store) { logger.info('✔ discord message sent'); } catch (error) { - logger.error('✖ couldn\'t send discord message', error); + logger.error("✖ couldn't send discord message", error); } })(); } diff --git a/src/notification/email.ts b/src/notification/email.ts index c3c94ddceb..cc7bbbea38 100644 --- a/src/notification/email.ts +++ b/src/notification/email.ts @@ -30,21 +30,23 @@ export function sendEmail(link: Link, store: Store) { logger.debug('↗ sending email'); const mailOptions: Mail.Options = { - attachments: link.screenshot ? [ - { - filename: link.screenshot, - path: `./${link.screenshot}` - } - ] : undefined, + attachments: link.screenshot + ? [ + { + filename: link.screenshot, + path: `./${link.screenshot}` + } + ] + : undefined, from: email.username, subject: Print.inStock(link, store), text: link.cartUrl ? link.cartUrl : link.url, to: email.to }; - transporter.sendMail(mailOptions, error => { + transporter.sendMail(mailOptions, (error) => { if (error) { - logger.error('✖ couldn\'t send email', error); + logger.error("✖ couldn't send email", error); } else { logger.info('✔ email sent'); } diff --git a/src/notification/mqtt.ts b/src/notification/mqtt.ts index 09d074d01d..af0c0bc06d 100644 --- a/src/notification/mqtt.ts +++ b/src/notification/mqtt.ts @@ -8,15 +8,20 @@ let client: MqttClient.Client; if (mqtt.broker) { if (checkInsecureUsage(mqtt.password, mqtt.broker)) { - logger.warn('✖ Insecure transport of password - Only use credentials with MQTT brokers on private networks.'); + logger.warn( + '✖ Insecure transport of password - Only use credentials with MQTT brokers on private networks.' + ); } else { const clientOptions: IClientOptions = { - clean: (mqtt.clientId === ''), + clean: mqtt.clientId === '', clientId: mqtt.clientId === '' ? undefined : mqtt.clientId, password: mqtt.password === '' ? undefined : mqtt.password, username: mqtt.username === '' ? undefined : mqtt.username }; - client = MqttClient.connect(`mqtt://${mqtt.broker}:${mqtt.port}`, clientOptions); + client = MqttClient.connect( + `mqtt://${mqtt.broker}:${mqtt.port}`, + clientOptions + ); } } @@ -26,7 +31,10 @@ export function sendMqttMessage(link: Link, store: Store) { (async () => { const givenUrl = link.cartUrl ? link.cartUrl : link.url; - const message = `{"msg":"${Print.inStock(link, store)}", "url":"${givenUrl}"}`; + const message = `{"msg":"${Print.inStock( + link, + store + )}", "url":"${givenUrl}"}`; const topic = generateTopic(link, store, mqtt.topic); const pubOptions: IClientPublishOptions = { qos: mqtt.qos as 0 | 1 | 2, @@ -34,14 +42,10 @@ export function sendMqttMessage(link: Link, store: Store) { }; try { - client.publish( - topic, - message, - pubOptions - ); + client.publish(topic, message, pubOptions); logger.info('✔ mqtt message sent'); } catch (error) { - logger.error('✖ couldn\'t send mqtt message', error); + logger.error("✖ couldn't send mqtt message", error); } })(); } @@ -50,7 +54,8 @@ export function sendMqttMessage(link: Link, store: Store) { function generateTopic(link: Link, store: Store, topic: string): string { topic.trim(); topic = topic.replace(/^\//, ''); - topic = topic.replace(/%series%/g, link.series) + topic = topic + .replace(/%series%/g, link.series) .replace(/%brand%/g, link.brand) .replace(/%model%/g, link.model) .replace(/%store%/g, store.name); @@ -68,10 +73,12 @@ function generateTopic(link: Link, store: Store, topic: string): string { */ function checkInsecureUsage(pass: string, address: string): boolean { if (pass !== '') { - if (isClassANet(address) || + if ( + isClassANet(address) || isClassBNet(address) || isClassCNet(address) || - isLinkLocal(address)) { + isLinkLocal(address) + ) { logger.debug(`MQTT using private network broker: ${address}`); } else { logger.debug(`MQTT using public network broker: ${address}`); diff --git a/src/notification/pagerduty.ts b/src/notification/pagerduty.ts index d007957860..b759f47ece 100644 --- a/src/notification/pagerduty.ts +++ b/src/notification/pagerduty.ts @@ -8,12 +8,11 @@ const pd = new PDClient(''); export function sendPagerDutyNotification(link: Link, store: Store) { if (config.notifications.pagerduty.integrationKey) { logger.debug('↗ sending pagerduty message'); - const links = [ - {href: link.url, text: 'Visit Store'} - ]; + const links = [{href: link.url, text: 'Visit Store'}]; if (link.cartUrl) { links.push({ - href: link.cartUrl, text: 'Add to Cart' + href: link.cartUrl, + text: 'Add to Cart' }); } diff --git a/src/notification/philips-hue.ts b/src/notification/philips-hue.ts index 0b9ab746dd..df6e6b6140 100644 --- a/src/notification/philips-hue.ts +++ b/src/notification/philips-hue.ts @@ -43,29 +43,37 @@ const adjustLightsWithAPI = (hueBridge: Api) => { // If we've been given light IDs, then only adjust those IDs if (lightIds) { const arrayOfIDs = lightIds.split(','); - arrayOfIDs.forEach(light => { + arrayOfIDs.forEach((light) => { logger.debug('adjusting all hue lights'); - (hueBridge.lights.setLightState(light, lightState) as Promise).catch((error: Error) => { - logger.error('Failed to adjust all lights.'); - logger.error(error); - throw error; - }); - }); - } else { // Adjust all light IDs - hueBridge.lights.getAll().then((allLights: any[]) => { - allLights.forEach((light: any) => { - logger.debug('adjusting specified lights'); - (hueBridge.lights.setLightState(light, lightState) as Promise).catch((error: Error) => { - logger.error('Failed to adjust specified lights.'); + (hueBridge.lights.setLightState(light, lightState) as Promise).catch( + (error: Error) => { + logger.error('Failed to adjust all lights.'); logger.error(error); throw error; + } + ); + }); + } else { + // Adjust all light IDs + hueBridge.lights + .getAll() + .then((allLights: any[]) => { + allLights.forEach((light: any) => { + logger.debug('adjusting specified lights'); + (hueBridge.lights.setLightState(light, lightState) as Promise< + any + >).catch((error: Error) => { + logger.error('Failed to adjust specified lights.'); + logger.error(error); + throw error; + }); }); + }) + .catch((error: Error) => { + logger.error('Failed to get all lights.'); + logger.error(error); + throw error; }); - }).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) { logger.info('↗ adjusting Philips Hue lights over LAN'); (async () => { - logger.debug('Attempting to connect to Philips Hue bridge at ' + bridgeIp); - hueAPI.api.createLocal(bridgeIp).connect(apiKey).then( - hueBridge => { - adjustLightsWithAPI(hueBridge); - logger.info('✔ adjusted Philips Hue lights over LAN'); - }, - (error: Error) => { - logger.error('✖ couldn\'t adjust hue lights.', error); - }); + logger.debug( + 'Attempting to connect to Philips Hue bridge at ' + bridgeIp + ); + hueAPI.api + .createLocal(bridgeIp) + .connect(apiKey) + .then( + (hueBridge) => { + adjustLightsWithAPI(hueBridge); + logger.info('✔ adjusted Philips Hue lights over LAN'); + }, + (error: Error) => { + logger.error("✖ couldn't adjust hue lights.", error); + } + ); })(); } else if (hue.apiKey && hue.clientId && hue.clientSecret) { logger.info('↗ adjusting Philips Hue lights over cloud'); @@ -90,16 +104,21 @@ export function adjustPhilipsHueLights() { logger.debug('Attempting to connect to Philips Hue bridge over cloud'); const remoteBootstrap = hueAPI.api.createRemote(clientId, clientSecret); if (hue.accessToken && hue.refreshToken) { - remoteBootstrap.connectWithTokens(accessToken, refreshToken, remoteApiUsername) - .then(hueBridge => { - adjustLightsWithAPI(hueBridge); - logger.info('✔ adjusted Philips Hue lights over cloud'); - }, - (error: Error) => { - logger.error('Failed to get a remote Philips Hue connection using supplied tokens.'); - logger.error(error); - throw error; - }); + remoteBootstrap + .connectWithTokens(accessToken, refreshToken, remoteApiUsername) + .then( + (hueBridge) => { + adjustLightsWithAPI(hueBridge); + logger.info('✔ adjusted Philips Hue lights over cloud'); + }, + (error: Error) => { + logger.error( + 'Failed to get a remote Philips Hue connection using supplied tokens.' + ); + logger.error(error); + throw error; + } + ); } })(); } diff --git a/src/notification/pushbullet.ts b/src/notification/pushbullet.ts index 53eb9a06e0..9bdeb1c87f 100644 --- a/src/notification/pushbullet.ts +++ b/src/notification/pushbullet.ts @@ -17,10 +17,11 @@ export function sendPushbulletNotification(link: Link, store: Store) { link.cartUrl ? link.cartUrl : link.url, (error: Error) => { if (error) { - logger.error('✖ couldn\'t send pushbullet message', error); + logger.error("✖ couldn't send pushbullet message", error); } else { logger.info('✔ pushbullet message sent'); } - }); + } + ); } } diff --git a/src/notification/pushover.ts b/src/notification/pushover.ts index b939eb471d..8fb21cb79e 100644 --- a/src/notification/pushover.ts +++ b/src/notification/pushover.ts @@ -21,7 +21,7 @@ export function sendPushoverNotification(link: Link, store: Store) { push.send(message, (error: Error) => { if (error) { - logger.error('✖ couldn\'t send pushover message', error); + logger.error("✖ couldn't send pushover message", error); } else { logger.info('✔ pushover message sent'); } diff --git a/src/notification/slack.ts b/src/notification/slack.ts index 9deb0694e9..5412361c9a 100644 --- a/src/notification/slack.ts +++ b/src/notification/slack.ts @@ -22,13 +22,13 @@ export function sendSlackMessage(link: Link, store: Store) { }); if (!result.ok) { - logger.error('✖ couldn\'t send slack message', result); + logger.error("✖ couldn't send slack message", result); return; } logger.info('✔ slack message sent'); } catch (error) { - logger.error('✖ couldn\'t send slack message', error); + logger.error("✖ couldn't send slack message", error); } })(); } diff --git a/src/notification/sms.ts b/src/notification/sms.ts index 02ccb2aaf8..8bec88ac1b 100644 --- a/src/notification/sms.ts +++ b/src/notification/sms.ts @@ -4,18 +4,27 @@ import Mail from 'nodemailer/lib/mailer'; import {config} from '../config'; import {transporter} from './email'; -if (config.notifications.phone.number && !config.notifications.email.username) { - logger.warn('✖ in order to receive sms alerts, email notifications must also be configured'); -} - const [email, phone] = [config.notifications.email, config.notifications.phone]; +if (phone.number.length > 0 && (!email.username || !email.password)) { + logger.warn( + '✖ in order to receive sms alerts, email notifications must also be configured' + ); +} + if (phone.carrier.length !== phone.number.length) { - logger.warn('✖ the number of carriers must match the number of phone numbers'); + 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) { - 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 currentCarrier = phone.carrier[i]; @@ -35,21 +44,26 @@ export function sendSms(link: Link, store: Store) { logger.debug('↗ sending sms'); const mailOptions: Mail.Options = { - attachments: link.screenshot ? [ - { - filename: link.screenshot, - path: `./${link.screenshot}` - } - ] : undefined, + attachments: link.screenshot + ? [ + { + filename: link.screenshot, + path: `./${link.screenshot}` + } + ] + : undefined, from: email.username, subject: Print.inStock(link, store, false, true), text: link.cartUrl ? link.cartUrl : link.url, to: generateAddress(currentNumber, currentCarrier) }; - transporter.sendMail(mailOptions, error => { + transporter.sendMail(mailOptions, (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 { logger.info('✔ sms sent'); } diff --git a/src/notification/sound.ts b/src/notification/sound.ts index c3e0d05a23..cc4443ff6b 100644 --- a/src/notification/sound.ts +++ b/src/notification/sound.ts @@ -9,7 +9,7 @@ if (config.notifications.playSound) { player = playerLib(); if (player.player === null) { - logger.warn('✖ couldn\'t find sound player'); + logger.warn("✖ couldn't find sound player"); } else { const playerName = player.player; logger.info(`✔ sound player found: ${playerName}`); @@ -20,7 +20,7 @@ export function playSound() { if (config.notifications.playSound && player.player !== null) { logger.debug('↗ playing sound'); - fs.access(config.notifications.playSound, fs.constants.F_OK, error => { + fs.access(config.notifications.playSound, fs.constants.F_OK, (error) => { if (error) { logger.error(`✖ error opening sound file: ${error.message}`); return; @@ -28,7 +28,7 @@ export function playSound() { player.play(config.notifications.playSound, (error: Error) => { if (error) { - logger.error('✖ couldn\'t play sound', error); + logger.error("✖ couldn't play sound", error); } logger.info('✔ played sound'); diff --git a/src/notification/telegram.ts b/src/notification/telegram.ts index 3eb5a38fcf..9c78708337 100644 --- a/src/notification/telegram.ts +++ b/src/notification/telegram.ts @@ -19,10 +19,15 @@ export function sendTelegramMessage(link: Link, store: Store) { for (const chatId of telegram.chatId) { try { - results.push(client.sendMessage(chatId, `${Print.inStock(link, store)}\n${givenUrl}`)); + results.push( + client.sendMessage( + chatId, + `${Print.inStock(link, store)}\n${givenUrl}` + ) + ); logger.info('✔ telegram message sent'); } catch (error) { - logger.error('✖ couldn\'t send telegram message', error); + logger.error("✖ couldn't send telegram message", error); } } diff --git a/src/notification/twilio.ts b/src/notification/twilio.ts index 608bb8bd62..3fc66e479c 100644 --- a/src/notification/twilio.ts +++ b/src/notification/twilio.ts @@ -26,7 +26,7 @@ export function sendTwilioMessage(link: Link, store: Store) { }); logger.info('✔ twilio message sent'); } catch (error) { - logger.error('✖ couldn\'t send twilio message', error); + logger.error("✖ couldn't send twilio message", error); } })(); } diff --git a/src/notification/twitch.ts b/src/notification/twitch.ts index e8a0e6ac6e..04f97be1a3 100644 --- a/src/notification/twitch.ts +++ b/src/notification/twitch.ts @@ -17,7 +17,10 @@ let tokenData = { }; if (existsSync('./twitch.json')) { - tokenData = {...JSON.parse(readFileSync('./twitch.json', 'utf-8')), ...tokenData}; + tokenData = { + ...JSON.parse(readFileSync('./twitch.json', 'utf-8')), + ...tokenData + }; } const chatClient: ChatClient = new ChatClient( @@ -25,13 +28,25 @@ const chatClient: ChatClient = new ChatClient( new StaticAuthProvider(twitch.clientId, tokenData.accessToken), { clientSecret: twitch.clientSecret, - expiry: tokenData.expiryTimestamp === null ? null : new Date(tokenData.expiryTimestamp), + expiry: + tokenData.expiryTimestamp === null + ? null + : new Date(tokenData.expiryTimestamp), onRefresh: async ({accessToken, refreshToken, expiryDate}) => { - return promises.writeFile('./twitch.json', JSON.stringify({ - accessToken, - expiryTimestamp: expiryDate === null ? null : expiryDate.getTime(), - refreshToken - }, null, 4), 'utf-8'); + return promises.writeFile( + './twitch.json', + JSON.stringify( + { + accessToken, + expiryTimestamp: + expiryDate === null ? null : expiryDate.getTime(), + refreshToken + }, + null, + 4 + ), + 'utf-8' + ); }, refreshToken: tokenData.refreshToken } @@ -51,7 +66,7 @@ chatClient.onJoin((channel: string, user: string) => { chatClient.say(channel, message); logger.info('✔ twitch message sent'); } 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) { - if (tokenData.accessToken && twitch.channel && twitch.clientId && twitch.clientSecret && tokenData.refreshToken) { + if ( + tokenData.accessToken && + twitch.channel && + twitch.clientId && + twitch.clientSecret && + tokenData.refreshToken + ) { logger.debug('↗ sending twitch message'); - messages.push(`${Print.inStock(link, store)}\n${link.cartUrl ? link.cartUrl : link.url}`); + messages.push( + `${Print.inStock(link, store)}\n${link.cartUrl ? link.cartUrl : link.url}` + ); if (!alreadySaying) { alreadySaying = true; diff --git a/src/notification/twitter.ts b/src/notification/twitter.ts index 620117ad2c..93809aa7d9 100644 --- a/src/notification/twitter.ts +++ b/src/notification/twitter.ts @@ -13,18 +13,25 @@ const client = new Twitter({ }); export function sendTweet(link: Link, store: Store) { - if (twitter.accessTokenKey && twitter.accessTokenSecret && twitter.consumerKey && twitter.consumerSecret) { + if ( + twitter.accessTokenKey && + twitter.accessTokenSecret && + twitter.consumerKey && + twitter.consumerSecret + ) { logger.debug('↗ sending twitter message'); - let status = `${Print.inStock(link, store)}\n${link.cartUrl ? link.cartUrl : link.url}`; + let status = `${Print.inStock(link, store)}\n${ + link.cartUrl ? link.cartUrl : link.url + }`; if (twitter.tweetTags) { status += `\n\n${twitter.tweetTags}`; } - client.post('statuses/update', {status}, error => { + client.post('statuses/update', {status}, (error) => { if (error) { - logger.error('✖ couldn\'t send twitter notification', error); + logger.error("✖ couldn't send twitter notification", error); } else { logger.info('✔ twitter notification sent'); } diff --git a/src/store/fetch-links.ts b/src/store/fetch-links.ts index cd94a05375..575e9451c1 100644 --- a/src/store/fetch-links.ts +++ b/src/store/fetch-links.ts @@ -12,14 +12,16 @@ function addNewLinks(store: Store, links: Link[], series: Series) { return; } - const existingUrls = new Set(store.links.map(link => link.url)); - const newLinks = links.filter(link => !existingUrls.has(link.url)); + const existingUrls = new Set(store.links.map((link) => link.url)); + const newLinks = links.filter((link) => !existingUrls.has(link.url)); if (newLinks.length === 0) { return; } - logger.debug(Print.message(`FOUND ${newLinks.length} STORE LINKS`, series, store, true)); + logger.debug( + Print.message(`FOUND ${newLinks.length} STORE LINKS`, series, store, true) + ); logger.debug(JSON.stringify(newLinks, null, 2)); store.links = store.links.concat(newLinks); @@ -43,19 +45,23 @@ export async function fetchLinks(store: Store, browser: Browser) { url = [url]; } - url.map(x => promises.push(usingResponse(browser, x, async response => { - const text = await response?.text(); + url.map((x) => + promises.push( + usingResponse(browser, x, async (response) => { + const text = await response?.text(); - if (!text) { - logger.error(Print.message('NO RESPONSE', series, store, true)); - return; - } + if (!text) { + logger.error(Print.message('NO RESPONSE', series, store, true)); + return; + } - const docElement = cheerio.load(text).root(); - const links = store.linksBuilder!.builder(docElement, series); + const docElement = cheerio.load(text).root(); + const links = store.linksBuilder!.builder(docElement, series); - addNewLinks(store, links, series); - }))); + addNewLinks(store, links, series); + }) + ) + ); } await Promise.all(promises); diff --git a/src/store/filter.ts b/src/store/filter.ts index 33f012287b..c40b414c64 100644 --- a/src/store/filter.ts +++ b/src/store/filter.ts @@ -30,10 +30,14 @@ function filterModel(model: Link['model'], series: Link['series']): boolean { for (const configModelEntry of config.store.showOnlyModels) { const sanitizedConfigModel = configModelEntry.name.replace(/\s/g, ''); const sanitizedConfigSeries = configModelEntry.series.replace(/\s/g, ''); - if (sanitizedConfigSeries ? - sanitizedSeries === sanitizedConfigSeries && sanitizedModel === sanitizedConfigModel : - sanitizedModel === sanitizedConfigModel - ) { + if (sanitizedConfigSeries) { + if ( + sanitizedSeries === sanitizedConfigSeries && + sanitizedModel === sanitizedConfigModel + ) { + return true; + } + } else if (sanitizedModel === sanitizedConfigModel) { return true; } } diff --git a/src/store/includes-labels.ts b/src/store/includes-labels.ts index b25293fc77..40402b2ea4 100644 --- a/src/store/includes-labels.ts +++ b/src/store/includes-labels.ts @@ -9,59 +9,82 @@ export type Selector = { }; function isElementArray(query: LabelQuery): query is Element[] { - return Array.isArray(query) && query.length > 0 && typeof query[0] === 'object'; + return ( + Array.isArray(query) && query.length > 0 && typeof query[0] === 'object' + ); } -function getQueryAsElementArray(query: LabelQuery, defaultContainer: string): Array> { +function getQueryAsElementArray( + query: LabelQuery, + defaultContainer: string +): Array> { if (isElementArray(query)) { - return query.map(x => ({ + return query.map((x) => ({ container: x.container ?? defaultContainer, text: x.text })); } if (Array.isArray(query)) { - return [{ - container: defaultContainer, - text: query - }]; + return [ + { + container: defaultContainer, + text: query + } + ]; } - return [{ - container: query.container ?? defaultContainer, - text: query.text - }]; + return [ + { + container: query.container ?? defaultContainer, + text: query.text + } + ]; } -export async function pageIncludesLabels(page: Page, query: LabelQuery, options: Selector) { +export async function pageIncludesLabels( + page: Page, + query: LabelQuery, + options: Selector +) { const elementQueries = getQueryAsElementArray(query, options.selector); - const resolved = await Promise.all(elementQueries.map(async query => { - const selector = {...options, selector: query.container}; - const contents = await extractPageContents(page, selector) ?? ''; + const resolved = await Promise.all( + elementQueries.map(async (query) => { + const selector = {...options, selector: query.container}; + const contents = (await extractPageContents(page, selector)) ?? ''; - if (!contents) { - return false; - } + if (!contents) { + return false; + } - logger.debug(contents); + logger.debug(contents); - return includesLabels(contents, query.text); - })); + return includesLabels(contents, query.text); + }) + ); return resolved.includes(true); } -export async function extractPageContents(page: Page, selector: Selector): Promise { +export async function extractPageContents( + page: Page, + selector: Selector +): Promise { return page.evaluate((options: Selector) => { // eslint-disable-next-line no-undef - const element: globalThis.HTMLElement | null = document.querySelector(options.selector); + const element: globalThis.HTMLElement | null = document.querySelector( + options.selector + ); if (!element) { return null; } - if (options.requireVisible && !(element.offsetWidth > 0 && element.offsetHeight > 0)) { + if ( + options.requireVisible && + !(element.offsetWidth > 0 && element.offsetHeight > 0) + ) { return null; } @@ -84,12 +107,22 @@ export async function extractPageContents(page: Page, selector: Selector): Promi * @param domText Complete DOM of website. * @param searchLabels Search labels for a match. */ -export function includesLabels(domText: string, searchLabels: string[]): boolean { +export function includesLabels( + domText: string, + searchLabels: string[] +): boolean { const domTextLowerCase = domText.toLowerCase(); - return searchLabels.some(label => domTextLowerCase.includes(label.toLowerCase())); + return searchLabels.some((label) => + domTextLowerCase.includes(label.toLowerCase()) + ); } -export async function cardPrice(page: Page, query: Pricing, max: number, options: Selector): Promise { +export async function cardPrice( + page: Page, + query: Pricing, + max: number, + options: Selector +): Promise { if (!max || max === -1) { return null; } @@ -99,7 +132,9 @@ export async function cardPrice(page: Page, query: Pricing, max: number, options if (cardPrice) { 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}`); return cardpriceNumber > max ? cardpriceNumber : null; diff --git a/src/store/lookup.ts b/src/store/lookup.ts index bf69e80a59..2aab596f32 100644 --- a/src/store/lookup.ts +++ b/src/store/lookup.ts @@ -2,7 +2,13 @@ import {Browser, Page, Response} from 'puppeteer'; import {Link, Store, getStores} from './model'; import {Print, logger} from '../logger'; import {Selector, cardPrice, pageIncludesLabels} from './includes-labels'; -import {closePage, delay, getRandomUserAgent, getSleepTime, isStatusCodeInRange} from '../util'; +import { + closePage, + delay, + getRandomUserAgent, + getSleepTime, + isStatusCodeInRange +} from '../util'; import {config} from '../config'; import {disableBlockerInPage} from '../adblocker'; import {fetchLinks} from './fetch-links'; @@ -39,8 +45,12 @@ async function lookup(browser: Browser, store: Store) { continue; } - const context = (config.browser.isIncognito ? await browser.createIncognitoBrowserContext() : browser.defaultBrowserContext()); - const page = (config.browser.isIncognito ? await context.newPage() : await browser.newPage()); + const context = config.browser.isIncognito + ? await browser.createIncognitoBrowserContext() + : browser.defaultBrowserContext(); + const page = config.browser.isIncognito + ? await context.newPage() + : await browser.newPage(); page.setDefaultNavigationTimeout(config.page.timeout); await page.setUserAgent(getRandomUserAgent()); @@ -57,7 +67,11 @@ async function lookup(browser: Browser, store: Store) { try { statusCode = await lookupCard(browser, store, page, link); } 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(); await client.send('Network.clearBrowserCookies'); await client.send('Network.clearBrowserCache'); @@ -75,9 +89,16 @@ async function lookup(browser: Browser, store: Store) { /* eslint-enable no-await-in-loop */ } -async function lookupCard(browser: Browser, store: Store, page: Page, link: Link): Promise { +async function lookupCard( + browser: Browser, + store: Store, + page: Page, + link: Link +): Promise { const givenWaitFor = store.waitUntil ? store.waitUntil : 'networkidle0'; - const response: Response | null = await page.goto(link.url, {waitUntil: givenWaitFor}); + const response: Response | null = await page.goto(link.url, { + waitUntil: givenWaitFor + }); if (!response) { logger.debug(Print.noResponse(link, store, true)); @@ -136,9 +157,13 @@ async function lookupCardInStock(store: Store, page: Page, link: Link) { }; 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)); return false; } @@ -152,17 +177,24 @@ async function lookupCardInStock(store: Store, page: Page, link: Link) { } 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)); return false; } } 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]; if (price) { - logger.info(Print.maxPrice(link, store, price, maxPrice, true)); + logger.info(Print.maxPrice(link, store, price, maxPrice, true)); 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 - if (store.realTimeInventoryLookup !== undefined && link.itemNumber !== undefined) { + if ( + store.realTimeInventoryLookup !== undefined && + link.itemNumber !== undefined + ) { return store.realTimeInventoryLookup(link.itemNumber); } @@ -192,7 +227,7 @@ export async function tryLookupAndLoop(browser: Browser, store: Store) { if (store.linksBuilder) { const lastRunTime = linkBuilderLastRunTimes[store.name] ?? -1; const ttl = store.linksBuilder.ttl ?? Number.MAX_SAFE_INTEGER; - if (lastRunTime === -1 || (Date.now() - lastRunTime) > ttl) { + if (lastRunTime === -1 || Date.now() - lastRunTime > ttl) { try { await fetchLinks(store, browser); linkBuilderLastRunTimes[store.name] = Date.now(); diff --git a/src/store/model/alternate-nl.ts b/src/store/model/alternate-nl.ts index d08a6cd228..62e1d7ab95 100644 --- a/src/store/model/alternate-nl.ts +++ b/src/store/model/alternate-nl.ts @@ -169,4 +169,3 @@ export const AlternateNL: Store = { ], name: 'alternate-nl' }; - diff --git a/src/store/model/alternate.ts b/src/store/model/alternate.ts index 261a5d0175..0a1f840a45 100644 --- a/src/store/model/alternate.ts +++ b/src/store/model/alternate.ts @@ -4,7 +4,12 @@ export const Alternate: Store = { labels: { inStock: { container: '.stockStatus', - text: ['auf lager', 'ware neu eingetroffen', 'in kürze versandfertig', 'ware im zulauf'] + text: [ + 'auf lager', + 'ware neu eingetroffen', + 'in kürze versandfertig', + 'ware im zulauf' + ] }, maxPrice: { container: 'div.price > span', diff --git a/src/store/model/amazon-de.ts b/src/store/model/amazon-de.ts index 05a303f0ab..daef4c2e5b 100644 --- a/src/store/model/amazon-de.ts +++ b/src/store/model/amazon-de.ts @@ -5,7 +5,10 @@ export const AmazonDe: Store = { labels: { captcha: { container: 'body', - text: ['geben sie die unten angezeigten zeichen ein', 'geben sie die zeichen unten ein'] + text: [ + 'geben sie die unten angezeigten zeichen ein', + 'geben sie die zeichen unten ein' + ] }, inStock: { container: '#desktop_buybox', diff --git a/src/store/model/amazon-nl.ts b/src/store/model/amazon-nl.ts index 4b5b8bf1ee..48221ebb86 100644 --- a/src/store/model/amazon-nl.ts +++ b/src/store/model/amazon-nl.ts @@ -8,7 +8,12 @@ export const AmazonNl: Store = { }, inStock: { container: '#availability', - text: ['op voorraad', 'verkrijgbaar vanaf', 'wordt gewoonlijk verzonden binnen', 'nog slechts'] + text: [ + 'op voorraad', + 'verkrijgbaar vanaf', + 'wordt gewoonlijk verzonden binnen', + 'nog slechts' + ] }, maxPrice: { container: 'span[class*="PriceString"]', diff --git a/src/store/model/amazon-uk.ts b/src/store/model/amazon-uk.ts index ff07c4274a..17f00095e1 100644 --- a/src/store/model/amazon-uk.ts +++ b/src/store/model/amazon-uk.ts @@ -30,21 +30,24 @@ export const AmazonUk: Store = { links: [ { brand: 'test:brand', - cartUrl: 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B081265T5Z&Quantity.1=1', + cartUrl: + 'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B081265T5Z&Quantity.1=1', model: 'test:model', series: 'test:series', url: 'https://www.amazon.co.uk/dp/B081265T5Z/' }, { brand: 'sony', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC5L3RG&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC5L3RG&Quantity.1=1', model: 'ps5 console', series: 'sonyps5c', url: 'https://www.amazon.com/dp/B08FC5L3RG' }, { brand: 'sony', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08H97NYGP&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08H97NYGP&Quantity.1=1', model: 'ps5 digital', series: 'sonyps5de', url: 'https://www.amazon.co.uk/dp/B08H97NYGP/' @@ -52,7 +55,9 @@ export const AmazonUk: Store = { ], linksBuilder: { builder: (docElement, series) => { - const productElements = docElement.find('.s-result-list .s-result-item[data-asin]'); + const productElements = docElement.find( + '.s-result-list .s-result-item[data-asin]' + ); const links: Link[] = []; for (let i = 0; i < productElements.length; i++) { const productElement = productElements.eq(i); @@ -63,7 +68,9 @@ export const AmazonUk: Store = { } const url = `https://www.amazon.co.uk/dp/${asin}/`; - const titleElement = productElement.find('.sg-col-inner h2 a.a-text-normal[href] span').first(); + const titleElement = productElement + .find('.sg-col-inner h2 a.a-text-normal[href] span') + .first(); const title = titleElement.text().trim(); if (!title || !new RegExp(`RTX.*${series}`, 'i').exec(title)) { diff --git a/src/store/model/amazon.ts b/src/store/model/amazon.ts index cb1da371aa..b57f117dd9 100644 --- a/src/store/model/amazon.ts +++ b/src/store/model/amazon.ts @@ -17,259 +17,296 @@ export const Amazon: Store = { links: [ { brand: 'test:brand', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B07TDN1SC5&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B07TDN1SC5&Quantity.1=1', model: 'test:model', series: 'test:series', url: 'https://www.amazon.com/dp/B07TDN1SC5' }, { brand: 'asus', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8HPKR6&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8HPKR6&Quantity.1=1', model: 'dual', series: '3070', url: 'https://www.amazon.com/dp/B08L8HPKR6' }, { brand: 'evga', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08LW46GH2&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08LW46GH2&Quantity.1=1', model: 'xc3 black', series: '3070', url: 'https://www.amazon.com/dp/B08LW46GH2' }, { brand: 'gigabyte', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1', model: 'gaming oc', series: '3070', url: 'https://www.amazon.com/dp/B08KY266MG' }, { brand: 'pny', - 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', series: '3070', url: 'https://www.amazon.com/dp/B08HBJB7YD' }, { brand: 'pny', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBF5L3K&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBF5L3K&Quantity.1=1', model: 'xlr8 uprising', series: '3070', url: 'https://www.amazon.com/dp/B08HBF5L3K' }, { brand: 'msi', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KWLMZV4&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KWLMZV4&Quantity.1=1', model: 'ventus 3x oc', series: '3070', url: 'https://www.amazon.com/dp/B08KWLMZV4' }, { brand: 'zotac', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08LF1CWT2&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08LF1CWT2&Quantity.1=1', model: 'twin edge oc', series: '3070', url: 'https://www.amazon.com/dp/B08LF1CWT2' }, { brand: 'pny', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1', model: 'xlr8', series: '3080', url: 'https://www.amazon.com/dp/B08HBR7QBM' }, { brand: 'pny', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1', model: 'xlr8 rgb', series: '3080', url: 'https://www.amazon.com/dp/B08HBTJMLJ' }, { brand: 'msi', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR7SV3M&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR7SV3M&Quantity.1=1', model: 'gaming x trio', series: '3080', url: 'https://www.amazon.com/dp/B08HR7SV3M' }, { brand: 'evga', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1', model: 'ftw3 ultra', series: '3080', url: 'https://www.amazon.com/dp/B08HR3Y5GQ' }, { brand: 'evga', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1', model: 'xc3 ultra', series: '3080', url: 'https://www.amazon.com/dp/B08HR55YB5' }, { brand: 'evga', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR3DPGW&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR3DPGW&Quantity.1=1', model: 'ftw3', series: '3080', url: 'https://www.amazon.com/dp/B08HR3DPGW' }, { brand: 'evga', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1', model: 'xc3', series: '3080', url: 'https://www.amazon.com/dp/B08HR4RJ3Q' }, { brand: 'evga', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1', model: 'xc3 black', series: '3080', url: 'https://www.amazon.com/dp/B08HR6FMF3' }, { brand: 'gigabyte', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1', model: 'gaming oc', series: '3080', url: 'https://www.amazon.com/dp/B08HJTH61J' }, { brand: 'gigabyte', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1', model: 'eagle oc', series: '3080', url: 'https://www.amazon.com/dp/B08HJS2JLJ' }, { brand: 'asus', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1', model: 'tuf oc', series: '3080', url: 'https://www.amazon.com/dp/B08HH5WF97' }, { brand: 'asus', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1', model: 'tuf', series: '3080', url: 'https://www.amazon.com/dp/B08HHDP9DW' }, { brand: 'asus', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6F174Z&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6F174Z&Quantity.1=1', model: 'rog strix oc', series: '3080', url: 'https://www.amazon.com/dp/B08J6F174Z' }, { brand: 'asus', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1', model: 'rog strix oc', series: '3090', url: 'https://www.amazon.com/dp/B08J6GMWCQ' }, { brand: 'msi', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1', model: 'ventus 3x oc', series: '3080', url: 'https://www.amazon.com/dp/B08HR5SXPS' }, { brand: 'zotac', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1', model: 'trinity', series: '3080', url: 'https://www.amazon.com/dp/B08HJNKT3P' }, { brand: 'zotac', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1', model: 'trinity', series: '3090', url: 'https://www.amazon.com/dp/B08HJQ182D' }, { brand: 'pny', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1', model: 'xlr8', series: '3090', url: 'https://www.amazon.com/dp/B08HBQWBHH' }, { brand: 'pny', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1', model: 'xlr8', series: '3090', url: 'https://www.amazon.com/dp/B08HBVX53D' }, { brand: 'msi', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HRBW6VB&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HRBW6VB&Quantity.1=1', model: 'gaming x trio', series: '3090', url: 'https://www.amazon.com/dp/B08HRBW6VB' }, { brand: 'msi', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1', model: 'ventus 3x', series: '3090', url: 'https://www.amazon.com/dp/B08HR9D2JS' }, { brand: 'gigabyte', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1', model: 'gaming oc', series: '3090', url: 'https://www.amazon.com/dp/B08HJRF2CN' }, { brand: 'gigabyte', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1', model: 'eagle oc', series: '3090', url: 'https://www.amazon.com/dp/B08HJPDJTY' }, { brand: 'asus', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1', model: 'tuf oc', series: '3090', url: 'https://www.amazon.com/dp/B08HJGNJ81' }, { brand: 'asus', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1', model: 'tuf oc', series: '3090', url: 'https://www.amazon.com/dp/B08HJLLF7G' }, { brand: 'amd', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1', model: '5900x', series: 'ryzen5900', url: 'https://www.amazon.com/dp/product/B08164VTWH' }, { brand: 'amd', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1', model: '5950x', series: 'ryzen5950', url: 'https://www.amazon.com/dp/product/B0815Y8J9N' }, { brand: 'sony', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC5L3RG&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC5L3RG&Quantity.1=1', model: 'ps5 console', series: 'sonyps5c', url: 'https://www.amazon.com/dp/B08FC5L3RG' }, { brand: 'sony', - cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC6MR62&Quantity.1=1', + cartUrl: + 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08FC6MR62&Quantity.1=1', model: 'ps5 digital', series: 'sonyps5de', url: 'https://www.amazon.com/dp/B08FC6MR62' diff --git a/src/store/model/amd-de.ts b/src/store/model/amd-de.ts index 03e4159af8..62c56f8f34 100644 --- a/src/store/model/amd-de.ts +++ b/src/store/model/amd-de.ts @@ -20,28 +20,32 @@ export const AMDDe: Store = { }, { 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', series: 'ryzen5950', url: 'https://www.amd.com/de/direct-buy/5450881400/de' }, { brand: 'amd', - cartUrl: 'https://www.amd.com/de/direct-buy/5450881500/de?add-to-cart=true', + cartUrl: + 'https://www.amd.com/de/direct-buy/5450881500/de?add-to-cart=true', model: '5900x', series: 'ryzen5900', url: 'https://www.amd.com/de/direct-buy/5450881500/de' }, { brand: 'amd', - cartUrl: 'https://www.amd.com/de/direct-buy/5450881600/de?add-to-cart=true', + cartUrl: + 'https://www.amd.com/de/direct-buy/5450881600/de?add-to-cart=true', model: '5800x', series: 'ryzen5800', url: 'https://www.amd.com/de/direct-buy/5450881600/de' }, { brand: 'amd', - cartUrl: 'https://www.amd.com/de/direct-buy/5450881700/de?add-to-cart=true', + cartUrl: + 'https://www.amd.com/de/direct-buy/5450881700/de?add-to-cart=true', model: '5600x', series: 'ryzen5600', url: 'https://www.amd.com/de/direct-buy/5450881700/de' diff --git a/src/store/model/amd.ts b/src/store/model/amd.ts index 310c985d88..ec076496bc 100644 --- a/src/store/model/amd.ts +++ b/src/store/model/amd.ts @@ -20,28 +20,32 @@ export const AMD: Store = { }, { 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', series: 'ryzen5950', url: 'https://www.amd.com/en/direct-buy/5450881400/us' }, { brand: 'amd', - cartUrl: 'https://www.amd.com/en/direct-buy/5450881500/us?add-to-cart=true', + cartUrl: + 'https://www.amd.com/en/direct-buy/5450881500/us?add-to-cart=true', model: '5900x', series: 'ryzen5900', url: 'https://www.amd.com/en/direct-buy/5450881500/us' }, { brand: 'amd', - cartUrl: 'https://www.amd.com/en/direct-buy/5450881600/us?add-to-cart=true', + cartUrl: + 'https://www.amd.com/en/direct-buy/5450881600/us?add-to-cart=true', model: '5800x', series: 'ryzen5800', url: 'https://www.amd.com/en/direct-buy/5450881600/us' }, { brand: 'amd', - cartUrl: 'https://www.amd.com/en/direct-buy/5450881700/us?add-to-cart=true', + cartUrl: + 'https://www.amd.com/en/direct-buy/5450881700/us?add-to-cart=true', model: '5600x', series: 'ryzen5600', url: 'https://www.amd.com/en/direct-buy/5450881700/us' diff --git a/src/store/model/aria.ts b/src/store/model/aria.ts index 16e306e0df..9f1d3e3586 100644 --- a/src/store/model/aria.ts +++ b/src/store/model/aria.ts @@ -9,7 +9,7 @@ export const Aria: Store = { }, maxPrice: { container: '.priceBig', - euroFormat: false // Note: Aria uses non-euroFromat as price seperator + euroFormat: false // Note: Aria uses non-euroFromat as price seperator }, outOfStock: { container: '.fBox', @@ -21,7 +21,8 @@ export const Aria: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+2060+Super/Gigabyte+NVIDIA+GeForce+RTX+2060+SUPER+8GB+WINDFORCE+OC+Turing+Graphics+Card+%2B+RTX+Bundle%21?productId=71541' + url: + 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+2060+Super/Gigabyte+NVIDIA+GeForce+RTX+2060+SUPER+8GB+WINDFORCE+OC+Turing+Graphics+Card+%2B+RTX+Bundle%21?productId=71541' } ], linksBuilder: { @@ -33,11 +34,13 @@ export const Aria: Store = { urls: [ { series: '3080', - url: 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3080' + url: + 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3080' }, { series: '3090', - url: 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3090' + url: + 'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3090' } ] }, diff --git a/src/store/model/arlt.ts b/src/store/model/arlt.ts index 8b3cf9e26c..26917cbdcd 100644 --- a/src/store/model/arlt.ts +++ b/src/store/model/arlt.ts @@ -20,103 +20,120 @@ export const Arlt: Store = { brand: 'test:brand', model: 'test:model', 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', model: 'dual', 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', model: 'dual oc', 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', model: 'tuf oc', 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', model: 'rog strix', 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', model: 'ventus 2x oc', series: '3070', - url: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3070/MSI-GeForce-RTX-3070-Ventus-2X-OC.html' + url: + 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3070/MSI-GeForce-RTX-3070-Ventus-2X-OC.html' }, { brand: 'gainward', model: 'phoenix', series: '3070', - url: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/Gainward-GeForce-RTX-3070-Phoenix.html' + url: + 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/Gainward-GeForce-RTX-3070-Phoenix.html' }, { brand: 'gainward', model: 'phoenix gs', series: '3070', - url: 'https://www.arlt.com/Gaming/Gaming-Hardware/Gainward-GeForce-RTX-3070-Phoenix-GS.html' + url: + 'https://www.arlt.com/Gaming/Gaming-Hardware/Gainward-GeForce-RTX-3070-Phoenix-GS.html' }, { brand: 'asus', model: 'tuf oc', series: '3080', - url: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/ASUS-TUF-Gaming-GeForce-RTX-3080-OC.html' + url: + 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/ASUS-TUF-Gaming-GeForce-RTX-3080-OC.html' }, { brand: 'msi', model: 'ventus 3x oc', series: '3080', - url: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3080/MSI-GeForce-RTX-3080-Ventus-3X-OC.html' + url: + 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3080/MSI-GeForce-RTX-3080-Ventus-3X-OC.html' }, { brand: 'asus', model: 'tuf oc', series: '3090', - url: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3090/ASUS-TUF-Gaming-GeForce-RTX-3090-OC.html' + url: + 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3090/ASUS-TUF-Gaming-GeForce-RTX-3090-OC.html' }, { brand: 'asus', model: 'rog strix oc', series: '3090', - url: 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3090/ASUS-ROG-Strix-GeForce-RTX-3090-OC.html' + url: + 'https://www.arlt.com/Hardware/PC-Komponenten/Grafikkarten/NVIDIA/GeForce-RTX/RTX-3090/ASUS-ROG-Strix-GeForce-RTX-3090-OC.html' }, { brand: 'gainward', model: 'phoenix gs', series: '3090', - url: 'https://www.arlt.com/Gaming/Gaming-Hardware/Gainward-GeForce-RTX-3090-Phoenix-GS.html' + url: + 'https://www.arlt.com/Gaming/Gaming-Hardware/Gainward-GeForce-RTX-3090-Phoenix-GS.html' }, { brand: 'amd', model: '5600x', series: 'ryzen5600', - url: 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-5-5600X-boxed.html' + url: + 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-5-5600X-boxed.html' }, { brand: 'amd', model: '5800x', series: 'ryzen5800', - url: 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-7-5800X-boxed.html' + url: + 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-7-5800X-boxed.html' }, { brand: 'amd', model: '5900x', series: 'ryzen5900', - url: 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5900X-boxed.html' + url: + 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5900X-boxed.html' }, { brand: 'amd', model: '5950x', series: 'ryzen5950', - url: 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5950X-boxed.html' + url: + 'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5950X-boxed.html' } ], name: 'arlt' diff --git a/src/store/model/asus-de.ts b/src/store/model/asus-de.ts index acf1662f79..96f1c9460f 100644 --- a/src/store/model/asus-de.ts +++ b/src/store/model/asus-de.ts @@ -12,55 +12,64 @@ export const AsusDe: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2766/asus-rog-strix-rtx2060s-o8g-evo-v2-gaming' + url: + 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2766/asus-rog-strix-rtx2060s-o8g-evo-v2-gaming' }, { brand: 'asus', model: 'rog strix', series: '3080', - url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2828/asus-rog-strix-rtx3080-10g-gaming' + url: + 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2828/asus-rog-strix-rtx3080-10g-gaming' }, { brand: 'asus', model: 'rog strix oc', series: '3080', - url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2829/asus-rog-strix-rtx3080-o10g-gaming' + url: + 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2829/asus-rog-strix-rtx3080-o10g-gaming' }, { brand: 'asus', model: 'tuf', series: '3080', - url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2824/asus-tuf-rtx3080-10g-gaming' + url: + 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2824/asus-tuf-rtx3080-10g-gaming' }, { brand: 'asus', model: 'tuf oc', series: '3080', - url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2825/asus-tuf-rtx3080-o10g-gaming' + url: + 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2825/asus-tuf-rtx3080-o10g-gaming' }, { brand: 'asus', model: 'rog strix', series: '3090', - url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2826/asus-rog-strix-rtx3090-24g-gaming' + url: + 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2826/asus-rog-strix-rtx3090-24g-gaming' }, { brand: 'asus', model: 'rog strix oc', series: '3090', - url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2827/asus-rog-strix-rtx3090-o24g-gaming' + url: + 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2827/asus-rog-strix-rtx3090-o24g-gaming' }, { brand: 'asus', model: 'tuf', series: '3090', - url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2822/asus-tuf-rtx3090-24g-gaming' + url: + 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2822/asus-tuf-rtx3090-24g-gaming' }, { brand: 'asus', model: 'tuf oc', series: '3090', - url: 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2823/asus-tuf-rtx3090-o24g-gaming' + url: + 'https://webshop.asus.com/de/komponenten/grafikkarten/nvidia-serie/2823/asus-tuf-rtx3090-o24g-gaming' } ], name: 'asus-de' diff --git a/src/store/model/azerty.ts b/src/store/model/azerty.ts index d6db43edf7..5bb40bbd5e 100644 --- a/src/store/model/azerty.ts +++ b/src/store/model/azerty.ts @@ -20,145 +20,169 @@ export const Azerty: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://azerty.nl/product/gigabyte/3756757/geforce-rtx-2060-oc-6g-grafische-kaart-geforce-rtx-2060' + url: + 'https://azerty.nl/product/gigabyte/3756757/geforce-rtx-2060-oc-6g-grafische-kaart-geforce-rtx-2060' }, { brand: 'gigabyte', model: 'aorus xtreme', series: '3080', - url: 'https://azerty.nl/product/gigabyte/4349658/aorus-geforce-rtx-3080-xtreme-10g-grafische-kaart-gf-rtx-3080' + url: + 'https://azerty.nl/product/gigabyte/4349658/aorus-geforce-rtx-3080-xtreme-10g-grafische-kaart-gf-rtx-3080' }, { brand: 'msi', model: 'ventus 3x oc', series: '3080', - url: 'https://azerty.nl/product/msi/4346262/geforce-rtx-3080-ventus-3x-10g-oc-grafische-kaart-rtx-3080' + url: + 'https://azerty.nl/product/msi/4346262/geforce-rtx-3080-ventus-3x-10g-oc-grafische-kaart-rtx-3080' }, { brand: 'asus', model: 'tuf', series: '3080', - url: 'https://azerty.nl/product/asus/4346679/tuf-gaming-geforce-rtx-3080-grafische-kaart-gf-rtx-3080' + url: + 'https://azerty.nl/product/asus/4346679/tuf-gaming-geforce-rtx-3080-grafische-kaart-gf-rtx-3080' }, { brand: 'msi', model: 'gaming x trio', series: '3080', - url: 'https://azerty.nl/product/msi/4346263/geforce-rtx-3080-gaming-x-trio-10g-grafische-kaart-rtx-3080' + url: + 'https://azerty.nl/product/msi/4346263/geforce-rtx-3080-gaming-x-trio-10g-grafische-kaart-rtx-3080' }, { brand: 'asus', model: 'tuf oc', series: '3080', - url: 'https://azerty.nl/product/asus/4348176/tuf-gaming-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080' + url: + 'https://azerty.nl/product/asus/4348176/tuf-gaming-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080' }, { brand: 'asus', model: 'rog strix oc', series: '3080', - url: 'https://azerty.nl/product/asus/4348174/rog-strix-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080' + url: + 'https://azerty.nl/product/asus/4348174/rog-strix-geforce-rtx-3080-oc-grafische-kaart-gf-rtx-3080' }, { brand: 'zotac', model: 'trinity', series: '3080', - url: 'https://azerty.nl/product/zotac/4352301/gaming-geforce-rtx-3080-trinity-oc-grafische-kaart-gf-rtx-3080' + url: + 'https://azerty.nl/product/zotac/4352301/gaming-geforce-rtx-3080-trinity-oc-grafische-kaart-gf-rtx-3080' }, { brand: 'gigabyte', model: 'aorus master', series: '3080', - url: 'https://azerty.nl/product/gigabyte/4349651/aorus-geforce-rtx-3080-master-10g-grafische-kaart-gf-rtx-3080' + url: + 'https://azerty.nl/product/gigabyte/4349651/aorus-geforce-rtx-3080-master-10g-grafische-kaart-gf-rtx-3080' }, { brand: 'pny', model: 'xlr8 rgb', series: '3080', - url: 'https://azerty.nl/product/pny/4342269/geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-triple-fan-gaming-edition-grafische-kaart-gf-rtx-3080' + url: + 'https://azerty.nl/product/pny/4342269/geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-triple-fan-gaming-edition-grafische-kaart-gf-rtx-3080' }, { brand: 'asus', model: 'rog strix oc', series: '3070', - url: 'https://azerty.nl/product/asus/4363892/rog-strix-gaming-geforce-rtx-3070-o8g-videokaart-8-gb-gddr6' + url: + 'https://azerty.nl/product/asus/4363892/rog-strix-gaming-geforce-rtx-3070-o8g-videokaart-8-gb-gddr6' }, { brand: 'asus', model: 'rog strix', series: '3070', - url: 'https://azerty.nl/product/asus/4373096/rog-strix-gaming-geforce-rtx-3070-8g-videokaart-8-gb-gddr6' + url: + 'https://azerty.nl/product/asus/4373096/rog-strix-gaming-geforce-rtx-3070-8g-videokaart-8-gb-gddr6' }, { brand: 'asus', model: 'tuf oc', series: '3070', - url: 'https://azerty.nl/product/asus/4363910/tuf-gaming-geforce-rtx-3070-oc-videokaart-8-gb-gddr6' + url: + 'https://azerty.nl/product/asus/4363910/tuf-gaming-geforce-rtx-3070-oc-videokaart-8-gb-gddr6' }, { brand: 'asus', model: 'tuf', series: '3070', - url: 'https://azerty.nl/product/asus/4373099/tuf-gaming-geforce-rtx-3070-videokaart-8-gb-gddr6' + url: + 'https://azerty.nl/product/asus/4373099/tuf-gaming-geforce-rtx-3070-videokaart-8-gb-gddr6' }, { brand: 'inno3d', model: 'ichill x4', series: '3070', - url: 'https://azerty.nl/product/inno3d/4369725/geforce-rtx-3070-ichill-x4-videokaart-8-gb-ddr6' + url: + 'https://azerty.nl/product/inno3d/4369725/geforce-rtx-3070-ichill-x4-videokaart-8-gb-ddr6' }, { brand: 'inno3d', model: 'ichill x3', series: '3070', - url: 'https://azerty.nl/product/inno3d/4369726/geforce-rtx-3070-ichill-x3-videokaart-8-gb-ddr6' + url: + 'https://azerty.nl/product/inno3d/4369726/geforce-rtx-3070-ichill-x3-videokaart-8-gb-ddr6' }, { brand: 'msi', model: 'ventus 3x oc', series: '3070', - url: 'https://azerty.nl/product/msi/4374747/geforce-rtx-3070-ventus-3x-oc-videokaart-8-gb-gddr6' + url: + 'https://azerty.nl/product/msi/4374747/geforce-rtx-3070-ventus-3x-oc-videokaart-8-gb-gddr6' }, { brand: 'msi', model: 'gaming x trio', series: '3070', - url: 'https://azerty.nl/product/msi/4365398/geforce-rtx-3070-gaming-x-trio-videokaart-8-gb-gddr6' + url: + 'https://azerty.nl/product/msi/4365398/geforce-rtx-3070-gaming-x-trio-videokaart-8-gb-gddr6' }, { brand: 'pny', model: 'dual fan', series: '3070', - url: 'https://azerty.nl/product/pny/4342270/uprising-dual-fan-geforce-rtx-3070' + url: + 'https://azerty.nl/product/pny/4342270/uprising-dual-fan-geforce-rtx-3070' }, { brand: 'pny', model: 'xlr8 rgb', series: '3070', - url: 'https://azerty.nl/product/pny/4342271/epic-x-rgb-geforce-rtx-3070-triple-fan-gaming-edition-xlr8--videokaart-8-gb-gddr6x' + url: + 'https://azerty.nl/product/pny/4342271/epic-x-rgb-geforce-rtx-3070-triple-fan-gaming-edition-xlr8--videokaart-8-gb-gddr6x' }, { brand: 'evga', model: 'ftw3', series: '3070', - url: 'https://azerty.nl/product/evga/4377247/geforce-rtx-3070-ftw3-videokaart-8-gb-gddr6' + url: + 'https://azerty.nl/product/evga/4377247/geforce-rtx-3070-ftw3-videokaart-8-gb-gddr6' }, { brand: 'evga', model: 'xc3', series: '3070', - url: 'https://azerty.nl/product/evga/4377248/xc3-geforce-rtx-3070-xc3-videokaart-8-gb-gddr6' + url: + 'https://azerty.nl/product/evga/4377248/xc3-geforce-rtx-3070-xc3-videokaart-8-gb-gddr6' }, { brand: 'evga', model: 'ftw3 ultra', series: '3070', - url: 'https://azerty.nl/product/evga/4377250/ftw3-ultra-geforce-rtx-3070-videokaart-8-gb-gddr6' + url: + 'https://azerty.nl/product/evga/4377250/ftw3-ultra-geforce-rtx-3070-videokaart-8-gb-gddr6' }, { brand: 'evga', model: 'xc3 black', series: '3070', - url: 'https://azerty.nl/product/evga/4377252/xc3-black-geforce-rtx-3070-videokaart-8-gb-gddr6' + url: + 'https://azerty.nl/product/evga/4377252/xc3-black-geforce-rtx-3070-videokaart-8-gb-gddr6' } ], name: 'azerty' diff --git a/src/store/model/bandh.ts b/src/store/model/bandh.ts index 90d468cb40..01ead28e0a 100644 --- a/src/store/model/bandh.ts +++ b/src/store/model/bandh.ts @@ -17,7 +17,8 @@ export const BAndH: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://www.bhphotovideo.com/c/product/1452927-REG/evga_06g_p4_2063_kr_geforce_rtx_2060_xc.html' + url: + 'https://www.bhphotovideo.com/c/product/1452927-REG/evga_06g_p4_2063_kr_geforce_rtx_2060_xc.html' }, // TUF was removed from BH, not sure why so commenting out listing for now // { @@ -30,13 +31,15 @@ export const BAndH: Store = { brand: 'gigabyte', model: 'gaming oc', series: '3080', - url: 'https://www.bhphotovideo.com/c/product/1593333-REG/gigabyte_gv_n3080gaming_oc_10gd_geforce_rtx_3080_gaming.html' + url: + 'https://www.bhphotovideo.com/c/product/1593333-REG/gigabyte_gv_n3080gaming_oc_10gd_geforce_rtx_3080_gaming.html' }, { brand: 'zotac', model: 'trinity', series: '3080', - url: 'https://www.bhphotovideo.com/c/product/1592969-REG/zotac_zt_a30800d_10p_gaming_geforce_rtx_3080.html' + url: + 'https://www.bhphotovideo.com/c/product/1592969-REG/zotac_zt_a30800d_10p_gaming_geforce_rtx_3080.html' }, // TUF was removed from BH, not sure why so commenting out listing for now // { @@ -49,103 +52,120 @@ export const BAndH: Store = { brand: 'msi', model: 'gaming x trio', series: '3080', - url: 'https://www.bhphotovideo.com/c/product/1593996-REG/msi_g3080gxt10_geforce_rtx_3080_gaming.html' + url: + 'https://www.bhphotovideo.com/c/product/1593996-REG/msi_g3080gxt10_geforce_rtx_3080_gaming.html' }, { brand: 'msi', model: 'ventus 3x oc', series: '3080', - url: 'https://www.bhphotovideo.com/c/product/1593997-REG/msi_g3080v3x10c_geforce_rtx_3080_ventus.html' + url: + 'https://www.bhphotovideo.com/c/product/1593997-REG/msi_g3080v3x10c_geforce_rtx_3080_ventus.html' }, { brand: 'msi', model: 'gaming x trio', series: '3080', - url: 'https://www.bhphotovideo.com/c/product/1593645-REG/msi_geforce_rtx_3080_gaming.html' + url: + 'https://www.bhphotovideo.com/c/product/1593645-REG/msi_geforce_rtx_3080_gaming.html' }, { brand: 'msi', model: 'ventus 3x oc', series: '3080', - url: 'https://www.bhphotovideo.com/c/product/1593646-REG/msi_geforce_rtx_3080_ventus.html' + url: + 'https://www.bhphotovideo.com/c/product/1593646-REG/msi_geforce_rtx_3080_ventus.html' }, { brand: 'zotac', model: 'trinity', series: '3090', - url: 'https://www.bhphotovideo.com/c/product/1592970-REG/zotac_zt_a30900d_10p_gaming_geforce_rtx_3090.html' + url: + 'https://www.bhphotovideo.com/c/product/1592970-REG/zotac_zt_a30900d_10p_gaming_geforce_rtx_3090.html' }, { brand: 'msi', model: 'gaming x trio', series: '3090', - url: 'https://www.bhphotovideo.com/c/product/1593647-REG/msi_geforce_rtx_3090_gaming.html' + url: + 'https://www.bhphotovideo.com/c/product/1593647-REG/msi_geforce_rtx_3090_gaming.html' }, { brand: 'msi', model: 'gaming x trio', series: '3090', - url: 'https://www.bhphotovideo.com/c/product/1593994-REG/msi_g3090gxt24_geforce_rtx_3090_gaming.html' + url: + 'https://www.bhphotovideo.com/c/product/1593994-REG/msi_g3090gxt24_geforce_rtx_3090_gaming.html' }, { brand: 'msi', model: 'ventus 3x oc', series: '3090', - url: 'https://www.bhphotovideo.com/c/product/1593648-REG/msi_geforce_rtx_3090_ventus.html' + url: + 'https://www.bhphotovideo.com/c/product/1593648-REG/msi_geforce_rtx_3090_ventus.html' }, { brand: 'msi', model: 'ventus 3x oc', series: '3090', - url: 'https://www.bhphotovideo.com/c/product/1593995-REG/msi_g3090v3x24c_geforce_rtx_3090_ventus.html' + url: + 'https://www.bhphotovideo.com/c/product/1593995-REG/msi_g3090v3x24c_geforce_rtx_3090_ventus.html' }, { brand: 'gigabyte', model: 'eagle oc', series: '3090', - url: 'https://www.bhphotovideo.com/c/product/1593334-REG/gigabyte_gv_n3090eagle_oc_24gd_geforce_rtx_3090_eagle.html' + url: + 'https://www.bhphotovideo.com/c/product/1593334-REG/gigabyte_gv_n3090eagle_oc_24gd_geforce_rtx_3090_eagle.html' }, { brand: 'gigabyte', model: 'gaming oc', series: '3090', - url: 'https://www.bhphotovideo.com/c/product/1593335-REG/gigabyte_gv_n3090gaming_oc_24gd_geforce_rtx3090_gaming_oc.html' + url: + 'https://www.bhphotovideo.com/c/product/1593335-REG/gigabyte_gv_n3090gaming_oc_24gd_geforce_rtx3090_gaming_oc.html' }, { brand: 'asus', model: 'tuf', series: '3090', - url: 'https://www.bhphotovideo.com/c/product/1594454-REG/asus_90yv0fd0_m0am00_tuf_gaming_geforce_rtx.html' + url: + 'https://www.bhphotovideo.com/c/product/1594454-REG/asus_90yv0fd0_m0am00_tuf_gaming_geforce_rtx.html' }, { brand: 'asus', model: 'tuf oc', series: '3090', - url: 'https://www.bhphotovideo.com/c/product/1594451-REG/asus_90yv0fd1_m0am00_tuf_gaming_geforce_rtx.html' + url: + 'https://www.bhphotovideo.com/c/product/1594451-REG/asus_90yv0fd1_m0am00_tuf_gaming_geforce_rtx.html' }, { brand: 'amd', model: '5950x', series: 'ryzen5950', - url: 'https://www.bhphotovideo.com/c/product/1598372-REG/amd_100_100000059wof_ryzen_9_5950x_3_4.html' + url: + 'https://www.bhphotovideo.com/c/product/1598372-REG/amd_100_100000059wof_ryzen_9_5950x_3_4.html' }, { brand: 'amd', model: '5900x', series: 'ryzen5900', - url: 'https://www.bhphotovideo.com/c/product/1598373-REG/amd_100_100000061wof_ryzen_9_5900x_3_7.html' + url: + 'https://www.bhphotovideo.com/c/product/1598373-REG/amd_100_100000061wof_ryzen_9_5900x_3_7.html' }, { brand: 'amd', model: '5800x', series: 'ryzen5800', - url: 'https://www.bhphotovideo.com/c/product/1598376-REG/amd_100_100000063wof_ryzen_7_5800x_3_8.html' + url: + 'https://www.bhphotovideo.com/c/product/1598376-REG/amd_100_100000063wof_ryzen_7_5800x_3_8.html' }, { brand: 'amd', model: '5600x', series: 'ryzen5600', - url: 'https://www.bhphotovideo.com/c/product/1598377-REG/amd_100_100000065box_ryzen_5_5600x_3_7.html' + url: + 'https://www.bhphotovideo.com/c/product/1598377-REG/amd_100_100000065box_ryzen_5_5600x_3_7.html' } ], name: 'bandh' diff --git a/src/store/model/bestbuy-ca.ts b/src/store/model/bestbuy-ca.ts index 62434403c1..e86843f23f 100644 --- a/src/store/model/bestbuy-ca.ts +++ b/src/store/model/bestbuy-ca.ts @@ -7,7 +7,8 @@ export const BestBuyCa: Store = { text: ['available online'] }, maxPrice: { - container: 'div[class^="productPricingContainer"] span[class^="screenReaderOnly_"', + container: + 'div[class^="productPricingContainer"] span[class^="screenReaderOnly_"', euroFormat: false } }, @@ -16,85 +17,99 @@ export const BestBuyCa: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-2060-super-gaming-x-8gb-gddr6-video-card/14419420?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-2060-super-gaming-x-8gb-gddr6-video-card/14419420?intl=nosplash' }, { brand: 'zotac', model: 'trinity', series: '3080', - url: 'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3080-trinity-10gb-gddr6x-video-card/14953249?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3080-trinity-10gb-gddr6x-video-card/14953249?intl=nosplash' }, { brand: 'msi', model: 'ventus 3x', series: '3080', - url: 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3080-ventus-3x-10gb-gddr6x-video-card/14950588?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3080-ventus-3x-10gb-gddr6x-video-card/14950588?intl=nosplash' }, { brand: 'evga', model: 'xc3 ultra', series: '3080', - url: 'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-video-card/14961449?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-video-card/14961449?intl=nosplash' }, { brand: 'asus', model: 'tuf', series: '3080', - url: 'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3080-10gb-gddr6x-video-card/14953248?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3080-10gb-gddr6x-video-card/14953248?intl=nosplash' }, { brand: 'asus', model: 'rog strix', series: '3080', - url: 'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-video-card/14954116?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-video-card/14954116?intl=nosplash' }, { brand: 'zotac', model: 'trinity', series: '3090', - url: 'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3090-trinity-24gb-gddr6x-video-card/14953250?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3090-trinity-24gb-gddr6x-video-card/14953250?intl=nosplash' }, { brand: 'asus', model: 'tuf', series: '3090', - url: 'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3090-24gb-gddr6x-video-card/14953247?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/asus-tuf-gaming-geforce-rtx-3090-24gb-gddr6x-video-card/14953247?intl=nosplash' }, { brand: 'asus', model: 'rog strix', series: '3090', - url: 'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3090-24gb-gddr6x-video-card/14954117?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/asus-rog-strix-geforce-rtx-3090-24gb-gddr6x-video-card/14954117?intl=nosplash' }, { brand: 'msi', model: 'ventus 3x', series: '3090', - url: 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3090-ventus-3x-oc-24gb-gddr6x-video-card/14966477?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3090-ventus-3x-oc-24gb-gddr6x-video-card/14966477?intl=nosplash' }, { brand: 'msi', model: 'ventus 3x', series: '3070', - url: 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3070-ventus-3x-oc-8gb-gddr6x-video-card/15038016?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3070-ventus-3x-oc-8gb-gddr6x-video-card/15038016?intl=nosplash' }, { brand: 'zotac', model: 'twin edge oc', series: '3070', - url: 'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-oc-8gb-gddr6x-video-card/15000078?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-oc-8gb-gddr6x-video-card/15000078?intl=nosplash' }, { brand: 'zotac', model: 'twin edge', series: '3070', - url: 'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-8gb-gddr6x-video-card/15000079?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/zotac-nvidia-geforce-rtx-3070-twin-edge-8gb-gddr6x-video-card/15000079?intl=nosplash' }, { brand: 'nvidia', model: 'founders edition', series: '3070', - url: 'https://www.bestbuy.ca/en-ca/product/nvidia-geforce-rtx-3070-8gb-gddr6-video-card-only-at-best-buy/15078017?intl=nosplash' + url: + 'https://www.bestbuy.ca/en-ca/product/nvidia-geforce-rtx-3070-8gb-gddr6-video-card-only-at-best-buy/15078017?intl=nosplash' } ], name: 'bestbuy-ca', diff --git a/src/store/model/bestbuy.ts b/src/store/model/bestbuy.ts index 912ce01d14..ed2a5f701e 100644 --- a/src/store/model/bestbuy.ts +++ b/src/store/model/bestbuy.ts @@ -7,7 +7,8 @@ export const BestBuy: Store = { text: ['add to cart'] }, maxPrice: { - container: '[data-sticky-media-gallery] .priceView-price .priceView-hero-price span', + container: + '[data-sticky-media-gallery] .priceView-price .priceView-hero-price span', euroFormat: false } }, @@ -16,271 +17,310 @@ export const BestBuy: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://www.bestbuy.com/site/evga-ko-ultra-gaming-nvidia-geforce-rtx-2060-6gb-gddr6-pci-express-3-0-graphics-card-black-gray/6403801.p?skuId=6403801&intl=nosplash' + url: + 'https://www.bestbuy.com/site/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', cartUrl: 'https://api.bestbuy.com/click/-/6429442/cart', model: 'founders edition', series: '3070', - url: 'https://www.bestbuy.com/site/nvidia-geforce-rtx-3070-8gb-gddr6-pci-express-4-0-graphics-card-dark-platinum-and-black/6429442.p?skuId=6429442&intl=nosplash' + url: + 'https://www.bestbuy.com/site/nvidia-geforce-rtx-3070-8gb-gddr6-pci-express-4-0-graphics-card-dark-platinum-and-black/6429442.p?skuId=6429442&intl=nosplash' }, { brand: 'nvidia', cartUrl: 'https://api.bestbuy.com/click/-/6429440/cart', model: 'founders edition', series: '3080', - url: 'https://www.bestbuy.com/site/nvidia-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429440.p?skuId=6429440&intl=nosplash' + url: + 'https://www.bestbuy.com/site/nvidia-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429440.p?skuId=6429440&intl=nosplash' }, { brand: 'asus', cartUrl: 'https://api.bestbuy.com/click/-/6432445/cart', model: 'rog strix', series: '3080', - url: 'https://www.bestbuy.com/site/asus-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-strix-graphics-card-black/6432445.p?skuId=6432445&intl=nosplash' + url: + 'https://www.bestbuy.com/site/asus-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-strix-graphics-card-black/6432445.p?skuId=6432445&intl=nosplash' }, { brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6439300/cart', model: 'xc3 black', series: '3070', - url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3070-xc3-black-gaming-8gb-gddr6x-pci-express-4-0-graphics-card/6439300.p?skuId=6439300&intl=nosplash' + url: + 'https://www.bestbuy.com/site/evga-geforce-rtx-3070-xc3-black-gaming-8gb-gddr6x-pci-express-4-0-graphics-card/6439300.p?skuId=6439300&intl=nosplash' }, { brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6432399/cart', model: 'xc3 black', series: '3080', - url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6432399.p?skuId=6432399&intl=nosplash' + url: + 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6432399.p?skuId=6432399&intl=nosplash' }, { brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6436194/cart', model: 'xc3', series: '3080', - url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436194.p?skuId=6436194&intl=nosplash' + url: + 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436194.p?skuId=6436194&intl=nosplash' }, { brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6432400/cart', model: 'xc3 ultra', series: '3080', - url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6432400.p?skuId=6432400&intl=nosplash' + url: + 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6432400.p?skuId=6432400&intl=nosplash' }, { brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6436196/cart', model: 'ftw3 ultra', series: '3080', - url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436196.p?skuId=6436196&intl=nosplash' + url: + 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436196.p?skuId=6436196&intl=nosplash' }, { brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6436191/cart', model: 'ftw3', series: '3080', - url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436191.p?skuId=6436191&intl=nosplash' + url: + 'https://www.bestbuy.com/site/evga-geforce-rtx-3080-10gb-gddr6x-pci-express-4-0-graphics-card/6436191.p?skuId=6436191&intl=nosplash' }, { brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6437912/cart', model: 'eagle', series: '3070', - url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437912.p?skuId=6437912&intl=nosplash' + url: + 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437912.p?skuId=6437912&intl=nosplash' }, { brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6437909/cart', model: 'gaming oc', series: '3070', - url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437909.p?skuId=6437909&intl=nosplash' + url: + 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437909.p?skuId=6437909&intl=nosplash' }, { brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6430620/cart', model: 'gaming oc', series: '3080', - url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6430620.p?acampID=0&cmp=RMX&loc=Hatch&ref=198&skuId=6430620&intl=nosplash' + url: + 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6430620.p?acampID=0&cmp=RMX&loc=Hatch&ref=198&skuId=6430620&intl=nosplash' }, { brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6430621/cart', model: 'eagle oc', series: '3080', - url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6430621.p?skuId=6430621&intl=nosplash' + url: + 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6430621.p?skuId=6430621&intl=nosplash' }, { brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6436219/cart', model: 'vision oc', series: '3080', - url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-white/6436219.p?skuId=6436219&intl=nosplash' + url: + 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-white/6436219.p?skuId=6436219&intl=nosplash' }, { brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6436223/cart', model: 'aorus master', series: '3080', - url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6436223.p?skuId=6436223&intl=nosplash' + url: + 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3080-10g-gddr6x-pci-express-4-0-graphics-card-black/6436223.p?skuId=6436223&intl=nosplash' }, { brand: 'msi', cartUrl: 'https://api.bestbuy.com/click/-/6430175/cart', model: 'ventus 3x oc', series: '3080', - url: 'https://www.bestbuy.com/site/msi-geforce-rtx-3080-ventus-3x-10g-oc-bv-gddr6x-pci-express-4-0-graphic-card-black-silver/6430175.p?skuId=6430175&intl=nosplash' + url: + 'https://www.bestbuy.com/site/msi-geforce-rtx-3080-ventus-3x-10g-oc-bv-gddr6x-pci-express-4-0-graphic-card-black-silver/6430175.p?skuId=6430175&intl=nosplash' }, { brand: 'pny', cartUrl: 'https://api.bestbuy.com/click/-/6432654/cart', model: 'dual fan', series: '3070', - url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3070-8gb-dual-fan-graphics-card/6432654.p?skuId=6432654&intl=nosplash' + url: + 'https://www.bestbuy.com/site/pny-geforce-rtx-3070-8gb-dual-fan-graphics-card/6432654.p?skuId=6432654&intl=nosplash' }, { brand: 'pny', cartUrl: 'https://api.bestbuy.com/click/-/6432653/cart', model: 'xlr8 rgb', 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', cartUrl: 'https://api.bestbuy.com/click/-/6432655/cart', model: 'xlr8 rgb', series: '3080', - url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432655.p?skuId=6432655&intl=nosplash' + url: + 'https://www.bestbuy.com/site/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432655.p?skuId=6432655&intl=nosplash' }, { brand: 'pny', cartUrl: 'https://api.bestbuy.com/click/-/6432658/cart', model: 'xlr8 rgb', series: '3080', - url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432658.p?skuId=6432658&intl=nosplash' + url: + 'https://www.bestbuy.com/site/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432658.p?skuId=6432658&intl=nosplash' }, { brand: 'nvidia', cartUrl: 'https://api.bestbuy.com/click/-/6429434/cart', model: 'founders edition', series: '3090', - url: 'https://www.bestbuy.com/site/nvidia-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429434.p?skuId=6429434&intl=nosplash' + url: + 'https://www.bestbuy.com/site/nvidia-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card-titanium-and-black/6429434.p?skuId=6429434&intl=nosplash' }, { brand: 'asus', cartUrl: 'https://api.bestbuy.com/click/-/6432447/cart', model: 'rog strix', series: '3090', - url: 'https://www.bestbuy.com/site/asus-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-strix-graphics-card-black/6432447.p?skuId=6432447&intl=nosplash' + url: + 'https://www.bestbuy.com/site/asus-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-strix-graphics-card-black/6432447.p?skuId=6432447&intl=nosplash' }, { brand: 'asus', cartUrl: 'https://api.bestbuy.com/click/-/6432446/cart', model: 'tuf', series: '3090', - url: 'https://www.bestbuy.com/site/asus-tuf-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card-black/6432446.p?skuId=6432446&intl=nosplash' + url: + 'https://www.bestbuy.com/site/asus-tuf-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card-black/6432446.p?skuId=6432446&intl=nosplash' }, { brand: 'msi', cartUrl: 'https://api.bestbuy.com/click/-/6430215/cart', model: 'ventus 3x oc', series: '3090', - url: 'https://www.bestbuy.com/site/msi-geforce-rtx-3090-ventus-3x-24g-oc-bv-24gb-gddr6x-pci-express-4-0-graphics-card-black-silver/6430215.p?skuId=6430215&intl=nosplash' + url: + 'https://www.bestbuy.com/site/msi-geforce-rtx-3090-ventus-3x-24g-oc-bv-24gb-gddr6x-pci-express-4-0-graphics-card-black-silver/6430215.p?skuId=6430215&intl=nosplash' }, { brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6430623/cart', model: 'gaming', series: '3090', - url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3090-24g-gddr6x-pci-express-4-0-graphics-card-black/6430623.p?skuId=6430623&intl=nosplash' + url: + 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3090-24g-gddr6x-pci-express-4-0-graphics-card-black/6430623.p?skuId=6430623&intl=nosplash' }, { brand: 'gigabyte', cartUrl: 'https://api.bestbuy.com/click/-/6430624/cart', model: 'eagle', series: '3090', - url: 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3090-24g-gddr6x-pci-express-4-0-graphics-card-black/6430624.p?skuId=6430624&intl=nosplash' + url: + 'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3090-24g-gddr6x-pci-express-4-0-graphics-card-black/6430624.p?skuId=6430624&intl=nosplash' }, { brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6434363/cart', model: 'xc3', series: '3090', - url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6434363.p?skuId=6434363&intl=nosplash' + url: + 'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6434363.p?skuId=6434363&intl=nosplash' }, { brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6436193/cart', model: 'ftw3', series: '3090', - url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6436193.p?skuId=6436193&intl=nosplash' + url: + 'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6436193.p?skuId=6436193&intl=nosplash' }, { brand: 'evga', cartUrl: 'https://api.bestbuy.com/click/-/6436192/cart', model: 'ftw3 ultra', series: '3090', - url: 'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6436192.p?skuId=6436192&intl=nosplash' + url: + 'https://www.bestbuy.com/site/evga-geforce-rtx-3090-24gb-gddr6x-pci-express-4-0-graphics-card/6436192.p?skuId=6436192&intl=nosplash' }, { brand: 'pny', cartUrl: 'https://api.bestbuy.com/click/-/6432657/cart', model: 'xlr8 rgb', series: '3090', - url: 'https://www.bestbuy.com/site/pny-geforce-rtx-3090-24gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432657.p?skuId=6432657&intl=nosplash' + url: + 'https://www.bestbuy.com/site/pny-geforce-rtx-3090-24gb-xlr8-gaming-epic-x-rgb-triple-fan-graphics-card/6432657.p?skuId=6432657&intl=nosplash' }, { brand: 'amd', cartUrl: 'https://api.bestbuy.com/click/-/6438942/cart', model: '5900x', series: 'ryzen5900', - url: 'https://www.bestbuy.com/site/amd-ryzen-9-5900x-4th-gen-12-core-24-threads-unlocked-desktop-processor-without-cooler/6438942.p?skuId=6438942&intl=nosplash' + url: + 'https://www.bestbuy.com/site/amd-ryzen-9-5900x-4th-gen-12-core-24-threads-unlocked-desktop-processor-without-cooler/6438942.p?skuId=6438942&intl=nosplash' }, { brand: 'amd', cartUrl: 'https://api.bestbuy.com/click/-/6438941/cart', model: '5950x', series: 'ryzen5950', - url: 'https://www.bestbuy.com/site/amd-ryzen-9-5950x-4th-gen-16-core-32-threads-unlocked-desktop-processor-without-cooler/6438941.p?skuId=6438941&intl=nosplash' + url: + 'https://www.bestbuy.com/site/amd-ryzen-9-5950x-4th-gen-16-core-32-threads-unlocked-desktop-processor-without-cooler/6438941.p?skuId=6438941&intl=nosplash' }, { brand: 'amd', cartUrl: 'https://api.bestbuy.com/click/-/6439000/cart', model: '5800x', series: 'ryzen5800', - url: 'https://www.bestbuy.com/site/amd-ryzen-7-5800x-4th-gen-8-core-16-threads-unlocked-desktop-processor-without-cooler/6439000.p?skuId=6439000&intl=nosplash' + url: + 'https://www.bestbuy.com/site/amd-ryzen-7-5800x-4th-gen-8-core-16-threads-unlocked-desktop-processor-without-cooler/6439000.p?skuId=6439000&intl=nosplash' }, { brand: 'amd', cartUrl: 'https://api.bestbuy.com/click/-/6438943/cart', model: '5600x', series: 'ryzen5600', - url: 'https://www.bestbuy.com/site/amd-ryzen-5-5600x-4th-gen-6-core-12-threads-unlocked-desktop-processor-with-wraith-stealth-cooler/6438943.p?skuId=6438943&intl=nosplash' + url: + 'https://www.bestbuy.com/site/amd-ryzen-5-5600x-4th-gen-6-core-12-threads-unlocked-desktop-processor-with-wraith-stealth-cooler/6438943.p?skuId=6438943&intl=nosplash' }, { brand: 'sony', cartUrl: 'https://api.bestbuy.com/click/-/6426149/cart', model: 'ps5 console', series: 'sonyps5c', - url: 'https://www.bestbuy.com/site/sony-playstation-5-console/6426149.p?skuId=6426149&intl=nosplash' + url: + 'https://www.bestbuy.com/site/sony-playstation-5-console/6426149.p?skuId=6426149&intl=nosplash' }, { brand: 'sony', cartUrl: 'https://api.bestbuy.com/click/-/6430161/cart', model: 'ps5 digital', series: 'sonyps5de', - url: 'https://www.bestbuy.com/site/sony-playstation-5-digital-edition-console/6430161.p?skuId=6430161&intl=nosplash' + url: + 'https://www.bestbuy.com/site/sony-playstation-5-digital-edition-console/6430161.p?skuId=6430161&intl=nosplash' }, { brand: 'microsoft', model: 'xbox series x', series: 'xboxsx', - url: 'https://www.bestbuy.com/site/microsoft-xbox-series-x-1tb-console-black/6428324.p?skuId=6428324' + url: + 'https://www.bestbuy.com/site/microsoft-xbox-series-x-1tb-console-black/6428324.p?skuId=6428324' }, { brand: 'microsoft', model: 'xbox series s', series: 'xboxss', - url: 'https://www.bestbuy.com/site/microsoft-xbox-series-s-512-gb-all-digital-console-disc-free-gaming-white/6430277.p?skuId=6430277' + 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' diff --git a/src/store/model/box.ts b/src/store/model/box.ts index 8ddb5d9c4c..ecca3a4c37 100644 --- a/src/store/model/box.ts +++ b/src/store/model/box.ts @@ -20,7 +20,8 @@ export const Box: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://www.box.co.uk/Gigabyte-GeForce-RTX-2080-Super-8GB-Wind_2724554.html' + url: + 'https://www.box.co.uk/Gigabyte-GeForce-RTX-2080-Super-8GB-Wind_2724554.html' } ], linksBuilder: { diff --git a/src/store/model/caseking.ts b/src/store/model/caseking.ts index 254fdc7929..383e20ed38 100644 --- a/src/store/model/caseking.ts +++ b/src/store/model/caseking.ts @@ -21,279 +21,324 @@ export const Caseking: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://www.caseking.de/evga-geforce-rtx-2060-super-xc-ultra-gaming-8192-mb-gddr6-gcev-385.html' + url: + 'https://www.caseking.de/evga-geforce-rtx-2060-super-xc-ultra-gaming-8192-mb-gddr6-gcev-385.html' }, { brand: 'asus', model: 'rog strix', series: '3080', - url: 'https://www.caseking.de/asus-geforce-rtx-3080-rog-strix-10g-10240-mb-gddr6x-gcas-400.html' + url: + 'https://www.caseking.de/asus-geforce-rtx-3080-rog-strix-10g-10240-mb-gddr6x-gcas-400.html' }, { brand: 'asus', model: 'rog strix oc', series: '3080', - url: 'https://www.caseking.de/asus-geforce-rtx-3080-rog-strix-o10g-10240-mb-gddr6x-gcas-399.html' + url: + 'https://www.caseking.de/asus-geforce-rtx-3080-rog-strix-o10g-10240-mb-gddr6x-gcas-399.html' }, { brand: 'asus', model: 'tuf', series: '3080', - url: 'https://www.caseking.de/asus-geforce-rtx-3080-tuf-gaming-10g-10240-mb-gddr6x-gcas-394.html' + url: + 'https://www.caseking.de/asus-geforce-rtx-3080-tuf-gaming-10g-10240-mb-gddr6x-gcas-394.html' }, { brand: 'asus', model: 'tuf oc', series: '3080', - url: 'https://www.caseking.de/asus-geforce-rtx-3080-tuf-gaming-o10g-10240-mb-gddr6x-gcas-396.html' + url: + 'https://www.caseking.de/asus-geforce-rtx-3080-tuf-gaming-o10g-10240-mb-gddr6x-gcas-396.html' }, { brand: 'evga', model: 'ftw3', series: '3080', - url: 'https://www.caseking.de/evga-geforce-rtx-3080-ftw3-gaming-10240-mb-gddr6x-gcev-416.html' + url: + 'https://www.caseking.de/evga-geforce-rtx-3080-ftw3-gaming-10240-mb-gddr6x-gcev-416.html' }, { brand: 'evga', model: 'ftw3 ultra', series: '3080', - url: 'https://www.caseking.de/evga-geforce-rtx-3080-ftw3-ultra-gaming-10240-mb-gddr6x-gcev-417.html' + url: + 'https://www.caseking.de/evga-geforce-rtx-3080-ftw3-ultra-gaming-10240-mb-gddr6x-gcev-417.html' }, { brand: 'evga', model: 'xc3', series: '3080', - url: 'https://www.caseking.de/evga-geforce-rtx-3080-xc3-gaming-10240-mb-gddr6x-gcev-415.html' + url: + 'https://www.caseking.de/evga-geforce-rtx-3080-xc3-gaming-10240-mb-gddr6x-gcev-415.html' }, { brand: 'evga', model: 'xc3 black', series: '3080', - url: 'https://www.caseking.de/evga-geforce-rtx-3080-xc3-black-gaming-10240-mb-gddr6x-gcev-414.html' + url: + 'https://www.caseking.de/evga-geforce-rtx-3080-xc3-black-gaming-10240-mb-gddr6x-gcev-414.html' }, { brand: 'evga', model: 'xc3 ultra', series: '3080', - url: 'https://www.caseking.de/evga-geforce-rtx-3080-xc3-ultra-gaming-10240-mb-gddr6x-gcev-423.html' + url: + 'https://www.caseking.de/evga-geforce-rtx-3080-xc3-ultra-gaming-10240-mb-gddr6x-gcev-423.html' }, { brand: 'gigabyte', model: 'aorus master', series: '3080', - url: 'https://www.caseking.de/gigabyte-aorus-geforce-rtx-3080-master-10g-10240-mb-gddr6x-gcgb-331.html' + url: + 'https://www.caseking.de/gigabyte-aorus-geforce-rtx-3080-master-10g-10240-mb-gddr6x-gcgb-331.html' }, { brand: 'gigabyte', model: 'eagle oc', series: '3080', - url: 'https://www.caseking.de/gigabyte-geforce-rtx-3080-eagle-oc-10g-10240-mb-gddr6x-gcgb-326.html' + url: + 'https://www.caseking.de/gigabyte-geforce-rtx-3080-eagle-oc-10g-10240-mb-gddr6x-gcgb-326.html' }, { brand: 'gigabyte', model: 'gaming oc', series: '3080', - url: 'https://www.caseking.de/gigabyte-geforce-rtx-3080-gaming-oc-10g-10240-mb-gddr6x-gcgb-327.html' + url: + 'https://www.caseking.de/gigabyte-geforce-rtx-3080-gaming-oc-10g-10240-mb-gddr6x-gcgb-327.html' }, { brand: 'gigabyte', model: 'vision oc', series: '3080', - url: 'https://www.caseking.de/gigabyte-geforce-rtx-3080-vision-oc-10g-10240-mb-gddr6x-gcgb-332.html' + url: + 'https://www.caseking.de/gigabyte-geforce-rtx-3080-vision-oc-10g-10240-mb-gddr6x-gcgb-332.html' }, { brand: 'inno3d', model: 'ichill x3', series: '3080', - url: 'https://www.caseking.de/inno3d-geforce-rtx-3080-ichill-x3-10240-mb-gddr6x-gci3-170.html' + url: + 'https://www.caseking.de/inno3d-geforce-rtx-3080-ichill-x3-10240-mb-gddr6x-gci3-170.html' }, { brand: 'inno3d', model: 'ichill x4', series: '3080', - url: 'https://www.caseking.de/inno3d-geforce-rtx-3080-ichill-x4-10240-mb-gddr6x-gci3-169.html' + url: + 'https://www.caseking.de/inno3d-geforce-rtx-3080-ichill-x4-10240-mb-gddr6x-gci3-169.html' }, { brand: 'inno3d', model: 'twin x2 oc', series: '3080', - url: 'https://www.caseking.de/inno3d-geforce-rtx-3080-twin-x2-oc-10240-mb-gddr6x-gci3-171.html' + url: + 'https://www.caseking.de/inno3d-geforce-rtx-3080-twin-x2-oc-10240-mb-gddr6x-gci3-171.html' }, { brand: 'msi', model: 'gaming x trio', series: '3080', - url: 'https://www.caseking.de/msi-geforce-rtx-3080-gaming-x-trio-10g-10240-mb-gddr6x-gcmc-248.html' + url: + 'https://www.caseking.de/msi-geforce-rtx-3080-gaming-x-trio-10g-10240-mb-gddr6x-gcmc-248.html' }, { brand: 'msi', model: 'ventus 3x oc', series: '3080', - url: 'https://www.caseking.de/msi-geforce-rtx-3080-ventus-3x-10g-oc-10240-mb-gddr6x-gcmc-247.html' + url: + 'https://www.caseking.de/msi-geforce-rtx-3080-ventus-3x-10g-oc-10240-mb-gddr6x-gcmc-247.html' }, { brand: 'pny', model: 'xlr8 rgb', series: '3080', - url: 'https://www.caseking.de/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10240-mb-gddr6x-gcpn-075.html' + url: + 'https://www.caseking.de/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10240-mb-gddr6x-gcpn-075.html' }, { brand: 'pny', model: 'xlr8 rgb', series: '3080', - url: 'https://www.caseking.de/pny-geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-10240-mb-gddr6x-gcpn-076.html' + url: + 'https://www.caseking.de/pny-geforce-rtx-3080-xlr8-gaming-revel-epic-x-rgb-10240-mb-gddr6x-gcpn-076.html' }, { brand: 'zotac', model: 'amp holo', series: '3080', - url: 'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-amp-holo-10240-mb-gddr6x-gczt-166.html' + url: + 'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-amp-holo-10240-mb-gddr6x-gczt-166.html' }, { brand: 'zotac', model: 'trinity oc', series: '3080', - url: 'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-trinity-oc-10240-mb-gddr6x-gczt-167.html' + url: + 'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-trinity-oc-10240-mb-gddr6x-gczt-167.html' }, { brand: 'zotac', model: 'trinity', series: '3080', - url: 'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-trinity-10240-mb-gddr6x-gczt-163.html' + url: + 'https://www.caseking.de/zotac-gaming-geforce-rtx-3080-trinity-10240-mb-gddr6x-gczt-163.html' }, { brand: 'asus', model: 'rog strix', series: '3090', - url: 'https://www.caseking.de/asus-geforce-rtx-3090-rog-strix-24g-24576-mb-gddr6x-gcas-397.html' + url: + 'https://www.caseking.de/asus-geforce-rtx-3090-rog-strix-24g-24576-mb-gddr6x-gcas-397.html' }, { brand: 'asus', model: 'rog strix oc', series: '3090', - url: 'https://www.caseking.de/asus-geforce-rtx-3090-rog-strix-o24g-24576-mb-gddr6x-gcas-398.html' + url: + 'https://www.caseking.de/asus-geforce-rtx-3090-rog-strix-o24g-24576-mb-gddr6x-gcas-398.html' }, { brand: 'asus', model: 'tuf', series: '3090', - url: 'https://www.caseking.de/asus-geforce-rtx-3090-tuf-gaming-24g-24576-mb-gddr6x-gcas-393.html' + url: + 'https://www.caseking.de/asus-geforce-rtx-3090-tuf-gaming-24g-24576-mb-gddr6x-gcas-393.html' }, { brand: 'asus', model: 'tuf oc', series: '3090', - url: 'https://www.caseking.de/asus-geforce-rtx-3090-tuf-gaming-o24g-24576-mb-gddr6x-gcas-395.html' + url: + 'https://www.caseking.de/asus-geforce-rtx-3090-tuf-gaming-o24g-24576-mb-gddr6x-gcas-395.html' }, { brand: 'evga', model: 'ftw3', series: '3090', - url: 'https://www.caseking.de/evga-geforce-rtx-3090-ftw3-gaming-24576-mb-gddr6x-gcev-421.html' + url: + 'https://www.caseking.de/evga-geforce-rtx-3090-ftw3-gaming-24576-mb-gddr6x-gcev-421.html' }, { brand: 'evga', model: 'ftw3 ultra', series: '3090', - url: 'https://www.caseking.de/evga-geforce-rtx-3090-ftw3-ultra-gaming-24576-mb-gddr6x-gcev-422.html' + url: + 'https://www.caseking.de/evga-geforce-rtx-3090-ftw3-ultra-gaming-24576-mb-gddr6x-gcev-422.html' }, { brand: 'evga', model: 'xc3', series: '3090', - url: 'https://www.caseking.de/evga-geforce-rtx-3090-xc3-gaming-24576-mb-gddr6x-gcev-419.html' + url: + 'https://www.caseking.de/evga-geforce-rtx-3090-xc3-gaming-24576-mb-gddr6x-gcev-419.html' }, { brand: 'evga', model: 'xc3 black', series: '3090', - url: 'https://www.caseking.de/evga-geforce-rtx-3090-xc3-black-gaming-24576-mb-gddr6x-gcev-418.html' + url: + 'https://www.caseking.de/evga-geforce-rtx-3090-xc3-black-gaming-24576-mb-gddr6x-gcev-418.html' }, { brand: 'evga', model: 'xc3 ultra', series: '3090', - url: 'https://www.caseking.de/evga-geforce-rtx-3090-xc3-ultra-gaming-24576-mb-gddr6x-gcev-420.html' + url: + 'https://www.caseking.de/evga-geforce-rtx-3090-xc3-ultra-gaming-24576-mb-gddr6x-gcev-420.html' }, { brand: 'gigabyte', model: 'eagle oc', series: '3090', - url: 'https://www.caseking.de/gigabyte-geforce-rtx-3090-eagle-oc-24g-24576-mb-gddr6x-gcgb-329.html' + url: + 'https://www.caseking.de/gigabyte-geforce-rtx-3090-eagle-oc-24g-24576-mb-gddr6x-gcgb-329.html' }, { brand: 'gigabyte', model: 'gaming oc', series: '3090', - url: 'https://www.caseking.de/gigabyte-geforce-rtx-3090-gaming-oc-24g-24576-mb-gddr6x-gcgb-328.html' + url: + 'https://www.caseking.de/gigabyte-geforce-rtx-3090-gaming-oc-24g-24576-mb-gddr6x-gcgb-328.html' }, { brand: 'inno3d', model: 'gaming x3', series: '3090', - url: 'https://www.caseking.de/inno3d-geforce-rtx-3090-gaming-x3-24576-mb-gddr6x-gci3-172.html' + url: + 'https://www.caseking.de/inno3d-geforce-rtx-3090-gaming-x3-24576-mb-gddr6x-gci3-172.html' }, { brand: 'inno3d', model: 'ichill x3', series: '3090', - url: 'https://www.caseking.de/inno3d-geforce-rtx-3090-ichill-x3-24576-mb-gddr6x-gci3-168.html' + url: + 'https://www.caseking.de/inno3d-geforce-rtx-3090-ichill-x3-24576-mb-gddr6x-gci3-168.html' }, { brand: 'inno3d', model: 'ichill x4', series: '3090', - url: 'https://www.caseking.de/inno3d-geforce-rtx-3090-ichill-x4-24576-mb-gddr6x-gci3-167.html' + url: + 'https://www.caseking.de/inno3d-geforce-rtx-3090-ichill-x4-24576-mb-gddr6x-gci3-167.html' }, { brand: 'msi', model: 'gaming x trio', series: '3090', - url: 'https://www.caseking.de/msi-geforce-rtx-3090-gaming-x-trio-24g-24576-mb-gddr6x-gcmc-244.html' + url: + 'https://www.caseking.de/msi-geforce-rtx-3090-gaming-x-trio-24g-24576-mb-gddr6x-gcmc-244.html' }, { brand: 'pny', model: 'xlr8 rgb', series: '3090', - url: 'https://www.caseking.de/pny-geforce-rtx-3090-xlr8-gaming-epic-x-rgb-24576-mb-gddr6x-gcpn-073.html' + url: + 'https://www.caseking.de/pny-geforce-rtx-3090-xlr8-gaming-epic-x-rgb-24576-mb-gddr6x-gcpn-073.html' }, { brand: 'pny', model: 'xlr8 rgb', series: '3090', - url: 'https://www.caseking.de/pny-geforce-rtx-3090-xlr8-gaming-revel-epic-x-rgb-24576-mb-gddr6x-gcpn-074.html' + url: + 'https://www.caseking.de/pny-geforce-rtx-3090-xlr8-gaming-revel-epic-x-rgb-24576-mb-gddr6x-gcpn-074.html' }, { brand: 'zotac', model: 'trinity', series: '3090', - url: 'https://www.caseking.de/zotac-gaming-geforce-rtx-3090-trinity-24576-mb-gddr6x-gczt-162.html' + url: + 'https://www.caseking.de/zotac-gaming-geforce-rtx-3090-trinity-24576-mb-gddr6x-gczt-162.html' }, { brand: 'amd', model: '5600x', series: 'ryzen5600', - url: 'https://www.caseking.de/amd-ryzen-5-5600x-3-7-ghz-vermeer-am4-mit-amd-wraith-stealth-kuehler-hpam-202.html' + url: + 'https://www.caseking.de/amd-ryzen-5-5600x-3-7-ghz-vermeer-am4-mit-amd-wraith-stealth-kuehler-hpam-202.html' }, { brand: 'amd', model: '5800x', series: 'ryzen5800', - url: 'https://www.caseking.de/amd-ryzen-7-5800x-3-8-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-203.html' + url: + 'https://www.caseking.de/amd-ryzen-7-5800x-3-8-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-203.html' }, { brand: 'amd', model: '5900x', series: 'ryzen5900', - url: 'https://www.caseking.de/amd-ryzen-9-5900x-3-7-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-204.html' + url: + 'https://www.caseking.de/amd-ryzen-9-5900x-3-7-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-204.html' }, { brand: 'amd', model: '5950x', series: 'ryzen5950', - url: 'https://www.caseking.de/amd-ryzen-9-5950x-3-4-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-205.html' + url: + 'https://www.caseking.de/amd-ryzen-9-5950x-3-4-ghz-vermeer-am4-boxed-ohne-kuehler-hpam-205.html' } ], name: 'caseking' }; - diff --git a/src/store/model/ccl.ts b/src/store/model/ccl.ts index 73e53b27c3..6ee867af4b 100644 --- a/src/store/model/ccl.ts +++ b/src/store/model/ccl.ts @@ -21,7 +21,8 @@ export const Ccl: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://www.cclonline.com/product/296443/RTX-2060-SUPER-VENTUS-GP-OC/Graphics-Cards/MSI-GeForce-RTX-2060-SUPER-VENTUS-GP-OC-8GB-Overclocked-Graphics-Card/VGA5671/' + url: + 'https://www.cclonline.com/product/296443/RTX-2060-SUPER-VENTUS-GP-OC/Graphics-Cards/MSI-GeForce-RTX-2060-SUPER-VENTUS-GP-OC-8GB-Overclocked-Graphics-Card/VGA5671/' } ], linksBuilder: { @@ -34,15 +35,18 @@ export const Ccl: Store = { urls: [ { series: '3070', - url: 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3070-Graphics-Cards/' + url: + 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3070-Graphics-Cards/' }, { series: '3080', - url: 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3080-Graphics-Cards/' + url: + 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3080-Graphics-Cards/' }, { series: '3090', - url: 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3090-Graphics-Cards/' + url: + 'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3090-Graphics-Cards/' } ] }, diff --git a/src/store/model/computeruniverse.ts b/src/store/model/computeruniverse.ts index e1de5a20af..1e7decf52b 100644 --- a/src/store/model/computeruniverse.ts +++ b/src/store/model/computeruniverse.ts @@ -4,7 +4,11 @@ export const Computeruniverse: Store = { labels: { inStock: { container: '.availability', - text: ['bestellartikel', 'auf lager und sofort lieferbar', 'kurzfristig verfügbar'] + text: [ + 'bestellartikel', + 'auf lager und sofort lieferbar', + 'kurzfristig verfügbar' + ] }, maxPrice: { container: '.product-price', @@ -16,31 +20,36 @@ export const Computeruniverse: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://www.computeruniverse.net/de/gainward-geforce-gtx-1660-super-ghost-6-gb-high-end-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gainward-geforce-gtx-1660-super-ghost-6-gb-high-end-grafikkarte' }, { brand: 'asus', model: 'dual', series: '3070', - url: 'https://www.computeruniverse.net/de/asus-geforce-rtx3070-dual-rtx3070-8g-8-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/asus-geforce-rtx3070-dual-rtx3070-8g-8-gb-enthusiast-grafikkarte' }, { brand: 'asus', model: 'dual oc', series: '3070', - url: 'https://www.computeruniverse.net/de/asus-geforce-rtx3070-dual-oc-dual-rtx3070-o8g-8-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/asus-geforce-rtx3070-dual-oc-dual-rtx3070-o8g-8-gb-oc-enthusiast-grafikkarte' }, { brand: 'asus', model: 'rog strix', series: '3070', - url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3070-gaming-8-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3070-gaming-8-gb-enthusiast-grafikkarte' }, { brand: 'asus', model: 'rog strix oc', series: '3070', - url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3070-gaming-oc-8-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3070-gaming-oc-8-gb-oc-enthusiast-grafikkarte' }, { brand: 'evga', @@ -52,67 +61,78 @@ export const Computeruniverse: Store = { brand: 'gainward', model: 'phoenix', series: '3070', - url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3070-phoenix-8-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gainward-geforce-rtx3070-phoenix-8-gb-enthusiast-grafikkarte' }, { brand: 'gainward', model: 'phoenix gs', series: '3070', - url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3070-phoenix-gs-8-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gainward-geforce-rtx3070-phoenix-gs-8-gb-enthusiast-grafikkarte' }, { brand: 'gigabyte', model: 'eagle', series: '3070', - url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-eagle-8-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-eagle-8-gb-enthusiast-grafikkarte' }, { brand: 'gigabyte', model: 'eagle oc', series: '3070', - url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-eagle-oc-8-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-eagle-oc-8-gb-enthusiast-grafikkarte' }, { brand: 'gigabyte', model: 'gaming oc', series: '3070', - url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-gaming-oc-8-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3070-gaming-oc-8-gb-oc-enthusiast-grafikkarte' }, { brand: 'inno3d', model: 'ichill x3', series: '3070', - url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3070-ichill-x3' + url: + 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3070-ichill-x3' }, { brand: 'inno3d', model: 'ichill x4', series: '3070', - url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3070-ichill-x4' + url: + 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3070-ichill-x4' }, { brand: 'msi', model: 'gaming x trio', series: '3070', - url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3070-gaming-x-trio-8-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/msi-geforce-rtx3070-gaming-x-trio-8-gb-enthusiast-grafikkarte' }, { brand: 'msi', model: 'ventus 2x oc', series: '3070', - url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3070-ventus-2x-oc-8-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/msi-geforce-rtx3070-ventus-2x-oc-8-gb-oc-enthusiast-grafikkarte' }, { brand: 'msi', model: 'ventus 3x oc', series: '3070', - url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3070-ventus-3x-oc-8-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/msi-geforce-rtx3070-ventus-3x-oc-8-gb-oc-enthusiast-grafikkarte' }, { brand: 'palit', model: 'gaming pro', series: '3070', - url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3070-gaming-pro-8-gb' + url: + 'https://www.computeruniverse.net/de/palit-geforce-rtx3070-gaming-pro-8-gb' }, { brand: 'pny', @@ -124,355 +144,414 @@ export const Computeruniverse: Store = { brand: 'pny', model: 'xlr8 rgb', series: '3070', - url: 'https://www.computeruniverse.net/de/pny-geforce-rtx3070-xlr8-gaming-epic-x-rgb-p-8-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/pny-geforce-rtx3070-xlr8-gaming-epic-x-rgb-p-8-gb-enthusiast-grafikkarte' }, { brand: 'zotac', model: 'twin edge oc', series: '3070', - url: 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3070-twin-edge-oc-8-gb-oc' + url: + 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3070-twin-edge-oc-8-gb-oc' }, { brand: 'asus', model: 'rog strix', series: '3080', - url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3080-gaming-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3080-gaming-10-gb-enthusiast-grafikkarte' }, { brand: 'asus', model: 'rog strix oc', series: '3080', - url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3080-gaming-oc-10-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3080-gaming-oc-10-gb-oc-enthusiast-grafikkarte' }, { brand: 'asus', model: 'tuf', series: '3080', - url: 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3080-gaming-tuf-rtx3080-10g-gaming-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3080-gaming-tuf-rtx3080-10g-gaming-10-gb-enthusiast-grafikkarte' }, { brand: 'asus', model: 'tuf oc', series: '3080', - url: 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3080-gaming-oc-tuf-rtx3080-o10g-gaming-10-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3080-gaming-oc-tuf-rtx3080-o10g-gaming-10-gb-oc-enthusiast-grafikkarte' }, { brand: 'evga', model: 'ftw3', series: '3080', - url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-ftw3-10-gb-high-end-grafikkarte' + url: + 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-ftw3-10-gb-high-end-grafikkarte' }, { brand: 'evga', model: 'ftw3 ultra', series: '3080', - url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-ultra-ftw3-10-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-ultra-ftw3-10-gb-oc-enthusiast-grafikkarte' }, { brand: 'evga', model: 'xc3', series: '3080', - url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-10-gb-enthusiast-grafikkarte' }, { brand: 'evga', model: 'xc3 black', series: '3080', - url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-black-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-black-10-gb-enthusiast-grafikkarte' }, { brand: 'evga', model: 'xc3 ultra', series: '3080', - url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-ultra-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/evga-geforce-rtx3080-xc3-ultra-10-gb-enthusiast-grafikkarte' }, { brand: 'gainward', model: 'phoenix', series: '3080', - url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3080-phoenix-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gainward-geforce-rtx3080-phoenix-10-gb-enthusiast-grafikkarte' }, { brand: 'gainward', model: 'phoenix gs', series: '3080', - url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3080-phoenix-gs-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gainward-geforce-rtx3080-phoenix-gs-10-gb-enthusiast-grafikkarte' }, { brand: 'gigabyte', model: 'aorus master', series: '3080', - url: 'https://www.computeruniverse.net/de/gigabyte-aorus-geforce-rtx3080-master-10-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gigabyte-aorus-geforce-rtx3080-master-10-gb-oc-enthusiast-grafikkarte' }, { brand: 'gigabyte', model: 'eagle oc', series: '3080', - url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-eagle-oc-10-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-eagle-oc-10-gb-oc-enthusiast-grafikkarte' }, { brand: 'gigabyte', model: 'gaming oc', series: '3080', - url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-gaming-oc-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-gaming-oc-10-gb-enthusiast-grafikkarte' }, { brand: 'gigabyte', model: 'vision oc', series: '3080', - url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-vision-oc-10-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3080-vision-oc-10-gb-oc-enthusiast-grafikkarte' }, { brand: 'inno3d', model: 'ichill x3', series: '3080', - url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-ichill-x3-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-ichill-x3-10-gb-enthusiast-grafikkarte' }, { brand: 'inno3d', model: 'ichill x4', series: '3080', - url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-ichill-x4-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-ichill-x4-10-gb-enthusiast-grafikkarte' }, { brand: 'inno3d', model: 'twin x2 oc', series: '3080', - url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-twin-x2-oc-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3080-twin-x2-oc-10-gb-enthusiast-grafikkarte' }, { brand: 'kfa2', model: 'sg oc', series: '3080', - url: 'https://www.computeruniverse.net/de/kfa-geforce-rtx3080-sg-oc-10-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/kfa-geforce-rtx3080-sg-oc-10-gb-oc-enthusiast-grafikkarte' }, { brand: 'msi', model: 'gaming x trio', series: '3080', - url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3080-gaming-x-trio-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/msi-geforce-rtx3080-gaming-x-trio-10-gb-enthusiast-grafikkarte' }, { brand: 'msi', model: 'ventus 3x oc', series: '3080', - url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3080-ventus-3x-oc-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/msi-geforce-rtx3080-ventus-3x-oc-10-gb-enthusiast-grafikkarte' }, { brand: 'palit', model: 'gaming pro', series: '3080', - url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3080-gamingpro-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/palit-geforce-rtx3080-gamingpro-10-gb-enthusiast-grafikkarte' }, { brand: 'palit', model: 'gaming pro oc', series: '3080', - url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3080-gamingpro-oc-10-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/palit-geforce-rtx3080-gamingpro-oc-10-gb-oc-enthusiast-grafikkarte' }, { brand: 'pny', model: 'xlr8 rgb', series: '3080', - url: 'https://www.computeruniverse.net/de/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-p-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-p-10-gb-enthusiast-grafikkarte' }, { brand: 'pny', model: 'xlr8 rgb', series: '3080', - url: 'https://www.computeruniverse.net/de/pny-geforce-rtx3080-xlr8-gaming-epic-x-rgb-m-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/pny-geforce-rtx3080-xlr8-gaming-epic-x-rgb-m-10-gb-enthusiast-grafikkarte' }, { brand: 'zotac', model: 'amp holo', series: '3080', - url: 'https://www.computeruniverse.net/de/zotac-geforce-rtx3080-amp-holo-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/zotac-geforce-rtx3080-amp-holo-10-gb-enthusiast-grafikkarte' }, { brand: 'zotac', model: 'amp extreme holo', series: '3080', - url: 'https://www.computeruniverse.net/de/zotac-geforce-rtx3080-amp-extreme-holo-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/zotac-geforce-rtx3080-amp-extreme-holo-10-gb-enthusiast-grafikkarte' }, { brand: 'zotac', model: 'trinity', series: '3080', - url: 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3080-trinity-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3080-trinity-10-gb-enthusiast-grafikkarte' }, { brand: 'zotac', model: 'trinity oc', series: '3080', - url: 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3080-trinity-oc-10-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx3080-trinity-oc-10-gb-enthusiast-grafikkarte' }, { brand: 'asus', model: 'rog strix', series: '3090', - url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3090-gaming-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3090-gaming-24-gb-enthusiast-grafikkarte' }, { brand: 'asus', model: 'rog strix oc', series: '3090', - url: 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3090-gaming-oc-24-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/asus-rog-strix-geforce-rtx3090-gaming-oc-24-gb-oc-enthusiast-grafikkarte' }, { brand: 'asus', model: 'tuf', series: '3090', - url: 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3090-gaming-tuf-rtx3090-24g-gaming-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3090-gaming-tuf-rtx3090-24g-gaming-24-gb-enthusiast-grafikkarte' }, { brand: 'asus', model: 'tuf oc', series: '3090', - url: 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3090-gaming-oc-tuf-rtx3090-o24g-gaming-24-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/asus-tuf-geforce-rtx3090-gaming-oc-tuf-rtx3090-o24g-gaming-24-gb-oc-enthusiast-grafikkarte' }, { brand: 'evga', model: 'ftw3', series: '3090', - url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-ftw3-gaming-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-ftw3-gaming-24-gb-enthusiast-grafikkarte' }, { brand: 'evga', model: 'ftw3 ultra', series: '3090', - url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-ftw3-ultra-gaming-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-ftw3-ultra-gaming-24-gb-enthusiast-grafikkarte' }, { brand: 'evga', model: 'xc3', series: '3090', - url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-gaming-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-gaming-24-gb-enthusiast-grafikkarte' }, { brand: 'evga', model: 'xc3 black', series: '3090', - url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-black-gaming-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-black-gaming-24-gb-enthusiast-grafikkarte' }, { brand: 'evga', model: 'xc3 ultra', series: '3090', - url: 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-ultra-gaming-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/evga-geforce-rtx3090-xc3-ultra-gaming-24-gb-enthusiast-grafikkarte' }, { brand: 'gainward', model: 'phoenix', series: '3090', - url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3090-phoenix-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gainward-geforce-rtx3090-phoenix-24-gb-enthusiast-grafikkarte' }, { brand: 'gainward', model: 'phoenix gs oc', series: '3090', - url: 'https://www.computeruniverse.net/de/gainward-geforce-rtx3090-phoenix-gs-24-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gainward-geforce-rtx3090-phoenix-gs-24-gb-oc-enthusiast-grafikkarte' }, { brand: 'gigabyte', model: 'aorus master', series: '3090', - url: 'https://www.computeruniverse.net/de/gigabyte-aorus-geforce-rtx3090-master-24gb' + url: + 'https://www.computeruniverse.net/de/gigabyte-aorus-geforce-rtx3090-master-24gb' }, { brand: 'gigabyte', model: 'eagle oc', series: '3090', - url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3090-eagle-oc-24-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3090-eagle-oc-24-gb-oc-enthusiast-grafikkarte' }, { brand: 'gigabyte', model: 'gaming oc', series: '3090', - url: 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3090-gaming-oc-24-gb-oc' + url: + 'https://www.computeruniverse.net/de/gigabyte-geforce-rtx3090-gaming-oc-24-gb-oc' }, { brand: 'inno3d', model: 'ichill x3', series: '3090', - url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3090-ichill-x3-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3090-ichill-x3-24-gb-enthusiast-grafikkarte' }, { brand: 'inno3d', model: 'ichill x4', series: '3090', - url: 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3090-ichill-x4-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/inno3d-geforce-rtx3090-ichill-x4-24-gb-enthusiast-grafikkarte' }, { brand: 'kfa2', model: 'sg oc', series: '3090', - url: 'https://www.computeruniverse.net/de/kfa-geforce-rtx3090-sg-oc-24-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/kfa-geforce-rtx3090-sg-oc-24-gb-oc-enthusiast-grafikkarte' }, { brand: 'msi', model: 'gaming x trio', series: '3090', - url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3090-gaming-x-trio-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/msi-geforce-rtx3090-gaming-x-trio-24-gb-enthusiast-grafikkarte' }, { brand: 'msi', model: 'ventus 3x oc', series: '3090', - url: 'https://www.computeruniverse.net/de/msi-geforce-rtx3090-ventus-3x-oc-24-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/msi-geforce-rtx3090-ventus-3x-oc-24-gb-oc-enthusiast-grafikkarte' }, { brand: 'palit', model: 'gaming pro', series: '3090', - url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3090-gamingpro-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/palit-geforce-rtx3090-gamingpro-24-gb-enthusiast-grafikkarte' }, { brand: 'palit', model: 'gaming pro oc', series: '3090', - url: 'https://www.computeruniverse.net/de/palit-geforce-rtx3090-gamingpro-oc-24-gb-oc-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/palit-geforce-rtx3090-gamingpro-oc-24-gb-oc-enthusiast-grafikkarte' }, { brand: 'pny', model: 'xlr8 rgb', series: '3090', - url: 'https://www.computeruniverse.net/de/pny-geforce-rtx3090-xlr8-gaming-epic-x-rgb-m-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/pny-geforce-rtx3090-xlr8-gaming-epic-x-rgb-m-24-gb-enthusiast-grafikkarte' }, { brand: 'pny', model: 'xlr8 rgb', series: '3090', - url: 'https://www.computeruniverse.net/de/pny-geforce-rtx3090-xlr8-gaming-epic-x-rgb-p-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/pny-geforce-rtx3090-xlr8-gaming-epic-x-rgb-p-24-gb-enthusiast-grafikkarte' }, { brand: 'zotac', model: 'trinity', series: '3090', - url: 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx-3090-trinity-24-gb-enthusiast-grafikkarte' + url: + 'https://www.computeruniverse.net/de/zotac-gaming-geforce-rtx-3090-trinity-24-gb-enthusiast-grafikkarte' }, { brand: 'amd', model: '5600x', series: 'ryzen5600', - url: 'https://www.computeruniverse.net/de/amd-ryzen-5-5600x-boxed-mit-wraith-stealth-kuehler' + url: + 'https://www.computeruniverse.net/de/amd-ryzen-5-5600x-boxed-mit-wraith-stealth-kuehler' }, { brand: 'amd', model: '5800x', series: 'ryzen5800', - url: 'https://www.computeruniverse.net/de/amd-ryzen-7-5800x-box-ohne-kuehler' + url: + 'https://www.computeruniverse.net/de/amd-ryzen-7-5800x-box-ohne-kuehler' }, { brand: 'amd', model: '5900x', series: 'ryzen5900', - url: 'https://www.computeruniverse.net/de/amd-ryzen-9-5900x-box-ohne-kuehler' + url: + 'https://www.computeruniverse.net/de/amd-ryzen-9-5900x-box-ohne-kuehler' }, { brand: 'amd', model: '5950x', series: 'ryzen5950', - url: 'https://www.computeruniverse.net/de/amd-ryzen-9-5950x-box-ohne-kuehler' + url: + 'https://www.computeruniverse.net/de/amd-ryzen-9-5950x-box-ohne-kuehler' } ], name: 'computeruniverse' diff --git a/src/store/model/coolmod.ts b/src/store/model/coolmod.ts index 84ecdabbb9..d65e0953b8 100644 --- a/src/store/model/coolmod.ts +++ b/src/store/model/coolmod.ts @@ -16,153 +16,177 @@ export const Coolmod: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://www.coolmod.com/kfa2-geforce-rtx-2060-super-1-click-oc-8gb-gddr6-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/kfa2-geforce-rtx-2060-super-1-click-oc-8gb-gddr6-tarjeta-grafica-precio' }, { brand: 'gigabyte', model: 'eagle oc', series: '3080', - url: 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-eagle-oc-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-eagle-oc-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'msi', model: 'ventus 3x oc', series: '3080', - url: 'https://www.coolmod.com/msi-geforce-rtx-3080-ventus-3x-oc-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/msi-geforce-rtx-3080-ventus-3x-oc-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'asus', model: 'tuf', series: '3080', - url: 'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-gaming-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-gaming-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'gigabyte', model: 'gaming oc', series: '3080', - url: 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-gaming-oc-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-gaming-oc-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'msi', model: 'gaming x trio', series: '3080', - url: 'https://www.coolmod.com/msi-geforce-rtx-3080-gaming-x-trio-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/msi-geforce-rtx-3080-gaming-x-trio-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'asus', model: 'tuf oc', series: '3080', - url: 'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-oc-gaming-10gb-gddr6x-tarjeta-grfica-precio' + url: + 'https://www.coolmod.com/asus-geforce-tuf-rtx-3080-oc-gaming-10gb-gddr6x-tarjeta-grfica-precio' }, { brand: 'asus', model: 'rog strix oc', series: '3080', - url: 'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-oc-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-oc-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'evga', model: 'xc3 black', series: '3080', - url: 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-black-gaming-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-black-gaming-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'zotac', model: 'trinity', series: '3080', - url: 'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'evga', model: 'xc3 ultra', series: '3080', - url: 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'asus', model: 'rog strix', series: '3080', - url: 'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-tarjeta-grfica-precio' + url: + 'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3080-10gb-gddr6x-tarjeta-grfica-precio' }, { brand: 'zotac', model: 'trinity oc', series: '3080', - url: 'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-oc-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/zotac-gaming-geforce-rtx-3080-trinity-oc-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'gigabyte', model: 'vision oc', series: '3080', - url: 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-vision-oc-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/gigabyte-geforce-rtx-3080-vision-oc-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'evga', model: 'xc3', series: '3080', - url: 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-gaming-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/evga-geforce-rtx-3080-xc3-gaming-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'evga', model: 'ftw3 ultra', series: '3080', - url: 'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-ultra-gaming-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'gigabyte', model: 'aorus master', series: '3080', - url: 'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-master-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-master-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'gigabyte', model: 'aorus xtreme', series: '3080', - url: 'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3080-xtreme-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'evga', model: 'ftw3', series: '3080', - url: 'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-gaming-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/evga-geforce-rtx-3080-ftw3-gaming-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'pny', model: 'xlr8 rgb', series: '3080', - url: 'https://www.coolmod.com/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/pny-geforce-rtx-3080-10gb-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'pny', model: 'xlr8', series: '3080', - url: 'https://www.coolmod.com/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/pny-geforce-rtx-3080-xlr8-gaming-epic-x-rgb-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'kfa2', model: 'sg-oc', series: '3080', - url: 'https://www.coolmod.com/kfa2-geforce-rtx-3080-sg-1-click-oc-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/kfa2-geforce-rtx-3080-sg-1-click-oc-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'inno3d', model: 'ichill x4', series: '3080', - url: 'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x4-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x4-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'inno3d', model: 'ichill x3', series: '3080', - url: 'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x3-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/inno3d-geforce-rtx-3080-ichill-x3-10gb-gddr6x-tarjeta-grafica-precio' }, { brand: 'inno3d', model: 'twin x2 oc', series: '3080', - url: 'https://www.coolmod.com/inno3d-geforce-rtx-3080-twin-x2-oc-10gb-gddr6x-tarjeta-grafica-precio' + url: + 'https://www.coolmod.com/inno3d-geforce-rtx-3080-twin-x2-oc-10gb-gddr6x-tarjeta-grafica-precio' } ], name: 'coolmod' }; - diff --git a/src/store/model/currys.ts b/src/store/model/currys.ts index 9d181f354a..1fb64ba2bc 100644 --- a/src/store/model/currys.ts +++ b/src/store/model/currys.ts @@ -21,7 +21,8 @@ export const Currys: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/graphics-cards/msi-geforce-rtx-2060-8-gb-super-ventus-gp-oc-graphics-card-10196803-pdt.html' + url: + 'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/graphics-cards/msi-geforce-rtx-2060-8-gb-super-ventus-gp-oc-graphics-card-10196803-pdt.html' } ], linksBuilder: { @@ -34,11 +35,13 @@ export const Currys: Store = { urls: [ { series: '3080', - url: 'https://www.currys.co.uk/gbuk/rtx-3080/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313767/xx-criteria.html' + url: + 'https://www.currys.co.uk/gbuk/rtx-3080/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313767/xx-criteria.html' }, { series: '3090', - url: 'https://www.currys.co.uk/gbuk/rtx-3090/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313725/xx-criteria.html' + url: + 'https://www.currys.co.uk/gbuk/rtx-3090/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313725/xx-criteria.html' } ] }, diff --git a/src/store/model/ebuyer.ts b/src/store/model/ebuyer.ts index e36eed0abb..c34610e07f 100644 --- a/src/store/model/ebuyer.ts +++ b/src/store/model/ebuyer.ts @@ -21,7 +21,8 @@ export const Ebuyer: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://www.ebuyer.com/874209-gigabyte-geforce-rtx-2060-windforce-6gb-oc-graphics-card-gv-n2060wf2oc-6gd-v2' + url: + 'https://www.ebuyer.com/874209-gigabyte-geforce-rtx-2060-windforce-6gb-oc-graphics-card-gv-n2060wf2oc-6gd-v2' }, { brand: 'sony', @@ -33,7 +34,8 @@ export const Ebuyer: Store = { brand: 'sony', model: 'ps5 digital', 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: { @@ -46,15 +48,18 @@ export const Ebuyer: Store = { urls: [ { series: '3070', - url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3070' + url: + 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3070' }, { series: '3080', - url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3080' + url: + 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3080' }, { series: '3090', - url: 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3090' + url: + 'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3090' } ] }, diff --git a/src/store/model/game.ts b/src/store/model/game.ts index a789cff267..5385606f16 100644 --- a/src/store/model/game.ts +++ b/src/store/model/game.ts @@ -20,7 +20,8 @@ export const Game: Store = { brand: 'test:brand', model: 'test:model', 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', diff --git a/src/store/model/gamestop.ts b/src/store/model/gamestop.ts index c287866e9a..cbef4d6dbe 100644 --- a/src/store/model/gamestop.ts +++ b/src/store/model/gamestop.ts @@ -26,37 +26,43 @@ export const Gamestop: Store = { brand: 'test:brand', model: 'test:model', series: 'test:series', - url: 'https://www.gamestop.com/nav-pc-hardware-desktops/products/clx-set-tgmsetgxe9600bm-gaming-desktop/11096665' + url: + 'https://www.gamestop.com/nav-pc-hardware-desktops/products/clx-set-tgmsetgxe9600bm-gaming-desktop/11096665' }, { brand: 'asus', model: 'tuf oc', series: '3080', - url: 'https://www.gamestop.com/video-games/pc/components/graphics-cards/products/tuf-gaming-geforce-rtx-3080-graphics-card/11109446.html' + url: + 'https://www.gamestop.com/video-games/pc/components/graphics-cards/products/tuf-gaming-geforce-rtx-3080-graphics-card/11109446.html' }, { brand: 'sony', model: 'ps5 console', series: 'sonyps5c', - url: 'https://www.gamestop.com/video-games/playstation-5/consoles/products/playstation-5/11108140' + url: + 'https://www.gamestop.com/video-games/playstation-5/consoles/products/playstation-5/11108140' }, { brand: 'sony', model: 'ps5 digital', series: 'sonyps5de', - url: 'https://www.gamestop.com/video-games/playstation-5/consoles/products/playstation-5-digital-edition/11108141' + url: + 'https://www.gamestop.com/video-games/playstation-5/consoles/products/playstation-5-digital-edition/11108141' }, { brand: 'microsoft', model: 'xbox series x', series: 'xboxsx', - url: 'https://www.gamestop.com/video-games/xbox-series-x/consoles/products/xbox-series-x/11108371.html?condition=New' + url: + 'https://www.gamestop.com/video-games/xbox-series-x/consoles/products/xbox-series-x/11108371.html?condition=New' }, { brand: 'microsoft', model: 'xbox series s', series: 'xboxss', - url: 'https://www.gamestop.com/video-games/xbox-series-x/consoles/products/xbox-series-s-digital-edition/11108372.html?condition=New' + url: + 'https://www.gamestop.com/video-games/xbox-series-x/consoles/products/xbox-series-s-digital-edition/11108372.html?condition=New' } ], name: 'gamestop', diff --git a/src/store/model/helpers/backoff.ts b/src/store/model/helpers/backoff.ts index 621378a567..aba13c28ae 100644 --- a/src/store/model/helpers/backoff.ts +++ b/src/store/model/helpers/backoff.ts @@ -10,7 +10,11 @@ type Backoff = { const stores: Record = {}; -export async function processBackoffDelay(store: Store, link: Link, statusCode: number): Promise { +export async function processBackoffDelay( + store: Store, + link: Link, + statusCode: number +): Promise { /** * We treat statusCode 0 as successful as some of the puppeteer plugins * cause side-effects resulting in an empty response object even though @@ -41,7 +45,9 @@ export async function processBackoffDelay(store: Store, link: Link, statusCode: } const backoffTime = backoff.time; - logger.debug(Print.backoff(link, store, {delay: backoffTime, statusCode}, true)); + logger.debug( + Print.backoff(link, store, {delay: backoffTime, statusCode}, true) + ); await delay(backoff.time); diff --git a/src/store/model/helpers/card.ts b/src/store/model/helpers/card.ts index ac3beb0ec3..b3ec5d3658 100644 --- a/src/store/model/helpers/card.ts +++ b/src/store/model/helpers/card.ts @@ -95,7 +95,10 @@ export function parseCard(name: string): Card | null { } // Split non spaced TitleCase words only after extracting brand - model = model.join(' ').replace(/([A-Z][a-z]+)([A-Z][a-z]+)/g, '$1 $2').split(' '); + model = model + .join(' ') + .replace(/([A-Z][a-z]+)([A-Z][a-z]+)/g, '$1 $2') + .split(' '); // Some vendors have oc at the beginning of the product name, // store whether the card contains the term "oc" and remove @@ -103,15 +106,19 @@ export function parseCard(name: string): Card | null { let isOC = false; /* eslint-disable @typescript-eslint/prefer-regexp-exec */ - model = model.filter(word => { + model = model.filter((word) => { if (word.toLowerCase() === 'oc') { isOC = true; return false; } - return !word.match(/^(nvidia|geforce|ge|force|rtx|amp[ae]re|graphics|card|gpu|pci-?e(xpress)?|ray-?tracing|ray|tracing|core|boost|epicx)$/i) && + return ( + !word.match( + /^(nvidia|geforce|ge|force|rtx|amp[ae]re|graphics|card|gpu|pci-?e(xpress)?|ray-?tracing|ray|tracing|core|boost|epicx)$/i + ) && !word.match(/^(\d+(?:gb?|mhz)?|gb|mhz|g?ddr(\d+x?)?)$/i) && - !word.match(/^(display ?port|hdmi|vga)$/i); + !word.match(/^(display ?port|hdmi|vga)$/i) + ); }); /* eslint-enable @typescript-eslint/prefer-regexp-exec */ @@ -125,6 +132,10 @@ export function parseCard(name: string): Card | null { return { brand: brand.toLowerCase(), - model: model.join(' ').toLowerCase().replace(/ gaming\b/g, '').trim() + model: model + .join(' ') + .toLowerCase() + .replace(/ gaming\b/g, '') + .trim() }; } diff --git a/src/store/model/helpers/nvidia-cart.ts b/src/store/model/helpers/nvidia-cart.ts index 1464276882..d10615c41e 100644 --- a/src/store/model/helpers/nvidia-cart.ts +++ b/src/store/model/helpers/nvidia-cart.ts @@ -74,7 +74,12 @@ export class NvidiaCart { break; } 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); lastError = error; @@ -92,7 +97,9 @@ export class NvidiaCart { await open(cartUrl); } 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); cartUrl = this.fallbackCartUrl; @@ -118,10 +125,18 @@ export class NvidiaCart { public async refreshSessionToken(): Promise { logger.debug('ℹ [nvidia] refreshing session token'); try { - const result = await usingResponse(this.browser, this.sessionUrl, async response => { - return response?.json() as NvidiaSessionTokenJSON | undefined; - }); - if (typeof result !== 'object' || result === null || !('session_token' in result)) { + const result = await usingResponse( + this.browser, + this.sessionUrl, + async (response) => { + return response?.json() as NvidiaSessionTokenJSON | undefined; + } + ); + if ( + typeof result !== 'object' || + result === null || + !('session_token' in result) + ) { throw new Error('malformed response'); } @@ -133,18 +148,20 @@ export class NvidiaCart { } } - protected async addToCartAndGetLocationRedirect(productId: number): Promise { + protected async addToCartAndGetLocationRedirect( + productId: number + ): Promise { const url = 'https://api-prod.nvidia.com/direct-sales-shop/DR/add-to-cart'; const sessionToken = await this.getSessionToken(); logger.info(`ℹ [nvidia] session_token=${sessionToken}`); - const locationData = await usingPage(this.browser, async page => { + const locationData = await usingPage(this.browser, async (page) => { page.removeAllListeners('request'); await page.setRequestInterception(true); - page.on('request', interceptedRequest => { + page.on('request', (interceptedRequest) => { void interceptedRequest.continue({ headers: { ...interceptedRequest.headers(), @@ -153,9 +170,7 @@ export class NvidiaCart { }, method: 'POST', postData: JSON.stringify({ - products: [ - {productId, quantity: 1} - ] + products: [{productId, quantity: 1}] }) }); }); diff --git a/src/store/model/helpers/nvidia.ts b/src/store/model/helpers/nvidia.ts index 3503a039e7..f6279a808d 100644 --- a/src/store/model/helpers/nvidia.ts +++ b/src/store/model/helpers/nvidia.ts @@ -13,15 +13,23 @@ function getRegionInfo(): NvidiaRegionInfo { const regionInfo = regionInfos.get(country); if (!regionInfo) { - throw new Error(`LogicException could not retrieve region info for ${country}`); + throw new Error( + `LogicException could not retrieve region info for ${country}` + ); } return regionInfo; } -function nvidiaStockUrl(id: number, drLocale: string, currency: string): string { - return `https://api-prod.nvidia.com/direct-sales-shop/DR/products/${drLocale}/${currency}/${id}?` + - timestampUrlParameter().slice(1); +function nvidiaStockUrl( + id: number, + drLocale: string, + currency: string +): string { + return ( + `https://api-prod.nvidia.com/direct-sales-shop/DR/products/${drLocale}/${currency}/${id}?` + + timestampUrlParameter().slice(1) + ); } let cart: NvidiaCart; @@ -45,7 +53,13 @@ export function generateOpenCartAction(id: number, cardName: string) { } export function generateLinks(): Link[] { - const {drLocale, fe3080Id, fe3090Id, fe2060SuperId, currency} = getRegionInfo(); + const { + drLocale, + fe3080Id, + fe3090Id, + fe2060SuperId, + currency + } = getRegionInfo(); const links: Link[] = []; @@ -63,7 +77,10 @@ export function generateLinks(): Link[] { links.push({ brand: 'nvidia', model: 'founders edition', - openCartAction: generateOpenCartAction(fe3080Id, 'nvidia founders edition 3080'), + openCartAction: generateOpenCartAction( + fe3080Id, + 'nvidia founders edition 3080' + ), series: '3080', url: nvidiaStockUrl(fe3080Id, drLocale, currency) }); @@ -73,7 +90,10 @@ export function generateLinks(): Link[] { links.push({ brand: 'nvidia', model: 'founders edition', - openCartAction: generateOpenCartAction(fe3090Id, 'nvidia founders edition 3090'), + openCartAction: generateOpenCartAction( + fe3090Id, + 'nvidia founders edition 3090' + ), series: '3090', url: nvidiaStockUrl(fe3090Id, drLocale, currency) }); diff --git a/src/store/model/index.ts b/src/store/model/index.ts index 50dffdad84..e947757538 100644 --- a/src/store/model/index.ts +++ b/src/store/model/index.ts @@ -144,7 +144,11 @@ function filterBrandsSeriesModels() { function printConfig() { if (config.store.stores.length > 0) { - logger.info(`ℹ selected stores: ${config.store.stores.map(store => store.name).join(', ')}`); + logger.info( + `ℹ selected stores: ${config.store.stores + .map((store) => store.name) + .join(', ')}` + ); } if (config.store.showOnlyBrands.length > 0) { @@ -152,9 +156,15 @@ function printConfig() { } if (config.store.showOnlyModels.length > 0) { - logger.info(`ℹ selected models: ${config.store.showOnlyModels.map(entry => { - return entry.series ? entry.name + ' (' + entry.series + ')' : entry.name; - }).join(', ')}`); + logger.info( + `ℹ selected models: ${config.store.showOnlyModels + .map((entry) => { + return entry.series + ? entry.name + ' (' + entry.series + ')' + : entry.name; + }) + .join(', ')}` + ); } if (config.store.showOnlySeries.length > 0) { @@ -169,7 +179,9 @@ function warnIfStoreDeprecated(store: Store) { logger.warn(`${store.name} is deprecated in favor of bestbuy`); break; case 'evga': - logger.warn(`${store.name} is deprecated since they only support queuing`); + logger.warn( + `${store.name} is deprecated since they only support queuing` + ); break; default: } diff --git a/src/store/model/mediamarkt.ts b/src/store/model/mediamarkt.ts index 5b281701ce..5577fb9367 100644 --- a/src/store/model/mediamarkt.ts +++ b/src/store/model/mediamarkt.ts @@ -6,14 +6,16 @@ export const Mediamarkt: Store = { container: 'span[font-family="price"]', euroFormat: false }, - outOfStock: [{ - container: '#root', - text: ['dieser artikel ist aktuell nicht verfügbar.'] - }, - { - container: '#root', - text: ['leider keine Lieferung möglich'] - }] + outOfStock: [ + { + container: '#root', + text: ['dieser artikel ist aktuell nicht verfügbar.'] + }, + { + container: '#root', + text: ['leider keine Lieferung möglich'] + } + ] }, links: [ { diff --git a/src/store/model/memoryexpress.ts b/src/store/model/memoryexpress.ts index fe8585111b..3c5eeb453f 100644 --- a/src/store/model/memoryexpress.ts +++ b/src/store/model/memoryexpress.ts @@ -3,11 +3,13 @@ import {Store} from './store'; export const MemoryExpress: Store = { labels: { maxPrice: { - container: '#ProductPricing .GrandTotal.c-capr-pricing__grand-total > div', + container: + '#ProductPricing .GrandTotal.c-capr-pricing__grand-total > div', euroFormat: false }, 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'] } }, diff --git a/src/store/model/mindfactory.ts b/src/store/model/mindfactory.ts index c1f16b099c..42426a26a4 100644 --- a/src/store/model/mindfactory.ts +++ b/src/store/model/mindfactory.ts @@ -20,91 +20,106 @@ export const Mindfactory: Store = { brand: 'test:brand', model: 'test:model', 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', model: 'aorus master', 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', model: 'aorus xtreme', 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', model: 'gaming oc', 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', model: 'vision oc', 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', model: 'gaming x trio', 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', model: 'gaming pro', 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', model: 'trinity oc', 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', model: 'gaming oc', 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', model: 'ventus 3x', 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', model: 'gaming pro', series: '3090', - url: 'https://www.mindfactory.de/product_info.php/24GB-Palit-GeForce-RTX-3090-GamingPro-DDR6--Retail-_1377233.html' + url: + 'https://www.mindfactory.de/product_info.php/24GB-Palit-GeForce-RTX-3090-GamingPro-DDR6--Retail-_1377233.html' }, { brand: 'amd', model: '5600x', series: 'ryzen5600', - url: 'https://www.mindfactory.de/product_info.php/AMD-Ryzen-5-5600X-6x-3-70GHz-So-AM4-BOX_1380726.html' + url: + 'https://www.mindfactory.de/product_info.php/AMD-Ryzen-5-5600X-6x-3-70GHz-So-AM4-BOX_1380726.html' }, { brand: 'amd', model: '5800x', series: 'ryzen5800', - url: 'https://www.mindfactory.de/product_info.php/AMD-Ryzen-7-5800X-8x-3-80GHz-So-AM4-WOF_1380727.html' + url: + 'https://www.mindfactory.de/product_info.php/AMD-Ryzen-7-5800X-8x-3-80GHz-So-AM4-WOF_1380727.html' }, { brand: 'amd', model: '5900x', series: 'ryzen5900', - url: 'https://www.mindfactory.de/product_info.php/AMD-Ryzen-9-5900X-12x-3-70GHz-So-AM4-WOF_1380728.html' + url: + 'https://www.mindfactory.de/product_info.php/AMD-Ryzen-9-5900X-12x-3-70GHz-So-AM4-WOF_1380728.html' }, { brand: 'amd', model: '5950x', series: 'ryzen5950', - url: 'https://www.mindfactory.de/product_info.php/AMD-Ryzen-9-5950X-16x-3-40GHz-So-AM4-WOF_1380729.html' + url: + 'https://www.mindfactory.de/product_info.php/AMD-Ryzen-9-5950X-16x-3-40GHz-So-AM4-WOF_1380729.html' } ], name: 'mindfactory' diff --git a/src/store/model/newegg-ca.ts b/src/store/model/newegg-ca.ts index 61f497044a..59c6c75d99 100644 --- a/src/store/model/newegg-ca.ts +++ b/src/store/model/newegg-ca.ts @@ -22,350 +22,400 @@ export const NeweggCa: Store = { itemNumber: '14-500-495', model: 'test:model', 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', itemNumber: '14-126-453', model: 'tuf', 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', itemNumber: '14-487-519', model: 'ftw3 gaming', 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', itemNumber: '14-487-518', model: 'ftw3 ultra', 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', itemNumber: '14-487-522', model: 'xc3 black', 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', itemNumber: '14-487-521', model: 'xc3', 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', itemNumber: '14-487-520', model: 'xc3 ultra', 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', itemNumber: '14-137-600', model: 'ventus 3x', 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', itemNumber: '14-137-598', model: 'ventus 3x oc', 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', itemNumber: '14-137-597', model: 'gaming x trio', 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', itemNumber: '149-32-329', model: 'gaming oc', 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', itemNumber: '149-32-330', model: 'eagle oc', 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', itemNumber: '14-932-336', model: 'aorus master', 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', itemNumber: '14-950-502', model: 'trinity', 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', itemNumber: '14-126-457', model: 'rog strix', 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', itemNumber: '14-126-452', model: 'tuf oc', 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', itemNumber: '14-500-504', model: 'trinity oc', 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', itemNumber: '14-133-809', model: 'xlr8 rgb', 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', itemNumber: '14-932-337', model: 'vision oc', 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', itemNumber: '14-137-595', model: 'gaming x trio', 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', itemNumber: '14-932-327', model: 'gaming oc', 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', itemNumber: '14-137-596', model: 'ventus 3x oc', 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', itemNumber: '14-500-503', model: 'trinity', 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', itemNumber: '14-126-454', model: 'tuf', 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', itemNumber: '14-126-456', model: 'rog strix', 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', itemNumber: '14-487-524', model: 'xc3 ultra', 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', itemNumber: '14-487-523', model: 'xc3', 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', itemNumber: '14-487-526', model: 'ftw3 ultra', 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', itemNumber: '14-487-525', model: 'ftw3', 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', itemNumber: '14-137-602', model: 'ventus 2x', 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', itemNumber: '14-137-601', model: 'ventus 3x', 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', itemNumber: '14-137-603', model: 'gaming x trio', 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', itemNumber: '14-126-460', model: 'dual', 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', itemNumber: '14-126-459', model: 'dual oc', 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', itemNumber: '14-932-342', model: 'gaming oc', 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', itemNumber: '14-126-458', model: 'rog strix', 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', itemNumber: '14-500-501', model: 'twin edge', 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', itemNumber: '14-932-344', model: 'eagle', 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', itemNumber: '14-487-528', model: 'xc3 black gaming', 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', itemNumber: '14-932-360', model: 'vision oc', 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', itemNumber: '14-500-505', model: 'twin edge oc', 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', itemNumber: '14-133-812', model: 'uprising', 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', itemNumber: '14-126-461', model: 'tuf', 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', itemNumber: '14-487-531', model: 'ftw3 gaming', 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', itemNumber: '14-932-359', model: 'aorus', 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', itemNumber: '14-932-343', model: 'eagle oc', 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', itemNumber: '14-487-530', model: 'xc3 ultra gaming', 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', itemNumber: '14-487-532', model: 'ftw3 ultra gaming', 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', itemNumber: '14-133-811', model: 'xlr8 rgb', 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', itemNumber: '14-487-529', model: 'xc3 gaming', 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', @@ -398,9 +448,14 @@ export const NeweggCa: Store = { ], name: 'newegg-ca', 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_json = await response.json(); - return response_json.MainItem !== undefined && response_json.MainItem.Instock === true; + return ( + response_json.MainItem !== undefined && + response_json.MainItem.Instock === true + ); } }; diff --git a/src/store/model/newegg.ts b/src/store/model/newegg.ts index db8bf9e2d4..36593e0eb6 100644 --- a/src/store/model/newegg.ts +++ b/src/store/model/newegg.ts @@ -22,395 +22,493 @@ export const Newegg: Store = { itemNumber: '14-500-495', model: 'test:model', 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', - 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', model: 'tuf', 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', - 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', model: 'ftw3 ultra', 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', - 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', model: 'ftw3', 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', - 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', model: 'xc3 black', 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', - 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', model: 'xc3', 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', - 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', model: 'ventus 3x', 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', - 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', model: 'ventus 3x oc', 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', - 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', model: 'gaming x trio', 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', - 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', model: 'gaming oc', 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', - 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', model: 'eagle oc', 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', - 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', model: 'aorus master', 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', - 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', model: 'trinity', 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', - 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', model: 'rog strix', 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', - 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', model: 'tuf oc', 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', - 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', model: 'trinity oc', 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', - 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', model: 'xlr8 rgb', 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', - 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', model: 'tuf', 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', - 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', model: 'rog strix', 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', - 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', model: 'gaming x trio', 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', - 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', model: 'ventus 3x oc', 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', - 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', model: 'trinity', 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', - 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', model: 'ventus 3x', 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', - 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', model: 'ftw3', 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', - 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', model: 'xc3 ultra', 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', - 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', model: 'ftw3 ultra', 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', - 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', model: 'xc3 black', 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', - 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', model: 'xc3', 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', - 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', model: 'gaming', 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', - 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', model: 'eagle', 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', - 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', model: 'ventus 3x oc', 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', - 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', model: 'ventus 2x oc', 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', - 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', model: 'gaming x trio', 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', - 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', model: 'vision oc', 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', - 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', model: 'dual oc', 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', - 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', model: 'rog strix', 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', - 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', model: 'twin edge', 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', - 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', model: 'twin edge oc', 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', - 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', model: 'gaming oc', 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', - 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', model: 'ftw3 ultra', 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', - 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', model: 'xc3 ultra', 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', - 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', model: 'xc3 black', 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', - 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', model: 'eagle oc', 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', - 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', model: 'eagle', 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', - 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', model: 'xc3', 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', - 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', model: 'dual', 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', - 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', model: 'aorus master', 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', - 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', model: 'ftw3', 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', - 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', model: 'tuf oc', series: '3070', - url: 'https://www.newegg.com/asus-geforce-rtx-3070-tuf-rtx3070-o8g-gaming/p/N82E16814126461' + url: + 'https://www.newegg.com/asus-geforce-rtx-3070-tuf-rtx3070-o8g-gaming/p/N82E16814126461' }, { brand: 'amd', - cartUrl: 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113663', + cartUrl: + 'https://secure.newegg.com/Shopping/AddtoCart.aspx?Submit=ADD&ItemList=N82E16819113663', itemNumber: '19-113-663', model: '5950x', series: 'ryzen5950', @@ -418,7 +516,8 @@ export const Newegg: Store = { }, { 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', model: '5900x', series: 'ryzen5900', @@ -426,7 +525,8 @@ export const Newegg: Store = { }, { 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', model: '5800x', series: 'ryzen5800', @@ -434,7 +534,8 @@ export const Newegg: Store = { }, { 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', model: '5600x', series: 'ryzen5600', @@ -455,9 +556,14 @@ export const Newegg: Store = { ], name: 'newegg', 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_json = await response.json(); - return response_json.MainItem !== undefined && response_json.MainItem.Instock === true; + return ( + response_json.MainItem !== undefined && + response_json.MainItem.Instock === true + ); } }; diff --git a/src/store/model/notebooksbilliger.ts b/src/store/model/notebooksbilliger.ts index 9612271d6d..3f66519525 100644 --- a/src/store/model/notebooksbilliger.ts +++ b/src/store/model/notebooksbilliger.ts @@ -4,221 +4,262 @@ export const Notebooksbilliger: Store = { labels: { inStock: { 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: { - container: 'form[name="cart_quantity"] span[class*="product-price__regular"]', + container: + 'form[name="cart_quantity"] span[class*="product-price__regular"]', euroFormat: true }, - outOfStock: [{ - container: '.warehouse', - text: ['liefertermin noch unbestimmt'] - }, - { - container: '.soldOut', - text: ['dieses produkt ist leider ausverkauft.'] - }, - { - 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.'] - }] + outOfStock: [ + { + container: '.warehouse', + text: ['liefertermin noch unbestimmt'] + }, + { + container: '.soldOut', + text: ['dieses produkt ist leider ausverkauft.'] + }, + { + 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.'] + } + ] }, links: [ { brand: 'test:brand', model: 'test:model', 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', model: 'ichill x3', 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', model: 'twin x2', 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', model: 'twin x2 oc', 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', model: 'founders edition', 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', model: 'founders edition', 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', model: 'phoenix', 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', model: 'phoenix gs', 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', model: 'uprising', 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', model: 'xlr8 rgb', 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', model: 'tuf', 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', model: 'twin edge', 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', model: 'twin edge oc', 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', model: 'phoenix gs', 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', model: 'eagle oc', 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', model: 'gaming oc', 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', model: 'ichill x3', 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', model: 'twin x2 oc', 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', model: 'gaming x trio', 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', model: 'founders edition', 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', model: 'founders edition', 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', model: 'gaming pro', 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', model: 'gaming pro oc', 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', model: 'xlr8 rgb', 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', model: 'xlr8 rgb', 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', model: 'rog strix', 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', model: 'rog strix oc', 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', model: 'aorus master', 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', model: 'founders edition', 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', model: 'founders edition', 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', model: 'gaming pro oc', 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', model: 'trinity', 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', diff --git a/src/store/model/novatech.ts b/src/store/model/novatech.ts index 17f0a88d06..55d1ab5f05 100644 --- a/src/store/model/novatech.ts +++ b/src/store/model/novatech.ts @@ -26,7 +26,8 @@ export const Novatech: Store = { brand: 'test:brand', model: 'test:model', 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: { @@ -39,11 +40,13 @@ export const Novatech: Store = { urls: [ { 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', - 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' } ] }, diff --git a/src/store/model/nvidia-api.ts b/src/store/model/nvidia-api.ts index fdf9620cad..2d685edb36 100644 --- a/src/store/model/nvidia-api.ts +++ b/src/store/model/nvidia-api.ts @@ -13,27 +13,227 @@ export interface NvidiaRegionInfo { } export const regionInfos = new Map([ - ['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'}], - ['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'}], + [ + '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' + } + ], + [ + '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 - ['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 = { diff --git a/src/store/model/nvidia.ts b/src/store/model/nvidia.ts index 2adab650db..e1e7bd6150 100644 --- a/src/store/model/nvidia.ts +++ b/src/store/model/nvidia.ts @@ -34,37 +34,43 @@ export const Nvidia: Store = { brand: 'nvidia', model: 'founders edition', 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', model: 'founders edition', 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', model: 'founders edition', 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', model: 'founders edition', 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', model: 'founders edition', 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', model: 'founders edition', 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' diff --git a/src/store/model/officedepot.ts b/src/store/model/officedepot.ts index 65f2775d9b..7287900623 100644 --- a/src/store/model/officedepot.ts +++ b/src/store/model/officedepot.ts @@ -20,19 +20,22 @@ export const OfficeDepot: Store = { brand: 'test:brand', model: 'test:model', 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', model: 'xlr8', 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', model: 'xlr8 rgb', 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' diff --git a/src/store/model/overclockers.ts b/src/store/model/overclockers.ts index c4cd787e4c..23a47d4911 100644 --- a/src/store/model/overclockers.ts +++ b/src/store/model/overclockers.ts @@ -21,7 +21,8 @@ export const Overclockers: Store = { brand: 'test:brand', model: 'test:model', 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: { @@ -34,7 +35,8 @@ export const Overclockers: Store = { urls: [ { 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', @@ -46,7 +48,8 @@ export const Overclockers: Store = { }, { 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' } ] }, diff --git a/src/store/model/pccomponentes.ts b/src/store/model/pccomponentes.ts index 81c659e1c9..a0da991c16 100644 --- a/src/store/model/pccomponentes.ts +++ b/src/store/model/pccomponentes.ts @@ -20,19 +20,22 @@ export const PCComponentes: Store = { brand: 'test:brand', model: 'test:model', 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', model: 'eagle oc', 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', model: 'ventus 3x oc', 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', @@ -44,105 +47,121 @@ export const PCComponentes: Store = { brand: 'gigabyte', model: 'gaming oc', 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', model: 'gaming x trio', 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', model: 'tuf oc', 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', model: 'rog strix oc', 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', model: 'xc3 black', 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', model: 'trinity', 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', model: 'xc3 ultra', 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', model: 'rog strix', 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', model: 'trinity oc', 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', model: 'vision oc', 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', model: 'xc3', 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', model: 'ftw3 ultra', 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', model: 'aorus master', 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', model: 'aorus xtreme', 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', model: 'ftw3', 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', model: 'xlr8 rgb', 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', model: 'xlr8', 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' }; - diff --git a/src/store/model/pny.ts b/src/store/model/pny.ts index ec4e44f997..85cd826963 100644 --- a/src/store/model/pny.ts +++ b/src/store/model/pny.ts @@ -10,7 +10,6 @@ export const Pny: Store = { container: 'span[itemprop="price"]', euroFormat: false } - }, links: [ { @@ -29,33 +28,37 @@ export const Pny: Store = { brand: 'pny', model: 'xlr8 rgb', 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', model: 'xlr8 rgb', 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', model: 'xlr8 rgb', 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', model: 'xlr8 rgb', 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', model: 'xlr8 rgb', 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' }; - diff --git a/src/store/model/proshop-de.ts b/src/store/model/proshop-de.ts index 8d40f6d659..a784ba3fdf 100644 --- a/src/store/model/proshop-de.ts +++ b/src/store/model/proshop-de.ts @@ -3,7 +3,8 @@ import {Store} from './store'; export const ProshopDE: Store = { labels: { maxPrice: { - container: '.site-currency-wrapper > span[class="site-currency-attention"]', + container: + '.site-currency-wrapper > span[class="site-currency-attention"]', euroFormat: true }, outOfStock: { @@ -279,4 +280,3 @@ export const ProshopDE: Store = { ], name: 'proshop-de' }; - diff --git a/src/store/model/proshop-dk.ts b/src/store/model/proshop-dk.ts index 858a2e088e..4868131218 100644 --- a/src/store/model/proshop-dk.ts +++ b/src/store/model/proshop-dk.ts @@ -7,7 +7,8 @@ export const ProshopDK: Store = { text: ['1-2 dages levering', 'fjernlager'] }, maxPrice: { - container: '.site-currency-wrapper > span[class="site-currency-attention"]', + container: + '.site-currency-wrapper > span[class="site-currency-attention"]', euroFormat: true }, outOfStock: { @@ -20,135 +21,156 @@ export const ProshopDK: Store = { brand: 'test:brand', model: 'test:model', 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', model: 'tuf gaming', 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', model: 'tuf gaming oc', 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', model: 'strix gaming', 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', model: 'strix gaming oc', 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', model: 'gaming x trio', 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', model: 'ventus 3x', 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', model: 'ventus 3x oc', 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', model: 'ichill 4x', 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', model: 'ichill 3x', 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', model: 'gaming oc', 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', model: 'eagle oc', 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', model: 'twin x2 oc', 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', model: 'vision oc', 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', model: 'aorus master', 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', model: 'tuf gaming', 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', model: 'tuf gaming oc', 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', model: 'strix gaming', 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', model: 'strix gaming oc', 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', model: 'gaming x trio', 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', model: 'aorus master', 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', model: 'aorus xtreme', 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' }; - diff --git a/src/store/model/scan.ts b/src/store/model/scan.ts index 08bdf99eae..863c2a360a 100644 --- a/src/store/model/scan.ts +++ b/src/store/model/scan.ts @@ -4,10 +4,12 @@ import {getProductLinksBuilder} from './helpers/card'; export const Scan: Store = { disableAdBlocker: true, labels: { - captcha: [{ - container: '#challenge-form', - text: ['hcaptcha_submit'] - }], + captcha: [ + { + container: '#challenge-form', + text: ['hcaptcha_submit'] + } + ], inStock: { container: '.buyPanel .priceAvailability', text: ['add to basket', 'in stock'] @@ -26,7 +28,8 @@ export const Scan: Store = { brand: 'test:brand', model: 'test:model', 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', @@ -52,15 +55,18 @@ export const Scan: Store = { urls: [ { 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', - 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', - 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' } ] }, diff --git a/src/store/model/store.ts b/src/store/model/store.ts index 140b95e2a9..399057df18 100644 --- a/src/store/model/store.ts +++ b/src/store/model/store.ts @@ -10,10 +10,93 @@ export type Pricing = { 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 = { - 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; series: Series; model: string; @@ -34,7 +117,7 @@ export type Labels = { maxPrice?: Pricing; }; -export type StatusCodeRangeArray = Array<(number | [number, number])>; +export type StatusCodeRangeArray = Array; export type Store = { realTimeInventoryLookup?: (itemNumber: string) => Promise; diff --git a/src/store/model/target.ts b/src/store/model/target.ts index 34c4a5e21e..dafe4e7c97 100644 --- a/src/store/model/target.ts +++ b/src/store/model/target.ts @@ -27,7 +27,8 @@ export const Target: Store = { brand: 'sony', model: 'ps5 digital', 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', diff --git a/src/store/model/very.ts b/src/store/model/very.ts index d0fc9d63d4..35d58dfb9f 100644 --- a/src/store/model/very.ts +++ b/src/store/model/very.ts @@ -22,7 +22,8 @@ export const Very: Store = { brand: 'test:brand', model: 'test:model', 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: { @@ -34,9 +35,11 @@ export const Very: Store = { const titleElement = productElement.find('.productTitle').first(); const title = titleElement.text()?.replace(/\n/g, ' ').trim(); - if (!title || ['RTX', series] - .map(x => title.toLowerCase().includes(x.toLowerCase())) - .filter(x => !x).length > 0 + if ( + !title || + ['RTX', series] + .map((x) => title.toLowerCase().includes(x.toLowerCase())) + .filter((x) => !x).length > 0 ) { continue; } @@ -67,15 +70,18 @@ export const Very: Store = { urls: [ { 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', - 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', - 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' } ] }, diff --git a/src/store/model/zotac.ts b/src/store/model/zotac.ts index 48447342ce..5c13c1c657 100644 --- a/src/store/model/zotac.ts +++ b/src/store/model/zotac.ts @@ -17,27 +17,30 @@ export const Zotac: Store = { brand: 'test:brand', model: 'test:model', 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', model: 'trinity', 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', model: 'trinity oc', 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', model: 'trinity', 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' }; - diff --git a/src/types/play-sound.d.ts b/src/types/play-sound.d.ts index 8a9dd537e5..1c96fdcff9 100644 --- a/src/types/play-sound.d.ts +++ b/src/types/play-sound.d.ts @@ -11,7 +11,12 @@ declare module 'play-sound' { export interface PlaySound { 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 { diff --git a/src/types/puppeteer-extra-plugin-block-resources.d.ts b/src/types/puppeteer-extra-plugin-block-resources.d.ts index e8b2fa26cb..319631e34d 100644 --- a/src/types/puppeteer-extra-plugin-block-resources.d.ts +++ b/src/types/puppeteer-extra-plugin-block-resources.d.ts @@ -2,19 +2,19 @@ declare module 'puppeteer-extra-plugin-block-resources' { import {PuppeteerExtraPlugin} from 'puppeteer-extra'; export type ResourceType = - 'document' | - 'eventsource' | - 'fetch' | - 'font' | - 'image' | - 'manifest' | - 'media' | - 'other' | - 'script' | - 'stylesheet' | - 'texttrack' | - 'websocket' | - 'xhr'; + | 'document' + | 'eventsource' + | 'fetch' + | 'font' + | 'image' + | 'manifest' + | 'media' + | 'other' + | 'script' + | 'stylesheet' + | 'texttrack' + | 'websocket' + | 'xhr'; export interface Options { availableTypes?: Set; diff --git a/src/types/pushbullet.d.ts b/src/types/pushbullet.d.ts index 5435c8c47c..3ade5360a4 100644 --- a/src/types/pushbullet.d.ts +++ b/src/types/pushbullet.d.ts @@ -1,7 +1,9 @@ declare module '@jef/pushbullet' { export type DeviceParams = string | number | Record; - 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 { active?: boolean; @@ -16,7 +18,11 @@ declare module '@jef/pushbullet' { export interface PushBulletStream { connect: () => 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 { @@ -25,11 +31,31 @@ declare module '@jef/pushbullet' { devices(options: ListOptions, callback: PushBulletCallback); devices(callback: PushBulletCallback); createDevice(options: Record, callback: PushBulletCallback); - updateDevice(deviceIden: string, deviceOptions: Record, callback: PushBulletCallback); + updateDevice( + deviceIden: string, + deviceOptions: Record, + callback: PushBulletCallback + ); deleteDevice(deviceIden: string, callback: PushBulletCallback); - note(deviceParams: DeviceParams, 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); + note( + deviceParams: DeviceParams, + 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); deletePush(pushIden: DeviceParams, callback: PushBulletCallback); deleteAllPushes(callback: PushBulletCallback); @@ -50,9 +76,15 @@ declare module '@jef/pushbullet' { unmuteChat(chatIden: string, callback: PushBulletCallback); sendSMS(options: Record, callback: PushBulletCallback); sendClipboard(options: Record, callback: PushBulletCallback); - dismissEphemeral(options: Record, callback: PushBulletCallback); + dismissEphemeral( + options: Record, + callback: PushBulletCallback + ); stream(): PushBulletStream; - enableEncryption(encryptionPassword: string, userIden: string): PushBulletStream; + enableEncryption( + encryptionPassword: string, + userIden: string + ): PushBulletStream; } export default PushBullet; diff --git a/src/types/pushover-notifications.d.ts b/src/types/pushover-notifications.d.ts index cdb4fe15bb..9beb23ad89 100644 --- a/src/types/pushover-notifications.d.ts +++ b/src/types/pushover-notifications.d.ts @@ -1,30 +1,32 @@ 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 = - 'pushover' | - 'bike' | - 'bugle' | - 'cashregister' | - 'classical' | - 'cosmic' | - 'falling' | - 'gamelan' | - 'incoming' | - 'intermission' | - 'magic' | - 'mechanical' | - 'pianobar' | - 'siren' | - 'spacealarm' | - 'tugboat' | - 'alien' | - 'climb' | - 'persistent' | - 'echo' | - 'updown' | - 'vibrate' | - 'none'; + | 'pushover' + | 'bike' + | 'bugle' + | 'cashregister' + | 'classical' + | 'cosmic' + | 'falling' + | 'gamelan' + | 'incoming' + | 'intermission' + | 'magic' + | 'mechanical' + | 'pianobar' + | 'siren' + | 'spacealarm' + | 'tugboat' + | 'alien' + | 'climb' + | 'persistent' + | 'echo' + | 'updown' + | 'vibrate' + | 'none'; export interface PushoverOptions { token: string; diff --git a/src/util.ts b/src/util.ts index 1c45ddfe8a..98d1137385 100644 --- a/src/util.ts +++ b/src/util.ts @@ -6,16 +6,19 @@ import {logger} from './logger'; export function getSleepTime(store: Store) { 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) { - return new Promise(resolve => { + return new Promise((resolve) => { setTimeout(resolve, ms); }); } -export function isStatusCodeInRange(statusCode: number, range: StatusCodeRangeArray) { +export function isStatusCodeInRange( + statusCode: number, + range: StatusCodeRangeArray +) { for (const value of range) { let min: number; let max: number; @@ -37,7 +40,7 @@ export function isStatusCodeInRange(statusCode: number, range: StatusCodeRangeAr export async function usingResponse( browser: Browser, url: string, - cb: (response: (Response | null), page: Page, browser: Browser) => Promise + cb: (response: Response | null, page: Page, browser: Browser) => Promise ): Promise { return usingPage(browser, async (page, browser) => { const response = await page.goto(url, {waitUntil: 'domcontentloaded'}); @@ -46,7 +49,10 @@ export async function usingResponse( }); } -export async function usingPage(browser: Browser, cb: (page: Page, browser: Browser) => Promise): Promise { +export async function usingPage( + browser: Browser, + cb: (page: Page, browser: Browser) => Promise +): Promise { const page = await browser.newPage(); page.setDefaultNavigationTimeout(config.page.timeout); await page.setUserAgent(getRandomUserAgent()); @@ -71,5 +77,7 @@ export async function closePage(page: Page) { } 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) + ]; } diff --git a/src/web/index.ts b/src/web/index.ts index 1a8d6b4990..bdd7a779d7 100644 --- a/src/web/index.ts +++ b/src/web/index.ts @@ -1,13 +1,19 @@ import {IncomingMessage, Server, ServerResponse, createServer} from 'http'; import {config, setConfig} from '../config'; 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'; const approot = join(__dirname, '../../'); const webroot = join(approot, './web'); -const contentTypeMap: { [key: string]: string } = { +const contentTypeMap: {[key: string]: string} = { css: 'text/css', htm: 'text/html', html: 'text/html', @@ -19,20 +25,27 @@ const contentTypeMap: { [key: string]: string } = { txt: 'text/plain' }; -function sendFile(response: ServerResponse, path: string, relativeTo: string = webroot) { +function sendFile( + response: ServerResponse, + path: string, + relativeTo: string = webroot +) { path = normalize(`./${path}`); const fsPath = join(relativeTo, path); try { const stream = createReadStream(fsPath); - stream.on('error', error => { + stream.on('error', (error) => { sendError(response, error.message); }); const pathSplit = path.split('.'); 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.pipe(response); @@ -58,7 +71,11 @@ function sendConfig(response: ServerResponse) { sendJSON(response, config); } -function handleAPI(request: IncomingMessage, response: ServerResponse, urlComponents: string[]) { +function handleAPI( + request: IncomingMessage, + response: ServerResponse, + urlComponents: string[] +) { if (urlComponents.length < 2) { sendError(response, 'No API route specified', 400); return; @@ -68,7 +85,7 @@ function handleAPI(request: IncomingMessage, response: ServerResponse, urlCompon case 'config': if (request.method === 'PUT') { const data: string[] = []; - request.on('data', chunk => { + request.on('data', (chunk) => { data.push(chunk); }); request.on('end', () => { @@ -76,7 +93,7 @@ function handleAPI(request: IncomingMessage, response: ServerResponse, urlCompon try { setConfig(JSON.parse(data.join(''))); updateStores(); - } catch { } + } catch {} sendConfig(response); }); @@ -158,7 +175,7 @@ export async function startAPIServer() { } export async function stopAPIServer() { - return new Promise(resolve => { + return new Promise((resolve) => { if (server) { server.close(resolve); server = undefined;