Compare commits

..

594 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
github-actions[bot] 0da1621595 chore: release 1.7.0 (#667)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2020-11-03 01:06:48 -05:00
Jacob Williams 5b3e95acdf feat: newegg realtime api (#664)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-03 00:26:05 -05:00
Jef LeCompte 601742cf2c feat: add deprecation notices
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-03 00:11:27 -05:00
Thomas Wolfgruber e62eb72056 chore: add more 3070 cards to media markt and notebooksbilliger, fix false positives on media markt (#665) 2020-11-02 23:44:41 -05:00
Jef LeCompte 6cbe72118e docs: update freenode badge 2020-11-02 17:42:55 -05:00
Jef LeCompte bb3509f99b chore: add freenode chat button 2020-11-02 17:15:53 -05:00
Jef LeCompte 430f3ed220 chore: make COUNTRY lowercase
Fixes #662

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-02 15:27:33 -05:00
Jef LeCompte e00dafe8ff chore: bump dependencies
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-11-02 15:25:54 -05:00
Thomas Wolfgruber 137c0efdf0 chore(proshop-de): add 3070 cards (#659) 2020-11-01 21:52:29 -05:00
Garret Picchioni ffa2fdc700 chore(asus): add 3090 tuf oc (#657) 2020-11-01 21:52:05 -05:00
Andrew Wong a9f452f5a7 chore(newegg-ca): add evga ftw3 3080 and gigabyte vision oc 3080 (#656) 2020-11-01 21:51:34 -05:00
VictorV 1d2a33b1d7 fix(banner): add version to docker image (#649) 2020-10-30 15:42:17 -04:00
Jef LeCompte 493834b526 chore(newegg): add 3070s, include version in banner
Fixes #642

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-30 13:15:21 -04:00
dependabot[bot] 1918fda5a2 chore(deps): bump GoogleCloudPlatform/release-please-action from v2.5.6 to v2.5.7 (#639)
Bumps [GoogleCloudPlatform/release-please-action](https://github.com/GoogleCloudPlatform/release-please-action) from v2.5.6 to v2.5.7.
- [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.5.6...fc61d9d3dfb6339e3790181b6e6099dca3d907d9)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-30 12:37:24 -04:00
dependabot[bot] 7038be2944 chore(deps): bump mqtt from 4.2.3 to 4.2.4 (#640)
Bumps [mqtt](https://github.com/mqttjs/MQTT.js) from 4.2.3 to 4.2.4.
- [Release notes](https://github.com/mqttjs/MQTT.js/releases)
- [Commits](https://github.com/mqttjs/MQTT.js/commits)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-30 11:17:26 -04:00
Jef LeCompte 2fc584bdbd chore(amazon-de): add 3070 cards 2020-10-30 12:50:21 +00:00
Jef LeCompte 191bf8b2ff docs: update faq
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-30 00:33:35 -04:00
Jef LeCompte 3085dbcc7f docs: include help headers
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-30 00:28:47 -04:00
Jef LeCompte 92bb2ef915 docs: more collapsibles
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-30 00:23:32 -04:00
Jef LeCompte 2ec5baa37c docs: remove extra notifications
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-30 00:16:11 -04:00
Jef LeCompte 0fe3db9c99 docs: clean up README
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-30 00:12:43 -04:00
github-actions[bot] 317c987b08 chore: release 1.6.0 (#525)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2020-10-29 23:01:45 -04:00
James Kiefer d7360f71ef fix: update pushbullet import to match package (#637) 2020-10-29 17:00:58 -04:00
Ted Morin ab4f779573 chore(bestbuy-ca): add 3070 founders edition (#634)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-29 16:58:28 -04:00
Jef LeCompte f04c669143 chore: don't build Dockerfile if not necessary
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-29 16:57:30 -04:00
Jef LeCompte 72d66ab127 chore: bump dependencies
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-29 16:52:37 -04:00
dependabot[bot] cc114afd15 chore(deps-dev): bump webpack from 5.3.0 to 5.3.2 (#636)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-29 16:51:23 -04:00
dependabot[bot] 7c16f85abc chore(deps-dev): bump @types/node from 14.14.5 to 14.14.6 (#626)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-29 16:51:14 -04:00
Jef LeCompte 8dd10424b3 chore: change dependencies
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-29 16:29:57 -04:00
Jef LeCompte 13edbf311e refactor: easier comparables, fix audits (#614) 2020-10-29 16:27:09 -04:00
AchillesPDX e5b0d7983b chore(bestbuy): add 3070 models (#630) 2020-10-29 16:26:44 -04:00
AchillesPDX 3976b21907 chore(evga): add 3070 cards (#631) 2020-10-29 13:10:33 -04:00
KillahInstinct1 87f1c0191d chore: add 3070 cards and correct models on 3080 (#627)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-29 10:57:30 -04:00
PaddseL 9e0f767a1d chore(store): add several 3070 cards to several german stores (#628)
Co-authored-by: fubu2k <48277447+fubu2k@users.noreply.github.com>
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-29 10:57:07 -04:00
serg06 2353ee2ef8 chore(store): add 3070 to nvidia, best-buy-ca, newegg-ca (#622) 2020-10-29 10:54:12 -04:00
dependabot[bot] 6b9ecaeb3d chore(deps): bump puppeteer from 5.4.0 to 5.4.1 (#617)
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 5.4.0 to 5.4.1.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Commits](https://github.com/puppeteer/puppeteer/compare/v5.4.0...v5.4.1)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-28 09:56:18 -04:00
dependabot[bot] 1d6beb8235 chore(deps-dev): bump webpack from 5.2.0 to 5.3.0 (#616)
Bumps [webpack](https://github.com/webpack/webpack) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.2.0...v5.3.0)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-28 09:56:06 -04:00
dependabot[bot] bde6a25063 chore(deps): bump mqtt from 4.2.1 to 4.2.3 (#615)
Bumps [mqtt](https://github.com/mqttjs/MQTT.js) from 4.2.1 to 4.2.3.
- [Release notes](https://github.com/mqttjs/MQTT.js/releases)
- [Commits](https://github.com/mqttjs/MQTT.js/compare/v4.2.1...v4.2.3)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-28 09:55:48 -04:00
elvador 273d058414 feat: add series to Discord webhook (#618) 2020-10-28 09:45:46 -04:00
Jef LeCompte 8548c07e3b docs: update pr template 2020-10-28 01:00:11 -04:00
Jef LeCompte fa90afc42c chore(store): add 3070 to best buy (#612) 2020-10-27 12:39:41 -04:00
dependabot[bot] ceb049b317 chore(deps-dev): bump @types/node from 14.14.3 to 14.14.5 (#609)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.3 to 14.14.5.
- [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-10-27 10:19:13 -04:00
dependabot[bot] 2213c9e140 chore(deps-dev): bump typescript from 4.0.3 to 4.0.5 (#610)
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.0.3 to 4.0.5.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.0.3...v4.0.5)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-27 10:19:04 -04:00
designgears 3b5b2b1182 docs: add origin country to non-US stores (#608) 2020-10-26 11:49:49 -04:00
Mark Dietzer 12dd49c387 chore(web): prettify (#607) 2020-10-26 11:32:38 -04:00
Jef LeCompte 0318f33234 chore: remove discord 2020-10-26 11:31:09 -04:00
Álvaro Baquedano Simón c1dda4f987 feat(store): support for coolmod (#605)
Co-authored-by: Álvaro Baquedano Simon <alvarobasi@hotmail.com>
Co-authored-by: Álvaro Baquedano Simón <alvarobasi@laposte.net>
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-26 11:21:09 -04:00
Mark Dietzer 61a23fe978 fix: update new additions with web panel and sleep operations (#606) 2020-10-26 11:20:27 -04:00
dependabot[bot] 2f57632479 chore(deps): bump dorny/paths-filter from v2.5.0 to v2.5.1 (#602)
Bumps [dorny/paths-filter](https://github.com/dorny/paths-filter) from v2.5.0 to v2.5.1.
- [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.0...b37d4e9e86f9ae7facbf4a3cc58d98e7139cfc31)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-26 11:16:32 -04:00
dependabot[bot] 17555ece11 chore(deps-dev): bump @types/node from 14.14.2 to 14.14.3 (#603)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.2 to 14.14.3.
- [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-10-26 11:16:21 -04:00
dependabot[bot] 16adc3efda chore(deps): bump puppeteer from 5.3.1 to 5.4.0 (#604)
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 5.3.1 to 5.4.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Commits](https://github.com/puppeteer/puppeteer/compare/v5.3.1...v5.4.0)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-26 11:16:10 -04:00
Jef LeCompte 3c22a458b2 chore: merge 2020-10-25 09:38:56 -04:00
Jef LeCompte 3c111bd3a8 chore: audit fix
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-25 09:38:34 -04:00
dependabot[bot] 0a633ddcfb chore(deps): bump twitch-chat-client from 4.2.6 to 4.2.7 (#581)
Bumps [twitch-chat-client](https://github.com/d-fischer/twitch/tree/HEAD/packages/twitch-chat-client) from 4.2.6 to 4.2.7.
- [Release notes](https://github.com/d-fischer/twitch/releases)
- [Commits](https://github.com/d-fischer/twitch/commits/v4.2.7/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-10-25 09:37:22 -04:00
dependabot[bot] 0b53cb5e51 chore(deps): bump node from 14.14.0-alpine3.12 to 15.0.1-alpine3.12 (#599)
Bumps node from 14.14.0-alpine3.12 to 15.0.1-alpine3.12.

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-25 09:37:11 -04:00
dependabot[bot] 5cfb1a62d7 chore(deps): bump amannn/action-semantic-pull-request from v2.0.0 to v2.1.0 (#567)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-25 09:36:59 -04:00
Mark Dietzer 373d1a9738 feat(api): add rudimentary web control panel (#183) 2020-10-25 09:36:02 -04:00
dependabot[bot] 83f82d66d9 chore(deps-dev): bump nodemon from 2.0.5 to 2.0.6 (#548)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-25 00:03:43 -04:00
dependabot[bot] 5a3bb437aa chore(deps-dev): bump webpack from 5.1.3 to 5.2.0 (#583)
Bumps [webpack](https://github.com/webpack/webpack) from 5.1.3 to 5.2.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.1.3...v5.2.0)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-25 00:02:24 -04:00
dependabot[bot] e8b96eb649 chore(deps): bump twitch from 4.2.6 to 4.2.7 (#582)
Bumps [twitch](https://github.com/d-fischer/twitch/tree/HEAD/packages/twitch) from 4.2.6 to 4.2.7.
- [Release notes](https://github.com/d-fischer/twitch/releases)
- [Commits](https://github.com/d-fischer/twitch/commits/v4.2.7/packages/twitch)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-25 00:02:13 -04:00
SesioN a42418f814 feat: allow filtering per model by a specific series (#595)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-25 00:01:55 -04:00
PaddseL 699de573f6 feat(store): add new cards to german web shops (#597)
Co-authored-by: fubu2k <48277447+fubu2k@users.noreply.github.com>
2020-10-24 23:53:14 -04:00
SesioN a2af30b703 fix: page sleep (#586)
Fixes #594 

Ref: #576
2020-10-24 08:15:00 -04:00
Dennis Markmann 2e5db7af04 feat(store): add founders editions to notebooksbilliger.de (#593) 2020-10-24 08:13:09 -04:00
xninjax f9c4c25874 feat(store): add max price containers to multiple stores (#579) 2020-10-23 08:06:55 -04:00
SesioN 503d76f3c7 feat: optional per store min and max page sleep time (#576)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-22 23:03:58 -04:00
Jingsi Zhu 11ee0bf1a3 feat: Add PagerDuty Integration (#565)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-22 20:48:37 -04:00
Jack Webb ac37f87793 docs: readme install instructions typo (#574) 2020-10-22 18:13:52 -04:00
rust84 4847725d3a feat(store): add ttl for scan (#555)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-22 18:13:10 -04:00
fatmoo5 f6db3489b8 fix: asus store links (#573) 2020-10-22 15:31:38 -04:00
dependabot[bot] 9de2307c64 chore(deps): bump twitch-auth from 4.2.6 to 4.2.7 (#566)
Bumps [twitch-auth](https://github.com/d-fischer/twitch/tree/HEAD/packages/twitch-auth) from 4.2.6 to 4.2.7.
- [Release notes](https://github.com/d-fischer/twitch/releases)
- [Commits](https://github.com/d-fischer/twitch/commits/v4.2.7/packages/twitch-auth)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-22 09:12:11 -04:00
dependabot[bot] 6203a1c18b chore(deps-dev): bump @types/node from 14.11.10 to 14.14.2 (#568)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-22 08:58:44 -04:00
Álvaro Baquedano Simón 699e77d960 fix(store): pccomponents model normalization (#563)
Co-authored-by: Álvaro Baquedano Simon <alvarobasi@hotmail.com>
2020-10-22 08:26:44 -04:00
dependabot[bot] 1f095ce6ac chore(deps): bump @slack/web-api from 5.12.0 to 5.13.0 (#569)
Bumps [@slack/web-api](https://github.com/slackapi/node-slack-sdk) from 5.12.0 to 5.13.0.
- [Release notes](https://github.com/slackapi/node-slack-sdk/releases)
- [Commits](https://github.com/slackapi/node-slack-sdk/compare/@slack/web-api@5.12.0...@slack/web-api@5.13.0)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-22 08:14:44 -04:00
PaddseL 675f13abb8 feat: twitch chat notification, multiple telegram chat ids and german web shop overhaul (#528) 2020-10-21 09:51:05 -04:00
DisguisedOtter 58416e1994 feat(store): support for azerty (#557) 2020-10-20 19:32:04 -04:00
Álvaro Baquedano Simón 062201f092 feat(store): Add PCComponentes and Amazon-ES Stores. (#558)
Co-authored-by: Álvaro Baquedano <alvarobasi@hotmail.com>
Co-authored-by: Álvaro Baquedano Simón <alvarobasi@laposte.net>
2020-10-20 19:31:22 -04:00
DisguisedOtter aca6523333 feat: add alternate.nl support (#552) 2020-10-20 14:04:59 -04:00
SesioN 10a81dcbd5 feat: add support for multiple browser user agents (#547)
Co-authored-by: Pawel Grzesik <p.grzesik@francotyp.com>
2020-10-20 14:03:38 -04:00
xninjax 68ff5bf836 feat: mqtt alerts (#538) 2020-10-20 12:16:33 -04:00
Kazan 4fefe22a90 fix: update gigabyte model vision oc (#550)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-20 12:15:32 -04:00
GRINSPANKER13 2b6457e840 feat: add incognito mode (#534)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-20 12:07:08 -04:00
Farsab Nazir Butt 5ea7cc4ca4 fix: add support for stores label text to have uppercase letters (#526) 2020-10-19 11:19:16 -04:00
dependabot[bot] 542b92301a chore(deps-dev): bump webpack from 5.1.0 to 5.1.3 (#542)
Bumps [webpack](https://github.com/webpack/webpack) from 5.1.0 to 5.1.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.1.0...v5.1.3)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-19 11:15:54 -04:00
dependabot[bot] 0c8771e3eb chore(deps): bump dorny/paths-filter from v2 to v2.5.0 (#541)
Bumps [dorny/paths-filter](https://github.com/dorny/paths-filter) from v2 to v2.5.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...189a1963db079e08671341321aabb27677fb0ab6)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-19 11:15:47 -04:00
dependabot[bot] c82b986aab chore(deps-dev): bump @types/node from 14.11.8 to 14.11.10 (#540)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.11.8 to 14.11.10.
- [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-10-19 11:15:39 -04:00
dependabot[bot] 92c5a02f30 chore(deps): bump node from 14.13.1-alpine3.12 to 14.14.0-alpine3.12 (#539)
Bumps node from 14.13.1-alpine3.12 to 14.14.0-alpine3.12.

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-19 11:15:27 -04:00
dependabot[bot] d575b8b96a chore(deps-dev): bump nodemon from 2.0.4 to 2.0.5 (#518)
Bumps [nodemon](https://github.com/remy/nodemon) from 2.0.4 to 2.0.5.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v2.0.4...v2.0.5)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-15 08:52:47 -04:00
dependabot[bot] 8e7b83a55a chore(deps): bump nodemailer from 6.4.13 to 6.4.14 (#519)
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 6.4.13 to 6.4.14.
- [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.13...v6.4.14)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-15 08:52:35 -04:00
dependabot[bot] 3b815a9f24 chore(deps): bump twilio from 3.49.4 to 3.50.0 (#523)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-15 08:52:07 -04:00
dependabot[bot] 0263bf8b12 chore(deps-dev): bump webpack from 5.0.0 to 5.1.0 (#520)
Bumps [webpack](https://github.com/webpack/webpack) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.0.0...v5.1.0)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-15 08:51:56 -04:00
dependabot[bot] 199fac45ea chore(deps): bump GoogleCloudPlatform/release-please-action from v2.5.5 to v2.5.6 (#522)
Bumps [GoogleCloudPlatform/release-please-action](https://github.com/GoogleCloudPlatform/release-please-action) from v2.5.5 to v2.5.6.
- [Release notes](https://github.com/GoogleCloudPlatform/release-please-action/releases)
- [Changelog](https://github.com/GoogleCloudPlatform/release-please-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/GoogleCloudPlatform/release-please-action/compare/v2.5.5...0a415f5e4668f50bf4df66a66627839b4a96b377)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-15 08:51:42 -04:00
Chloe Isabelle dc2fcf5ab4 feat: add proshop-dk (#524) 2020-10-15 08:50:27 -04:00
Chloe Isabelle 1aaa102c06 feat: add caseking and proshop-de store (#521) 2020-10-14 11:32:30 -04:00
xninjax 32f114b235 fix: max price getter updated to match .env (#516)
Fixes #514, resolves #510
2020-10-13 17:30:26 -04:00
Jef LeCompte 053b22100b chore: update versioning
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-13 13:38:04 -04:00
fubu2k b319bc1080 chore: more links for mediamarket (#493)
updated with some 3090 cards
2020-10-13 13:28:50 -04:00
fubu2k e0735903b7 fix: typo in maxPrice for 3090 (#496) 2020-10-13 13:27:24 -04:00
Feiko Wielsma 586029c92a fix: dutch stores components (#513)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
Co-authored-by: Feiko Wielsma <f.wielsma@opnt.nl>
2020-10-13 13:20:25 -04:00
Steffen 1f89945c57 feat: clear cookies and cache (#515)
Fixes #417
2020-10-13 13:19:48 -04:00
dependabot[bot] f24f56549e chore(deps-dev): bump webpack from 4.44.2 to 5.0.0 (#503)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-12 12:29:54 -04:00
xninjax 207bc411ed feat(store): add rog-strix-3080 to newegg-ca (#489) 2020-10-12 12:29:17 -04:00
dependabot[bot] 1efde6b783 chore(deps): bump GoogleCloudPlatform/release-please-action from v2.5.3 to v2.5.5 (#502)
Bumps [GoogleCloudPlatform/release-please-action](https://github.com/GoogleCloudPlatform/release-please-action) from v2.5.3 to v2.5.5.
- [Release notes](https://github.com/GoogleCloudPlatform/release-please-action/releases)
- [Changelog](https://github.com/GoogleCloudPlatform/release-please-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/GoogleCloudPlatform/release-please-action/compare/v2.5.3...7332b997483bf339ae2aadcfdaa0e0f569ed36d5)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-12 12:05:41 -04:00
dependabot[bot] 51d8b5290a chore(deps-dev): bump @types/node from 14.11.7 to 14.11.8 (#504)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.11.7 to 14.11.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-10-12 12:03:04 -04:00
Raymond Ortiz 2b0eab656d feat: allow multiple microcenter locations (#487) 2020-10-12 00:02:19 -04:00
admon84 cbc3b0b025 fix: bestbuy label container selector precision (#491) 2020-10-11 23:58:27 -04:00
admon84 81daa7c559 fix: updating amazon test model card to an in stock product (#492) 2020-10-11 23:57:40 -04:00
Jef LeCompte 97357c19b8 chore: bump node to 14.13.1
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-11 23:18:57 -04:00
er1992 f7ed86506b fix: trim strings from comma-separated values (#472)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-10 12:12:23 -04:00
Andrew Mackrodt 0cdf6657bf chore: add typescript definitions for custom types (#486) 2020-10-10 12:06:38 -04:00
Feiko Wielsma 5c61333df0 feat: add coolblue store (#482)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
Co-authored-by: Feiko Wielsma <f.wielsma@opnt.nl>
2020-10-10 11:59:03 -04:00
mckay17 e5909c532d feat: add rog strix oc to amazon-de (#471) 2020-10-09 18:28:40 -04:00
Jef LeCompte a04a0f34af docs: fix devin to denver
Part of #442

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-09 17:23:15 -05:00
Jef LeCompte 79b9bfe9a8 revert: reduce false-positive during ci/cd
Refs: 4192b71
2020-10-09 16:54:21 -05:00
Jef LeCompte 4192b7108e chore(pipeline): reduce false-positive during ci/cd
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-09 16:51:57 -05:00
Jef LeCompte e7592db963 chore: add missing env
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-09 16:48:10 -05:00
VictorV c857985a6d feat(docker): add docker and publish images to ghcr (#411)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-09 17:42:29 -04:00
dependabot[bot] e1cae3ed71 chore(deps): bump GoogleCloudPlatform/release-please-action from v2.4.2 to v2.5.3 (#480)
Bumps [GoogleCloudPlatform/release-please-action](https://github.com/GoogleCloudPlatform/release-please-action) from v2.4.2 to v2.5.3.
- [Release notes](https://github.com/GoogleCloudPlatform/release-please-action/releases)
- [Changelog](https://github.com/GoogleCloudPlatform/release-please-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/GoogleCloudPlatform/release-please-action/compare/v2.4.2...c05cf8bb4fd8bcaa85121b7b7a024e57d97072b4)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-09 16:17:46 -04:00
dependabot[bot] 92696d4654 chore(deps-dev): bump @types/node from 14.11.5 to 14.11.7 (#481)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.11.5 to 14.11.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-10-09 16:17:18 -04:00
Jef LeCompte ed970fc397 fix: cyclical dependencies
Fixes #468

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-09 13:29:41 -05:00
Jef LeCompte eac05c610d docs: add bandwidth note
Resolves #479
2020-10-09 13:59:07 -04:00
dependabot[bot] 6b9d8cd006 chore(deps-dev): bump @types/node from 14.11.2 to 14.11.5 (#460)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.11.2 to 14.11.5.
- [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-10-06 22:41:09 -04:00
Jef LeCompte b43f352707 chore: reduce complexity of min/max
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-06 22:39:22 -04:00
Jef LeCompte 812093455e chore: add pr title lint
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-06 22:34:55 -04:00
xninjax 7274ead169 bugfix: env min/max input validation (#465) 2020-10-06 22:21:21 -04:00
Jef LeCompte 86bef5a617 chore: refactor max price for series
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-06 22:03:19 -04:00
jastheace 8adc07a03e feat: max price per series (#451) 2020-10-06 21:51:32 -04:00
adrian549092 160ae37d7b feat: add support for specifying smtp server (#458)
Co-authored-by: Adrian Martin <adrian.martin@nbcuni.com>
2020-10-06 21:46:32 -04:00
Georges Sabbagh 332b4a8246 feat: add link series to error message for better context (#265) 2020-10-06 21:45:03 -04:00
tconex 85a07dc0dc feat: add german stores (#462)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-06 21:43:48 -04:00
Andrew Mackrodt b9b6b55c29 feat: add uk stores (#455) 2020-10-06 11:35:54 -04:00
dependabot[bot] ee8cb12156 chore(deps): bump nodemailer from 6.4.12 to 6.4.13 (#453)
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 6.4.12 to 6.4.13.
- [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.12...v6.4.13)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-05 11:40:05 -04:00
Andrew Mackrodt 4157a5d746 chore(store): normalize model names (#444) 2020-10-04 14:44:11 -04:00
Jef LeCompte 4ea417cfc1 docs: note about web with microcenter 2020-10-04 14:40:07 -04:00
undaunt 5109227e88 feat(store): add ftw3 ultra to microcenter (#448) 2020-10-04 14:27:14 -04:00
Jef LeCompte ae6bc86bcb feat: add meta to logger (#437) 2020-10-03 13:20:32 -04:00
Jef LeCompte 8098a31092 chore: refactor config and fix audits (#406) 2020-10-03 13:15:39 -04:00
Logan Saso f006a8595b chore: update nvidia-api test with shield tv (#432) 2020-10-03 13:02:43 -04:00
Jef LeCompte 8ef8109830 docs: fix attgo 2020-10-03 12:32:08 -04:00
Julio Valerio eb9d082d17 feat(notification): add at&t prepaid carrier (#425) 2020-10-03 12:31:39 -04:00
Julio Valerio fd3351c028 docs: add at&t prepaid support (#427) 2020-10-03 12:30:26 -04:00
xninjax b7e5941a95 fix(config): MAX_PRICE quotations (#426) 2020-10-03 12:29:05 -04:00
pntless 9d5272a0a5 chore(store): update aorus master 3080 links (#431) 2020-10-03 12:27:35 -04:00
Josh Eckerman 628cab1b60 fix(store): update inStock and maxPrice for newegg, newegg-ca (#433)
Fixes #400

Co-authored-by: Josh Eckerman <josh.eckerman@gubagoo.com>
2020-10-03 12:26:59 -04:00
PaddseL b4d8733d18 feat: add asus-de store and asus 3080 tuf/oc to amazon-de (#436) 2020-10-03 12:25:28 -04:00
Jef LeCompte 0c810d62e2 chore(store): add 3090 strix amazon
Closes #420
2020-10-02 17:01:25 -04:00
pntless 4085136269 feat(store): add models to bestbuy (#421) 2020-10-02 16:50:36 -04:00
xninjax fd294d2baa feat: max price filtering (#383) 2020-10-02 12:59:06 -04:00
dependabot[bot] 02f9ed5e53 chore(deps): bump GoogleCloudPlatform/release-please-action from v2.4.1 to v2.4.2 (#415)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-02 12:55:25 -04:00
dependabot[bot] 177203a085 chore(deps): bump actions/setup-node from v2.1.1 to v2.1.2 (#416)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from v2.1.1 to v2.1.2.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v2.1.1...c6fd00ceb9747fb23ffdf72987450a2664414867)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-02 12:55:12 -04:00
Jef LeCompte eee6b8183a chore: update issue templates
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-01 13:35:16 -04:00
karmanbadhesha 313d176848 feat(store): add evga 3090 to newegg canada (#396) 2020-10-01 13:23:35 -04:00
pntless fddc0021d3 feat(store): adds aorus master 3080 to newegg (#402) 2020-10-01 13:22:37 -04:00
adolfo bernal 7a981e7456 fix: add status code 429 to bandh backOffStatusCodes (#404) 2020-10-01 13:15:05 -04:00
Jef LeCompte 760d57b113 chore: ignore markdown for cicd 2020-10-01 13:12:59 +00:00
Seán O'Grady 7ce6904887 chore: Add discord url to top menu (#377)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-10-01 09:11:07 -04:00
dependabot[bot] 4b3018345b chore(deps): bump nodemailer from 6.4.11 to 6.4.12 (#399)
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 6.4.11 to 6.4.12.
- [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.11...v6.4.12)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-01 08:09:41 -04:00
dependabot[bot] e27ea63674 chore(deps): bump puppeteer-extra-plugin-stealth from 2.6.1 to 2.6.2 (#398)
Bumps [puppeteer-extra-plugin-stealth](https://github.com/berstend/puppeteer-extra) from 2.6.1 to 2.6.2.
- [Release notes](https://github.com/berstend/puppeteer-extra/releases)
- [Commits](https://github.com/berstend/puppeteer-extra/compare/puppeteer-extra-plugin-stealth@2.6.1...puppeteer-extra-plugin-stealth@2.6.2)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-01 08:09:22 -04:00
Jef LeCompte b8d4f2f83e chore: update .editorconfig
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-30 17:48:14 -04:00
adolfo bernal d3bb507edc fix: gamestop false positives (#395)
Fixed issue where gamestop would generate false positives because the string add to cart was still included even when there was no stock available.  Just added the outOfStock label to look for not available, which is actually displayed on the button.
2020-09-30 16:49:09 -04:00
dependabot[bot] 5a5d03b259 chore(deps): bump twilio from 3.49.3 to 3.49.4 (#375)
Bumps [twilio](https://github.com/twilio/twilio-node) from 3.49.3 to 3.49.4.
- [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.49.3...3.49.4)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-30 14:26:49 -04:00
dependabot[bot] 4db4f1f9d7 chore(deps): bump open from 7.2.1 to 7.3.0 (#387)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-30 14:22:27 -04:00
Jef LeCompte f980a0bba0 docs: list cleanups, unnecessary bolding, etc
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-30 12:04:47 -04:00
Jef LeCompte 9e7976df57 fix(store): gamestop label.inStock 2020-09-30 11:23:39 -04:00
Grant 7148451b66 feat(store): add gamestop (#390) 2020-09-30 11:14:42 -04:00
Jef LeCompte fdd92f9d65 docs: add CONTRIBUTING.md and add screenshot 2020-09-30 13:23:44 +00:00
Xyrec 589fbbcd34 fix: amazon.{nl,de} test urls (#345) 2020-09-30 00:44:01 -04:00
Andrew Mackrodt f1d22d1684 fix: remove 3090 drid for DK/FI regions (#361) 2020-09-30 00:43:13 -04:00
pntless d84a409fc7 chore: normalize ftw3 naming (#366) 2020-09-30 00:42:27 -04:00
Jef LeCompte 1a0753e739 docs: positioning 2020-09-30 00:41:14 -04:00
Jef LeCompte b110a5a429 docs: update brand/stores formatting 2020-09-30 00:39:56 -04:00
pntless 54a9890130 docs: add brands and models (#351) 2020-09-30 00:39:26 -04:00
Grant e55398e789 feat(store): add asus strix oc to asus store (#385) 2020-09-29 20:56:16 -04:00
Andrew Mackrodt 3b7487e97a feat: configurable status code behaviours (#340) 2020-09-29 09:54:26 -04:00
Andrew Mackrodt 7d8897cd9f fix: envOrNumber behavior (#364) 2020-09-28 14:07:52 -04:00
Augustin Winther d2476ddb08 fix: corrected norway locales (#356)
norway currency should be `NOK` not `EUR`
norway drLocale should be `no_no` not `nb_no`
2020-09-28 07:47:42 -04:00
Andrew Mackrodt 95c28a8d6d docs: update supported countries (#339)
Removes `russia` from documentation as there are no products
2020-09-27 21:49:22 -04:00
adrian549092 fdcd787f91 feat: support for proxy server (#352)
Co-authored-by: Adrian Martin <adrian.martin@nbcuni.com>
2020-09-27 21:43:58 -04:00
Jef LeCompte 772de900a1 fix(store): container names on nvidia (#333) 2020-09-27 21:40:23 -04:00
admon84 5b8d774b7c feat(store): nvidia debug card for "product details" page (#337) 2020-09-27 18:00:03 -04:00
Seán O'Grady 5414b249a6 fix(notifications): twilio client creation (#349) 2020-09-27 17:23:48 -04:00
Wills Bithrey f2f8d81498 feat(notification): add Twillio notification provider (#344) 2020-09-27 15:12:56 -04:00
Andrew Mackrodt 3b90bbbe5d fix(notification): discord false triggers (#346) 2020-09-27 15:01:08 -04:00
Andrew Mackrodt 1bac1b928d feat: retry logic for nvidia session token and adding to cart (#347) 2020-09-27 14:59:17 -04:00
Andrew Mackrodt 3bde805f2c chore: add missing nvidia drid for all series/regions (#330) 2020-09-26 16:02:41 -04:00
Brian Baraban 8828dd15cd feat(notification): add to field for email (#327) 2020-09-26 15:52:57 -04:00
Jef LeCompte 07bd246e87 fix: in stock wait time (#325)
Fixes #315

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-26 08:48:07 -04:00
Jef LeCompte 24786a443a chore: reuse variable
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-26 08:43:50 -04:00
ththiem 03755d5eb1 fix(notification): sms subject output (#298) 2020-09-26 08:28:46 -04:00
Joshua Higgins 0aa7ab596c feat: low bandwidth mode (#294)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-26 08:05:02 -04:00
niklashjh eda6c85fc0 feat: add norway to nvidia-api (#304)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-25 19:46:17 -04:00
Loc Mai 696b75dfbd chore: add .exe to .gitignore (#289) 2020-09-25 19:42:15 -04:00
Joshua Higgins f6760d3c65 feat(store): add pny (#295) 2020-09-25 19:37:43 -04:00
Jef LeCompte 9636572c7d fix(env): default LOG_LEVEL
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-25 19:33:38 -04:00
Jef LeCompte 1bead4712b chore(store): add sweden 3090
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-25 19:31:59 -04:00
George a2983eb54c fix: add amazon-nl, captcha amazon-de, add ftw3 newegg (#293) 2020-09-25 19:30:00 -04:00
Chris Bandrowsky 349f55d360 fix: denver microcenter name (#296) 2020-09-25 19:26:46 -04:00
Andrew Mackrodt 38ee437cc9 chore: remove nvidiaLocale (#318) 2020-09-25 19:08:47 -04:00
Andrew Mackrodt 8d8e5b587d fix: nvidia-api (#314) 2020-09-25 19:00:12 -04:00
Jef LeCompte d9dea3d0f2 chore: change dev task to start:dev
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-25 18:30:05 -04:00
Andrew Mackrodt b868d1a483 feat: enhanced lookup behaviour (#270)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-25 18:29:10 -04:00
Jef LeCompte 7ef9d935c6 docs: update IN_STOCK_WAIT_TIME
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-25 08:27:26 -04:00
Jef LeCompte c7a716f981 feat: in stock wait time per link now
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-25 08:25:58 -04:00
Joshua Higgins d25a643425 feat(store): add additional cards to all stores (#286) 2020-09-24 15:28:45 -04:00
Joshua Higgins d69189f12c feat(store): add amazon cards and cartUrls (#284) 2020-09-24 14:50:53 -04:00
Jef LeCompte 2893f76e29 chore: remove patreon 2020-09-24 14:31:16 -04:00
serg06 e992cf4db8 feat(store): add 3090s to amazon-ca (#274) 2020-09-24 14:22:14 -04:00
Jef LeCompte 4c63acc75a docs: fix details tag 2020-09-24 09:55:56 -04:00
Jef LeCompte 21aa700a86 docs: add microcenter stores 2020-09-24 13:55:10 +00:00
Jef LeCompte 8165033ea4 chore(store): fix microcenter name 2020-09-24 08:04:31 -04:00
Jef LeCompte 62172d224a Merge branch 'main' of github.com:jef/nvidia-snatcher into main 2020-09-23 23:49:13 -04:00
Jef LeCompte 9d3b7d38ab chore(store): add more nvidia links
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 23:49:05 -04:00
John Dyer f277172191 feat(notification): add pushover priority setting (#186) 2020-09-23 23:25:42 -04:00
github-actions[bot] f9ed774595 chore: release 1.5.0 (#103)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2020-09-23 23:13:49 -04:00
Jef LeCompte c53cfd67c1 chore(store): normalize amazon-de links
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 23:06:11 -04:00
admon84 e1b34a9ccf feat: filter models (#261) 2020-09-23 22:53:19 -04:00
Yu-Po Luke Chen d6a27c988c feat(store): add microcenter store location config (#215)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 22:43:56 -04:00
manybot 8a70f14743 feat(store): add amazon-de (#167)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
Co-authored-by: fuckingrobot <fuckingrobot@users.noreply.github.com>
2020-09-23 22:16:15 -04:00
Jef LeCompte 02ea40b6b2 docs: update mobile carriers
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 22:13:39 -04:00
bubba1337 47dab22d57 chore(notification): additional ca carriers (#248) 2020-09-23 22:08:38 -04:00
Jef LeCompte 676e793ef3 docs: update 3090 stores
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 22:07:17 -04:00
Mark Dietzer dd45dba82c feat(stores): add 3090 for bestbuy, newegg (#249) 2020-09-23 22:06:03 -04:00
serg06 482fb58cbf feat(stores): add 3090s for amazon-ca, bestbuy-ca, newegg-ca (#258)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 22:05:21 -04:00
Jef LeCompte 8913879593 feat: multiple discord roles and webhooks, qol for envs (#260) 2020-09-23 22:02:41 -04:00
admon84 9a53917586 fix(store): adorama captcha config (#234) 2020-09-23 22:02:26 -04:00
Vincent ab61a98bea chore(notification): warn user of improper sms and email config (#259) 2020-09-23 22:01:31 -04:00
Jef LeCompte 9f470f06e9 feat: deprecate nvidia (api), add 3080 add 3090
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 21:03:47 -04:00
Jef LeCompte 4cb52d31d5 chore: remove old cards
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 20:48:55 -04:00
Jef LeCompte 6aed674ee1 chore: add banner, only show sound if enabled
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 19:38:17 -04:00
Jef LeCompte bcbd2b6007 chore: change color dep, add banner
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 19:20:17 -04:00
Jef LeCompte 76b28a6dbd fix: color logs and notification
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 18:43:25 -04:00
Jef LeCompte a154e95681 docs: update configuration notes
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 18:07:09 -04:00
George 0ad67fe204 feat(log): colors for console logs (#207)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 17:55:27 -04:00
Jef LeCompte 2bd8446960 hotfix: series filter
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 16:05:27 -04:00
Jef LeCompte 257dd0e615 chore(store): normalize model
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 14:41:27 -04:00
Scott Cooper c78d9a98ba chore: add types for brand and series (#148)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 14:33:38 -04:00
Jef LeCompte 7c50e2b5aa chore(misc): normalize logs (#242) 2020-09-23 14:20:06 -04:00
serg06 8466f9f398 chore(misc): tiny improvements (#233)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 11:02:44 -04:00
serg06 22fd22fe74 feat(store): add bestbuy.ca (#229) 2020-09-23 10:56:23 -04:00
dependabot[bot] 98c8b1e7b8 chore(deps): bump puppeteer from 5.3.0 to 5.3.1 (#237)
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Commits](https://github.com/puppeteer/puppeteer/compare/v5.3.0...v5.3.1)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-23 10:53:47 -04:00
fuckingrobot 74490eae3a feat(notification): add pushbullet, add url with notifications (#226)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-23 10:45:04 -04:00
Andrew Mackrodt 20656805c1 feat: add chromium sandbox skipping (#209) 2020-09-23 08:35:56 -04:00
admon84 6608a79769 feat: invert logic (#141)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-22 23:33:36 -04:00
Colin Farrell a70e63bb35 chore(store): add netherland nvidia (#210)
Co-authored-by: fuckingrobot <fuckingrobot@users.noreply.github.com>
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-22 21:59:10 -04:00
Bryan Berger 908ed35882 feat(notification): twitter integration (#224) 2020-09-22 21:49:40 -04:00
Jef LeCompte 9d5f430119 chore(store): normalize amazon links
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-22 20:34:29 -04:00
bmalaski ede9f6f5a6 chore(store): strix on amazon (#206)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-22 20:30:05 -04:00
Jef LeCompte 136ccf3593 chore(store): add filter newegg
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-22 19:56:27 -04:00
Jef LeCompte 9d66683528 chore(store): add filter newegg
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-22 19:51:06 -04:00
Jef LeCompte cf0eac2b23 chore: add sort linting (#169) 2020-09-22 19:31:49 -04:00
bmalaski 6409646d57 fix(store): bandh removed cards (#201) 2020-09-22 19:29:28 -04:00
Paolo Moretti 605bdd7ca7 feat(store): add evga eu (#172)
Co-authored-by: fuckingrobot <fuckingrobot@users.noreply.github.com>
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-22 19:19:55 -04:00
Sachin Umashankar 8e7d267549 chore(store): add errors for bandh (#180)
Co-authored-by: fuckingrobot <fuckingrobot@users.noreply.github.com>
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-22 19:17:37 -04:00
levelfifty 190388cfe4 feat(store): add evga model (#220) 2020-09-22 19:15:23 -04:00
Jef LeCompte 1d63733681 docs: add zotac
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-22 19:13:44 -04:00
AndrewKurniawan 78758552b2 feat(store): add zotac store (#214) 2020-09-22 19:12:17 -04:00
dependabot[bot] 14c36bebe7 chore(deps): bump messaging-api-telegram from 1.0.0 to 1.0.1 (#196)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-22 02:29:51 -04:00
dependabot[bot] 327f7b080a chore(deps-dev): bump @types/node from 14.11.1 to 14.11.2 (#197)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.11.1 to 14.11.2.
- [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-09-22 02:28:41 -04:00
Jef LeCompte 4f7db895e2 docs: update faq 2020-09-21 23:54:42 -04:00
Jef LeCompte 3b51c02873 docs: update readme 2020-09-21 20:13:46 -04:00
fuckingrobot ebd6091a09 feat: set country in config, login to nvidia when starting (#162) 2020-09-21 20:12:45 -04:00
Jef LeCompte 3b9a1d2ea8 hotfix: missing quote 2020-09-21 19:30:05 -04:00
Jef LeCompte adb603b776 chore: remove unknown affiliate 2020-09-21 19:25:25 -04:00
Jef LeCompte 2c6866ad7f chore: remove unknown affliate 2020-09-21 19:24:07 -04:00
George 71c6774511 feat(store): add bannedSeller label for stores (#173)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-21 18:54:40 -04:00
Jef LeCompte 5f628d2c12 chore(store): add errors for evga (#176) 2020-09-21 18:24:46 -04:00
Jef LeCompte 4dfdb9eb2e chore: make SCREENSHOT default true
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-21 16:18:56 -04:00
designgears 12d25eb710 chore(store): officedepot oos label (#171) 2020-09-21 15:26:02 -04:00
xdMatthewbx 9675c5b8d6 fix(notification): change discord ping visibility (#168)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
Co-authored-by: bmalaski <5288648+bmalaski@users.noreply.github.com>
2020-09-21 14:50:40 -04:00
bmalaski 0df2dcfbd4 feat(store): add office depot (#157)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-21 12:54:45 -04:00
xdMatthewbx 76f5849889 feat(store): add newegg.ca (#160)
closes #159
2020-09-21 12:48:00 -04:00
Nachi G 6413144c1c feat: temporarily pause requests if store has stock (#147)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-21 11:38:18 -04:00
George 133a54fa17 feat: bestbuy bypass international splash, newegg add to cart (#153) 2020-09-21 11:36:25 -04:00
bmalaski debd8f57da chore(store): pny listings (#156)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-21 08:34:09 -04:00
fuckingrobot 3ea146da14 feat: update for complex add to cart, fix nvidia (#108) 2020-09-21 08:24:20 -04:00
Nachi G 722eaf3cd6 feat(notification): add desktop notifications (#140)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 20:48:27 -04:00
Jordan Garcia 7191e03a80 feat: include screenshot for emails + sms notifications (#144) 2020-09-20 20:42:20 -04:00
Mark Dietzer 0f6e570cc8 fix: memory leak due to adblocker (#139) 2020-09-20 19:38:31 -04:00
JoeSchofield 7fc1e776fd docs: update pushover variables (#136) 2020-09-20 18:26:57 -04:00
Mark Dietzer a75d214dd5 fix(nvidia): false positives (#132)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 17:46:45 -04:00
admon84 19c8f188c7 fix: newegg out-of-stock labels (#134) 2020-09-20 17:45:25 -04:00
Jef LeCompte d42736bf22 chore: update funding 2020-09-20 16:56:35 -04:00
Jef LeCompte d2893f6826 chore: update funding 2020-09-20 16:55:40 -04:00
Jef LeCompte 07b2da4fe9 chore(store): filter amazon third party vendors (#126) 2020-09-20 16:45:56 -04:00
admon84 770a13ac35 fix: newegg out-of-stock (#124) 2020-09-20 16:19:36 -04:00
admon84 d9be3fe618 feat: custom user agent (#121)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 15:56:47 -04:00
admon84 252459d5d3 feat: card series filter, fix: newegg oosLabels (#120) 2020-09-20 15:51:44 -04:00
Jef LeCompte 7efdcd8f07 chore: change test:notification to run explicitly
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 14:36:00 -04:00
Mark Dietzer 4f83b3b233 feat: add delay on captcha to try and evade faster (#119) 2020-09-20 14:27:10 -04:00
Jef LeCompte c0352961a9 refactor: extract lookup (#117) 2020-09-20 14:13:29 -04:00
Mark Dietzer dc0f710674 feat(scraping): change lookup impl, add randomize sleep (#110)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 13:52:37 -04:00
Jef LeCompte 2e5d13bda5 docs: PLAY_SOUND note 2020-09-20 13:48:45 -04:00
Jef LeCompte 2a1f15041e chore: move notification test, other refactoring (#111) 2020-09-20 13:18:32 -04:00
bmalaski a3fc07daf0 feat(notification): discord integration (#82)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 12:36:05 -04:00
bmalaski 5b91065043 feat(store): add adorama (#104)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 12:14:56 -04:00
Jef LeCompte e819e46116 fix: keep single Store from draining
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 12:00:25 -04:00
Christopher Sauer 39a478050a docs: add pushover api generation link (#107) 2020-09-20 11:26:38 -04:00
Jef LeCompte 28947be9bc fix: rateLimitTimeout not being defaulted (#106)
refactor: `browser` and `store` config object
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 11:02:57 -04:00
Jef LeCompte 3de1f81eb1 hotfix: make HEADLESS default true
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 10:39:44 -04:00
Jordan Garcia d1a5aa1f02 feat: load puppeteer faster, run stores in parallel (#83)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 10:28:45 -04:00
Forrest Marvez a501cf703b feat(store): add asus (#102)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 10:10:00 -04:00
anethema c65fa04666 fix(store): false positives for nvidia. (#85)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 09:44:49 -04:00
Jef LeCompte a538809db5 chore: update pr template
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 09:29:02 -04:00
Jef LeCompte 85faaa1ca7 chore: update desc of variables (#101)
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 09:15:57 -04:00
Mark Dietzer 103d96dc81 fix(notification): wrong condition for sounds playing (#91)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 08:47:37 -04:00
Wulfre df5ba68e94 chore(store): normalize model names (#96)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-20 08:36:19 -04:00
Lukas b7d9462e79 fix: check response for rate limiting (#58) (#98)
Co-authored-by: Lukas Szimtenings <lszimtenings@ukaachen.de>
2020-09-20 08:33:47 -04:00
George 1e9d8fec42 refactor: move cartUrl from Store to Link (#87) 2020-09-19 22:49:09 -04:00
github-actions[bot] 381f1f7505 chore: release 1.4.0 (#66)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2020-09-19 18:17:27 -04:00
Jef LeCompte ebbdfe3f63 perf: browser abstraction (#68) (#81)
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 18:13:20 -04:00
Jef LeCompte 14b1e4cee6 chore: add discord badge, update includes-labels
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 18:01:36 -04:00
vmnt 433fa8ca9f chore(logging): reformat output (#74)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 17:47:55 -04:00
Jef LeCompte cf0e959fb4 refactor: store naming and map reference
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 17:43:53 -04:00
Jef LeCompte 8c5d7d0c49 refactor: env, cartUrl optional, other consistencies
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 17:36:33 -04:00
Mark Dietzer 393d5f6898 feat(notification): add telegram (#71) 2020-09-19 17:02:00 -04:00
anethema d4de1a4638 feat(store): add amazon.ca, fix timeout (#75) 2020-09-19 17:00:14 -04:00
Thomas Herrell c85658bf82 feat(notification): add pushover (#55)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 15:55:21 -04:00
Cody Stammers 8aba7ecbdb feat(notification): add mint mobile carrier (#70) 2020-09-19 15:53:39 -04:00
Jef LeCompte ccc781b8dd docs: better format for carriers
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 13:10:09 -04:00
Jef LeCompte 6be74a19f3 feat(notification): add telus sms
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 13:07:53 -04:00
Jef LeCompte dcda82bd98 hotfix: lint
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 12:45:47 -04:00
Jef LeCompte ea5b7a0918 refactor: lookup, rm defaults (#69)
prep work for #38

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 12:45:03 -04:00
Gylfi 3b2ba29cf1 chore(store): add bandh links (#65)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 11:23:49 -04:00
Evan Gentis a21740942b feat: webpage toggle, sound notification, fix evga links (#52)
Co-authored-by: Evan Gentis <evan.gentis@gmail.com>
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 10:42:40 -04:00
Jef LeCompte 25643c4870 refactor: map sms, fix amazon text
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 10:28:31 -04:00
Jef LeCompte ef319d4b20 chore: update issue templates
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 10:05:19 -04:00
github-actions[bot] fcb279d5de chore: release 1.3.0 (#62)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2020-09-19 09:17:46 -04:00
admon84 5c9e0b6d06 fix(store): amazon captcha false-positives (#54)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 09:02:11 -04:00
Ruochong Wu 6c3cd01685 feat(logging): add timestamp (#48)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 08:49:22 -04:00
Kevin Tong d907092b44 fix: evga xc3 ultra link (#56)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-19 08:43:45 -04:00
admon84 7cfc7c7442 fix: screenshot size, add screenshot config setting (#53) 2020-09-19 08:37:20 -04:00
admon84 971fec20e4 fix: sms carrier config, add google carrier (#44) 2020-09-18 21:39:30 -04:00
github-actions[bot] d73449dd7f chore: release 1.2.0 (#31)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2020-09-18 20:12:30 -04:00
malbert69 edf17e926f feat(store): microcenter (#39)
Co-authored-by: Ion Caza <contact@johncaza.com>
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 20:09:47 -04:00
Jef LeCompte faad3e68ef feat(ci): add npm run build
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 19:58:07 -04:00
Jef LeCompte 131dda4d5a hotfix: config variable reference
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 19:56:11 -04:00
Jef LeCompte 2246ecedf2 hotfix: config variable reference
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 19:55:47 -04:00
Alexandru Gutu 5a3636bcb6 feat: sms notification for usa carriers (#40)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 19:54:59 -04:00
Jef LeCompte ec2108f4b9 hotfix: config variable reference
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 19:39:18 -04:00
Jef LeCompte fad9ea04c7 refactor: doc and notification (#42)
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 19:34:09 -04:00
Ion Caza 643045c7e0 feat: page timeout (#22)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 19:04:29 -04:00
Vincent 7d7bd18b4d feat: more Best Buy AIBs (#41)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 18:45:12 -04:00
Jef LeCompte ec98602d5b chore: remove cart link for nvidia
no longer working

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 18:43:34 -04:00
DakkJaniels a2fb97333c feat: add email test, fix memory leak (#24)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 18:06:40 -04:00
Esg450 c0a881a16e feat: slack integration (#34)
Co-authored-by: Evan Gentis <evan.gentis@gmail.com>
2020-09-18 17:55:26 -04:00
Vincent c2a210cc81 fix: small error in isOutOfStock logic (#33) 2020-09-18 17:28:29 -04:00
George aa856c7121 docs: add amazon 2020-09-18 15:08:04 -04:00
George f0560ce72b feat: add Amazon links (#26)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 14:35:11 -04:00
fuckingrobot 00ede13501 feat: update to check if FE in-stock via Digital River (#29)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 14:31:55 -04:00
geman220 feed4ed6e4 docs: add EVGA to table checklist (#23) 2020-09-18 11:13:18 -04:00
github-actions[bot] a152f8a5cc chore: release 1.1.0 (#15)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2020-09-18 10:27:21 -04:00
Jef LeCompte 00a0687d3e fix: exception handling TimeoutError (#20) (#21)
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 10:26:02 -04:00
Jef LeCompte d3ec4bc85e docs: add evga to supported stores 2020-09-18 10:11:23 -04:00
Jef LeCompte 1a13c03250 docs: remove verbose installation 2020-09-18 10:09:45 -04:00
Jef LeCompte 6c6503219f feat: add evga (#17) (#18) 2020-09-18 09:43:51 -04:00
Ali Kafagy efe799b8b9 docs: add debian support and store info (#16)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 08:36:03 -04:00
Jef LeCompte 4a5886782b docs: add wiki link 2020-09-18 05:13:12 -04:00
Jef LeCompte e1a90c931d docs: mention api wip 2020-09-18 05:07:17 -04:00
Jef LeCompte eb4f5e0341 feat: add conventional commits (#14) 2020-09-18 04:44:03 -04:00
github-actions[bot] 24a4d2b021 chore: release 1.0.0 (#13)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2020-09-18 04:37:14 -04:00
Jef LeCompte 1afbab3a22 chore(cd): remove docker login
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 04:36:26 -04:00
Jef LeCompte 7bcf289428 docs: fix badge 2020-09-18 04:34:44 -04:00
Jef LeCompte 99803fa95a docs: fix badge 2020-09-18 04:34:02 -04:00
Jef LeCompte bbc781337b docs: fix unicode 2020-09-18 04:32:11 -04:00
Jef LeCompte e9fc0bf5f7 feat: use ts, update cd, update README (#12)
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-18 04:27:23 -04:00
Ion Caza dcbaa6bb2e refactor: break out mail code (#10)
Co-authored-by: Jef LeCompte <jeffreylec@gmail.com>
2020-09-17 23:02:20 -04:00
Jef LeCompte 24de6af038 chore: linting (#7)
Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>

Co-authored-by: malbert69 <m_albert@hotmail.com>
Co-authored-by: Ion Caza <contact@johncaza.com>
2020-09-17 22:13:51 -04:00
malbert69 907e4842ae Update index.js (#9)
Created multiple oos text checks by changing oosText to array...  Fixed bug that opened the wrong link when item is in stock.

Co-authored-by: Ion Caza <contact@johncaza.com>
2020-09-17 22:05:34 -04:00
malbert69 4d1a7e9ae9 Update index.js (#8)
Added more card links.
2020-09-17 21:38:33 -04:00
dependabot[bot] 332302f3bd Bump GoogleCloudPlatform/release-please-action from v2.2.0 to v2.4.1 (#6)
Bumps [GoogleCloudPlatform/release-please-action](https://github.com/GoogleCloudPlatform/release-please-action) from v2.2.0 to v2.4.1.
- [Release notes](https://github.com/GoogleCloudPlatform/release-please-action/releases)
- [Changelog](https://github.com/GoogleCloudPlatform/release-please-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/GoogleCloudPlatform/release-please-action/compare/v2.2.0...873216b0747282e24c73c4bacd61cf13f6f00c14)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-17 21:08:06 -04:00
Jef LeCompte c07662a435 chore: organization and pipeline (#3)
* chore: organization

Signed-off-by: Jef LeCompte <jeffreylec@gmail.com>

* Update index.js

Includes @malbert69 latest changes

Co-authored-by: Ion Caza <contact@johncaza.com>
2020-09-17 21:04:09 -04:00
malbert69 dcfc03cdc8 Update cardbot.js (#5) 2020-09-17 20:55:30 -04:00
malbert69 32768fa74e Create cardbot.js (#1) 2020-09-17 20:31:32 -04:00
Jef LeCompte 8a71e0b096 Initial commit 2020-09-17 20:22:26 -04:00
210 changed files with 31611 additions and 13488 deletions
+6
View File
@@ -0,0 +1,6 @@
.idea/
.git/
.vs/
.vscode/
build/
node_modules/
+12
View File
@@ -0,0 +1,12 @@
root = true
[*]
indent_style = tab
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.{yml, json, md}]
indent_style = space
indent_size = 2
+98
View File
@@ -0,0 +1,98 @@
# ** All configuration variables are optional **
# Read https://github.com/jef/streetmerchant#customization for help on customizing this file
#############################################################################################
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=""
+1
View File
@@ -0,0 +1 @@
* @jef
+2
View File
@@ -0,0 +1,2 @@
github: jef
custom: ["https://www.paypal.me/jxf"]
+41
View File
@@ -0,0 +1,41 @@
---
name: 🐛 Bug report
about: Report a bug for this project
title: ''
labels: 'type: bug'
assignees: jef
---
<!--- 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 --->
## Expected Behavior
<!--- Tell us what should happen -->
## 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 -->
+16
View File
@@ -0,0 +1,16 @@
---
name: 🚀 Feature request
about: Suggest a feature for this project
title: ''
labels: 'type: enhancement'
assignees: jef
---
## Description
<!-- Describe the feature here -->
## Possible solution
<!-- 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 -->
+14
View File
@@ -0,0 +1,14 @@
version: 2
updates:
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "daily"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
+19
View File
@@ -0,0 +1,19 @@
<!-- Please use Conventional Commits to label your title -->
<!-- https://www.conventionalcommits.org/en/v1.0.0/ -->
<!-- Example: feat: allow provided config object to extend other configs -->
### Description
<!-- Fixes #(issue) -->
<!-- Please also include relevant motivation and context. -->
### Testing
<!-- Please describe the tests that you ran to verify your changes. -->
<!-- Provide instructions so we can reproduce. -->
<!-- Please also list any relevant details for your test configuration -->
### New dependencies
<!-- List any dependencies that are required for this change. -->
<!-- Otherwise, delete section. -->
+29
View File
@@ -0,0 +1,29 @@
name: cd
on:
push:
branches:
- main
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: GoogleCloudPlatform/release-please-action@v2.10
id: release
with:
token: ${{ secrets.GITHUB_TOKEN }}
release-type: simple
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 latest docker image
if: ${{ steps.release.outputs.release_created }}
run: |
docker build \
-t "ghcr.io/${GITHUB_REPOSITORY}:${TAG_NAME}" \
-t "ghcr.io/${GITHUB_REPOSITORY}:latest" .
env:
TAG_NAME: ${{ steps.release.outputs.tag_name }}
- name: publish latest image
if: ${{ steps.release.outputs.release_created }}
run: docker push "ghcr.io/${GITHUB_REPOSITORY}"
+39
View File
@@ -0,0 +1,39 @@
name: ci
on:
pull_request:
branches:
- main
jobs:
build-and-lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2.1.2
with:
node-version: 14.15.0
- uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: ${{ runner.os }}-node-
- name: Add problem matcher
run: echo "::add-matcher::.github/xo-problem-matcher.json"
- name: Pull dependencies
run: |
npm ci
npm run build
npm run lint
build-docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: dorny/paths-filter@v2.6.0
id: filter
with:
filters: |
build:
- 'Dockerfile'
- 'package*.json'
- name: Build image
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}"
+15
View File
@@ -0,0 +1,15 @@
name: pr-lint
on:
pull_request_target:
types:
- opened
- edited
- reopened
- synchronize
jobs:
main:
runs-on: ubuntu-latest
steps:
- 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'
+21
View File
@@ -0,0 +1,21 @@
{
"problemMatcher": [
{
"owner": "xo",
"pattern": [
{
"regexp": "^\\s+(.*):(\\d+):(\\d+)$",
"file": 1
},
{
"regexp": "^\\s+✖\\s+(\\d+):(\\d+)\\s+(.*)\\s+(.*)$",
"line": 1,
"column": 2,
"message": 3,
"code": 4,
"loop": true
}
]
}
]
}
+18
View File
@@ -0,0 +1,18 @@
.idea/
.vs/
.vscode/
build/
node_modules/
.env*
.*env
!.env-example
success-*.png
*.wav
*.mp3
*.flac
*.exe
desktop.ini
twitch.json
+1
View File
@@ -0,0 +1 @@
14.15.0
-523
View File
@@ -1,523 +0,0 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="🤖 The world's easiest, most powerful stock checker">
<meta name="author" content="Jef LeCompte">
<link rel="shortcut icon" href="https://raw.githubusercontent.com/jef/streetmerchant/main/docs/assets/images/streetmerchant-logo.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.4">
<title>streetmerchant</title>
<link rel="stylesheet" href="/streetmerchant/assets/stylesheets/main.77f3fd56.min.css">
<link rel="stylesheet" href="/streetmerchant/assets/stylesheets/palette.7fa14f5b.min.css">
<meta name="theme-color" content="#4051b5">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CFira+Code&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Fira Code"}</style>
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:title" content="streetmerchant" />
<meta property="og:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta property="og:url" content="" />
<meta property="og:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1280" />
<meta property="og:image:height" content="640" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@hijxf" />
<meta name="twitter:creator" content="@hijxf" />
<meta name="twitter:title" content="streetmerchant" />
<meta name="twitter:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta name="twitter:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-header__button md-logo" aria-label="streetmerchant">
<img src="/streetmerchant/assets/images/streetmerchant-logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
streetmerchant
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
</span>
</div>
</div>
</div>
<div class="md-header__options">
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-nav__button md-logo" aria-label="streetmerchant">
<img src="/streetmerchant/assets/images/streetmerchant-logo.png" alt="logo">
</a>
streetmerchant
</label>
<div class="md-nav__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/streetmerchant/." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item">
<a href="/streetmerchant/getting-started/" class="md-nav__link">
Getting started
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3">
Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/streetmerchant/reference/application/" class="md-nav__link">
Application
</a>
</li>
<li class="md-nav__item">
<a href="/streetmerchant/reference/filter/" class="md-nav__link">
Filter
</a>
</li>
<li class="md-nav__item">
<a href="/streetmerchant/reference/notification/" class="md-nav__link">
Notification
</a>
</li>
<li class="md-nav__item">
<a href="/streetmerchant/reference/proxy/" class="md-nav__link">
Proxy
</a>
</li>
<li class="md-nav__item">
<a href="/streetmerchant/reference/terraform/" class="md-nav__link">
Terraform
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4">
Help
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Help" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Help
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/streetmerchant/help/general/" class="md-nav__link">
General
</a>
</li>
<li class="md-nav__item">
<a href="/streetmerchant/help/troubleshoot/" class="md-nav__link">
Troubleshoot
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="/streetmerchant/faq/" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item">
<a href="/streetmerchant/changelog/" class="md-nav__link">
Changelog
</a>
</li>
<li class="md-nav__item">
<a href="/streetmerchant/about/" class="md-nav__link">
About
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>404 - Not found</h1>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2016 - 2020 Jef LeCompte
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-footer-social">
<a href="https://github.com/jef" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://twitter.com/hijxf" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://www.linkedin.com/in/jeflecompte" target="_blank" rel="noopener" title="www.linkedin.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "/streetmerchant", "features": ["search.suggest"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "/streetmerchant/assets/javascripts/workers/search.fb4a9340.min.js", "version": null}</script>
<script src="/streetmerchant/assets/javascripts/bundle.9b151c6a.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js"></script>
<script src="/streetmerchant/javascripts/tables.js"></script>
</body>
</html>
+399
View File
@@ -0,0 +1,399 @@
# Changelog
## [3.2.0](https://www.github.com/jef/streetmerchant/compare/v3.1.0...v3.2.0) (2020-12-06)
### Features
* **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
* **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))
## [3.1.0](https://www.github.com/jef/streetmerchant/compare/v3.0.0...v3.1.0) (2020-11-22)
### Features
* **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:** 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
* 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))
## [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
* **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
* **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)
### 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
* 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/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/streetmerchant/compare/v1.2.0...v1.3.0) (2020-09-19)
### Features
* **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/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/streetmerchant/compare/v1.1.0...v1.2.0) (2020-09-19)
### Features
* **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/streetmerchant/issues/33)) ([c2a210c](https://www.github.com/jef/streetmerchant/commit/c2a210cc815c3aa06f6f14d33954f65577d95954))
## [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/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/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/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
View File
+41
View File
@@ -0,0 +1,41 @@
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
WORKDIR /build
COPY package.json package.json
COPY package-lock.json package-lock.json
COPY tsconfig.json tsconfig.json
RUN npm ci
COPY src/ src/
RUN npm run build
RUN npm prune --production
FROM node:14.15.0-alpine3.12
RUN apk add --no-cache chromium
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser \
DOCKER=true
RUN addgroup -S appuser && adduser -S -g appuser appuser \
&& mkdir -p /home/appuser/Downloads /app \
&& chown -R appuser:appuser /home/appuser \
&& chown -R appuser:appuser /app
USER appuser
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
ENTRYPOINT ["npm", "run"]
CMD ["start:production"]
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 Jef LeCompte
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+562
View File
@@ -0,0 +1,562 @@
<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>
## Features
- 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 `streetmerchant` running!
### Installation: native
| 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/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)
- 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/streetmerchant/wiki) if you need more help with installation.
### Installation: Docker
Available via GitHub Container Registry.
| Tag | Note |
|:---:|---|
| `latest` | Latest release; stable |
| `nightly` | Latest HEAD each day at midnight UTC; could be unstable |
```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
The command `npm run start:dev` can be used instead of `npm run start` to automatically restart the project when
filesystem changes are detected in the `src/` folder or `.env` file.
## Customization
To customize `streetmerchant`, make a copy of `.env-example` as `.env` and make any changes to your liking. _All
environment variables are **optional**._
<details>
<summary>Expand to see all available options</summary>
### Application
| 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` |
| `IN_STOCK_WAIT_TIME` | Time to wait between requests to the same link if it has that card in stock | In seconds, default: `0` |
| `LOG_LEVEL` | [Logging levels](https://github.com/winstonjs/winston#logging-levels) | Debugging related, default: `info` |
| `LOW_BANDWIDTH` | Blocks images/fonts to reduce traffic | Disables ad blocker, default: `false` |
| `OPEN_BROWSER` | Toggle for whether or not the browser should open when item is found | Default: `true` |
| `PAGE_BACKOFF_MIN` | Minimum backoff time between retrying requests for the same store when a forbidden response is received | Default: `10000` |
| `PAGE_BACKOFF_MAX` | Maximum backoff time between retrying requests for the same store when a forbidden response is received | Default: `3600000` |
| `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` |
| `USER_AGENT` | Custom User-Agents headers for HTTP requests | Newline separated, e.g.: `USER_AGENT_STRING1 \n USER_AGENT_STRING2` | | Default: `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36` |
| `WEB_PORT` | Starts a webserver to be able to control the bot while it is running; optional | Default: disabled |
> :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/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 | 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,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>
<summary>Supported stores</summary>
> :point_right: Used with the `STORES` variable.
| Stores | Environment variable |
|:---:|:---:|
| Adorama | `adorama`|
| Alternate (DE) | `alternate`|
| Alternate (NL) | `alternate-nl`|
| 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`|
| B&H | `bandh`|
| 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`|
| Newegg (CA) | `newegg-ca`|
| Notebooksbilliger (DE) |`notebooksbilliger`|
| Novatech (UK) | `novatech`|
| 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/streetmerchant/issues/442#issuecomment-703297393).
| Store name |
|:---:|
| `brooklyn` |
| `brentwood` |
| `cambridge` |
| `chicago` |
| `columbus` |
| `dallas` |
| `denver` |
| `duluth` |
| `fairfax` |
| `flushing` |
| `houston` |
| `madison-heights` |
| `marietta` |
| `mayfield-heights` |
| `north-jersey` |
| `overland-park` |
| `parkville` |
| `rockville` |
| `sharonville` |
| `st-davids` |
| `st-louis-park` |
| `tustin` |
| `westbury` |
| `westmont` |
| `yonkers` |
</details>
</details>
<details>
<summary>Supported brands and models</summary>
> :point_right: Used with the `SHOW_ONLY_BRANDS` and `SHOW_ONLY_MODELS` variables.
| Brand | Model |
|:---:|---|
| `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`, `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 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>
> :point_right: Used with the `COUNTRY` variable.
| Country | 3080 FE | 3090 FE | Test Card | Notes |
|:---:|:---:|:---:|:---:|:---:|
| austria | `✔` | `✔` | `✔` | |
| belgium | `✔` | `✔` | `✔` | |
| canada | `✔` | `✔` | `✔` | |
| czechia | `✔` | `✔` | `✔` | |
| denmark | `✔` | | `✔` | Missing RTX 3090 |
| finland | `✔` | | `✔` | Missing RTX 3090 |
| france | `✔` | `✔` | `✔` | |
| germany | `✔` | `✔` | `✔` | |
| great_britain | `✔` | `✔` | `✔` | |
| ireland | `✔` | `✔` | `✔` | |
| italy | `✔` | `✔` | `✔` | |
| luxembourg | `✔` | `✔` | `✔` | |
| netherlands | `✔` | `✔` | `✔` | |
| norway | `✔` | `✔` | `✔` | |
| poland | `✔` | `✔` | `✔` | |
| portugal | `✔` | | | RTX 3080 only |
| spain | `✔` | `✔` | `✔` | |
| sweden | `✔` | `✔` | `✔` | |
| usa | `✔` | `✔` | `✔` | |
</details>
### Notifications
> :point_right: You can test your notification configuration by running `npm run test:notification`.
<details>
<summary>Desktop</summary>
| Environment variable | Description | Notes |
|:---:|---|---|
| `DESKTOP_NOTIFICATIONS` | Display desktop notifications using [node-notifier](https://www.npmjs.com/package/node-notifier) | Default: `false` |
| `PLAY_SOUND` | Play this sound notification if a card is found | Relative path accepted, valid formats: wav, mp3, flac, E.g.: `path/to/notification.wav`, [free sounds available](https://notificationsounds.com/) |
</details>
<details>
<summary>Discord</summary>
| 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_WEB_HOOK` | Discord Web Hook URL | Can be comma separated, use whole webhook URL |
</details>
<details>
<summary>Email and SMS</summary>
| Environment variable | Description | Notes |
|:---:|---|---|
| `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 | 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` |
> :point_right: If you have multi-factor authentication (MFA), you will need to create an [app password](https://myaccount.google.com/apppasswords) and use this instead of your Gmail password.
#### Supported carriers
| Carrier | Environment variable | Notes |
|:---:|:---:|:---:|
| AT&T | `att` | |
| AT&T Prepaid | `attgo` | |
| Bell | `bell` | |
| Fido | `fido` | |
| Google | `google`| |
| Koodo | `koodo` | |
| Mint | `mint`| |
| Rogers | `rogers` | |
| Sprint | `sprint`| |
| Telus | `telus`| |
| T-Mobile | `tmobile`| |
| Verizon | `verizon`| Works with Visible |
| Virgin | `virgin`| |
| Virgin (CA) | `virgin-ca`| |
</details>
<details>
<summary>MQTT</summary>
| Environment variable | Description | Notes |
|:---:|---|---|
| `MQTT_BROKER_ADDRESS` | IP address or URL of MQTT Broker | e.g 192.168.1.xxx or broker.hivemq.com |
| `MQTT_BROKER_PORT` | Network port of MQTT Broker | Default: 1883 |
| `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: 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>
<details>
<summary>PagerDuty</summary>
| Environment variable | Description | Notes |
|:---:|---|---|
| `PAGERDUTY_INTEGRATION_KEY` | PagerDuty Events API v2 Integration Key. Obtain one in PagerDuty - <Service you want to use> - Integrations | |
| `PAGERDUTY_SEVERITY` | Severity of PagerDuty events | Default: `info` |
</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>
| Environment variable | Description | Notes |
|:---:|---|---|
| `PUSHBULLET` | PushBullet API key | Generate at https://www.pushbullet.com/#settings/account | |
</details>
<details>
<summary>Pushover</summary>
| Environment variable | Description | Notes |
|:---:|---|---|
| `PUSHOVER_TOKEN` | Pushover access token | Generate at https://pushover.net/apps/build | |
| `PUSHOVER_USER` | Pushover username | |
| `PUSHOVER_PRIORITY` | Pushover message priority |
</details>
<details>
<summary>Slack</summary>
| Environment variable | Description | Notes |
|:---:|---|---|
| `SLACK_CHANNEL` | Slack channel for posting | E.g.: `update`, no need for `#` |
| `SLACK_TOKEN` | Slack API token | |
</details>
<details>
<summary>Telegram</summary>
| Environment variable | Description | Notes |
|:---:|---|---|
| `TELEGRAM_ACCESS_TOKEN` | Telegram access token | |
| `TELEGRAM_CHAT_ID` | Telegram chat ID | Comma seperated, e.g.: `123456789`, `123456789,987654321` |
</details>
<details>
<summary>Twilio</summary>
| Environment variable | Description | Notes |
|:---:|---|---|
| `TWILIO_ACCOUNT_SID` | Twilio Account SID | Can be found on twilio.com/console |
| `TWILIO_AUTH_TOKEN` | Twilio Auth Token | Can be found on twilio.com/console |
| `TWILIO_FROM_NUMBER` | Twilio provided phone number to send messages from | Include country code e.g +4401234567890 |
| `TWILIO_TO_NUMBER` | Mobile number to send SMS to | Include country code e.g +4401234567890 |
</details>
<details>
<summary>Twitter</summary>
| Environment variable | Description | Notes |
|:---:|---|---|
| `TWITTER_ACCESS_TOKEN_KEY` | Twitter Token Key | |
| `TWITTER_ACCESS_TOKEN_SECRET` | Twitter Token Secret | |
| `TWITTER_CONSUMER_KEY` | Twitter Consumer Key | Generate all Twitter keys at: https://developer.twitter.com/ |
| `TWITTER_CONSUMER_SECRET` | Twitter Consumer Secret | |
| `TWITTER_TWEET_TAGS` | Optional list of hashtags to append to the tweet message | E.g.: `#nvidia #nvidiastock` |
</details>
<details>
<summary>Twitch</summary>
| Environment variable | Description | Notes |
|:---:|---|---|
| `TWITCH_CLIENT_ID` | Twitch client ID | |
| `TWITCH_CLIENT_SECRET`| Twitch client secret | |
| `TWITCH_ACCESS_TOKEN` | Twitch access token | |
| `TWITCH_REFRESH_TOKEN` | Twitch refresh token | |
| `TWITCH_CHANNEL` | Twitch channel | |
</details>
</details>
## FAQ
**Q: What's Node.js and how do I install it?** Visit [their website](https://nodejs.org/en/) and download and install
it. Very straight forward. Otherwise, Google more information related to your system needs.
**Q: Will this harm my computer?** No.
**Q: Have you gotten a card yet?** YES! :tada: :rocket:
<details>
<summary>Screenshot</summary>
![screenshot](https://i.imgur.com/59CRzGq.png)
</details>
**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/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/streetmerchant/wiki/Troubleshoot:-General:-Getting-the-latest-code).
**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/streetmerchant/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc)! All contributions are welcome.
**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>
-649
View File
@@ -1,649 +0,0 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="🤖 The world's easiest, most powerful stock checker">
<meta name="author" content="Jef LeCompte">
<link rel="canonical" href="https://jef.codes/streetmerchant/about/">
<link rel="shortcut icon" href="https://raw.githubusercontent.com/jef/streetmerchant/main/docs/assets/images/streetmerchant-logo.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.4">
<title>About - streetmerchant</title>
<link rel="stylesheet" href="../assets/stylesheets/main.77f3fd56.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.7fa14f5b.min.css">
<meta name="theme-color" content="#4051b5">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CFira+Code&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Fira Code"}</style>
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:title" content="streetmerchant - About" />
<meta property="og:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta property="og:url" content="https://jef.codes/streetmerchant/about/" />
<meta property="og:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1280" />
<meta property="og:image:height" content="640" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@hijxf" />
<meta name="twitter:creator" content="@hijxf" />
<meta name="twitter:title" content="streetmerchant - About" />
<meta name="twitter:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta name="twitter:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#about" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-header__button md-logo" aria-label="streetmerchant">
<img src="../assets/images/streetmerchant-logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
streetmerchant
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
About
</span>
</div>
</div>
</div>
<div class="md-header__options">
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-nav__button md-logo" aria-label="streetmerchant">
<img src="../assets/images/streetmerchant-logo.png" alt="logo">
</a>
streetmerchant
</label>
<div class="md-nav__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item">
<a href="../getting-started/" class="md-nav__link">
Getting started
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3">
Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/application/" class="md-nav__link">
Application
</a>
</li>
<li class="md-nav__item">
<a href="../reference/filter/" class="md-nav__link">
Filter
</a>
</li>
<li class="md-nav__item">
<a href="../reference/notification/" class="md-nav__link">
Notification
</a>
</li>
<li class="md-nav__item">
<a href="../reference/proxy/" class="md-nav__link">
Proxy
</a>
</li>
<li class="md-nav__item">
<a href="../reference/terraform/" class="md-nav__link">
Terraform
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4">
Help
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Help" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Help
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../help/general/" class="md-nav__link">
General
</a>
</li>
<li class="md-nav__item">
<a href="../help/troubleshoot/" class="md-nav__link">
Troubleshoot
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../faq/" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item">
<a href="../changelog/" class="md-nav__link">
Changelog
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
About
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
About
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#background" class="md-nav__link">
Background
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#background" class="md-nav__link">
Background
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/jef/streetmerchant/edit/master/docs/about.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1 id="about">About<a class="headerlink" href="#about" title="Permanent link">&para;</a></h1>
<h2 id="background">Background<a class="headerlink" href="#background" title="Permanent link">&para;</a></h2>
<p>Remember on September 17<sup>th</sup>, 2020 at 9 AM EST the Nvidia site went from <strong>Notify Me</strong> to <strong>Out of Stock</strong> instantly? Well, they didn't sell any cards. The real reason was that they weren't ready to sell them to us yet. That's right, they turned off their third party storefronts because they were being overloaded with our clicks. They still kept the other cards that use those APIs online, but they removed that one. It was re-enabled at some point for a brief moment, but the same thing happened -- servers overloaded with API requests.</p>
<p>This is where streetmerchant comes in. It doesn't buy anything for you, but it makes it more of a stress free job to refresh and check sites while you go about your daily business. People took off work, missed appointments, and gave up other lively needs in hopes to buy a <em>graphics card</em>. Now we reach beyond graphics cards in hopes for other products!</p>
<p>Please enjoy,</p>
<p>jef</p>
<hr>
<div class="md-source-date">
<small>
Last update: 2021-03-04
</small>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../changelog/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
Changelog
</div>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2016 - 2020 Jef LeCompte
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-footer-social">
<a href="https://github.com/jef" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://twitter.com/hijxf" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://www.linkedin.com/in/jeflecompte" target="_blank" rel="noopener" title="www.linkedin.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["search.suggest"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../assets/javascripts/workers/search.fb4a9340.min.js", "version": null}</script>
<script src="../assets/javascripts/bundle.9b151c6a.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js"></script>
<script src="../javascripts/tables.js"></script>
</body>
</html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-18
View File
@@ -1,18 +0,0 @@
/*!
* Lunr languages, `Danish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d<a&&(d=a)}}function n(){var e,r;if(f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}});
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n<p.length;n++)r?a.push(new e.Token(p[n],{position:[f,p[n].length],index:a.length})):a.push(p[n]),f+=p[n].length;l=c+1}return a},e.ja.stemmer=function(){return function(e){return e}}(),e.Pipeline.registerFunction(e.ja.stemmer,"stemmer-ja"),e.ja.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Z-zA-0-9-",e.ja.trimmer=e.trimmerSupport.generateTrimmer(e.ja.wordCharacters),e.Pipeline.registerFunction(e.ja.trimmer,"trimmer-ja"),e.ja.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.ja.stopWordFilter,"stopWordFilter-ja"),e.jp=e.ja,e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.Pipeline.registerFunction(e.jp.trimmer,"trimmer-jp"),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}});
-1
View File
@@ -1 +0,0 @@
module.exports=require("./lunr.ja");
-1
View File
@@ -1 +0,0 @@
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var t=Array.prototype.slice.call(arguments),i=t.join("-"),r="",n=[],s=[],p=0;p<t.length;++p)"en"==t[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[t[p]].wordCharacters,e[t[p]].stopWordFilter&&n.unshift(e[t[p]].stopWordFilter),e[t[p]].stemmer&&(n.push(e[t[p]].stemmer),s.push(e[t[p]].stemmer)));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+i),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}});
File diff suppressed because one or more lines are too long
-18
View File
@@ -1,18 +0,0 @@
/*!
* Lunr languages, `Norwegian` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a<s&&(a=s)}}function i(){var e,r,n;if(w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=_.s_size-1-l;m>=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}});
-18
View File
@@ -1,18 +0,0 @@
/*!
* Lunr languages, `Swedish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o<a&&(o=a)}}function t(){var e,r=w.limit_backward;if(w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}});
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}});
-206
View File
@@ -1,206 +0,0 @@
/**
* export the module via AMD, CommonJS or as a browser global
* Export code from https://github.com/umdjs/umd/blob/master/returnExports.js
*/
;(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(factory)
} else if (typeof exports === 'object') {
/**
* Node. Does not work with strict CommonJS, but
* only CommonJS-like environments that support module.exports,
* like Node.
*/
module.exports = factory()
} else {
// Browser globals (root is window)
factory()(root.lunr);
}
}(this, function () {
/**
* Just return a value to define the module export.
* This example returns an object, but the module
* can return a function as the exported value.
*/
return function(lunr) {
// TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript
// (c) 2008 Taku Kudo <taku@chasen.org>
// TinySegmenter is freely distributable under the terms of a new BSD licence.
// For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt
function TinySegmenter() {
var patterns = {
"[一二三四五六七八九十百千万億兆]":"M",
"[一-龠々〆ヵヶ]":"H",
"[ぁ-ん]":"I",
"[ァ-ヴーア-ン゙ー]":"K",
"[a-zA-Z-zA-]":"A",
"[0-9-]":"N"
}
this.chartype_ = [];
for (var i in patterns) {
var regexp = new RegExp(i);
this.chartype_.push([regexp, patterns[i]]);
}
this.BIAS__ = -332
this.BC1__ = {"HH":6,"II":2461,"KH":406,"OH":-1378};
this.BC2__ = {"AA":-3267,"AI":2744,"AN":-878,"HH":-4070,"HM":-1711,"HN":4012,"HO":3761,"IA":1327,"IH":-1184,"II":-1332,"IK":1721,"IO":5492,"KI":3831,"KK":-8741,"MH":-3132,"MK":3334,"OO":-2920};
this.BC3__ = {"HH":996,"HI":626,"HK":-721,"HN":-1307,"HO":-836,"IH":-301,"KK":2762,"MK":1079,"MM":4034,"OA":-1652,"OH":266};
this.BP1__ = {"BB":295,"OB":304,"OO":-125,"UB":352};
this.BP2__ = {"BO":60,"OO":-1762};
this.BQ1__ = {"BHH":1150,"BHM":1521,"BII":-1158,"BIM":886,"BMH":1208,"BNH":449,"BOH":-91,"BOO":-2597,"OHI":451,"OIH":-296,"OKA":1851,"OKH":-1020,"OKK":904,"OOO":2965};
this.BQ2__ = {"BHH":118,"BHI":-1159,"BHM":466,"BIH":-919,"BKK":-1720,"BKO":864,"OHH":-1139,"OHM":-181,"OIH":153,"UHI":-1146};
this.BQ3__ = {"BHH":-792,"BHI":2664,"BII":-299,"BKI":419,"BMH":937,"BMM":8335,"BNN":998,"BOH":775,"OHH":2174,"OHM":439,"OII":280,"OKH":1798,"OKI":-793,"OKO":-2242,"OMH":-2402,"OOO":11699};
this.BQ4__ = {"BHH":-3895,"BIH":3761,"BII":-4654,"BIK":1348,"BKK":-1806,"BMI":-3385,"BOO":-12396,"OAH":926,"OHH":266,"OHK":-2036,"ONN":-973};
this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682};
this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"11":-669};
this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1000,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990};
this.TC1__ = {"AAA":1093,"HHH":1029,"HHM":580,"HII":998,"HOH":-390,"HOM":-331,"IHI":1169,"IOH":-142,"IOI":-1015,"IOM":467,"MMH":187,"OOI":-1832};
this.TC2__ = {"HHO":2088,"HII":-1023,"HMM":-1154,"IHI":-1965,"KKH":703,"OII":-2649};
this.TC3__ = {"AAA":-294,"HHH":346,"HHI":-341,"HII":-1088,"HIK":731,"HOH":-1486,"IHH":128,"IHI":-3041,"IHO":-1935,"IIH":-825,"IIM":-1035,"IOI":-542,"KHH":-1216,"KKA":491,"KKH":-1217,"KOK":-1009,"MHH":-2694,"MHM":-457,"MHO":123,"MMH":-471,"NNH":-1689,"NNO":662,"OHO":-3393};
this.TC4__ = {"HHH":-203,"HHI":1344,"HHK":365,"HHM":-122,"HHN":182,"HHO":669,"HIH":804,"HII":679,"HOH":446,"IHH":695,"IHO":-2324,"IIH":321,"III":1497,"IIO":656,"IOO":54,"KAK":4845,"KKA":3386,"KKK":3065,"MHH":-405,"MHI":201,"MMH":-241,"MMM":661,"MOM":841};
this.TQ1__ = {"BHHH":-227,"BHHI":316,"BHIH":-132,"BIHH":60,"BIII":1595,"BNHH":-744,"BOHH":225,"BOOO":-908,"OAKK":482,"OHHH":281,"OHIH":249,"OIHI":200,"OIIH":-68};
this.TQ2__ = {"BIHH":-1401,"BIII":-1033,"BKAK":-543,"BOOO":-5591};
this.TQ3__ = {"BHHH":478,"BHHM":-1073,"BHIH":222,"BHII":-504,"BIIH":-116,"BIII":-105,"BMHI":-863,"BMHM":-464,"BOMH":620,"OHHH":346,"OHHI":1729,"OHII":997,"OHMH":481,"OIHH":623,"OIIH":1344,"OKAK":2792,"OKHH":587,"OKKA":679,"OOHH":110,"OOII":-685};
this.TQ4__ = {"BHHH":-721,"BHHM":-3604,"BHII":-966,"BIIH":-607,"BIII":-2181,"OAAA":-2763,"OAKK":180,"OHHH":-294,"OHHI":2446,"OHHO":480,"OHIH":-1573,"OIHH":1935,"OIHI":-493,"OIIH":626,"OIII":-4007,"OKAK":-8156};
this.TW1__ = {"につい":-4681,"東京都":2026};
this.TW2__ = {"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216};
this.TW3__ = {"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287};
this.TW4__ = {"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865};
this.UC1__ = {"A":484,"K":93,"M":645,"O":-505};
this.UC2__ = {"A":819,"H":1059,"I":409,"M":3987,"N":5775,"O":646};
this.UC3__ = {"A":-1370,"I":2311};
this.UC4__ = {"A":-2643,"H":1809,"I":-1032,"K":-3450,"M":3565,"N":3876,"O":6646};
this.UC5__ = {"H":313,"I":-1238,"K":-799,"M":539,"O":-831};
this.UC6__ = {"H":-506,"I":-253,"K":87,"M":247,"O":-387};
this.UP1__ = {"O":-214};
this.UP2__ = {"B":69,"O":935};
this.UP3__ = {"B":189};
this.UQ1__ = {"BH":21,"BI":-12,"BK":-99,"BN":142,"BO":-56,"OH":-95,"OI":477,"OK":410,"OO":-2422};
this.UQ2__ = {"BH":216,"BI":113,"OK":1759};
this.UQ3__ = {"BA":-479,"BH":42,"BI":1913,"BK":-7198,"BM":3160,"BN":6427,"BO":14761,"OI":-827,"ON":-3212};
this.UW1__ = {",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135};
this.UW2__ = {",":-829,"、":-829,"":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568};
this.UW3__ = {",":4889,"1":-800,"":-1723,"、":4889,"々":-2311,"":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278};
this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1000,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637};
this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"":-514,"E2":-32768,"「":363,"イ":241,"ル":451,"ン":-343};
this.UW6__ = {",":227,".":808,"1":-270,"E1":306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"":-270,"E1":306,"ル":-673,"ン":-496};
return this;
}
TinySegmenter.prototype.ctype_ = function(str) {
for (var i in this.chartype_) {
if (str.match(this.chartype_[i][0])) {
return this.chartype_[i][1];
}
}
return "O";
}
TinySegmenter.prototype.ts_ = function(v) {
if (v) { return v; }
return 0;
}
TinySegmenter.prototype.segment = function(input) {
if (input == null || input == undefined || input == "") {
return [];
}
var result = [];
var seg = ["B3","B2","B1"];
var ctype = ["O","O","O"];
var o = input.split("");
for (i = 0; i < o.length; ++i) {
seg.push(o[i]);
ctype.push(this.ctype_(o[i]))
}
seg.push("E1");
seg.push("E2");
seg.push("E3");
ctype.push("O");
ctype.push("O");
ctype.push("O");
var word = seg[3];
var p1 = "U";
var p2 = "U";
var p3 = "U";
for (var i = 4; i < seg.length - 3; ++i) {
var score = this.BIAS__;
var w1 = seg[i-3];
var w2 = seg[i-2];
var w3 = seg[i-1];
var w4 = seg[i];
var w5 = seg[i+1];
var w6 = seg[i+2];
var c1 = ctype[i-3];
var c2 = ctype[i-2];
var c3 = ctype[i-1];
var c4 = ctype[i];
var c5 = ctype[i+1];
var c6 = ctype[i+2];
score += this.ts_(this.UP1__[p1]);
score += this.ts_(this.UP2__[p2]);
score += this.ts_(this.UP3__[p3]);
score += this.ts_(this.BP1__[p1 + p2]);
score += this.ts_(this.BP2__[p2 + p3]);
score += this.ts_(this.UW1__[w1]);
score += this.ts_(this.UW2__[w2]);
score += this.ts_(this.UW3__[w3]);
score += this.ts_(this.UW4__[w4]);
score += this.ts_(this.UW5__[w5]);
score += this.ts_(this.UW6__[w6]);
score += this.ts_(this.BW1__[w2 + w3]);
score += this.ts_(this.BW2__[w3 + w4]);
score += this.ts_(this.BW3__[w4 + w5]);
score += this.ts_(this.TW1__[w1 + w2 + w3]);
score += this.ts_(this.TW2__[w2 + w3 + w4]);
score += this.ts_(this.TW3__[w3 + w4 + w5]);
score += this.ts_(this.TW4__[w4 + w5 + w6]);
score += this.ts_(this.UC1__[c1]);
score += this.ts_(this.UC2__[c2]);
score += this.ts_(this.UC3__[c3]);
score += this.ts_(this.UC4__[c4]);
score += this.ts_(this.UC5__[c5]);
score += this.ts_(this.UC6__[c6]);
score += this.ts_(this.BC1__[c2 + c3]);
score += this.ts_(this.BC2__[c3 + c4]);
score += this.ts_(this.BC3__[c4 + c5]);
score += this.ts_(this.TC1__[c1 + c2 + c3]);
score += this.ts_(this.TC2__[c2 + c3 + c4]);
score += this.ts_(this.TC3__[c3 + c4 + c5]);
score += this.ts_(this.TC4__[c4 + c5 + c6]);
// score += this.ts_(this.TC5__[c4 + c5 + c6]);
score += this.ts_(this.UQ1__[p1 + c1]);
score += this.ts_(this.UQ2__[p2 + c2]);
score += this.ts_(this.UQ3__[p3 + c3]);
score += this.ts_(this.BQ1__[p2 + c2 + c3]);
score += this.ts_(this.BQ2__[p2 + c3 + c4]);
score += this.ts_(this.BQ3__[p3 + c2 + c3]);
score += this.ts_(this.BQ4__[p3 + c3 + c4]);
score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]);
score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]);
score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]);
score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]);
var p = "O";
if (score > 0) {
result.push(word);
word = "";
p = "B";
}
p1 = p2;
p2 = p3;
p3 = p;
word += seg[i];
}
result.push(word);
return result;
}
lunr.TinySegmenter = TinySegmenter;
};
}));
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-2065
View File
File diff suppressed because it is too large Load Diff
-854
View File
@@ -1,854 +0,0 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="🤖 The world's easiest, most powerful stock checker">
<meta name="author" content="Jef LeCompte">
<link rel="canonical" href="https://jef.codes/streetmerchant/faq/">
<link rel="shortcut icon" href="https://raw.githubusercontent.com/jef/streetmerchant/main/docs/assets/images/streetmerchant-logo.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.4">
<title>FAQ - streetmerchant</title>
<link rel="stylesheet" href="../assets/stylesheets/main.77f3fd56.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.7fa14f5b.min.css">
<meta name="theme-color" content="#4051b5">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CFira+Code&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Fira Code"}</style>
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:title" content="streetmerchant - FAQ" />
<meta property="og:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta property="og:url" content="https://jef.codes/streetmerchant/faq/" />
<meta property="og:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1280" />
<meta property="og:image:height" content="640" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@hijxf" />
<meta name="twitter:creator" content="@hijxf" />
<meta name="twitter:title" content="streetmerchant - FAQ" />
<meta name="twitter:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta name="twitter:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#faq" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-header__button md-logo" aria-label="streetmerchant">
<img src="../assets/images/streetmerchant-logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
streetmerchant
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
FAQ
</span>
</div>
</div>
</div>
<div class="md-header__options">
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-nav__button md-logo" aria-label="streetmerchant">
<img src="../assets/images/streetmerchant-logo.png" alt="logo">
</a>
streetmerchant
</label>
<div class="md-nav__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item">
<a href="../getting-started/" class="md-nav__link">
Getting started
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3">
Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/application/" class="md-nav__link">
Application
</a>
</li>
<li class="md-nav__item">
<a href="../reference/filter/" class="md-nav__link">
Filter
</a>
</li>
<li class="md-nav__item">
<a href="../reference/notification/" class="md-nav__link">
Notification
</a>
</li>
<li class="md-nav__item">
<a href="../reference/proxy/" class="md-nav__link">
Proxy
</a>
</li>
<li class="md-nav__item">
<a href="../reference/terraform/" class="md-nav__link">
Terraform
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4">
Help
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Help" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Help
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../help/general/" class="md-nav__link">
General
</a>
</li>
<li class="md-nav__item">
<a href="../help/troubleshoot/" class="md-nav__link">
Troubleshoot
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
FAQ
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
FAQ
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#whats-nodejs-and-how-do-i-install-it" class="md-nav__link">
What's Node.js and how do I install it?
</a>
</li>
<li class="md-nav__item">
<a href="#will-this-harm-my-computer" class="md-nav__link">
Will this harm my computer?
</a>
</li>
<li class="md-nav__item">
<a href="#have-you-gotten-a-card-yet" class="md-nav__link">
Have you gotten a card yet?
</a>
</li>
<li class="md-nav__item">
<a href="#will-i-get-banned-from-of-the-stores" class="md-nav__link">
Will I get banned from of the stores?
</a>
</li>
<li class="md-nav__item">
<a href="#i-got-a-problem-and-need-help" class="md-nav__link">
I got a problem and need help
</a>
</li>
<li class="md-nav__item">
<a href="#how-do-i-get-the-latest-code" class="md-nav__link">
How do I get the latest code?
</a>
</li>
<li class="md-nav__item">
<a href="#why-dont-my-notifications-work" class="md-nav__link">
Why don't my notifications work?
</a>
</li>
<li class="md-nav__item">
<a href="#id-love-to-contribute-how-do-i-do-that" class="md-nav__link">
I'd love to contribute, how do I do that?
</a>
</li>
<li class="md-nav__item">
<a href="#how-do-i-add-a-store" class="md-nav__link">
How do I add a store?
</a>
</li>
<li class="md-nav__item">
<a href="#why-do-i-have-to-download-all-this-stuff-just-to-get-this-bot-working" class="md-nav__link">
Why do I have to download all this stuff just to get this bot working?
</a>
</li>
<li class="md-nav__item">
<a href="#why-does-amazon-show-an-error-page-with-a-picture-of-an-animal-instead-of-adding-to-cart-or-going-to-the-detail-page" class="md-nav__link">
Why does Amazon show an error page (with a picture of an animal) instead of adding to cart or going to the detail page?
</a>
</li>
<li class="md-nav__item">
<a href="#im-using-streetmerchant-in-the-cloud-and-x-isnt-working" class="md-nav__link">
I'm using streetmerchant in the cloud and X isn't working.
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../changelog/" class="md-nav__link">
Changelog
</a>
</li>
<li class="md-nav__item">
<a href="../about/" class="md-nav__link">
About
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#whats-nodejs-and-how-do-i-install-it" class="md-nav__link">
What's Node.js and how do I install it?
</a>
</li>
<li class="md-nav__item">
<a href="#will-this-harm-my-computer" class="md-nav__link">
Will this harm my computer?
</a>
</li>
<li class="md-nav__item">
<a href="#have-you-gotten-a-card-yet" class="md-nav__link">
Have you gotten a card yet?
</a>
</li>
<li class="md-nav__item">
<a href="#will-i-get-banned-from-of-the-stores" class="md-nav__link">
Will I get banned from of the stores?
</a>
</li>
<li class="md-nav__item">
<a href="#i-got-a-problem-and-need-help" class="md-nav__link">
I got a problem and need help
</a>
</li>
<li class="md-nav__item">
<a href="#how-do-i-get-the-latest-code" class="md-nav__link">
How do I get the latest code?
</a>
</li>
<li class="md-nav__item">
<a href="#why-dont-my-notifications-work" class="md-nav__link">
Why don't my notifications work?
</a>
</li>
<li class="md-nav__item">
<a href="#id-love-to-contribute-how-do-i-do-that" class="md-nav__link">
I'd love to contribute, how do I do that?
</a>
</li>
<li class="md-nav__item">
<a href="#how-do-i-add-a-store" class="md-nav__link">
How do I add a store?
</a>
</li>
<li class="md-nav__item">
<a href="#why-do-i-have-to-download-all-this-stuff-just-to-get-this-bot-working" class="md-nav__link">
Why do I have to download all this stuff just to get this bot working?
</a>
</li>
<li class="md-nav__item">
<a href="#why-does-amazon-show-an-error-page-with-a-picture-of-an-animal-instead-of-adding-to-cart-or-going-to-the-detail-page" class="md-nav__link">
Why does Amazon show an error page (with a picture of an animal) instead of adding to cart or going to the detail page?
</a>
</li>
<li class="md-nav__item">
<a href="#im-using-streetmerchant-in-the-cloud-and-x-isnt-working" class="md-nav__link">
I'm using streetmerchant in the cloud and X isn't working.
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/jef/streetmerchant/edit/master/docs/faq.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1 id="faq">FAQ<a class="headerlink" href="#faq" title="Permanent link">&para;</a></h1>
<h2 id="whats-nodejs-and-how-do-i-install-it">What's Node.js and how do I install it?<a class="headerlink" href="#whats-nodejs-and-how-do-i-install-it" title="Permanent link">&para;</a></h2>
<p>Visit <a href="https://nodejs.org/en/">their website</a> and download and install it. Very straight forward. Otherwise, Google more information related to your system needs.</p>
<h2 id="will-this-harm-my-computer">Will this harm my computer?<a class="headerlink" href="#will-this-harm-my-computer" title="Permanent link">&para;</a></h2>
<p>No.</p>
<h2 id="have-you-gotten-a-card-yet">Have you gotten a card yet?<a class="headerlink" href="#have-you-gotten-a-card-yet" title="Permanent link">&para;</a></h2>
<p><a href="https://i.imgur.com/59CRzGq.png">Sure did!</a></p>
<h2 id="will-i-get-banned-from-of-the-stores">Will I get banned from of the stores?<a class="headerlink" href="#will-i-get-banned-from-of-the-stores" title="Permanent link">&para;</a></h2>
<p>Perhaps, but it's the risk we're willing to take! To help minimize this, take a look at <a href="https://github.com/jef/streetmerchant/issues/1050">#1050</a>.</p>
<h2 id="i-got-a-problem-and-need-help">I got a problem and need help<a class="headerlink" href="#i-got-a-problem-and-need-help" title="Permanent link">&para;</a></h2>
<p>File an <a href="https://github.com/jef/streetmerchant/issues/new/choose">issue</a>. I'll do my best to get to you. I work a full time job and this is only a hobby of mine.</p>
<h2 id="how-do-i-get-the-latest-code">How do I get the latest code?<a class="headerlink" href="#how-do-i-get-the-latest-code" title="Permanent link">&para;</a></h2>
<p>Run the following commands:</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code>git pull origin main
npm install
npm run start
</code></pre></div>
</td></tr></table>
<p>If you changed the code at all, this will most likely fail. You can clear out your changes by doing:</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code>git checkout .
git pull origin main
npm install
npm run start
</code></pre></div>
</td></tr></table>
<p>You can also to <a href="https://git-scm.com/docs/git-stash">git-stash</a>, but we won't expand on that here.</p>
<h2 id="why-dont-my-notifications-work">Why don't my notifications work?<a class="headerlink" href="#why-dont-my-notifications-work" title="Permanent link">&para;</a></h2>
<p>There is probably an <a href="https://github.com/jef/streetmerchant/issues?q=is%3Aissue+sort%3Aupdated-desc+sound+is%3Aclosed">issue</a> that has <a href="https://github.com/jef/streetmerchant/issues/182">already</a> <a href="https://github.com/jef/streetmerchant/issues/116">been</a> <a href="https://github.com/jef/streetmerchant/issues/155">resolved</a>.</p>
<h2 id="id-love-to-contribute-how-do-i-do-that">I'd love to contribute, how do I do that?<a class="headerlink" href="#id-love-to-contribute-how-do-i-do-that" title="Permanent link">&para;</a></h2>
<p>Make a <a href="https://github.com/jef/streetmerchant/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc">pull request</a>! All contributions are welcome.</p>
<h2 id="how-do-i-add-a-store">How do I add a store?<a class="headerlink" href="#how-do-i-add-a-store" title="Permanent link">&para;</a></h2>
<p>Here's a little write-up I did: <a href="../help/general/#adding-a-store">Adding a store</a>.</p>
<h2 id="why-do-i-have-to-download-all-this-stuff-just-to-get-this-bot-working">Why do I have to download all this stuff just to get this bot working?<a class="headerlink" href="#why-do-i-have-to-download-all-this-stuff-just-to-get-this-bot-working" title="Permanent link">&para;</a></h2>
<p>Well, I would rather you didn't either. See <a href="https://github.com/jef/streetmerchant/issues/11">#11</a>.</p>
<h2 id="why-does-amazon-show-an-error-page-with-a-picture-of-an-animal-instead-of-adding-to-cart-or-going-to-the-detail-page">Why does Amazon show an error page (with a picture of an animal) instead of adding to cart or going to the detail page?<a class="headerlink" href="#why-does-amazon-show-an-error-page-with-a-picture-of-an-animal-instead-of-adding-to-cart-or-going-to-the-detail-page" title="Permanent link">&para;</a></h2>
<p>This is intended; see <a href="https://github.com/jef/streetmerchant/issues/733">#733</a>. This indicates that the item is out of stock and only available from a third-party seller (often at a markup).</p>
<h2 id="im-using-streetmerchant-in-the-cloud-and-x-isnt-working">I'm using streetmerchant in the cloud and X isn't working.<a class="headerlink" href="#im-using-streetmerchant-in-the-cloud-and-x-isnt-working" title="Permanent link">&para;</a></h2>
<p>There is <em>a lot</em> 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>
<hr>
<div class="md-source-date">
<small>
Last update: 2021-03-04
</small>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../help/troubleshoot/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
Troubleshoot
</div>
</div>
</a>
<a href="../changelog/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
Changelog
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2016 - 2020 Jef LeCompte
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-footer-social">
<a href="https://github.com/jef" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://twitter.com/hijxf" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://www.linkedin.com/in/jeflecompte" target="_blank" rel="noopener" title="www.linkedin.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["search.suggest"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../assets/javascripts/workers/search.fb4a9340.min.js", "version": null}</script>
<script src="../assets/javascripts/bundle.9b151c6a.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js"></script>
<script src="../javascripts/tables.js"></script>
</body>
</html>
-928
View File
@@ -1,928 +0,0 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="🤖 The world's easiest, most powerful stock checker">
<meta name="author" content="Jef LeCompte">
<link rel="canonical" href="https://jef.codes/streetmerchant/getting-started/">
<link rel="shortcut icon" href="https://raw.githubusercontent.com/jef/streetmerchant/main/docs/assets/images/streetmerchant-logo.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.4">
<title>Getting started - streetmerchant</title>
<link rel="stylesheet" href="../assets/stylesheets/main.77f3fd56.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.7fa14f5b.min.css">
<meta name="theme-color" content="#4051b5">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CFira+Code&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Fira Code"}</style>
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:title" content="streetmerchant - Getting started" />
<meta property="og:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta property="og:url" content="https://jef.codes/streetmerchant/getting-started/" />
<meta property="og:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1280" />
<meta property="og:image:height" content="640" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@hijxf" />
<meta name="twitter:creator" content="@hijxf" />
<meta name="twitter:title" content="streetmerchant - Getting started" />
<meta name="twitter:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta name="twitter:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#getting-started" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-header__button md-logo" aria-label="streetmerchant">
<img src="../assets/images/streetmerchant-logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
streetmerchant
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Getting started
</span>
</div>
</div>
</div>
<div class="md-header__options">
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-nav__button md-logo" aria-label="streetmerchant">
<img src="../assets/images/streetmerchant-logo.png" alt="logo">
</a>
streetmerchant
</label>
<div class="md-nav__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Getting started
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Getting started
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#prerequisites" class="md-nav__link">
Prerequisites
</a>
</li>
<li class="md-nav__item">
<a href="#using-nodejs" class="md-nav__link">
Using Node.js
</a>
</li>
<li class="md-nav__item">
<a href="#using-docker" class="md-nav__link">
Using Docker
</a>
</li>
<li class="md-nav__item">
<a href="#customization" class="md-nav__link">
Customization
</a>
</li>
<li class="md-nav__item">
<a href="#for-developers" class="md-nav__link">
For developers
</a>
<nav class="md-nav" aria-label="For developers">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#developing-in-nodejs" class="md-nav__link">
Developing in Node.js
</a>
</li>
<li class="md-nav__item">
<a href="#developing-in-docker" class="md-nav__link">
Developing in Docker
</a>
<nav class="md-nav" aria-label="Developing in Docker">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prerequisites_1" class="md-nav__link">
Prerequisites
</a>
</li>
<li class="md-nav__item">
<a href="#starting-with-docker-compose" class="md-nav__link">
Starting with docker-compose
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3">
Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../reference/application/" class="md-nav__link">
Application
</a>
</li>
<li class="md-nav__item">
<a href="../reference/filter/" class="md-nav__link">
Filter
</a>
</li>
<li class="md-nav__item">
<a href="../reference/notification/" class="md-nav__link">
Notification
</a>
</li>
<li class="md-nav__item">
<a href="../reference/proxy/" class="md-nav__link">
Proxy
</a>
</li>
<li class="md-nav__item">
<a href="../reference/terraform/" class="md-nav__link">
Terraform
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4">
Help
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Help" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Help
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../help/general/" class="md-nav__link">
General
</a>
</li>
<li class="md-nav__item">
<a href="../help/troubleshoot/" class="md-nav__link">
Troubleshoot
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../faq/" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item">
<a href="../changelog/" class="md-nav__link">
Changelog
</a>
</li>
<li class="md-nav__item">
<a href="../about/" class="md-nav__link">
About
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#prerequisites" class="md-nav__link">
Prerequisites
</a>
</li>
<li class="md-nav__item">
<a href="#using-nodejs" class="md-nav__link">
Using Node.js
</a>
</li>
<li class="md-nav__item">
<a href="#using-docker" class="md-nav__link">
Using Docker
</a>
</li>
<li class="md-nav__item">
<a href="#customization" class="md-nav__link">
Customization
</a>
</li>
<li class="md-nav__item">
<a href="#for-developers" class="md-nav__link">
For developers
</a>
<nav class="md-nav" aria-label="For developers">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#developing-in-nodejs" class="md-nav__link">
Developing in Node.js
</a>
</li>
<li class="md-nav__item">
<a href="#developing-in-docker" class="md-nav__link">
Developing in Docker
</a>
<nav class="md-nav" aria-label="Developing in Docker">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prerequisites_1" class="md-nav__link">
Prerequisites
</a>
</li>
<li class="md-nav__item">
<a href="#starting-with-docker-compose" class="md-nav__link">
Starting with docker-compose
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/jef/streetmerchant/edit/master/docs/getting-started.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1 id="getting-started">Getting started<a class="headerlink" href="#getting-started" title="Permanent link">&para;</a></h1>
<p>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 streetmerchant running!</p>
<h2 id="prerequisites">Prerequisites<a class="headerlink" href="#prerequisites" title="Permanent link">&para;</a></h2>
<ul>
<li><a href="https://git-scm.com/">git</a></li>
<li>Either <a href="https://nodejs.org/en/">Node.js 15</a> or <a href="https://docs.docker.com/get-docker/">Docker (1.13.0+)</a> (advanced users)</li>
</ul>
<h2 id="using-nodejs">Using Node.js<a class="headerlink" href="#using-nodejs" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th align="center">Reference</th>
<th>Note</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">tag</td>
<td>Example, <code>v1.0.0</code>; stable</td>
</tr>
<tr>
<td align="center"><code>main</code></td>
<td>Latest HEAD; not tagged, could be unstable</td>
</tr>
</tbody>
</table>
<ol>
<li>Download <a href="https://nodejs.org/en/">Node.js 15</a></li>
<li>Clone this project <code>git clone https://github.com/jef/streetmerchant.git</code>.<ol>
<li>To checkout a particular reference, use <code>git checkout &lt;ref name&gt;</code> after cloning.</li>
</ol>
</li>
<li>Navigate to this project by entering <code>cd streetmerchant</code>.</li>
<li>Run <code>npm install</code>.</li>
<li>Make a copy of <code>dotenv-example</code> and name it <code>dotenv</code>.</li>
<li>Edit the <code>dotenv</code> file to your liking using a text editor (like <a href="https://code.visualstudio.com/">vscode</a>).</li>
<li>Run <code>npm run start</code> to start.</li>
</ol>
<p>At any point you want the program to stop, use <span class="keys"><kbd class="key-control">Ctrl</kbd><span>+</span><kbd class="key-c">C</kbd></span>.</p>
<details class="tip" open="open"><summary>Tip</summary><p>Community based help can also be found on the <a href="https://github.com/jef/streetmerchant/wiki">wiki</a>. Feel free to check that out if you're having problems running. If you're still having problems running, you're probably not the first. Make some searches through the <a href="https://github.com/jef/streetmerchant/issues">GitHub issues</a> before making one.</p>
</details>
<h2 id="using-docker">Using Docker<a class="headerlink" href="#using-docker" title="Permanent link">&para;</a></h2>
<p>Available via GitHub Container Registry.</p>
<table>
<thead>
<tr>
<th align="center">Tag</th>
<th>Note</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center"><code>latest</code></td>
<td>Latest release; stable</td>
</tr>
<tr>
<td align="center"><code>nightly</code></td>
<td>Latest HEAD each day at midnight UTC; could be unstable</td>
</tr>
</tbody>
</table>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span>
<span class="normal">6</span>
<span class="normal">7</span>
<span class="normal">8</span>
<span class="normal">9</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code><span class="c1"># to run docker nightly</span>
docker run -it --rm <span class="se">\</span>
--env-file ./dotenv <span class="se">\</span>
ghcr.io/jef/streetmerchant:nightly
<span class="c1"># to test notifications</span>
docker run -it --rm <span class="se">\</span>
--env-file ./dotenv <span class="se">\</span>
ghcr.io/jef/streetmerchant:nightly test:notification:production
</code></pre></div>
</td></tr></table>
<p>See <a href="#developing-in-docker">Developing in docker</a> for more information</p>
<h2 id="customization">Customization<a class="headerlink" href="#customization" title="Permanent link">&para;</a></h2>
<p>To customize streetmerchant, make a copy of <code>dotenv-example</code> as <code>dotenv</code> and make any changes to your liking. View <a href="../reference/application/">Reference</a> for more information on variables and their usage.</p>
<details class="tip" open="open"><summary>Tip</summary><p>All environment variables are optional.</p>
</details>
<h2 id="for-developers">For developers<a class="headerlink" href="#for-developers" title="Permanent link">&para;</a></h2>
<h3 id="developing-in-nodejs">Developing in Node.js<a class="headerlink" href="#developing-in-nodejs" title="Permanent link">&para;</a></h3>
<p>The command <code>npm run start:dev</code> can be used instead of <code>npm run start</code> to automatically restart the project when filesystem changes are detected in the <code>src/</code> folder or <code>dotenv</code> file.</p>
<p>Use <code>npm run lint</code> to see any linting uses and <code>npm run fix</code> to automatically fix the issues it can.</p>
<h3 id="developing-in-docker">Developing in Docker<a class="headerlink" href="#developing-in-docker" title="Permanent link">&para;</a></h3>
<h4 id="prerequisites_1">Prerequisites<a class="headerlink" href="#prerequisites_1" title="Permanent link">&para;</a></h4>
<ul>
<li><a href="https://docs.docker.com/get-docker/">Docker (1.13.0+)</a></li>
<li><a href="https://www.gnu.org/software/make/">GNU Make</a><ul>
<li>Optional, but increases quality of life</li>
</ul>
</li>
<li><a href="https://docs.docker.com/compose/install/">Docker Compose</a><ul>
<li>Depending on your system, you may already have this. Check before installing.</li>
</ul>
</li>
</ul>
<h4 id="starting-with-docker-compose">Starting with <code>docker-compose</code><a class="headerlink" href="#starting-with-docker-compose" title="Permanent link">&para;</a></h4>
<ol>
<li>Make a copy of <code>dotenv-example</code> and name it <code>dotenv</code>.</li>
<li>Edit the <code>dotenv</code> file to your liking using a text editor (like <a href="https://code.visualstudio.com/">vscode</a>).</li>
<li>If you're using <code>make</code>, you can run <code>make run</code> to start and <code>make stop</code> to stop.<ol>
<li>There are more options in the <code>Makefile</code>, feel free to explore.</li>
</ol>
</li>
<li>If you do not have <code>make</code>, you can run <code>docker-compose</code> directly:</li>
</ol>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span>
<span class="normal">6</span>
<span class="normal">7</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code><span class="c1"># To start</span>
<span class="c1"># Use `-d` if you want to run in detached mode</span>
<span class="c1"># Use `--build` if you want to build the image before running (default image is latest in GitHub Container Registry).</span>
docker-compose up
<span class="c1"># To break down</span>
docker-compose down
</code></pre></div>
</td></tr></table>
<details class="note" open="open"><summary>Note</summary><p>If you are using <code>WEB_PORT</code>, then you will need to add the following to docker-compose:</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code>ports:
- &quot;&lt;WEB_PORT&gt;:&lt;WEB_PORT&gt;&quot;
</code></pre></div>
</td></tr></table>
<p>Replace <code>&lt;WEB_PORT&gt;</code> with the value you gave in your <code>dotenv</code>.</p>
</details>
<hr>
<div class="md-source-date">
<small>
Last update: 2021-03-04
</small>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href=".." class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
Home
</div>
</div>
</a>
<a href="../reference/application/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
Application
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2016 - 2020 Jef LeCompte
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-footer-social">
<a href="https://github.com/jef" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://twitter.com/hijxf" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://www.linkedin.com/in/jeflecompte" target="_blank" rel="noopener" title="www.linkedin.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["search.suggest"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../assets/javascripts/workers/search.fb4a9340.min.js", "version": null}</script>
<script src="../assets/javascripts/bundle.9b151c6a.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js"></script>
<script src="../javascripts/tables.js"></script>
</body>
</html>
-898
View File
@@ -1,898 +0,0 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="🤖 The world's easiest, most powerful stock checker">
<meta name="author" content="Jef LeCompte">
<link rel="canonical" href="https://jef.codes/streetmerchant/help/general/">
<link rel="shortcut icon" href="https://raw.githubusercontent.com/jef/streetmerchant/main/docs/assets/images/streetmerchant-logo.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.4">
<title>General - streetmerchant</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.77f3fd56.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.7fa14f5b.min.css">
<meta name="theme-color" content="#4051b5">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CFira+Code&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Fira Code"}</style>
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:title" content="streetmerchant - General" />
<meta property="og:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta property="og:url" content="https://jef.codes/streetmerchant/help/general/" />
<meta property="og:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1280" />
<meta property="og:image:height" content="640" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@hijxf" />
<meta name="twitter:creator" content="@hijxf" />
<meta name="twitter:title" content="streetmerchant - General" />
<meta name="twitter:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta name="twitter:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#general" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-header__button md-logo" aria-label="streetmerchant">
<img src="../../assets/images/streetmerchant-logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
streetmerchant
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
General
</span>
</div>
</div>
</div>
<div class="md-header__options">
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-nav__button md-logo" aria-label="streetmerchant">
<img src="../../assets/images/streetmerchant-logo.png" alt="logo">
</a>
streetmerchant
</label>
<div class="md-nav__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item">
<a href="../../getting-started/" class="md-nav__link">
Getting started
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3">
Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../reference/application/" class="md-nav__link">
Application
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/filter/" class="md-nav__link">
Filter
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/notification/" class="md-nav__link">
Notification
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/proxy/" class="md-nav__link">
Proxy
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/terraform/" class="md-nav__link">
Terraform
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" checked>
<label class="md-nav__link" for="__nav_4">
Help
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Help" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Help
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
General
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
General
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#adding-a-store" class="md-nav__link">
Adding a store
</a>
<nav class="md-nav" aria-label="Adding a store">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#creating-a-store-file" class="md-nav__link">
Creating a store file
</a>
<nav class="md-nav" aria-label="Creating a store file">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#how-to-grab-a-container-aka-selector" class="md-nav__link">
How to grab a container (aka selector)
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#updating-the-models" class="md-nav__link">
Updating the models
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#creating-a-discord-webhook" class="md-nav__link">
Creating a Discord webhook
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../troubleshoot/" class="md-nav__link">
Troubleshoot
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../faq/" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item">
<a href="../../changelog/" class="md-nav__link">
Changelog
</a>
</li>
<li class="md-nav__item">
<a href="../../about/" class="md-nav__link">
About
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#adding-a-store" class="md-nav__link">
Adding a store
</a>
<nav class="md-nav" aria-label="Adding a store">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#creating-a-store-file" class="md-nav__link">
Creating a store file
</a>
<nav class="md-nav" aria-label="Creating a store file">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#how-to-grab-a-container-aka-selector" class="md-nav__link">
How to grab a container (aka selector)
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#updating-the-models" class="md-nav__link">
Updating the models
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#creating-a-discord-webhook" class="md-nav__link">
Creating a Discord webhook
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/jef/streetmerchant/edit/master/docs/help/general.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1 id="general">General<a class="headerlink" href="#general" title="Permanent link">&para;</a></h1>
<h2 id="adding-a-store">Adding a store<a class="headerlink" href="#adding-a-store" title="Permanent link">&para;</a></h2>
<details class="note" open="open"><summary>Note</summary><p>This is subject to change in the future</p>
</details>
<p>In the following examples, I will be using "NewStore" as the store I'm wanting to add.</p>
<h3 id="creating-a-store-file">Creating a store file<a class="headerlink" href="#creating-a-store-file" title="Permanent link">&para;</a></h3>
<p>First, create a TypeScript file in <code>src/store/model</code>. In this example, I'll create a file named <code>new-store.ts</code>. At this point, you can copy and paste any of the other stores and change accordingly.</p>
<h4 id="how-to-grab-a-container-aka-selector">How to grab a container (aka selector)<a class="headerlink" href="#how-to-grab-a-container-aka-selector" title="Permanent link">&para;</a></h4>
<p>For the containers, what you'll wanna do is use <kbd>F12</kbd> on the site you want to Inspect and click this button</p>
<p><img alt="image" src="https://user-images.githubusercontent.com/12074633/100685326-2669da80-334a-11eb-93a9-8ac2c659f5f3.png" /></p>
<p>Hover over the item you want and it should give you the context:</p>
<p><img alt="image" src="https://user-images.githubusercontent.com/12074633/100685310-1e119f80-334a-11eb-91aa-b77b0ff6c2b1.png" /></p>
<p>You can also right-click on any website element and select 'Inspect'. That should also give you the same results.</p>
<p>Some people will decide to choose a parent element as it can be unique. Like this case!</p>
<p>I'd rather use <code>.button.spin-button.prod-ProductCTA--primary.button--primary</code> instead of <code>.spin-button-children</code> as there are probably other elements on the page that are also <code>.spin-button-children</code>.</p>
<p>The reason why we use these selectors anyway is to wait for the webpage to load these specific elements, to help eliminate false positives.</p>
<p>For easily getting the selector, you can also copy it by right clicking on the tag, Copy &gt; Copy selector.</p>
<p><img alt="image" src="https://user-images.githubusercontent.com/12074633/100933096-d2323800-34ba-11eb-8f06-d106f43b7ad3.png" /></p>
<h3 id="updating-the-models">Updating the models<a class="headerlink" href="#updating-the-models" title="Permanent link">&para;</a></h3>
<p>You'll now want to add the new store to <code>src/store/model/index.ts</code>.</p>
<p>This is what it will look like:</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code><span class="gd">--- a/src/store/model/index.ts</span>
<span class="gi">+++ b/src/store/model/index.ts</span>
<span class="gu">@@ -48,6 +48,7 @@ import {MicroCenter} from &#39;./microcenter&#39;;</span>
import {Mindfactory} from &#39;./mindfactory&#39;;
import {Newegg} from &#39;./newegg&#39;;
import {NeweggCa} from &#39;./newegg-ca&#39;;
<span class="gi">+import {NewStore} from &#39;./new-store&#39;;</span>
import {Notebooksbilliger} from &#39;./notebooksbilliger&#39;;
import {Novatech} from &#39;./novatech&#39;;
import {Nvidia} from &#39;./nvidia&#39;;
<span class="gu">@@ -123,6 +124,7 @@ export const storeList = new Map([</span>
[Mindfactory.name, Mindfactory],
[Newegg.name, Newegg],
[NeweggCa.name, NeweggCa],
<span class="gi">+ [NewStore.name, NewStore],</span>
[Notebooksbilliger.name, Notebooksbilliger],
[Novatech.name, Novatech],
[Nvidia.name, Nvidia],
</code></pre></div>
</td></tr></table>
<p>After that, you're pretty much set. If you plan on adding new models or series, you will have to add them to <code>src/store/model/store.ts</code> and <code>src/config.ts</code>.</p>
<p>Here's an example:</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code><span class="gd">--- a/src/store/model/store.ts</span>
<span class="gi">+++ b/src/store/model/store.ts</span>
<span class="gu">@@ -23,6 +23,7 @@ export type Brand =</span>
| &#39;kfa2&#39;
| &#39;microsoft&#39;
| &#39;msi&#39;
<span class="gi">+ | &#39;new brand&#39;</span>
| &#39;nvidia&#39;
| &#39;palit&#39;
| &#39;pny&#39;
<span class="gu">@@ -37,6 +38,7 @@ export type Series =</span>
| &#39;3070&#39;
| &#39;3080&#39;
| &#39;3090&#39;
<span class="gi">+ | &#39;new series&#39;</span>
| &#39;rx6800&#39;
| &#39;rx6800xt&#39;
| &#39;rx6900xt&#39;
<span class="gu">@@ -83,6 +85,7 @@ export type Model =</span>
| &#39;ichill x2&#39;
| &#39;ichill x3&#39;
| &#39;ichill x4&#39;
<span class="gi">+ | &#39;new model&#39;</span>
| &#39;nitro+&#39;
| &#39;nitro oc se&#39;
| &#39;nitro oc&#39;
</code></pre></div>
</td></tr></table>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code><span class="gd">--- a/src/config.ts</span>
<span class="gi">+++ b/src/config.ts</span>
<span class="gu">@@ -308,6 +308,7 @@ const store = {</span>
country: envOrString(process.env.COUNTRY, &#39;usa&#39;),
maxPrice: {
series: {
<span class="gi">+ &#39;new series&#39;: -1,</span>
&#39;3060ti&#39;: envOrNumber(process.env.MAX_PRICE_SERIES_3060TI),
3070: envOrNumber(process.env.MAX_PRICE_SERIES_3070),
3080: envOrNumber(process.env.MAX_PRICE_SERIES_3080),
<span class="gu">@@ -337,6 +338,7 @@ const store = {</span>
};
}),
showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, [
<span class="gi">+ &#39;new series&#39;,</span>
&#39;3060ti&#39;,
&#39;3070&#39;,
&#39;3080&#39;,
</code></pre></div>
</td></tr></table>
<p>And voila! You're done! If you'd like to contribute to the project, feel free to create a <a href="https://github.com/jef/streetmerchant/compare">Pull Request</a>! Don't forget to add the store (and brand, model, and series if you added) to the <code>README.md</code>.</p>
<details class="tip" open="open"><summary>Tip</summary><p>Here's an <a href="https://github.com/jef/streetmerchant/commit/af96c5f2e808af7496f3c3299e4cf173105de48b">example</a>. If you'd like to include a max price, you can add <code>MAX_PRICE_SERIES_NEW_SERIES</code> to the above instead of the <code>-1</code>.</p>
</details>
<h2 id="creating-a-discord-webhook">Creating a Discord webhook<a class="headerlink" href="#creating-a-discord-webhook" title="Permanent link">&para;</a></h2>
<p>Take a look at Discord's <a href="https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks">Intro to Webhooks</a>, that should get you going.</p>
<p>This is the main portion:</p>
<p><img alt="image" src="https://user-images.githubusercontent.com/12074633/101225522-a4d2bf00-365f-11eb-8c35-d0f013e561d6.png" /></p>
<p><img alt="image" src="https://user-images.githubusercontent.com/12074633/101225550-b87e2580-365f-11eb-8be6-48b324b37916.png" /></p>
<p>Use the full URL that you just copied and set that value to <code>DISCORD_WEB_HOOK</code>.</p>
<hr>
<div class="md-source-date">
<small>
Last update: 2021-03-04
</small>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../../reference/terraform/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
Terraform
</div>
</div>
</a>
<a href="../troubleshoot/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
Troubleshoot
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2016 - 2020 Jef LeCompte
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-footer-social">
<a href="https://github.com/jef" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://twitter.com/hijxf" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://www.linkedin.com/in/jeflecompte" target="_blank" rel="noopener" title="www.linkedin.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["search.suggest"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.fb4a9340.min.js", "version": null}</script>
<script src="../../assets/javascripts/bundle.9b151c6a.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js"></script>
<script src="../../javascripts/tables.js"></script>
</body>
</html>
-739
View File
@@ -1,739 +0,0 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="🤖 The world's easiest, most powerful stock checker">
<meta name="author" content="Jef LeCompte">
<link rel="canonical" href="https://jef.codes/streetmerchant/help/troubleshoot/">
<link rel="shortcut icon" href="https://raw.githubusercontent.com/jef/streetmerchant/main/docs/assets/images/streetmerchant-logo.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.4">
<title>Troubleshoot - streetmerchant</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.77f3fd56.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.7fa14f5b.min.css">
<meta name="theme-color" content="#4051b5">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CFira+Code&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Fira Code"}</style>
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:title" content="streetmerchant - Troubleshoot" />
<meta property="og:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta property="og:url" content="https://jef.codes/streetmerchant/help/troubleshoot/" />
<meta property="og:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1280" />
<meta property="og:image:height" content="640" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@hijxf" />
<meta name="twitter:creator" content="@hijxf" />
<meta name="twitter:title" content="streetmerchant - Troubleshoot" />
<meta name="twitter:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta name="twitter:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#troubleshoot" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-header__button md-logo" aria-label="streetmerchant">
<img src="../../assets/images/streetmerchant-logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
streetmerchant
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Troubleshoot
</span>
</div>
</div>
</div>
<div class="md-header__options">
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-nav__button md-logo" aria-label="streetmerchant">
<img src="../../assets/images/streetmerchant-logo.png" alt="logo">
</a>
streetmerchant
</label>
<div class="md-nav__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item">
<a href="../../getting-started/" class="md-nav__link">
Getting started
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3">
Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../reference/application/" class="md-nav__link">
Application
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/filter/" class="md-nav__link">
Filter
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/notification/" class="md-nav__link">
Notification
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/proxy/" class="md-nav__link">
Proxy
</a>
</li>
<li class="md-nav__item">
<a href="../../reference/terraform/" class="md-nav__link">
Terraform
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" checked>
<label class="md-nav__link" for="__nav_4">
Help
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Help" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Help
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../general/" class="md-nav__link">
General
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Troubleshoot
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Troubleshoot
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#captcha-issues" class="md-nav__link">
Captcha issues
</a>
<nav class="md-nav" aria-label="Captcha issues">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#option-1" class="md-nav__link">
Option 1
</a>
</li>
<li class="md-nav__item">
<a href="#option-2" class="md-nav__link">
Option 2
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#macos-code-signing" class="md-nav__link">
macOS code signing
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../faq/" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item">
<a href="../../changelog/" class="md-nav__link">
Changelog
</a>
</li>
<li class="md-nav__item">
<a href="../../about/" class="md-nav__link">
About
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#captcha-issues" class="md-nav__link">
Captcha issues
</a>
<nav class="md-nav" aria-label="Captcha issues">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#option-1" class="md-nav__link">
Option 1
</a>
</li>
<li class="md-nav__item">
<a href="#option-2" class="md-nav__link">
Option 2
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#macos-code-signing" class="md-nav__link">
macOS code signing
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/jef/streetmerchant/edit/master/docs/help/troubleshoot.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1 id="troubleshoot">Troubleshoot<a class="headerlink" href="#troubleshoot" title="Permanent link">&para;</a></h1>
<h2 id="captcha-issues">Captcha issues<a class="headerlink" href="#captcha-issues" title="Permanent link">&para;</a></h2>
<h3 id="option-1">Option 1<a class="headerlink" href="#option-1" title="Permanent link">&para;</a></h3>
<p>If you're running into problems, try running in headful mode: <code>HEADLESS="false"</code>.</p>
<p>This will open a browser and run streetmerchant. Note that this isn't a great solution for those running in a headless environment, i.e.: VPS, cloud, docker. Instead, it would be a good solution for those running on separate computer that won't be blocked by running in the background.</p>
<h3 id="option-2">Option 2<a class="headerlink" href="#option-2" title="Permanent link">&para;</a></h3>
<p>As a last case scenario, use <code>PUPPETEER_EXECUTABLE_PATH</code>. This will use your computer's Chrome browser. You can run this is headless or headful mode.</p>
<blockquote>
<p>From the puppeteer doc:</p>
<p><code>PUPPETEER_EXECUTABLE_PATH</code> - specify an executable path to be used in <code>puppeteer.launch</code>. See <a href="https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#puppeteerlaunchoptions">puppeteer.launch([options])</a> on how the executable path is inferred. <strong>BEWARE</strong>: Puppeteer is only <a href="https://github.com/puppeteer/puppeteer/#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy">guaranteed to work</a> with the bundled Chromium, use at your own risk.</p>
</blockquote>
<p>For example:</p>
<p><code>dotenv</code>:</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code>PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome-stable
</code></pre></div>
</td></tr></table>
<p>This will vary depending on your operating system and install path. Please use full paths.</p>
<h2 id="macos-code-signing">macOS code signing<a class="headerlink" href="#macos-code-signing" title="Permanent link">&para;</a></h2>
<p>If you're getting a popup like this:</p>
<p><img alt="image" src="https://user-images.githubusercontent.com/12074633/93616357-a36bf180-f9a2-11ea-82fa-da2a44807802.png" /></p>
<p>Then run this command:</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code>sudo codesign --force --deep --sign - ./node_modules/puppeteer/.local-chromium/mac-800071/chrome-mac/Chromium.app
</code></pre></div>
</td></tr></table>
<details class="tip" open="open"><summary>Tip</summary><p>The <code>mac-800071</code> may be different on your machine, so I would start from <code>./node_modules/puppeteer/.local-chromium</code> and auto complete from there.</p>
</details>
<hr>
<div class="md-source-date">
<small>
Last update: 2021-03-04
</small>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../general/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
General
</div>
</div>
</a>
<a href="../../faq/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
FAQ
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2016 - 2020 Jef LeCompte
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-footer-social">
<a href="https://github.com/jef" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://twitter.com/hijxf" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://www.linkedin.com/in/jeflecompte" target="_blank" rel="noopener" title="www.linkedin.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["search.suggest"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.fb4a9340.min.js", "version": null}</script>
<script src="../../assets/javascripts/bundle.9b151c6a.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js"></script>
<script src="../../javascripts/tables.js"></script>
</body>
</html>
-738
View File
@@ -1,738 +0,0 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="🤖 The world's easiest, most powerful stock checker">
<meta name="author" content="Jef LeCompte">
<link rel="canonical" href="https://jef.codes/streetmerchant/">
<link rel="shortcut icon" href="https://raw.githubusercontent.com/jef/streetmerchant/main/docs/assets/images/streetmerchant-logo.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.4">
<title>streetmerchant</title>
<link rel="stylesheet" href="assets/stylesheets/main.77f3fd56.min.css">
<link rel="stylesheet" href="assets/stylesheets/palette.7fa14f5b.min.css">
<meta name="theme-color" content="#4051b5">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CFira+Code&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Fira Code"}</style>
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:title" content="streetmerchant" />
<meta property="og:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta property="og:url" content="https://jef.codes/streetmerchant/" />
<meta property="og:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1280" />
<meta property="og:image:height" content="640" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@hijxf" />
<meta name="twitter:creator" content="@hijxf" />
<meta name="twitter:title" content="streetmerchant" />
<meta name="twitter:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta name="twitter:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#features" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-header__button md-logo" aria-label="streetmerchant">
<img src="assets/images/streetmerchant-logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
streetmerchant
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Home
</span>
</div>
</div>
</div>
<div class="md-header__options">
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-nav__button md-logo" aria-label="streetmerchant">
<img src="assets/images/streetmerchant-logo.png" alt="logo">
</a>
streetmerchant
</label>
<div class="md-nav__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Home
<span class="md-nav__icon md-icon"></span>
</label>
<a href="." class="md-nav__link md-nav__link--active">
Home
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#features" class="md-nav__link">
Features
</a>
</li>
<li class="md-nav__item">
<a href="#getting-started" class="md-nav__link">
Getting started
</a>
<nav class="md-nav" aria-label="Getting started">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#contributing" class="md-nav__link">
Contributing
</a>
</li>
<li class="md-nav__item">
<a href="#looking-for-help" class="md-nav__link">
Looking for help
</a>
</li>
<li class="md-nav__item">
<a href="#supporting-the-project" class="md-nav__link">
Supporting the project
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="getting-started/" class="md-nav__link">
Getting started
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3">
Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="reference/application/" class="md-nav__link">
Application
</a>
</li>
<li class="md-nav__item">
<a href="reference/filter/" class="md-nav__link">
Filter
</a>
</li>
<li class="md-nav__item">
<a href="reference/notification/" class="md-nav__link">
Notification
</a>
</li>
<li class="md-nav__item">
<a href="reference/proxy/" class="md-nav__link">
Proxy
</a>
</li>
<li class="md-nav__item">
<a href="reference/terraform/" class="md-nav__link">
Terraform
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4">
Help
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Help" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Help
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="help/general/" class="md-nav__link">
General
</a>
</li>
<li class="md-nav__item">
<a href="help/troubleshoot/" class="md-nav__link">
Troubleshoot
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="faq/" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item">
<a href="changelog/" class="md-nav__link">
Changelog
</a>
</li>
<li class="md-nav__item">
<a href="about/" class="md-nav__link">
About
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#features" class="md-nav__link">
Features
</a>
</li>
<li class="md-nav__item">
<a href="#getting-started" class="md-nav__link">
Getting started
</a>
<nav class="md-nav" aria-label="Getting started">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#contributing" class="md-nav__link">
Contributing
</a>
</li>
<li class="md-nav__item">
<a href="#looking-for-help" class="md-nav__link">
Looking for help
</a>
</li>
<li class="md-nav__item">
<a href="#supporting-the-project" class="md-nav__link">
Supporting the project
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/jef/streetmerchant/edit/master/docs/index.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>Home</h1>
<p><a href="https://jef.codes/streetmerchant"><img alt="streetmerchant" src="assets/images/streetmerchant-banner.png" /></a></p>
<h2 id="features">Features<a class="headerlink" href="#features" title="Permanent link">&para;</a></h2>
<p>First and foremost, this service <em>will not</em> automatically buy for you.</p>
<ul>
<li><strong>Checks stock continuously</strong> -- runs 24/7, 365, looking for the items you want.</li>
<li><strong>Ready for checkout</strong> -- ability to add to cart when available and even opens the browser for you.</li>
<li><strong>Notifications galore</strong> -- when you're not by your computer, worry free with notifications to most platforms and devices when an item comes in stock.</li>
</ul>
<h2 id="getting-started">Getting started<a class="headerlink" href="#getting-started" title="Permanent link">&para;</a></h2>
<p>You'll find most of the content on the left sidebar. The right sidebar will help you navigate a page.</p>
<h3 id="contributing">Contributing<a class="headerlink" href="#contributing" title="Permanent link">&para;</a></h3>
<ul>
<li>Give helpful tips and tricks to the <a href="https://github.com/jef/streetmerchant/wiki">community based wiki</a>.</li>
<li>Add to the documentation through <a href="https://github.com/jef/streetmerchant/pulls">pull requests</a>.</li>
<li>Fork and make a pull request to the repository.</li>
</ul>
<h3 id="looking-for-help">Looking for help<a class="headerlink" href="#looking-for-help" title="Permanent link">&para;</a></h3>
<ul>
<li>Have an idea, question, or need help? Visit our <a href="https://github.com/jef/streetmerchant/discussions">GitHub discussion board</a>.</li>
<li>Ran into a bug? File a <a href="https://github.com/jef/streetmerchant/issues/new/choose">GitHub issue</a>.</li>
<li>Looking to hang out and talk shop? Join us on <a href="https://discord.gg/gbVY4vB9JF">Discord</a>.</li>
</ul>
<h3 id="supporting-the-project">Supporting the project<a class="headerlink" href="#supporting-the-project" title="Permanent link">&para;</a></h3>
<p>The best way to support me is to donate to <a href="https://www.diabetesresearch.org/Give">Diabetes Research Institute</a>.</p>
<blockquote>
<p>The Diabetes Research Institute leads the world in cure-focused diabetes research.</p>
<p><a href="https://www.diabetesresearch.org/about-DRI">diabetesresearch.org</a></p>
</blockquote>
<p>If you feel inclined to support me directly, here are those options:</p>
<ul>
<li><a href="https://github.com/sponsors/jef">GitHub Sponsors</a></li>
<li><a href="https://www.paypal.me/jxf">Paypal</a></li>
</ul>
<hr>
<div class="md-source-date">
<small>
Last update: 2021-03-04
</small>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="getting-started/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
Getting started
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2016 - 2020 Jef LeCompte
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-footer-social">
<a href="https://github.com/jef" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://twitter.com/hijxf" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://www.linkedin.com/in/jeflecompte" target="_blank" rel="noopener" title="www.linkedin.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": ".", "features": ["search.suggest"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "assets/javascripts/workers/search.fb4a9340.min.js", "version": null}</script>
<script src="assets/javascripts/bundle.9b151c6a.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js"></script>
<script src="javascripts/tables.js"></script>
</body>
</html>
-6
View File
@@ -1,6 +0,0 @@
app.document$.subscribe(() => {
const tables = document.querySelectorAll('article table');
tables.forEach(table => {
new Tablesort(table);
});
});
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

+8
View File
@@ -0,0 +1,8 @@
{
"exec": "ts-node --files ./src/index",
"ext": "ts",
"watch": [
"src/",
".env"
]
}
-30
View File
@@ -1,30 +0,0 @@
{% extends "base.html" %}
{% block extrahead %}
{% set title = config.site_name %}
{% if page and page.meta and page.meta.title %}
{% set title = title ~ " - " ~ page.meta.title %}
{% elif page and page.title and not page.is_homepage %}
{% set title = title ~ " - " ~ page.title | striptags %}
{% endif %}
{% set image = config.site_url ~ '/assets/images/streetmerchant-github.png' %}
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:title" content="{{ title }}" />
<meta property="og:description" content="{{ config.site_description }}" />
<meta property="og:url" content="{{ page.canonical_url }}" />
<meta property="og:image" content="{{ image }}" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1280" />
<meta property="og:image:height" content="640" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@hijxf" />
<meta name="twitter:creator" content="@hijxf" />
<meta name="twitter:title" content="{{ title }}" />
<meta name="twitter:description" content="{{ config.site_description }}" />
<meta name="twitter:image" content="{{ image }}" />
{% endblock %}
+11724
View File
File diff suppressed because it is too large Load Diff
+87
View File
@@ -0,0 +1,87 @@
{
"name": "streetmerchant",
"description": "🔮 For all your Nvidia needs",
"main": "src/index.ts",
"scripts": {
"all": "npm run build && npm run lint",
"build": "tsc",
"lint": "xo",
"lint:fix": "xo --fix",
"start": "npm run build && node build/index.js",
"start:dev": "nodemon --config nodemon.json",
"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/streetmerchant.git"
},
"keywords": [],
"author": "jef",
"license": "MIT",
"bugs": {
"url": "https://github.com/jef/streetmerchant/issues"
},
"homepage": "https://github.com/jef/streetmerchant#readme",
"dependencies": {
"@jef/pushbullet": "^2.4.3",
"@slack/web-api": "^5.14.0",
"chalk": "^4.1.0",
"cheerio": "^1.0.0-rc.3",
"discord.js": "^12.5.1",
"dotenv": "^8.2.0",
"messaging-api-telegram": "^1.0.1",
"mqtt": "^4.2.6",
"node-fetch": "^2.6.1",
"node-hue-api": "^4.0.9",
"node-notifier": "^8.0.0",
"node-pagerduty": "^1.3.6",
"nodemailer": "^6.4.16",
"open": "^7.3.0",
"play-sound": "^1.1.3",
"puppeteer": "^5.5.0",
"puppeteer-extra": "^3.1.15",
"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.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.5",
"@types/cheerio": "^0.22.22",
"@types/node": "^14.14.10",
"@types/node-fetch": "^2.5.7",
"@types/node-notifier": "^8.0.0",
"@types/nodemailer": "^6.4.0",
"@types/puppeteer": "^5.4.1",
"@types/twitter": "^1.7.0",
"husky": "^4.3.0",
"nodemon": "^2.0.6",
"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"
}
},
"husky": {
"hooks": {
"pre-commit": "npm run all"
}
}
}
-709
View File
@@ -1,709 +0,0 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="🤖 The world's easiest, most powerful stock checker">
<meta name="author" content="Jef LeCompte">
<link rel="canonical" href="https://jef.codes/streetmerchant/reference/application/">
<link rel="shortcut icon" href="https://raw.githubusercontent.com/jef/streetmerchant/main/docs/assets/images/streetmerchant-logo.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.4">
<title>Application - streetmerchant</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.77f3fd56.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.7fa14f5b.min.css">
<meta name="theme-color" content="#4051b5">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CFira+Code&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Fira Code"}</style>
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:title" content="streetmerchant - Application" />
<meta property="og:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta property="og:url" content="https://jef.codes/streetmerchant/reference/application/" />
<meta property="og:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1280" />
<meta property="og:image:height" content="640" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@hijxf" />
<meta name="twitter:creator" content="@hijxf" />
<meta name="twitter:title" content="streetmerchant - Application" />
<meta name="twitter:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta name="twitter:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#application" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-header__button md-logo" aria-label="streetmerchant">
<img src="../../assets/images/streetmerchant-logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
streetmerchant
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Application
</span>
</div>
</div>
</div>
<div class="md-header__options">
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-nav__button md-logo" aria-label="streetmerchant">
<img src="../../assets/images/streetmerchant-logo.png" alt="logo">
</a>
streetmerchant
</label>
<div class="md-nav__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item">
<a href="../../getting-started/" class="md-nav__link">
Getting started
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" checked>
<label class="md-nav__link" for="__nav_3">
Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active">
Application
</a>
</li>
<li class="md-nav__item">
<a href="../filter/" class="md-nav__link">
Filter
</a>
</li>
<li class="md-nav__item">
<a href="../notification/" class="md-nav__link">
Notification
</a>
</li>
<li class="md-nav__item">
<a href="../proxy/" class="md-nav__link">
Proxy
</a>
</li>
<li class="md-nav__item">
<a href="../terraform/" class="md-nav__link">
Terraform
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4">
Help
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Help" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Help
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../help/general/" class="md-nav__link">
General
</a>
</li>
<li class="md-nav__item">
<a href="../../help/troubleshoot/" class="md-nav__link">
Troubleshoot
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../faq/" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item">
<a href="../../changelog/" class="md-nav__link">
Changelog
</a>
</li>
<li class="md-nav__item">
<a href="../../about/" class="md-nav__link">
About
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/jef/streetmerchant/edit/master/docs/reference/application.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1 id="application">Application<a class="headerlink" href="#application" title="Permanent link">&para;</a></h1>
<table>
<thead>
<tr>
<th align="center">Environment variable</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center"><code>AUTO_ADD_TO_CART</code></td>
<td>Enable auto add to cart on support stores, default: <code>true</code></td>
</tr>
<tr>
<td align="center"><code>BROWSER_TRUSTED</code></td>
<td>Skip Chromium Sandbox. Useful for containerized environments, default: <code>false</code></td>
</tr>
<tr>
<td align="center"><code>HEADLESS</code></td>
<td>Puppeteer to run headless or not. Debugging related, default: <code>true</code></td>
</tr>
<tr>
<td align="center"><code>INCOGNITO</code></td>
<td>Puppeteer to run incognito or not. Debugging related, default: <code>false</code></td>
</tr>
<tr>
<td align="center"><code>IN_STOCK_WAIT_TIME</code></td>
<td>Time to wait between requests to the same link if it has that card in stock. In seconds, default: <code>0</code></td>
</tr>
<tr>
<td align="center"><code>LOG_LEVEL</code></td>
<td><a href="https://github.com/winstonjs/winston#logging-levels">Logging levels</a>. Debugging related, default: <code>info</code></td>
</tr>
<tr>
<td align="center"><code>LOW_BANDWIDTH</code></td>
<td>Blocks images/fonts to reduce traffic. Disables ad blocker, default: <code>false</code></td>
</tr>
<tr>
<td align="center"><code>OPEN_BROWSER</code></td>
<td>Toggle for whether or not the browser should open when item is found. Default: <code>true</code></td>
</tr>
<tr>
<td align="center"><code>PAGE_BACKOFF_MIN</code></td>
<td>Minimum backoff time between retrying requests for the same store when a forbidden response is received. Default: <code>10000</code></td>
</tr>
<tr>
<td align="center"><code>PAGE_BACKOFF_MAX</code></td>
<td>Maximum backoff time between retrying requests for the same store when a forbidden response is received. Default: <code>3600000</code></td>
</tr>
<tr>
<td align="center"><code>PAGE_SLEEP_MIN</code></td>
<td>Minimum sleep time between queries of the same product page. In milliseconds, default: <code>5000</code></td>
</tr>
<tr>
<td align="center"><code>PAGE_SLEEP_MAX</code></td>
<td>Maximum sleep time between queries of the same product page. In milliseconds, default: <code>10000</code></td>
</tr>
<tr>
<td align="center"><code>PAGE_TIMEOUT</code></td>
<td>Navigation Timeout in milliseconds. <code>0</code> for infinite, default: <code>30000</code></td>
</tr>
<tr>
<td align="center"><code>PROXY_PROTOCOL</code></td>
<td>Protocol of proxy server, such as <code>socks5</code>. Default: <code>http</code></td>
</tr>
<tr>
<td align="center"><code>PROXY_ADDRESS</code></td>
<td>IP Address or fqdn of proxy server</td>
</tr>
<tr>
<td align="center"><code>PROXY_PORT</code></td>
<td>TCP Port number on which the proxy is listening for connections. Default: <code>80</code></td>
</tr>
<tr>
<td align="center"><code>RESTART_TIME</code></td>
<td>Restarts chrome after defined milliseconds. <code>0</code> for never, default: <code>0</code></td>
</tr>
<tr>
<td align="center"><code>SCREENSHOT</code></td>
<td>Capture screenshot of page if a card is found. Default: <code>true</code></td>
</tr>
<tr>
<td align="center"><code>WEB_PORT</code></td>
<td>Starts a webserver to be able to control the bot while it is running. Setting this value starts this service.</td>
</tr>
</tbody>
</table>
<details class="info" open="open"><summary>Info</summary><p>There is more information on proxy settings in the <a href="../proxy/">Proxy documentation</a>.</p>
</details>
<details class="tip" open="open"><summary>Tip</summary><ul>
<li>You can also have a list of proxies that are rotated while searching stores. Proxies can be read from a file named <code>STORENAME.proxies</code> in the format of <code>socks5://username:password@ip</code>; one per line.</li>
<li>Data usage is <a href="https://github.com/jef/streetmerchant/issues?q=is%3Aissue+sort%3Aupdated-desc+bandwidth">known to be high</a>. This is expected as the program scrapes many websites in parallel 24/7. To help reduce this, use <code>LOW_BANDWIDTH="true"</code>. We are looking into other solutions as well, but is low priority.</li>
</ul>
</details>
<hr>
<div class="md-source-date">
<small>
Last update: 2021-03-04
</small>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../../getting-started/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
Getting started
</div>
</div>
</a>
<a href="../filter/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
Filter
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2016 - 2020 Jef LeCompte
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-footer-social">
<a href="https://github.com/jef" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://twitter.com/hijxf" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://www.linkedin.com/in/jeflecompte" target="_blank" rel="noopener" title="www.linkedin.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["search.suggest"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.fb4a9340.min.js", "version": null}</script>
<script src="../../assets/javascripts/bundle.9b151c6a.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js"></script>
<script src="../../javascripts/tables.js"></script>
</body>
</html>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-686
View File
@@ -1,686 +0,0 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="🤖 The world's easiest, most powerful stock checker">
<meta name="author" content="Jef LeCompte">
<link rel="canonical" href="https://jef.codes/streetmerchant/reference/proxy/">
<link rel="shortcut icon" href="https://raw.githubusercontent.com/jef/streetmerchant/main/docs/assets/images/streetmerchant-logo.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.4">
<title>Proxy - streetmerchant</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.77f3fd56.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.7fa14f5b.min.css">
<meta name="theme-color" content="#4051b5">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CFira+Code&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Fira Code"}</style>
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:title" content="streetmerchant - Proxy" />
<meta property="og:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta property="og:url" content="https://jef.codes/streetmerchant/reference/proxy/" />
<meta property="og:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1280" />
<meta property="og:image:height" content="640" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@hijxf" />
<meta name="twitter:creator" content="@hijxf" />
<meta name="twitter:title" content="streetmerchant - Proxy" />
<meta name="twitter:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta name="twitter:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#proxy" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-header__button md-logo" aria-label="streetmerchant">
<img src="../../assets/images/streetmerchant-logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
streetmerchant
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Proxy
</span>
</div>
</div>
</div>
<div class="md-header__options">
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-nav__button md-logo" aria-label="streetmerchant">
<img src="../../assets/images/streetmerchant-logo.png" alt="logo">
</a>
streetmerchant
</label>
<div class="md-nav__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item">
<a href="../../getting-started/" class="md-nav__link">
Getting started
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" checked>
<label class="md-nav__link" for="__nav_3">
Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../application/" class="md-nav__link">
Application
</a>
</li>
<li class="md-nav__item">
<a href="../filter/" class="md-nav__link">
Filter
</a>
</li>
<li class="md-nav__item">
<a href="../notification/" class="md-nav__link">
Notification
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Proxy
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Proxy
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#filename" class="md-nav__link">
Filename
</a>
</li>
<li class="md-nav__item">
<a href="#format" class="md-nav__link">
Format
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../terraform/" class="md-nav__link">
Terraform
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4">
Help
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Help" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Help
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../help/general/" class="md-nav__link">
General
</a>
</li>
<li class="md-nav__item">
<a href="../../help/troubleshoot/" class="md-nav__link">
Troubleshoot
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../faq/" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item">
<a href="../../changelog/" class="md-nav__link">
Changelog
</a>
</li>
<li class="md-nav__item">
<a href="../../about/" class="md-nav__link">
About
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#filename" class="md-nav__link">
Filename
</a>
</li>
<li class="md-nav__item">
<a href="#format" class="md-nav__link">
Format
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/jef/streetmerchant/edit/master/docs/reference/proxy.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1 id="proxy">Proxy<a class="headerlink" href="#proxy" title="Permanent link">&para;</a></h1>
<h2 id="filename">Filename<a class="headerlink" href="#filename" title="Permanent link">&para;</a></h2>
<p>Proxy configuration can be set either per store in a file called <code>storename.proxies</code> or globally in <code>global.proxies</code> in the streetmerchant root directory.</p>
<p>If both exist, the store specific file will take precedence.</p>
<h2 id="format">Format<a class="headerlink" href="#format" title="Permanent link">&para;</a></h2>
<p>The format is one proxy per line with the following structure:
<code>protocol://[user:password@]ip[:port]</code></p>
<p>Supported protocols are <code>http</code> and <code>socks5</code>.</p>
<p>Valid examples include:
- <code>socks5://1.2.3.4:3180</code>
- <code>socks5://abcd:efgh@1.2.3.4:5678</code>
- <code>http://1.2.3.4:80</code>
- <code>http://abcd:efgh@1.2.3.4:8080</code></p>
<hr>
<div class="md-source-date">
<small>
Last update: 2021-03-04
</small>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../notification/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
Notification
</div>
</div>
</a>
<a href="../terraform/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
Terraform
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2016 - 2020 Jef LeCompte
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-footer-social">
<a href="https://github.com/jef" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://twitter.com/hijxf" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://www.linkedin.com/in/jeflecompte" target="_blank" rel="noopener" title="www.linkedin.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["search.suggest"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.fb4a9340.min.js", "version": null}</script>
<script src="../../assets/javascripts/bundle.9b151c6a.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js"></script>
<script src="../../javascripts/tables.js"></script>
</body>
</html>
-702
View File
@@ -1,702 +0,0 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="🤖 The world's easiest, most powerful stock checker">
<meta name="author" content="Jef LeCompte">
<link rel="canonical" href="https://jef.codes/streetmerchant/reference/terraform/">
<link rel="shortcut icon" href="https://raw.githubusercontent.com/jef/streetmerchant/main/docs/assets/images/streetmerchant-logo.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.4">
<title>Terraform - streetmerchant</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.77f3fd56.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.7fa14f5b.min.css">
<meta name="theme-color" content="#4051b5">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CFira+Code&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Fira Code"}</style>
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:title" content="streetmerchant - Terraform" />
<meta property="og:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta property="og:url" content="https://jef.codes/streetmerchant/reference/terraform/" />
<meta property="og:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1280" />
<meta property="og:image:height" content="640" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@hijxf" />
<meta name="twitter:creator" content="@hijxf" />
<meta name="twitter:title" content="streetmerchant - Terraform" />
<meta name="twitter:description" content="🤖 The world's easiest, most powerful stock checker" />
<meta name="twitter:image" content="https://jef.codes/streetmerchant/assets/images/streetmerchant-github.png" />
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#terraform-for-aws-fargate" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-header__button md-logo" aria-label="streetmerchant">
<img src="../../assets/images/streetmerchant-logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
streetmerchant
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Terraform
</span>
</div>
</div>
</div>
<div class="md-header__options">
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://jef.codes/streetmerchant" title="streetmerchant" class="md-nav__button md-logo" aria-label="streetmerchant">
<img src="../../assets/images/streetmerchant-logo.png" alt="logo">
</a>
streetmerchant
</label>
<div class="md-nav__source">
<a href="https://github.com/jef/streetmerchant/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 0 1 .48-.5h5a.47.47 0 0 1 .48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 1 0 2.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"/><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 0 0-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0 0 12 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 0 0-2.265-.866 1.725 1.725 0 0 0-2.141 1.196 23.645 23.645 0 0 0-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 0 0-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"/></svg>
</div>
<div class="md-source__repository">
jef/streetmerchant
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item">
<a href="../../getting-started/" class="md-nav__link">
Getting started
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" checked>
<label class="md-nav__link" for="__nav_3">
Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../application/" class="md-nav__link">
Application
</a>
</li>
<li class="md-nav__item">
<a href="../filter/" class="md-nav__link">
Filter
</a>
</li>
<li class="md-nav__item">
<a href="../notification/" class="md-nav__link">
Notification
</a>
</li>
<li class="md-nav__item">
<a href="../proxy/" class="md-nav__link">
Proxy
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Terraform
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Terraform
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#getting-started" class="md-nav__link">
Getting started
</a>
</li>
<li class="md-nav__item">
<a href="#whats-included" class="md-nav__link">
What's included
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4">
Help
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Help" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Help
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../help/general/" class="md-nav__link">
General
</a>
</li>
<li class="md-nav__item">
<a href="../../help/troubleshoot/" class="md-nav__link">
Troubleshoot
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../faq/" class="md-nav__link">
FAQ
</a>
</li>
<li class="md-nav__item">
<a href="../../changelog/" class="md-nav__link">
Changelog
</a>
</li>
<li class="md-nav__item">
<a href="../../about/" class="md-nav__link">
About
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#getting-started" class="md-nav__link">
Getting started
</a>
</li>
<li class="md-nav__item">
<a href="#whats-included" class="md-nav__link">
What's included
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/jef/streetmerchant/edit/master/docs/reference/terraform.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1 id="terraform-for-aws-fargate">Terraform for AWS Fargate<a class="headerlink" href="#terraform-for-aws-fargate" title="Permanent link">&para;</a></h1>
<p>Here is a configurable terraform to get you up and running with the streetmerchant docker image in AWS ECS Fargate.</p>
<p>Running on cloud infrastructure (your mileage may vary), you'll need to integrate with one of the chat notifications rather than having your local browser navigate to a URL for you.</p>
<p>The author's findings were that it worked ok; running the container from within EU-West-2 region was sufficient to get a timely alert for PS5 stock on Aamzon and follow the link to a successful checkout.</p>
<p>Dependencies:</p>
<ul>
<li>Terraform 14</li>
</ul>
<h2 id="getting-started">Getting started<a class="headerlink" href="#getting-started" title="Permanent link">&para;</a></h2>
<p>There's an example tfvars file to start you off; rename this with your own preferences. Anything you can set in the <code>dotenv</code> file you'll need to set in terraform.tfvars to get the env vars into your fargate container.</p>
<p>Authenticate yourself with your own AWS account as with any aws commandline tool.</p>
<p>If you wish, add a specific section to your aws credentials file and set that profile name in <code>terraform.tfvars</code>.</p>
<p>Then you can:</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code><span class="nb">cd</span> ./terraform
terraform init
terraform plan
terraform apply
</code></pre></div>
</td></tr></table>
<h2 id="whats-included">What's included<a class="headerlink" href="#whats-included" title="Permanent link">&para;</a></h2>
<ul>
<li>container running streetmerchant with your chosen config</li>
<li>cloud metrics and a dashboard tracking 'out of stock' and 'error' responses from your configured stores</li>
</ul>
<hr>
<div class="md-source-date">
<small>
Last update: 2021-03-04
</small>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../proxy/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
Proxy
</div>
</div>
</a>
<a href="../../help/general/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
General
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright &copy; 2016 - 2020 Jef LeCompte
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-footer-social">
<a href="https://github.com/jef" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://twitter.com/hijxf" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://www.linkedin.com/in/jeflecompte" target="_blank" rel="noopener" title="www.linkedin.com" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["search.suggest"], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.fb4a9340.min.js", "version": null}</script>
<script src="../../assets/javascripts/bundle.9b151c6a.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js"></script>
<script src="../../javascripts/tables.js"></script>
</body>
</html>
File diff suppressed because one or more lines are too long
-51
View File
@@ -1,51 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url>
<loc>https://jef.codes/streetmerchant/</loc>
<lastmod>2021-03-04</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>https://jef.codes/streetmerchant/getting-started/</loc>
<lastmod>2021-03-04</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>https://jef.codes/streetmerchant/reference/application/</loc>
<lastmod>2021-03-04</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>https://jef.codes/streetmerchant/reference/filter/</loc>
<lastmod>2021-03-04</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>https://jef.codes/streetmerchant/reference/notification/</loc>
<lastmod>2021-03-04</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>https://jef.codes/streetmerchant/reference/proxy/</loc>
<lastmod>2021-03-04</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>https://jef.codes/streetmerchant/reference/terraform/</loc>
<lastmod>2021-03-04</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>https://jef.codes/streetmerchant/help/general/</loc>
<lastmod>2021-03-04</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>https://jef.codes/streetmerchant/help/troubleshoot/</loc>
<lastmod>2021-03-04</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>https://jef.codes/streetmerchant/faq/</loc>
<lastmod>2021-03-04</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>https://jef.codes/streetmerchant/changelog/</loc>
<lastmod>2021-03-04</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>https://jef.codes/streetmerchant/about/</loc>
<lastmod>2021-03-04</lastmod>
<changefreq>daily</changefreq>
</url>
</urlset>
BIN
View File
Binary file not shown.
+27
View File
@@ -0,0 +1,27 @@
import {Link, Store} from '../store/model';
import {sendNotification} from '../notification';
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'
};
const store: Store = {
labels: {
inStock: {
container: 'test:container',
text: ['test:text']
}
},
links: [link],
name: 'test:name'
};
/**
* Send test email.
*/
sendNotification(link, store);
+24
View File
@@ -0,0 +1,24 @@
import {Page} from 'puppeteer';
import {PuppeteerExtraPluginAdblocker} from 'puppeteer-extra-plugin-adblocker';
export const adBlocker = new PuppeteerExtraPluginAdblocker({
blockTrackers: true
});
export async function enableBlockerInPage(page: Page) {
const blockerObject = await adBlocker.getBlocker();
if (blockerObject.isBlockingEnabled(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);
}
+25
View File
@@ -0,0 +1,25 @@
import chalk from 'chalk';
import {readFileSync} from 'fs';
const version = readFileSync('version.txt', 'utf8');
export const banner = {
asciiVersion: `
██████ ▄▄▄█████▓ ██▀███ ▓█████ ▓█████▄▄▄█████▓ ███▄ ▄███▓▓█████ ██▀███ ▄████▄ ██░ ██ ▄▄▄ ███▄ █ ▄▄▄█████▓
▒██ ▒ ▓ ██▒ ▓▒▓██ ▒ ██▒▓█ ▀ ▓█ ▀▓ ██▒ ▓▒▓██▒▀█▀ ██▒▓█ ▀ ▓██ ▒ ██▒▒██▀ ▀█ ▓██░ ██▒▒████▄ ██ ▀█ █ ▓ ██▒ ▓▒
░ ▓██▄ ▒ ▓██░ ▒░▓██ ░▄█ ▒▒███ ▒███ ▒ ▓██░ ▒░▓██ ▓██░▒███ ▓██ ░▄█ ▒▒▓█ ▄ ▒██▀▀██░▒██ ▀█▄ ▓██ ▀█ ██▒▒ ▓██░ ▒░
▒ ██▒░ ▓██▓ ░ ▒██▀▀█▄ ▒▓█ ▄ ▒▓█ ▄░ ▓██▓ ░ ▒██ ▒██ ▒▓█ ▄ ▒██▀▀█▄ ▒▓▓▄ ▄██▒░▓█ ░██ ░██▄▄▄▄██ ▓██▒ ▐▌██▒░ ▓██▓ ░
▒██████▒▒ ▒██▒ ░ ░██▓ ▒██▒░▒████▒░▒████▒ ▒██▒ ░ ▒██▒ ░██▒░▒████▒░██▓ ▒██▒▒ ▓███▀ ░░▓█▒░██▓ ▓█ ▓██▒▒██░ ▓██░ ▒██▒ ░
▒ ▒▓▒ ▒ ░ ▒ ░░ ░ ▒▓ ░▒▓░░░ ▒░ ░░░ ▒░ ░ ▒ ░░ ░ ▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░░ ░▒ ▒ ░ ▒ ░░▒░▒ ▒▒ ▓▒█░░ ▒░ ▒ ▒ ▒ ░░
░ ░▒ ░ ░ ░ ░▒ ░ ▒░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ▒ ▒ ░▒░ ░ ▒ ▒▒ ░░ ░░ ░ ▒░ ░
░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
${version}`,
render(ascii: boolean, hexColor: string) {
return chalk
.hex(hexColor)
.bold(ascii ? this.asciiVersion : this.stringVersion);
},
stringVersion: `STREETMERCHANT
${version}`
};
+406
View File
@@ -0,0 +1,406 @@
import {banner} from './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());
}
/**
* Returns environment variable, given boolean, or default boolean.
*
* @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;
}
/**
* Returns environment variable, given string, or default string.
*
* @param environment Interested environment variable.
* @param string Default string. If not set, is `''`.
*/
function envOrString(environment: string | undefined, string?: string): string {
return environment ? environment : string ?? '';
}
/**
* Returns environment variable, given number, or default number.
*
* @param environment Interested environment variable.
* @param number Default number. If not set, is `0`.
*/
function envOrNumber(environment: string | undefined, number?: number): number {
return environment ? Number(environment) : number ?? 0;
}
/**
* Returns environment variable, given number, or default number,
* while handling .env input errors for a Min/Max pair.
* .env errors handled:
* - Min/Max swapped (Min larger than Max, Max smaller than Min)
* - Min larger than default Max when no Max defined
* - Max smaller than default Min when no Min defined
*
* @param environmentMin Min environment variable of Min/Max pair.
* @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
) {
if (environmentMin || environmentMax) {
if (environmentMin && environmentMax) {
return Number(
Number(environmentMin) < Number(environmentMax)
? environmentMin
: environmentMax
);
}
if (environmentMax) {
return Number(environmentMax) < (number ?? 0)
? Number(environmentMax)
: number ?? 0;
}
if (environmentMin) {
return Number(environmentMin);
}
}
return number ?? 0;
}
/**
* Returns environment variable, given number, or default number,
* while handling .env input errors for a Min/Max pair.
* .env errors handled:
* - Min/Max swapped (Min larger than Max, Max smaller than Min)
* - Min larger than default Max when no Max defined
* - Max smaller than default Min when no Min defined
*
* @param environmentMin Min environment variable of Min/Max pair.
* @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
) {
if (environmentMin || environmentMax) {
if (environmentMin && environmentMax) {
return Number(
Number(environmentMin) < Number(environmentMax)
? environmentMax
: environmentMax
);
}
if (environmentMin) {
return Number(environmentMin) > (number ?? 0)
? Number(environmentMin)
: number ?? 0;
}
if (environmentMax) {
return Number(environmentMax);
}
}
return number ?? 0;
}
const browser = {
isHeadless: envOrBoolean(process.env.HEADLESS),
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
),
open: envOrBoolean(process.env.OPEN_BROWSER)
};
const docker = envOrBoolean(process.env.DOCKER);
const logLevel = envOrString(process.env.LOG_LEVEL, 'info');
const notifications = {
desktop: process.env.DESKTOP_NOTIFICATIONS === 'true',
discord: {
notifyGroup: envOrArray(process.env.DISCORD_NOTIFY_GROUP),
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)
),
username: envOrString(process.env.EMAIL_USERNAME)
},
mqtt: {
broker: envOrString(process.env.MQTT_BROKER_ADDRESS),
clientId: envOrString(process.env.MQTT_CLIENT_ID),
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, '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'],
['attgo', 'mms.att.net'],
['bell', 'txt.bell.ca'],
['fido', 'fido.ca'],
['google', 'msg.fi.google.com'],
['koodo', 'msg.koodomobile.com'],
['mint', 'mailmymobile.net'],
['rogers', 'pcs.rogers.com'],
['sprint', 'messaging.sprintpcs.com'],
['telus', 'msg.telus.com'],
['tmobile', 'tmomail.net'],
['verizon', 'vtext.com'],
['virgin', 'vmobl.com'],
['virgin-ca', 'vmobile.ca']
]),
carrier: envOrArray(process.env.PHONE_CARRIER),
number: envOrArray(process.env.PHONE_NUMBER)
},
playSound: envOrString(process.env.PLAY_SOUND),
pushbullet: envOrString(process.env.PUSHBULLET),
pushover: {
priority: envOrNumber(process.env.PUSHOVER_PRIORITY),
token: envOrString(process.env.PUSHOVER_TOKEN),
username: envOrString(process.env.PUSHOVER_USER)
},
slack: {
channel: envOrString(process.env.SLACK_CHANNEL),
token: envOrString(process.env.SLACK_TOKEN)
},
telegram: {
accessToken: envOrString(process.env.TELEGRAM_ACCESS_TOKEN),
chatId: envOrArray(process.env.TELEGRAM_CHAT_ID)
},
twilio: {
accountSid: envOrString(process.env.TWILIO_ACCOUNT_SID),
authToken: envOrString(process.env.TWILIO_AUTH_TOKEN),
from: envOrString(process.env.TWILIO_FROM_NUMBER),
to: envOrString(process.env.TWILIO_TO_NUMBER)
},
twitch: {
accessToken: envOrString(process.env.TWITCH_ACCESS_TOKEN),
channel: envOrString(process.env.TWITCH_CHANNEL),
clientId: envOrString(process.env.TWITCH_CLIENT_ID),
clientSecret: envOrString(process.env.TWITCH_CLIENT_SECRET),
refreshToken: envOrString(process.env.TWITCH_REFRESH_TOKEN)
},
twitter: {
accessTokenKey: envOrString(process.env.TWITTER_ACCESS_TOKEN_KEY),
accessTokenSecret: envOrString(process.env.TWITTER_ACCESS_TOKEN_SECRET),
consumerKey: envOrString(process.env.TWITTER_CONSUMER_KEY),
consumerSecret: envOrString(process.env.TWITTER_CONSUMER_SECRET),
tweetTags: envOrString(process.env.TWITTER_TWEET_TAGS)
}
};
const nvidia = {
addToCardAttempts: envOrNumber(process.env.NVIDIA_ADD_TO_CART_ATTEMPTS, 10),
sessionTtl: envOrNumber(process.env.NVIDIA_SESSION_TTL, 60000)
};
const page = {
height: 1080,
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'
]),
width: 1920
};
const proxy = {
address: envOrString(process.env.PROXY_ADDRESS),
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}}'
);
}
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),
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) => {
const [name, series] = entry.match(/[^:]+/g) ?? [];
return {
name: envOrString(name),
series: envOrString(series)
};
}),
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),
proxyList
};
})
};
export const defaultStoreData = {
maxPageSleep: browser.maxSleep,
minPageSleep: browser.minSleep
};
export const config = {
browser,
docker,
logLevel,
notifications,
nvidia,
page,
proxy,
store
};
export function setConfig(newConfig: any) {
const writeConfig = config as any;
for (const key of Object.keys(newConfig)) {
writeConfig[key] = newConfig[key];
}
}
+99
View File
@@ -0,0 +1,99 @@
import {startAPIServer, stopAPIServer} from './web';
import {Browser} from 'puppeteer';
import {config} from './config';
import {getSleepTime} from './util';
import {logger} from './logger';
import puppeteer from 'puppeteer-extra';
import stealthPlugin from 'puppeteer-extra-plugin-stealth';
import {storeList} from './store/model';
import {tryLookupAndLoop} from './store';
puppeteer.use(stealthPlugin());
let browser: Browser | undefined;
/**
* Starts the bot.
*/
async function main() {
const args: string[] = [];
// Skip Chromium Linux Sandbox
// https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#setting-up-chrome-linux-sandbox
if (config.browser.isTrusted) {
args.push('--no-sandbox');
args.push('--disable-setuid-sandbox');
}
// https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#tips
if (config.docker) {
args.push('--disable-dev-shm-usage');
}
// Add the address of the proxy server if defined
if (config.proxy.address) {
args.push(
`--proxy-server=${config.proxy.protocol}://${config.proxy.address}:${config.proxy.port}`
);
}
await stop();
browser = await puppeteer.launch({
args,
defaultViewport: {
height: config.page.height,
width: config.page.width
},
headless: config.browser.isHeadless
});
for (const store of storeList.values()) {
logger.debug('store links', {meta: {links: store.links}});
if (store.setupAction !== undefined) {
store.setupAction(browser);
}
setTimeout(tryLookupAndLoop, getSleepTime(store), browser, store);
}
await startAPIServer();
}
async function stop() {
await stopAPIServer();
if (browser) {
// Use temporary swap variable to avoid any race condition
const browserTemporary = browser;
browser = undefined;
await browserTemporary.close();
}
}
async function stopAndExit() {
await stop();
// eslint-disable-next-line unicorn/no-process-exit
process.exit(0);
}
/**
* Will continually run until user interferes.
*/
async function loopMain() {
try {
await main();
} catch (error: unknown) {
logger.error(
'✖ something bad happened, resetting streetmerchant in 5 seconds',
error
);
setTimeout(loopMain, 5000);
}
}
void loopMain();
process.on('SIGINT', stopAndExit);
process.on('SIGQUIT', stopAndExit);
process.on('SIGTERM', stopAndExit);
+222
View File
@@ -0,0 +1,222 @@
import {Link, Store} from './store/model';
import chalk from 'chalk';
import {config} from './config';
import winston from 'winston';
const prettyJson = winston.format.printf((info) => {
const timestamp = new Date().toLocaleTimeString();
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))}`;
}
return out;
});
export const logger = winston.createLogger({
format: winston.format.combine(
winston.format.colorize(),
winston.format.metadata({fillExcept: ['level', 'message', 'timestamp']}),
prettyJson
),
level: config.logLevel,
transports: [new winston.transports.Console({})]
});
export const Print = {
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)} :: BACKOFF DELAY status=${
parameters.statusCode
} delay=${parameters.delay}`;
},
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
)} :: 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)} :: BANNED SELLER`;
},
captcha(link: Link, store: Store, color?: boolean): string {
if (color) {
return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow('CAPTCHA')
);
}
return `${buildProductString(link, store)} :: CAPTCHA`;
},
inStock(link: Link, store: Store, color?: boolean, sms?: boolean): string {
const productString = `${buildProductString(link, store)} :: IN STOCK`;
if (color) {
return chalk.bgGreen.white.bold(`🚀🚨 ${productString} 🚨🚀`);
}
if (sms) {
return productString;
}
return `🚀🚨 ${productString} 🚨🚀`;
},
inStockWaiting(link: Link, store: Store, color?: boolean): string {
if (color) {
return (
' ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow('IN STOCK, WAITING')
);
}
return ` ${buildProductString(link, store)} :: IN STOCK, WAITING`;
},
maxPrice(
link: Link,
store: Store,
maxPrice: number,
color?: boolean
): string {
if (color) {
return (
'✖ ' +
buildProductString(link, store, true) +
' :: ' +
chalk.yellow(`PRICE ${link.price ?? ''} EXCEEDS LIMIT ${maxPrice}`)
);
}
return `${buildProductString(link, store)} :: PRICE ${
link.price ?? ''
} EXCEEDS LIMIT ${maxPrice}`;
},
message(
message: string,
topic: string,
store: Store,
color?: boolean
): string {
if (color) {
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)} :: 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)} :: 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)} :: RATE LIMIT EXCEEDED`;
}
};
function buildSetupString(
topic: string,
store: Store,
color?: boolean
): string {
if (color) {
return chalk.cyan(`[${store.name}]`) + chalk.grey(` [setup (${topic})]`);
}
return `[${store.name}] [setup (${topic})]`;
}
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 `[${store.name}] [${link.brand} (${link.series})] ${link.model}`;
}
+20
View File
@@ -0,0 +1,20 @@
import {Link, Store} from '../store/model';
import {Print, logger} from '../logger';
import {config} from '../config';
import notifier from 'node-notifier';
const desktop = config.notifications.desktop;
export function sendDesktopNotification(link: Link, store: Store) {
if (desktop) {
logger.debug('↗ sending desktop notification');
(async () => {
notifier.notify({
message: link.cartUrl ? link.cartUrl : link.url,
title: Print.inStock(link, store)
});
logger.info('✔ desktop notification sent');
})();
}
}
+68
View File
@@ -0,0 +1,68 @@
import {Link, Store} from '../store/model';
import Discord from 'discord.js';
import {config} from '../config';
import {logger} from '../logger';
const discord = config.notifications.discord;
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 (webhooks.length > 0) {
logger.debug('↗ sending discord message');
(async () => {
try {
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('Model', link.model, true);
embed.addField('Series', link.series, true);
const promises = [];
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)).forEach(({client}) => client.destroy());
logger.info('✔ discord message sent');
} catch (error: unknown) {
logger.error("✖ couldn't send discord message", error);
}
})();
}
}
+55
View File
@@ -0,0 +1,55 @@
import {Link, Store} from '../store/model';
import {Print, logger} from '../logger';
import Mail from 'nodemailer/lib/mailer';
import {config} from '../config';
import nodemailer from 'nodemailer';
const email = config.notifications.email;
const transportOptions: any = {};
if (email.username && (email.password || email.smtpAddress)) {
transportOptions.auth = {};
transportOptions.auth.user = email.username;
transportOptions.auth.pass = email.password;
}
if (email.smtpAddress) {
transportOptions.host = email.smtpAddress;
transportOptions.port = email.smtpPort;
} else {
transportOptions.service = 'gmail';
}
export const transporter = nodemailer.createTransport({
...transportOptions
});
export function sendEmail(link: Link, store: Store) {
if (email.username && (email.password || email.smtpAddress)) {
logger.debug('↗ sending email');
const mailOptions: Mail.Options = {
attachments: link.screenshot
? [
{
filename: link.screenshot,
path: `./${link.screenshot}`
}
]
: undefined,
from: email.username,
subject: Print.inStock(link, store),
text: Print.productInStock(link),
to: email.to
};
transporter.sendMail(mailOptions, (error) => {
if (error) {
logger.error("✖ couldn't send email", error);
} else {
logger.info('✔ email sent');
}
});
}
}
+1
View File
@@ -0,0 +1 @@
export * from './notification';
+114
View File
@@ -0,0 +1,114 @@
import {Link, Store} from '../store/model';
import MqttClient, {IClientOptions, IClientPublishOptions} from 'mqtt';
import {Print, logger} from '../logger';
import {config} from '../config';
const mqtt = config.notifications.mqtt;
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.'
);
} else {
const clientOptions: IClientOptions = {
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
);
}
}
export function sendMqttMessage(link: Link, store: Store) {
if (client) {
logger.debug('↗ sending mqtt message');
(async () => {
const givenUrl = link.cartUrl ? link.cartUrl : link.url;
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,
retain: false
};
try {
client.publish(topic, message, pubOptions);
logger.info('✔ mqtt message sent');
} catch (error: unknown) {
logger.error("✖ couldn't send mqtt message", error);
}
})();
}
}
function generateTopic(link: Link, store: Store, topic: string): string {
topic.trim();
topic = topic.replace(/^\//, '');
topic = topic
.replace(/%series%/g, link.series)
.replace(/%brand%/g, link.brand)
.replace(/%model%/g, link.model)
.replace(/%store%/g, store.name);
return topic;
}
/**
* Basic protection against sending credentials in the clear over public networks.
* - Returns 'true' if password is supplied in .env but address/URL is not part of a private network
* - Private networks evaluated: Class A, B, or C private IP's or linklocal URL ("*.local")
* - TLS could be implemented, however, the majority of MQTT services on the internet do not require user authentication.
* - If you find a 'cloud' MQTT broker requiring authentication for publishing alerts, consider using another MQTT service (for now).
*
*/
function checkInsecureUsage(pass: string, address: string): boolean {
if (pass !== '') {
if (
isClassANet(address) ||
isClassBNet(address) ||
isClassCNet(address) ||
isLinkLocal(address)
) {
logger.debug(`MQTT using private network broker: ${address}`);
} else {
logger.debug(`MQTT using public network broker: ${address}`);
return true;
}
}
return false;
}
function isClassANet(address: string): boolean {
const classRegex = /^(10\.(\d|[1-9]\d|[12][0-5]{2})\.(\d|[1-9]\d|[12][0-5]{2})\.(\d|[1-9]\d|[12][0-5]{2}))$/;
return Boolean(classRegex.exec(address));
}
function isClassBNet(address: string): boolean {
const classRegex = /^(172\.(1[6-9]|2\d|3[01])\.(\d|[1-9]\d|[12][0-5]{2})\.(\d|[1-9]\d|[12][0-5]{2}))$/;
return Boolean(classRegex.exec(address));
}
function isClassCNet(address: string): boolean {
const classRegex = /^(192\.168\.(\d|[1-9]\d|[12][0-5]{2})\.(\d|[1-9]\d|[12][0-5]{2}))$/;
return Boolean(classRegex.exec(address));
}
function isLinkLocal(address: string): boolean {
const linkLocal = /.+\.local$/;
return Boolean(linkLocal.exec(address));
}
+36
View File
@@ -0,0 +1,36 @@
import {Link, Store} from '../store/model';
import {adjustPhilipsHueLights} from './philips-hue';
import {playSound} from './sound';
import {sendDesktopNotification} from './desktop';
import {sendDiscordMessage} from './discord';
import {sendEmail} from './email';
import {sendMqttMessage} from './mqtt';
import {sendPagerDutyNotification} from './pagerduty';
import {sendPushbulletNotification} from './pushbullet';
import {sendPushoverNotification} from './pushover';
import {sendSlackMessage} from './slack';
import {sendSms} from './sms';
import {sendTelegramMessage} from './telegram';
import {sendTweet} from './twitter';
import {sendTwilioMessage} from './twilio';
import {sendTwitchMessage} from './twitch';
export function sendNotification(link: Link, store: Store) {
// Priority
playSound();
sendEmail(link, store);
sendSms(link, store);
sendDesktopNotification(link, store);
// Non-priority
adjustPhilipsHueLights();
sendDiscordMessage(link, store);
sendMqttMessage(link, store);
sendPagerDutyNotification(link, store);
sendPushbulletNotification(link, store);
sendPushoverNotification(link, store);
sendSlackMessage(link, store);
sendTelegramMessage(link, store);
sendTweet(link, store);
sendTwilioMessage(link, store);
sendTwitchMessage(link, store);
}
+31
View File
@@ -0,0 +1,31 @@
import {Link, Store} from '../store/model';
import {Print, logger} from '../logger';
import PDClient from 'node-pagerduty';
import {config} from '../config';
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'}];
if (link.cartUrl) {
links.push({
href: link.cartUrl,
text: 'Add to Cart'
});
}
pd.events.sendEvent({
dedup_key: link.url,
event_action: 'trigger',
payload: {
links,
severity: config.notifications.pagerduty.severity,
source: store.name,
summary: Print.inStock(link, store)
},
routing_key: config.notifications.pagerduty.integrationKey
});
}
}
+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;
}
);
}
})();
}
}
+27
View File
@@ -0,0 +1,27 @@
import {Link, Store} from '../store/model';
import {Print, logger} from '../logger';
import PushBullet from '@jef/pushbullet';
import {config} from '../config';
const pushbullet = config.notifications.pushbullet;
export function sendPushbulletNotification(link: Link, store: Store) {
if (pushbullet) {
logger.debug('↗ sending pushbullet message');
const pusher = new PushBullet(pushbullet);
pusher.note(
{},
Print.inStock(link, store),
link.cartUrl ? link.cartUrl : link.url,
(error: Error) => {
if (error) {
logger.error("✖ couldn't send pushbullet message", error);
} else {
logger.info('✔ pushbullet message sent');
}
}
);
}
}
+30
View File
@@ -0,0 +1,30 @@
import {Link, Store} from '../store/model';
import {Print, logger} from '../logger';
import Push, {PushoverMessage} from 'pushover-notifications';
import {config} from '../config';
const pushover = config.notifications.pushover;
const push = new Push({
token: pushover.token,
user: pushover.username
});
export function sendPushoverNotification(link: Link, store: Store) {
if (pushover.token && pushover.username) {
logger.debug('↗ sending pushover message');
const message: PushoverMessage = {
message: link.cartUrl ? link.cartUrl : link.url,
priority: pushover.priority,
title: Print.inStock(link, store)
};
push.send(message, (error: Error) => {
if (error) {
logger.error("✖ couldn't send pushover message", error);
} else {
logger.info('✔ pushover message sent');
}
});
}
}
+35
View File
@@ -0,0 +1,35 @@
import {Link, Store} from '../store/model';
import {Print, logger} from '../logger';
import {WebClient} from '@slack/web-api';
import {config} from '../config';
const slack = config.notifications.slack;
const channel = slack.channel;
const token = slack.token;
const web = new WebClient(token);
export function sendSlackMessage(link: Link, store: Store) {
if (slack.channel && slack.token) {
logger.debug('↗ sending slack message');
(async () => {
const givenUrl = link.cartUrl ? link.cartUrl : link.url;
try {
const result = await web.chat.postMessage({
channel,
text: `${Print.inStock(link, store)}\n${givenUrl}`
});
if (!result.ok) {
logger.error("✖ couldn't send slack message", result);
return;
}
logger.info('✔ slack message sent');
} catch (error: unknown) {
logger.error("✖ couldn't send slack message", error);
}
})();
}
}
+78
View File
@@ -0,0 +1,78 @@
import {Link, Store} from '../store/model';
import {Print, logger} from '../logger';
import Mail from 'nodemailer/lib/mailer';
import {config} from '../config';
import {transporter} from './email';
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) {
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 (!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(number: string, carrier: string) {
if (carrier && phone.availableCarriers.has(carrier)) {
return [number, phone.availableCarriers.get(carrier)].join('@');
}
}

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