mirror of
https://github.com/opelly27/streetmerchant.git
synced 2026-05-20 02:57:34 +00:00
refactor: easier comparables, fix audits (#614)
This commit is contained in:
+1
-1
@@ -1 +1 @@
|
||||
14.13.1
|
||||
15.0.1
|
||||
|
||||
@@ -44,7 +44,7 @@ You do not need any computer skills, smarts, or anything of that nature. You are
|
||||
|
||||
#### Native installation
|
||||
|
||||
- [Node.js 14](https://nodejs.org/en/)
|
||||
- [Node.js 15](https://nodejs.org/en/)
|
||||
- [git](https://git-scm.com/)
|
||||
- Clone this project `git clone https://github.com/jef/nvidia-snatcher.git`
|
||||
- Run `npm install`
|
||||
|
||||
Generated
+12563
-4169
File diff suppressed because it is too large
Load Diff
+4
-4
@@ -3,7 +3,8 @@
|
||||
"description": "🔮 For all your Nvidia needs",
|
||||
"main": "src/index.ts",
|
||||
"scripts": {
|
||||
"build": "rimraf ./build && tsc",
|
||||
"all": "npm run build && npm run lint",
|
||||
"build": "tsc",
|
||||
"lint": "xo",
|
||||
"lint:fix": "xo --fix",
|
||||
"start": "npm run build && node build/index.js",
|
||||
@@ -31,7 +32,7 @@
|
||||
"messaging-api-telegram": "^1.0.1",
|
||||
"mqtt": "^4.2.3",
|
||||
"node-notifier": "^8.0.0",
|
||||
"node-pagerduty": "^1.3.4",
|
||||
"node-pagerduty": "^1.2.0",
|
||||
"nodemailer": "^6.4.14",
|
||||
"open": "^7.3.0",
|
||||
"play-sound": "^1.1.3",
|
||||
@@ -58,7 +59,6 @@
|
||||
"@types/twitter": "^1.7.0",
|
||||
"husky": "^4.3.0",
|
||||
"nodemon": "^2.0.6",
|
||||
"rimraf": "^3.0.2",
|
||||
"ts-node": "^9.0.0",
|
||||
"typescript": "^4.0.5",
|
||||
"webpack": "^5.3.0",
|
||||
@@ -73,7 +73,7 @@
|
||||
},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"pre-commit": "npm run lint"
|
||||
"pre-commit": "npm run all"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import {usingResponse} from '../util';
|
||||
|
||||
function addNewLinks(store: Store, links: Link[], series: Series) {
|
||||
if (links.length === 0) {
|
||||
logger.warn(Print.message('NO STORE LINKS FOUND', series, store, true));
|
||||
logger.debug(Print.message('NO STORE LINKS FOUND', series, store, true));
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -19,7 +19,7 @@ function addNewLinks(store: Store, links: Link[], series: Series) {
|
||||
return;
|
||||
}
|
||||
|
||||
logger.info(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);
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
import {Browser, Page, Response} from 'puppeteer';
|
||||
import {Link, Store} from './model';
|
||||
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';
|
||||
@@ -24,7 +24,7 @@ const linkBuilderLastRunTimes: Record<string, number> = {};
|
||||
* @param store Vendor of graphics cards.
|
||||
*/
|
||||
async function lookup(browser: Browser, store: Store) {
|
||||
if (config.store.stores.length > 0 && !config.store.stores.find(foundStore => foundStore.name === store.name)) {
|
||||
if (!getStores().has(store.name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
+58
-33
@@ -44,6 +44,7 @@ import {ProshopDE} from './proshop-de';
|
||||
import {ProshopDK} from './proshop-dk';
|
||||
import {Saturn} from './saturn';
|
||||
import {Scan} from './scan';
|
||||
import {Store} from './store';
|
||||
import {Very} from './very';
|
||||
import {Zotac} from './zotac';
|
||||
import {logger} from '../../logger';
|
||||
@@ -99,35 +100,73 @@ export const storeList = new Map([
|
||||
]);
|
||||
|
||||
const brands = new Set();
|
||||
const series = new Set();
|
||||
const models = new Set();
|
||||
const series = new Set();
|
||||
const stores = new Map();
|
||||
|
||||
for (const storeData of config.store.stores) {
|
||||
const store = storeList.get(storeData.name);
|
||||
if (store) {
|
||||
store.minPageSleep = storeData.minPageSleep;
|
||||
store.maxPageSleep = storeData.maxPageSleep;
|
||||
} else {
|
||||
logger.warn(`No store named ${storeData.name}, skipping.`);
|
||||
function filterBrandsSeriesModels(stores: Map<string, Store>) {
|
||||
brands.clear();
|
||||
series.clear();
|
||||
models.clear();
|
||||
|
||||
for (const store of stores.values()) {
|
||||
for (const link of store.links) {
|
||||
brands.add(link.brand);
|
||||
series.add(link.series);
|
||||
models.add(link.model);
|
||||
}
|
||||
|
||||
if (store.minPageSleep === undefined) {
|
||||
store.minPageSleep = defaultStoreData.minPageSleep;
|
||||
}
|
||||
|
||||
if (store.maxPageSleep === undefined) {
|
||||
store.maxPageSleep = defaultStoreData.maxPageSleep;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const store of storeList.values()) {
|
||||
for (const link of store.links) {
|
||||
brands.add(link.brand);
|
||||
series.add(link.series);
|
||||
models.add(link.model);
|
||||
function printConfig() {
|
||||
if (config.store.stores.length > 0) {
|
||||
logger.info(`ℹ selected stores: ${config.store.stores.map(store => store.name).join(', ')}`);
|
||||
}
|
||||
|
||||
if (store.minPageSleep === undefined) {
|
||||
store.minPageSleep = defaultStoreData.minPageSleep;
|
||||
if (config.store.showOnlyBrands.length > 0) {
|
||||
logger.info(`ℹ selected brands: ${config.store.showOnlyBrands.join(', ')}`);
|
||||
}
|
||||
|
||||
if (store.maxPageSleep === undefined) {
|
||||
store.maxPageSleep = defaultStoreData.maxPageSleep;
|
||||
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(', ')}`);
|
||||
}
|
||||
|
||||
if (config.store.showOnlySeries.length > 0) {
|
||||
logger.info(`ℹ selected series: ${config.store.showOnlySeries.join(', ')}`);
|
||||
}
|
||||
}
|
||||
|
||||
export function updateStores() {
|
||||
stores.clear();
|
||||
|
||||
for (const storeData of config.store.stores) {
|
||||
const store = storeList.get(storeData.name);
|
||||
|
||||
if (store) {
|
||||
stores.set(storeData.name, store);
|
||||
store.minPageSleep = storeData.minPageSleep;
|
||||
store.maxPageSleep = storeData.maxPageSleep;
|
||||
} else {
|
||||
logger.warn(`No store named ${storeData.name}, skipping.`);
|
||||
}
|
||||
}
|
||||
|
||||
filterBrandsSeriesModels(stores);
|
||||
printConfig();
|
||||
}
|
||||
|
||||
updateStores();
|
||||
|
||||
export function getAllBrands() {
|
||||
return Array.from(brands);
|
||||
}
|
||||
@@ -140,22 +179,8 @@ export function getAllModels() {
|
||||
return Array.from(models);
|
||||
}
|
||||
|
||||
if (config.store.stores.length > 0) {
|
||||
logger.info(`ℹ selected stores: ${config.store.stores.map(store => store.name).join(', ')}`);
|
||||
}
|
||||
|
||||
if (config.store.showOnlyBrands.length > 0) {
|
||||
logger.info(`ℹ selected brands: ${config.store.showOnlyBrands.join(', ')}`);
|
||||
}
|
||||
|
||||
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(', ')}`);
|
||||
}
|
||||
|
||||
if (config.store.showOnlySeries.length > 0) {
|
||||
logger.info(`ℹ selected series: ${config.store.showOnlySeries.join(', ')}`);
|
||||
export function getStores() {
|
||||
return stores;
|
||||
}
|
||||
|
||||
export * from './store';
|
||||
|
||||
+2
-1
@@ -1,7 +1,7 @@
|
||||
import {IncomingMessage, Server, ServerResponse, createServer} from 'http';
|
||||
import {config, setConfig} from '../config';
|
||||
import {createReadStream, readdir} from 'fs';
|
||||
import {getAllBrands, getAllModels, getAllSeries, storeList} from '../store/model';
|
||||
import {getAllBrands, getAllModels, getAllSeries, storeList, updateStores} from '../store/model';
|
||||
import {join, normalize} from 'path';
|
||||
|
||||
const approot = join(__dirname, '../../');
|
||||
@@ -75,6 +75,7 @@ function handleAPI(request: IncomingMessage, response: ServerResponse, urlCompon
|
||||
// We ignore errors, client just sent wrong data...
|
||||
try {
|
||||
setConfig(JSON.parse(data.join('')));
|
||||
updateStores();
|
||||
} catch { }
|
||||
|
||||
sendConfig(response);
|
||||
|
||||
@@ -46,6 +46,9 @@
|
||||
if (subfield) {
|
||||
obj = {};
|
||||
obj[subfield] = htmlElement.value;
|
||||
if (id === 'modelList') {
|
||||
obj['series'] = '';
|
||||
}
|
||||
} else {
|
||||
obj = htmlElement.value
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user