Compare commits

...

220 Commits

Author SHA1 Message Date
github-actions[bot] bc2272e59a chore: release 3.2.0 (#980) 2020-12-06 00:35:45 -05:00
Michael Pietersen 888b5225b8 chore(bestbuy): 3060ti product links (#1197) 2020-12-06 00:34:03 -05:00
RDFurman 0c59d1e232 docs: add xfx brand (#1182) 2020-12-06 00:01:09 -05:00
Jef LeCompte 15ec12b0a3 feat(notification): add price to links (#1209)
fix(store): label selection ordering and pricing
fix(nvidia): deprecation notice removed outside of usa
fix(amazon): maxPrice selector

Resolves #1188
Resolves #673
Resolves #1187
2020-12-05 23:22:58 -05:00
Jef LeCompte f7b32e8ac5 feat(store): add custom labels for links (#1183)
Fixes #1132
Fixes #1163
2020-12-05 07:50:17 -05:00
Jef LeCompte 9bf33eceda chore: update issue templates 2020-12-04 18:53:50 -05:00
Jef LeCompte 14cbd5a05b fix(amazon-de): inStock selector
Fixes: #1178
2020-12-04 18:21:26 -05:00
Jef LeCompte ec0d9f50cb chore(deps): update 2020-12-04 17:54:34 -05:00
Jef LeCompte 4616f60766 ci: add stale cron job (#1176) 2020-12-04 17:52:43 -05:00
nazmi 36e38068d8 feat(store): add awd(uk), add 3060ti link builders (#1114) 2020-12-04 17:30:55 -05:00
Ben Turner ca5553cb20 fix(scan): links builder (#1161) 2020-12-04 17:29:12 -05:00
Michael Pietersen 34a8fd475a chore(microcenter): add 3060ti (#1171) 2020-12-04 17:28:27 -05:00
RDFurman 0569629dc8 chore(memex): add 3080 and 6800xt (#1168) 2020-12-04 17:23:55 -05:00
desigi 09f0236086 feat(store): add 3060ti to newegg-ca, canadacomputer, memoryexpress (#1172)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-04 17:21:20 -05:00
Jef LeCompte e67d97fe93 chore: update selectors, remove api lookup for now
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-04 17:05:28 -05:00
fnk93 75ee95b221 feat(store): add el corte ingles (#1107) 2020-12-04 10:49:53 -05:00
Darkgran1 3c727f1c9a chore(store): add 3060ti to link builders (#1156) 2020-12-04 10:46:43 -05:00
Sam Marshall 80e166c15d docs: add cd step (#1157) 2020-12-04 10:45:21 -05:00
jaw20 3b4fe78e95 chore(amazon): adds most available AIB cards (#1140) 2020-12-04 10:44:11 -05:00
dependabot[bot] ac8785d1e9 chore(deps): bump amannn/action-semantic-pull-request from v2.1.0 to v2.1.1 (#1150)
Bumps [amannn/action-semantic-pull-request](https://github.com/amannn/action-semantic-pull-request) from v2.1.0 to v2.1.1.
- [Release notes](https://github.com/amannn/action-semantic-pull-request/releases)
- [Changelog](https://github.com/amannn/action-semantic-pull-request/blob/master/CHANGELOG.md)
- [Commits](https://github.com/amannn/action-semantic-pull-request/compare/v2.1.0...153d429823cc133a83ab5d92065465a5c2f0d8b7)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-04 01:26:16 -05:00
SamP301 06f3aafae6 fix(bestbuy-ca): model always indicating in stock (#1145) 2020-12-04 01:25:47 -05:00
jaw20 f2ae423fa8 fix(store): removes unnecessary newegg links from bestbuy (#1126)
Fixes #1119
2020-12-03 12:47:08 -05:00
clreinki cbad0846af chore(newegg): add 3060ti models (#1112) 2020-12-03 12:44:37 -05:00
trinityhades a3a94c19d9 chore(zotac): add 3080 amp holo (#1133) 2020-12-03 12:29:53 -05:00
Jef LeCompte 6fd023e81e fix(amazon): price and cart buttons
Resolves #1125

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-03 11:55:07 -05:00
Jef LeCompte e836acf1e9 docs: update COUNTRY information 2020-12-03 11:37:56 -05:00
Jef LeCompte 5bbdfa2abc fix(smythstoys): add out of stock label
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-02 17:47:06 -05:00
Jef LeCompte 1ed0593767 feat(store): add smythstoys
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-02 17:31:10 -05:00
Jef LeCompte cbc43304bf fix(amazon-de): remove xbox cart links
Fixes #1095

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-02 16:58:05 -05:00
Jef LeCompte feddac76d3 fix(newegg): maxPrice selector using used price
Fixes #1052

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-02 16:51:53 -05:00
Jef LeCompte 0e8774b1d0 chore(newegg): add big navi aibs
Part of #931

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-02 16:46:04 -05:00
Jef LeCompte 0e5edee683 chore(store): add big navi aibs
Resolves #931 #937 #1098

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-02 16:38:32 -05:00
fnk93 0b11238370 fix(store): add backoffStatusCodes and new captcha container (#1110) 2020-12-02 16:28:31 -05:00
fnk93 6de8c4a5ee feat(store): add amazon-de-warehouse (#1102) 2020-12-02 16:27:42 -05:00
fnk93 cf70f1ff4f feat(store): add spielegrotte (#1056) 2020-12-02 16:25:39 -05:00
Jef LeCompte a0a961aa5b chore(lint): ignore max 5 params
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-02 16:14:52 -05:00
fnk93 7d29ef80ba feat(store): add Medimax (#1057) 2020-12-02 16:08:53 -05:00
fnk93 e198e44613 fix(store): update euroFormat for expert and otto (#1108) 2020-12-02 16:08:09 -05:00
fnk93 f7b753334f chore(store): update eu stores (#1100) 2020-12-02 16:03:33 -05:00
Jef LeCompte 21e74cfe76 fix(walmart): instock container and add test:series
Related #1106

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-02 15:51:02 -05:00
Joseph Sortino ea456116da chore(bandh): add 3060ti (#1104) 2020-12-02 13:28:35 -05:00
dependabot[bot] a0a0ca8755 chore(deps-dev): bump @types/async from 3.2.4 to 3.2.5 (#1054)
Bumps [@types/async](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/async) from 3.2.4 to 3.2.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/async)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-02 13:19:28 -05:00
dependabot[bot] c26bd8f06a chore(deps): bump GoogleCloudPlatform/release-please-action from v2.9.3 to v2.10 (#1083)
Bumps [GoogleCloudPlatform/release-please-action](https://github.com/GoogleCloudPlatform/release-please-action) from v2.9.3 to v2.10.
- [Release notes](https://github.com/GoogleCloudPlatform/release-please-action/releases)
- [Changelog](https://github.com/google-github-actions/release-please-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/GoogleCloudPlatform/release-please-action/compare/v2.9.3...ea92f88c9a810e645f40f778ad87b21ffb3422ca)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-02 13:19:00 -05:00
Foxlet c5799fddc7 chore(zotac): add 3060ti, 3070 (#1094) 2020-12-02 13:18:49 -05:00
fnk93 af96c5f2e8 feat(store): add Otto (#1096) 2020-12-02 13:16:19 -05:00
GeorgSchessler 2fc018bbb2 chore(mediamarkt): add 3060ti (#1089) 2020-12-02 13:14:43 -05:00
GeorgSchessler a72a35c755 chore(saturn): add 3060ti (#1091) 2020-12-02 13:13:59 -05:00
fnk93 202698f917 feat(store): add expert (#1105) 2020-12-02 13:13:25 -05:00
Jef LeCompte d7f242780e feat(topachat): add maxPrice
Closes #1097

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-02 12:19:01 -05:00
Jef LeCompte b2f5c1a3ed feat(store): add argos with ps5
Updated env-example
Add max price for test series

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-01 23:56:15 -05:00
Jef LeCompte 29478bff2d feat(bestbuy-ca): add 3060ti cards
Update test matches

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-01 23:08:24 -05:00
Jef LeCompte beb50696fb chore: change 3060 to 3060ti
Add to `README`
Update test:series for bestbuy

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-12-01 22:44:33 -05:00
Mark Dietzer 490d44e1fd feat: add proxy rotation (settable per store) (#1026) 2020-12-01 22:25:48 -05:00
Shervin Mortazavi 65df944973 fix(bestbuy-ca): replace old evga xc3 ultra (#1058) 2020-12-01 18:59:08 -05:00
fnk93 ce43654847 chore(cyberport): remove xbox/ps5 (#1065) 2020-12-01 18:26:08 -05:00
petertdinh e9a39c4092 feat(bestbuy): add 3060 series (#1074) 2020-12-01 18:22:07 -05:00
DasGinger 4bccc6b407 dics: correct model values for xbox (#1051) 2020-11-30 23:34:25 -05:00
Jef LeCompte 37d62ebcd5 docs: punctuation 2020-11-30 20:38:25 -05:00
Jef LeCompte af080f376d docs: add more faq 2020-11-30 20:37:38 -05:00
Joseph Sortino 19eece18dc feat(store): add antonline store (#1042) 2020-11-30 17:01:09 -05:00
fnk93 1774afc1c3 feat(store): add Euronics DE (#1045) 2020-11-30 17:00:30 -05:00
fnk93 79a3f33150 feat(store): add Gamestop DE (#1046) 2020-11-30 17:00:03 -05:00
Marcel Zobus 796c2a52ac chore(amd-de): add rx6800xt (#1044) 2020-11-30 16:59:09 -05:00
fnk93 0b60d3cf9a chore(store): add xbox/ps5 to eu stores (#1047) 2020-11-30 16:58:27 -05:00
dependabot[bot] fb696bf85a chore(deps-dev): bump webpack from 5.6.0 to 5.9.0 (#1031)
Bumps [webpack](https://github.com/webpack/webpack) from 5.6.0 to 5.9.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.6.0...v5.9.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-30 12:12:58 -05:00
dependabot[bot] 0b8e0d498c chore(deps): bump @slack/web-api from 5.13.0 to 5.14.0 (#1032)
Bumps [@slack/web-api](https://github.com/slackapi/node-slack-sdk) from 5.13.0 to 5.14.0.
- [Release notes](https://github.com/slackapi/node-slack-sdk/releases)
- [Commits](https://github.com/slackapi/node-slack-sdk/compare/@slack/web-api@5.13.0...@slack/web-api@5.14.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-30 12:12:46 -05:00
MrMcChewy 8ecba2db96 chore(microcenter): add 3070 models (#1030) 2020-11-30 09:27:40 -05:00
xeaon eb176d1735 chore(caseking): add rx6800xt (#1028) 2020-11-30 09:25:36 -05:00
xeaon bea26450bf chore(alternate): add rx6800xt (#1027) 2020-11-30 09:20:38 -05:00
Foxlet 8c82705dd3 chore(amd): add rx6800 (#926) 2020-11-30 00:55:01 -05:00
Juan Francisco Lopez Jimenez feae978de9 feat(store): add wipoid store (#1018)
Co-authored-by: nakyl <nakyl@hotmail.com>
2020-11-30 00:54:06 -05:00
JP Confessor 5e6159b994 chore(bestbuy-ca): add ps5 console (#1020) 2020-11-30 00:52:51 -05:00
Luca Rinaldi 30a51a38be feat(store): add ePrice store (#1016)
feat: add ps5 max price
fix: typo of `MAX_PRICE_SERIES_CORSAIR_SF` on .env-example
2020-11-29 10:44:14 -05:00
Luca Rinaldi de7036c7cc feat(store): update the italian store links (#1002) 2020-11-28 21:58:00 -05:00
Yuheng Ouyang a79ce6f406 chore(store): add amd (ca) (#1006) 2020-11-28 21:55:25 -05:00
dependabot[bot] 0b4966e452 chore(deps-dev): bump @types/node from 14.14.9 to 14.14.10 (#946) 2020-11-28 12:16:13 -05:00
dependabot[bot] be48520469 chore(deps): bump twitch from 4.3.1 to 4.3.2 (#944) 2020-11-28 12:16:01 -05:00
dependabot[bot] d2efb91de4 chore(deps): bump mqtt from 4.2.5 to 4.2.6 (#947) 2020-11-28 12:15:39 -05:00
dependabot[bot] a519a79ee7 chore(deps): bump twitch-chat-client from 4.3.0 to 4.3.2 (#943) 2020-11-28 12:10:54 -05:00
dependabot[bot] 7db79345a0 chore(deps): bump GoogleCloudPlatform/release-please-action from v2.7.0 to v2.9.3 (#942) 2020-11-28 12:09:52 -05:00
Luca Rinaldi b28bf73157 docs: update supported stores (#981) 2020-11-28 12:07:40 -05:00
Yuheng Ouyang 11b6316371 chore(newegg-ca): ad amd rx 6000 aib cards (#930) 2020-11-28 12:07:13 -05:00
MrMcChewy 10ce2db9ae chore(microcenter): add Strix OC (#992) 2020-11-28 12:02:23 -05:00
joslynesser 364c6c25df feat(proxy): socks5 support (#933) 2020-11-27 14:18:23 -05:00
Jean-Sébastien TRILLE a8d9c033b6 chore(store): Added RX6800 series to ccl store (#935) 2020-11-27 14:15:00 -05:00
eddwatts 7a441b4b65 chore(store): add 3070 series currys (#948) 2020-11-27 14:13:33 -05:00
eddwatts 09238da69c chore(store): add 6800 & 6800xt cards to scan (#950) 2020-11-27 14:13:06 -05:00
eddwatts 4d8700e856 chore(store): add 6800 & 6800xt cards to ebuyer (#951) 2020-11-27 14:12:37 -05:00
eddwatts 1ee9d38b32 chore(store): add 6800 & 6800xt cards to overclockers (#952) 2020-11-27 14:12:08 -05:00
Rees Varney db18157a49 fix: related products being picked up on scan (#954) 2020-11-27 14:11:28 -05:00
Enrico Martelli 3286d624a1 chore(store): add amd-it store and RX 6800 XT (#974) 2020-11-27 14:09:31 -05:00
Luca Rinaldi f663579f3d feat(store): add some italian stores with ps5 links (#976) 2020-11-27 14:08:34 -05:00
dependabot[bot] 20e8746748 chore(deps): bump twitch-auth from 4.3.0 to 4.3.1 (#908)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-24 16:50:41 -05:00
dependabot[bot] d0839beffe chore(deps): bump twitch from 4.3.0 to 4.3.1 (#910)
Bumps [twitch](https://github.com/d-fischer/twitch/tree/HEAD/packages/twitch) from 4.3.0 to 4.3.1.
- [Release notes](https://github.com/d-fischer/twitch/releases)
- [Commits](https://github.com/d-fischer/twitch/commits/v4.3.1/packages/twitch)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-24 16:45:55 -05:00
dependabot[bot] 07b6b340f9 chore(deps): bump GoogleCloudPlatform/release-please-action from v2.6.0 to v2.7.0 (#897)
Bumps [GoogleCloudPlatform/release-please-action](https://github.com/GoogleCloudPlatform/release-please-action) from v2.6.0 to v2.7.0.
- [Release notes](https://github.com/GoogleCloudPlatform/release-please-action/releases)
- [Changelog](https://github.com/google-github-actions/release-please-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/GoogleCloudPlatform/release-please-action/compare/v2.6.0...562cbbb6314482b22af9cd42cd3adf4159e4c705)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-24 16:45:19 -05:00
erikswain a99eecb461 fix(newegg): typo in 5800x url(#903) 2020-11-24 16:44:44 -05:00
David Gauch f7f0b08e30 chore(newegg): add cartUrl to AMD and Xbox items (#904) 2020-11-24 16:43:45 -05:00
David Gauch efddd01aa9 chore(walmart): add Corsair SF PSUs (#891) 2020-11-24 16:43:05 -05:00
David Gauch 0857b8a46e chore(walmart): add 5900x (#906) 2020-11-24 16:38:12 -05:00
Charles-Antoine Patenaude 67605a6e28 fix(memoryexpress): add backorder to outOfStock selector (#890) 2020-11-23 14:55:33 -05:00
dependabot[bot] 80826ba0bd chore(deps): bump dorny/paths-filter from v2.5.3 to v2.6.0 (#896)
Bumps [dorny/paths-filter](https://github.com/dorny/paths-filter) from v2.5.3 to v2.6.0.
- [Release notes](https://github.com/dorny/paths-filter/releases)
- [Changelog](https://github.com/dorny/paths-filter/blob/master/CHANGELOG.md)
- [Commits](https://github.com/dorny/paths-filter/compare/v2.5.3...eb75a1edc117d3756a18ef89958ee59f9500ba58)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-23 14:53:46 -05:00
Charles-Antoine Patenaude 06214eb4a8 fix(canadacomputers): add inStock selector, use english links (#889) 2020-11-23 14:53:07 -05:00
Chris Mendoza a62bd2e587 docs: add corsair and max price setting (#888) 2020-11-23 03:40:50 -05:00
David Gauch 4df57f578e chore(newegg): add Corsair SF PSUs (#892) 2020-11-23 03:39:12 -05:00
Jef LeCompte b4f34510d5 chore(ci): fix workflow syntax
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-22 12:03:14 -05:00
Jef LeCompte 429effb544 chore(ci): include docker build on dep change
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-22 12:00:53 -05:00
github-actions[bot] c2defe224a chore: release 3.1.0 (#774) 2020-11-22 11:57:58 -05:00
Chris Mendoza e552c9102d feat(store): add corsair sfx PSUs (#881) 2020-11-22 11:57:05 -05:00
Jef LeCompte 292e3603fd fix(store): generate links only for selected stores
Resolves: #694
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-22 11:53:17 -05:00
Jef LeCompte 85bbaf905e chore(xbox): add xbox series x
Closes: #836
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-22 11:34:30 -05:00
Armando D Jagucki 432d38bd5a chore(amazon): add big navi links (#880) 2020-11-22 10:08:22 -05:00
Sebastian 2d01cfddff feat(store): add captcha check to saturn and mediamarkt (#876) 2020-11-21 15:10:21 -05:00
Cristian 53739e05ab feat(store): add vsgamers (#767) 2020-11-21 13:28:01 -05:00
Jef LeCompte 9ad9793dc1 chore: update dependencies (#874)
Additional linting fixes

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-21 10:55:03 -05:00
dependabot[bot] f6f5c6bfe7 chore(deps): bump twitch-auth from 4.2.7 to 4.3.0 (#853)
Bumps [twitch-auth](https://github.com/d-fischer/twitch/tree/HEAD/packages/twitch-auth) from 4.2.7 to 4.3.0.
- [Release notes](https://github.com/d-fischer/twitch/releases)
- [Commits](https://github.com/d-fischer/twitch/commits/v4.3.0/packages/twitch-auth)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-21 10:37:24 -05:00
SolidPIPe 28c965d653 docs: remove duplicated models (#861) 2020-11-21 10:31:56 -05:00
Asier Eguibar 4b689cb94e feat(coolmod): add maxPrice (#862) 2020-11-21 10:31:36 -05:00
Barmaley13 c3f38fb2c9 chore: add more 3070 cards, reorder links (#872) 2020-11-21 10:29:10 -05:00
dependabot[bot] 239b5d3e8a chore(deps): bump twitch-chat-client from 4.2.7 to 4.3.0 (#856)
Bumps [twitch-chat-client](https://github.com/d-fischer/twitch/tree/HEAD/packages/twitch-chat-client) from 4.2.7 to 4.3.0.
- [Release notes](https://github.com/d-fischer/twitch/releases)
- [Commits](https://github.com/d-fischer/twitch/commits/v4.3.0/packages/twitch-chat-client)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-21 09:49:05 -05:00
dependabot[bot] 7694829dd6 chore(deps): bump twitch from 4.2.7 to 4.3.0 (#857)
Bumps [twitch](https://github.com/d-fischer/twitch/tree/HEAD/packages/twitch) from 4.2.7 to 4.3.0.
- [Release notes](https://github.com/d-fischer/twitch/releases)
- [Commits](https://github.com/d-fischer/twitch/commits/v4.3.0/packages/twitch)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-21 09:45:54 -05:00
Jef LeCompte d7921168cb chore: remove dependencies label 2020-11-19 18:28:51 -05:00
dependabot[bot] 9745190ee4 chore(deps-dev): bump webpack from 5.4.0 to 5.6.0 (#846)
Bumps [webpack](https://github.com/webpack/webpack) from 5.4.0 to 5.6.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.4.0...v5.6.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-19 18:08:50 -05:00
Jef LeCompte b5435643da chore: add quotes to .env-example
Based off #824

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-19 18:07:16 -05:00
Jef LeCompte af631c86f1 revert: correcting newline split for multiple user agents
Ref: f16a9fb331, #824
2020-11-19 18:05:50 -05:00
dependabot[bot] 5eb36a6cb7 chore(deps): bump node-pagerduty from 1.3.5 to 1.3.6 (#845)
Bumps [node-pagerduty](https://github.com/kmartin-215/node-pagerduty) from 1.3.5 to 1.3.6.
- [Release notes](https://github.com/kmartin-215/node-pagerduty/releases)
- [Commits](https://github.com/kmartin-215/node-pagerduty/compare/1.3.5...1.3.6)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-19 09:01:03 -05:00
xcaliber93 6f273305df feat(canadacomputers): add ryzen 5000 series (#842) 2020-11-19 09:00:46 -05:00
vmnt 6d292a11cd feat(newegg-ca): add big navi links (#843) 2020-11-19 08:59:37 -05:00
Rich Evans 89a762e2f5 feat(store): add amd rx 6000 series model (#832) 2020-11-18 20:14:27 -05:00
dependabot[bot] f9b617dd69 chore(deps): bump puppeteer from 5.4.1 to 5.5.0 (#819)
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 5.4.1 to 5.5.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/v5.4.1...v5.5.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-18 10:25:00 -05:00
dependabot[bot] 7fea7d58f0 chore(deps-dev): bump @types/node from 14.14.7 to 14.14.8 (#829)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.7 to 14.14.8.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-18 10:24:43 -05:00
joslynesser f16a9fb331 fix(config): correcting newline split for multiple user agents (#824) 2020-11-18 10:24:17 -05:00
VictorV 777c31b420 feat(notification): add product link to email and telegram (#816) 2020-11-18 10:23:31 -05:00
Matt Hayward 229daabb34 chore: add amd cpus to uk stores (#833) 2020-11-18 10:22:37 -05:00
Cristian d0ebffd056 feat(store): add 3070 models to pccomponentes & coolmod (#820) 2020-11-17 10:23:14 -05:00
Jef LeCompte 3feda151c5 docs: add cloud provider FAQ
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-16 11:28:53 -05:00
dependabot[bot] d41798ac23 chore(deps): bump dorny/paths-filter from v2.5.2 to v2.5.3 (#814)
Bumps [dorny/paths-filter](https://github.com/dorny/paths-filter) from v2.5.2 to v2.5.3.
- [Release notes](https://github.com/dorny/paths-filter/releases)
- [Changelog](https://github.com/dorny/paths-filter/blob/master/CHANGELOG.md)
- [Commits](https://github.com/dorny/paths-filter/compare/v2.5.2...d599443ba55e103985817f072734ef381431aeb4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-16 11:17:32 -05:00
James Hinton eb314afda5 feat(playstation): add outOfStock label (#812) 2020-11-16 11:12:35 -05:00
Jef LeCompte f377820894 chore: add question to issues template 2020-11-16 11:10:52 -05:00
Jef LeCompte 8933896c5c chore: remove duplicate chips
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-15 12:10:20 -05:00
Garret Picchioni 88a1303f73 chore(amazon): add zen 3 to us, es, and nl (#743) 2020-11-15 12:09:29 -05:00
Michael Vendivel 167713bb14 fix(amazon): add 5800x and 5600x (#802) 2020-11-15 12:05:14 -05:00
James Hinton 7c28c7f72b feat(store): add PlayStation store (#806) 2020-11-15 11:46:32 -05:00
Cristian b21b2440f7 chore(pccomponentes): add ryzen cpus (#756) 2020-11-14 22:05:06 -05:00
Michael Vendivel 63d550ca63 fix(bestbuy-ca): use proper selector (#801) 2020-11-14 22:02:49 -05:00
dependabot[bot] 8e1744c6b1 chore(deps): bump mqtt from 4.2.4 to 4.2.5 (#786)
Bumps [mqtt](https://github.com/mqttjs/MQTT.js) from 4.2.4 to 4.2.5.
- [Release notes](https://github.com/mqttjs/MQTT.js/releases)
- [Commits](https://github.com/mqttjs/MQTT.js/compare/v4.2.4...v4.2.5)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-13 11:17:47 -05:00
dependabot[bot] 0ed826fb5d chore(deps): bump nodemailer from 6.4.15 to 6.4.16 (#785)
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 6.4.15 to 6.4.16.
- [Release notes](https://github.com/nodemailer/nodemailer/releases)
- [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodemailer/nodemailer/compare/v6.4.15...v6.4.16)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-13 11:14:46 -05:00
dependabot[bot] d47a3e064e chore(deps-dev): bump @types/async from 3.2.3 to 3.2.4 (#787)
Bumps [@types/async](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/async) from 3.2.3 to 3.2.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/async)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-13 11:14:36 -05:00
Clinton Judy 501ea34a54 feat(asus): add backoff codes (#790) 2020-11-13 11:11:48 -05:00
Clinton Judy b60ad12cf2 chore(newegg): add 3080 vision oc (#791) 2020-11-13 11:10:31 -05:00
rodrigorodrigo ef2036b75d docs: small typo on canadacomputers (#779) 2020-11-12 22:44:59 -05:00
Jef LeCompte c38bebb49d feat(store): add topachat (#776)
Co-authored-by: Oguzhan YAGCI <oyagci@student.42.fr>
2020-11-12 08:50:31 -05:00
Zyde22 02d7c47c40 feat: add amazon-fr to stores. (#766) 2020-11-12 08:39:45 -05:00
Jef LeCompte efe0d64f06 revert: pipeline changes
Ref: 15e4520213
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-12 08:37:37 -05:00
rodrigorodrigo bd69e471f7 feat(store): support for canadacomputers (#772) 2020-11-12 08:24:15 -05:00
github-actions[bot] bdd74e5b16 chore: release 3.0.0 (#770)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2020-11-11 23:21:08 -05:00
Cristian 32702929a9 feat(coolmod): add zen 3 (#754) 2020-11-11 23:18:47 -05:00
Jef LeCompte b4de369ca8 docs: add checkout help
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-11 23:17:34 -05:00
Vincent ccb207abeb feat(discord): add cart link to embed (#762) 2020-11-11 23:15:10 -05:00
Jaden VanEckhout 841647c06c fix(walmart): ps5 digital url (#763)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-11 23:13:53 -05:00
HeitorLM 23d061b387 feat(store): support for kabum (amd and rtx 30 series) (#727)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-11 22:25:15 -05:00
Nathan Grebowiec a5249ecc7c feat: add option to disable auto add to cart (#759) 2020-11-11 20:56:45 -05:00
Jef LeCompte 0e730f4203 docs: update verbiage 2020-11-10 23:13:04 -05:00
gabriwong bc8c14c88d docs: add amazon error to faq (#760) 2020-11-10 23:11:34 -05:00
dependabot[bot] 5be33d045f chore(deps-dev): bump @types/puppeteer from 3.0.5 to 5.4.0 (#752)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-10 19:31:42 -05:00
Jef LeCompte d19dd5a404 refactor!: removed duplicated Model
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-10 17:50:43 -05:00
Jef LeCompte b1f1ea6ef0 docs: update README to reflect branches
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-10 17:19:39 -05:00
Jef LeCompte 15e4520213 chore: pipeline changes (#753) 2020-11-10 17:12:20 -05:00
Jef LeCompte 0904253cc6 refactor: add more types to Model, extract Brand
This is prep work for normalizing `Model`

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-10 10:53:24 -05:00
Jef LeCompte 318e626e78 feat: fix metadata in logging, lint prettier, typed Models (#747) 2020-11-10 10:38:14 -05:00
dependabot[bot] 0bf9ba2e18 chore(deps-dev): bump @types/node from 14.14.6 to 14.14.7 (#741)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.6 to 14.14.7.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-10 09:38:04 -05:00
Ben Wu 9f28fe5803 feat(notification): support for multiple phone numbers (#738) 2020-11-10 09:21:54 -05:00
Michael Vendivel ab1fddf20c feat(target): add additional selector for 'ship it' (#737) 2020-11-10 09:00:06 -05:00
BaelfireNightshd ff79d9e70d docs: add zen3 filter to SHOW_ONLY_SERIES (#742) 2020-11-10 08:59:04 -05:00
dependabot[bot] 050fd9faf6 chore(deps): bump nodemailer from 6.4.14 to 6.4.15 (#726)
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 6.4.14 to 6.4.15.
- [Release notes](https://github.com/nodemailer/nodemailer/releases)
- [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodemailer/nodemailer/compare/v6.4.14...v6.4.15)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-10 08:55:53 -05:00
James Hinton 0128718ba7 feat(store): add game store, add ps5 for uk stores (#736) 2020-11-10 08:55:27 -05:00
dependabot[bot] 037056156e chore(deps): bump dorny/paths-filter from v2.5.1 to v2.5.2 (#725)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-10 08:50:50 -05:00
dependabot[bot] d9692c7bbd chore(deps): bump GoogleCloudPlatform/release-please-action from v2.5.7 to v2.6.0 (#724)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-10 08:50:25 -05:00
Garret Picchioni 0754feccae fix(docker): copy web directory (#745) 2020-11-10 08:48:55 -05:00
SolidPIPe e8fd2f7c5b docs: add amd models (#746) 2020-11-10 08:48:09 -05:00
Vinh Nguyen 314f533f0b feat(store): add xbox series x and s (#732)
Co-authored-by: VictorV <velasquez.victor@gmail.com>
Co-authored-by: vinhnguyen <vinh.nguyen@venmo.com>
2020-11-10 08:47:15 -05:00
hiivin 4e086e9267 feat(galaxus): add zen 3 (#729) 2020-11-09 11:31:51 -05:00
Vincent dde9837829 feat(amazon): add more 3070s (#719)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-09 01:20:01 -05:00
serg06 25700567c5 feat(amazon-ca): add ps5 (#713)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-09 01:19:36 -05:00
Omelette Du Fromage c02241c752 feat: memoryexpress website support (#717)
Adding MemoryExpress website in Canada. Only track the online store
stock for now. Might add the stores stock later like microcenter.
Only track Ryzen 5000-series for now because RTX 3000-series is only
available in store backorder.

Co-authored-by: Omelette Du Fromage <lavrenti.rogoff@gmail.com>
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-09 01:18:49 -05:00
hiivin 38937f6880 feat(store): add arlt and amd-de (#721)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-09 01:16:58 -05:00
Jörg Battermann 0362bf8081 feat(mindfactory): add ryzen 5900x, 5950x (#720) 2020-11-09 01:14:16 -05:00
Jef LeCompte 815822f6f8 chore: add CODE_OF_CONDUCT.md 2020-11-07 13:01:47 -05:00
dependabot[bot] f9a6fd025a chore(deps): bump twilio from 3.50.0 to 3.51.0 (#699)
Bumps [twilio](https://github.com/twilio/twilio-node) from 3.50.0 to 3.51.0.
- [Release notes](https://github.com/twilio/twilio-node/releases)
- [Changelog](https://github.com/twilio/twilio-node/blob/main/CHANGES.md)
- [Commits](https://github.com/twilio/twilio-node/compare/3.50.0...3.51.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-07 12:56:32 -05:00
hiivin 2291b8eff5 feat(store): add ps5 to german stores (#715) 2020-11-07 12:55:42 -05:00
Andrew O'Brien 8a459056c5 feat(store): Adds AM3 to microcenter (#707)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-07 12:18:48 -05:00
Jef LeCompte 9320918335 docs: update docker notes
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-07 09:29:49 -05:00
Jef LeCompte 0d14500d5d feat: add production scripts and better Dockerfile
Closes: #710
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-07 09:26:17 -05:00
Michael Vendivel 42ef7cfdce feat(ps5): add console and digital edition (#709) 2020-11-06 16:42:05 -05:00
Nathan Grebowiec 0a680e977b feat: bring back ascii banner, but make it configurable (#703) 2020-11-06 16:39:34 -05:00
Jef LeCompte 19fd6895e7 docs: fix broken table
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-06 11:26:16 -05:00
Jef LeCompte e3fcc70bb3 docs: add philips hue video demo
Refs: https://github.com/jef/streetmerchant/pull/681#issuecomment-722716100
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-06 11:24:46 -05:00
hiivin 71d5cb4261 feat(store): add zen 3 to german stores (#702)
Co-authored-by: Florian Dahlmann <florian.dahlmann@gmx.de>
2020-11-06 09:39:37 -05:00
Jef LeCompte deb17d109f chore(philips-hue): remove unset warnings
Fixes #697

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-06 01:58:52 -05:00
serg06 760ddf5d85 feat(store): add zen 3 to more stores (#698) 2020-11-05 23:27:01 -05:00
Jef LeCompte 5db83484f3 fix: environment variables to match ryzen cpus
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 23:23:35 -05:00
Jef LeCompte 85208c4452 refactor: simplify max price
Ref: https://github.com/jef/streetmerchant/pull/696#issuecomment-722784373
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 23:19:37 -05:00
Nathan Grebowiec df3b10b9a5 feat(amd): add env vars and series filtering (#696)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 22:18:09 -05:00
Matthew c8a9b0ba3e feat(notification): add philips hue (#681)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
Co-authored-by: Nathan Banks <nathantb3@gmail.com>
2020-11-05 18:23:27 -05:00
Jef LeCompte 2955ea70ab fix: revert to 14.15.0 until 15 is stable for tsc
Fixes #691

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 18:04:48 -05:00
Jef LeCompte 7ec2894147 chore: bump node version
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 17:13:39 -05:00
Jef LeCompte 6924f362ba docs: update gif, change location
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 16:30:14 -05:00
Nathan Grebowiec 31a3d8f7e0 feat(amd): add 5950 config (#685) 2020-11-05 16:16:45 -05:00
Jef LeCompte a293f5e747 docs: update gif (#689)
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 16:13:09 -05:00
Jef LeCompte 2d3ea40a59 docs: update banner and readme
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 16:05:50 -05:00
github-actions[bot] 6861b3d052 chore: release 2.0.0 (#688)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2020-11-05 15:44:53 -05:00
Jef LeCompte 3f9b3c6017 chore!: update naming to streetmerchant
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 15:39:39 -05:00
Jef LeCompte 30720d3ca6 docs: fix alignment
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 15:28:02 -05:00
Jef LeCompte 0c550312bb chore: fix media (#687) 2020-11-05 15:23:38 -05:00
Jef LeCompte 30eb6a60cd docs: add logo
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-05 15:16:14 -05:00
dependabot[bot] 2737574b03 chore(deps-dev): bump webpack from 5.3.2 to 5.4.0 (#682)
Bumps [webpack](https://github.com/webpack/webpack) from 5.3.2 to 5.4.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.3.2...v5.4.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-04 15:35:02 -05:00
ElegyD d3c1a0233e chore(notebooksbilliger): add more FE links (#672)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-04 15:31:05 -05:00
Mark Dietzer 6ced13e993 fix(filterBrandsSeriesModels): always loop all stores (#680) 2020-11-03 19:42:17 -05:00
Jef LeCompte ec7be28f2e docs: update discord group tag
Resolves #679

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-03 19:30:49 -05:00
Jacob Williams 018784e653 feat(asus): realtime api (#675) 2020-11-03 17:29:06 -05:00
Karlo Delalic 3c5407f5cf feat(newegg-ca): realtime api (#674) 2020-11-03 17:26:57 -05:00
142 changed files with 12757 additions and 16985 deletions
+1 -1
View File
@@ -7,6 +7,6 @@ charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.{yml, json.md}]
[*.{yml, json, md}]
indent_style = space
indent_size = 2
+95 -70
View File
@@ -1,73 +1,98 @@
# ** All configuration variables are optional **
# Read https://github.com/jef/nvidia-snatcher#customization for help on customizing this file
# Read https://github.com/jef/streetmerchant#customization for help on customizing this file
#############################################################################################
BROWSER_TRUSTED=
COUNTRY=
DESKTOP_NOTIFICATIONS=
DISCORD_NOTIFY_GROUP=
DISCORD_WEB_HOOK=
EMAIL_PASSWORD=
EMAIL_TO=
EMAIL_USERNAME=
HEADLESS=
IN_STOCK_WAIT_TIME=
LOG_LEVEL=
LOW_BANDWIDTH=
MAX_PRICE_SERIES_3070=
MAX_PRICE_SERIES_3080=
MAX_PRICE_SERIES_3090=
MICROCENTER_LOCATION=
MQTT_BROKER_ADDRESS=
MQTT_BROKER_PORT=
MQTT_CLIENT_ID=
MQTT_PASSWORD=
MQTT_QOS=
MQTT_TOPIC=
MQTT_USERNAME=
NVIDIA_ADD_TO_CART_ATTEMPTS=
NVIDIA_SESSION_TTL=
OPEN_BROWSER=
PAGE_BACKOFF_MIN=
PAGE_BACKOFF_MAX=
PAGE_SLEEP_MIN=
PAGE_SLEEP_MAX=
PAGE_TIMEOUT=
PAGERDUTY_INTEGRATION_KEY=
PAGERDUTY_SEVERITY=
PHONE_CARRIER=
PHONE_NUMBER=
PLAY_SOUND=
PROXY_ADDRESS=
PROXY_PORT=
PUSHBULLET=
PUSHOVER_TOKEN=
PUSHOVER_USER=
PUSHOVER_PRIORITY=
SCREENSHOT=
SHOW_ONLY_BRANDS=
SHOW_ONLY_MODELS=
SHOW_ONLY_SERIES=
SLACK_CHANNEL=
SLACK_TOKEN=
SMTP_ADDRESS=
SMTP_PORT=
STORES=
TELEGRAM_ACCESS_TOKEN=
TELEGRAM_CHAT_ID=
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_FROM_NUMBER=
TWILIO_TO_NUMBER=
TWITCH_ACCESS_TOKEN=
TWITCH_CHANNEL=
TWITCH_CLIENT_ID=
TWITCH_CLIENT_SECRET=
TWITCH_REFRESH_TOKEN=
TWITTER_ACCESS_TOKEN_KEY=
TWITTER_ACCESS_TOKEN_SECRET=
TWITTER_CONSUMER_KEY=
TWITTER_CONSUMER_SECRET=
TWITTER_TWEET_TAGS=
USER_AGENT=
WEB_PORT=
ASCII_BANNER=""
ASCII_COLOR=""
AUTO_ADD_TO_CART=""
BROWSER_TRUSTED=""
COUNTRY=""
DESKTOP_NOTIFICATIONS=""
DISCORD_NOTIFY_GROUP=""
DISCORD_WEB_HOOK=""
EMAIL_PASSWORD=""
EMAIL_TO=""
EMAIL_USERNAME=""
HEADLESS=""
IN_STOCK_WAIT_TIME=""
LOG_LEVEL=""
LOW_BANDWIDTH=""
MAX_PRICE_SERIES_3060TI=""
MAX_PRICE_SERIES_3070=""
MAX_PRICE_SERIES_3080=""
MAX_PRICE_SERIES_3090=""
MAX_PRICE_SERIES_CORSAIR_SF=""
MAX_PRICE_SERIES_RX6800=""
MAX_PRICE_SERIES_RX6800XT=""
MAX_PRICE_SERIES_RX6900XT=""
MAX_PRICE_SERIES_RYZEN5600=""
MAX_PRICE_SERIES_RYZEN5800=""
MAX_PRICE_SERIES_RYZEN5900=""
MAX_PRICE_SERIES_RYZEN5950=""
MAX_PRICE_SERIES_SONYPS5C=""
MAX_PRICE_SERIES_SONYPS5DE=""
MAX_PRICE_SERIES_TEST=""
MICROCENTER_LOCATION=""
MQTT_BROKER_ADDRESS=""
MQTT_BROKER_PORT=""
MQTT_CLIENT_ID=""
MQTT_PASSWORD=""
MQTT_QOS=""
MQTT_TOPIC=""
MQTT_USERNAME=""
NVIDIA_ADD_TO_CART_ATTEMPTS=""
NVIDIA_SESSION_TTL=""
OPEN_BROWSER=""
PAGE_BACKOFF_MIN=""
PAGE_BACKOFF_MAX=""
PAGE_SLEEP_MIN=""
PAGE_SLEEP_MAX=""
PAGE_TIMEOUT=""
PAGERDUTY_INTEGRATION_KEY=""
PAGERDUTY_SEVERITY=""
PHILIPS_HUE_API_KEY=""
PHILIPS_HUE_CLOUD_ACCESS_TOKEN=""
PHILIPS_HUE_CLOUD_CLIENT_ID=""
PHILIPS_HUE_CLOUD_CLIENT_SECRET=""
PHILIPS_HUE_CLOUD_REFRESH_TOKEN=""
PHILIPS_HUE_LAN_BRIDGE_IP=""
PHILIPS_HUE_LIGHT_COLOR=""
PHILIPS_HUE_LIGHT_IDS=""
PHILIPS_HUE_LIGHT_PATTERN=""
PHONE_CARRIER=""
PHONE_NUMBER=""
PLAY_SOUND=""
PROXY_ADDRESS=""
PROXY_PROTOCOL=""
PROXY_PORT=""
PUSHBULLET=""
PUSHOVER_TOKEN=""
PUSHOVER_USER=""
PUSHOVER_PRIORITY=""
SCREENSHOT=""
SHOW_ONLY_BRANDS=""
SHOW_ONLY_MODELS=""
SHOW_ONLY_SERIES=""
SLACK_CHANNEL=""
SLACK_TOKEN=""
SMTP_ADDRESS=""
SMTP_PORT=""
STORES=""
TELEGRAM_ACCESS_TOKEN=""
TELEGRAM_CHAT_ID=""
TWILIO_ACCOUNT_SID=""
TWILIO_AUTH_TOKEN=""
TWILIO_FROM_NUMBER=""
TWILIO_TO_NUMBER=""
TWITCH_ACCESS_TOKEN=""
TWITCH_CHANNEL=""
TWITCH_CLIENT_ID=""
TWITCH_CLIENT_SECRET=""
TWITCH_REFRESH_TOKEN=""
TWITTER_ACCESS_TOKEN_KEY=""
TWITTER_ACCESS_TOKEN_SECRET=""
TWITTER_CONSUMER_KEY=""
TWITTER_CONSUMER_SECRET=""
TWITTER_TWEET_TAGS=""
USER_AGENT=""
WEB_PORT=""
+29 -6
View File
@@ -7,12 +7,35 @@ assignees: jef
---
### Description
<!--- Feel free to join our discord server (https://discord.gg/gbVY4vB9JF) for general support --->
<!--- If this acts as a feature request please ask yourself if this modification is something the whole userbase will benefit from --->
<!-- Describe the bug here. -->
<!-- Please be as detailed as possible. -->
<!-- Include OS, screenshots and console outputs. -->
## Expected Behavior
### Possible solution
<!--- Tell us what should happen -->
<!-- Describe the possible solution here. -->
## Current Behavior
<!--- Tell us what happens instead of the expected behavior -->
## Steps to Reproduce
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug. Include code to reproduce, if relevant -->
1.
2.
3.
4.
## Environment
**OS:**
**.env file:**
```dotenv
```
## Logs
<!--- Provide a brief log -->
+4 -4
View File
@@ -7,10 +7,10 @@ assignees: jef
---
### Description
## Description
<!-- Describe the feature here. -->
<!-- Describe the feature here -->
### Possible solution
## Possible solution
<!-- Describe the possible solution here. -->
<!-- Describe the possible solution here -->
+12
View File
@@ -0,0 +1,12 @@
---
name: 🤔 Question
about: Open to all questions
title: ''
labels: 'type: question'
assignees: jef
---
## Description
<!-- Describe the question here -->
-6
View File
@@ -4,17 +4,11 @@ updates:
directory: "/"
schedule:
interval: "daily"
labels:
- "dependencies"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
labels:
- "dependencies"
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
labels:
- "dependencies"
+4 -15
View File
@@ -3,30 +3,19 @@ on:
push:
branches:
- main
paths-ignore:
- '**.md'
jobs:
cd:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: GoogleCloudPlatform/release-please-action@v2.5.7
- uses: GoogleCloudPlatform/release-please-action@v2.10
id: release
with:
token: ${{ secrets.GITHUB_TOKEN }}
release-type: simple
package-name: nvidia-snatcher
package-name: streetmerchant
- name: login into github package registry
run: echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin
- name: build nightly docker image
if: ${{ ! steps.release.outputs.release_created }}
run: |
docker build \
-t "ghcr.io/${GITHUB_REPOSITORY}:${GITHUB_SHA:0:7}" \
-t "ghcr.io/${GITHUB_REPOSITORY}:nightly" .
- name: publish nightly
if: ${{ ! steps.release.outputs.release_created }}
run: docker push "ghcr.io/${GITHUB_REPOSITORY}"
- name: build latest docker image
if: ${{ steps.release.outputs.release_created }}
run: |
@@ -35,6 +24,6 @@ jobs:
-t "ghcr.io/${GITHUB_REPOSITORY}:latest" .
env:
TAG_NAME: ${{ steps.release.outputs.tag_name }}
- name: publish latest
- name: publish latest image
if: ${{ steps.release.outputs.release_created }}
run: docker push "ghcr.io/${GITHUB_REPOSITORY}"
+6 -7
View File
@@ -3,16 +3,14 @@ on:
pull_request:
branches:
- main
paths-ignore:
- '**.md'
jobs:
build-lint:
build-and-lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2.1.2
with:
node-version: 14
node-version: 14.15.0
- uses: actions/cache@v2
with:
path: ~/.npm
@@ -29,12 +27,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: dorny/paths-filter@v2.5.1
- uses: dorny/paths-filter@v2.6.0
id: filter
with:
filters: |
docker:
build:
- 'Dockerfile'
- 'package*.json'
- name: Build image
if: steps.filter.outputs.docker == 'true'
if: steps.filter.outputs.build == 'true'
run: docker build .
+18
View File
@@ -0,0 +1,18 @@
name: nightly
on:
schedule:
- cron: '0 0 * * *'
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: login into github package registry
run: echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin
- name: build nightly docker image
run: |
docker build \
-t "ghcr.io/${GITHUB_REPOSITORY}:${GITHUB_SHA:0:7}" \
-t "ghcr.io/${GITHUB_REPOSITORY}:nightly" .
- name: publish nightly image
run: docker push "ghcr.io/${GITHUB_REPOSITORY}"
+1 -1
View File
@@ -10,6 +10,6 @@ jobs:
main:
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@v2.1.0
- uses: amannn/action-semantic-pull-request@v2.1.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+26
View File
@@ -0,0 +1,26 @@
name: 'Close stale issues'
on:
schedule:
- cron: '0 0 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v3
with:
close-issue-message: ${{ env.CLOSE_MESSAGE }}
close-pr-message: ${{ env.CLOSE_MESSAGE }}
days-before-stale: 30
days-before-close: 5
exempt-issue-labels: ${{ env.EXEMPT_LABEL }}
exempt-pr-labels: ${{ env.EXEMPT_LABEL }}
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-label: ${{ env.STALE_LABEL }}
stale-pr-label: ${{ env.STALE_LABEL }}
stale-issue-message: ${{ env.STALE_MESSAGE }}
stale-pr-message: ${{ env.STALE_MESSAGE }}
env:
CLOSE_MESSAGE: 'This issue has been closed because it is stale. Reopen if necessary.'
EXEMPT_LABEL: 'status: needs discussion'
STALE_LABEL: 'status: stale'
STALE_MESSAGE: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days'
+1 -1
View File
@@ -1 +1 @@
15.0.1
14.15.0
+325 -170
View File
@@ -1,244 +1,399 @@
# Changelog
## [1.7.0](https://www.github.com/jef/nvidia-snatcher/compare/v1.6.0...v1.7.0) (2020-11-03)
## [3.2.0](https://www.github.com/jef/streetmerchant/compare/v3.1.0...v3.2.0) (2020-12-06)
### Features
* add deprecation notices ([601742c](https://www.github.com/jef/nvidia-snatcher/commit/601742cf2c0b5ccf0131e4c4e904ad4037d80a8d))
* newegg realtime api ([#664](https://www.github.com/jef/nvidia-snatcher/issues/664)) ([5b3e95a](https://www.github.com/jef/nvidia-snatcher/commit/5b3e95acdf2f427a6098f15b9fbe65e88354a678))
* **bestbuy:** add 3060 series ([#1074](https://www.github.com/jef/streetmerchant/issues/1074)) ([e9a39c4](https://www.github.com/jef/streetmerchant/commit/e9a39c40925736a2126f6138c369710989904d1d))
* **bestbuy-ca:** add 3060ti cards ([29478bf](https://www.github.com/jef/streetmerchant/commit/29478bff2d27d780cc6142526f3970b4a87290bc))
* **notification:** add price to links ([#1209](https://www.github.com/jef/streetmerchant/issues/1209)) ([15ec12b](https://www.github.com/jef/streetmerchant/commit/15ec12b0a3a95716243bfd06f6d41959bff7c36e)), closes [#1188](https://www.github.com/jef/streetmerchant/issues/1188) [#673](https://www.github.com/jef/streetmerchant/issues/673) [#1187](https://www.github.com/jef/streetmerchant/issues/1187)
* **proxy:** socks5 support ([#933](https://www.github.com/jef/streetmerchant/issues/933)) ([364c6c2](https://www.github.com/jef/streetmerchant/commit/364c6c25dfe9dcbeb29cb20cb46e9e8dcc2fe86b))
* **store:** add 3060ti to newegg-ca, canadacomputer, memoryexpress ([#1172](https://www.github.com/jef/streetmerchant/issues/1172)) ([09f0236](https://www.github.com/jef/streetmerchant/commit/09f0236086c59b25ebe611041bf063d536e3cc3d))
* **store:** add amazon-de-warehouse ([#1102](https://www.github.com/jef/streetmerchant/issues/1102)) ([6de8c4a](https://www.github.com/jef/streetmerchant/commit/6de8c4a5eec8d66fb47d87e309866ba18f3e28c7))
* **store:** add antonline store ([#1042](https://www.github.com/jef/streetmerchant/issues/1042)) ([19eece1](https://www.github.com/jef/streetmerchant/commit/19eece18dccd4489e1e441b92061fc3b5743e4cd))
* **store:** add argos with ps5 ([b2f5c1a](https://www.github.com/jef/streetmerchant/commit/b2f5c1a3ed93cfd56e575ec634d235565a17b6bc))
* **store:** add awd(uk), add 3060ti link builders ([#1114](https://www.github.com/jef/streetmerchant/issues/1114)) ([36e3806](https://www.github.com/jef/streetmerchant/commit/36e38068d8cd284c741d4906d5ba5fe8cff85d24))
* **store:** add custom labels for links ([#1183](https://www.github.com/jef/streetmerchant/issues/1183)) ([f7b32e8](https://www.github.com/jef/streetmerchant/commit/f7b32e8ac56c29207c6b30b9168c34c021a5e227)), closes [#1132](https://www.github.com/jef/streetmerchant/issues/1132) [#1163](https://www.github.com/jef/streetmerchant/issues/1163)
* **store:** add el corte ingles ([#1107](https://www.github.com/jef/streetmerchant/issues/1107)) ([75ee95b](https://www.github.com/jef/streetmerchant/commit/75ee95b2217fb4bf667869011a009210ff8c22e7))
* **store:** add ePrice store ([#1016](https://www.github.com/jef/streetmerchant/issues/1016)) ([30a51a3](https://www.github.com/jef/streetmerchant/commit/30a51a38bee1c399276466e5db457bbe702edd5c))
* **store:** add Euronics DE ([#1045](https://www.github.com/jef/streetmerchant/issues/1045)) ([1774afc](https://www.github.com/jef/streetmerchant/commit/1774afc1c3010bd0b183907baa4f3486dc9e8c23))
* **store:** add expert ([#1105](https://www.github.com/jef/streetmerchant/issues/1105)) ([202698f](https://www.github.com/jef/streetmerchant/commit/202698f9179b081bd4214979f054e5ff7c805621))
* **store:** add Gamestop DE ([#1046](https://www.github.com/jef/streetmerchant/issues/1046)) ([79a3f33](https://www.github.com/jef/streetmerchant/commit/79a3f33150188c7ff0228a38f276ae1fe88b9714))
* **store:** add Medimax ([#1057](https://www.github.com/jef/streetmerchant/issues/1057)) ([7d29ef8](https://www.github.com/jef/streetmerchant/commit/7d29ef80ba1ae6682b486ac0b65a516b15a19f93))
* **store:** add Otto ([#1096](https://www.github.com/jef/streetmerchant/issues/1096)) ([af96c5f](https://www.github.com/jef/streetmerchant/commit/af96c5f2e808af7496f3c3299e4cf173105de48b))
* **store:** add smythstoys ([1ed0593](https://www.github.com/jef/streetmerchant/commit/1ed05937676c3b6961fcbbb1f3aa80afc3411ac3))
* **store:** add some italian stores with ps5 links ([#976](https://www.github.com/jef/streetmerchant/issues/976)) ([f663579](https://www.github.com/jef/streetmerchant/commit/f663579f3d744a5270878975407ad30b31ee0c0a))
* **store:** add spielegrotte ([#1056](https://www.github.com/jef/streetmerchant/issues/1056)) ([cf70f1f](https://www.github.com/jef/streetmerchant/commit/cf70f1ff4f942922bfa52adcd5b905e0b39c812a))
* **store:** add wipoid store ([#1018](https://www.github.com/jef/streetmerchant/issues/1018)) ([feae978](https://www.github.com/jef/streetmerchant/commit/feae978de9e90b96f542d2e53807144d82e380a4))
* **store:** update the italian store links ([#1002](https://www.github.com/jef/streetmerchant/issues/1002)) ([de7036c](https://www.github.com/jef/streetmerchant/commit/de7036c7cc6dd7e436ad1d31b988d9d56ad31f76))
* **topachat:** add `maxPrice` ([d7f2427](https://www.github.com/jef/streetmerchant/commit/d7f242780ef1a0a06d5b65ccfc0999e36a87d49d)), closes [#1097](https://www.github.com/jef/streetmerchant/issues/1097)
* add proxy rotation (settable per store) ([#1026](https://www.github.com/jef/streetmerchant/issues/1026)) ([490d44e](https://www.github.com/jef/streetmerchant/commit/490d44e1fdfdf91db7344dd3050ba8fd8d069631))
### Bug Fixes
* **banner:** add version to docker image ([#649](https://www.github.com/jef/nvidia-snatcher/issues/649)) ([1d2a33b](https://www.github.com/jef/nvidia-snatcher/commit/1d2a33b1d765fece9d1c9bf7d548818d1f0c8d92))
* **amazon:** price and cart buttons ([6fd023e](https://www.github.com/jef/streetmerchant/commit/6fd023e81e0c54e8fb53b45817b63cb49b8a37ce)), closes [#1125](https://www.github.com/jef/streetmerchant/issues/1125)
* **amazon-de:** `inStock` selector ([14cbd5a](https://www.github.com/jef/streetmerchant/commit/14cbd5a05b6f9c3a3ebbc5978156ff2b090efd32)), closes [#1178](https://www.github.com/jef/streetmerchant/issues/1178)
* **amazon-de:** remove xbox cart links ([cbc4330](https://www.github.com/jef/streetmerchant/commit/cbc43304bf49863000f422fbff4ed200ea610914)), closes [#1095](https://www.github.com/jef/streetmerchant/issues/1095)
* **bestbuy-ca:** model always indicating in stock ([#1145](https://www.github.com/jef/streetmerchant/issues/1145)) ([06f3aaf](https://www.github.com/jef/streetmerchant/commit/06f3aafae6ec460c6227a92e6105639be71fc9b3))
* **bestbuy-ca:** replace old evga xc3 ultra ([#1058](https://www.github.com/jef/streetmerchant/issues/1058)) ([65df944](https://www.github.com/jef/streetmerchant/commit/65df9449730bce2acb82f5edac25a91bdddd94db))
* **canadacomputers:** add `inStock` selector, use english links ([#889](https://www.github.com/jef/streetmerchant/issues/889)) ([06214eb](https://www.github.com/jef/streetmerchant/commit/06214eb4a8a5c2d8a180e8dcf846f828d5cce2ed))
* **memoryexpress:** add backorder to `outOfStock` selector ([#890](https://www.github.com/jef/streetmerchant/issues/890)) ([67605a6](https://www.github.com/jef/streetmerchant/commit/67605a6e280af35f210c536bc03571a84ea1a7e9))
* **newegg:** maxPrice selector using used price ([feddac7](https://www.github.com/jef/streetmerchant/commit/feddac76d3824e947b0a96524cd940e6b45ffe70)), closes [#1052](https://www.github.com/jef/streetmerchant/issues/1052)
* **newegg:** typo in 5800x url([#903](https://www.github.com/jef/streetmerchant/issues/903)) ([a99eecb](https://www.github.com/jef/streetmerchant/commit/a99eecb4613bc136e65afe4e5e8788316beae39e))
* **scan:** links builder ([#1161](https://www.github.com/jef/streetmerchant/issues/1161)) ([ca5553c](https://www.github.com/jef/streetmerchant/commit/ca5553cb2044c00857412a2af009e5e7f2c1aabf))
* **smythstoys:** add out of stock label ([5bbdfa2](https://www.github.com/jef/streetmerchant/commit/5bbdfa2abc23c2e1fb1c606227754a1701cab194))
* **store:** add backoffStatusCodes and new captcha container ([#1110](https://www.github.com/jef/streetmerchant/issues/1110)) ([0b11238](https://www.github.com/jef/streetmerchant/commit/0b11238370040e9cd31e793e9a782ad384c22abf))
* **store:** removes unnecessary newegg links from bestbuy ([#1126](https://www.github.com/jef/streetmerchant/issues/1126)) ([f2ae423](https://www.github.com/jef/streetmerchant/commit/f2ae423fa83d1671a98b9cf3733e587d33727a59)), closes [#1119](https://www.github.com/jef/streetmerchant/issues/1119)
* **store:** update euroFormat for expert and otto ([#1108](https://www.github.com/jef/streetmerchant/issues/1108)) ([e198e44](https://www.github.com/jef/streetmerchant/commit/e198e44613cda27c0e67dc7e42ca514e66e9cf48))
* **walmart:** instock container and add test:series ([21e74cf](https://www.github.com/jef/streetmerchant/commit/21e74cfe76a5ccf82247315c9951a25e44bb1ce5)), closes [#1106](https://www.github.com/jef/streetmerchant/issues/1106)
* related products being picked up on scan ([#954](https://www.github.com/jef/streetmerchant/issues/954)) ([db18157](https://www.github.com/jef/streetmerchant/commit/db18157a490b9c9672c32de3372bff0b472a48f3))
## [1.6.0](https://www.github.com/jef/nvidia-snatcher/compare/v1.5.0...v1.6.0) (2020-10-29)
## [3.1.0](https://www.github.com/jef/streetmerchant/compare/v3.0.0...v3.1.0) (2020-11-22)
### Features
* add series to Discord webhook ([#618](https://www.github.com/jef/nvidia-snatcher/issues/618)) ([273d058](https://www.github.com/jef/nvidia-snatcher/commit/273d05841451ed896f1d505bcd24f2230a143d3a))
* **api:** add rudimentary web control panel ([#183](https://www.github.com/jef/nvidia-snatcher/issues/183)) ([373d1a9](https://www.github.com/jef/nvidia-snatcher/commit/373d1a973865b14b5753517aa70eabf85b136d94))
* **store:** add founders editions to notebooksbilliger.de ([#593](https://www.github.com/jef/nvidia-snatcher/issues/593)) ([2e5db7a](https://www.github.com/jef/nvidia-snatcher/commit/2e5db7af04e6ce79660477d8deb6636ec2e7845e))
* **store:** add max price containers to multiple stores ([#579](https://www.github.com/jef/nvidia-snatcher/issues/579)) ([f9c4c25](https://www.github.com/jef/nvidia-snatcher/commit/f9c4c258748ffd3735f1e7385bde15b6112a1ca7))
* **store:** add new cards to german web shops ([#597](https://www.github.com/jef/nvidia-snatcher/issues/597)) ([699de57](https://www.github.com/jef/nvidia-snatcher/commit/699de573f6579b59ba2c65cc2bf4dd6ccba3c863))
* **store:** Add PCComponentes and Amazon-ES Stores. ([#558](https://www.github.com/jef/nvidia-snatcher/issues/558)) ([062201f](https://www.github.com/jef/nvidia-snatcher/commit/062201f092c7a271202f27e7297b8eb9d7269c02))
* **store:** support for azerty ([#557](https://www.github.com/jef/nvidia-snatcher/issues/557)) ([58416e1](https://www.github.com/jef/nvidia-snatcher/commit/58416e1994006cc2e4055937c675e0f9191f6339))
* **store:** support for coolmod ([#605](https://www.github.com/jef/nvidia-snatcher/issues/605)) ([c1dda4f](https://www.github.com/jef/nvidia-snatcher/commit/c1dda4f9871988fad43d79f3bfe65f7c7860b9f7))
* add `meta` to logger ([#437](https://www.github.com/jef/nvidia-snatcher/issues/437)) ([ae6bc86](https://www.github.com/jef/nvidia-snatcher/commit/ae6bc86bcb75c154a2a68adda324f34f18281700))
* add alternate.nl support ([#552](https://www.github.com/jef/nvidia-snatcher/issues/552)) ([aca6523](https://www.github.com/jef/nvidia-snatcher/commit/aca65233339ddbbcc1dbd06f9011d6d44c6650cf))
* add asus-de store and asus 3080 tuf/oc to amazon-de ([#436](https://www.github.com/jef/nvidia-snatcher/issues/436)) ([b4d8733](https://www.github.com/jef/nvidia-snatcher/commit/b4d8733d1823e2fa5d3a1b80d2d4218bfa737cd7))
* add caseking and proshop-de store ([#521](https://www.github.com/jef/nvidia-snatcher/issues/521)) ([1aaa102](https://www.github.com/jef/nvidia-snatcher/commit/1aaa102c06281b60da593d04ced01f8b20a37a3b))
* add coolblue store ([#482](https://www.github.com/jef/nvidia-snatcher/issues/482)) ([5c61333](https://www.github.com/jef/nvidia-snatcher/commit/5c61333df00c0c30f04e4aced01a498c5816ad58))
* add german stores ([#462](https://www.github.com/jef/nvidia-snatcher/issues/462)) ([85a07dc](https://www.github.com/jef/nvidia-snatcher/commit/85a07dc0dc6a8dfe2aba1d4ea3e4cde6ec083086))
* add incognito mode ([#534](https://www.github.com/jef/nvidia-snatcher/issues/534)) ([2b6457e](https://www.github.com/jef/nvidia-snatcher/commit/2b6457e8409658b843204fa0aeafb00d48f9e53e))
* add link series to error message for better context ([#265](https://www.github.com/jef/nvidia-snatcher/issues/265)) ([332b4a8](https://www.github.com/jef/nvidia-snatcher/commit/332b4a8246320e458729c0b58c310d290df12530))
* Add PagerDuty Integration ([#565](https://www.github.com/jef/nvidia-snatcher/issues/565)) ([11ee0bf](https://www.github.com/jef/nvidia-snatcher/commit/11ee0bf1a3e2d0d550d2731f9de9e178c382ea1f))
* add proshop-dk ([#524](https://www.github.com/jef/nvidia-snatcher/issues/524)) ([dc2fcf5](https://www.github.com/jef/nvidia-snatcher/commit/dc2fcf5ab4dba8be459bd5aa6a41e3e097205d45))
* add support for multiple browser user agents ([#547](https://www.github.com/jef/nvidia-snatcher/issues/547)) ([10a81dc](https://www.github.com/jef/nvidia-snatcher/commit/10a81dcbd54557652537cb641cbbd727d39e34e5))
* add uk stores ([#455](https://www.github.com/jef/nvidia-snatcher/issues/455)) ([b9b6b55](https://www.github.com/jef/nvidia-snatcher/commit/b9b6b55c29d11f48b683816e5b8c1cab127ed5fd))
* allow filtering per model by a specific series ([#595](https://www.github.com/jef/nvidia-snatcher/issues/595)) ([a42418f](https://www.github.com/jef/nvidia-snatcher/commit/a42418f814dcd91354c136288d4c6a24e03a168d))
* optional per store min and max page sleep time ([#576](https://www.github.com/jef/nvidia-snatcher/issues/576)) ([503d76f](https://www.github.com/jef/nvidia-snatcher/commit/503d76f3c7d01368fc978af4ab02924d3d036ac0))
* **notification:** add `to` field for email ([#327](https://www.github.com/jef/nvidia-snatcher/issues/327)) ([8828dd1](https://www.github.com/jef/nvidia-snatcher/commit/8828dd15cd08959cd434bd256e8eac474dd17c49))
* **store:** add ttl for `scan` ([#555](https://www.github.com/jef/nvidia-snatcher/issues/555)) ([4847725](https://www.github.com/jef/nvidia-snatcher/commit/4847725d3a54d2f4dd0c349ff0ad80eb4bc4e9e3))
* add rog strix oc to amazon-de ([#471](https://www.github.com/jef/nvidia-snatcher/issues/471)) ([e5909c5](https://www.github.com/jef/nvidia-snatcher/commit/e5909c532da1c8b731e9835bffd8f31b76550d4d))
* add support for specifying smtp server ([#458](https://www.github.com/jef/nvidia-snatcher/issues/458)) ([160ae37](https://www.github.com/jef/nvidia-snatcher/commit/160ae37d7bee4f0323cb939566d586f1300aece6))
* allow multiple microcenter locations ([#487](https://www.github.com/jef/nvidia-snatcher/issues/487)) ([2b0eab6](https://www.github.com/jef/nvidia-snatcher/commit/2b0eab656d81314ce7d05064662ec138407550c3))
* clear cookies and cache ([#515](https://www.github.com/jef/nvidia-snatcher/issues/515)) ([1f89945](https://www.github.com/jef/nvidia-snatcher/commit/1f89945c5746befb2131381a358efdf8ac530e0c)), closes [#417](https://www.github.com/jef/nvidia-snatcher/issues/417)
* max price per series ([#451](https://www.github.com/jef/nvidia-snatcher/issues/451)) ([8adc07a](https://www.github.com/jef/nvidia-snatcher/commit/8adc07a03e411dd536bebfdc7270db4bbf8ddb34))
* mqtt alerts ([#538](https://www.github.com/jef/nvidia-snatcher/issues/538)) ([68ff5bf](https://www.github.com/jef/nvidia-snatcher/commit/68ff5bf836c63c8e14d02c06777e02e64a6a0f38))
* twitch chat notification, multiple telegram chat ids and german web shop overhaul ([#528](https://www.github.com/jef/nvidia-snatcher/issues/528)) ([675f13a](https://www.github.com/jef/nvidia-snatcher/commit/675f13abb892d1158c92c41e3d57049313a5e0b8))
* **docker:** add docker and publish images to ghcr ([#411](https://www.github.com/jef/nvidia-snatcher/issues/411)) ([c857985](https://www.github.com/jef/nvidia-snatcher/commit/c857985a6d3736287976caf5b173f19046306465))
* **notification:** add at&t prepaid carrier ([#425](https://www.github.com/jef/nvidia-snatcher/issues/425)) ([eb9d082](https://www.github.com/jef/nvidia-snatcher/commit/eb9d082d178a42e35789ba822cfae7b35c0413c1))
* **notification:** add pushover priority setting ([#186](https://www.github.com/jef/nvidia-snatcher/issues/186)) ([f277172](https://www.github.com/jef/nvidia-snatcher/commit/f2771721914a20619833df8ccb2ac44298687b4d))
* **notification:** add Twillio notification provider ([#344](https://www.github.com/jef/nvidia-snatcher/issues/344)) ([f2f8d81](https://www.github.com/jef/nvidia-snatcher/commit/f2f8d81498d1acfb9359f4a690962042ec20d166))
* **store:** add `pny` ([#295](https://www.github.com/jef/nvidia-snatcher/issues/295)) ([f6760d3](https://www.github.com/jef/nvidia-snatcher/commit/f6760d3c65d60eae9e4b1e0fdba34e814f446a4c))
* **store:** add 3090s to amazon-ca ([#274](https://www.github.com/jef/nvidia-snatcher/issues/274)) ([e992cf4](https://www.github.com/jef/nvidia-snatcher/commit/e992cf4db85f045fc8d03c9b93286fb72bad1061))
* **store:** add additional cards to all stores ([#286](https://www.github.com/jef/nvidia-snatcher/issues/286)) ([d25a643](https://www.github.com/jef/nvidia-snatcher/commit/d25a643425020fa3f7cd48972360ede17501afeb))
* **store:** add amazon cards and `cartUrl`s ([#284](https://www.github.com/jef/nvidia-snatcher/issues/284)) ([d69189f](https://www.github.com/jef/nvidia-snatcher/commit/d69189f12c893fb6d88b198d802ff8e36a69bc88))
* **store:** add asus strix oc to asus store ([#385](https://www.github.com/jef/nvidia-snatcher/issues/385)) ([e55398e](https://www.github.com/jef/nvidia-snatcher/commit/e55398e789d52def6e15d1e5e10f56cdf5ea5bea))
* **store:** add evga 3090 to newegg canada ([#396](https://www.github.com/jef/nvidia-snatcher/issues/396)) ([313d176](https://www.github.com/jef/nvidia-snatcher/commit/313d176848a25f183334db8926ac0ec445a2c481))
* **store:** add ftw3 ultra to microcenter ([#448](https://www.github.com/jef/nvidia-snatcher/issues/448)) ([5109227](https://www.github.com/jef/nvidia-snatcher/commit/5109227e8899f57b828b157309a76c397c872559))
* **store:** add gamestop ([#390](https://www.github.com/jef/nvidia-snatcher/issues/390)) ([7148451](https://www.github.com/jef/nvidia-snatcher/commit/7148451b66e97f4f7dcdcc86ce06ba8712211bd5))
* **store:** add models to bestbuy ([#421](https://www.github.com/jef/nvidia-snatcher/issues/421)) ([4085136](https://www.github.com/jef/nvidia-snatcher/commit/4085136269b00f6bc5c8414836de8310dfec4166))
* **store:** add rog-strix-3080 to newegg-ca ([#489](https://www.github.com/jef/nvidia-snatcher/issues/489)) ([207bc41](https://www.github.com/jef/nvidia-snatcher/commit/207bc411ed240cd9150e018b21e735ba08a4d134))
* add `norway` to `nvidia-api` ([#304](https://www.github.com/jef/nvidia-snatcher/issues/304)) ([eda6c85](https://www.github.com/jef/nvidia-snatcher/commit/eda6c85fc03a70c5933308e96c572a480bb6c8a0))
* configurable status code behaviours ([#340](https://www.github.com/jef/nvidia-snatcher/issues/340)) ([3b7487e](https://www.github.com/jef/nvidia-snatcher/commit/3b7487e97ac9d93344403f50153f2de6243b1f0d))
* enhanced lookup behaviour ([#270](https://www.github.com/jef/nvidia-snatcher/issues/270)) ([b868d1a](https://www.github.com/jef/nvidia-snatcher/commit/b868d1a4833a8ec5ac1c79481530d75cd0c4b01e))
* in stock wait time per link now ([c7a716f](https://www.github.com/jef/nvidia-snatcher/commit/c7a716f981976a76afe61a4d985bd6fe4343595b))
* low bandwidth mode ([#294](https://www.github.com/jef/nvidia-snatcher/issues/294)) ([0aa7ab5](https://www.github.com/jef/nvidia-snatcher/commit/0aa7ab596c907ce72c188eb4b1acdee088307437))
* max price filtering ([#383](https://www.github.com/jef/nvidia-snatcher/issues/383)) ([fd294d2](https://www.github.com/jef/nvidia-snatcher/commit/fd294d2baa06a1c0a68852497889a0412dea492e))
* **store:** adds aorus master 3080 to newegg ([#402](https://www.github.com/jef/nvidia-snatcher/issues/402)) ([fddc002](https://www.github.com/jef/nvidia-snatcher/commit/fddc0021d36e4d0a9dacccc546da8260684f0eeb))
* retry logic for nvidia session token and adding to cart ([#347](https://www.github.com/jef/nvidia-snatcher/issues/347)) ([1bac1b9](https://www.github.com/jef/nvidia-snatcher/commit/1bac1b928d401a819698848f3367edf54836b26f))
* support for proxy server ([#352](https://www.github.com/jef/nvidia-snatcher/issues/352)) ([fdcd787](https://www.github.com/jef/nvidia-snatcher/commit/fdcd787f91f26229db23e2291e8922b947007902))
* **store:** nvidia debug card for "product details" page ([#337](https://www.github.com/jef/nvidia-snatcher/issues/337)) ([5b8d774](https://www.github.com/jef/nvidia-snatcher/commit/5b8d774b7c7d31d6ba6fc43be3ea7b16a87d2e49))
* **asus:** add backoff codes ([#790](https://www.github.com/jef/streetmerchant/issues/790)) ([501ea34](https://www.github.com/jef/streetmerchant/commit/501ea34a54e877600050d5a99fd3b71ec799e96a))
* **canadacomputers:** add ryzen 5000 series ([#842](https://www.github.com/jef/streetmerchant/issues/842)) ([6f27330](https://www.github.com/jef/streetmerchant/commit/6f273305df69ac7b420b5446b4c6824866821a7e))
* **coolmod:** add `maxPrice` ([#862](https://www.github.com/jef/streetmerchant/issues/862)) ([4b689cb](https://www.github.com/jef/streetmerchant/commit/4b689cb94e99b83c8829c11d1bfe4cd6db9fbd7a))
* **newegg-ca:** add big navi links ([#843](https://www.github.com/jef/streetmerchant/issues/843)) ([6d292a1](https://www.github.com/jef/streetmerchant/commit/6d292a11cd53bd3893d4a0ff5d13eb2ce3319faa))
* **notification:** add product link to email and telegram ([#816](https://www.github.com/jef/streetmerchant/issues/816)) ([777c31b](https://www.github.com/jef/streetmerchant/commit/777c31b420a38cab860d98bc6bd8b7ba990c55e7))
* **playstation:** add `outOfStock` label ([#812](https://www.github.com/jef/streetmerchant/issues/812)) ([eb314af](https://www.github.com/jef/streetmerchant/commit/eb314afda557369dd27266429ac991c47ecc6375))
* **store:** add `PlayStation` store ([#806](https://www.github.com/jef/streetmerchant/issues/806)) ([7c28c7f](https://www.github.com/jef/streetmerchant/commit/7c28c7f72b171ce914aba770d88e8b1213c41233))
* **store:** add 3070 models to pccomponentes & coolmod ([#820](https://www.github.com/jef/streetmerchant/issues/820)) ([d0ebffd](https://www.github.com/jef/streetmerchant/commit/d0ebffd056dc166e3557ccf694379bf8c10148b5))
* **store:** add amd rx 6000 series model ([#832](https://www.github.com/jef/streetmerchant/issues/832)) ([89a762e](https://www.github.com/jef/streetmerchant/commit/89a762e2f5cd2ebd56c2586b1ebead4171b67153))
* **store:** add captcha check to saturn and mediamarkt ([#876](https://www.github.com/jef/streetmerchant/issues/876)) ([2d01cfd](https://www.github.com/jef/streetmerchant/commit/2d01cfddff557f112c6d53473dad25eb299f2fc0))
* **store:** add corsair sfx PSUs ([#881](https://www.github.com/jef/streetmerchant/issues/881)) ([e552c91](https://www.github.com/jef/streetmerchant/commit/e552c9102dd9801dcfc35652f2aaa0b1eea18ebb))
* **store:** add topachat ([#776](https://www.github.com/jef/streetmerchant/issues/776)) ([c38bebb](https://www.github.com/jef/streetmerchant/commit/c38bebb49dbe8243d0e3f1205150a33f9ce745aa))
* **store:** add vsgamers ([#767](https://www.github.com/jef/streetmerchant/issues/767)) ([53739e0](https://www.github.com/jef/streetmerchant/commit/53739e05abf50bbaddb8079087339c9f353096c8))
* add amazon-fr to stores. ([#766](https://www.github.com/jef/streetmerchant/issues/766)) ([02d7c47](https://www.github.com/jef/streetmerchant/commit/02d7c47c4093ad71dfab31f93a9b1390f4cad8a0))
* **store:** support for canadacomputers ([#772](https://www.github.com/jef/streetmerchant/issues/772)) ([bd69e47](https://www.github.com/jef/streetmerchant/commit/bd69e471f7b47e7faf1d9858992d4157145518aa))
### Bug Fixes
* `amazon.{nl,de}` test urls ([#345](https://www.github.com/jef/nvidia-snatcher/issues/345)) ([589fbbc](https://www.github.com/jef/nvidia-snatcher/commit/589fbbcd34393ceb2bd7c0a8ac391c54e14a21be))
* `envOrNumber` behavior ([#364](https://www.github.com/jef/nvidia-snatcher/issues/364)) ([7d8897c](https://www.github.com/jef/nvidia-snatcher/commit/7d8897cd9fb9ae0db796fd85da3f2b9d1a9f73af))
* `nvidia-api` ([#314](https://www.github.com/jef/nvidia-snatcher/issues/314)) ([8d8e5b5](https://www.github.com/jef/nvidia-snatcher/commit/8d8e5b587d2279a95d3e7837a99bea8c5990a477))
* add `amazon-nl`, captcha `amazon-de`, add ftw3 `newegg` ([#293](https://www.github.com/jef/nvidia-snatcher/issues/293)) ([a2983eb](https://www.github.com/jef/nvidia-snatcher/commit/a2983eb54c419ba3a56abf80d316ea136a05e0fa))
* add status code `429` to bandh `backOffStatusCodes` ([#404](https://www.github.com/jef/nvidia-snatcher/issues/404)) ([7a981e7](https://www.github.com/jef/nvidia-snatcher/commit/7a981e745673f2b12d48d7eed71fc34a6e4ba5b2))
* add support for stores label text to have uppercase letters ([#526](https://www.github.com/jef/nvidia-snatcher/issues/526)) ([5ea7cc4](https://www.github.com/jef/nvidia-snatcher/commit/5ea7cc4ca45c506d2b98d4b643b44ca4ede1d7a9))
* asus store links ([#573](https://www.github.com/jef/nvidia-snatcher/issues/573)) ([f6db348](https://www.github.com/jef/nvidia-snatcher/commit/f6db3489b8b8a737dfc425880703928d5bc8916d))
* bestbuy label container selector precision ([#491](https://www.github.com/jef/nvidia-snatcher/issues/491)) ([cbc3b0b](https://www.github.com/jef/nvidia-snatcher/commit/cbc3b0b025469e9882ba8267f18f909c08c6c931))
* corrected norway locales ([#356](https://www.github.com/jef/nvidia-snatcher/issues/356)) ([d2476dd](https://www.github.com/jef/nvidia-snatcher/commit/d2476ddb08606545b32b9676e2d299d57ec5cb6a))
* cyclical dependencies ([ed970fc](https://www.github.com/jef/nvidia-snatcher/commit/ed970fc397210eb6ff684c7e82c79eb685a5d0d9)), closes [#468](https://www.github.com/jef/nvidia-snatcher/issues/468)
* denver `microcenter` name ([#296](https://www.github.com/jef/nvidia-snatcher/issues/296)) ([349f55d](https://www.github.com/jef/nvidia-snatcher/commit/349f55d3603517b5741fce6ac42b29141816ea79))
* dutch stores components ([#513](https://www.github.com/jef/nvidia-snatcher/issues/513)) ([586029c](https://www.github.com/jef/nvidia-snatcher/commit/586029c92aa19bdddcc85b7a837bb7a16bb1d28d))
* gamestop false positives ([#395](https://www.github.com/jef/nvidia-snatcher/issues/395)) ([d3bb507](https://www.github.com/jef/nvidia-snatcher/commit/d3bb507edca112124115ed88fb03cf14440d95ef))
* in stock wait time ([#325](https://www.github.com/jef/nvidia-snatcher/issues/325)) ([07bd246](https://www.github.com/jef/nvidia-snatcher/commit/07bd246e876cd27df1b5019af5ee8613bb5368f0)), closes [#315](https://www.github.com/jef/nvidia-snatcher/issues/315)
* max price getter updated to match .env ([#516](https://www.github.com/jef/nvidia-snatcher/issues/516)) ([32f114b](https://www.github.com/jef/nvidia-snatcher/commit/32f114b23527ee247c84c081a2cd0264de3b4847)), closes [#514](https://www.github.com/jef/nvidia-snatcher/issues/514) [#510](https://www.github.com/jef/nvidia-snatcher/issues/510)
* page sleep ([#586](https://www.github.com/jef/nvidia-snatcher/issues/586)) ([a2af30b](https://www.github.com/jef/nvidia-snatcher/commit/a2af30b70334cdbbfa51140d5de23a2d6b8429c8)), closes [#594](https://www.github.com/jef/nvidia-snatcher/issues/594) [#576](https://www.github.com/jef/nvidia-snatcher/issues/576)
* remove 3090 drid for DK/FI regions ([#361](https://www.github.com/jef/nvidia-snatcher/issues/361)) ([f1d22d1](https://www.github.com/jef/nvidia-snatcher/commit/f1d22d1684c8e70f09acd9978e6ea802d7224c8b))
* trim strings from comma-separated values ([#472](https://www.github.com/jef/nvidia-snatcher/issues/472)) ([f7ed865](https://www.github.com/jef/nvidia-snatcher/commit/f7ed86506b4e76d5bc20787068be83a44ec485b5))
* typo in maxPrice for 3090 ([#496](https://www.github.com/jef/nvidia-snatcher/issues/496)) ([e073590](https://www.github.com/jef/nvidia-snatcher/commit/e0735903b7b4b0d542dbbd76b9a860b1eca24e96))
* update gigabyte model `vision oc` ([#550](https://www.github.com/jef/nvidia-snatcher/issues/550)) ([4fefe22](https://www.github.com/jef/nvidia-snatcher/commit/4fefe22a907094fa39af5b4f2e3f8f3fe6897115))
* update new additions with web panel and sleep operations ([#606](https://www.github.com/jef/nvidia-snatcher/issues/606)) ([61a23fe](https://www.github.com/jef/nvidia-snatcher/commit/61a23fe9782223dc067dbc8251c3b09adbca0a43))
* update pushbullet import to match package ([#637](https://www.github.com/jef/nvidia-snatcher/issues/637)) ([d7360f7](https://www.github.com/jef/nvidia-snatcher/commit/d7360f71ef1a076713246ad2832ca58e7163e492))
* **env:** default `LOG_LEVEL` ([9636572](https://www.github.com/jef/nvidia-snatcher/commit/9636572c7de36f7ac6800ba31ac60fcd7bd2fd03))
* **notification:** discord false triggers ([#346](https://www.github.com/jef/nvidia-snatcher/issues/346)) ([3b90bbb](https://www.github.com/jef/nvidia-snatcher/commit/3b90bbbe5d751003a39823e9113eaee8cbfcf1a2))
* **notification:** sms subject output ([#298](https://www.github.com/jef/nvidia-snatcher/issues/298)) ([03755d5](https://www.github.com/jef/nvidia-snatcher/commit/03755d5eb117ac14797e0180c74f50b401e50cb5))
* **notifications:** twilio client creation ([#349](https://www.github.com/jef/nvidia-snatcher/issues/349)) ([5414b24](https://www.github.com/jef/nvidia-snatcher/commit/5414b249a6f938615cfad02ca22c171a5f86e127))
* **store:** gamestop `label.inStock` ([9e7976d](https://www.github.com/jef/nvidia-snatcher/commit/9e7976df5778a953c4fb6ca7553773655c1f4127))
* **store:** pccomponents model normalization ([#563](https://www.github.com/jef/nvidia-snatcher/issues/563)) ([699e77d](https://www.github.com/jef/nvidia-snatcher/commit/699e77d960b17dcb50378975a1913b0badeabfcc))
* updating amazon test model card to an in stock product ([#492](https://www.github.com/jef/nvidia-snatcher/issues/492)) ([81daa7c](https://www.github.com/jef/nvidia-snatcher/commit/81daa7c5596ab23bd9e6aac29fa63ee09e136827))
* **config:** `MAX_PRICE` quotations ([#426](https://www.github.com/jef/nvidia-snatcher/issues/426)) ([b7e5941](https://www.github.com/jef/nvidia-snatcher/commit/b7e5941a9598a09afabbb79c5636b768345009a3))
* **store:** container names on `nvidia` ([#333](https://www.github.com/jef/nvidia-snatcher/issues/333)) ([772de90](https://www.github.com/jef/nvidia-snatcher/commit/772de900a1386e9635d139e152fe86366404ded4))
* **store:** update `inStock` and `maxPrice` for newegg, newegg-ca ([#433](https://www.github.com/jef/nvidia-snatcher/issues/433)) ([628cab1](https://www.github.com/jef/nvidia-snatcher/commit/628cab1b605e4363c8dd5ad43476292ecb12db74)), closes [#400](https://www.github.com/jef/nvidia-snatcher/issues/400)
* **amazon:** add 5800x and 5600x ([#802](https://www.github.com/jef/streetmerchant/issues/802)) ([167713b](https://www.github.com/jef/streetmerchant/commit/167713bb14080e5e1d2f77c7ee933918b6fd5cfc))
* **bestbuy-ca:** use proper selector ([#801](https://www.github.com/jef/streetmerchant/issues/801)) ([63d550c](https://www.github.com/jef/streetmerchant/commit/63d550ca63b9bfd534f37b7747a1fae057abedb4))
* **config:** correcting newline split for multiple user agents ([#824](https://www.github.com/jef/streetmerchant/issues/824)) ([f16a9fb](https://www.github.com/jef/streetmerchant/commit/f16a9fb331fd38590325f399bde369ffa17dbe10))
* **store:** generate links only for selected stores ([292e360](https://www.github.com/jef/streetmerchant/commit/292e3603fd527a4454639c9abb73bd80a8a95fae)), closes [#694](https://www.github.com/jef/streetmerchant/issues/694)
### Reverts
* reduce false-positive during ci/cd ([79b9bfe](https://www.github.com/jef/nvidia-snatcher/commit/79b9bfe9a83858117f7a58b4b8b1a1569d80c442))
* correcting newline split for multiple user agents ([af631c8](https://www.github.com/jef/streetmerchant/commit/af631c86f1a74d810cabf2d0de1b7bb31d350095)), closes [#824](https://www.github.com/jef/streetmerchant/issues/824)
* pipeline changes ([efe0d64](https://www.github.com/jef/streetmerchant/commit/efe0d64f060e812fd9846073a13837a3f2a27862))
## [1.5.0](https://www.github.com/jef/nvidia-snatcher/compare/v1.4.0...v1.5.0) (2020-09-24)
## [3.0.0](https://www.github.com/jef/streetmerchant/compare/v2.0.0...v3.0.0) (2020-11-12)
### ⚠ BREAKING CHANGES
* removed duplicated `Model`
### Features
* filter models ([#261](https://www.github.com/jef/nvidia-snatcher/issues/261)) ([e1b34a9](https://www.github.com/jef/nvidia-snatcher/commit/e1b34a9ccfa45fa1a11da9af9074059b6084904b))
* **log:** colors for console logs ([#207](https://www.github.com/jef/nvidia-snatcher/issues/207)) ([0ad67fe](https://www.github.com/jef/nvidia-snatcher/commit/0ad67fe20453898ce0a6b5faff00062735411119))
* **notification:** add desktop notifications ([#140](https://www.github.com/jef/nvidia-snatcher/issues/140)) ([722eaf3](https://www.github.com/jef/nvidia-snatcher/commit/722eaf3cd680c4600b79f842c6c5acdb9e51ad71))
* **notification:** add pushbullet, add url with notifications ([#226](https://www.github.com/jef/nvidia-snatcher/issues/226)) ([74490ea](https://www.github.com/jef/nvidia-snatcher/commit/74490eae3ab30de7d7a708d5dd970e070f27f2ea))
* **notification:** twitter integration ([#224](https://www.github.com/jef/nvidia-snatcher/issues/224)) ([908ed35](https://www.github.com/jef/nvidia-snatcher/commit/908ed358826f9de530f5892ded1a54964a304d15))
* **store:** add `bannedSeller` label for stores ([#173](https://www.github.com/jef/nvidia-snatcher/issues/173)) ([71c6774](https://www.github.com/jef/nvidia-snatcher/commit/71c6774511f7ba13d34d2e40b69abf52d06e6225))
* **store:** add amazon-de ([#167](https://www.github.com/jef/nvidia-snatcher/issues/167)) ([8a70f14](https://www.github.com/jef/nvidia-snatcher/commit/8a70f147438584cc334710bc66220d05eb32fcbd))
* **store:** add bestbuy.ca ([#229](https://www.github.com/jef/nvidia-snatcher/issues/229)) ([22fd22f](https://www.github.com/jef/nvidia-snatcher/commit/22fd22fe743d3e286eae3430aecd6e7a0a5de8c0))
* **store:** add evga eu ([#172](https://www.github.com/jef/nvidia-snatcher/issues/172)) ([605bdd7](https://www.github.com/jef/nvidia-snatcher/commit/605bdd7ca73c585734f6c5df1a86f4fbfbff9163))
* **store:** add evga model ([#220](https://www.github.com/jef/nvidia-snatcher/issues/220)) ([190388c](https://www.github.com/jef/nvidia-snatcher/commit/190388cfe4a5e3f19abccd0ff786f654b9a04d2f))
* **store:** add microcenter store location config ([#215](https://www.github.com/jef/nvidia-snatcher/issues/215)) ([d6a27c9](https://www.github.com/jef/nvidia-snatcher/commit/d6a27c988c7b1011c7a10084d8283a60ed8aea5c))
* **stores:** add 3090 for bestbuy, newegg ([#249](https://www.github.com/jef/nvidia-snatcher/issues/249)) ([dd45dba](https://www.github.com/jef/nvidia-snatcher/commit/dd45dba82cb86f7e7664298dd202b93bbbd46d9f))
* **stores:** add 3090s for amazon-ca, bestbuy-ca, newegg-ca ([#258](https://www.github.com/jef/nvidia-snatcher/issues/258)) ([482fb58](https://www.github.com/jef/nvidia-snatcher/commit/482fb58cbfde6f95fb6f77de790d76e6aa2a5926))
* add chromium sandbox skipping ([#209](https://www.github.com/jef/nvidia-snatcher/issues/209)) ([2065680](https://www.github.com/jef/nvidia-snatcher/commit/20656805c1259637bb3a4db465a8d16d4780296a))
* deprecate nvidia (api), add 3080 add 3090 ([9f470f0](https://www.github.com/jef/nvidia-snatcher/commit/9f470f06e9e9fb605d340c0b0f9016d7288e8c0b))
* invert logic ([#141](https://www.github.com/jef/nvidia-snatcher/issues/141)) ([6608a79](https://www.github.com/jef/nvidia-snatcher/commit/6608a79769ff03543ab4ed2f2cead3410d7d7e99))
* multiple discord roles and webhooks, qol for envs ([#260](https://www.github.com/jef/nvidia-snatcher/issues/260)) ([8913879](https://www.github.com/jef/nvidia-snatcher/commit/8913879593252c9c83020b2e2c46bad7537b2a20))
* **store:** add newegg.ca ([#160](https://www.github.com/jef/nvidia-snatcher/issues/160)) ([76f5849](https://www.github.com/jef/nvidia-snatcher/commit/76f584988979a40269fd3641e996800a63b4b163)), closes [#159](https://www.github.com/jef/nvidia-snatcher/issues/159)
* **store:** add office depot ([#157](https://www.github.com/jef/nvidia-snatcher/issues/157)) ([0df2dcf](https://www.github.com/jef/nvidia-snatcher/commit/0df2dcfbd48235fba7126d96cd912634c5b4fdd9))
* **store:** add zotac store ([#214](https://www.github.com/jef/nvidia-snatcher/issues/214)) ([7875855](https://www.github.com/jef/nvidia-snatcher/commit/78758552b22e608dbdf3e76397f5b5efb893fef5))
* add delay on captcha to try and evade faster ([#119](https://www.github.com/jef/nvidia-snatcher/issues/119)) ([4f83b3b](https://www.github.com/jef/nvidia-snatcher/commit/4f83b3b233657841a4068a8ff9dd6c8dbff631c0))
* bestbuy bypass international splash, newegg add to cart ([#153](https://www.github.com/jef/nvidia-snatcher/issues/153)) ([133a54f](https://www.github.com/jef/nvidia-snatcher/commit/133a54fa170bb16dd26b0d72b1a02c56b3851b7f))
* card series filter, fix: newegg `oosLabels` ([#120](https://www.github.com/jef/nvidia-snatcher/issues/120)) ([252459d](https://www.github.com/jef/nvidia-snatcher/commit/252459d5d3de2b8cb25deee9ae318108e3dda2be))
* custom user agent ([#121](https://www.github.com/jef/nvidia-snatcher/issues/121)) ([d9be3fe](https://www.github.com/jef/nvidia-snatcher/commit/d9be3fe6183eaa9694b186c7a75e1f28bb31dace))
* include screenshot for emails + sms notifications ([#144](https://www.github.com/jef/nvidia-snatcher/issues/144)) ([7191e03](https://www.github.com/jef/nvidia-snatcher/commit/7191e03a80e577b59b2861289aa658cfa0ffc0fa))
* load puppeteer faster, run stores in parallel ([#83](https://www.github.com/jef/nvidia-snatcher/issues/83)) ([d1a5aa1](https://www.github.com/jef/nvidia-snatcher/commit/d1a5aa1f02ff0a8f293b93e3c078b5943908a95b))
* set country in config, login to nvidia when starting ([#162](https://www.github.com/jef/nvidia-snatcher/issues/162)) ([ebd6091](https://www.github.com/jef/nvidia-snatcher/commit/ebd6091a09fb5e52a66742767ae4b58323cd7447))
* temporarily pause requests if store has stock ([#147](https://www.github.com/jef/nvidia-snatcher/issues/147)) ([6413144](https://www.github.com/jef/nvidia-snatcher/commit/6413144c1cae89f33f852cc93870b407a784f2bb))
* update for complex add to cart, fix nvidia ([#108](https://www.github.com/jef/nvidia-snatcher/issues/108)) ([3ea146d](https://www.github.com/jef/nvidia-snatcher/commit/3ea146da14ea40d145ccfc05436beeb0a9fed8d9))
* **notification:** discord integration ([#82](https://www.github.com/jef/nvidia-snatcher/issues/82)) ([a3fc07d](https://www.github.com/jef/nvidia-snatcher/commit/a3fc07daf0a3f33f18e03d4cfc13d3477a9c4fa0))
* **scraping:** change lookup impl, add randomize sleep ([#110](https://www.github.com/jef/nvidia-snatcher/issues/110)) ([dc0f710](https://www.github.com/jef/nvidia-snatcher/commit/dc0f7106749b0afa0ff1c91cabb90b65be30e909))
* **store:** add adorama ([#104](https://www.github.com/jef/nvidia-snatcher/issues/104)) ([5b91065](https://www.github.com/jef/nvidia-snatcher/commit/5b910650430ad4806b22722efa9a013e72ea47e7))
* **store:** add asus ([#102](https://www.github.com/jef/nvidia-snatcher/issues/102)) ([a501cf7](https://www.github.com/jef/nvidia-snatcher/commit/a501cf703bb05f47af6240a4b16a3dc4dcf3baf5))
* **amazon:** add more 3070s ([#719](https://www.github.com/jef/streetmerchant/issues/719)) ([dde9837](https://www.github.com/jef/streetmerchant/commit/dde9837829b9d52e43800a2ac826b5dd00f5a744))
* **coolmod:** add zen 3 ([#754](https://www.github.com/jef/streetmerchant/issues/754)) ([3270292](https://www.github.com/jef/streetmerchant/commit/32702929a97236d7dc51aa8f669140bc6d89aa9a))
* **discord:** add cart link to embed ([#762](https://www.github.com/jef/streetmerchant/issues/762)) ([ccb207a](https://www.github.com/jef/streetmerchant/commit/ccb207abeb43b8e85f32c5c0a7a02aa33b5cdd7c))
* **store:** support for kabum (amd and rtx 30 series) ([#727](https://www.github.com/jef/streetmerchant/issues/727)) ([23d061b](https://www.github.com/jef/streetmerchant/commit/23d061b387b540803a81212fee937d4c8c9b17ad))
* add option to disable auto add to cart ([#759](https://www.github.com/jef/streetmerchant/issues/759)) ([a5249ec](https://www.github.com/jef/streetmerchant/commit/a5249ecc7c3acc29a1f9d5285bd77397263cb135))
* fix metadata in logging, lint prettier, typed `Model`s ([#747](https://www.github.com/jef/streetmerchant/issues/747)) ([318e626](https://www.github.com/jef/streetmerchant/commit/318e626e78c18524c4d8624176ccb659c6b6d17c))
* **amazon-ca:** add ps5 ([#713](https://www.github.com/jef/streetmerchant/issues/713)) ([2570056](https://www.github.com/jef/streetmerchant/commit/25700567c57a303a9376351daf015741193350a3))
* **amd:** add 5950 config ([#685](https://www.github.com/jef/streetmerchant/issues/685)) ([31a3d8f](https://www.github.com/jef/streetmerchant/commit/31a3d8f7e068a17c72e0c296e176b93625bf9063))
* **amd:** add env vars and series filtering ([#696](https://www.github.com/jef/streetmerchant/issues/696)) ([df3b10b](https://www.github.com/jef/streetmerchant/commit/df3b10b9a5c2467e00cacb3ab93f818aafc95f02))
* **galaxus:** add zen 3 ([#729](https://www.github.com/jef/streetmerchant/issues/729)) ([4e086e9](https://www.github.com/jef/streetmerchant/commit/4e086e92675df97fe7f94c4e6d51b73d63e7effb))
* **mindfactory:** add ryzen 5900x, 5950x ([#720](https://www.github.com/jef/streetmerchant/issues/720)) ([0362bf8](https://www.github.com/jef/streetmerchant/commit/0362bf808198d47e6aaa4a4838251f870d6dce4a))
* **notification:** add philips hue ([#681](https://www.github.com/jef/streetmerchant/issues/681)) ([c8a9b0b](https://www.github.com/jef/streetmerchant/commit/c8a9b0ba3ed581a9fef7ee2b459b1de84d976ff0))
* **notification:** support for multiple phone numbers ([#738](https://www.github.com/jef/streetmerchant/issues/738)) ([9f28fe5](https://www.github.com/jef/streetmerchant/commit/9f28fe5803fc71bf64d303cd1e7d20d0be8fecac))
* **ps5:** add console and digital edition ([#709](https://www.github.com/jef/streetmerchant/issues/709)) ([42ef7cf](https://www.github.com/jef/streetmerchant/commit/42ef7cfdced8ae3bc4192e245469798324bc42d3))
* **store:** add `arlt` and `amd-de` ([#721](https://www.github.com/jef/streetmerchant/issues/721)) ([38937f6](https://www.github.com/jef/streetmerchant/commit/38937f6880fcffb3a56ef17acd278f7c2f8d251c))
* **store:** add `game` store, add ps5 for uk stores ([#736](https://www.github.com/jef/streetmerchant/issues/736)) ([0128718](https://www.github.com/jef/streetmerchant/commit/0128718ba76b0c431d790cea7dd2183d10a02278))
* **store:** add ps5 to german stores ([#715](https://www.github.com/jef/streetmerchant/issues/715)) ([2291b8e](https://www.github.com/jef/streetmerchant/commit/2291b8eff5b23613d1233cc4c3ead83a42286d85))
* **store:** add xbox series x and s ([#732](https://www.github.com/jef/streetmerchant/issues/732)) ([314f533](https://www.github.com/jef/streetmerchant/commit/314f533f0bab0a466a276c5895d2f00bf86741f4))
* **store:** add zen 3 to german stores ([#702](https://www.github.com/jef/streetmerchant/issues/702)) ([71d5cb4](https://www.github.com/jef/streetmerchant/commit/71d5cb426179f5e587adeba1ec60f9a9233ec7b6))
* **store:** add zen 3 to more stores ([#698](https://www.github.com/jef/streetmerchant/issues/698)) ([760ddf5](https://www.github.com/jef/streetmerchant/commit/760ddf5d8523e28e294146643dda16e105176dff))
* **store:** Adds AM3 to microcenter ([#707](https://www.github.com/jef/streetmerchant/issues/707)) ([8a45905](https://www.github.com/jef/streetmerchant/commit/8a459056c5ba8a5a90de55cfbb08c4c89ccb19d3))
* **target:** add additional selector for 'ship it' ([#737](https://www.github.com/jef/streetmerchant/issues/737)) ([ab1fddf](https://www.github.com/jef/streetmerchant/commit/ab1fddf20c3a735b746befda0e21462701882645))
* add production scripts and better `Dockerfile` ([0d14500](https://www.github.com/jef/streetmerchant/commit/0d14500d5d8b93204bb99baf34dc9de745ae645d)), closes [#710](https://www.github.com/jef/streetmerchant/issues/710)
* bring back ascii banner, but make it configurable ([#703](https://www.github.com/jef/streetmerchant/issues/703)) ([0a680e9](https://www.github.com/jef/streetmerchant/commit/0a680e977b7904e7f62a8c1c0f3d533329b23fb0))
* memoryexpress website support ([#717](https://www.github.com/jef/streetmerchant/issues/717)) ([c02241c](https://www.github.com/jef/streetmerchant/commit/c02241c7528656c2c2fba9befc36628b4db7befb))
### Bug Fixes
* **store:** adorama captcha config ([#234](https://www.github.com/jef/nvidia-snatcher/issues/234)) ([9a53917](https://www.github.com/jef/nvidia-snatcher/commit/9a539175860f98de3b023009f751e59d94f0aaef))
* color logs and notification ([76b28a6](https://www.github.com/jef/nvidia-snatcher/commit/76b28a6dbdf5480c12a8c82b031c3f2880d17b11))
* **notification:** change discord ping visibility ([#168](https://www.github.com/jef/nvidia-snatcher/issues/168)) ([9675c5b](https://www.github.com/jef/nvidia-snatcher/commit/9675c5b8d61226db4652964e7f1e7399bb82d04e))
* **store:** bandh removed cards ([#201](https://www.github.com/jef/nvidia-snatcher/issues/201)) ([6409646](https://www.github.com/jef/nvidia-snatcher/commit/6409646d57bf2b2bb5a4bcf8239740abed8edafb))
* `rateLimitTimeout` not being defaulted ([#106](https://www.github.com/jef/nvidia-snatcher/issues/106)) ([28947be](https://www.github.com/jef/nvidia-snatcher/commit/28947be9bc8981d7a45a5d0e69c18d039fcd9ed3))
* check response for rate limiting ([#58](https://www.github.com/jef/nvidia-snatcher/issues/58)) ([#98](https://www.github.com/jef/nvidia-snatcher/issues/98)) ([b7d9462](https://www.github.com/jef/nvidia-snatcher/commit/b7d9462e794ef3961fb57c79ef8f66e77d25d20a))
* keep single `Store` from draining ([e819e46](https://www.github.com/jef/nvidia-snatcher/commit/e819e46116d4e0b067a59791094b5cfbd2d7cd45))
* memory leak due to adblocker ([#139](https://www.github.com/jef/nvidia-snatcher/issues/139)) ([0f6e570](https://www.github.com/jef/nvidia-snatcher/commit/0f6e570cc817dfc10bcddc5743a0faf3b1489270))
* **nvidia:** false positives ([#132](https://www.github.com/jef/nvidia-snatcher/issues/132)) ([a75d214](https://www.github.com/jef/nvidia-snatcher/commit/a75d214dd555d5e0388cb54b15be324cc25b6a15))
* newegg out-of-stock ([#124](https://www.github.com/jef/nvidia-snatcher/issues/124)) ([770a13a](https://www.github.com/jef/nvidia-snatcher/commit/770a13ac3559401b430547908d1df014582c1e37))
* newegg out-of-stock labels ([#134](https://www.github.com/jef/nvidia-snatcher/issues/134)) ([19c8f18](https://www.github.com/jef/nvidia-snatcher/commit/19c8f188c796258c469c2b4c6461fc5da3907a47))
* **notification:** wrong condition for sounds playing ([#91](https://www.github.com/jef/nvidia-snatcher/issues/91)) ([103d96d](https://www.github.com/jef/nvidia-snatcher/commit/103d96dc81d6fd097fcdbed5bdd7487d7d73bf6e))
* **store:** false positives for nvidia. ([#85](https://www.github.com/jef/nvidia-snatcher/issues/85)) ([c65fa04](https://www.github.com/jef/nvidia-snatcher/commit/c65fa04666775060532e28076a0b4af50f8dd30b))
* **docker:** copy web directory ([#745](https://www.github.com/jef/streetmerchant/issues/745)) ([0754fec](https://www.github.com/jef/streetmerchant/commit/0754feccaea2ce2dd37e7caeed3fa0b53c0cdcb3))
* **walmart:** ps5 digital url ([#763](https://www.github.com/jef/streetmerchant/issues/763)) ([841647c](https://www.github.com/jef/streetmerchant/commit/841647c06c488cf6b9d6d6af3c3eb6c8dbadab7e))
* environment variables to match ryzen cpus ([5db8348](https://www.github.com/jef/streetmerchant/commit/5db83484f301d48509205d9d0b5146c5d7114d26))
* revert to 14.15.0 until 15 is stable for `tsc` ([2955ea7](https://www.github.com/jef/streetmerchant/commit/2955ea70ab59c1b0dd82ec506c7a03952f81ea01)), closes [#691](https://www.github.com/jef/streetmerchant/issues/691)
## [1.4.0](https://www.github.com/jef/nvidia-snatcher/compare/v1.3.0...v1.4.0) (2020-09-19)
### Code Refactoring
* removed duplicated `Model` ([d19dd5a](https://www.github.com/jef/streetmerchant/commit/d19dd5a404f2a585dd80f4d23d0e3af2d435ae85))
## [2.0.0](https://www.github.com/jef/streetmerchant/compare/v1.7.0...v2.0.0) (2020-11-05)
### ⚠ BREAKING CHANGES
* update naming to `streetmerchant`
### Features
* **asus:** realtime api ([#675](https://www.github.com/jef/streetmerchant/issues/675)) ([018784e](https://www.github.com/jef/streetmerchant/commit/018784e653831103465e8278db4929e04c52397c))
* **newegg-ca:** realtime api ([#674](https://www.github.com/jef/streetmerchant/issues/674)) ([3c5407f](https://www.github.com/jef/streetmerchant/commit/3c5407f5cfc635ae989101131188e999faa01d3c))
### Bug Fixes
* **filterBrandsSeriesModels:** always loop all stores ([#680](https://www.github.com/jef/streetmerchant/issues/680)) ([6ced13e](https://www.github.com/jef/streetmerchant/commit/6ced13e993f7b30bbdda5dc7615e895bac3e4f77))
### Miscellaneous Chores
* update naming to `streetmerchant` ([3f9b3c6](https://www.github.com/jef/streetmerchant/commit/3f9b3c6017431074d59550a6cd61c80a8897a9ae))
## [1.7.0](https://www.github.com/jef/streetmerchant/compare/v1.6.0...v1.7.0) (2020-11-03)
### Features
* **notification:** add mint mobile carrier ([#70](https://www.github.com/jef/nvidia-snatcher/issues/70)) ([8aba7ec](https://www.github.com/jef/nvidia-snatcher/commit/8aba7ecbdb0bfce06257b7b9066e8fccbd82e47e))
* **notification:** add pushover ([#55](https://www.github.com/jef/nvidia-snatcher/issues/55)) ([c85658b](https://www.github.com/jef/nvidia-snatcher/commit/c85658bf82fdf360e5e9d8345eaa846f0572e67c))
* **notification:** add telegram ([#71](https://www.github.com/jef/nvidia-snatcher/issues/71)) ([393d5f6](https://www.github.com/jef/nvidia-snatcher/commit/393d5f689887bf1d6f30a37eea163b2e6bbd4efa))
* **notification:** add telus sms ([6be74a1](https://www.github.com/jef/nvidia-snatcher/commit/6be74a19f3d3f999145d17ac8e91c59db2502071))
* **store:** add amazon.ca, fix timeout ([#75](https://www.github.com/jef/nvidia-snatcher/issues/75)) ([d4de1a4](https://www.github.com/jef/nvidia-snatcher/commit/d4de1a4638e903eb9518354ab6fb2f8c4befc347))
* webpage toggle, sound notification, fix evga links ([#52](https://www.github.com/jef/nvidia-snatcher/issues/52)) ([a217409](https://www.github.com/jef/nvidia-snatcher/commit/a21740942bbbbe967948062fa06cfc82c31eb755))
* add deprecation notices ([601742c](https://www.github.com/jef/streetmerchant/commit/601742cf2c0b5ccf0131e4c4e904ad4037d80a8d))
* newegg realtime api ([#664](https://www.github.com/jef/streetmerchant/issues/664)) ([5b3e95a](https://www.github.com/jef/streetmerchant/commit/5b3e95acdf2f427a6098f15b9fbe65e88354a678))
### Bug Fixes
* **banner:** add version to docker image ([#649](https://www.github.com/jef/streetmerchant/issues/649)) ([1d2a33b](https://www.github.com/jef/streetmerchant/commit/1d2a33b1d765fece9d1c9bf7d548818d1f0c8d92))
## [1.6.0](https://www.github.com/jef/streetmerchant/compare/v1.5.0...v1.6.0) (2020-10-29)
### Features
* add series to Discord webhook ([#618](https://www.github.com/jef/streetmerchant/issues/618)) ([273d058](https://www.github.com/jef/streetmerchant/commit/273d05841451ed896f1d505bcd24f2230a143d3a))
* **api:** add rudimentary web control panel ([#183](https://www.github.com/jef/streetmerchant/issues/183)) ([373d1a9](https://www.github.com/jef/streetmerchant/commit/373d1a973865b14b5753517aa70eabf85b136d94))
* **store:** add founders editions to notebooksbilliger.de ([#593](https://www.github.com/jef/streetmerchant/issues/593)) ([2e5db7a](https://www.github.com/jef/streetmerchant/commit/2e5db7af04e6ce79660477d8deb6636ec2e7845e))
* **store:** add max price containers to multiple stores ([#579](https://www.github.com/jef/streetmerchant/issues/579)) ([f9c4c25](https://www.github.com/jef/streetmerchant/commit/f9c4c258748ffd3735f1e7385bde15b6112a1ca7))
* **store:** add new cards to german web shops ([#597](https://www.github.com/jef/streetmerchant/issues/597)) ([699de57](https://www.github.com/jef/streetmerchant/commit/699de573f6579b59ba2c65cc2bf4dd6ccba3c863))
* **store:** Add PCComponentes and Amazon-ES Stores. ([#558](https://www.github.com/jef/streetmerchant/issues/558)) ([062201f](https://www.github.com/jef/streetmerchant/commit/062201f092c7a271202f27e7297b8eb9d7269c02))
* **store:** support for azerty ([#557](https://www.github.com/jef/streetmerchant/issues/557)) ([58416e1](https://www.github.com/jef/streetmerchant/commit/58416e1994006cc2e4055937c675e0f9191f6339))
* **store:** support for coolmod ([#605](https://www.github.com/jef/streetmerchant/issues/605)) ([c1dda4f](https://www.github.com/jef/streetmerchant/commit/c1dda4f9871988fad43d79f3bfe65f7c7860b9f7))
* add `meta` to logger ([#437](https://www.github.com/jef/streetmerchant/issues/437)) ([ae6bc86](https://www.github.com/jef/streetmerchant/commit/ae6bc86bcb75c154a2a68adda324f34f18281700))
* add alternate.nl support ([#552](https://www.github.com/jef/streetmerchant/issues/552)) ([aca6523](https://www.github.com/jef/streetmerchant/commit/aca65233339ddbbcc1dbd06f9011d6d44c6650cf))
* add asus-de store and asus 3080 tuf/oc to amazon-de ([#436](https://www.github.com/jef/streetmerchant/issues/436)) ([b4d8733](https://www.github.com/jef/streetmerchant/commit/b4d8733d1823e2fa5d3a1b80d2d4218bfa737cd7))
* add caseking and proshop-de store ([#521](https://www.github.com/jef/streetmerchant/issues/521)) ([1aaa102](https://www.github.com/jef/streetmerchant/commit/1aaa102c06281b60da593d04ced01f8b20a37a3b))
* add coolblue store ([#482](https://www.github.com/jef/streetmerchant/issues/482)) ([5c61333](https://www.github.com/jef/streetmerchant/commit/5c61333df00c0c30f04e4aced01a498c5816ad58))
* add german stores ([#462](https://www.github.com/jef/streetmerchant/issues/462)) ([85a07dc](https://www.github.com/jef/streetmerchant/commit/85a07dc0dc6a8dfe2aba1d4ea3e4cde6ec083086))
* add incognito mode ([#534](https://www.github.com/jef/streetmerchant/issues/534)) ([2b6457e](https://www.github.com/jef/streetmerchant/commit/2b6457e8409658b843204fa0aeafb00d48f9e53e))
* add link series to error message for better context ([#265](https://www.github.com/jef/streetmerchant/issues/265)) ([332b4a8](https://www.github.com/jef/streetmerchant/commit/332b4a8246320e458729c0b58c310d290df12530))
* Add PagerDuty Integration ([#565](https://www.github.com/jef/streetmerchant/issues/565)) ([11ee0bf](https://www.github.com/jef/streetmerchant/commit/11ee0bf1a3e2d0d550d2731f9de9e178c382ea1f))
* add proshop-dk ([#524](https://www.github.com/jef/streetmerchant/issues/524)) ([dc2fcf5](https://www.github.com/jef/streetmerchant/commit/dc2fcf5ab4dba8be459bd5aa6a41e3e097205d45))
* add support for multiple browser user agents ([#547](https://www.github.com/jef/streetmerchant/issues/547)) ([10a81dc](https://www.github.com/jef/streetmerchant/commit/10a81dcbd54557652537cb641cbbd727d39e34e5))
* add uk stores ([#455](https://www.github.com/jef/streetmerchant/issues/455)) ([b9b6b55](https://www.github.com/jef/streetmerchant/commit/b9b6b55c29d11f48b683816e5b8c1cab127ed5fd))
* allow filtering per model by a specific series ([#595](https://www.github.com/jef/streetmerchant/issues/595)) ([a42418f](https://www.github.com/jef/streetmerchant/commit/a42418f814dcd91354c136288d4c6a24e03a168d))
* optional per store min and max page sleep time ([#576](https://www.github.com/jef/streetmerchant/issues/576)) ([503d76f](https://www.github.com/jef/streetmerchant/commit/503d76f3c7d01368fc978af4ab02924d3d036ac0))
* **notification:** add `to` field for email ([#327](https://www.github.com/jef/streetmerchant/issues/327)) ([8828dd1](https://www.github.com/jef/streetmerchant/commit/8828dd15cd08959cd434bd256e8eac474dd17c49))
* **store:** add ttl for `scan` ([#555](https://www.github.com/jef/streetmerchant/issues/555)) ([4847725](https://www.github.com/jef/streetmerchant/commit/4847725d3a54d2f4dd0c349ff0ad80eb4bc4e9e3))
* add rog strix oc to amazon-de ([#471](https://www.github.com/jef/streetmerchant/issues/471)) ([e5909c5](https://www.github.com/jef/streetmerchant/commit/e5909c532da1c8b731e9835bffd8f31b76550d4d))
* add support for specifying smtp server ([#458](https://www.github.com/jef/streetmerchant/issues/458)) ([160ae37](https://www.github.com/jef/streetmerchant/commit/160ae37d7bee4f0323cb939566d586f1300aece6))
* allow multiple microcenter locations ([#487](https://www.github.com/jef/streetmerchant/issues/487)) ([2b0eab6](https://www.github.com/jef/streetmerchant/commit/2b0eab656d81314ce7d05064662ec138407550c3))
* clear cookies and cache ([#515](https://www.github.com/jef/streetmerchant/issues/515)) ([1f89945](https://www.github.com/jef/streetmerchant/commit/1f89945c5746befb2131381a358efdf8ac530e0c)), closes [#417](https://www.github.com/jef/streetmerchant/issues/417)
* max price per series ([#451](https://www.github.com/jef/streetmerchant/issues/451)) ([8adc07a](https://www.github.com/jef/streetmerchant/commit/8adc07a03e411dd536bebfdc7270db4bbf8ddb34))
* mqtt alerts ([#538](https://www.github.com/jef/streetmerchant/issues/538)) ([68ff5bf](https://www.github.com/jef/streetmerchant/commit/68ff5bf836c63c8e14d02c06777e02e64a6a0f38))
* twitch chat notification, multiple telegram chat ids and german web shop overhaul ([#528](https://www.github.com/jef/streetmerchant/issues/528)) ([675f13a](https://www.github.com/jef/streetmerchant/commit/675f13abb892d1158c92c41e3d57049313a5e0b8))
* **docker:** add docker and publish images to ghcr ([#411](https://www.github.com/jef/streetmerchant/issues/411)) ([c857985](https://www.github.com/jef/streetmerchant/commit/c857985a6d3736287976caf5b173f19046306465))
* **notification:** add at&t prepaid carrier ([#425](https://www.github.com/jef/streetmerchant/issues/425)) ([eb9d082](https://www.github.com/jef/streetmerchant/commit/eb9d082d178a42e35789ba822cfae7b35c0413c1))
* **notification:** add pushover priority setting ([#186](https://www.github.com/jef/streetmerchant/issues/186)) ([f277172](https://www.github.com/jef/streetmerchant/commit/f2771721914a20619833df8ccb2ac44298687b4d))
* **notification:** add Twillio notification provider ([#344](https://www.github.com/jef/streetmerchant/issues/344)) ([f2f8d81](https://www.github.com/jef/streetmerchant/commit/f2f8d81498d1acfb9359f4a690962042ec20d166))
* **store:** add `pny` ([#295](https://www.github.com/jef/streetmerchant/issues/295)) ([f6760d3](https://www.github.com/jef/streetmerchant/commit/f6760d3c65d60eae9e4b1e0fdba34e814f446a4c))
* **store:** add 3090s to amazon-ca ([#274](https://www.github.com/jef/streetmerchant/issues/274)) ([e992cf4](https://www.github.com/jef/streetmerchant/commit/e992cf4db85f045fc8d03c9b93286fb72bad1061))
* **store:** add additional cards to all stores ([#286](https://www.github.com/jef/streetmerchant/issues/286)) ([d25a643](https://www.github.com/jef/streetmerchant/commit/d25a643425020fa3f7cd48972360ede17501afeb))
* **store:** add amazon cards and `cartUrl`s ([#284](https://www.github.com/jef/streetmerchant/issues/284)) ([d69189f](https://www.github.com/jef/streetmerchant/commit/d69189f12c893fb6d88b198d802ff8e36a69bc88))
* **store:** add asus strix oc to asus store ([#385](https://www.github.com/jef/streetmerchant/issues/385)) ([e55398e](https://www.github.com/jef/streetmerchant/commit/e55398e789d52def6e15d1e5e10f56cdf5ea5bea))
* **store:** add evga 3090 to newegg canada ([#396](https://www.github.com/jef/streetmerchant/issues/396)) ([313d176](https://www.github.com/jef/streetmerchant/commit/313d176848a25f183334db8926ac0ec445a2c481))
* **store:** add ftw3 ultra to microcenter ([#448](https://www.github.com/jef/streetmerchant/issues/448)) ([5109227](https://www.github.com/jef/streetmerchant/commit/5109227e8899f57b828b157309a76c397c872559))
* **store:** add gamestop ([#390](https://www.github.com/jef/streetmerchant/issues/390)) ([7148451](https://www.github.com/jef/streetmerchant/commit/7148451b66e97f4f7dcdcc86ce06ba8712211bd5))
* **store:** add models to bestbuy ([#421](https://www.github.com/jef/streetmerchant/issues/421)) ([4085136](https://www.github.com/jef/streetmerchant/commit/4085136269b00f6bc5c8414836de8310dfec4166))
* **store:** add rog-strix-3080 to newegg-ca ([#489](https://www.github.com/jef/streetmerchant/issues/489)) ([207bc41](https://www.github.com/jef/streetmerchant/commit/207bc411ed240cd9150e018b21e735ba08a4d134))
* add `norway` to `nvidia-api` ([#304](https://www.github.com/jef/streetmerchant/issues/304)) ([eda6c85](https://www.github.com/jef/streetmerchant/commit/eda6c85fc03a70c5933308e96c572a480bb6c8a0))
* configurable status code behaviours ([#340](https://www.github.com/jef/streetmerchant/issues/340)) ([3b7487e](https://www.github.com/jef/streetmerchant/commit/3b7487e97ac9d93344403f50153f2de6243b1f0d))
* enhanced lookup behaviour ([#270](https://www.github.com/jef/streetmerchant/issues/270)) ([b868d1a](https://www.github.com/jef/streetmerchant/commit/b868d1a4833a8ec5ac1c79481530d75cd0c4b01e))
* in stock wait time per link now ([c7a716f](https://www.github.com/jef/streetmerchant/commit/c7a716f981976a76afe61a4d985bd6fe4343595b))
* low bandwidth mode ([#294](https://www.github.com/jef/streetmerchant/issues/294)) ([0aa7ab5](https://www.github.com/jef/streetmerchant/commit/0aa7ab596c907ce72c188eb4b1acdee088307437))
* max price filtering ([#383](https://www.github.com/jef/streetmerchant/issues/383)) ([fd294d2](https://www.github.com/jef/streetmerchant/commit/fd294d2baa06a1c0a68852497889a0412dea492e))
* **store:** adds aorus master 3080 to newegg ([#402](https://www.github.com/jef/streetmerchant/issues/402)) ([fddc002](https://www.github.com/jef/streetmerchant/commit/fddc0021d36e4d0a9dacccc546da8260684f0eeb))
* retry logic for nvidia session token and adding to cart ([#347](https://www.github.com/jef/streetmerchant/issues/347)) ([1bac1b9](https://www.github.com/jef/streetmerchant/commit/1bac1b928d401a819698848f3367edf54836b26f))
* support for proxy server ([#352](https://www.github.com/jef/streetmerchant/issues/352)) ([fdcd787](https://www.github.com/jef/streetmerchant/commit/fdcd787f91f26229db23e2291e8922b947007902))
* **store:** nvidia debug card for "product details" page ([#337](https://www.github.com/jef/streetmerchant/issues/337)) ([5b8d774](https://www.github.com/jef/streetmerchant/commit/5b8d774b7c7d31d6ba6fc43be3ea7b16a87d2e49))
### Bug Fixes
* `amazon.{nl,de}` test urls ([#345](https://www.github.com/jef/streetmerchant/issues/345)) ([589fbbc](https://www.github.com/jef/streetmerchant/commit/589fbbcd34393ceb2bd7c0a8ac391c54e14a21be))
* `envOrNumber` behavior ([#364](https://www.github.com/jef/streetmerchant/issues/364)) ([7d8897c](https://www.github.com/jef/streetmerchant/commit/7d8897cd9fb9ae0db796fd85da3f2b9d1a9f73af))
* `nvidia-api` ([#314](https://www.github.com/jef/streetmerchant/issues/314)) ([8d8e5b5](https://www.github.com/jef/streetmerchant/commit/8d8e5b587d2279a95d3e7837a99bea8c5990a477))
* add `amazon-nl`, captcha `amazon-de`, add ftw3 `newegg` ([#293](https://www.github.com/jef/streetmerchant/issues/293)) ([a2983eb](https://www.github.com/jef/streetmerchant/commit/a2983eb54c419ba3a56abf80d316ea136a05e0fa))
* add status code `429` to bandh `backOffStatusCodes` ([#404](https://www.github.com/jef/streetmerchant/issues/404)) ([7a981e7](https://www.github.com/jef/streetmerchant/commit/7a981e745673f2b12d48d7eed71fc34a6e4ba5b2))
* add support for stores label text to have uppercase letters ([#526](https://www.github.com/jef/streetmerchant/issues/526)) ([5ea7cc4](https://www.github.com/jef/streetmerchant/commit/5ea7cc4ca45c506d2b98d4b643b44ca4ede1d7a9))
* asus store links ([#573](https://www.github.com/jef/streetmerchant/issues/573)) ([f6db348](https://www.github.com/jef/streetmerchant/commit/f6db3489b8b8a737dfc425880703928d5bc8916d))
* bestbuy label container selector precision ([#491](https://www.github.com/jef/streetmerchant/issues/491)) ([cbc3b0b](https://www.github.com/jef/streetmerchant/commit/cbc3b0b025469e9882ba8267f18f909c08c6c931))
* corrected norway locales ([#356](https://www.github.com/jef/streetmerchant/issues/356)) ([d2476dd](https://www.github.com/jef/streetmerchant/commit/d2476ddb08606545b32b9676e2d299d57ec5cb6a))
* cyclical dependencies ([ed970fc](https://www.github.com/jef/streetmerchant/commit/ed970fc397210eb6ff684c7e82c79eb685a5d0d9)), closes [#468](https://www.github.com/jef/streetmerchant/issues/468)
* denver `microcenter` name ([#296](https://www.github.com/jef/streetmerchant/issues/296)) ([349f55d](https://www.github.com/jef/streetmerchant/commit/349f55d3603517b5741fce6ac42b29141816ea79))
* dutch stores components ([#513](https://www.github.com/jef/streetmerchant/issues/513)) ([586029c](https://www.github.com/jef/streetmerchant/commit/586029c92aa19bdddcc85b7a837bb7a16bb1d28d))
* gamestop false positives ([#395](https://www.github.com/jef/streetmerchant/issues/395)) ([d3bb507](https://www.github.com/jef/streetmerchant/commit/d3bb507edca112124115ed88fb03cf14440d95ef))
* in stock wait time ([#325](https://www.github.com/jef/streetmerchant/issues/325)) ([07bd246](https://www.github.com/jef/streetmerchant/commit/07bd246e876cd27df1b5019af5ee8613bb5368f0)), closes [#315](https://www.github.com/jef/streetmerchant/issues/315)
* max price getter updated to match .env ([#516](https://www.github.com/jef/streetmerchant/issues/516)) ([32f114b](https://www.github.com/jef/streetmerchant/commit/32f114b23527ee247c84c081a2cd0264de3b4847)), closes [#514](https://www.github.com/jef/streetmerchant/issues/514) [#510](https://www.github.com/jef/streetmerchant/issues/510)
* page sleep ([#586](https://www.github.com/jef/streetmerchant/issues/586)) ([a2af30b](https://www.github.com/jef/streetmerchant/commit/a2af30b70334cdbbfa51140d5de23a2d6b8429c8)), closes [#594](https://www.github.com/jef/streetmerchant/issues/594) [#576](https://www.github.com/jef/streetmerchant/issues/576)
* remove 3090 drid for DK/FI regions ([#361](https://www.github.com/jef/streetmerchant/issues/361)) ([f1d22d1](https://www.github.com/jef/streetmerchant/commit/f1d22d1684c8e70f09acd9978e6ea802d7224c8b))
* trim strings from comma-separated values ([#472](https://www.github.com/jef/streetmerchant/issues/472)) ([f7ed865](https://www.github.com/jef/streetmerchant/commit/f7ed86506b4e76d5bc20787068be83a44ec485b5))
* typo in maxPrice for 3090 ([#496](https://www.github.com/jef/streetmerchant/issues/496)) ([e073590](https://www.github.com/jef/streetmerchant/commit/e0735903b7b4b0d542dbbd76b9a860b1eca24e96))
* update gigabyte model `vision oc` ([#550](https://www.github.com/jef/streetmerchant/issues/550)) ([4fefe22](https://www.github.com/jef/streetmerchant/commit/4fefe22a907094fa39af5b4f2e3f8f3fe6897115))
* update new additions with web panel and sleep operations ([#606](https://www.github.com/jef/streetmerchant/issues/606)) ([61a23fe](https://www.github.com/jef/streetmerchant/commit/61a23fe9782223dc067dbc8251c3b09adbca0a43))
* update pushbullet import to match package ([#637](https://www.github.com/jef/streetmerchant/issues/637)) ([d7360f7](https://www.github.com/jef/streetmerchant/commit/d7360f71ef1a076713246ad2832ca58e7163e492))
* **env:** default `LOG_LEVEL` ([9636572](https://www.github.com/jef/streetmerchant/commit/9636572c7de36f7ac6800ba31ac60fcd7bd2fd03))
* **notification:** discord false triggers ([#346](https://www.github.com/jef/streetmerchant/issues/346)) ([3b90bbb](https://www.github.com/jef/streetmerchant/commit/3b90bbbe5d751003a39823e9113eaee8cbfcf1a2))
* **notification:** sms subject output ([#298](https://www.github.com/jef/streetmerchant/issues/298)) ([03755d5](https://www.github.com/jef/streetmerchant/commit/03755d5eb117ac14797e0180c74f50b401e50cb5))
* **notifications:** twilio client creation ([#349](https://www.github.com/jef/streetmerchant/issues/349)) ([5414b24](https://www.github.com/jef/streetmerchant/commit/5414b249a6f938615cfad02ca22c171a5f86e127))
* **store:** gamestop `label.inStock` ([9e7976d](https://www.github.com/jef/streetmerchant/commit/9e7976df5778a953c4fb6ca7553773655c1f4127))
* **store:** pccomponents model normalization ([#563](https://www.github.com/jef/streetmerchant/issues/563)) ([699e77d](https://www.github.com/jef/streetmerchant/commit/699e77d960b17dcb50378975a1913b0badeabfcc))
* updating amazon test model card to an in stock product ([#492](https://www.github.com/jef/streetmerchant/issues/492)) ([81daa7c](https://www.github.com/jef/streetmerchant/commit/81daa7c5596ab23bd9e6aac29fa63ee09e136827))
* **config:** `MAX_PRICE` quotations ([#426](https://www.github.com/jef/streetmerchant/issues/426)) ([b7e5941](https://www.github.com/jef/streetmerchant/commit/b7e5941a9598a09afabbb79c5636b768345009a3))
* **store:** container names on `nvidia` ([#333](https://www.github.com/jef/streetmerchant/issues/333)) ([772de90](https://www.github.com/jef/streetmerchant/commit/772de900a1386e9635d139e152fe86366404ded4))
* **store:** update `inStock` and `maxPrice` for newegg, newegg-ca ([#433](https://www.github.com/jef/streetmerchant/issues/433)) ([628cab1](https://www.github.com/jef/streetmerchant/commit/628cab1b605e4363c8dd5ad43476292ecb12db74)), closes [#400](https://www.github.com/jef/streetmerchant/issues/400)
### Reverts
* reduce false-positive during ci/cd ([79b9bfe](https://www.github.com/jef/streetmerchant/commit/79b9bfe9a83858117f7a58b4b8b1a1569d80c442))
## [1.5.0](https://www.github.com/jef/streetmerchant/compare/v1.4.0...v1.5.0) (2020-09-24)
### Features
* filter models ([#261](https://www.github.com/jef/streetmerchant/issues/261)) ([e1b34a9](https://www.github.com/jef/streetmerchant/commit/e1b34a9ccfa45fa1a11da9af9074059b6084904b))
* **log:** colors for console logs ([#207](https://www.github.com/jef/streetmerchant/issues/207)) ([0ad67fe](https://www.github.com/jef/streetmerchant/commit/0ad67fe20453898ce0a6b5faff00062735411119))
* **notification:** add desktop notifications ([#140](https://www.github.com/jef/streetmerchant/issues/140)) ([722eaf3](https://www.github.com/jef/streetmerchant/commit/722eaf3cd680c4600b79f842c6c5acdb9e51ad71))
* **notification:** add pushbullet, add url with notifications ([#226](https://www.github.com/jef/streetmerchant/issues/226)) ([74490ea](https://www.github.com/jef/streetmerchant/commit/74490eae3ab30de7d7a708d5dd970e070f27f2ea))
* **notification:** twitter integration ([#224](https://www.github.com/jef/streetmerchant/issues/224)) ([908ed35](https://www.github.com/jef/streetmerchant/commit/908ed358826f9de530f5892ded1a54964a304d15))
* **store:** add `bannedSeller` label for stores ([#173](https://www.github.com/jef/streetmerchant/issues/173)) ([71c6774](https://www.github.com/jef/streetmerchant/commit/71c6774511f7ba13d34d2e40b69abf52d06e6225))
* **store:** add amazon-de ([#167](https://www.github.com/jef/streetmerchant/issues/167)) ([8a70f14](https://www.github.com/jef/streetmerchant/commit/8a70f147438584cc334710bc66220d05eb32fcbd))
* **store:** add bestbuy.ca ([#229](https://www.github.com/jef/streetmerchant/issues/229)) ([22fd22f](https://www.github.com/jef/streetmerchant/commit/22fd22fe743d3e286eae3430aecd6e7a0a5de8c0))
* **store:** add evga eu ([#172](https://www.github.com/jef/streetmerchant/issues/172)) ([605bdd7](https://www.github.com/jef/streetmerchant/commit/605bdd7ca73c585734f6c5df1a86f4fbfbff9163))
* **store:** add evga model ([#220](https://www.github.com/jef/streetmerchant/issues/220)) ([190388c](https://www.github.com/jef/streetmerchant/commit/190388cfe4a5e3f19abccd0ff786f654b9a04d2f))
* **store:** add microcenter store location config ([#215](https://www.github.com/jef/streetmerchant/issues/215)) ([d6a27c9](https://www.github.com/jef/streetmerchant/commit/d6a27c988c7b1011c7a10084d8283a60ed8aea5c))
* **stores:** add 3090 for bestbuy, newegg ([#249](https://www.github.com/jef/streetmerchant/issues/249)) ([dd45dba](https://www.github.com/jef/streetmerchant/commit/dd45dba82cb86f7e7664298dd202b93bbbd46d9f))
* **stores:** add 3090s for amazon-ca, bestbuy-ca, newegg-ca ([#258](https://www.github.com/jef/streetmerchant/issues/258)) ([482fb58](https://www.github.com/jef/streetmerchant/commit/482fb58cbfde6f95fb6f77de790d76e6aa2a5926))
* add chromium sandbox skipping ([#209](https://www.github.com/jef/streetmerchant/issues/209)) ([2065680](https://www.github.com/jef/streetmerchant/commit/20656805c1259637bb3a4db465a8d16d4780296a))
* deprecate nvidia (api), add 3080 add 3090 ([9f470f0](https://www.github.com/jef/streetmerchant/commit/9f470f06e9e9fb605d340c0b0f9016d7288e8c0b))
* invert logic ([#141](https://www.github.com/jef/streetmerchant/issues/141)) ([6608a79](https://www.github.com/jef/streetmerchant/commit/6608a79769ff03543ab4ed2f2cead3410d7d7e99))
* multiple discord roles and webhooks, qol for envs ([#260](https://www.github.com/jef/streetmerchant/issues/260)) ([8913879](https://www.github.com/jef/streetmerchant/commit/8913879593252c9c83020b2e2c46bad7537b2a20))
* **store:** add newegg.ca ([#160](https://www.github.com/jef/streetmerchant/issues/160)) ([76f5849](https://www.github.com/jef/streetmerchant/commit/76f584988979a40269fd3641e996800a63b4b163)), closes [#159](https://www.github.com/jef/streetmerchant/issues/159)
* **store:** add office depot ([#157](https://www.github.com/jef/streetmerchant/issues/157)) ([0df2dcf](https://www.github.com/jef/streetmerchant/commit/0df2dcfbd48235fba7126d96cd912634c5b4fdd9))
* **store:** add zotac store ([#214](https://www.github.com/jef/streetmerchant/issues/214)) ([7875855](https://www.github.com/jef/streetmerchant/commit/78758552b22e608dbdf3e76397f5b5efb893fef5))
* add delay on captcha to try and evade faster ([#119](https://www.github.com/jef/streetmerchant/issues/119)) ([4f83b3b](https://www.github.com/jef/streetmerchant/commit/4f83b3b233657841a4068a8ff9dd6c8dbff631c0))
* bestbuy bypass international splash, newegg add to cart ([#153](https://www.github.com/jef/streetmerchant/issues/153)) ([133a54f](https://www.github.com/jef/streetmerchant/commit/133a54fa170bb16dd26b0d72b1a02c56b3851b7f))
* card series filter, fix: newegg `oosLabels` ([#120](https://www.github.com/jef/streetmerchant/issues/120)) ([252459d](https://www.github.com/jef/streetmerchant/commit/252459d5d3de2b8cb25deee9ae318108e3dda2be))
* custom user agent ([#121](https://www.github.com/jef/streetmerchant/issues/121)) ([d9be3fe](https://www.github.com/jef/streetmerchant/commit/d9be3fe6183eaa9694b186c7a75e1f28bb31dace))
* include screenshot for emails + sms notifications ([#144](https://www.github.com/jef/streetmerchant/issues/144)) ([7191e03](https://www.github.com/jef/streetmerchant/commit/7191e03a80e577b59b2861289aa658cfa0ffc0fa))
* load puppeteer faster, run stores in parallel ([#83](https://www.github.com/jef/streetmerchant/issues/83)) ([d1a5aa1](https://www.github.com/jef/streetmerchant/commit/d1a5aa1f02ff0a8f293b93e3c078b5943908a95b))
* set country in config, login to nvidia when starting ([#162](https://www.github.com/jef/streetmerchant/issues/162)) ([ebd6091](https://www.github.com/jef/streetmerchant/commit/ebd6091a09fb5e52a66742767ae4b58323cd7447))
* temporarily pause requests if store has stock ([#147](https://www.github.com/jef/streetmerchant/issues/147)) ([6413144](https://www.github.com/jef/streetmerchant/commit/6413144c1cae89f33f852cc93870b407a784f2bb))
* update for complex add to cart, fix nvidia ([#108](https://www.github.com/jef/streetmerchant/issues/108)) ([3ea146d](https://www.github.com/jef/streetmerchant/commit/3ea146da14ea40d145ccfc05436beeb0a9fed8d9))
* **notification:** discord integration ([#82](https://www.github.com/jef/streetmerchant/issues/82)) ([a3fc07d](https://www.github.com/jef/streetmerchant/commit/a3fc07daf0a3f33f18e03d4cfc13d3477a9c4fa0))
* **scraping:** change lookup impl, add randomize sleep ([#110](https://www.github.com/jef/streetmerchant/issues/110)) ([dc0f710](https://www.github.com/jef/streetmerchant/commit/dc0f7106749b0afa0ff1c91cabb90b65be30e909))
* **store:** add adorama ([#104](https://www.github.com/jef/streetmerchant/issues/104)) ([5b91065](https://www.github.com/jef/streetmerchant/commit/5b910650430ad4806b22722efa9a013e72ea47e7))
* **store:** add asus ([#102](https://www.github.com/jef/streetmerchant/issues/102)) ([a501cf7](https://www.github.com/jef/streetmerchant/commit/a501cf703bb05f47af6240a4b16a3dc4dcf3baf5))
### Bug Fixes
* **store:** adorama captcha config ([#234](https://www.github.com/jef/streetmerchant/issues/234)) ([9a53917](https://www.github.com/jef/streetmerchant/commit/9a539175860f98de3b023009f751e59d94f0aaef))
* color logs and notification ([76b28a6](https://www.github.com/jef/streetmerchant/commit/76b28a6dbdf5480c12a8c82b031c3f2880d17b11))
* **notification:** change discord ping visibility ([#168](https://www.github.com/jef/streetmerchant/issues/168)) ([9675c5b](https://www.github.com/jef/streetmerchant/commit/9675c5b8d61226db4652964e7f1e7399bb82d04e))
* **store:** bandh removed cards ([#201](https://www.github.com/jef/streetmerchant/issues/201)) ([6409646](https://www.github.com/jef/streetmerchant/commit/6409646d57bf2b2bb5a4bcf8239740abed8edafb))
* `rateLimitTimeout` not being defaulted ([#106](https://www.github.com/jef/streetmerchant/issues/106)) ([28947be](https://www.github.com/jef/streetmerchant/commit/28947be9bc8981d7a45a5d0e69c18d039fcd9ed3))
* check response for rate limiting ([#58](https://www.github.com/jef/streetmerchant/issues/58)) ([#98](https://www.github.com/jef/streetmerchant/issues/98)) ([b7d9462](https://www.github.com/jef/streetmerchant/commit/b7d9462e794ef3961fb57c79ef8f66e77d25d20a))
* keep single `Store` from draining ([e819e46](https://www.github.com/jef/streetmerchant/commit/e819e46116d4e0b067a59791094b5cfbd2d7cd45))
* memory leak due to adblocker ([#139](https://www.github.com/jef/streetmerchant/issues/139)) ([0f6e570](https://www.github.com/jef/streetmerchant/commit/0f6e570cc817dfc10bcddc5743a0faf3b1489270))
* **nvidia:** false positives ([#132](https://www.github.com/jef/streetmerchant/issues/132)) ([a75d214](https://www.github.com/jef/streetmerchant/commit/a75d214dd555d5e0388cb54b15be324cc25b6a15))
* newegg out-of-stock ([#124](https://www.github.com/jef/streetmerchant/issues/124)) ([770a13a](https://www.github.com/jef/streetmerchant/commit/770a13ac3559401b430547908d1df014582c1e37))
* newegg out-of-stock labels ([#134](https://www.github.com/jef/streetmerchant/issues/134)) ([19c8f18](https://www.github.com/jef/streetmerchant/commit/19c8f188c796258c469c2b4c6461fc5da3907a47))
* **notification:** wrong condition for sounds playing ([#91](https://www.github.com/jef/streetmerchant/issues/91)) ([103d96d](https://www.github.com/jef/streetmerchant/commit/103d96dc81d6fd097fcdbed5bdd7487d7d73bf6e))
* **store:** false positives for nvidia. ([#85](https://www.github.com/jef/streetmerchant/issues/85)) ([c65fa04](https://www.github.com/jef/streetmerchant/commit/c65fa04666775060532e28076a0b4af50f8dd30b))
## [1.4.0](https://www.github.com/jef/streetmerchant/compare/v1.3.0...v1.4.0) (2020-09-19)
### Features
* **notification:** add mint mobile carrier ([#70](https://www.github.com/jef/streetmerchant/issues/70)) ([8aba7ec](https://www.github.com/jef/streetmerchant/commit/8aba7ecbdb0bfce06257b7b9066e8fccbd82e47e))
* **notification:** add pushover ([#55](https://www.github.com/jef/streetmerchant/issues/55)) ([c85658b](https://www.github.com/jef/streetmerchant/commit/c85658bf82fdf360e5e9d8345eaa846f0572e67c))
* **notification:** add telegram ([#71](https://www.github.com/jef/streetmerchant/issues/71)) ([393d5f6](https://www.github.com/jef/streetmerchant/commit/393d5f689887bf1d6f30a37eea163b2e6bbd4efa))
* **notification:** add telus sms ([6be74a1](https://www.github.com/jef/streetmerchant/commit/6be74a19f3d3f999145d17ac8e91c59db2502071))
* **store:** add amazon.ca, fix timeout ([#75](https://www.github.com/jef/streetmerchant/issues/75)) ([d4de1a4](https://www.github.com/jef/streetmerchant/commit/d4de1a4638e903eb9518354ab6fb2f8c4befc347))
* webpage toggle, sound notification, fix evga links ([#52](https://www.github.com/jef/streetmerchant/issues/52)) ([a217409](https://www.github.com/jef/streetmerchant/commit/a21740942bbbbe967948062fa06cfc82c31eb755))
### Performance Improvements
* browser abstraction ([#68](https://www.github.com/jef/nvidia-snatcher/issues/68)) ([#81](https://www.github.com/jef/nvidia-snatcher/issues/81)) ([ebbdfe3](https://www.github.com/jef/nvidia-snatcher/commit/ebbdfe3f6378516112f4b6e004bbd6ccf13af685))
* browser abstraction ([#68](https://www.github.com/jef/streetmerchant/issues/68)) ([#81](https://www.github.com/jef/streetmerchant/issues/81)) ([ebbdfe3](https://www.github.com/jef/streetmerchant/commit/ebbdfe3f6378516112f4b6e004bbd6ccf13af685))
## [1.3.0](https://www.github.com/jef/nvidia-snatcher/compare/v1.2.0...v1.3.0) (2020-09-19)
## [1.3.0](https://www.github.com/jef/streetmerchant/compare/v1.2.0...v1.3.0) (2020-09-19)
### Features
* **logging:** add timestamp ([#48](https://www.github.com/jef/nvidia-snatcher/issues/48)) ([6c3cd01](https://www.github.com/jef/nvidia-snatcher/commit/6c3cd016850d03a6c6a894cab24ba2d3781a9af1))
* **logging:** add timestamp ([#48](https://www.github.com/jef/streetmerchant/issues/48)) ([6c3cd01](https://www.github.com/jef/streetmerchant/commit/6c3cd016850d03a6c6a894cab24ba2d3781a9af1))
### Bug Fixes
* **store:** amazon captcha false-positives ([#54](https://www.github.com/jef/nvidia-snatcher/issues/54)) ([5c9e0b6](https://www.github.com/jef/nvidia-snatcher/commit/5c9e0b6d06bd7e1223a7587fec067c8e79c9cfd6))
* evga xc3 ultra link ([#56](https://www.github.com/jef/nvidia-snatcher/issues/56)) ([d907092](https://www.github.com/jef/nvidia-snatcher/commit/d907092b443b056605e09cb2ca3e94e6ca811d9e))
* screenshot size, add screenshot config setting ([#53](https://www.github.com/jef/nvidia-snatcher/issues/53)) ([7cfc7c7](https://www.github.com/jef/nvidia-snatcher/commit/7cfc7c74429c808fa14468cdd497eb9f9aeb922c))
* sms carrier config, add google carrier ([#44](https://www.github.com/jef/nvidia-snatcher/issues/44)) ([971fec2](https://www.github.com/jef/nvidia-snatcher/commit/971fec20e441e2b12a38d5c8d17d2d4cb5e64d6b))
* **store:** amazon captcha false-positives ([#54](https://www.github.com/jef/streetmerchant/issues/54)) ([5c9e0b6](https://www.github.com/jef/streetmerchant/commit/5c9e0b6d06bd7e1223a7587fec067c8e79c9cfd6))
* evga xc3 ultra link ([#56](https://www.github.com/jef/streetmerchant/issues/56)) ([d907092](https://www.github.com/jef/streetmerchant/commit/d907092b443b056605e09cb2ca3e94e6ca811d9e))
* screenshot size, add screenshot config setting ([#53](https://www.github.com/jef/streetmerchant/issues/53)) ([7cfc7c7](https://www.github.com/jef/streetmerchant/commit/7cfc7c74429c808fa14468cdd497eb9f9aeb922c))
* sms carrier config, add google carrier ([#44](https://www.github.com/jef/streetmerchant/issues/44)) ([971fec2](https://www.github.com/jef/streetmerchant/commit/971fec20e441e2b12a38d5c8d17d2d4cb5e64d6b))
## [1.2.0](https://www.github.com/jef/nvidia-snatcher/compare/v1.1.0...v1.2.0) (2020-09-19)
## [1.2.0](https://www.github.com/jef/streetmerchant/compare/v1.1.0...v1.2.0) (2020-09-19)
### Features
* **ci:** add `npm run build` ([faad3e6](https://www.github.com/jef/nvidia-snatcher/commit/faad3e68efafaab135b77080b02af83429b6eca6))
* **store:** microcenter ([#39](https://www.github.com/jef/nvidia-snatcher/issues/39)) ([edf17e9](https://www.github.com/jef/nvidia-snatcher/commit/edf17e926f3d186e7630da2834d78de3e540a956))
* add Amazon links ([#26](https://www.github.com/jef/nvidia-snatcher/issues/26)) ([f0560ce](https://www.github.com/jef/nvidia-snatcher/commit/f0560ce72bfbfdd6360b85e23edaa875d58f228f))
* add email test, fix memory leak ([#24](https://www.github.com/jef/nvidia-snatcher/issues/24)) ([a2fb973](https://www.github.com/jef/nvidia-snatcher/commit/a2fb97333c6eb81250b24ccb6859e9356acded21))
* more Best Buy AIBs ([#41](https://www.github.com/jef/nvidia-snatcher/issues/41)) ([7d7bd18](https://www.github.com/jef/nvidia-snatcher/commit/7d7bd18b4dd656ec01ef2fb2d8519e2a7f34ef70))
* page timeout ([#22](https://www.github.com/jef/nvidia-snatcher/issues/22)) ([643045c](https://www.github.com/jef/nvidia-snatcher/commit/643045c7e0158fb6526bd09427b96cce7958bcea))
* slack integration ([#34](https://www.github.com/jef/nvidia-snatcher/issues/34)) ([c0a881a](https://www.github.com/jef/nvidia-snatcher/commit/c0a881a16ebb573bf35b7f29cb27e5b3c2e1fe78))
* sms notification for usa carriers ([#40](https://www.github.com/jef/nvidia-snatcher/issues/40)) ([5a3636b](https://www.github.com/jef/nvidia-snatcher/commit/5a3636bcb639bb33bc586af96264f5df2f3a8307))
* update to check if FE in-stock via Digital River ([#29](https://www.github.com/jef/nvidia-snatcher/issues/29)) ([00ede13](https://www.github.com/jef/nvidia-snatcher/commit/00ede13501082f530ea672a349816be1d31621a8))
* **ci:** add `npm run build` ([faad3e6](https://www.github.com/jef/streetmerchant/commit/faad3e68efafaab135b77080b02af83429b6eca6))
* **store:** microcenter ([#39](https://www.github.com/jef/streetmerchant/issues/39)) ([edf17e9](https://www.github.com/jef/streetmerchant/commit/edf17e926f3d186e7630da2834d78de3e540a956))
* add Amazon links ([#26](https://www.github.com/jef/streetmerchant/issues/26)) ([f0560ce](https://www.github.com/jef/streetmerchant/commit/f0560ce72bfbfdd6360b85e23edaa875d58f228f))
* add email test, fix memory leak ([#24](https://www.github.com/jef/streetmerchant/issues/24)) ([a2fb973](https://www.github.com/jef/streetmerchant/commit/a2fb97333c6eb81250b24ccb6859e9356acded21))
* more Best Buy AIBs ([#41](https://www.github.com/jef/streetmerchant/issues/41)) ([7d7bd18](https://www.github.com/jef/streetmerchant/commit/7d7bd18b4dd656ec01ef2fb2d8519e2a7f34ef70))
* page timeout ([#22](https://www.github.com/jef/streetmerchant/issues/22)) ([643045c](https://www.github.com/jef/streetmerchant/commit/643045c7e0158fb6526bd09427b96cce7958bcea))
* slack integration ([#34](https://www.github.com/jef/streetmerchant/issues/34)) ([c0a881a](https://www.github.com/jef/streetmerchant/commit/c0a881a16ebb573bf35b7f29cb27e5b3c2e1fe78))
* sms notification for usa carriers ([#40](https://www.github.com/jef/streetmerchant/issues/40)) ([5a3636b](https://www.github.com/jef/streetmerchant/commit/5a3636bcb639bb33bc586af96264f5df2f3a8307))
* update to check if FE in-stock via Digital River ([#29](https://www.github.com/jef/streetmerchant/issues/29)) ([00ede13](https://www.github.com/jef/streetmerchant/commit/00ede13501082f530ea672a349816be1d31621a8))
### Bug Fixes
* small error in `isOutOfStock` logic ([#33](https://www.github.com/jef/nvidia-snatcher/issues/33)) ([c2a210c](https://www.github.com/jef/nvidia-snatcher/commit/c2a210cc815c3aa06f6f14d33954f65577d95954))
* small error in `isOutOfStock` logic ([#33](https://www.github.com/jef/streetmerchant/issues/33)) ([c2a210c](https://www.github.com/jef/streetmerchant/commit/c2a210cc815c3aa06f6f14d33954f65577d95954))
## [1.1.0](https://www.github.com/jef/nvidia-snatcher/compare/v1.0.0...v1.1.0) (2020-09-18)
## [1.1.0](https://www.github.com/jef/streetmerchant/compare/v1.0.0...v1.1.0) (2020-09-18)
### Features
* add conventional commits ([#14](https://www.github.com/jef/nvidia-snatcher/issues/14)) ([eb4f5e0](https://www.github.com/jef/nvidia-snatcher/commit/eb4f5e034176a286eabe381c98ced77cd197d7fb))
* add evga ([#17](https://www.github.com/jef/nvidia-snatcher/issues/17)) ([#18](https://www.github.com/jef/nvidia-snatcher/issues/18)) ([6c65032](https://www.github.com/jef/nvidia-snatcher/commit/6c6503219f7c188783c24a44f7052b276a4b39a3))
* add conventional commits ([#14](https://www.github.com/jef/streetmerchant/issues/14)) ([eb4f5e0](https://www.github.com/jef/streetmerchant/commit/eb4f5e034176a286eabe381c98ced77cd197d7fb))
* add evga ([#17](https://www.github.com/jef/streetmerchant/issues/17)) ([#18](https://www.github.com/jef/streetmerchant/issues/18)) ([6c65032](https://www.github.com/jef/streetmerchant/commit/6c6503219f7c188783c24a44f7052b276a4b39a3))
### Bug Fixes
* exception handling `TimeoutError` ([#20](https://www.github.com/jef/nvidia-snatcher/issues/20)) ([#21](https://www.github.com/jef/nvidia-snatcher/issues/21)) ([00a0687](https://www.github.com/jef/nvidia-snatcher/commit/00a0687d3eba6a8fca871161b447529be00c8896))
* exception handling `TimeoutError` ([#20](https://www.github.com/jef/streetmerchant/issues/20)) ([#21](https://www.github.com/jef/streetmerchant/issues/21)) ([00a0687](https://www.github.com/jef/streetmerchant/commit/00a0687d3eba6a8fca871161b447529be00c8896))
## 1.0.0 (2020-09-18)
### Features
* use ts, update cd, update `README` ([#12](https://www.github.com/jef/nvidia-snatcher/issues/12)) ([e9fc0bf](https://www.github.com/jef/nvidia-snatcher/commit/e9fc0bf5f770481d5e508d8b520e1020624e05d2))
* use ts, update cd, update `README` ([#12](https://www.github.com/jef/streetmerchant/issues/12)) ([e9fc0bf](https://www.github.com/jef/streetmerchant/commit/e9fc0bf5f770481d5e508d8b520e1020624e05d2))
+76
View File
@@ -0,0 +1,76 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at jeffreylec@gmail.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
+8 -4
View File
@@ -1,5 +1,6 @@
# Build the source code
FROM node:15.0.1-alpine3.12 AS builder
FROM node:14.15.0-alpine3.12 AS builder
LABEL org.opencontainers.image.source="https://github.com/jef/streetmerchant"
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
@@ -14,7 +15,7 @@ COPY src/ src/
RUN npm run build
RUN npm prune --production
FROM node:15.0.1-alpine3.12
FROM node:14.15.0-alpine3.12
RUN apk add --no-cache chromium
@@ -32,6 +33,9 @@ WORKDIR /app
COPY --from=builder /build/node_modules/ node_modules/
COPY --from=builder /build/build/ build/
COPY web/ web/
COPY package.json package.json
COPY version.txt version.txt
CMD [ "node", "./build/index.js" ]
ENTRYPOINT ["npm", "run"]
CMD ["start:production"]
+159 -44
View File
@@ -1,40 +1,52 @@
# nvidia-snatcher [![ci](https://github.com/jef/nvidia-snatcher/workflows/ci/badge.svg)](https://github.com/jef/nvidia-snatcher/actions?query=workflow%3Aci) [![chat on freenode](https://img.shields.io/badge/chat-on%20freenode-blue)](https://kiwiirc.com/nextclient/irc.kiwiirc.com/?nick=kiwi_?#streetmerchant)
<p align="center"><a href="https://github.com/jef/streetmerchant#readme"><img src="https://raw.githubusercontent.com/jef/streetmerchant/main/media/streetmerchant.png" alt="streetmerchant" /></a></p>
<p align="center">The world's easiest, most powerful stock checker
<br/><br/>
<a href="https://github.com/jef/streetmerchant/actions?query=workflow%3Aci"><img src="https://github.com/jef/streetmerchant/workflows/ci/badge.svg" /></a>
<a href="https://discord.gg/gbVY4vB9JF"><img src="https://img.shields.io/discord/773913070665859073.svg?label=chat&logo=discord&logoColor=ffffff&color=7389D8" alt="Tweet" /></a>
<a href="https://twitter.com/intent/tweet?text=Beat%20the%20masses%20with%20streetmerchant&url=https://github.com/jef/streetmerchant&hashtags=typescript,opensource,bot,shopping"><img src="https://img.shields.io/badge/twitter-share-green?logo=twitter&style=social" alt="Tweet" /></a>
<br/><br/>
<a href="https://github.com/jef/streetmerchant#faq">FAQ</a> |
<a href="https://github.com/jef/streetmerchant/issues">Issues</a> |
<a href="https://github.com/jef/streetmerchant/wiki">Wiki</a>
</p>
[FAQ](#FAQ) | [Issues](https://github.com/jef/nvidia-snatcher/issues)
| [Wiki](https://github.com/jef/nvidia-snatcher/wiki)
## Features
![nvidia-snatcher](media/screenshot.png)
The purpose of this bot is to get an Nvidia card. It tries multiple things to do that.
- Currently, `nvidia-snatcher` is not capable of purchasing a card for you
- Scrapes multiple websites for patterns of being stocked
- API requests are a work in progress (very soon)
- Scrapes multiple websites for patterns of being stocked via API and Chromium
- Opens browser when stock is available
- Ability to send notifications when stock is available
> :point_right: The bot _will not_ automatically buy for you
## Installation overview
Linux, macOS, and Windows are all capable operating systems.
You do not need any computer skills, smarts, or anything of that nature. You are very capable as you have made it this
far. Some basic understanding how a terminal, git, and or Node.js is a bonus, but that does not limit you to
getting `nvidia-snatcher` running!
getting `streetmerchant` running!
### Installation: native
- [Node.js 15](https://nodejs.org/en/)
| Reference | Note |
|:---:|---|
| tag | Example, `v1.0.0`; stable |
| `main` | Latest HEAD; not tagged, could be unstable |
- [Node.js 14](https://nodejs.org/en/)
- [git](https://git-scm.com/)
- Clone this project `git clone https://github.com/jef/nvidia-snatcher.git`
- Clone this project `git clone https://github.com/jef/streetmerchant.git`
- To checkout a particular ref, use `git checkout <ref name>` after cloning
- Navigate to this project by entering `cd streetmerchant`
- Run `npm install`
- Copy `.env-example` to a new file `.env` and edit the `.env` file to your liking using
your [favorite text editor](https://code.visualstudio.com/)
- More on this in [customization](#Customization)
- More on this in [customization](#Customization)
- Run `npm run start` to start
At any point you want the program to stop, use <kbd>Ctrl</kbd> + <kbd>C</kbd>.
> :point_right: Please visit the [wiki](https://github.com/jef/nvidia-snatcher/wiki) if you need more help with installation.
> :point_right: Please visit the [wiki](https://github.com/jef/streetmerchant/wiki) if you need more help with installation.
### Installation: Docker
@@ -42,10 +54,20 @@ Available via GitHub Container Registry.
| Tag | Note |
|:---:|---|
| `latest` | Latest stable build |
| `nightly` | Latest HEAD build, could be unstable |
| `latest` | Latest release; stable |
| `nightly` | Latest HEAD each day at midnight UTC; could be unstable |
Use `docker run --cap-add=SYS_ADMIN -it --rm --env-file ./.env ghcr.io/jef/nvidia-snatcher:nightly` to run.
```sh
# to run
docker run --cap-add=SYS_ADMIN \
-it --rm --env-file ./.env \
ghcr.io/jef/streetmerchant:nightly
# to test notifications
docker run --cap-add=SYS_ADMIN \
-it --rm --env-file ./.env \
ghcr.io/jef/streetmerchant:nightly test:notification:production
```
### Developer notes
@@ -54,7 +76,7 @@ filesystem changes are detected in the `src/` folder or `.env` file.
## Customization
To customize `nvidia-snatcher`, make a copy of `.env-example` as `.env` and make any changes to your liking. _All
To customize `streetmerchant`, make a copy of `.env-example` as `.env` and make any changes to your liking. _All
environment variables are **optional**._
<details>
@@ -64,6 +86,7 @@ environment variables are **optional**._
| Environment variable | Description | Notes |
|:---:|---|---|
| `AUTO_ADD_TO_CART` | Enable auto add to cart on support stores | Default: `true` |
| `BROWSER_TRUSTED` | Skip Chromium Sandbox | Useful for containerized environments, default: `false` |
| `HEADLESS` | Puppeteer to run headless or not | Debugging related, default: `true` |
| `INCOGNITO` | Puppeteer to run incognito or not | Debugging related, default: `false` |
@@ -76,6 +99,7 @@ environment variables are **optional**._
| `PAGE_SLEEP_MIN` | Minimum sleep time between queries of the same product page | In milliseconds, default: `5000` |
| `PAGE_SLEEP_MAX` | Maximum sleep time between queries of the same product page | In milliseconds, default: `10000` |
| `PAGE_TIMEOUT` | Navigation Timeout in milliseconds | `0` for infinite, default: `30000` |
| `PROXY_PROTOCOL` | protocol of proxy server, such as `socks5` | default: `http` |
| `PROXY_ADDRESS` | IP Address or fqdn of proxy server |
| `PROXY_PORT` | TCP Port number on which the proxy is listening for connections | Default: `80` |
| `SCREENSHOT` | Capture screenshot of page if a card is found | Default: `true` |
@@ -84,22 +108,31 @@ environment variables are **optional**._
> :point_right: You can find your computer's user agent by [searching google for "my user agent"](http://google.com/search?q=my+user+agent)
> :point_right: Data usage is [known to be high](https://github.com/jef/nvidia-snatcher/issues?q=is%3Aissue+sort%3Aupdated-desc+bandwidth). This is expected as the program scrapes many websites in parallel 24/7. To help reduce this, use `LOW_BANDWIDTH="true"`. We are looking into other solutions as well, but is low priority.
> :point_right: Data usage is [known to be high](https://github.com/jef/streetmerchant/issues?q=is%3Aissue+sort%3Aupdated-desc+bandwidth). This is expected as the program scrapes many websites in parallel 24/7. To help reduce this, use `LOW_BANDWIDTH="true"`. We are looking into other solutions as well, but is low priority.
### Filters
| Environment variable | Description | Notes |
|:---:|---|---|
| `COUNTRY` | [Supported country](#supported-countries) you want to be scraped | Currently only used by Nvidia, default: `usa` |
| `COUNTRY` | [Supported country](#supported-countries) you want to be scraped | Only used with `nvidia-api`, default: `usa` |
| `MAX_PRICE_SERIES_3060TI` | Maximum price allowed for a match, applies 3060 Ti series cards (does not apply to these sites: Nvidia, Asus, EVGA) | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - Cards above `1234` will be skipped. |
| `MAX_PRICE_SERIES_3070` | Maximum price allowed for a match, applies 3070 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - Cards above `1234` will be skipped. |
| `MAX_PRICE_SERIES_3080` | Maximum price allowed for a match, applies 3080 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - Cards above `1234` will be skipped. |
| `MAX_PRICE_SERIES_3090` | Maximum price allowed for a match, applies 3090 series cards (does not apply to these sites: Nvidia, Asus, EVGA) | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - Cards above `1234` will be skipped. |
| `MAX_PRICE_SERIES_CORSAIR_SF` | Maximum price allowed for a match, applies to Corsair PSUs | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - PSUs above `1234` will be skipped. |
| `MAX_PRICE_SERIES_RYZEN5600` | Maximum price allowed for a match, applies AMD 5600 series cpus | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - CPUs above `1234` will be skipped. |
| `MAX_PRICE_SERIES_RYZEN5800` | Maximum price allowed for a match, applies AMD 5800 series cpus | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - CPUs above `1234` will be skipped. |
| `MAX_PRICE_SERIES_RYZEN5900` | Maximum price allowed for a match, applies AMD 5900 series cpus | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - CPUs above `1234` will be skipped. |
| `MAX_PRICE_SERIES_RYZEN5950` | Maximum price allowed for a match, applies AMD 5950 series cpus | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - CPUs above `1234` will be skipped. |
| `MAX_PRICE_SERIES_SONYPS5C` | Maximum price allowed for a match, applies PS5 console | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - PS5 above `1234` will be skipped. |
| `MAX_PRICE_SERIES_SONYPS5DE` | Maximum price allowed for a match, applies PS5 digital edition | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - PS5 above `1234` will be skipped. |
| `MAX_PRICE_SERIES_TEST` | Maximum price allowed for a match, applies `test:series` | Default: leave empty for no limit, otherwise enter a price (enter whole dollar amounts only, avoid use of: dollar symbols, commas, and periods.) e.g.: `1234` - PS5 above `1234` will be skipped. |
| `MICROCENTER_LOCATION` | Specific MicroCenter location(s) to search | Comma separated, e.g.: `marietta,duluth`, default: `web` |
| `NVIDIA_ADD_TO_CART_ATTEMPTS` | The maximum number of times the `nvidia-api` add to cart feature will be attempted before failing | Default: `10` |
| `NVIDIA_SESSION_TTL` | The time in milliseconds to keep the cart active while using `nvidia-api` | Default: `60000` |
| `SHOW_ONLY_BRANDS` | Filter to show specified brands | Comma separated, e.g.: `evga,zotac` |
| `SHOW_ONLY_MODELS` | Filter to show specified models | Both supported formats are comma separated <br/><br/>1. Standard E.g.: `founders edition,rog strix` <br/><br/> 2. Advanced E.g: `MODEL:SERIES`, E.g: `founders edition:3090,rog strix` |
| `SHOW_ONLY_SERIES` | Filter to show specified series | Comma separated, e.g.: `3080` |
| `SHOW_ONLY_SERIES` | Filter to show specified series | Comma separated, e.g.: `3080,ryzen5900` |
| `STORES` | [Supported stores](#supported-stores) you want to be scraped | Both supported formats are comma separated <br/><br/>1. Standard E.g.: `"nvidia"` <br/><br/> 2. Advanced E.g: `STORE:PAGE_SLEEP_MIN:PAGE_SLEEP_MAX`, E.g: `nvidia:10000:30000` <br/><br/>Default: `nvidia` |
<details>
@@ -115,10 +148,20 @@ environment variables are **optional**._
| Amazon | `amazon`|
| Amazon (CA) | `amazon-ca`|
| Amazon (DE) | `amazon-de`|
| Amazon (DE) Warehouse | `amazon-de-warehouse`|
| Amazon (ES) | `amazon-es`|
| Amazon (FR) | `amazon-fr`|
| Amazon (IT) | `amazon-it`|
| Amazon (NL) | `amazon-nl`|
| Amazon (UK) | `amazon-uk`|
| AMD | `amd`|
| AMD (CA) | `amd-ca`|
| AMD (DE) | `amd-de`|
| AMD (IT) | `amd-it`|
| AntOnline | `antonline`|
| Argos (UK) | `argos`|
| Aria PC (UK) | `aria`|
| ARLT (DE) | `arlt`|
| ASUS | `asus` |
| ASUS (DE) | `asus-de` |
| Azerty (NL) | `azerty`|
@@ -126,18 +169,32 @@ environment variables are **optional**._
| Best Buy | `bestbuy`|
| Best Buy (CA) | `bestbuy-ca`|
| Box (UK) | `box`|
| CanadaComputers (CA) | `canadacomputers` |
| Caseking (DE) | `caseking`|
| CCL (UK) | `ccl`|
| Comet (IT) | `comet`|
| Computeruniverse (DE) | `computeruniverse` |
| Coolblue (NL) | `coolblue`|
| Coolmod (ES) | `coolmod`|
| Corsair | `corsair`|
| Currys (UK) | `currys`|
| Cyberport (DE) | `cyberport` |
| eBuyer (UK) | `ebuyer`|
| El Corte Inglés | `elcorteingles`|
| ePrice (IT) | `eprice`|
| Euronics (IT) | `euronics`|
| Euronics (DE) | `euronics-de`|
| EVGA | `evga`|
| EVGA (EU) | `evga-eu`|
| Expert | `expert`|
| Galaxus (DE) | `galaxus`|
| Game (UK) | `game`|
| Gamestop | `gamestop`|
| Gamestop (DE) | `gamestop-de`|
| Kabum (BR) | `kabum`|
| Mediamarkt (DE) | `mediamarkt`|
| Medimax | `medimax`|
| MemoryExpress (CA) | `memoryexpress`|
| Micro Center | `microcenter`|
| Mindfactory (DE) | `mindfactory` |
| Newegg | `newegg`|
@@ -147,22 +204,31 @@ environment variables are **optional**._
| Nvidia | `nvidia`|
| Nvidia (API) | `nvidia-api`|
| Office Depot | `officedepot`|
| Otto | `otto`|
| Overclockers (UK) | `overclockers`|
| PCComponentes (ES) | `pccomponentes`|
| PlayStation | `playstation`|
| PNY | `pny`|
| Proshop (DE) | `proshop-de`|
| Proshop (DK) | `proshop-dk`|
| Saturn (DE) | `saturn`|
| Scan (UK) | `scan`|
| Smyths Toys (UK) | `smythstoys`|
| Spielegrotte | `spielegrotte`|
| Target | `target`|
| Unieuro (IT) | `unieuro`|
| Very (UK) | `very`|
| Walmart | `walmart`|
| Wipoid | `wipoid`|
| Zotac | `zotac`|
| TopAchat | `topachat`|
<details>
<summary>Micro Center stores</summary>
> :point_right: Used with the `MICROCENTER_LOCATION` variable.
> :point_right: Before using `web`, please review [this issue comment](https://github.com/jef/nvidia-snatcher/issues/442#issuecomment-703297393).
> :point_right: Before using `web`, please review [this issue comment](https://github.com/jef/streetmerchant/issues/442#issuecomment-703297393).
| Store name |
|:---:|
@@ -203,20 +269,50 @@ environment variables are **optional**._
| Brand | Model |
|:---:|---|
| `asus` | `dual`, `dual oc`, `rog strix`, `rog strix oc`, `tuf`, `tuf oc` |
| `amd` | `5600x`, `5800x`, `5900x`, `5950x`, `amd reference` |
| `asus` | `dual`, `dual oc`, `strix`, `strix oc`, `tuf`, `tuf oc` |
| `corsair` | `750 platinum`, `600 platinum` |
| `evga` | `ftw3`, `ftw3 ultra`, `xc3`, `xc3 black`, `xc3 ultra` |
| `gainward` | `phantom gs`, `phoenix`, `phoenix gs`, `phoenix gs oc` |
| `gigabyte` | `aorus master`, `aorus xtreme`, `eagle`, `eagle oc`, `gaming`, `gaming oc`, `turbo`, `vision`, `vision oc` |
| `inno3d` | `gaming x3`, `ichill x3`, `ichill x4`, `twin x2 oc` |
| `kfa2` | `sg oc` |
| `kfa2` | `sg`, `sg oc` |
| `microsoft` | `xbox series x`, `xbox series s` |
| `msi` | `gaming x trio`, `ventus 2x oc`, `ventus 3x`, `ventus 3x oc` |
| `nvidia` | `founders edition` |
| `palit` | `gamerock oc`, `gaming pro`, `gaming pro oc` |
| `pny` | `dual fan`, `xlr8`, `xlr8 rgb` |
| `pny` | `dual fan`, `xlr8 revel`, `xlr8 uprising` |
| `sony` | `ps5 console`, `ps5 digital` |
| `xfx` | `merc`, `amd reference` |
| `zotac` | `amp holo`, `amp extreme holo`, `trinity`, `trinity oc`, `twin edge`, `twin edge oc` |
</details>
<details>
<summary>Supported series</summary>
> :point_right: Used with the `SHOW_ONLY_SERIES` variable.
| Series | Environment variable |
|:---:|:---:|
| `AMD Ryzen 5600x` | `ryzen5600` |
| `AMD Ryzen 5800x` | `ryzen5800` |
| `AMD Ryzen 5900x` | `ryzen5900` |
| `AMD Ryzen 5950x` | `ryzen5950` |
| `AMD RX 6800` | `rx6800` |
| `AMD RX 6800XT` | `rx6800xt` |
| `AMD RX 6900XT` | `rx6900xt` |
| `Nvidia RTX 3060 Ti` | `3060ti` |
| `Nvidia RTX 3070` | `3070` |
| `Nvidia RTX 3080` | `3080` |
| `Nvidia RTX 3090` | `3090` |
| `Corsair SFX PSU` | `sf` |
| `Sony PS5` | `sonyps5c` |
| `Sony PS5 Digital Edition` | `sonyps5de` |
| `Xbox Series S` | `xboxss` |
| `Xbox Series X` | `xboxsx` |
</details>
<details>
<summary>Supported countries (used with nvidia and nvidia-api)</summary>
@@ -265,7 +361,7 @@ environment variables are **optional**._
| Environment variable | Description | Notes |
|:---:|---|---|
| `DISCORD_NOTIFY_GROUP` | Discord group you would like to notify | Can be comma separated, use role ID, E.g.: `<@2834729847239842>` |
| `DISCORD_NOTIFY_GROUP` | Discord group you would like to notify | Can be comma separated, use role ID, E.g.: `<@&2834729847239842>` |
| `DISCORD_WEB_HOOK` | Discord Web Hook URL | Can be comma separated, use whole webhook URL |
</details>
@@ -278,8 +374,8 @@ environment variables are **optional**._
| `EMAIL_PASSWORD` | Gmail password | See below if you have MFA |
| `EMAIL_TO` | Destination Email | Defaults to username if not set. Can be comma separated |
| `EMAIL_USERNAME` | Gmail address | E.g.: `jensen.robbed.us@gmail.com` |
| `PHONE_CARRIER` | [Supported carriers](#supported-carriers) for SMS | Email configuration required |
| `PHONE_NUMBER` | 10 digit phone number | E.g.: `1234567890`, email configuration required |
| `PHONE_CARRIER` | [Supported carriers](#supported-carriers) for SMS | E.g.: `att` or `att,verizon,google`, email configuration required. If multiple phone numbers are listed, enter a carrier for each phone number |
| `PHONE_NUMBER` | 10 digit phone number(s) | E.g.: `1234567890` or `1234567890,0987654321,11112223333`, email configuration required |
| `SMTP_ADDRESS` | IP Address or fqdn of smtp server |
| `SMTP_PORT` | TCP Port number on which the smtp server is listening for connections | Default: `25` |
@@ -316,7 +412,7 @@ environment variables are **optional**._
| `MQTT_CLIENT_ID` | Unique ClientID (only if required by MQTT Broker), typically not required when only publishing alerts | eg. client-123456 |
| `MQTT_PASSWORD` | MQTT password - only use with MQTT brokers on private networks, if required. Will not be sent over public networks for safety. | e.g mysecret |
| `MQTT_QOS` | QoS level for published alerts to broker (https://www.npmjs.com/package/mqtt#about-qos) | Default: 0, Can be 0, 1, or 2 |
| `MQTT_TOPIC` | Topic to publish alerts to. Can include %store%, %series%, %brand%, %model% for dynamic topics | Default: nvidia-snatcher/alert e.g nv-alert/%store%/%series%/%brand%/%model%/alert |
| `MQTT_TOPIC` | Topic to publish alerts to. Can include %store%, %series%, %brand%, %model% for dynamic topics | Default: streetmerchant/alert e.g nv-alert/%store%/%series%/%brand%/%model%/alert |
| `MQTT_USERNAME` | MQTT username - (only if required by MQTT Broker) | e.g myusername |
</details>
@@ -331,6 +427,25 @@ environment variables are **optional**._
</details>
<details>
<summary>Philips Hue</summary>
| Environment variable | Description | Notes |
|:---:|---|---|
| `PHILIPS_HUE_API_KEY` | Hue Bridge API Key | **Required**, generate key using instructions [here](https://developers.meethue.com/develop/get-started-2/). This will be used for both LAN and cloud access over the official Remote Hue API. |
| `PHILIPS_HUE_LAN_BRIDGE_IP` | LAN IP Address of your Hue Bridge | LAN only, e.g. `192.168.x.x`|
| `PHILIPS_HUE_LIGHT_IDS` | Light IDs | Optional (all if not supplied). Comma seperated, e.g.: `1`, `2` |See Hue App → About for IDs |
| `PHILIPS_HUE_LIGHT_COLOR` | Color in RGB Format | Optional (NVIDIA green if not supplied). Comma separated, e.g.: `255`, `255`, `255`|
| `PHILIPS_HUE_LIGHT_PATTERN` | `blink` or empty | Optional - lights will flash for 30 seconds if `blink` is supplied. |
| `PHILIPS_HUE_CLOUD_ACCESS_TOKEN` | Remote Access Token | Cloud only, the access token obtained from Philips's Remote Hue API. Instructions to generate [here](https://developers.meethue.com/develop/hue-api/remote-authentication/). |
| `PHILIPS_HUE_CLOUD_REFRESH_TOKEN` | Remote Refresh Token | Cloud only, the refresh token obtained from Philips's Remote Hue API. |
| `PHILIPS_HUE_CLOUD_CLIENT_ID` | Remote Client ID | Cloud only, the client ID to use when accessing the Remote Hue API. |
| `PHILIPS_HUE_CLOUD_CLIENT_SECRET` | Remote Client Secret | Cloud only, the client secret to use when accessing the Remote Hue API. |
> :point_right: [Video demonstration](https://vimeo.com/476083242)
</details>
<details>
<summary>Pushbullet</summary>
@@ -408,7 +523,6 @@ environment variables are **optional**._
| `TWITCH_CHANNEL` | Twitch channel | |
</details>
</details>
## FAQ
@@ -427,21 +541,22 @@ it. Very straight forward. Otherwise, Google more information related to your sy
</details>
**Q: Will I get banned from of the stores?** Perhaps, but getting a card is a nice outcome.
**Q: Will I get banned from of the stores?** Perhaps, but it's the risk we're willing to take! To help minimize this, take a look at [#1050](https://github.com/jef/streetmerchant/issues/1050).
**Q: I got a problem and need help!** File an [issue](https://github.com/jef/nvidia-snatcher/issues/new/choose). I'll do
my best to get to you. I work a full time job and this is only a hobby of mine.
**Q: I got a problem and need help!** File an [issue](https://github.com/jef/streetmerchant/issues/new/choose). I'll do my best to get to you. I work a full time job and this is only a hobby of mine.
**Q: How do I get the latest code?** Take look at
this [wiki page](https://github.com/jef/nvidia-snatcher/wiki/Troubleshoot:-General:-Getting-the-latest-code).
**Q: How do I get the latest code?** Take look at this [wiki page](https://github.com/jef/streetmerchant/wiki/Troubleshoot:-General:-Getting-the-latest-code).
**Q: Why don't my notifications work?** There is probably
an [issue](https://github.com/jef/nvidia-snatcher/issues?q=is%3Aissue+sort%3Aupdated-desc+sound+is%3Aclosed) that
has [already](https://github.com/jef/nvidia-snatcher/issues/182) [been](https://github.com/jef/nvidia-snatcher/issues/116) [resolved](https://github.com/jef/nvidia-snatcher/issues/155).
**Q: Why don't my notifications work?** There is probably an [issue](https://github.com/jef/streetmerchant/issues?q=is%3Aissue+sort%3Aupdated-desc+sound+is%3Aclosed) that has [already](https://github.com/jef/streetmerchant/issues/182) [been](https://github.com/jef/streetmerchant/issues/116) [resolved](https://github.com/jef/streetmerchant/issues/155).
**Q: I'd love to contribute, how do I do that?** Make
a [pull request](https://github.com/jef/nvidia-snatcher/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc)! All
contributions are welcome.
**Q: I'd love to contribute, how do I do that?** Make a [pull request](https://github.com/jef/streetmerchant/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc)! All contributions are welcome.
**Q: Why do I have to download all this stuff just to get this bot working?** Well, I would rather you didn't either.
See [#11](https://github.com/jef/nvidia-snatcher/issues/11).
**Q: How do I add a store?** Take a look at [this page](https://github.com/jef/streetmerchant/wiki/Help:-Configuration:-Adding-a-store) on the wiki.
**Q: Why do I have to download all this stuff just to get this bot working?** Well, I would rather you didn't either. See [#11](https://github.com/jef/streetmerchant/issues/11).
**Q: Why does Amazon show an error page (with a picture of an animal) instead of adding to cart or going to the detail page?** This is intended; see [#733](https://github.com/jef/streetmerchant/issues/733). This indicates that the item is out of stock and only available from a third-party seller (often at a markup).
**Q: I'm using streetmerchant in the cloud and X isn't working.** There is _a lot_ of undefined behavior with using streetmerchant in the cloud. Some sites may block IPs from your cloud provider. It is possible that a VPN will help circumvent these problems.
<p align="center"><a href="https://github.com/jef/streetmerchant#readme"><img src="https://raw.githubusercontent.com/jef/streetmerchant/main/media/terminal.gif" /></a></p>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 865 KiB

+1566 -15067
View File
File diff suppressed because it is too large Load Diff
+29 -23
View File
@@ -1,5 +1,5 @@
{
"name": "nvidia-snatcher",
"name": "streetmerchant",
"description": "🔮 For all your Nvidia needs",
"main": "src/index.ts",
"scripts": {
@@ -9,65 +9,71 @@
"lint:fix": "xo --fix",
"start": "npm run build && node build/index.js",
"start:dev": "nodemon --config nodemon.json",
"test:notification": "npm run build && node build/__test__/notification-test.js"
"start:production": "node build/index.js",
"test:notification": "npm run build && node build/__test__/notification-test.js",
"test:notification:production": "node build/__test__/notification-test.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/jef/nvidia-snatcher.git"
"url": "git+https://github.com/jef/streetmerchant.git"
},
"keywords": [],
"author": "jef",
"license": "MIT",
"bugs": {
"url": "https://github.com/jef/nvidia-snatcher/issues"
"url": "https://github.com/jef/streetmerchant/issues"
},
"homepage": "https://github.com/jef/nvidia-snatcher#readme",
"homepage": "https://github.com/jef/streetmerchant#readme",
"dependencies": {
"@jef/pushbullet": "^2.4.3",
"@slack/web-api": "^5.13.0",
"@slack/web-api": "^5.14.0",
"chalk": "^4.1.0",
"cheerio": "^1.0.0-rc.3",
"discord-webhook-node": "^1.1.8",
"discord.js": "^12.5.1",
"dotenv": "^8.2.0",
"messaging-api-telegram": "^1.0.1",
"mqtt": "^4.2.4",
"mqtt": "^4.2.6",
"node-fetch": "^2.6.1",
"node-hue-api": "^4.0.9",
"node-notifier": "^8.0.0",
"node-pagerduty": "^1.3.5",
"nodemailer": "^6.4.14",
"node-pagerduty": "^1.3.6",
"nodemailer": "^6.4.16",
"open": "^7.3.0",
"play-sound": "^1.1.3",
"puppeteer": "^5.4.1",
"puppeteer": "^5.5.0",
"puppeteer-extra": "^3.1.15",
"puppeteer-extra-plugin-adblocker": "^2.11.8",
"puppeteer-extra-plugin-adblocker": "^2.11.9",
"puppeteer-extra-plugin-block-resources": "^2.2.7",
"puppeteer-extra-plugin-stealth": "^2.6.5",
"puppeteer-page-proxy": "^1.2.8",
"pushover-notifications": "^1.2.2",
"twilio": "^3.50.0",
"twitch": "^4.2.7",
"twitch-auth": "^4.2.7",
"twitch-chat-client": "^4.2.7",
"twilio": "^3.53.0",
"twitch": "^4.3.3",
"twitch-auth": "^4.3.3",
"twitch-chat-client": "^4.3.3",
"twitter": "^1.7.1",
"winston": "^3.3.3"
},
"devDependencies": {
"@types/async": "^3.2.3",
"@types/async": "^3.2.5",
"@types/cheerio": "^0.22.22",
"@types/node": "^14.14.6",
"@types/node": "^14.14.10",
"@types/node-fetch": "^2.5.7",
"@types/node-notifier": "^8.0.0",
"@types/nodemailer": "^6.4.0",
"@types/puppeteer": "^3.0.4",
"@types/puppeteer": "^5.4.1",
"@types/twitter": "^1.7.0",
"husky": "^4.3.0",
"nodemon": "^2.0.6",
"ts-node": "^9.0.0",
"typescript": "^4.0.5",
"webpack": "^5.3.2",
"xo": "^0.33.1"
"ts-node": "^9.1.0",
"typescript": "^4.1.2",
"webpack": "^5.10.0",
"xo": "^0.35.0"
},
"xo": {
"prettier": true,
"rules": {
"no-warning-comments": "off",
"sort-imports": "error",
"sort-keys": "error",
"sort-vars": "error"
+1
View File
@@ -5,6 +5,7 @@ const link: Link = {
brand: 'test:brand',
cartUrl: 'https://www.example.com/cartUrl',
model: 'test:model',
price: 100,
series: 'test:series',
url: 'https://www.example.com/url'
};
+13 -2
View File
@@ -5,9 +5,20 @@ export const adBlocker = new PuppeteerExtraPluginAdblocker({
blockTrackers: true
});
export async function disableBlockerInPage(page: Page) {
export async function enableBlockerInPage(page: Page) {
const blockerObject = await adBlocker.getBlocker();
if (blockerObject.isBlockingEnabled(page)) {
await blockerObject.disableBlockingInPage(page);
return;
}
await blockerObject.enableBlockingInPage(page);
}
export async function disableBlockerInPage(page: Page) {
const blockerObject = await adBlocker.getBlocker();
if (!blockerObject.isBlockingEnabled(page)) {
return;
}
await blockerObject.disableBlockingInPage(page);
}
+20 -10
View File
@@ -3,13 +3,23 @@ import {readFileSync} from 'fs';
const version = readFileSync('version.txt', 'utf8');
export const banner = chalk.green.bold(`
$$\\ $$\\ $$\\ $$\\ $$\\
\\__| $$ |\\__| $$ | $$ |
$$$$$$$\\ $$\\ $$\\ $$\\ $$$$$$$ |$$\\ $$$$$$\\ $$$$$$$\\ $$$$$$$\\ $$$$$$\\ $$$$$$\\ $$$$$$$\\ $$$$$$$\\ $$$$$$\\ $$$$$$\\
$$ __$$\\\\$$\\ $$ |$$ |$$ __$$ |$$ | \\____$$\\ $$$$$$\\ $$ _____|$$ __$$\\ \\____$$\\\\_$$ _| $$ _____|$$ __$$\\ $$ __$$\\ $$ __$$\\
$$ | $$ |\\$$\\$$ / $$ |$$ / $$ |$$ | $$$$$$$ |\\______|\\$$$$$$\\ $$ | $$ | $$$$$$$ | $$ | $$ / $$ | $$ |$$$$$$$$ |$$ | \\__|
$$ | $$ | \\$$$ / $$ |$$ | $$ |$$ |$$ __$$ | \\____$$\\ $$ | $$ |$$ __$$ | $$ |$$\\ $$ | $$ | $$ |$$ ____|$$ |
$$ | $$ | \\$ / $$ |\\$$$$$$$ |$$ |\\$$$$$$$ | $$$$$$$ |$$ | $$ |\\$$$$$$$ | \\$$$$ |\\$$$$$$$\\ $$ | $$ |\\$$$$$$$\\ $$ |
\\__| \\__| \\_/ \\__| \\_______|\\__| \\_______| \\_______/ \\__| \\__| \\_______| \\____/ \\_______|\\__| \\__| \\_______|\\__|
${version}`);
export const banner = {
asciiVersion: `
██████ ▄▄▄█████▓ ██▀███ ▓█████ ▓█████▄▄▄█████▓ ███▄ ▄███▓▓█████ ██▀███ ▄████▄ ██░ ██ ▄▄▄ ███▄ █ ▄▄▄█████▓
▒██ ▒ ▓ ██▒ ▓▒▓██ ▒ ██▒▓█ ▀ ▓█ ▀▓ ██▒ ▓▒▓██▒▀█▀ ██▒▓█ ▀ ▓██ ▒ ██▒▒██▀ ▀█ ▓██░ ██▒▒████▄ ██ ▀█ █ ▓ ██▒ ▓▒
░ ▓██▄ ▒ ▓██░ ▒░▓██ ░▄█ ▒▒███ ▒███ ▒ ▓██░ ▒░▓██ ▓██░▒███ ▓██ ░▄█ ▒▒▓█ ▄ ▒██▀▀██░▒██ ▀█▄ ▓██ ▀█ ██▒▒ ▓██░ ▒░
▒ ██▒░ ▓██▓ ░ ▒██▀▀█▄ ▒▓█ ▄ ▒▓█ ▄░ ▓██▓ ░ ▒██ ▒██ ▒▓█ ▄ ▒██▀▀█▄ ▒▓▓▄ ▄██▒░▓█ ░██ ░██▄▄▄▄██ ▓██▒ ▐▌██▒░ ▓██▓ ░
▒██████▒▒ ▒██▒ ░ ░██▓ ▒██▒░▒████▒░▒████▒ ▒██▒ ░ ▒██▒ ░██▒░▒████▒░██▓ ▒██▒▒ ▓███▀ ░░▓█▒░██▓ ▓█ ▓██▒▒██░ ▓██░ ▒██▒ ░
▒ ▒▓▒ ▒ ░ ▒ ░░ ░ ▒▓ ░▒▓░░░ ▒░ ░░░ ▒░ ░ ▒ ░░ ░ ▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░░ ░▒ ▒ ░ ▒ ░░▒░▒ ▒▒ ▓▒█░░ ▒░ ▒ ▒ ▒ ░░
░ ░▒ ░ ░ ░ ░▒ ░ ▒░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ▒ ▒ ░▒░ ░ ▒ ▒▒ ░░ ░░ ░ ▒░ ░
░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
${version}`,
render(ascii: boolean, hexColor: string) {
return chalk
.hex(hexColor)
.bold(ascii ? this.asciiVersion : this.stringVersion);
},
stringVersion: `STREETMERCHANT
${version}`
};
+156 -35
View File
@@ -1,22 +1,34 @@
import {banner} from './banner';
console.info(banner);
import {config as config_} from 'dotenv';
import path from 'path';
import {readFileSync} from 'fs';
config_({path: path.resolve(__dirname, '../.env')});
console.info(
banner.render(
envOrBoolean(process.env.ASCII_BANNER, false),
envOrString(process.env.BANNER_COLOR, '#808080')
)
);
/**
* Returns environment variable, given array, or default array.
*
* @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 +37,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 +51,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 +61,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 +76,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 +116,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 +149,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)
};
@@ -129,13 +180,16 @@ const notifications = {
desktop: process.env.DESKTOP_NOTIFICATIONS === 'true',
discord: {
notifyGroup: envOrArray(process.env.DISCORD_NOTIFY_GROUP),
webHookUrl: envOrArray(process.env.DISCORD_WEB_HOOK)
webhooks: envOrArray(process.env.DISCORD_WEB_HOOK)
},
email: {
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: {
@@ -144,13 +198,25 @@ const notifications = {
password: envOrString(process.env.MQTT_PASSWORD),
port: envOrNumber(process.env.MQTT_BROKER_PORT, 1883),
qos: envOrNumber(process.env.MQTT_QOS, 0),
topic: envOrString(process.env.MQTT_TOPIC, 'nvidia-snatcher/alert'),
topic: envOrString(process.env.MQTT_TOPIC, 'streetmerchant/alert'),
username: envOrString(process.env.MQTT_USERNAME)
},
pagerduty: {
integrationKey: envOrString(process.env.PAGERDUTY_INTEGRATION_KEY),
severity: envOrString(process.env.PAGERDUTY_SEVERITY, 'info')
},
philips_hue: {
accessToken: envOrString(process.env.PHILIPS_HUE_CLOUD_ACCESS_TOKEN),
apiKey: envOrString(process.env.PHILIPS_HUE_API_KEY),
bridgeIp: envOrString(process.env.PHILIPS_HUE_LAN_BRIDGE_IP),
clientId: envOrString(process.env.PHILIPS_HUE_CLOUD_CLIENT_ID),
clientSecret: envOrString(process.env.PHILIPS_HUE_CLOUD_CLIENT_SECRET),
lightColor: envOrString(process.env.PHILIPS_HUE_LIGHT_COLOR),
lightIds: envOrString(process.env.PHILIPS_HUE_LIGHT_IDS),
lightPattern: envOrString(process.env.PHILIPS_HUE_LIGHT_PATTERN),
refreshToken: envOrString(process.env.PHILIPS_HUE_CLOUD_REFRESH_TOKEN),
remoteApiUsername: envOrString(process.env.PHILIPS_HUE_API_KEY)
},
phone: {
availableCarriers: new Map([
['att', 'txt.att.net'],
@@ -168,8 +234,8 @@ const notifications = {
['virgin', 'vmobl.com'],
['virgin-ca', 'vmobile.ca']
]),
carrier: envOrString(process.env.PHONE_CARRIER),
number: envOrString(process.env.PHONE_NUMBER)
carrier: envOrArray(process.env.PHONE_CARRIER),
number: envOrArray(process.env.PHONE_NUMBER)
},
playSound: envOrString(process.env.PLAY_SOUND),
pushbullet: envOrString(process.env.PUSHBULLET),
@@ -218,45 +284,100 @@ 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
};
const proxy = {
address: envOrString(process.env.PROXY_ADDRESS),
port: envOrNumber(process.env.PROXY_PORT, 80)
port: envOrNumber(process.env.PROXY_PORT, 80),
protocol: envOrString(process.env.PROXY_PROTOCOL, 'http')
};
// 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 = {
autoAddToCart: envOrBoolean(process.env.AUTO_ADD_TO_CART, true),
country: envOrString(process.env.COUNTRY, 'usa'),
maxPrice: {
series: {
'3060ti': envOrNumber(process.env.MAX_PRICE_SERIES_3060TI),
3070: envOrNumber(process.env.MAX_PRICE_SERIES_3070),
3080: envOrNumber(process.env.MAX_PRICE_SERIES_3080),
3090: envOrNumber(process.env.MAX_PRICE_SERIES_3090)
3090: envOrNumber(process.env.MAX_PRICE_SERIES_3090),
rx6800: envOrNumber(process.env.MAX_PRICE_SERIES_RX6800),
rx6800xt: envOrNumber(process.env.MAX_PRICE_SERIES_RX6800XT),
rx6900xt: envOrNumber(process.env.MAX_PRICE_SERIES_RX6900XT),
ryzen5600: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5600),
ryzen5800: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5800),
ryzen5900: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5900),
ryzen5950: envOrNumber(process.env.MAX_PRICE_SERIES_RYZEN5950),
sf: envOrNumber(process.env.MAX_PRICE_SERIES_CORSAIR_SF),
sonyps5c: envOrNumber(process.env.MAX_PRICE_SERIES_SONYPS5C),
sonyps5de: envOrNumber(process.env.MAX_PRICE_SERIES_SONYPS5DE),
'test:series': envOrNumber(process.env.MAX_PRICE_SERIES_TEST),
xboxss: -1,
xboxsx: -1
}
},
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']),
stores: envOrArray(process.env.STORES, ['nvidia']).map(entry => {
showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, [
'3060ti',
'3070',
'3080',
'3090',
'rx6800',
'rx6800xt',
'rx6900xt',
'ryzen5600',
'ryzen5800',
'ryzen5900',
'ryzen5950',
'sonyps5c',
'sonyps5de',
'xboxss',
'xboxsx'
]),
stores: envOrArray(process.env.STORES, ['nvidia']).map((entry) => {
const [name, minPageSleep, maxPageSleep] = entry.match(/[^:]+/g) ?? [];
let proxyList;
try {
proxyList = readFileSync(`${name}.proxies`)
.toString()
.trim()
.split('\n')
.map((x) => x.trim());
} catch {}
return {
maxPageSleep: envOrNumberMax(minPageSleep, maxPageSleep, browser.maxSleep),
minPageSleep: envOrNumberMin(minPageSleep, maxPageSleep, browser.minSleep),
name: envOrString(name)
maxPageSleep: envOrNumberMax(
minPageSleep,
maxPageSleep,
browser.maxSleep
),
minPageSleep: envOrNumberMin(
minPageSleep,
maxPageSleep,
browser.minSleep
),
name: envOrString(name),
proxyList
};
})
};
+8 -12
View File
@@ -1,23 +1,14 @@
import {startAPIServer, stopAPIServer} from './web';
import {Browser} from 'puppeteer';
import {adBlocker} from './adblocker';
import {config} from './config';
import {getSleepTime} from './util';
import {logger} from './logger';
import puppeteer from 'puppeteer-extra';
import resourceBlock from 'puppeteer-extra-plugin-block-resources';
import stealthPlugin from 'puppeteer-extra-plugin-stealth';
import {storeList} from './store/model';
import {tryLookupAndLoop} from './store';
puppeteer.use(stealthPlugin());
if (config.browser.lowBandwidth) {
puppeteer.use(resourceBlock({
blockedTypes: new Set(['image', 'font'] as const)
}));
} else {
puppeteer.use(adBlocker);
}
let browser: Browser | undefined;
@@ -41,7 +32,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=${config.proxy.protocol}://${config.proxy.address}:${config.proxy.port}`
);
}
await stop();
@@ -90,8 +83,11 @@ async function stopAndExit() {
async function loopMain() {
try {
await main();
} catch (error) {
logger.error('✖ something bad happened, resetting nvidia-snatcher in 5 seconds', error);
} catch (error: unknown) {
logger.error(
'✖ something bad happened, resetting streetmerchant in 5 seconds',
error
);
setTimeout(loopMain, 5000);
}
}
+120 -30
View File
@@ -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 (Object.keys(info.metadata).length > 0) {
out = `${out} ${chalk.magenta(JSON.stringify(info.metadata, null, 2))}`;
}
if (info.meta) {
return chalk.grey(`[${timestamp}]`) + ` ${info.level} ` + chalk.grey('::') + ` ${info.message} ${chalk.magenta(JSON.stringify(info.meta, null, 2))}`;
}
return chalk.grey(`[${timestamp}]`) + ` ${info.level} ` + chalk.grey('::') + ` ${info.message}`;
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,101 @@ 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,
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 ${link.price ?? ''} EXCEEDS LIMIT ${maxPrice}`)
);
}
return `${buildProductString(link, store)} :: PRICE ${price} EXCEEDS LIMIT ${maxPrice}`;
return `${buildProductString(link, store)} :: PRICE ${
link.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`;
},
productInStock(link: Link): string {
let productString = `Product Page: ${link.url}`;
if (link.cartUrl) productString += `\nAdd To Cart Link: ${link.cartUrl}`;
return productString;
},
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 +212,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}`;
+44 -20
View File
@@ -1,43 +1,67 @@
import {Link, Store} from '../store/model';
import {MessageBuilder, Webhook} from 'discord-webhook-node';
import Discord from 'discord.js';
import {config} from '../config';
import {logger} from '../logger';
const discord = config.notifications.discord;
const hooks = discord.webHookUrl;
const notifyGroup = discord.notifyGroup;
const {notifyGroup, webhooks} = discord;
function getIdAndToken(webhook: string) {
const match = /.*\/webhooks\/(\d+)\/(.+)/.exec(webhook);
if (!match) {
throw new Error('could not get discord webhook');
}
return {
id: match[1],
token: match[2]
};
}
export function sendDiscordMessage(link: Link, store: Store) {
if (discord.webHookUrl.length > 0) {
if (webhooks.length > 0) {
logger.debug('↗ sending discord message');
(async () => {
try {
const embed = new MessageBuilder();
embed.setTitle('Stock Notification');
embed.addField('URL', link.cartUrl ? link.cartUrl : link.url, true);
const embed = new Discord.MessageEmbed()
.setTitle('_**Stock alert!**_')
.setDescription(
'> provided by [streetmerchant](https://github.com/jef/streetmerchant) with :heart:'
)
.setThumbnail(
'https://raw.githubusercontent.com/jef/streetmerchant/main/media/streetmerchant-square.png'
)
.setColor('#52b788')
.setTimestamp();
embed.addField('Store', store.name, true);
if (link.price) embed.addField('Price', `$${link.price}`, true);
embed.addField('Product Page', link.url);
if (link.cartUrl) embed.addField('Add to Cart', link.cartUrl);
embed.addField('Brand', link.brand, true);
embed.addField('Series', link.series, true);
embed.addField('Model', link.model, true);
if (notifyGroup) {
embed.setText(notifyGroup.join(' '));
}
embed.setColor(0x76B900);
embed.setTimestamp();
embed.addField('Series', link.series, true);
const promises = [];
for (const hook of hooks) {
promises.push(new Webhook(hook).send(embed));
for (const webhook of webhooks) {
const {id, token} = getIdAndToken(webhook);
const client = new Discord.WebhookClient(id, token);
promises.push({
client,
message: client.send(notifyGroup.join(' '), {
embeds: [embed],
username: 'streetmerchant'
})
});
}
await Promise.all(promises);
(await Promise.all(promises)).forEach(({client}) => client.destroy());
logger.info('✔ discord message sent');
} catch (error) {
logger.error('✖ couldn\'t send discord message', error);
} catch (error: unknown) {
logger.error("✖ couldn't send discord message", error);
}
})();
}
+11 -9
View File
@@ -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,
text: Print.productInStock(link),
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');
}
+21 -14
View File
@@ -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);
} catch (error: unknown) {
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}`);
+2
View File
@@ -1,4 +1,5 @@
import {Link, Store} from '../store/model';
import {adjustPhilipsHueLights} from './philips-hue';
import {playSound} from './sound';
import {sendDesktopNotification} from './desktop';
import {sendDiscordMessage} from './discord';
@@ -21,6 +22,7 @@ export function sendNotification(link: Link, store: Store) {
sendSms(link, store);
sendDesktopNotification(link, store);
// Non-priority
adjustPhilipsHueLights();
sendDiscordMessage(link, store);
sendMqttMessage(link, store);
sendPagerDutyNotification(link, store);
+3 -4
View File
@@ -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'
});
}
+126
View File
@@ -0,0 +1,126 @@
import type Api from 'node-hue-api/lib/api/Api';
import {config} from '../config';
import {v3 as hueAPI} from 'node-hue-api';
import {logger} from '../logger';
const hue = config.notifications.philips_hue;
const apiKey = hue.apiKey;
const bridgeIp = hue.bridgeIp;
const lightIds = hue.lightIds;
const lightColor = hue.lightColor;
const lightPattern = hue.lightPattern;
const LightState = hueAPI.lightStates.LightState;
const clientId = hue.clientId;
const clientSecret = hue.clientSecret;
const accessToken = hue.accessToken;
const refreshToken = hue.refreshToken;
const remoteApiUsername = hue.remoteApiUsername;
// Default Light State
const lightState = new LightState()
.on(true)
.brightness(100)
.rgb(46.27, 72.55, 0);
const adjustLightsWithAPI = (hueBridge: Api) => {
logger.debug('Connected to Philips Hue bridge.');
// Set the custom light state (COLOR and METHOD here)
if (lightColor) {
const rgbArray = lightColor.split(',');
// If there's not three values, must not be RGB
if (rgbArray.length === 3) {
lightState.rgb(rgbArray[0], rgbArray[1], rgbArray[2]);
} else {
logger.debug('✖ Error assigning RGB Values');
}
}
// If blink is specified, then blink the lights
if (lightPattern === 'blink') {
lightState.alertLong();
}
// If we've been given light IDs, then only adjust those IDs
if (lightIds) {
const arrayOfIDs = lightIds.split(',');
arrayOfIDs.forEach((light) => {
logger.debug('adjusting all hue lights');
(hueBridge.lights.setLightState(light, lightState) as Promise<any>).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;
});
}
};
export function adjustPhilipsHueLights() {
// Check if the required variables have been set
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);
}
);
})();
} else if (hue.apiKey && hue.clientId && hue.clientSecret) {
logger.info('↗ adjusting Philips Hue lights over cloud');
(async () => {
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;
}
);
}
})();
}
}
+3 -2
View File
@@ -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');
}
});
}
);
}
}
+1 -1
View File
@@ -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');
}
+3 -3
View File
@@ -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);
} catch (error: unknown) {
logger.error("✖ couldn't send slack message", error);
}
})();
}
+61 -34
View File
@@ -4,48 +4,75 @@ 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',
{carrier: phone.carrier, number: phone.number}
);
}
export function sendSms(link: Link, store: Store) {
if (phone.number) {
logger.debug('↗ sending sms');
const carrier = phone.carrier;
for (
let i = 0;
i < Math.max(phone.number.length, phone.carrier.length);
i++
) {
const currentNumber = phone.number[i];
const currentCarrier = phone.carrier[i];
if (carrier && phone.availableCarriers.has(carrier)) {
const mailOptions: Mail.Options = {
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()
};
transporter.sendMail(mailOptions, error => {
if (error) {
logger.error('✖ couldn\'t send sms', error);
} else {
logger.info('✔ sms sent');
}
});
if (!currentNumber) {
logger.error(`${currentCarrier} is not associated with a number`);
continue;
} else if (!currentCarrier) {
logger.error(`${currentNumber} is not associated with a carrier`);
continue;
}
if (!phone.availableCarriers.has(currentCarrier)) {
logger.error(`✖ unknown carrier ${currentCarrier}`);
continue;
}
logger.debug('↗ sending sms');
const mailOptions: Mail.Options = {
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) => {
if (error) {
logger.error(
`✖ couldn't send sms to ${currentNumber} for carrier ${currentCarrier}`,
error
);
} else {
logger.info('✔ sms sent');
}
});
}
}
function generateAddress() {
const carrier = phone.carrier;
function generateAddress(number: string, carrier: string) {
if (carrier && phone.availableCarriers.has(carrier)) {
return [phone.number, phone.availableCarriers.get(carrier)].join('@');
return [number, phone.availableCarriers.get(carrier)].join('@');
}
logger.error('✖ unknown carrier', carrier);
}
+3 -3
View File
@@ -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');
+9 -4
View File
@@ -14,15 +14,20 @@ export function sendTelegramMessage(link: Link, store: Store) {
logger.debug('↗ sending telegram message');
(async () => {
const givenUrl = link.cartUrl ? link.cartUrl : link.url;
const message = Print.productInStock(link);
const results = [];
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${message}`
)
);
logger.info('✔ telegram message sent');
} catch (error) {
logger.error('✖ couldn\'t send telegram message', error);
} catch (error: unknown) {
logger.error("✖ couldn't send telegram message", error);
}
}
+2 -2
View File
@@ -25,8 +25,8 @@ export function sendTwilioMessage(link: Link, store: Store) {
to: twilio.to
});
logger.info('✔ twilio message sent');
} catch (error) {
logger.error('✖ couldn\'t send twilio message', error);
} catch (error: unknown) {
logger.error("✖ couldn't send twilio message", error);
}
})();
}
+34 -11
View File
@@ -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
}
@@ -50,8 +65,8 @@ chatClient.onJoin((channel: string, user: string) => {
try {
chatClient.say(channel, message);
logger.info('✔ twitch message sent');
} catch (error) {
logger.error('✖ couldn\'t send twitch message', error);
} catch (error: unknown) {
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;
+11 -4
View File
@@ -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');
}
+19 -13
View File
@@ -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);
+8 -4
View File
@@ -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;
}
}
+67 -38
View File
@@ -9,59 +9,81 @@ 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<Required<Element>> {
function getQueryAsElementArray(
query: LabelQuery,
defaultContainer: string
): Array<Required<Element>> {
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<string | null> {
export async function extractPageContents(
page: Page,
selector: Selector
): Promise<string | null> {
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,25 +106,32 @@ 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) {
if (!max) {
return null;
}
export async function getPrice(
page: Page,
query: Pricing,
options: Selector
): Promise<number | null> {
const selector = {...options, selector: query.container};
const cardPrice = await extractPageContents(page, selector);
const priceString = await extractPageContents(page, selector);
if (cardPrice) {
const priceSeperator = query.euroFormat ? /\./g : /,/g;
const cardpriceNumber = Number.parseFloat(cardPrice.replace(priceSeperator, '').match(/\d+/g)!.join('.'));
if (priceString) {
const priceSeparator = query.euroFormat ? /\./g : /,/g;
const price = Number.parseFloat(
priceString.replace(priceSeparator, '').match(/\d+/g)!.join('.')
);
logger.debug(`Raw card price: ${cardPrice} | Limit: ${max}`);
return cardpriceNumber > max ? cardpriceNumber : null;
logger.debug('received price', price);
return price;
}
return null;
+250 -87
View File
@@ -1,20 +1,117 @@
import {Browser, Page, Response} from 'puppeteer';
import {Browser, Page, PageEventObj, Request, 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 {Selector, getPrice, pageIncludesLabels} from './includes-labels';
import {
closePage,
delay,
getRandomUserAgent,
getSleepTime,
isStatusCodeInRange
} from '../util';
import {disableBlockerInPage, enableBlockerInPage} from '../adblocker';
import {config} from '../config';
import {disableBlockerInPage} from '../adblocker';
import {fetchLinks} from './fetch-links';
import {filterStoreLink} from './filter';
import open from 'open';
import {processBackoffDelay} from './model/helpers/backoff';
import {sendNotification} from '../notification';
import useProxy from 'puppeteer-page-proxy';
const inStock: Record<string, boolean> = {};
const linkBuilderLastRunTimes: Record<string, number> = {};
function nextProxy(store: Store) {
if (!store.proxyList) {
return;
}
if (store.currentProxyIndex === undefined) {
store.currentProxyIndex = 0;
}
store.currentProxyIndex++;
if (store.currentProxyIndex >= store.proxyList.length) {
store.currentProxyIndex = 0;
}
logger.info(
` [${store.name}] Next proxy index: ${store.currentProxyIndex} / Count: ${store.proxyList.length}`
);
return store.proxyList[store.currentProxyIndex];
}
async function handleLowBandwidth(request: Request) {
if (!config.browser.lowBandwidth) {
return false;
}
const typ = request.resourceType();
if (typ === 'font' || typ === 'image') {
try {
await request.abort();
} catch {}
return true;
}
return false;
}
async function handleProxy(request: Request, proxy?: string) {
if (!proxy) {
return false;
}
try {
await useProxy(request, proxy);
} catch (error: unknown) {
logger.error(error);
try {
await request.abort();
} catch {}
}
return true;
}
async function handleAdBlock(request: Request, adBlockRequestHandler: any) {
if (!adBlockRequestHandler) {
return false;
}
return new Promise((resolve) => {
const continueFunc = async () => {
resolve(false);
};
const abortFunc = async () => {
try {
await request.abort();
} catch {}
resolve(true);
};
const requestProxy = new Proxy(request, {
get(target, prop, receiver) {
if (prop === 'continue') {
return continueFunc;
}
if (prop === 'abort') {
return abortFunc;
}
return Reflect.get(target, prop, receiver);
}
});
adBlockRequestHandler(requestProxy);
});
}
/**
* Responsible for looking up information about a each product within
* a `Store`. It's important that we ignore `no-await-in-loop` here
@@ -28,6 +125,20 @@ async function lookup(browser: Browser, store: Store) {
return;
}
if (store.linksBuilder) {
logger.info(`[${store.name}] Running linksBuilder...`);
const lastRunTime = linkBuilderLastRunTimes[store.name] ?? -1;
const ttl = store.linksBuilder.ttl ?? Number.MAX_SAFE_INTEGER;
if (lastRunTime === -1 || Date.now() - lastRunTime > ttl) {
try {
await fetchLinks(store, browser);
linkBuilderLastRunTimes[store.name] = Date.now();
} catch (error: unknown) {
logger.error(error);
}
}
}
/* eslint-disable no-await-in-loop */
for (const link of store.links) {
if (!filterStoreLink(link)) {
@@ -39,28 +150,79 @@ 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 proxy = nextProxy(store);
const useAdBlock = !config.browser.lowBandwidth && !store.disableAdBlocker;
const customContext = config.browser.isIncognito;
const context = customContext
? await browser.createIncognitoBrowserContext()
: browser.defaultBrowserContext();
const page = await context.newPage();
page.setDefaultNavigationTimeout(config.page.timeout);
await page.setUserAgent(getRandomUserAgent());
if (store.disableAdBlocker) {
try {
await disableBlockerInPage(page);
} catch (error) {
logger.error(error);
}
let adBlockRequestHandler: any;
let pageProxy;
if (useAdBlock) {
const onProxyFunc = (event: keyof PageEventObj, handler: any) => {
if (event !== 'request') {
page.on(event, handler);
return;
}
adBlockRequestHandler = handler;
};
pageProxy = new Proxy(page, {
get(target, prop, receiver) {
if (prop === 'on') {
return onProxyFunc;
}
return Reflect.get(target, prop, receiver);
}
});
await enableBlockerInPage(pageProxy);
}
await page.setRequestInterception(true);
page.on('request', async (request) => {
if (await handleLowBandwidth(request)) {
return;
}
if (await handleAdBlock(request, adBlockRequestHandler)) {
return;
}
if (await handleProxy(request, proxy)) {
return;
}
try {
await request.continue();
} catch {}
});
let statusCode = 0;
try {
statusCode = await lookupCard(browser, store, page, link);
} catch (error) {
logger.error(`✖ [${store.name}] ${link.brand} ${link.series} ${link.model} - ${error.message as string}`);
} catch (error: unknown) {
logger.error(
`✖ [${store.name}] ${link.brand} ${link.series} ${link.model} - ${
(error as Error).message
}`
);
const client = await page.target().createCDPSession();
await client.send('Network.clearBrowserCookies');
await client.send('Network.clearBrowserCache');
// Await client.send('Network.clearBrowserCache');
}
if (pageProxy) {
await disableBlockerInPage(pageProxy);
}
// Must apply backoff before closing the page, e.g. if CloudFlare is
@@ -68,16 +230,23 @@ async function lookup(browser: Browser, store: Store) {
// before redirecting to the next page
await processBackoffDelay(store, link, statusCode);
await closePage(page);
if (config.browser.isIncognito) {
if (customContext) {
await context.close();
}
}
/* eslint-enable no-await-in-loop */
}
async function lookupCard(browser: Browser, store: Store, page: Page, link: Link): Promise<number> {
async function lookupCard(
browser: Browser,
store: Store,
page: Page,
link: Link
): Promise<number> {
const givenWaitFor = store.waitUntil ? store.waitUntil : 'networkidle0';
const 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));
@@ -96,15 +265,14 @@ async function lookupCard(browser: Browser, store: Store, page: Page, link: Link
}
if (await lookupCardInStock(store, page, link)) {
const givenUrl = link.cartUrl ? link.cartUrl : link.url;
const givenUrl =
link.cartUrl && config.store.autoAddToCart ? link.cartUrl : link.url;
logger.info(`${Print.inStock(link, store, true)}\n${givenUrl}`);
if (config.browser.open) {
if (link.openCartAction === undefined) {
await open(givenUrl);
} else {
await link.openCartAction(browser);
}
await (link.openCartAction === undefined
? open(givenUrl)
: link.openCartAction(browser));
}
sendNotification(link, store);
@@ -135,10 +303,64 @@ async function lookupCardInStock(store: Store, page: Page, link: Link) {
type: 'textContent'
};
if (store.labels.inStock) {
const options = {...baseOptions, requireVisible: true, type: 'outerHTML' as const};
if (store.labels.captcha) {
if (await pageIncludesLabels(page, store.labels.captcha, baseOptions)) {
logger.warn(Print.captcha(link, store, true));
await delay(getSleepTime(store));
return false;
}
}
if (!await pageIncludesLabels(page, store.labels.inStock, options)) {
if (store.labels.bannedSeller) {
if (
await pageIncludesLabels(page, store.labels.bannedSeller, baseOptions)
) {
logger.warn(Print.bannedSeller(link, store, true));
return false;
}
}
if (store.labels.maxPrice) {
const maxPrice = config.store.maxPrice.series[link.series];
link.price = await getPrice(page, store.labels.maxPrice, baseOptions);
if (link.price && link.price > maxPrice && maxPrice > 0) {
logger.info(Print.maxPrice(link, store, maxPrice, true));
return false;
}
}
// Fixme: currently causing issues
// Do API inventory validation in realtime (no cache) if available
// if (
// store.realTimeInventoryLookup !== undefined &&
// link.itemNumber !== undefined
// ) {
// return store.realTimeInventoryLookup(link.itemNumber);
// }
if (store.labels.inStock) {
const options = {
...baseOptions,
requireVisible: true,
type: 'outerHTML' as const
};
if (!(await pageIncludesLabels(page, store.labels.inStock, options))) {
logger.info(Print.outOfStock(link, store, true));
return false;
}
}
if (link.labels?.inStock) {
const options = {
...baseOptions,
requireVisible: true,
type: 'outerHTML' as const
};
if (!(await pageIncludesLabels(page, link.labels.inStock, options))) {
logger.info(Print.outOfStock(link, store, true));
return false;
}
@@ -151,52 +373,6 @@ async function lookupCardInStock(store: Store, page: Page, link: Link) {
}
}
if (store.labels.bannedSeller) {
if (await pageIncludesLabels(page, store.labels.bannedSeller, baseOptions)) {
logger.warn(Print.bannedSeller(link, store, true));
return false;
}
}
if (store.labels.maxPrice) {
let price;
let maxPrice = 0;
switch (link.series) {
case '3070':
price = await cardPrice(page, store.labels.maxPrice, config.store.maxPrice.series['3070'], baseOptions);
maxPrice = config.store.maxPrice.series['3070'];
break;
case '3080':
price = await cardPrice(page, store.labels.maxPrice, config.store.maxPrice.series['3080'], baseOptions);
maxPrice = config.store.maxPrice.series['3080'];
break;
case '3090':
price = await cardPrice(page, store.labels.maxPrice, config.store.maxPrice.series['3090'], baseOptions);
maxPrice = config.store.maxPrice.series['3090'];
break;
default:
break;
}
if (price) {
logger.info(Print.maxPrice(link, store, price, maxPrice, true));
return false;
}
}
if (store.labels.captcha) {
if (await pageIncludesLabels(page, store.labels.captcha, baseOptions)) {
logger.warn(Print.captcha(link, store, true));
await delay(getSleepTime(store));
return false;
}
}
// Do API inventory validation in realtime (no cache) if available
if (store.realTimeInventoryLookup !== undefined && link.itemNumber !== undefined) {
return store.realTimeInventoryLookup(link.itemNumber);
}
return true;
}
@@ -206,23 +382,10 @@ export async function tryLookupAndLoop(browser: Browser, store: Store) {
return;
}
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) {
try {
await fetchLinks(store, browser);
linkBuilderLastRunTimes[store.name] = Date.now();
} catch (error) {
logger.error(error.message);
}
}
}
logger.debug(`[${store.name}] Starting lookup...`);
try {
await lookup(browser, store);
} catch (error) {
} catch (error: unknown) {
logger.error(error);
}
+4 -4
View File
@@ -24,7 +24,7 @@ export const Adorama: Store = {
},
{
brand: 'pny',
model: 'xlr8',
model: 'xlr8 revel',
series: '3080',
url: 'https://www.adorama.com/pnv301tfxmpb.html'
},
@@ -72,13 +72,13 @@ export const Adorama: Store = {
},
{
brand: 'pny',
model: 'xlr8 rgb',
model: 'xlr8 revel',
series: '3080',
url: 'https://www.adorama.com/png30801tfxb.html'
},
{
brand: 'asus',
model: 'rog strix oc',
model: 'strix oc',
series: '3080',
url: 'https://www.adorama.com/asrx3080o10g.html'
},
@@ -120,7 +120,7 @@ export const Adorama: Store = {
},
{
brand: 'asus',
model: 'rog strix oc',
model: 'strix oc',
series: '3090',
url: 'https://www.adorama.com/asrx3090o24g.html'
}
+9 -10
View File
@@ -36,7 +36,7 @@ export const AlternateNL: Store = {
},
{
brand: 'asus',
model: 'tuf gaming',
model: 'tuf',
series: '3080',
url: 'https://www.alternate.nl/product/1672251'
},
@@ -54,19 +54,19 @@ export const AlternateNL: Store = {
},
{
brand: 'asus',
model: 'tuf oc gaming',
model: 'tuf oc',
series: '3080',
url: 'https://www.alternate.nl/product/1672634'
},
{
brand: 'asus',
model: 'rog strix oc gaming',
model: 'strix oc',
series: '3080',
url: 'https://www.alternate.nl/product/1672867'
},
{
brand: 'evga',
model: 'xc3 black gaming',
model: 'xc3 black',
series: '3080',
url: 'https://www.alternate.nl/product/1673512'
},
@@ -78,13 +78,13 @@ export const AlternateNL: Store = {
},
{
brand: 'evga',
model: 'xc3 ultra gaming',
model: 'xc3 ultra',
series: '3080',
url: 'https://www.alternate.nl/product/1674164'
},
{
brand: 'asus',
model: 'rog strix gaming',
model: 'strix',
series: '3080',
url: 'https://www.alternate.nl/product/1672868'
},
@@ -108,7 +108,7 @@ export const AlternateNL: Store = {
},
{
brand: 'evga',
model: 'xc3 gaming',
model: 'xc3',
series: '3080',
url: 'https://www.alternate.nl/product/1673520'
},
@@ -126,7 +126,7 @@ export const AlternateNL: Store = {
},
{
brand: 'evga',
model: 'ftw3 ultra gaming',
model: 'ftw3 ultra',
series: '3080',
url: 'https://www.alternate.nl/product/1673524'
},
@@ -138,7 +138,7 @@ export const AlternateNL: Store = {
},
{
brand: 'evga',
model: 'ftw3 gaming',
model: 'ftw3',
series: '3080',
url: 'https://www.alternate.nl/product/1673517'
},
@@ -169,4 +169,3 @@ export const AlternateNL: Store = {
],
name: 'alternate-nl'
};
+105 -10
View File
@@ -4,33 +4,44 @@ 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',
euroFormat: true
},
outOfStock: {
container: '.stockStatus',
text: ['liefertermin unbekannt']
}
outOfStock: [
{
container: '.stockStatus',
text: ['liefertermin unbekannt']
},
{
container: '.stockStatus',
text: ['Artikel kann nicht gekauft werden']
}
]
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.alternate.de/product/1516616'
url: 'https://www.alternate.de/product/1662088'
},
{
brand: 'asus',
model: 'rog strix',
model: 'strix',
series: '3080',
url: 'https://www.alternate.de/product/1672868'
},
{
brand: 'asus',
model: 'rog strix oc',
model: 'strix oc',
series: '3080',
url: 'https://www.alternate.de/product/1672867'
},
@@ -186,13 +197,13 @@ export const Alternate: Store = {
},
{
brand: 'asus',
model: 'rog strix',
model: 'strix',
series: '3090',
url: 'https://www.alternate.de/product/1672870'
},
{
brand: 'asus',
model: 'rog strix oc',
model: 'strix oc',
series: '3090',
url: 'https://www.alternate.de/product/1672872'
},
@@ -315,6 +326,90 @@ export const Alternate: Store = {
model: 'trinity',
series: '3090',
url: 'https://www.alternate.de/product/1672611'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.alternate.de/product/1685588'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.alternate.de/product/1685585'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.alternate.de/product/1685590'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.alternate.de/product/1685584'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.alternate.de/product/1651220'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.alternate.de/product/1651221'
},
{
brand: 'xfx',
model: 'merc',
series: 'rx6800xt',
url: 'https://www.alternate.de/product/1698792'
},
{
brand: 'sapphire',
model: 'nitro oc se',
series: 'rx6800xt',
url: 'https://www.alternate.de/product/1696478'
},
{
brand: 'sapphire',
model: 'nitro oc',
series: 'rx6800xt',
url: 'https://www.alternate.de/product/1696482'
},
{
brand: 'asus',
model: 'strix lc',
series: 'rx6800xt',
url: 'https://www.alternate.de/product/1695392'
},
{
brand: 'gigabyte',
model: 'gaming oc',
series: 'rx6800xt',
url: 'https://www.alternate.de/product/1697044'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.alternate.de/product/1675115'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.alternate.de/product/1675117'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.alternate.de/product/1676874'
}
],
name: 'alternate'
+87 -2
View File
@@ -11,124 +11,209 @@ export const AmazonCa: Store = {
text: ['add to cart']
},
maxPrice: {
container: 'span[class*="PriceString"]',
euroFormat: false
container: '#priceblock_ourprice'
}
},
links: [
{
brand: 'test:brand',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B07PBLD2MX&Quantity.1=1',
model: 'test:model',
series: 'test:series',
url: 'https://www.amazon.ca/dp/B07PBLD2MX'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR7SV3M&Quantity.1=1',
model: 'gaming x trio',
series: '3080',
url: 'https://www.amazon.ca/dp/B08HR7SV3M'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1',
model: 'ventus 3x oc',
series: '3080',
url: 'https://www.amazon.ca/dp/B08HR5SXPS'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR3DPGW&Quantity.1=1',
model: 'ftw3',
series: '3080',
url: 'https://www.amazon.ca/dp/B08HR3DPGW'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1',
model: 'ftw3 ultra',
series: '3080',
url: 'https://www.amazon.ca/dp/B08HR3Y5GQ'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1',
model: 'xc3 ultra',
series: '3080',
url: 'https://www.amazon.ca/dp/B08HR55YB5'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1',
model: 'xc3',
series: '3080',
url: 'https://www.amazon.ca/dp/B08HR4RJ3Q'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1',
model: 'xc3 black',
series: '3080',
url: 'https://www.amazon.ca/dp/B08HR6FMF3'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1',
model: 'gaming oc',
series: '3080',
url: 'https://www.amazon.ca/dp/B08HJTH61J'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1',
model: 'eagle oc',
series: '3080',
url: 'https://www.amazon.ca/dp/B08HJS2JLJ'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1',
model: 'tuf',
series: '3080',
url: 'https://www.amazon.ca/dp/B08HHDP9DW'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1',
model: 'tuf oc',
series: '3080',
url: 'https://www.amazon.ca/dp/B08HH5WF97'
},
{
brand: 'zotac',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1',
model: 'trinity',
series: '3080',
url: 'https://www.amazon.ca/dp/B08HJNKT3P'
},
{
brand: 'zotac',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1',
model: 'trinity',
series: '3090',
url: 'https://www.amazon.ca/dp/B08HJQ182D'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1',
model: 'ventus 3x oc',
series: '3090',
url: 'https://www.amazon.ca/dp/B08HR9D2JS'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1',
model: 'gaming oc',
series: '3090',
url: 'https://www.amazon.ca/dp/B08HJRF2CN'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1',
model: 'eagle oc',
series: '3090',
url: 'https://www.amazon.ca/dp/B08HJPDJTY'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1',
model: 'tuf',
series: '3090',
url: 'https://www.amazon.ca/dp/B08HJGNJ81'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1',
model: 'tuf oc',
series: '3090',
url: 'https://www.amazon.ca/dp/B08HJLLF7G'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amazon.ca/dp/B08166SLDF'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.amazon.ca/dp/B0815XFSGK'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.amazon.ca/dp/B08164VTWH'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.amazon.ca/dp/B0815Y8J9N'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08GSC5D9G&Quantity.1=1',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.amazon.ca/dp/B08GSC5D9G'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.ca/gp/aws/cart/add.html?ASIN.1=B08GS1N24H&Quantity.1=1',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.amazon.ca/dp/B08GS1N24H'
}
],
name: 'amazon-ca'
+63
View File
@@ -0,0 +1,63 @@
import {Store} from './store';
export const AmazonDeWarehouse: Store = {
backoffStatusCodes: [403, 429, 503],
labels: {
captcha: {
container: 'body',
text: [
'geben sie die unten angezeigten zeichen ein',
'geben sie die zeichen unten ein'
]
},
inStock: {
container: '#a-autoid-0-announce',
text: ['In den Einkaufswagen']
},
maxPrice: {
container: 'a-size-large a-color-price olpOfferPrice a-text-bold',
euroFormat: true
},
outOfStock: [
{
container: '.a-size-medium',
text: [
'Derzeit gibt es keine Verkäufer, die diesen Artikel an Ihren Standort liefern können'
]
}
]
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.amazon.de/gp/offer-listing/B07PW9VBK5'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.amazon.de/gp/offer-listing/B08H93ZRK9'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.amazon.de/gp/offer-listing/B08H98GVK8'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.amazon.de/gp/offer-listing/B087VM5XC6'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.amazon.de/gp/offer-listing/B08H93ZRLL'
}
],
name: 'amazon-de-warehouse'
};
+211 -12
View File
@@ -5,353 +5,552 @@ 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',
container: '#add-to-cart-button',
text: ['in den einkaufswagen']
},
maxPrice: {
container: 'span[class*="PriceString"]',
container: '#priceblock_ourprice',
euroFormat: true
}
},
outOfStock: [
{
container: '#availability',
text: ['Derzeit nicht verfügbar']
}
]
},
links: [
{
brand: 'test:brand',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B07PW9VBK5&Quantity.1=1',
model: 'test:model',
series: 'test:series',
url: 'https://www.amazon.de/dp/B083JX52VG/'
url: 'https://www.amazon.de/dp/B07PW9VBK5'
},
{
brand: 'asus',
model: 'rog strix',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN7VVLJ&Quantity.1=1',
model: 'strix',
series: '3080',
url: 'https://www.amazon.de/dp/B08HN7VVLJ'
},
{
brand: 'asus',
model: 'rog strix oc',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN6KYS3&Quantity.1=1',
model: 'strix oc',
series: '3080',
url: 'https://www.amazon.de/dp/B08HN6KYS3'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN37VQK&Quantity.1=1',
model: 'tuf',
series: '3080',
url: 'https://www.amazon.de/dp/B08HN37VQK'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN4DSTC&Quantity.1=1',
model: 'tuf oc',
series: '3080',
url: 'https://www.amazon.de/dp/B08HN4DSTC'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGBYWQ6&Quantity.1=1',
model: 'ftw3',
series: '3080',
url: 'https://www.amazon.de/dp/B08HGBYWQ6'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGYXP4C&Quantity.1=1',
model: 'ftw3 ultra',
series: '3080',
url: 'https://www.amazon.de/dp/B08HGYXP4C'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGLN78Q&Quantity.1=1',
model: 'xc3',
series: '3080',
url: 'https://www.amazon.de/dp/B08HGLN78Q'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HH1BMQQ&Quantity.1=1',
model: 'xc3 black',
series: '3080',
url: 'https://www.amazon.de/dp/B08HH1BMQQ'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HJ9XFNM&Quantity.1=1',
model: 'xc3 ultra',
series: '3080',
url: 'https://www.amazon.de/dp/B08HJ9XFNM'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KHLDS72&Quantity.1=1',
model: 'aorus master',
series: '3080',
url: 'https://www.amazon.de/dp/B08KHLDS72'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HHZVZ3N&Quantity.1=1',
model: 'eagle oc',
series: '3080',
url: 'https://www.amazon.de/dp/B08HHZVZ3N'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HLZXHZY&Quantity.1=1',
model: 'gaming oc',
series: '3080',
url: 'https://www.amazon.de/dp/B08HLZXHZY'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KH7RL89&Quantity.1=1',
model: 'vision oc',
series: '3080',
url: 'https://www.amazon.de/dp/B08KH7RL89'
},
{
brand: 'inno3d',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08JD6QPXD&Quantity.1=1',
model: 'twin x2 oc',
series: '3080',
url: 'https://www.amazon.de/dp/B08JD6QPXD'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HM4V2DH&Quantity.1=1',
model: 'gaming x trio',
series: '3080',
url: 'https://www.amazon.de/dp/B08HM4V2DH'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HM4M621&Quantity.1=1',
model: 'ventus 3x oc',
series: '3080',
url: 'https://www.amazon.de/dp/B08HM4M621'
},
{
brand: 'palit',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08JCVWTQY&Quantity.1=1',
model: 'gaming pro',
series: '3080',
url: 'https://www.amazon.de/dp/B08JCVWTQY'
},
{
brand: 'palit',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08JCKYYL8&Quantity.1=1',
model: 'gaming pro oc',
series: '3080',
url: 'https://www.amazon.de/dp/B08JCKYYL8'
},
{
brand: 'zotac',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HR1NPPQ&Quantity.1=1',
model: 'trinity',
series: '3080',
url: 'https://www.amazon.de/dp/B08HR1NPPQ'
},
{
brand: 'asus',
model: 'rog strix',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN642LY&Quantity.1=1',
model: 'strix',
series: '3090',
url: 'https://www.amazon.de/dp/B08HN642LY'
},
{
brand: 'asus',
model: 'rog strix oc',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN51T8Q&Quantity.1=1',
model: 'strix oc',
series: '3090',
url: 'https://www.amazon.de/dp/B08HN51T8Q'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN4FLFJ&Quantity.1=1',
model: 'tuf',
series: '3090',
url: 'https://www.amazon.de/dp/B08HN4FLFJ'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HN5B8FJ&Quantity.1=1',
model: 'tuf oc',
series: '3090',
url: 'https://www.amazon.de/dp/B08HN5B8FJ'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGFNPJQ&Quantity.1=1',
model: 'ftw3',
series: '3090',
url: 'https://www.amazon.de/dp/B08HGFNPJQ'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08J5NMDP7&Quantity.1=1',
model: 'ftw3',
series: '3090',
url: 'https://www.amazon.de/dp/B08J5NMDP7'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGS1SXH&Quantity.1=1',
model: 'ftw3 ultra',
series: '3090',
url: 'https://www.amazon.de/dp/B08HGS1SXH'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGZ4XSZ&Quantity.1=1',
model: 'xc3',
series: '3090',
url: 'https://www.amazon.de/dp/B08HGZ4XSZ'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGKQ527&Quantity.1=1',
model: 'xc3 black',
series: '3090',
url: 'https://www.amazon.de/dp/B08HGKQ527'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HGTNDL4&Quantity.1=1',
model: 'xc3 ultra',
series: '3090',
url: 'https://www.amazon.de/dp/B08HGTNDL4'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KH7R4FQ&Quantity.1=1',
model: 'aorus master',
series: '3090',
url: 'https://www.amazon.de/dp/B08KH7R4FQ'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1',
model: 'eagle oc',
series: '3090',
url: 'https://www.amazon.de/dp/B08HJPDJTY'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KHKDTSJ&Quantity.1=1',
model: 'turbo',
series: '3090',
url: 'https://www.amazon.de/dp/B08KHKDTSJ'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1',
model: 'gaming oc',
series: '3090',
url: 'https://www.amazon.de/dp/B08HJRF2CN'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HRBW6VB&Quantity.1=1',
model: 'gaming x trio',
series: '3090',
url: 'https://www.amazon.de/dp/B08HRBW6VB'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HM661YM&Quantity.1=1',
model: 'ventus 3x oc',
series: '3090',
url: 'https://www.amazon.de/dp/B08HM661YM'
},
{
brand: 'palit',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08JQQ1VD1&Quantity.1=1',
model: 'gaming pro',
series: '3090',
url: 'https://www.amazon.de/dp/B08JQQ1VD1'
},
{
brand: 'nvidia',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HR6ZBYJ&Quantity.1=1',
model: 'founders edition',
series: '3090',
url: 'https://www.amazon.de/dp/B08HR6ZBYJ'
},
{
brand: 'zotac',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1',
model: 'trinity',
series: '3090',
url: 'https://www.amazon.de/dp/B08HJQ182D'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HSJ1622&Quantity.1=1',
model: 'dual',
series: '3070',
url: 'https://www.amazon.de/dp/B08HSJ1622'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KHFZN9P&Quantity.1=1',
model: 'dual oc',
series: '3070',
url: 'https://www.amazon.de/dp/B08KHFZN9P'
},
{
brand: 'asus',
model: 'rog strix',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HT7PR9Y&Quantity.1=1',
model: 'strix',
series: '3070',
url: 'https://www.amazon.de/dp/B08HT7PR9Y'
},
{
brand: 'asus',
model: 'rog strix oc',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08L8JNTXQ&Quantity.1=1',
model: 'strix oc',
series: '3070',
url: 'https://www.amazon.de/dp/B08L8JNTXQ'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KWPDXJZ&Quantity.1=1',
model: 'ventus 2x oc',
series: '3070',
url: 'https://www.amazon.de/dp/B08KWPDXJZ'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08L6PCZTR&Quantity.1=1',
model: 'ventus 3x oc',
series: '3070',
url: 'https://www.amazon.de/dp/B08L6PCZTR'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KWN2LZG&Quantity.1=1',
model: 'gaming x trio',
series: '3070',
url: 'https://www.amazon.de/dp/B08KWN2LZG'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08M13DXSZ&Quantity.1=1',
model: 'vision oc',
series: '3070',
url: 'https://www.amazon.de/dp/B08M13DXSZ'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KHL21CV&Quantity.1=1',
model: 'gaming oc',
series: '3070',
url: 'https://www.amazon.de/dp/B08KHL21CV'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08KHL2J5X&Quantity.1=1',
model: 'eagle oc',
series: '3070',
url: 'https://www.amazon.de/dp/B08KHL2J5X'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08L3QCZKZ&Quantity.1=1',
model: 'xc3 black',
series: '3070',
url: 'https://www.amazon.de/dp/B08L3QCZKZ'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08L3QZP7W&Quantity.1=1',
model: 'xc3',
series: '3070',
url: 'https://www.amazon.de/dp/B08L3QZP7W'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08L3Q41SM&Quantity.1=1',
model: 'xc3 ultra',
series: '3070',
url: 'https://www.amazon.de/dp/B08L3Q41SM'
},
{
brand: 'zotac',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HRBR7K9&Quantity.1=1',
model: 'twin edge',
series: '3070',
url: 'https://www.amazon.de/dp/B08HRBR7K9'
},
{
brand: 'zotac',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08LBVNKT1&Quantity.1=1',
model: 'twin edge oc',
series: '3070',
url: 'https://www.amazon.de/dp/B08LBVNKT1'
},
{
brand: 'pny',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HBF5L3K&Quantity.1=1',
model: 'dual fan',
series: '3070',
url: 'https://www.amazon.de/dp/B08HBF5L3K'
},
{
brand: 'pny',
model: 'xlr8 rgb',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08HBJB7YD&Quantity.1=1',
model: 'xlr8 revel',
series: '3070',
url: 'https://www.amazon.de/dp/B08HBJB7YD'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amazon.de/dp/B08166SLDF'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.amazon.de/dp/B0815XFSGK'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.amazon.de/dp/B08164VTWH'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.amazon.de/dp/B0815Y8J9N'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08H93ZRK9&Quantity.1=1',
labels: {
inStock: {
container: '#productTitle',
text: ['sony playstation 5']
}
},
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.amazon.de/dp/B08H93ZRK9'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08H98GVK8&Quantity.1=1',
labels: {
inStock: {
container: '#productTitle',
text: ['sony playstation 5']
}
},
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.amazon.de/dp/B08H98GVK8'
},
{
brand: 'microsoft',
// Fixme: disabled because of #1095, enable when working again
// cartUrl:
// 'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B08H93ZRLL&Quantity.1=1',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.amazon.de/dp/B08H93ZRLL'
},
{
brand: 'microsoft',
// Fixme: disabled because of #1095, enable when working again
// cartUrl:
// 'https://www.amazon.de/gp/aws/cart/add.html?ASIN.1=B087VM5XC6&Quantity.1=1',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.amazon.de/dp/B087VM5XC6'
}
],
name: 'amazon-de'
+103 -5
View File
@@ -1,6 +1,7 @@
import {Store} from './store';
export const AmazonEs: Store = {
backoffStatusCodes: [403, 429, 503],
labels: {
captcha: {
container: 'body',
@@ -11,94 +12,191 @@ export const AmazonEs: Store = {
text: ['añadir a la cesta']
},
maxPrice: {
container: 'span[class*="PriceString"]',
euroFormat: true
}
container: '#priceblock_ourprice'
},
outOfStock: [
{
container: '#availability',
text: ['No disponible']
}
]
},
links: [
{
brand: 'test:brand',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B07PW9VBK5&Quantity.1=1',
model: 'test:model',
series: 'test:series',
url: 'https://www.amazon.es/dp/B083JX52VG/'
url: 'https://www.amazon.es/dp/B07PW9VBK5'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HM4V2DH&Quantity.1=1',
model: 'gaming x trio',
series: '3080',
url: 'https://www.amazon.es/dp/B08HM4V2DH'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HGYXP4C&Quantity.1=1',
model: 'ftw3 ultra',
series: '3080',
url: 'https://www.amazon.es/dp/B08HGYXP4C'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HJ9XFNM&Quantity.1=1',
model: 'xc3 ultra',
series: '3080',
url: 'https://www.amazon.es/dp/B08HJ9XFNM'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HGBYWQ6&Quantity.1=1',
model: 'ftw3',
series: '3080',
url: 'https://www.amazon.es/dp/B08HGBYWQ6'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HGLN78Q&Quantity.1=1',
model: 'xc3',
series: '3080',
url: 'https://www.amazon.es/dp/B08HGLN78Q'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HH1BMQQ&Quantity.1=1',
model: 'xc3 black',
series: '3080',
url: 'https://www.amazon.es/dp/B08HH1BMQQ'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HLZXHZY&Quantity.1=1',
model: 'gaming oc',
series: '3080',
url: 'https://www.amazon.es/dp/B08HLZXHZY'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HHZVZ3N&Quantity.1=1',
model: 'eagle oc',
series: '3080',
url: 'https://www.amazon.es/dp/B08HHZVZ3N'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HN37VQK&Quantity.1=1',
model: 'tuf',
series: '3080',
url: 'https://www.amazon.es/dp/B08HN37VQK'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HN4DSTC&Quantity.1=1',
model: 'tuf oc',
series: '3080',
url: 'https://www.amazon.es/dp/B08HN4DSTC'
},
{
brand: 'asus',
model: 'rog strix oc',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HN6KYS3&Quantity.1=1',
model: 'strix oc',
series: '3080',
url: 'https://www.amazon.es/dp/B08HN6KYS3'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HM4M621&Quantity.1=1',
model: 'ventus 3x oc',
series: '3080',
url: 'https://www.amazon.es/dp/B08HM4M621'
},
{
brand: 'zotac',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08HR1NPPQ&Quantity.1=1',
model: 'trinity',
series: '3080',
url: 'https://www.amazon.es/dp/B08HR1NPPQ'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amazon.es/dp/B08166SLDF'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.amazon.es/dp/B0815XFSGK'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.amazon.es/dp/B08164VTWH'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.amazon.es/dp/B0815Y8J9N'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08KKJ37F7&Quantity.1=1',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.amazon.es/dp/B08KKJ37F7'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08KJF2D25&Quantity.1=1',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.amazon.es/dp/B08KJF2D25'
},
{
brand: 'microsoft',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B08H93ZRLL&Quantity.1=1',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.amazon.es/dp/B08H93ZRLL'
},
{
brand: 'microsoft',
cartUrl:
'https://www.amazon.es/gp/aws/cart/add.html?ASIN.1=B087VM5XC6&Quantity.1=1',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.amazon.es/dp/B087VM5XC6'
}
],
name: 'amazon-es'
+190
View File
@@ -0,0 +1,190 @@
import {Store} from './store';
export const AmazonFr: Store = {
backoffStatusCodes: [403, 429, 503],
labels: {
captcha: {
container: 'body',
text: ['entrez les caractères que vous voyez ci-dessous']
},
inStock: {
container: '#desktop_buybox',
text: ['ajouter au panier']
},
maxPrice: {
container: '#priceblock_ourprice',
euroFormat: true
},
outOfStock: [
{
container: '#availability',
text: ['Actuellement indisponible']
}
]
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.amazon.fr/dp/B07PW9VBK5'
},
{
brand: 'msi',
model: 'gaming x trio',
series: '3080',
url: 'https://www.amazon.fr/dp/B08HR7SV3M'
},
{
brand: 'msi',
model: 'ventus 3x oc',
series: '3080',
url: 'https://www.amazon.fr/dp/B08HR5SXPS'
},
{
brand: 'evga',
model: 'ftw3',
series: '3080',
url: 'https://www.amazon.fr/dp/B08HR3DPGW'
},
{
brand: 'evga',
model: 'ftw3 ultra',
series: '3080',
url: 'https://www.amazon.fr/dp/B08HR3Y5GQ'
},
{
brand: 'evga',
model: 'xc3 ultra',
series: '3080',
url: 'https://www.amazon.fr/dp/B08HR55YB5'
},
{
brand: 'evga',
model: 'xc3',
series: '3080',
url: 'https://www.amazon.fr/dp/B08HR4RJ3Q'
},
{
brand: 'evga',
model: 'xc3 black',
series: '3080',
url: 'https://www.amazon.fr/dp/B08HR6FMF3'
},
{
brand: 'gigabyte',
model: 'gaming oc',
series: '3080',
url: 'https://www.amazon.fr/dp/B08HJTH61J'
},
{
brand: 'gigabyte',
model: 'eagle oc',
series: '3080',
url: 'https://www.amazon.fr/dp/B08HJS2JLJ'
},
{
brand: 'asus',
model: 'tuf',
series: '3080',
url: 'https://www.amazon.fr/dp/B08HHDP9DW'
},
{
brand: 'asus',
model: 'tuf oc',
series: '3080',
url: 'https://www.amazon.fr/dp/B08HH5WF97'
},
{
brand: 'zotac',
model: 'trinity',
series: '3080',
url: 'https://www.amazon.fr/dp/B08HJNKT3P'
},
{
brand: 'zotac',
model: 'trinity',
series: '3090',
url: 'https://www.amazon.fr/dp/B08HJQ182D'
},
{
brand: 'msi',
model: 'ventus 3x oc',
series: '3090',
url: 'https://www.amazon.fr/dp/B08HR9D2JS'
},
{
brand: 'gigabyte',
model: 'gaming oc',
series: '3090',
url: 'https://www.amazon.fr/dp/B08HJRF2CN'
},
{
brand: 'gigabyte',
model: 'eagle oc',
series: '3090',
url: 'https://www.amazon.fr/dp/B08HJPDJTY'
},
{
brand: 'asus',
model: 'tuf',
series: '3090',
url: 'https://www.amazon.fr/dp/B08HJGNJ81'
},
{
brand: 'asus',
model: 'tuf oc',
series: '3090',
url: 'https://www.amazon.fr/dp/B08HJLLF7G'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amazon.fr/dp/B08166SLDF'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.amazon.fr/dp/B0815XFSGK'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.amazon.fr/dp/B08164VTWH'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.amazon.fr/dp/B0815Y8J9N'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.amazon.fr/dp/B08H93ZRK9'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.amazon.fr/dp/B08H98GVK8'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.amazon.fr/dp/B08H93ZRLL'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.amazon.fr/dp/B087VM5XC6'
}
],
name: 'amazon-fr'
};
+413
View File
@@ -0,0 +1,413 @@
import {Store} from './store';
export const AmazonIt: Store = {
backoffStatusCodes: [403, 429, 503],
labels: {
captcha: {
container: 'body',
text: ['enter the characters you see below']
},
inStock: {
container: '#desktop_buybox',
text: ['Aggiungi al carrello']
},
maxPrice: {
container: '#priceblock_ourprice'
}
},
links: [
{
brand: 'asus',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B07PW9VBK5&Quantity.1=1',
model: 'dual',
series: '3070',
url: 'https://www.amazon.it/dp/B07PW9VBK5'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8HPKR6&Quantity.1=1',
model: 'dual',
series: '3070',
url: 'https://www.amazon.it/dp/B08L8HPKR6'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8JNTXQ&Quantity.1=1',
model: 'strix',
series: '3070',
url: 'https://www.amazon.it/dp/B08L8JNTXQ'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8KC1J7&Quantity.1=1',
model: 'tuf',
series: '3070',
url: 'https://www.amazon.it/dp/B08L8KC1J7'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1',
model: 'gaming oc',
series: '3070',
url: 'https://www.amazon.it/dp/B08KY266MG'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KWN2LZG&Quantity.1=1',
model: 'gaming',
series: '3070',
url: 'https://www.amazon.it/dp/B08KWN2LZG'
},
{
brand: 'pny',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBJB7YD&Quantity.1=1',
model: 'xlr8 revel',
series: '3070',
url: 'https://www.amazon.it/dp/B08HBJB7YD'
},
{
brand: 'pny',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBF5L3K&Quantity.1=1',
model: 'xlr8 uprising',
series: '3070',
url: 'https://www.amazon.it/dp/B08HBF5L3K'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KWPDXJZ&Quantity.1=1',
model: 'ventus 2x oc',
series: '3070',
url: 'https://www.amazon.it/dp/B08KWPDXJZ'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KWLMZV4&Quantity.1=1',
model: 'ventus 3x oc',
series: '3070',
url: 'https://www.amazon.it/dp/B08KWLMZV4'
},
{
brand: 'zotac',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08LF32LJ6&Quantity.1=1',
model: 'gaming',
series: '3070',
url: 'https://www.amazon.it/dp/B08LF32LJ6'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8L71SM&Quantity.1=1',
model: 'xc3 ultra',
series: '3070',
url: 'https://www.amazon.it/dp/B08L8L71SM'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08L8L9TCZ&Quantity.1=1',
model: 'ftw3',
series: '3070',
url: 'https://www.amazon.it/dp/B08L8L9TCZ'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KY266MG&Quantity.1=1',
model: 'gaming oc',
series: '3070',
url: 'https://www.amazon.it/dp/B08KY266MG'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08M13DXSZ&Quantity.1=1',
model: 'vision oc',
series: '3070',
url: 'https://www.amazon.it/dp/B08M13DXSZ'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KXZV626&Quantity.1=1',
model: 'eagle',
series: '3070',
url: 'https://www.amazon.it/dp/B08KXZV626'
},
{
brand: 'pny',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1',
model: 'xlr8 revel',
series: '3080',
url: 'https://www.amazon.it/dp/B08HBR7QBM'
},
{
brand: 'pny',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1',
model: 'xlr8 revel',
series: '3080',
url: 'https://www.amazon.it/dp/B08HBTJMLJ'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR3Y5GQ&Quantity.1=1',
model: 'ftw3 ultra',
series: '3080',
url: 'https://www.amazon.it/dp/B08HR3Y5GQ'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR55YB5&Quantity.1=1',
model: 'xc3 ultra',
series: '3080',
url: 'https://www.amazon.it/dp/B08HR55YB5'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR4RJ3Q&Quantity.1=1',
model: 'xc3',
series: '3080',
url: 'https://www.amazon.it/dp/B08HR4RJ3Q'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR6FMF3&Quantity.1=1',
model: 'xc3 black',
series: '3080',
url: 'https://www.amazon.it/dp/B08HR6FMF3'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJTH61J&Quantity.1=1',
model: 'gaming oc',
series: '3080',
url: 'https://www.amazon.it/dp/B08HJTH61J'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJS2JLJ&Quantity.1=1',
model: 'eagle oc',
series: '3080',
url: 'https://www.amazon.it/dp/B08HJS2JLJ'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HH5WF97&Quantity.1=1',
model: 'tuf oc',
series: '3080',
url: 'https://www.amazon.it/dp/B08HH5WF97'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HHDP9DW&Quantity.1=1',
model: 'tuf',
series: '3080',
url: 'https://www.amazon.it/dp/B08HHDP9DW'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1',
model: 'strix oc',
series: '3090',
url: 'https://www.amazon.it/dp/B08J6GMWCQ'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR5SXPS&Quantity.1=1',
model: 'ventus 3x oc',
series: '3080',
url: 'https://www.amazon.it/dp/B08HR5SXPS'
},
{
brand: 'zotac',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJNKT3P&Quantity.1=1',
model: 'trinity',
series: '3080',
url: 'https://www.amazon.it/dp/B08HJNKT3P'
},
{
brand: 'zotac',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJQ182D&Quantity.1=1',
model: 'trinity',
series: '3090',
url: 'https://www.amazon.it/dp/B08HJQ182D'
},
{
brand: 'pny',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1',
model: 'xlr8 revel',
series: '3090',
url: 'https://www.amazon.it/dp/B08HBQWBHH'
},
{
brand: 'pny',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1',
model: 'xlr8 revel',
series: '3090',
url: 'https://www.amazon.it/dp/B08HBVX53D'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HRBW6VB&Quantity.1=1',
model: 'gaming x trio',
series: '3090',
url: 'https://www.amazon.it/dp/B08HRBW6VB'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HR9D2JS&Quantity.1=1',
model: 'ventus 3x',
series: '3090',
url: 'https://www.amazon.it/dp/B08HR9D2JS'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJRF2CN&Quantity.1=1',
model: 'gaming oc',
series: '3090',
url: 'https://www.amazon.it/dp/B08HJRF2CN'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJPDJTY&Quantity.1=1',
model: 'eagle oc',
series: '3090',
url: 'https://www.amazon.it/dp/B08HJPDJTY'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJGNJ81&Quantity.1=1',
model: 'tuf oc',
series: '3090',
url: 'https://www.amazon.it/dp/B08HJGNJ81'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08HJLLF7G&Quantity.1=1',
model: 'tuf oc',
series: '3090',
url: 'https://www.amazon.it/dp/B08HJLLF7G'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amazon.it/dp/B08166SLDF'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.amazon.it/dp/product/B0815XFSGK'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.amazon.it/dp/B08164VTWH'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.amazon.it/dp/B0815Y8J9N'
},
{
brand: 'sapphire',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08MVC76SR&Quantity.1=1',
model: 'amd reference',
series: 'rx6800xt',
url: 'https://www.amazon.it/dp/B08MVC76SR'
},
{
brand: 'sapphire',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08MVCLBWK&Quantity.1=1',
model: 'amd reference',
series: 'rx6800',
url: 'https://www.amazon.it/dp/B08MVCLBWK'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KKJ37F7&Quantity.1=1',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.amazon.it/dp/B08KKJ37F7'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08KJF2D25&Quantity.1=1',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.amazon.it/dp/B08KJF2D25'
},
{
brand: 'microsoft',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08JDSW1ZW&Quantity.1=1',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.amazon.it/dp/B08JDSW1ZW'
},
{
brand: 'microsoft',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B08JDTCXRG&Quantity.1=1',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.amazon.it/dp/B08JDTCXRG'
},
{
brand: 'corsair',
cartUrl:
'https://www.amazon.it/gp/aws/cart/add.html?ASIN.1=B07M63H81H&Quantity.1=1',
model: '750 platinum',
series: 'sf',
url: 'https://www.amazon.it/dp/B07M63H81H'
}
],
name: 'amazon-it'
};
+52 -3
View File
@@ -8,10 +8,15 @@ 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"]',
container: '#priceblock_ourprice',
euroFormat: true
},
outOfStock: [
@@ -28,39 +33,83 @@ export const AmazonNl: Store = {
links: [
{
brand: 'test:brand',
cartUrl:
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B083GGYNQ6&Quantity.1=1',
model: 'test:model',
series: 'test:series',
url: 'https://www.amazon.nl/dp/B083GGYNQ6'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HM4M621&Quantity.1=1',
model: 'ventus 3x oc',
series: '3080',
url: 'https://www.amazon.nl/dp/B08HM4M621'
},
{
brand: 'msi',
cartUrl:
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HM4V2DH&Quantity.1=1',
model: 'gaming x trio',
series: '3080',
url: 'https://www.amazon.nl/dp/B08HM4V2DH'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HJ9XFNM&Quantity.1=1',
model: 'xc3 ultra',
series: '3080',
url: 'https://www.amazon.nl/dp/B08HJ9XFNM'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HH1BMQQ&Quantity.1=1',
model: 'xc3 black',
series: '3080',
url: 'https://www.amazon.nl/dp/B08HH1BMQQ'
},
{
brand: 'asus',
model: 'rog strix',
cartUrl:
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08HN7VVLJ&Quantity.1=1',
model: 'strix',
series: '3080',
url: 'https://www.amazon.nl/dp/B08HN7VVLJ'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08166SLDF&Quantity.1=1',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amazon.nl/dp/B08166SLDF'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.amazon.nl/dp/B0815XFSGK'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B08164VTWH&Quantity.1=1',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.amazon.nl/dp/B08164VTWH'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.nl/gp/aws/cart/add.html?ASIN.1=B0815Y8J9N&Quantity.1=1',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.amazon.nl/dp/B0815Y8J9N'
}
],
name: 'amazon-nl'
+48 -6
View File
@@ -14,7 +14,7 @@ export const AmazonUk: Store = {
text: ['in stock']
},
maxPrice: {
container: 'span[class*="PriceString"]'
container: '#priceblock_ourprice'
},
outOfStock: [
{
@@ -30,15 +30,50 @@ 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=B0753R2TWC&Quantity.1=1',
model: 'test:model',
series: 'test:series',
url: 'https://www.amazon.co.uk/dp/B081265T5Z/'
url: 'https://www.amazon.co.uk/dp/B0753R2TWC/'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08H95Y452&Quantity.1=1',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.amazon.co.uk/dp/B08H95Y452'
},
{
brand: 'sony',
cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08H97NYGP&Quantity.1=1',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.amazon.co.uk/dp/B08H97NYGP'
},
{
brand: 'microsoft',
cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08H93GKNJ&Quantity.1=1',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.amazon.co.uk/dp/B08H93GKNJ'
},
{
brand: 'microsoft',
cartUrl:
'https://www.amazon.co.uk/gp/aws/cart/add.html?ASIN.1=B08GD9MNZB&Quantity.1=1',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.amazon.co.uk/dp/B08GD9MNZB'
}
],
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);
@@ -49,7 +84,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)) {
@@ -67,7 +104,7 @@ export const AmazonUk: Store = {
url
});
} else {
logger.error(`Failed to parse card: ${title}`);
logger.error(`Failed to parse card: ${title}`, {url});
}
}
@@ -88,6 +125,11 @@ export const AmazonUk: Store = {
'https://www.amazon.co.uk/s?k=%2B%22RTX+3090%22+-3080+-GTX&i=computers&rh=n%3A430500031%2Cp_n_availability%3A419162031&s=relevancerank&dc&qid=1601675291',
'https://www.amazon.co.uk/s?k=%2B%22RTX+3090%22+-3080+-GTX&i=computers&rh=n%3A430500031%2Cp_n_availability%3A419162031&s=relevancerank&dc&qid=1601675594&page=2'
]
},
{
series: '3060ti',
url:
'https://www.amazon.co.uk/s?k=%2B%22RTX+3060+TI%22+-2060+-2070+-2080+-SUPER+-GTX&i=computers&rh=n%3A430500031%2Cp_n_availability%3A419162031&s=relevancerank&dc&qid=1601675291sb_noss'
}
]
},
+443 -38
View File
@@ -1,201 +1,606 @@
import {Store} from './store';
export const Amazon: Store = {
backoffStatusCodes: [403, 429, 503],
labels: {
captcha: {
container: 'body',
text: ['enter the characters you see below']
},
inStock: {
container: '#desktop_buybox',
text: ['add to cart']
},
inStock: [
{
container: '#add-to-cart-button',
text: ['add to cart']
},
{
container: '#buy-now-button',
text: ['buy now']
}
],
maxPrice: {
container: 'span[class*="PriceString"]'
container: '#priceblock_ourprice'
}
},
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=B083248S3B&Quantity.1=1',
model: 'test:model',
series: 'test:series',
url: 'https://www.amazon.com/dp/B07TDN1SC5'
url: 'https://www.amazon.com/dp/B083248S3B'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8LG4M3&Quantity.1=1',
model: 'dual',
series: '3070',
url: 'https://www.amazon.com/dp/B08L8LG4M3'
},
{
brand: 'asus',
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',
model: 'xc3 black',
series: '3070',
url: 'https://www.amazon.com/dp/B08LW46GH2'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8JNTXQ&Quantity.1=1',
model: 'strix',
series: '3070',
url: 'https://www.amazon.com/dp/B08L8JNTXQ'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8KC1J7&Quantity.1=1',
model: 'tuf',
series: '3070',
url: 'https://www.amazon.com/dp/B08L8KC1J7'
},
{
brand: 'gigabyte',
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: 'msi',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KWN2LZG&Quantity.1=1',
model: 'gaming',
series: '3070',
url: 'https://www.amazon.com/dp/B08KWN2LZG'
},
{
brand: 'pny',
cartUrl: 'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1',
model: 'xlr8',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBJB7YD&Quantity.1=1',
model: 'xlr8 revel',
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',
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=B08KWPDXJZ&Quantity.1=1',
model: 'ventus 2x oc',
series: '3070',
url: 'https://www.amazon.com/dp/B08KWPDXJZ'
},
{
brand: 'msi',
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',
model: 'twin edge oc',
series: '3070',
url: 'https://www.amazon.com/dp/B08LF1CWT2'
},
{
brand: 'zotac',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08LF32LJ6&Quantity.1=1',
model: 'gaming',
series: '3070',
url: 'https://www.amazon.com/dp/B08LF32LJ6'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8L71SM&Quantity.1=1',
model: 'xc3 ultra',
series: '3070',
url: 'https://www.amazon.com/dp/B08L8L71SM'
},
{
brand: 'evga',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08L8L9TCZ&Quantity.1=1',
model: 'ftw3',
series: '3070',
url: 'https://www.amazon.com/dp/B08L8L9TCZ'
},
{
brand: 'evga',
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',
model: 'gaming oc',
series: '3070',
url: 'https://www.amazon.com/dp/B08KY266MG'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08M13DXSZ&Quantity.1=1',
model: 'vision oc',
series: '3070',
url: 'https://www.amazon.com/dp/B08M13DXSZ'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08M4YFNX2&Quantity.1=1',
model: 'gaming oc',
series: '3070',
url: 'https://www.amazon.com/dp/B08M4YFNX2'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KXZV626&Quantity.1=1',
model: 'eagle',
series: '3070',
url: 'https://www.amazon.com/dp/B08KXZV626'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08KY322TH&Quantity.1=1',
model: 'eagle oc',
series: '3070',
url: 'https://www.amazon.com/dp/B08KY322TH'
},
{
brand: 'pny',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBR7QBM&Quantity.1=1',
model: 'xlr8 revel',
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',
model: 'xlr8 rgb',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBTJMLJ&Quantity.1=1',
model: 'xlr8 revel',
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',
model: 'rog strix oc',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6F174Z&Quantity.1=1',
model: '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',
model: 'rog strix oc',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08J6GMWCQ&Quantity.1=1',
model: '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',
model: 'xlr8',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBQWBHH&Quantity.1=1',
model: 'xlr8 revel',
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',
model: 'xlr8',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08HBVX53D&Quantity.1=1',
model: 'xlr8 revel',
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=B08166SLDF&Quantity.1=1',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amazon.com/dp/B08166SLDF'
},
{
brand: 'amd',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B0815XFSGK&Quantity.1=1',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.amazon.com/dp/product/B0815XFSGK'
},
{
brand: 'amd',
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/B08164VTWH'
},
{
brand: 'amd',
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/B0815Y8J9N'
},
{
brand: 'gigabyte',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NS4W2ZY&Quantity.1=1',
model: 'amd reference',
series: 'rx6800xt',
url: 'https://www.amazon.com/dp/B08NS4W2ZY'
},
{
brand: 'sapphire',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08MVC76SR&Quantity.1=1',
model: 'amd reference',
series: 'rx6800xt',
url: 'https://www.amazon.com/dp/B08MVC76SR'
},
{
brand: 'sapphire',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NXXT7WN&Quantity.1=1',
model: 'nitro+',
series: 'rx6800xt',
url: 'https://www.amazon.com/dp/B08NXXT7WN'
},
{
brand: 'sapphire',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NXYNLMR&Quantity.1=1',
model: 'pulse',
series: 'rx6800xt',
url: 'https://www.amazon.com/dp/B08NXYNLMR'
},
{
brand: 'sapphire',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NXVNMPQ&Quantity.1=1',
model: 'nitro+',
series: 'rx6800xt',
url: 'https://www.amazon.com/dp/B08NXVNMPQ'
},
{
brand: 'xfx',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08N6ZLX9B&Quantity.1=1',
model: 'amd reference',
series: 'rx6800xt',
url: 'https://www.amazon.com/dp/B08N6ZLX9B'
},
{
brand: 'xfx',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NX14LV1&Quantity.1=1',
model: 'merc',
series: 'rx6800xt',
url: 'https://www.amazon.com/dp/B08NX14LV1'
},
{
brand: 'xfx',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NN76VJD&Quantity.1=1',
model: 'amd reference',
series: 'rx6800',
url: 'https://www.amazon.com/dp/B08NN76VJD'
},
{
brand: 'xfx',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08P5YFZCY&Quantity.1=1',
model: 'merc',
series: 'rx6800',
url: 'https://www.amazon.com/dp/B08P5YFZCY'
},
{
brand: 'powercolor',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08MNZM5TK&Quantity.1=1',
model: 'amd reference',
series: 'rx6800',
url: 'https://www.amazon.com/dp/B08MNZM5TK'
},
{
brand: 'sapphire',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08MVCLBWK&Quantity.1=1',
model: 'amd reference',
series: 'rx6800',
url: 'https://www.amazon.com/dp/B08MVCLBWK'
},
{
brand: 'sapphire',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NXZSPMY&Quantity.1=1',
model: 'nitro+',
series: 'rx6800',
url: 'https://www.amazon.com/dp/B08NXZSPMY'
},
{
brand: 'sapphire',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NXYBVDB&Quantity.1=1',
model: 'pulse',
series: 'rx6800',
url: 'https://www.amazon.com/dp/B08NXYBVDB'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NWJ29NB&Quantity.1=1',
model: 'strix oc',
series: 'rx6800',
url: 'https://www.amazon.com/dp/B08NWJ29NB'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08P3YT3MY&Quantity.1=1',
model: 'tuf oc',
series: 'rx6800',
url: 'https://www.amazon.com/dp/B08P3YT3MY'
},
{
brand: 'asus',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B08NWHKGS9&Quantity.1=1',
model: 'strix lc',
series: 'rx6800xt',
url: 'https://www.amazon.com/dp/B08NWHKGS9'
},
{
brand: 'sony',
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',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.amazon.com/dp/B08FC6MR62'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.amazon.com/dp/B08H75RTZ8'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.amazon.com/dp/B08G9J44ZN'
},
{
brand: 'corsair',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B07M63H81H&Quantity.1=1',
model: '750 platinum',
series: 'sf',
url: 'https://www.amazon.com/dp/B07M63H81H'
},
{
brand: 'corsair',
cartUrl:
'https://www.amazon.com/gp/aws/cart/add.html?ASIN.1=B07F84FJ1G&Quantity.1=1',
model: '600 platinum',
series: 'sf',
url: 'https://www.amazon.com/dp/B07F84FJ1G'
}
],
name: 'amazon'
+39
View File
@@ -0,0 +1,39 @@
import {Store} from './store';
export const AmdCa: Store = {
labels: {
inStock: {
container: '.btn-shopping-cart',
text: ['add to cart']
},
maxPrice: {
container: '.product-page-description h4',
euroFormat: false
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.amd.com/en/direct-buy/5458373400/ca'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5458373400/ca?add-to-cart=true',
model: 'amd reference',
series: 'rx6800',
url: 'https://www.amd.com/en/direct-buy/5458373400/ca'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5458372800/ca?add-to-cart=true',
model: 'amd reference',
series: 'rx6800xt',
url: 'https://www.amd.com/en/direct-buy/5458372800/ca'
}
],
name: 'amd-ca'
};
+63
View File
@@ -0,0 +1,63 @@
import {Store} from './store';
export const AmdDe: Store = {
labels: {
inStock: {
container: '.btn-shopping-cart',
text: ['add to cart']
},
maxPrice: {
container: '.product-page-description h4',
euroFormat: true
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.amd.com/de/direct-buy/5450881400/de'
},
{
brand: 'amd',
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',
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',
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',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amd.com/de/direct-buy/5450881700/de'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/de/direct-buy/5458374100/de?add-to-cart=true',
model: 'amd reference',
series: 'rx6800xt',
url: 'https://www.amd.com/de/direct-buy/5458374100/de'
}
],
name: 'amd-de'
};
+63
View File
@@ -0,0 +1,63 @@
import {Store} from './store';
export const AmdIt: Store = {
labels: {
inStock: {
container: '.btn-shopping-cart',
text: ['add to cart']
},
maxPrice: {
container: '.product-page-description h4',
euroFormat: true
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.amd.com/en/direct-buy/5450881400/it'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5450881400/it?add-to-cart=true',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.amd.com/en/direct-buy/5450881400/it'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5450881500/it?add-to-cart=true',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.amd.com/en/direct-buy/5450881500/it'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5450881600/it?add-to-cart=true',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.amd.com/en/direct-buy/5450881600/it'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5450881700/it?add-to-cart=true',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amd.com/en/direct-buy/5450881700/it'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5458374100/it?add-to-cart=true',
model: 'amd reference',
series: 'rx6800xt',
url: 'https://www.amd.com/en/direct-buy/5458374100/it'
}
],
name: 'amd-it'
};
+71
View File
@@ -0,0 +1,71 @@
import {Store} from './store';
export const Amd: Store = {
labels: {
inStock: {
container: '.btn-shopping-cart',
text: ['add to cart']
},
maxPrice: {
container: '.product-page-description h4',
euroFormat: false
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.amd.com/en/direct-buy/5450881400/us'
},
{
brand: 'amd',
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',
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',
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',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.amd.com/en/direct-buy/5450881700/us'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5458372800/us?add-to-cart=true',
model: 'amd reference',
series: 'rx6800xt',
url: 'https://www.amd.com/en/direct-buy/5458372800/us'
},
{
brand: 'amd',
cartUrl:
'https://www.amd.com/en/direct-buy/5458373400/us?add-to-cart=true',
model: 'amd reference',
series: 'rx6800',
url: 'https://www.amd.com/en/direct-buy/5458373400/us'
}
],
name: 'amd'
};
+42
View File
@@ -0,0 +1,42 @@
import {Store} from './store';
export const AntOnline: Store = {
labels: {
inStock: {
container: '.uk-button',
text: ['Add to Cart']
},
maxPrice: {
container: '.cPrice',
euroFormat: false
},
outOfStock: {
container: '.priceView-price .priceView-hero-price span',
text: ['Sold Out']
}
},
links: [
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url:
'https://www.antonline.com/Sony/Electronics/Gaming_Devices/Gaming_Consoles/1409507'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url:
'https://www.antonline.com/Microsoft/Electronics/Gaming_Devices/Gaming_Consoles/1414487'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url:
'https://www.antonline.com/Microsoft/Electronics/Gaming_Devices/Gaming_Consoles/1409527'
}
],
name: 'antonline'
};
+34
View File
@@ -0,0 +1,34 @@
import {Store} from './store';
export const Argos: Store = {
labels: {
inStock: {
container: 'button[data-test="add-to-trolley-button-button"',
text: ['to trolley']
},
maxPrice: {
container: 'li[itemprop="price"]'
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.argos.co.uk/product/5718469'
},
{
brand: 'asus',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.argos.co.uk/product/6795199'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.argos.co.uk/product/6795151'
}
],
name: 'argos'
};
+24 -4
View File
@@ -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,15 @@ 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'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.aria.co.uk/Products/Components/Processors/AMD+CPUs/Ryzen+9+-+Socket+AM4/AMD+Ryzen+9+5950X+16+Core+AM4+CPU%2FProcessor?productId=72868'
}
],
linksBuilder: {
@@ -31,13 +39,25 @@ export const Aria: Store = {
titleSelector: 'strong > a[href]'
}),
urls: [
{
series: '3060ti',
url:
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3060+Ti'
},
{
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'
},
{
series: '3060ti',
url:
'https://www.aria.co.uk/Products/Components/Graphics+Cards/NVIDIA+GeForce/GeForce+RTX+3060+Ti'
}
]
},
+140
View File
@@ -0,0 +1,140 @@
import {Store} from './store';
export const Arlt: Store = {
labels: {
inStock: {
container: '.articleDesc .shippingtext',
text: ['auf Lager', 'Lieferzeit 2-3 Werktage', 'Ware im Zulauf']
},
maxPrice: {
container: '.articleprice .price',
euroFormat: true
},
outOfStock: {
container: '.articleDesc .shippingtext',
text: ['Neuer Artikel in Kürze verfügbar', 'Liefertermin unbekannt']
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
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'
},
{
brand: 'asus',
model: 'dual oc',
series: '3070',
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'
},
{
brand: 'asus',
model: 'strix',
series: '3070',
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'
},
{
brand: 'gainward',
model: 'phoenix',
series: '3070',
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'
},
{
brand: 'asus',
model: 'tuf oc',
series: '3080',
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'
},
{
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'
},
{
brand: 'asus',
model: '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'
},
{
brand: 'gainward',
model: 'phoenix gs',
series: '3090',
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'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
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'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.arlt.com/Hardware/PC-Komponenten/Prozessoren-arlt/AMD-Ryzen-9-5950X-boxed.html'
}
],
name: 'arlt'
};
+22 -13
View File
@@ -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',
model: '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',
model: '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',
model: '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',
model: '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'
+32 -2
View File
@@ -1,6 +1,8 @@
import {Store} from './store';
import fetch from 'node-fetch';
export const Asus: Store = {
backoffStatusCodes: [403, 429, 503],
labels: {
inStock: {
container: '#item_add_cart',
@@ -10,41 +12,69 @@ export const Asus: Store = {
links: [
{
brand: 'test:brand',
itemNumber: '202007AM020000005',
model: 'test:model',
series: 'test:series',
url: 'https://store.asus.com/us/item/202003AM280000002'
url: 'https://store.asus.com/us/item/202007AM020000005'
},
{
brand: 'asus',
itemNumber: '202009AM160000001',
model: 'tuf oc',
series: '3080',
url: 'https://store.asus.com/us/item/202009AM160000001'
},
{
brand: 'asus',
itemNumber: '202009AM150000004',
model: 'tuf',
series: '3080',
url: 'https://store.asus.com/us/item/202009AM150000004'
},
{
brand: 'asus',
itemNumber: '202009AM150000003',
model: 'tuf',
series: '3090',
url: 'https://store.asus.com/us/item/202009AM150000003'
},
{
brand: 'asus',
itemNumber: '202009AM150000001',
model: 'tuf oc',
series: '3090',
url: 'https://store.asus.com/us/item/202009AM150000001'
},
{
brand: 'asus',
model: 'rog strix oc',
itemNumber: '202009AM290000002',
model: 'strix oc',
series: '3080',
url: 'https://store.asus.com/us/item/202009AM290000002'
}
],
name: 'asus',
realTimeInventoryLookup: async (itemNumber: string) => {
const request_url = 'https://store.asus.com/us/category/get_real_time_data';
const response = await fetch(request_url, {
body: 'sm_seq_list%5B%5D=' + itemNumber,
headers: {
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'no-cache',
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
method: 'POST'
});
const response_json = await response.json();
if (response_json.data[itemNumber] !== undefined) {
const item_info = response_json.data[itemNumber].market_info;
if (item_info.buy === true || item_info.quantity > 0) {
return true;
}
}
return false;
},
successStatusCodes: [[0, 399], 404]
};
+116
View File
@@ -0,0 +1,116 @@
import {Store} from './store';
import {getProductLinksBuilder} from './helpers/card';
export const Awd: Store = {
labels: {
inStock: {
container: '.vs-stock .ty-qty-in-stock',
text: ['item(s)']
},
maxPrice: {
container: '.product-info .ty-price-num',
euroFormat: false // Note: Awd uses non-euroFromat as price seperator
},
outOfStock: {
container: '.vs-stock',
text: ['out of stock']
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url:
'https://www.awd-it.co.uk/asus-nvidia-geforce-gt-710-silent-low-profile-2gb-gddr5-graphics-card-pci-e.html'
},
{
brand: 'asus',
model: 'amd reference',
series: 'rx6800',
url:
'https://www.awd-it.co.uk/asus-tuf-gaming-radeon-rx-6800-oc-edition-16gb-gddr6-graphics-card.html'
},
{
brand: 'asus',
model: 'amd reference',
series: 'rx6800',
url:
'https://www.awd-it.co.uk/asus-rog-strix-radeon-rx-6800-oc-edition-16gb-gddr6-graphics-card.html'
},
{
brand: 'gigabyte',
model: 'amd reference',
series: 'rx6800',
url:
'https://www.awd-it.co.uk/gigabyte-radeon-rx-6800-gaming-oc-16gb-gddr6-graphics-card.html'
},
{
brand: 'gigabyte',
model: 'amd reference',
series: 'rx6800xt',
url:
'https://www.awd-it.co.uk/gigabyte-radeon-rx-6800-xt-gaming-oc-16gb-gddr6-graphics-card.html'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.awd-it.co.uk/amd-ryzen-5-5600x-cpu-six-core-3.7ghz-processor-socket-am4-retail.html'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.awd-it.co.uk/amd-ryzen-7-5800x-cpu-eight-core-3.8ghz-processor-socket-am4-retail.html'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.awd-it.co.uk/amd-ryzen-9-5900x-cpu-twelve-core-3.7ghz-processor-socket-am4-retail.html'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.awd-it.co.uk/amd-ryzen-9-5950x-sixteen-core-socket-am4-3.4ghz-processor.html'
}
],
linksBuilder: {
builder: getProductLinksBuilder({
productsSelector: '.grid-list .ty-grid-list__item',
sitePrefix: 'https://www.awd-it.co.uk',
titleSelector: '.title-price-wrapper',
urlSelector: 'a[href]'
}),
urls: [
{
series: '3070',
url:
'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3070.html'
},
{
series: '3080',
url:
'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3080.html'
},
{
series: '3090',
url:
'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3090.html'
},
{
series: '3060ti',
url:
'https://www.awd-it.co.uk/components/graphics-cards/nvidia/nvidia-geforce-rtx-3060ti.html'
}
]
},
name: 'awd',
waitUntil: 'domcontentloaded'
};
+53 -29
View File
@@ -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',
model: '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',
model: 'xlr8 revel',
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',
model: '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',
model: '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',
model: 'xlr8 revel',
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'
+131 -16
View File
@@ -17,7 +17,29 @@ 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'
},
{
brand: 'asus',
model: 'dual',
series: '3070',
url:
'https://www.bhphotovideo.com/c/product/1602755-REG/asus_dualrtx30708g_geforce_rtx_3070_8g.html'
},
{
brand: 'pny',
model: 'dual fan',
series: '3070',
url:
'https://www.bhphotovideo.com/c/product/1595984-REG/pny_technologies_vcg30708tfxppb_geforce_rtx_3070_epic_x.html'
},
{
brand: 'asus',
model: 'strix oc',
series: '3070',
url:
'https://www.bhphotovideo.com/c/product/1602756-REG/asus_strixrtx3070o8_rog_strix_geforce_rtx.html'
},
// TUF was removed from BH, not sure why so commenting out listing for now
// {
@@ -30,13 +52,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
// {
@@ -45,83 +69,174 @@ export const BAndH: Store = {
// series: '3080',
// url: 'https://www.bhphotovideo.com/c/product/1593650-REG/asus_tuf_rtx3080_o10g_gaming_tuf_gaming_geforce_rtx.html'
// },
{
brand: 'gigabyte',
model: 'eagle oc',
series: '3060ti',
url:
'https://www.bhphotovideo.com/c/product/1606948-REG/gigabyte_gv_n306teagle_oc_8gd_rtx_3060_ti_eagle.html'
},
{
brand: 'gigabyte',
model: 'eagle',
series: '3060ti',
url:
'https://www.bhphotovideo.com/c/product/1606949-REG/gigabyte_gv_n306teagle_8gd_rtx_3060_ti_eagle.html'
},
{
brand: 'gigabyte',
model: 'aorus',
series: '3060ti',
url:
'https://www.bhphotovideo.com/c/product/1606945-REG/gigabyte_gv_n306taorus_m_8gd_aorus_rtx_3060_ti.html'
},
{
brand: 'gigabyte',
model: 'gaming oc',
series: '3060ti',
url:
'https://www.bhphotovideo.com/c/product/1606947-REG/gigabyte_gv_n306tgaming_oc_8gd_rtx_3060_ti_gaming.html'
},
{
brand: 'gigabyte',
model: 'gaming pro',
series: '3060ti',
url:
'https://www.bhphotovideo.com/c/product/1606946-REG/gigabyte_gv_n306tgamingoc_pro_8gd_rtx_3060_ti_gaming.html'
},
{
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'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
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'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.bhphotovideo.com/c/product/1598377-REG/amd_100_100000065box_ryzen_5_5600x_3_7.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'
},
{
brand: 'corsair',
model: '750 platinum',
series: 'sf',
url:
'https://www.bhphotovideo.com/c/product/1560680-REG/corsair_cp_9020186_na_corsair_sf750_power_supply.html'
}
],
name: 'bandh'
+87 -19
View File
@@ -3,12 +3,17 @@ import {Store} from './store';
export const BestBuyCa: Store = {
labels: {
inStock: {
container: '#root',
text: ['available online']
container: '.x-checkout-experience-new',
text: ['add to cart']
},
maxPrice: {
container: 'div[class^="productPricingContainer"] span[class^="screenReaderOnly_"',
container:
'div[class^="productPricingContainer"] span[class^="screenReaderOnly_"',
euroFormat: false
},
outOfStock: {
container: 'button.addToCartButton.disabled_XY3i_',
text: ['Add to Cart']
}
},
links: [
@@ -16,85 +21,148 @@ 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/evga-geforce-gtx-1660-xc-ultra-6gb-gddr5-video-card/14119081?intl=nosplash'
},
{
brand: 'msi',
model: 'ventus 2x oc',
series: '3060ti',
url:
'https://www.bestbuy.ca/en-ca/product/msi-nvidia-geforce-rtx-3060-ti-ventus-2x-oc-8gb-gddr6-video-card/15178453?intl=nosplash'
},
{
brand: 'nvidia',
model: 'founders edition',
series: '3060ti',
url:
'https://www.bestbuy.ca/en-ca/product/nvidia-geforce-rtx-3060-ti-8gb-gddr6-video-card/15166285?intl=nosplash'
},
{
brand: 'zotac',
model: 'twin edge oc',
series: '3060ti',
url:
'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3060-ti-twin-edge-oc-8gb-gddr6-video-card/15178452?intl=nosplash'
},
{
brand: 'zotac',
model: 'twin edge',
series: '3060ti',
url:
'https://www.bestbuy.ca/en-ca/product/zotac-geforce-rtx-3060-ti-twin-edge-8gb-gddr6-video-card/15178583?intl=nosplash'
},
{
brand: 'evga',
model: 'ftw3 ultra',
series: '3060ti',
url:
'https://www.bestbuy.ca/en-ca/product/evga-geforce-rtx-3060-ti-ftw3-ultra-8gb-gddr6-video-card/15200164?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/15084753?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',
model: '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',
model: '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'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url:
'https://www.bestbuy.ca/en-ca/product/playstation-5-console-online-only/14962185?intl=nosplash'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5de',
url:
'https://www.bestbuy.ca/en-ca/product/playstation-5-digital-edition-console-online-only/14962184?intl=nosplash'
}
],
name: 'bestbuy-ca',
+374 -109
View File
@@ -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,217 +17,481 @@ 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/insignia-8qt-digital-multi-cooker-stainless-steel/6258941.p?skuId=6258941&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'
},
{
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'
},
{
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/nvidia-geforce-rtx-3070-8gb-gddr6-pci-express-4-0-graphics-card-dark-platinum-and-black/6429442.p?skuId=6429442&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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
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-3070-xc3-black-gaming-8gb-gddr6x-pci-express-4-0-graphics-card/6439300.p?skuId=6439300&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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
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/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6437909.p?skuId=6437909&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',
model: 'xlr8 revel',
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: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6439384/cart',
model: 'aorus',
series: '3070',
url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-black/6439384.p?skuId=6439384'
},
{
brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6439385/cart',
model: 'vision',
series: '3070',
url:
'https://www.bestbuy.com/site/gigabyte-geforce-rtx-3070-8g-gddr6-pci-express-4-0-graphics-card-white/6439385.p?skuId=6439385'
},
{
brand: 'asus',
cartUrl: 'https://api.bestbuy.com/click/-/6439128/cart',
model: 'tuf',
series: '3070',
url:
'https://www.bestbuy.com/site/asus-tuf-rtx3070-8gb-gddr6-pci-express-4-0-graphics-card-black/6439128.p?skuId=6439128'
},
{
brand: 'msi',
cartUrl: 'https://api.bestbuy.com/click/-/6438278/cart',
model: 'ventus 3x oc',
series: '3070',
url:
'https://www.bestbuy.com/site/msi-geforce-rtx-3070-ventus-3x-oc-bv-8gb-gddr6-pci-express-4-0-graphics-card-black/6438278.p?skuId=6438278'
},
{
brand: 'asus',
cartUrl: 'https://api.bestbuy.com/click/-/6439127/cart',
model: 'strix',
series: '3070',
url:
'https://www.bestbuy.com/site/asus-rog-strix-rtx3070-8gb-gddr6-pci-express-4-0-graphics-card-black/6439127.p?skuId=6439127'
},
{
brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6439301/cart',
model: 'ftw3 ultra',
series: '3070',
url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3070-ftw3-ultra-gaming-8gb-gddr6x-pci-express-4-0-graphics-card/6439301.p?skuId=6439301'
},
{
brand: 'evga',
cartUrl: 'https://api.bestbuy.com/click/-/6439299/cart',
model: 'xc3 ultra',
series: '3070',
url:
'https://www.bestbuy.com/site/evga-geforce-rtx-3070-xc3-ultra-gaming-8gb-gddr6x-pci-express-4-0-graphics-card/6439299.p?skuId=6439299'
},
{
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'
},
{
brand: 'asus',
cartUrl: 'https://api.bestbuy.com/click/-/6432445/cart',
model: '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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
brand: 'pny',
cartUrl: 'https://api.bestbuy.com/click/-/6432655/cart',
model: 'xlr8 rgb',
model: 'xlr8 revel',
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',
model: 'xlr8 revel',
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',
model: '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',
model: 'xlr8 revel',
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: 'nvidia',
cartUrl: 'https://api.bestbuy.com/click/-/6439402/cart',
model: 'founders edition',
series: '3060ti',
url:
'https://www.bestbuy.com/site/nvidia-geforce-rtx-3060-ti-8gb-gddr6-pci-express-4-0-graphics-card-steel-and-black/6439402.p?skuId=6439402&intl=nosplash'
},
{
brand: 'msi',
cartUrl: 'https://api.bestbuy.com/click/-/6441172/cart',
model: 'ventus 2x',
series: '3060ti',
url:
'https://www.bestbuy.com/site/msi-geforce-rtx-3060-ti-ventus-2x-oc-bv-8gb-gddr6-pci-express-4-0-graphics-card-black-black/6441172.p?skuId=6441172&intl=nosplash'
},
{
brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6442484/cart',
model: 'gaming oc',
series: '3060ti',
url:
'https://www.bestbuy.com/site/gigabyte-nvidia-geforce-rtx-3060-ti-gaming-oc-8g-gddr6-pci-express-4-0-graphics-card-black/6442484.p?skuId=6442484?intl=nosplash'
},
{
brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6442485/cart',
model: 'eagle',
series: '3060ti',
url:
'https://www.bestbuy.com/site/gigabyte-nvidia-geforce-rtx-3060-ti-eagle-oc-8g-gddr6-pci-express-4-0-graphics-card-black/6442485.p?skuId=6442485?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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
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'
},
{
brand: 'msi',
model: 'amd reference',
series: 'rx6800xt',
url:
'https://www.bestbuy.com/site/msi-radeon-rx-6800-xt-16g-16gb-gddr6-pci-express-4-0-graphics-card-black-black/6440913.p?skuId=6440913'
},
{
brand: 'msi',
model: 'amd reference',
series: 'rx6800',
url:
'https://www.bestbuy.com/site/msi-radeon-rx-6800-16g-16gb-gddr6-pci-express-4-0-graphics-card-black-black/6441020.p?skuId=6441020'
},
{
brand: 'xfx',
model: 'amd reference',
series: 'rx6800',
url:
'https://www.bestbuy.com/site/xfx-amd-radeon-rx-6800-16gb-gddr6-pci-express-4-0-gaming-graphics-card-black/6442077.p?skuId=6442077'
},
{
brand: 'xfx',
model: 'amd reference',
series: 'rx6800xt',
url:
'https://www.bestbuy.com/site/xfx-amd-radeon-rx-6800xt-16gb-gddr6-pci-express-4-0-gaming-graphics-card-black/6441226.p?skuId=6441226'
},
{
brand: 'xfx',
model: 'merc',
series: 'rx6800xt',
url:
'https://www.bestbuy.com/site/xfx-merc-319-amd-radeon-rx-6800xt-16gb-gddr6-pci-express-4-0-gaming-graphics-card-black/6442585.p?skuId=6442585'
},
{
brand: 'corsair',
cartUrl: 'https://api.bestbuy.com/click/-/6351845/cart',
model: '750 platinum',
series: 'sf',
url:
'https://www.bestbuy.com/site/corsair-sf-series-750w-atx12v-2-4-eps12v-2-92-sfx12v-80-plus-platinum-modular-power-supply-black/6351845.p?skuId=6351845'
},
{
brand: 'corsair',
cartUrl: 'https://api.bestbuy.com/click/-/6351844/cart',
model: '600 platinum',
series: 'sf',
url:
'https://www.bestbuy.com/site/corsair-sf-series-600w-atx12v-2-4-eps12v-2-92-sfx12v-80-plus-platinum-modular-power-supply-black/6351844.p?skuId=6351844'
},
{
brand: 'nvidia',
cartUrl: 'https://api.bestbuy.com/click/-/6439402/cart',
model: 'founders edition',
series: '3060ti',
url:
'https://www.bestbuy.com/site/nvidia-geforce-rtx-3060-ti-8gb-gddr6-pci-express-4-0-graphics-card-steel-and-black/6439402.p?skuId=6439402&intl=nosplash'
},
{
brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6442484/cart',
model: 'gaming oc',
series: '3060ti',
url:
'https://www.bestbuy.com/site/gigabyte-nvidia-geforce-rtx-3060-ti-gaming-oc-8g-gddr6-pci-express-4-0-graphics-card-black/6442484.p?skuId=6442484&intl=nosplash'
},
{
brand: 'gigabyte',
cartUrl: 'https://api.bestbuy.com/click/-/6442485/cart',
model: 'eagle oc',
series: '3060ti',
url:
'https://www.bestbuy.com/site/gigabyte-nvidia-geforce-rtx-3060-ti-eagle-oc-8g-gddr6-pci-express-4-0-graphics-card-black/6442485.p?skuId=6442485&intl=nosplash'
},
{
brand: 'msi',
cartUrl: 'https://api.bestbuy.com/click/-/6441172/cart',
model: 'ventus 2x oc',
series: '3060ti',
url:
'https://www.bestbuy.com/site/msi-geforce-rtx-3060-ti-ventus-2x-oc-bv-8gb-gddr6-pci-express-4-0-graphics-card-black-black/6441172.p?skuId=6441172&intl=nosplash'
}
],
name: 'bestbuy'
+10 -1
View File
@@ -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: {
@@ -30,6 +31,10 @@ export const Box: Store = {
titleSelector: '.p-list-section > h3 > a[href]'
}),
urls: [
{
series: '3060ti',
url: 'https://www.box.co.uk/rtx-3060-ti-graphics-cards'
},
{
series: '3070',
url: 'https://www.box.co.uk/rtx-3070-graphics-cards'
@@ -41,6 +46,10 @@ export const Box: Store = {
{
series: '3090',
url: 'https://www.box.co.uk/rtx-3090-graphics-cards'
},
{
series: '3060ti',
url: 'https://www.box.co.uk/rtx-3060-ti-graphics-cards'
}
]
},
+487
View File
@@ -0,0 +1,487 @@
import {Store} from './store';
export const CanadaComputers: Store = {
labels: {
inStock: {
container: 'div[class="pi-prod-availability"]',
text: ['Online In Stock']
},
outOfStock: {
container: 'div[class="pi-prod-availability"]',
text: ['Not Available Online']
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181348&language=en'
},
{
brand: 'gigabyte',
model: 'eagle',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183101&language=en'
},
{
brand: 'evga',
model: 'xc3 black',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183500&language=en'
},
{
brand: 'gigabyte',
model: 'gaming oc',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183099&language=en'
},
{
brand: 'msi',
model: 'gaming x trio',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183210&language=en'
},
{
brand: 'asus',
model: 'dual',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183635&language=en'
},
{
brand: 'asus',
model: 'dual oc',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183636&language=en'
},
{
brand: 'asus',
model: 'strix oc',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183637&language=en'
},
{
brand: 'gigabyte',
model: 'vision oc',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184168&language=en'
},
{
brand: 'gigabyte',
model: 'aorus master',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184167&language=en'
},
{
brand: 'zotac',
model: 'twin edge oc',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183561&language=en'
},
{
brand: 'msi',
model: 'ventus 2x oc',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183208&language=en'
},
{
brand: 'zotac',
model: 'twin edge',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183560&language=en'
},
{
brand: 'asus',
model: 'gaming oc',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183638&language=en'
},
{
brand: 'evga',
model: 'ftw3 ultra',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183498&language=en'
},
{
brand: 'msi',
model: 'ventus 3x oc',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183209&language=en'
},
{
brand: 'gigabyte',
model: 'eagle oc',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183100&language=en'
},
{
brand: 'evga',
model: 'xc3 ultra',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183499&language=en'
},
{
brand: 'asus',
model: 'gaming',
series: '3070',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184743&language=en'
},
{
brand: 'evga',
model: 'ftw3 ultra',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181376&language=en'
},
{
brand: 'asus',
model: 'strix',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181842&language=en'
},
{
brand: 'msi',
model: 'gaming x trio',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181348&language=en'
},
{
brand: 'gigabyte',
model: 'eagle oc',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181354&language=en'
},
{
brand: 'asus',
model: 'gaming',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181416&language=en'
},
{
brand: 'evga',
model: 'xc3 ultra',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181375&language=en'
},
{
brand: 'zotac',
model: 'trinity',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181420&language=en'
},
{
brand: 'zotac',
model: 'trinity oc',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184837&language=en'
},
{
brand: 'asus',
model: 'gaming oc',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181415&language=en'
},
{
brand: 'gigabyte',
model: 'gaming oc',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181353&language=en'
},
{
brand: 'asus',
model: 'gaming',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184743&language=en'
},
{
brand: 'msi',
model: 'ventus 3x',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181347&language=en'
},
{
brand: 'gigabyte',
model: 'aorus master',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=182754&language=en'
},
{
brand: 'evga',
model: 'xc3 black',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181797&language=en'
},
{
brand: 'gigabyte',
model: 'vision oc',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=182755&language=en'
},
{
brand: 'gigabyte',
model: 'aorus xtreme',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183098&language=en'
},
{
brand: 'zotac',
model: 'trinity oc',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183510&language=en'
},
{
brand: 'gigabyte',
model: 'eagle oc',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184166&language=en'
},
{
brand: 'evga',
model: 'xc3',
series: '3080',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181798&language=en'
},
{
brand: 'asus',
model: 'strix oc',
series: '3090',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181841&language=en'
},
{
brand: 'evga',
model: 'ftw3 ultra',
series: '3090',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181854&language=en'
},
{
brand: 'asus',
model: 'gaming oc',
series: '3090',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181413&language=en'
},
{
brand: 'zotac',
model: 'trinity',
series: '3090',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181419&language=en'
},
{
brand: 'gigabyte',
model: 'gaming oc',
series: '3090',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181351&language=en'
},
{
brand: 'msi',
model: 'gaming x trio',
series: '3090',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181350&language=en'
},
{
brand: 'asus',
model: 'gaming',
series: '3090',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181414&language=en'
},
{
brand: 'msi',
model: 'ventus 3x',
series: '3090',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181349&language=en'
},
{
brand: 'evga',
model: 'xc3 ultra',
series: '3090',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181853&language=en'
},
{
brand: 'gigabyte',
model: 'aorus xtreme',
series: '3090',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=183096&language=en'
},
{
brand: 'gigabyte',
model: 'eagle oc',
series: '3090',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=181352&language=en'
},
{
brand: 'msi',
model: 'gaming x trio',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185086&language=en'
},
{
brand: 'asus',
model: 'tuf',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184759&language=en'
},
{
brand: 'msi',
model: 'ventus 2x oc',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185087&language=en'
},
{
brand: 'asus',
model: 'dual',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184760&language=en'
},
{
brand: 'zotac',
model: 'twin edge oc',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185751&language=en'
},
{
brand: 'zotac',
model: 'twin edge',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185752&language=en'
},
{
brand: 'asus',
model: 'strix',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=184431&language=en'
},
{
brand: 'evga',
model: 'xc gaming',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185988&language=en'
},
{
brand: 'evga',
model: 'ftw3 ultra',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185987&language=en'
},
{
brand: 'gigabyte',
model: 'eagle oc',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185408&language=en'
},
{
brand: 'gigabyte',
model: 'gaming oc',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185407&language=en'
},
{
brand: 'gigabyte',
model: 'gaming oc pro',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185406&language=en'
},
{
brand: 'gigabyte',
model: 'aorus',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185405&language=en'
},
{
brand: 'asus',
model: 'ko',
series: '3060ti',
url:
'https://www.canadacomputers.com/product_info.php?cPath=43_557_559&item_id=185168&language=en'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.canadacomputers.com/product_info.php?cPath=4_64&item_id=183432&language=en'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.canadacomputers.com/product_info.php?cPath=4_64&item_id=183431&language=en'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.canadacomputers.com/product_info.php?cPath=4_64&item_id=183430&language=en'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.canadacomputers.com/product_info.php?cPath=4_64&item_id=183427&language=en'
}
],
name: 'canadacomputers',
waitUntil: 'domcontentloaded'
};
+162 -51
View File
@@ -21,255 +21,366 @@ 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',
model: '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',
model: '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',
model: 'xlr8 revel',
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',
model: 'xlr8 revel',
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',
model: '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',
model: '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',
model: 'xlr8 revel',
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',
model: 'xlr8 revel',
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'
},
{
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'
},
{
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'
},
{
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'
},
{
brand: 'sapphire',
model: 'nitro oc se',
series: 'rx6800xt',
url:
'https://www.caseking.de/sapphire-nitro-radeon-rx-6800-xt-oc-16g-16384-mb-gddr6-gcsp-215.html'
},
{
brand: 'sapphire',
model: 'nitro oc',
series: 'rx6800xt',
url:
'https://www.caseking.de/sapphire-nitro-radeon-rx-6800-xt-oc-se-16g-16384-mb-gddr6-gcsp-214.html'
},
{
brand: 'gigabyte',
model: 'gaming oc',
series: 'rx6800xt',
url:
'https://www.caseking.de/gigabyte-radeon-rx-6800-xt-gaming-oc-16g-16384-mb-gddr6-gcgb-356.html'
},
{
brand: 'gigabyte',
model: 'gaming',
series: 'rx6800xt',
url:
'https://www.caseking.de/gigabyte-radeon-rx-6800-xt-16g-16384-mb-gddr6-gcgb-357.html'
},
{
brand: 'asus',
model: 'strix lc',
series: 'rx6800xt',
url:
'https://www.caseking.de/asus-radeon-rx-6800-xt-rog-strix-lc-o16g-16384-mb-gddr6-gcas-416.html'
},
{
brand: 'asus',
model: 'tuf',
series: 'rx6800xt',
url:
'https://www.caseking.de/asus-radeon-rx-6800-xt-tuf-o16g-16384-mb-gddr6-gcas-417.html'
}
],
name: 'caseking'
};
+52 -4
View File
@@ -2,6 +2,7 @@ import {Store} from './store';
import {getProductLinksBuilder} from './helpers/card';
export const Ccl: Store = {
backoffStatusCodes: [403, 429, 503],
labels: {
inStock: {
container: '#pnlAddToBasket',
@@ -21,7 +22,36 @@ 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/'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.cclonline.com/product/331765/100-100000065BOX/CPU-Processors/AMD-Ryzen-5-5600X-3-7GHz-Hexa-Core-Processor-with-6-Cores-12-Threads-65W-TDP-35MB-Cache-4-6GHz-Turbo-Wraith-Stealth-Cooler/CPU0679/'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.cclonline.com/product/331766/100-100000063WOF/CPU-Processors/AMD-Ryzen-7-5800X-3-8GHz-Octa-Core-Processor-with-8-Cores-16-Threads-105W-TDP-36MB-Cache-4-7GHz-Turbo-No-Cooler/CPU0680/'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.cclonline.com/product/331767/100-100000061WOF/CPU-Processors/AMD-Ryzen-9-5900X-3-7GHz-Dodeca-Core-Processor-with-12-Cores-24-Threads-105W-TDP-70MB-Cache-4-8GHz-Turbo-No-Cooler/CPU0681/'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.cclonline.com/product/331768/100-100000059WOF/CPU-Processors/AMD-Ryzen-9-5950X-3-4GHz-Hexadeca-Core-Processor-with-16-Cores-32-Threads-105W-TDP-72MB-Cache-4-9GHz-Turbo-No-Cooler/CPU0682/'
}
],
linksBuilder: {
@@ -34,15 +64,33 @@ 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/'
},
{
series: 'rx6800',
url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/AMD-Radeon-RX-6800-Graphics-Cards/'
},
{
series: 'rx6800xt',
url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/AMD-Radeon-RX-6800-XT-Graphics-Cards/'
},
{
series: '3060ti',
url:
'https://www.cclonline.com/category/430/PC-Components/Graphics-Cards/GeForce-RTX-3060-Ti-Graphics-Cards/'
}
]
},
+40
View File
@@ -0,0 +1,40 @@
import {Store} from './store';
export const Comet: Store = {
labels: {
inStock: {
container: '.caption',
text: ['Aggiungi al carrello']
}
},
links: [
{
brand: 'sony',
cartUrl: 'https://www.comet.it/cart/insert/PSX01802A/online',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.comet.it/ps5/sony-playstation-5'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.comet.it/ps5/sony-playstation-5-digital-edition'
},
{
brand: 'microsoft',
cartUrl: 'https://www.comet.it/cart/insert/MIS01077A/online',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.comet.it/xbox-serie-x/xbox-series-x'
},
{
brand: 'microsoft',
cartUrl: 'https://www.comet.it/cart/insert/MIS010761/online',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.comet.it/xbox-serie-x/xbox-series-s'
}
],
name: 'comet'
};
+204 -83
View File
@@ -4,11 +4,19 @@ 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',
euroFormat: true
},
outOfStock: {
container: '.availability',
text: ['nicht verfügbar']
}
},
links: [
@@ -16,31 +24,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',
model: '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',
model: '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 +65,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',
@@ -122,333 +146,430 @@ export const Computeruniverse: Store = {
},
{
brand: 'pny',
model: 'xlr8 rgb',
model: 'xlr8 revel',
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',
model: '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',
model: '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',
model: 'xlr8 revel',
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',
model: 'xlr8 revel',
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',
model: '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',
model: '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',
model: 'xlr8 revel',
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',
model: 'xlr8 revel',
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'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
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'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.computeruniverse.net/de/amd-ryzen-9-5950x-box-ohne-kuehler'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url:
'https://www.computeruniverse.net/de/sony-playstation-5-weiss-schwarz-825gb-ssd'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url:
'https://www.computeruniverse.net/de/sony-playstation-5-digital-edition-weiss-schwarz-825gb-ssd'
}
],
name: 'computeruniverse'
+4 -4
View File
@@ -60,13 +60,13 @@ export const Coolblue: Store = {
},
{
brand: 'asus',
model: 'rog strix oc gaming',
model: 'strix oc',
series: '3080',
url: 'https://www.coolblue.nl/product/868731/'
},
{
brand: 'asus',
model: 'rog strix gaming',
model: 'strix',
series: '3080',
url: 'https://www.coolblue.nl/product/868732/'
},
@@ -96,13 +96,13 @@ export const Coolblue: Store = {
},
{
brand: 'asus',
model: 'rog strix oc gaming',
model: 'strix oc',
series: '3090',
url: 'https://www.coolblue.nl/product/868728/'
},
{
brand: 'asus',
model: 'rog strix gaming',
model: 'strix',
series: '3090',
url: 'https://www.coolblue.nl/product/868729/'
},
+157 -31
View File
@@ -6,6 +6,10 @@ export const Coolmod: Store = {
container: '.product-availability',
text: ['Envío']
},
maxPrice: {
container: '.text-price-total',
euroFormat: true
},
outOfStock: {
container: '.product-availability',
text: ['Sin Stock']
@@ -16,153 +20,275 @@ 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',
model: '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',
model: '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',
model: 'xlr8 revel',
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',
model: 'xlr8 revel',
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',
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'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.coolmod.com/amd-ryzen-5-5600x-46ghz-socket-am4-boxed-procesador-precio'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.coolmod.com/amd-ryzen-7-5800x-47ghz-socket-am4-boxed-procesador-precio'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.coolmod.com/amd-ryzen-9-5900x-48ghz-socket-am4-boxed-procesador-precio'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.coolmod.com/amd-ryzen-9-5950x-49ghz-socket-am4-boxed-procesador-precio'
},
{
brand: 'asus',
model: 'dual',
series: '3070',
url:
'https://www.coolmod.com/asus-dual-geforce-rtx-3070-8gb-gddr6-tarjeta-grafica-precio'
},
{
brand: 'msi',
model: 'gaming x trio',
series: '3070',
url:
'https://www.coolmod.com/msi-geforce-rtx-3070-gaming-x-trio-8gb-gddr6-tarjeta-grafica-precio'
},
{
brand: 'msi',
model: 'ventus 2x',
series: '3070',
url:
'https://www.coolmod.com/msi-geforce-rtx-3070-ventus-2x-oc-8gb-gddr6-tarjeta-grafica-precio'
},
{
brand: 'evga',
model: 'xc3',
series: '3070',
url:
'https://www.coolmod.com/evga-geforce-rtx-3070-xc3-black-gaming-8gb-gddr6-tarjeta-grafica-precio'
},
{
brand: 'asus',
model: 'strix',
series: '3070',
url:
'https://www.coolmod.com/asus-rog-strix-geforce-rtx-3070-gaming-8gb-gddr6-tarjeta-grafica-precio'
},
{
brand: 'gigabyte',
model: 'eagle',
series: '3070',
url:
'https://www.coolmod.com/gigabyte-geforce-rtx-3070-eagle-8gb-gddr6-tarjeta-grafica-precio'
},
{
brand: 'gigabyte',
model: 'aorus master',
series: '3070',
url:
'https://www.coolmod.com/gigabyte-aorus-geforce-rtx-3070-master-8gb-gddr6-tarjeta-grafica-precio'
},
{
brand: 'pny',
model: 'xlr8 revel',
series: '3070',
url:
'https://www.coolmod.com/pny-geforce-rtx-3070-xlr8-gaming-epic-x-rgb-8gb-gddr6-tarjeta-grafica-precio'
},
{
brand: 'zotac',
model: 'twin edge',
series: '3070',
url:
'https://www.coolmod.com/zotac-gaming-geforce-rtx-3070-twin-edge-8gb-gddr6-tarjeta-grafica-precio'
},
{
brand: 'kfa2',
model: 'sg oc',
series: '3070',
url:
'https://www.coolmod.com/kfa2-geforce-rtx-3070-sg-1-click-oc-8gb-gddr6-tarjeta-grafica-precio'
}
],
name: 'coolmod'
};
+38
View File
@@ -0,0 +1,38 @@
import {Store} from './store';
export const Corsair: Store = {
labels: {
inStock: {
container: '.add_to_cart_form',
text: ['add to cart']
},
maxPrice: {
container: '.product-price',
euroFormat: false
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url:
'https://www.corsair.com/us/en/Categories/Products/Power-Supply-Units/Power-Supply-Units-Advanced/SF-Series/p/CP-9020181-NA'
},
{
brand: 'corsair',
model: '750 platinum',
series: 'sf',
url:
'https://www.corsair.com/us/en/Categories/Products/Power-Supply-Units/Power-Supply-Units-Advanced/SF-Series/p/CP-9020186-NA'
},
{
brand: 'corsair',
model: '600 platinum',
series: 'sf',
url:
'https://www.corsair.com/us/en/Categories/Products/Power-Supply-Units/Power-Supply-Units-Advanced/SF-Series/p/CP-9020182-NA'
}
],
name: 'corsair'
};
+49 -3
View File
@@ -21,7 +21,36 @@ 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'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-5-5600x-processor-10216691-pdt.html'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-7-5800x-processor-10216690-pdt.html'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-9-5900x-processor-10216689-pdt.html'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.currys.co.uk/gbuk/computing-accessories/components-upgrades/processors/amd-ryzen-9-5950x-processor-10216688-pdt.html'
}
],
linksBuilder: {
@@ -32,13 +61,30 @@ export const Currys: Store = {
urlSelector: 'a[href]'
}),
urls: [
{
series: '3060ti',
url:
'https://www.currys.co.uk/gbuk/rtx-3060-ti/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313952/xx-criteria.html'
},
{
series: '3070',
url:
'https://www.currys.co.uk/gbuk/rtx-3070/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313849/xx-criteria.html'
},
{
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'
},
{
series: '3060ti',
url:
'https://www.currys.co.uk/gbuk/rtx-3060-ti/components-upgrades/graphics-cards/324_3091_30343_xx_ba00013562-bv00313952/xx-criteria.html'
}
]
},
+26 -2
View File
@@ -24,13 +24,13 @@ export const Cyberport: Store = {
},
{
brand: 'asus',
model: 'rog strix',
model: 'strix',
series: '3080',
url: 'https://www.cyberport.de?DEEP=2E07-51S'
},
{
brand: 'asus',
model: 'rog strix oc',
model: 'strix oc',
series: '3080',
url: 'https://www.cyberport.de?DEEP=2E07-51T'
},
@@ -93,6 +93,30 @@ export const Cyberport: Store = {
model: 'trinity oc',
series: '3080',
url: 'https://www.cyberport.de?DEEP=2E13-1H7'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.cyberport.de?DEEP=2001-71p'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.cyberport.de/?DEEP=2001-71n'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.cyberport.de?DEEP=2001-71m'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.cyberport.de?DEEP=2001-71l'
}
],
name: 'cyberport'
+69 -4
View File
@@ -21,7 +21,49 @@ 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',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.ebuyer.com/1125329-sony-playstation-5-console-cfi-1015a'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url:
'https://www.ebuyer.com/1125332-sony-playstation-5-digital-edition-cfi-1015b'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url:
'https://www.ebuyer.com/1126988-amd-ryzen-5-5600x-am4-processor-100-100000065box'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url:
'https://www.ebuyer.com/1126987-amd-ryzen-7-5800x-am4-processor-100-100000063wof'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url:
'https://www.ebuyer.com/1126986-amd-ryzen-9-5900x-am4-processor-100-100000061wof'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url:
'https://www.ebuyer.com/1126985-amd-ryzen-9-5950x-am4-processor-100-100000059wof'
}
],
linksBuilder: {
@@ -32,17 +74,40 @@ export const Ebuyer: Store = {
urlSelector: 'a[href]'
}),
urls: [
{
series: 'rx6800',
url:
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-AMD/subcat/AMD-RX-6800'
},
{
series: 'rx6800xt',
url:
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-AMD/subcat/AMD-RX-6800-XT'
},
{
series: '3060ti',
url:
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3060-Ti'
},
{
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'
},
{
series: '3060ti',
url:
'https://www.ebuyer.com/store/Components/cat/Graphics-Cards-Nvidia/subcat/GeForce-RTX-3060-Ti'
}
]
},
+69
View File
@@ -0,0 +1,69 @@
import {Store} from './store';
export const Elcorteingles: Store = {
backoffStatusCodes: [403, 429, 503],
labels: {
// Captcha: {
// container: 'body',
// text: [
// 'geben sie die unten angezeigten zeichen ein',
// 'geben sie die zeichen unten ein'
// ]
// },
inStock: [
{
container: '.product_detail-purchase.mb-2.c12 .js-add-cart-text',
text: ['a la cesta']
}
],
maxPrice: {
container: '.product_detail-buy-price-container .price._big',
euroFormat: true
},
outOfStock: [
{
container:
'.c12.mt-2.product_detail-add_to_cart.one_click_enabled .c12.button._normal.js-buy-button._sold_out.view-page._disabled',
text: ['Agotado']
},
{
container:
'.product_detail-purchase.mb-2.c12 .c12.button._normal.js-buy-button._sold_out.view-page._disabled',
text: ['No disponible']
}
]
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.elcorteingles.es/moda/A26324406/'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.elcorteingles.es/videojuegos/A37046604'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.elcorteingles.es/videojuegos/A37046605'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url: 'https://www.elcorteingles.es/videojuegos/A37047078'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.elcorteingles.es/videojuegos/A37047080'
}
],
name: 'elcorteingles'
};
+77
View File
@@ -0,0 +1,77 @@
import {Store} from './store';
export const Eprice: Store = {
labels: {
inStock: {
container: '.form_aggiungi_articolo',
text: ['AGGIUNGI AL CARRELLO']
},
maxPrice: {
container: '#PrezzoClasic span[class*="big"]',
euroFormat: true
}
},
links: [
{
brand: 'msi',
model: 'ventus 3x oc',
series: '3070',
url: 'https://www.eprice.it/schede-video-MSI/d-14039974'
},
{
brand: 'asus',
model: 'dual',
series: '3070',
url: 'https://www.eprice.it/schede-video-ASUS/d-14042082'
},
{
brand: 'asus',
model: 'strix',
series: '3070',
url: 'https://www.eprice.it/schede-video-ASUS/d-14039878'
},
{
brand: 'asus',
model: 'tuf',
series: '3070',
url: 'https://www.eprice.it/schede-video-ASUS/d-14039876'
},
{
brand: 'msi',
model: 'gaming',
series: '3070',
url: 'https://www.eprice.it/schede-video-MSI/d-14039972'
},
{
brand: 'msi',
model: 'ventus 3x oc',
series: '3070',
url: 'https://www.eprice.it/schede-video-MSI/d-14039974'
},
{
brand: 'msi',
model: 'ventus 2x oc',
series: '3070',
url: 'https://www.eprice.it/schede-video-MSI/d-14039973'
},
{
brand: 'zotac',
model: 'gaming',
series: '3070',
url: 'https://www.eprice.it/schede-video-ZOTAC/d-13979806'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.eprice.it/playstation-5-SONY/d-13981612'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.eprice.it/playstation-5-SONY/d-13981613'
}
],
name: 'eprice'
};
+60
View File
@@ -0,0 +1,60 @@
import {Store} from './store';
export const EuronicsDE: Store = {
labels: {
inStock: {
container: '.buy-btn--cart-text',
text: ['Warenkorb']
},
maxPrice: {
container: '.price--content',
euroFormat: true
},
outOfStock: {
container:
'.product--buybox .alert.is--error.is--rounded .alert--content',
text: [
'Artikel steht derzeit nicht zur Verfügung',
'Morgen im Laufe des Morgens und nur online unter'
]
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url:
'https://www.euronics.de/telefon-und-navigation/festnetz/schnurlose-telefone/kx-tg6721gb-schnurlostelefon-mit-anrufbeantworter-schwarz-4051168442801'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url:
'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/xbox-series-x/spielekonsole/xbox-series-s-512gb-konsole-4061856838076'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url:
'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/xbox-series-x/spielekonsole/xbox-series-x-1tb-konsole-4061856838045'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url:
'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/playstation-5/spielekonsole/playstation-5-digital-edition-konsole-4061856837833'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url:
'https://www.euronics.de/spiele-und-konsolen-film-und-musik/spiele-und-konsolen/playstation-5/spielekonsole/playstation-5-konsole-4061856837826'
}
],
name: 'euronics-de'
};
+41
View File
@@ -0,0 +1,41 @@
import {Store} from './store';
export const Euronics: Store = {
labels: {
inStock: {
container: '.purchaseButtonsWidth',
text: ['Aggiungi al carrello']
}
},
links: [
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url:
'https://www.euronics.it/console/sony-computer/playstation-5/eProd202008906'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url:
'https://www.euronics.it/console/sony-computer/playstation-5-digital-edition/eProd202008907'
},
{
brand: 'microsoft',
model: 'xbox series x',
series: 'xboxsx',
url:
'https://www.euronics.it/console/microsoft/xbox-series-x-1tb-it-italy-sxto/eProd202008981'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url:
'https://www.euronics.it/console/microsoft/xbox-series-s-512gb-it-italy-ltsn/eProd202008982'
}
],
name: 'euronics'
};
+56
View File
@@ -0,0 +1,56 @@
import {Store} from './store';
export const Expert: Store = {
backoffStatusCodes: [403, 429, 503],
labels: {
inStock: [
{
container: 'span.widget-ArticleStatus-buttonText',
text: ['In den Warenkorb']
}
],
maxPrice: {
container: '.widget-Container-subContent .widget-ArticlePrice-price',
euroFormat: false
},
outOfStock: [
{
container:
'span[style="font-size: 14pt;"] > span[style="color: #ff5e19;"]',
text: ['Das von Ihnen ausgewählte Produkt ist ausverkauft']
},
{
container: 'span.widget-ArticleStatus-statusPointText',
text: ['Artikel ist derzeit nicht verfügbar']
}
]
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.expert.de/shop/11364114744-ps4-pro-1tb-jet-black.html'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.expert.de/shop/11364129744-playstation-r-5.html'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url:
'https://www.expert.de/shop/11364133744-playstation-r-5-digital-edition.html'
},
{
brand: 'microsoft',
model: 'xbox series s',
series: 'xboxss',
url: 'https://www.expert.de/shop/11350018530-xbox-series-s.html'
}
],
name: 'expert'
};
+47
View File
@@ -0,0 +1,47 @@
import {Store} from './store';
export const Galaxus: Store = {
labels: {
inStock: {
container: '#addToCartButton:enabled',
text: ['In den Warenkorb']
},
maxPrice: {
container: '.productDetail .ZZa5',
euroFormat: true
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url: 'https://www.galaxus.de/de/product/11156643'
},
{
brand: 'amd',
model: '5600x',
series: 'ryzen5600',
url: 'https://www.galaxus.de/de/product/13987919'
},
{
brand: 'amd',
model: '5800x',
series: 'ryzen5800',
url: 'https://www.galaxus.de/de/product/13987918'
},
{
brand: 'amd',
model: '5900x',
series: 'ryzen5900',
url: 'https://www.galaxus.de/de/product/13987917'
},
{
brand: 'amd',
model: '5950x',
series: 'ryzen5950',
url: 'https://www.galaxus.de/de/product/13987916'
}
],
name: 'galaxus'
};
+40
View File
@@ -0,0 +1,40 @@
import {Store} from './store';
export const Game: Store = {
labels: {
inStock: {
container: '.buyingOptions',
text: ['Pre-order Now', 'Buy New']
},
maxPrice: {
container: '.buyingOptions .btnPrice',
euroFormat: false
},
outOfStock: {
container: '.buyingOptions',
text: ['out of stock']
}
},
links: [
{
brand: 'test:brand',
model: 'test:model',
series: 'test:series',
url:
'https://www.game.co.uk/en/ea-sports-fifa-21-500gb-ps4-bundle-2832947'
},
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.game.co.uk/en/playstation-5-console-2826338'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.game.co.uk/en/playstation-5-digital-edition-2826341'
}
],
name: 'game'
};
+40
View File
@@ -0,0 +1,40 @@
import {Store} from './store';
export const GamestopDE: Store = {
labels: {
inStock: [
{
container: '#btnAddToCart',
text: ['In den Warenkorb']
},
{
container: '#btnAddToCart',
text: ['Vorbestellen']
}
],
maxPrice: {
container: '.buySection .prodPriceCont',
euroFormat: true
},
outOfStock: {
container: '.megaButton',
text: ['Nicht verfügbar']
}
},
links: [
{
brand: 'sony',
model: 'ps5 console',
series: 'sonyps5c',
url: 'https://www.gamestop.de/PS5/Games/58665'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
url: 'https://www.gamestop.de/PS5/Games/60315'
}
],
name: 'gamestop-de',
successStatusCodes: [[0, 399], 404]
};
+42 -6
View File
@@ -2,10 +2,16 @@ import {Store} from './store';
export const Gamestop: Store = {
labels: {
inStock: {
container: '.add-to-cart',
text: ['add to cart']
},
inStock: [
{
container: '.add-to-cart',
text: ['add to cart']
},
{
container: '.add-to-cart',
text: ['Pre-Order']
}
],
maxPrice: {
container: '.primary-details-row .actual-price',
euroFormat: false
@@ -20,13 +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'
},
{
brand: 'sony',
model: 'ps5 digital',
series: 'sonyps5de',
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'
},
{
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'
}
],
name: 'gamestop',
+8 -2
View File
@@ -10,7 +10,11 @@ type Backoff = {
const stores: Record<string, Backoff> = {};
export async function processBackoffDelay(store: Store, link: Link, statusCode: number): Promise<number> {
export async function processBackoffDelay(
store: Store,
link: Link,
statusCode: number
): Promise<number> {
/**
* We treat statusCode 0 as successful as some of the puppeteer plugins
* 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);
+24 -21
View File
@@ -1,9 +1,9 @@
import {Link, Series} from '../store';
import {Link, Model, Series} from '../store';
import {logger} from '../../../logger';
export interface Card {
brand: string;
model: string;
model: Model;
}
interface LinksBuilderOptions {
@@ -24,13 +24,10 @@ export function getProductLinksBuilder(options: LinksBuilderOptions) {
for (let i = 0; i < productElements.length; i++) {
const productElement = productElements.eq(i);
const titleElement = productElement.find(options.titleSelector).first();
let title: string;
if (options.titleAttribute) {
title = titleElement.attr()?.[options.titleAttribute];
} else {
title = titleElement.text()?.replace(/\n/g, ' ').trim();
}
const title = options.titleAttribute
? titleElement.attr()?.[options.titleAttribute]
: titleElement.text()?.replace(/\n/g, ' ').trim();
if (!title) {
continue;
@@ -62,7 +59,7 @@ export function getProductLinksBuilder(options: LinksBuilderOptions) {
url
});
} else {
logger.error(`Failed to parse card: ${title}`);
logger.error(`Failed to parse card: ${title}`, {url});
}
}
@@ -95,7 +92,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,28 +103,31 @@ 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 */
if (isOC) {
model.push('OC');
}
if (model.length === 0) {
return null;
}
if (isOC) model.push('oc');
if (model.length === 0) return null;
return {
brand: brand.toLowerCase(),
model: model.join(' ').toLowerCase().replace(/ gaming\b/g, '').trim()
model: model
.join(' ')
.toLowerCase()
.replace(/ gaming\b/g, '')
.trim() as Model
};
}
+36 -18
View File
@@ -73,11 +73,16 @@ export class NvidiaCart {
cartUrl = await this.addToCartAndGetLocationRedirect(productId);
break;
} catch (error) {
logger.error(`✖ [nvidia] ${name} could not automatically add to cart, attempt ${i + 1} of ${config.nvidia.addToCardAttempts}`, error);
} catch (error: unknown) {
logger.error(
`✖ [nvidia] ${name} could not automatically add to cart, attempt ${
i + 1
} of ${config.nvidia.addToCardAttempts}`,
error
);
logger.debug(error);
lastError = error;
lastError = error as Error;
}
}
/* eslint-enable no-await-in-loop */
@@ -91,9 +96,11 @@ export class NvidiaCart {
logger.info(cartUrl);
await open(cartUrl);
} catch (error) {
logger.error(`✖ [nvidia] ${name} could not automatically add to cart, opening page`);
logger.debug(error);
} catch (error: unknown) {
logger.error(
`✖ [nvidia] ${name} could not automatically add to cart, opening page`,
error
);
cartUrl = this.fallbackCartUrl;
@@ -118,33 +125,46 @@ export class NvidiaCart {
public async refreshSessionToken(): Promise<void> {
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');
}
this.sessionToken = result.session_token;
logger.debug(` [nvidia] session_token=${result.session_token}`);
} catch (error) {
const message: string = typeof error === 'object' ? error.message : error;
} catch (error: unknown) {
const message: string =
typeof error === 'object'
? (error as Error).message
: (error as string);
logger.error(`✖ [nvidia] ${message}`);
}
}
protected async addToCartAndGetLocationRedirect(productId: number): Promise<string> {
protected async addToCartAndGetLocationRedirect(
productId: number
): Promise<string> {
const url = 'https://api-prod.nvidia.com/direct-sales-shop/DR/add-to-cart';
const 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 +173,7 @@ export class NvidiaCart {
},
method: 'POST',
postData: JSON.stringify({
products: [
{productId, quantity: 1}
]
products: [{productId, quantity: 1}]
})
});
});
+27 -7
View File
@@ -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)
});
+95 -9
View File
@@ -5,29 +5,54 @@ import {AlternateNL} from './alternate-nl';
import {Amazon} from './amazon';
import {AmazonCa} from './amazon-ca';
import {AmazonDe} from './amazon-de';
import {AmazonDeWarehouse} from './amazon-de-warehouse';
import {AmazonEs} from './amazon-es';
import {AmazonFr} from './amazon-fr';
import {AmazonIt} from './amazon-it';
import {AmazonNl} from './amazon-nl';
import {AmazonUk} from './amazon-uk';
import {Amd} from './amd';
import {AmdCa} from './amd-ca';
import {AmdDe} from './amd-de';
import {AmdIt} from './amd-it';
import {AntOnline} from './antonline';
import {Argos} from './argos';
import {Aria} from './aria';
import {Arlt} from './arlt';
import {Asus} from './asus';
import {AsusDe} from './asus-de';
import {Awd} from './awd';
import {Azerty} from './azerty';
import {BAndH} from './bandh';
import {BestBuy} from './bestbuy';
import {BestBuyCa} from './bestbuy-ca';
import {Box} from './box';
import {CanadaComputers} from './canadacomputers';
import {Caseking} from './caseking';
import {Ccl} from './ccl';
import {Comet} from './comet';
import {Computeruniverse} from './computeruniverse';
import {Coolblue} from './coolblue';
import {Coolmod} from './coolmod';
import {Corsair} from './corsair';
import {Currys} from './currys';
import {Cyberport} from './cyberport';
import {Ebuyer} from './ebuyer';
import {Elcorteingles} from './elcorteingles';
import {Eprice} from './eprice';
import {Euronics} from './euronics';
import {EuronicsDE} from './euronics-de';
import {Evga} from './evga';
import {EvgaEu} from './evga-eu';
import {Expert} from './expert';
import {Galaxus} from './galaxus';
import {Game} from './game';
import {Gamestop} from './gamestop';
import {GamestopDE} from './gamestop-de';
import {Kabum} from './kabum';
import {Mediamarkt} from './mediamarkt';
import {Medimax} from './medimax';
import {MemoryExpress} from './memoryexpress';
import {MicroCenter} from './microcenter';
import {Mindfactory} from './mindfactory';
import {Newegg} from './newegg';
@@ -37,15 +62,26 @@ import {Novatech} from './novatech';
import {Nvidia} from './nvidia';
import {NvidiaApi} from './nvidia-api';
import {OfficeDepot} from './officedepot';
import {Otto} from './otto';
import {Overclockers} from './overclockers';
import {PCComponentes} from './pccomponentes';
import {PlayStation} from './playstation';
import {Pny} from './pny';
import {ProshopDE} from './proshop-de';
import {ProshopDK} from './proshop-dk';
import {Saturn} from './saturn';
import {Scan} from './scan';
import {SmythsToys} from './smythstoys';
import {Spielegrotte} from './spielegrotte';
import {Store} from './store';
import {Target} from './target';
import {TopAchat} from './topachat';
import {Unieuro} from './unieuro';
import {Very} from './very';
import {VsGamers} from './vsgamers';
import {Walmart} from './walmart';
import {Wipoid} from './wipoid';
import {Xbox} from './xbox';
import {Zotac} from './zotac';
import {logger} from '../../logger';
@@ -56,29 +92,54 @@ export const storeList = new Map([
[Amazon.name, Amazon],
[AmazonCa.name, AmazonCa],
[AmazonDe.name, AmazonDe],
[AmazonDeWarehouse.name, AmazonDeWarehouse],
[AmazonEs.name, AmazonEs],
[AmazonFr.name, AmazonFr],
[AmazonNl.name, AmazonNl],
[AmazonUk.name, AmazonUk],
[AmazonIt.name, AmazonIt],
[Amd.name, Amd],
[AmdCa.name, AmdCa],
[AmdDe.name, AmdDe],
[AmdIt.name, AmdIt],
[AntOnline.name, AntOnline],
[Argos.name, Argos],
[Aria.name, Aria],
[Arlt.name, Arlt],
[Asus.name, Asus],
[AsusDe.name, AsusDe],
[Awd.name, Awd],
[Azerty.name, Azerty],
[BAndH.name, BAndH],
[BestBuy.name, BestBuy],
[BestBuyCa.name, BestBuyCa],
[Box.name, Box],
[Caseking.name, Caseking],
[CanadaComputers.name, CanadaComputers],
[Ccl.name, Ccl],
[Comet.name, Comet],
[Computeruniverse.name, Computeruniverse],
[Coolblue.name, Coolblue],
[Coolmod.name, Coolmod],
[Corsair.name, Corsair],
[Currys.name, Currys],
[Cyberport.name, Cyberport],
[Ebuyer.name, Ebuyer],
[Elcorteingles.name, Elcorteingles],
[Eprice.name, Eprice],
[Euronics.name, Euronics],
[EuronicsDE.name, EuronicsDE],
[Evga.name, Evga],
[EvgaEu.name, EvgaEu],
[Expert.name, Expert],
[Galaxus.name, Galaxus],
[Game.name, Game],
[Gamestop.name, Gamestop],
[GamestopDE.name, GamestopDE],
[Kabum.name, Kabum],
[Mediamarkt.name, Mediamarkt],
[Medimax.name, Medimax],
[MemoryExpress.name, MemoryExpress],
[MicroCenter.name, MicroCenter],
[Mindfactory.name, Mindfactory],
[Newegg.name, Newegg],
@@ -88,14 +149,25 @@ export const storeList = new Map([
[Nvidia.name, Nvidia],
[NvidiaApi.name, NvidiaApi],
[OfficeDepot.name, OfficeDepot],
[Otto.name, Otto],
[Overclockers.name, Overclockers],
[PCComponentes.name, PCComponentes],
[PlayStation.name, PlayStation],
[Pny.name, Pny],
[ProshopDE.name, ProshopDE],
[ProshopDK.name, ProshopDK],
[Saturn.name, Saturn],
[Scan.name, Scan],
[SmythsToys.name, SmythsToys],
[Spielegrotte.name, Spielegrotte],
[Target.name, Target],
[TopAchat.name, TopAchat],
[Unieuro.name, Unieuro],
[Very.name, Very],
[VsGamers.name, VsGamers],
[Walmart.name, Walmart],
[Wipoid.name, Wipoid],
[Xbox.name, Xbox],
[Zotac.name, Zotac]
]);
@@ -104,12 +176,12 @@ const models = new Set();
const series = new Set();
const stores = new Map();
function filterBrandsSeriesModels(stores: Map<string, Store>) {
function filterBrandsSeriesModels() {
brands.clear();
series.clear();
models.clear();
for (const store of stores.values()) {
for (const store of storeList.values()) {
for (const link of store.links) {
brands.add(link.brand);
series.add(link.series);
@@ -128,7 +200,11 @@ function filterBrandsSeriesModels(stores: Map<string, Store>) {
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) {
@@ -136,9 +212,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) {
@@ -150,10 +232,13 @@ function warnIfStoreDeprecated(store: Store) {
switch (store.name) {
case 'nvidia':
case 'nvidia-api':
logger.warn(`${store.name} is deprecated in favor of bestbuy`);
if (config.store.country === 'usa')
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:
}
@@ -170,12 +255,13 @@ export function updateStores() {
stores.set(storeData.name, store);
store.minPageSleep = storeData.minPageSleep;
store.maxPageSleep = storeData.maxPageSleep;
store.proxyList = storeData.proxyList;
} else {
logger.warn(`No store named ${storeData.name}, skipping.`);
}
}
filterBrandsSeriesModels(stores);
filterBrandsSeriesModels();
printConfig();
}

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