-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
nvidia.ts
83 lines (68 loc) 路 2.05 KB
/
nvidia.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import {NvidiaRegionInfo, regionInfos} from '../nvidia-api';
import {Browser} from 'puppeteer';
import {Config} from '../../../config';
import {Link} from '../store';
import {NvidiaCart} from './nvidia-cart';
import {timestampUrlParameter} from '../../timestamp-url-parameter';
function getRegionInfo(): NvidiaRegionInfo {
let country = Config.store.country;
if (!regionInfos.has(country)) {
country = 'usa';
}
const regionInfo = regionInfos.get(country);
if (!regionInfo) {
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);
}
let cart: NvidiaCart;
export function generateSetupAction() {
return async (browser: Browser) => {
cart = new NvidiaCart(browser);
if (Config.browser.open) {
cart.keepAlive();
}
};
}
export function generateOpenCartAction(id: number, cardName: string) {
return async () => {
const url = await cart.addToCard(id, cardName);
return url;
};
}
export function generateLinks(): Link[] {
const {drLocale, fe3080Id, fe3090Id, fe2060SuperId, currency} = getRegionInfo();
const links: Link[] = [];
if (fe2060SuperId) {
links.push({
brand: 'test:brand',
model: 'test:model',
openCartAction: generateOpenCartAction(fe2060SuperId, 'TEST CARD debug'),
series: 'test:series',
url: nvidiaStockUrl(fe2060SuperId, drLocale, currency)
});
}
if (fe3080Id) {
links.push({
brand: 'nvidia',
model: 'founders edition',
openCartAction: generateOpenCartAction(fe3080Id, 'nvidia founders edition 3080'),
series: '3080',
url: nvidiaStockUrl(fe3080Id, drLocale, currency)
});
}
if (fe3090Id) {
links.push({
brand: 'nvidia',
model: 'founders edition',
openCartAction: generateOpenCartAction(fe3090Id, 'nvidia founders edition 3090'),
series: '3090',
url: nvidiaStockUrl(fe3090Id, drLocale, currency)
});
}
return links;
}