@tomerh2001/israeli-bank-scrapers 6.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +425 -0
  3. package/lib/assertNever.d.ts +1 -0
  4. package/lib/assertNever.js +10 -0
  5. package/lib/constants.d.ts +10 -0
  6. package/lib/constants.js +17 -0
  7. package/lib/definitions.d.ts +105 -0
  8. package/lib/definitions.js +116 -0
  9. package/lib/helpers/browser.d.ts +10 -0
  10. package/lib/helpers/browser.js +21 -0
  11. package/lib/helpers/dates.d.ts +2 -0
  12. package/lib/helpers/dates.js +22 -0
  13. package/lib/helpers/debug.d.ts +2 -0
  14. package/lib/helpers/debug.js +12 -0
  15. package/lib/helpers/elements-interactions.d.ts +17 -0
  16. package/lib/helpers/elements-interactions.js +111 -0
  17. package/lib/helpers/fetch.d.ts +6 -0
  18. package/lib/helpers/fetch.js +111 -0
  19. package/lib/helpers/navigation.d.ts +6 -0
  20. package/lib/helpers/navigation.js +39 -0
  21. package/lib/helpers/storage.d.ts +2 -0
  22. package/lib/helpers/storage.js +14 -0
  23. package/lib/helpers/transactions.d.ts +5 -0
  24. package/lib/helpers/transactions.js +47 -0
  25. package/lib/helpers/waiting.d.ts +13 -0
  26. package/lib/helpers/waiting.js +58 -0
  27. package/lib/index.d.ts +7 -0
  28. package/lib/index.js +85 -0
  29. package/lib/scrapers/amex.d.ts +6 -0
  30. package/lib/scrapers/amex.js +17 -0
  31. package/lib/scrapers/amex.test.d.ts +1 -0
  32. package/lib/scrapers/amex.test.js +49 -0
  33. package/lib/scrapers/base-beinleumi-group.d.ts +66 -0
  34. package/lib/scrapers/base-beinleumi-group.js +428 -0
  35. package/lib/scrapers/base-isracard-amex.d.ts +23 -0
  36. package/lib/scrapers/base-isracard-amex.js +324 -0
  37. package/lib/scrapers/base-scraper-with-browser.d.ts +57 -0
  38. package/lib/scrapers/base-scraper-with-browser.js +291 -0
  39. package/lib/scrapers/base-scraper-with-browser.test.d.ts +1 -0
  40. package/lib/scrapers/base-scraper-with-browser.test.js +53 -0
  41. package/lib/scrapers/base-scraper.d.ts +19 -0
  42. package/lib/scrapers/base-scraper.js +91 -0
  43. package/lib/scrapers/behatsdaa.d.ts +11 -0
  44. package/lib/scrapers/behatsdaa.js +113 -0
  45. package/lib/scrapers/behatsdaa.test.d.ts +1 -0
  46. package/lib/scrapers/behatsdaa.test.js +46 -0
  47. package/lib/scrapers/beinleumi.d.ts +7 -0
  48. package/lib/scrapers/beinleumi.js +15 -0
  49. package/lib/scrapers/beinleumi.test.d.ts +1 -0
  50. package/lib/scrapers/beinleumi.test.js +47 -0
  51. package/lib/scrapers/beyahad-bishvilha.d.ts +30 -0
  52. package/lib/scrapers/beyahad-bishvilha.js +149 -0
  53. package/lib/scrapers/beyahad-bishvilha.test.d.ts +1 -0
  54. package/lib/scrapers/beyahad-bishvilha.test.js +47 -0
  55. package/lib/scrapers/discount.d.ts +22 -0
  56. package/lib/scrapers/discount.js +120 -0
  57. package/lib/scrapers/discount.test.d.ts +1 -0
  58. package/lib/scrapers/discount.test.js +49 -0
  59. package/lib/scrapers/errors.d.ts +16 -0
  60. package/lib/scrapers/errors.js +32 -0
  61. package/lib/scrapers/factory.d.ts +2 -0
  62. package/lib/scrapers/factory.js +70 -0
  63. package/lib/scrapers/factory.test.d.ts +1 -0
  64. package/lib/scrapers/factory.test.js +19 -0
  65. package/lib/scrapers/hapoalim.d.ts +24 -0
  66. package/lib/scrapers/hapoalim.js +198 -0
  67. package/lib/scrapers/hapoalim.test.d.ts +1 -0
  68. package/lib/scrapers/hapoalim.test.js +47 -0
  69. package/lib/scrapers/interface.d.ts +186 -0
  70. package/lib/scrapers/interface.js +6 -0
  71. package/lib/scrapers/isracard.d.ts +6 -0
  72. package/lib/scrapers/isracard.js +17 -0
  73. package/lib/scrapers/isracard.test.d.ts +1 -0
  74. package/lib/scrapers/isracard.test.js +49 -0
  75. package/lib/scrapers/leumi.d.ts +21 -0
  76. package/lib/scrapers/leumi.js +200 -0
  77. package/lib/scrapers/leumi.test.d.ts +1 -0
  78. package/lib/scrapers/leumi.test.js +47 -0
  79. package/lib/scrapers/massad.d.ts +7 -0
  80. package/lib/scrapers/massad.js +15 -0
  81. package/lib/scrapers/max.d.ts +37 -0
  82. package/lib/scrapers/max.js +299 -0
  83. package/lib/scrapers/max.test.d.ts +1 -0
  84. package/lib/scrapers/max.test.js +64 -0
  85. package/lib/scrapers/mercantile.d.ts +20 -0
  86. package/lib/scrapers/mercantile.js +18 -0
  87. package/lib/scrapers/mercantile.test.d.ts +1 -0
  88. package/lib/scrapers/mercantile.test.js +45 -0
  89. package/lib/scrapers/mizrahi.d.ts +35 -0
  90. package/lib/scrapers/mizrahi.js +265 -0
  91. package/lib/scrapers/mizrahi.test.d.ts +1 -0
  92. package/lib/scrapers/mizrahi.test.js +56 -0
  93. package/lib/scrapers/one-zero-queries.d.ts +2 -0
  94. package/lib/scrapers/one-zero-queries.js +560 -0
  95. package/lib/scrapers/one-zero.d.ts +36 -0
  96. package/lib/scrapers/one-zero.js +238 -0
  97. package/lib/scrapers/one-zero.test.d.ts +1 -0
  98. package/lib/scrapers/one-zero.test.js +51 -0
  99. package/lib/scrapers/otsar-hahayal.d.ts +7 -0
  100. package/lib/scrapers/otsar-hahayal.js +15 -0
  101. package/lib/scrapers/otsar-hahayal.test.d.ts +1 -0
  102. package/lib/scrapers/otsar-hahayal.test.js +47 -0
  103. package/lib/scrapers/pagi.d.ts +7 -0
  104. package/lib/scrapers/pagi.js +15 -0
  105. package/lib/scrapers/pagi.test.d.ts +1 -0
  106. package/lib/scrapers/pagi.test.js +47 -0
  107. package/lib/scrapers/union-bank.d.ts +23 -0
  108. package/lib/scrapers/union-bank.js +242 -0
  109. package/lib/scrapers/union-bank.test.d.ts +1 -0
  110. package/lib/scrapers/union-bank.test.js +47 -0
  111. package/lib/scrapers/visa-cal.d.ts +20 -0
  112. package/lib/scrapers/visa-cal.js +318 -0
  113. package/lib/scrapers/visa-cal.test.d.ts +1 -0
  114. package/lib/scrapers/visa-cal.test.js +49 -0
  115. package/lib/scrapers/yahav.d.ts +25 -0
  116. package/lib/scrapers/yahav.js +247 -0
  117. package/lib/scrapers/yahav.test.d.ts +1 -0
  118. package/lib/scrapers/yahav.test.js +49 -0
  119. package/lib/transactions.d.ts +47 -0
  120. package/lib/transactions.js +17 -0
  121. package/package.json +91 -0
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _moment = _interopRequireDefault(require("moment"));
8
+ var _debug = require("../helpers/debug");
9
+ var _elementsInteractions = require("../helpers/elements-interactions");
10
+ var _fetch = require("../helpers/fetch");
11
+ var _waiting = require("../helpers/waiting");
12
+ var _transactions = require("../transactions");
13
+ var _baseScraperWithBrowser = require("./base-scraper-with-browser");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ const BASE_URL = 'https://www.behatsdaa.org.il';
16
+ const LOGIN_URL = `${BASE_URL}/login`;
17
+ const PURCHASE_HISTORY_URL = 'https://back.behatsdaa.org.il/api/purchases/purchaseHistory';
18
+ const debug = (0, _debug.getDebug)('behatsdaa');
19
+ function variantToTransaction(variant) {
20
+ // The price is positive, make it negative as it's an expense
21
+ const originalAmount = -variant.customerPrice;
22
+ return {
23
+ type: _transactions.TransactionTypes.Normal,
24
+ identifier: variant.tTransactionID,
25
+ date: (0, _moment.default)(variant.orderDate).format('YYYY-MM-DD'),
26
+ processedDate: (0, _moment.default)(variant.orderDate).format('YYYY-MM-DD'),
27
+ originalAmount,
28
+ originalCurrency: 'ILS',
29
+ chargedAmount: originalAmount,
30
+ chargedCurrency: 'ILS',
31
+ description: variant.name,
32
+ status: _transactions.TransactionStatuses.Completed,
33
+ memo: variant.variantName
34
+ };
35
+ }
36
+ class BehatsdaaScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
37
+ getLoginOptions(credentials) {
38
+ return {
39
+ loginUrl: LOGIN_URL,
40
+ fields: [{
41
+ selector: '#loginId',
42
+ value: credentials.id
43
+ }, {
44
+ selector: '#loginPassword',
45
+ value: credentials.password
46
+ }],
47
+ checkReadiness: async () => {
48
+ await Promise.all([(0, _elementsInteractions.waitUntilElementFound)(this.page, '#loginPassword'), (0, _elementsInteractions.waitUntilElementFound)(this.page, '#loginId')]);
49
+ },
50
+ possibleResults: {
51
+ [_baseScraperWithBrowser.LoginResults.Success]: [`${BASE_URL}/`],
52
+ [_baseScraperWithBrowser.LoginResults.InvalidPassword]: ['.custom-input-error-label']
53
+ },
54
+ submitButtonSelector: async () => {
55
+ await (0, _waiting.sleep)(1000);
56
+ debug('Trying to find submit button');
57
+ const button = await this.page.$('xpath=//button[contains(., "התחברות")]');
58
+ if (button) {
59
+ debug('Submit button found');
60
+ await button.click();
61
+ } else {
62
+ debug('Submit button not found');
63
+ }
64
+ }
65
+ };
66
+ }
67
+ async fetchData() {
68
+ const token = await this.page.evaluate(() => window.localStorage.getItem('userToken'));
69
+ if (!token) {
70
+ debug('Token not found in local storage');
71
+ return {
72
+ success: false,
73
+ errorMessage: 'TokenNotFound'
74
+ };
75
+ }
76
+ const body = {
77
+ FromDate: (0, _moment.default)(this.options.startDate).format('YYYY-MM-DDTHH:mm:ss'),
78
+ ToDate: (0, _moment.default)().format('YYYY-MM-DDTHH:mm:ss'),
79
+ BenefitStatusId: null
80
+ };
81
+ debug('Fetching data');
82
+ const res = await (0, _fetch.fetchPostWithinPage)(this.page, PURCHASE_HISTORY_URL, body, {
83
+ authorization: `Bearer ${token}`,
84
+ 'Content-Type': 'application/json',
85
+ organizationid: '20'
86
+ });
87
+ debug('Data fetched');
88
+ if (res?.errorDescription || res?.data?.errorDescription) {
89
+ debug('Error fetching data', res.errorDescription || res.data?.errorDescription);
90
+ return {
91
+ success: false,
92
+ errorMessage: res.errorDescription
93
+ };
94
+ }
95
+ if (!res?.data) {
96
+ debug('No data found');
97
+ return {
98
+ success: false,
99
+ errorMessage: 'NoData'
100
+ };
101
+ }
102
+ debug('Data fetched successfully');
103
+ return {
104
+ success: true,
105
+ accounts: [{
106
+ accountNumber: res.data.memberId,
107
+ txns: res.data.variants.map(variantToTransaction)
108
+ }]
109
+ };
110
+ }
111
+ }
112
+ var _default = exports.default = BehatsdaaScraper;
113
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVidWciLCJfZWxlbWVudHNJbnRlcmFjdGlvbnMiLCJfZmV0Y2giLCJfd2FpdGluZyIsIl90cmFuc2FjdGlvbnMiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkJBU0VfVVJMIiwiTE9HSU5fVVJMIiwiUFVSQ0hBU0VfSElTVE9SWV9VUkwiLCJkZWJ1ZyIsImdldERlYnVnIiwidmFyaWFudFRvVHJhbnNhY3Rpb24iLCJ2YXJpYW50Iiwib3JpZ2luYWxBbW91bnQiLCJjdXN0b21lclByaWNlIiwidHlwZSIsIlRyYW5zYWN0aW9uVHlwZXMiLCJOb3JtYWwiLCJpZGVudGlmaWVyIiwidFRyYW5zYWN0aW9uSUQiLCJkYXRlIiwibW9tZW50Iiwib3JkZXJEYXRlIiwiZm9ybWF0IiwicHJvY2Vzc2VkRGF0ZSIsIm9yaWdpbmFsQ3VycmVuY3kiLCJjaGFyZ2VkQW1vdW50IiwiY2hhcmdlZEN1cnJlbmN5IiwiZGVzY3JpcHRpb24iLCJuYW1lIiwic3RhdHVzIiwiVHJhbnNhY3Rpb25TdGF0dXNlcyIsIkNvbXBsZXRlZCIsIm1lbW8iLCJ2YXJpYW50TmFtZSIsIkJlaGF0c2RhYVNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZ2V0TG9naW5PcHRpb25zIiwiY3JlZGVudGlhbHMiLCJsb2dpblVybCIsImZpZWxkcyIsInNlbGVjdG9yIiwidmFsdWUiLCJpZCIsInBhc3N3b3JkIiwiY2hlY2tSZWFkaW5lc3MiLCJQcm9taXNlIiwiYWxsIiwid2FpdFVudGlsRWxlbWVudEZvdW5kIiwicGFnZSIsInBvc3NpYmxlUmVzdWx0cyIsIkxvZ2luUmVzdWx0cyIsIlN1Y2Nlc3MiLCJJbnZhbGlkUGFzc3dvcmQiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsInNsZWVwIiwiYnV0dG9uIiwiJCIsImNsaWNrIiwiZmV0Y2hEYXRhIiwidG9rZW4iLCJldmFsdWF0ZSIsIndpbmRvdyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJzdWNjZXNzIiwiZXJyb3JNZXNzYWdlIiwiYm9keSIsIkZyb21EYXRlIiwib3B0aW9ucyIsInN0YXJ0RGF0ZSIsIlRvRGF0ZSIsIkJlbmVmaXRTdGF0dXNJZCIsInJlcyIsImZldGNoUG9zdFdpdGhpblBhZ2UiLCJhdXRob3JpemF0aW9uIiwib3JnYW5pemF0aW9uaWQiLCJlcnJvckRlc2NyaXB0aW9uIiwiZGF0YSIsImFjY291bnRzIiwiYWNjb3VudE51bWJlciIsIm1lbWJlcklkIiwidHhucyIsInZhcmlhbnRzIiwibWFwIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmFwZXJzL2JlaGF0c2RhYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBnZXREZWJ1ZyB9IGZyb20gJy4uL2hlbHBlcnMvZGVidWcnO1xuaW1wb3J0IHsgd2FpdFVudGlsRWxlbWVudEZvdW5kIH0gZnJvbSAnLi4vaGVscGVycy9lbGVtZW50cy1pbnRlcmFjdGlvbnMnO1xuaW1wb3J0IHsgZmV0Y2hQb3N0V2l0aGluUGFnZSB9IGZyb20gJy4uL2hlbHBlcnMvZmV0Y2gnO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuLi9oZWxwZXJzL3dhaXRpbmcnO1xuaW1wb3J0IHsgdHlwZSBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25TdGF0dXNlcywgVHJhbnNhY3Rpb25UeXBlcyB9IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBCYXNlU2NyYXBlcldpdGhCcm93c2VyLCB0eXBlIExvZ2luT3B0aW9ucywgTG9naW5SZXN1bHRzIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcbmltcG9ydCB7IHR5cGUgU2NyYXBlclNjcmFwaW5nUmVzdWx0IH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5jb25zdCBCQVNFX1VSTCA9ICdodHRwczovL3d3dy5iZWhhdHNkYWEub3JnLmlsJztcbmNvbnN0IExPR0lOX1VSTCA9IGAke0JBU0VfVVJMfS9sb2dpbmA7XG5jb25zdCBQVVJDSEFTRV9ISVNUT1JZX1VSTCA9ICdodHRwczovL2JhY2suYmVoYXRzZGFhLm9yZy5pbC9hcGkvcHVyY2hhc2VzL3B1cmNoYXNlSGlzdG9yeSc7XG5cbmNvbnN0IGRlYnVnID0gZ2V0RGVidWcoJ2JlaGF0c2RhYScpO1xuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0geyBpZDogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH07XG5cbnR5cGUgVmFyaWFudCA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YXJpYW50TmFtZTogc3RyaW5nO1xuICBjdXN0b21lclByaWNlOiBudW1iZXI7XG4gIG9yZGVyRGF0ZTogc3RyaW5nOyAvLyBJU08gdGltZXN0YW1wIHdpdGggbm8gdGltZXpvbmVcbiAgdFRyYW5zYWN0aW9uSUQ6IHN0cmluZztcbn07XG5cbnR5cGUgUHVyY2hhc2VIaXN0b3J5UmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgZXJyb3JEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBtZW1iZXJJZDogc3RyaW5nO1xuICAgIHZhcmlhbnRzOiBWYXJpYW50W107XG4gIH07XG4gIGVycm9yRGVzY3JpcHRpb24/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiB2YXJpYW50VG9UcmFuc2FjdGlvbih2YXJpYW50OiBWYXJpYW50KTogVHJhbnNhY3Rpb24ge1xuICAvLyBUaGUgcHJpY2UgaXMgcG9zaXRpdmUsIG1ha2UgaXQgbmVnYXRpdmUgYXMgaXQncyBhbiBleHBlbnNlXG4gIGNvbnN0IG9yaWdpbmFsQW1vdW50ID0gLXZhcmlhbnQuY3VzdG9tZXJQcmljZTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGVzLk5vcm1hbCxcbiAgICBpZGVudGlmaWVyOiB2YXJpYW50LnRUcmFuc2FjdGlvbklELFxuICAgIGRhdGU6IG1vbWVudCh2YXJpYW50Lm9yZGVyRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyksXG4gICAgcHJvY2Vzc2VkRGF0ZTogbW9tZW50KHZhcmlhbnQub3JkZXJEYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcbiAgICBvcmlnaW5hbEFtb3VudCxcbiAgICBvcmlnaW5hbEN1cnJlbmN5OiAnSUxTJyxcbiAgICBjaGFyZ2VkQW1vdW50OiBvcmlnaW5hbEFtb3VudCxcbiAgICBjaGFyZ2VkQ3VycmVuY3k6ICdJTFMnLFxuICAgIGRlc2NyaXB0aW9uOiB2YXJpYW50Lm5hbWUsXG4gICAgc3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzLkNvbXBsZXRlZCxcbiAgICBtZW1vOiB2YXJpYW50LnZhcmlhbnROYW1lLFxuICB9O1xufVxuXG5jbGFzcyBCZWhhdHNkYWFTY3JhcGVyIGV4dGVuZHMgQmFzZVNjcmFwZXJXaXRoQnJvd3NlcjxTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscz4ge1xuICBwdWJsaWMgZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyk6IExvZ2luT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvZ2luVXJsOiBMT0dJTl9VUkwsXG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAgeyBzZWxlY3RvcjogJyNsb2dpbklkJywgdmFsdWU6IGNyZWRlbnRpYWxzLmlkIH0sXG4gICAgICAgIHsgc2VsZWN0b3I6ICcjbG9naW5QYXNzd29yZCcsIHZhbHVlOiBjcmVkZW50aWFscy5wYXNzd29yZCB9LFxuICAgICAgXSxcbiAgICAgIGNoZWNrUmVhZGluZXNzOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQodGhpcy5wYWdlLCAnI2xvZ2luUGFzc3dvcmQnKSxcbiAgICAgICAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQodGhpcy5wYWdlLCAnI2xvZ2luSWQnKSxcbiAgICAgICAgXSk7XG4gICAgICB9LFxuICAgICAgcG9zc2libGVSZXN1bHRzOiB7XG4gICAgICAgIFtMb2dpblJlc3VsdHMuU3VjY2Vzc106IFtgJHtCQVNFX1VSTH0vYF0sXG4gICAgICAgIFtMb2dpblJlc3VsdHMuSW52YWxpZFBhc3N3b3JkXTogWycuY3VzdG9tLWlucHV0LWVycm9yLWxhYmVsJ10sXG4gICAgICB9LFxuICAgICAgc3VibWl0QnV0dG9uU2VsZWN0b3I6IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgc2xlZXAoMTAwMCk7XG4gICAgICAgIGRlYnVnKCdUcnlpbmcgdG8gZmluZCBzdWJtaXQgYnV0dG9uJyk7XG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IGF3YWl0IHRoaXMucGFnZS4kKCd4cGF0aD0vL2J1dHRvbltjb250YWlucyguLCBcIteU16rXl9eR16jXldeqXCIpXScpO1xuICAgICAgICBpZiAoYnV0dG9uKSB7XG4gICAgICAgICAgZGVidWcoJ1N1Ym1pdCBidXR0b24gZm91bmQnKTtcbiAgICAgICAgICBhd2FpdCBidXR0b24uY2xpY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWJ1ZygnU3VibWl0IGJ1dHRvbiBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hEYXRhKCk6IFByb21pc2U8U2NyYXBlclNjcmFwaW5nUmVzdWx0PiB7XG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLnBhZ2UuZXZhbHVhdGUoKCkgPT4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VyVG9rZW4nKSk7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgZGVidWcoJ1Rva2VuIG5vdCBmb3VuZCBpbiBsb2NhbCBzdG9yYWdlJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiAnVG9rZW5Ob3RGb3VuZCcsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICBGcm9tRGF0ZTogbW9tZW50KHRoaXMub3B0aW9ucy5zdGFydERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERFRISDptbTpzcycpLFxuICAgICAgVG9EYXRlOiBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tRERUSEg6bW06c3MnKSxcbiAgICAgIEJlbmVmaXRTdGF0dXNJZDogbnVsbCxcbiAgICB9O1xuXG4gICAgZGVidWcoJ0ZldGNoaW5nIGRhdGEnKTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoUG9zdFdpdGhpblBhZ2U8UHVyY2hhc2VIaXN0b3J5UmVzcG9uc2U+KHRoaXMucGFnZSwgUFVSQ0hBU0VfSElTVE9SWV9VUkwsIGJvZHksIHtcbiAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIG9yZ2FuaXphdGlvbmlkOiAnMjAnLFxuICAgIH0pO1xuXG4gICAgZGVidWcoJ0RhdGEgZmV0Y2hlZCcpO1xuXG4gICAgaWYgKHJlcz8uZXJyb3JEZXNjcmlwdGlvbiB8fCByZXM/LmRhdGE/LmVycm9yRGVzY3JpcHRpb24pIHtcbiAgICAgIGRlYnVnKCdFcnJvciBmZXRjaGluZyBkYXRhJywgcmVzLmVycm9yRGVzY3JpcHRpb24gfHwgcmVzLmRhdGE/LmVycm9yRGVzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yTWVzc2FnZTogcmVzLmVycm9yRGVzY3JpcHRpb24gfTtcbiAgICB9XG5cbiAgICBpZiAoIXJlcz8uZGF0YSkge1xuICAgICAgZGVidWcoJ05vIGRhdGEgZm91bmQnKTtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvck1lc3NhZ2U6ICdOb0RhdGEnIH07XG4gICAgfVxuXG4gICAgZGVidWcoJ0RhdGEgZmV0Y2hlZCBzdWNjZXNzZnVsbHknKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIGFjY291bnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY2NvdW50TnVtYmVyOiByZXMuZGF0YS5tZW1iZXJJZCxcbiAgICAgICAgICB0eG5zOiByZXMuZGF0YS52YXJpYW50cy5tYXAodmFyaWFudFRvVHJhbnNhY3Rpb24pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJlaGF0c2RhYVNjcmFwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLHFCQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxRQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxhQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSx1QkFBQSxHQUFBTixPQUFBO0FBQXNHLFNBQUFELHVCQUFBUSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBR3RHLE1BQU1HLFFBQVEsR0FBRyw4QkFBOEI7QUFDL0MsTUFBTUMsU0FBUyxHQUFHLEdBQUdELFFBQVEsUUFBUTtBQUNyQyxNQUFNRSxvQkFBb0IsR0FBRyw2REFBNkQ7QUFFMUYsTUFBTUMsS0FBSyxHQUFHLElBQUFDLGVBQVEsRUFBQyxXQUFXLENBQUM7QUFxQm5DLFNBQVNDLG9CQUFvQkEsQ0FBQ0MsT0FBZ0IsRUFBZTtFQUMzRDtFQUNBLE1BQU1DLGNBQWMsR0FBRyxDQUFDRCxPQUFPLENBQUNFLGFBQWE7RUFDN0MsT0FBTztJQUNMQyxJQUFJLEVBQUVDLDhCQUFnQixDQUFDQyxNQUFNO0lBQzdCQyxVQUFVLEVBQUVOLE9BQU8sQ0FBQ08sY0FBYztJQUNsQ0MsSUFBSSxFQUFFLElBQUFDLGVBQU0s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
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _definitions = require("../definitions");
4
+ var _testsUtils = require("../tests/tests-utils");
5
+ var _baseScraperWithBrowser = require("./base-scraper-with-browser");
6
+ var _behatsdaa = _interopRequireDefault(require("./behatsdaa"));
7
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
+ const testsConfig = (0, _testsUtils.getTestsConfig)();
9
+ describe('Behatsdaa scraper', () => {
10
+ beforeAll(() => {
11
+ (0, _testsUtils.extendAsyncTimeout)();
12
+ });
13
+ it('should expose login fields in scrapers constant', () => {
14
+ expect(_definitions.SCRAPERS[_definitions.CompanyTypes.behatsdaa]).toBeDefined();
15
+ expect(_definitions.SCRAPERS[_definitions.CompanyTypes.behatsdaa].loginFields).toContain('id');
16
+ expect(_definitions.SCRAPERS[_definitions.CompanyTypes.behatsdaa].loginFields).toContain('password');
17
+ });
18
+ (0, _testsUtils.maybeTestCompanyAPI)(_definitions.CompanyTypes.behatsdaa, config => config.companyAPI.invalidPassword)('should fail on invalid user/password"', async () => {
19
+ const scraper = new _behatsdaa.default({
20
+ ...testsConfig.options,
21
+ companyId: _definitions.CompanyTypes.behatsdaa
22
+ });
23
+ const result = await scraper.scrape({
24
+ id: 'foofoofoo',
25
+ password: 'barbarbar'
26
+ });
27
+ expect(result).toBeDefined();
28
+ expect(result.success).toBeFalsy();
29
+ expect(result.errorType).toBe(_baseScraperWithBrowser.LoginResults.InvalidPassword);
30
+ });
31
+ (0, _testsUtils.maybeTestCompanyAPI)(_definitions.CompanyTypes.behatsdaa)('should scrape transactions', async () => {
32
+ const scraper = new _behatsdaa.default({
33
+ ...testsConfig.options,
34
+ companyId: _definitions.CompanyTypes.behatsdaa
35
+ });
36
+ const result = await scraper.scrape(testsConfig.credentials[_definitions.CompanyTypes.behatsdaa]);
37
+ expect(result).toBeDefined();
38
+ expect(result.errorMessage).toBeFalsy();
39
+ expect(result.errorType).toBeFalsy();
40
+ expect(result.success).toBeTruthy();
41
+ expect(result.accounts).toBeDefined();
42
+ expect(result.accounts).toHaveLength(1);
43
+ (0, _testsUtils.exportTransactions)(_definitions.CompanyTypes.behatsdaa, result.accounts || []);
44
+ });
45
+ });
46
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVmaW5pdGlvbnMiLCJyZXF1aXJlIiwiX3Rlc3RzVXRpbHMiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsIl9iZWhhdHNkYWEiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidGVzdHNDb25maWciLCJnZXRUZXN0c0NvbmZpZyIsImRlc2NyaWJlIiwiYmVmb3JlQWxsIiwiZXh0ZW5kQXN5bmNUaW1lb3V0IiwiaXQiLCJleHBlY3QiLCJTQ1JBUEVSUyIsIkNvbXBhbnlUeXBlcyIsImJlaGF0c2RhYSIsInRvQmVEZWZpbmVkIiwibG9naW5GaWVsZHMiLCJ0b0NvbnRhaW4iLCJtYXliZVRlc3RDb21wYW55QVBJIiwiY29uZmlnIiwiY29tcGFueUFQSSIsImludmFsaWRQYXNzd29yZCIsInNjcmFwZXIiLCJCZWhhdHNkYWFTY3JhcGVyIiwib3B0aW9ucyIsImNvbXBhbnlJZCIsInJlc3VsdCIsInNjcmFwZSIsImlkIiwicGFzc3dvcmQiLCJzdWNjZXNzIiwidG9CZUZhbHN5IiwiZXJyb3JUeXBlIiwidG9CZSIsIkxvZ2luUmVzdWx0cyIsIkludmFsaWRQYXNzd29yZCIsImNyZWRlbnRpYWxzIiwiZXJyb3JNZXNzYWdlIiwidG9CZVRydXRoeSIsImFjY291bnRzIiwidG9IYXZlTGVuZ3RoIiwiZXhwb3J0VHJhbnNhY3Rpb25zIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmFwZXJzL2JlaGF0c2RhYS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBhbnlUeXBlcywgU0NSQVBFUlMgfSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBleHBvcnRUcmFuc2FjdGlvbnMsIGV4dGVuZEFzeW5jVGltZW91dCwgZ2V0VGVzdHNDb25maWcsIG1heWJlVGVzdENvbXBhbnlBUEkgfSBmcm9tICcuLi90ZXN0cy90ZXN0cy11dGlscyc7XG5pbXBvcnQgeyBMb2dpblJlc3VsdHMgfSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuaW1wb3J0IEJlaGF0c2RhYVNjcmFwZXIgZnJvbSAnLi9iZWhhdHNkYWEnO1xuXG5jb25zdCB0ZXN0c0NvbmZpZyA9IGdldFRlc3RzQ29uZmlnKCk7XG5cbmRlc2NyaWJlKCdCZWhhdHNkYWEgc2NyYXBlcicsICgpID0+IHtcbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBleHRlbmRBc3luY1RpbWVvdXQoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBleHBvc2UgbG9naW4gZmllbGRzIGluIHNjcmFwZXJzIGNvbnN0YW50JywgKCkgPT4ge1xuICAgIGV4cGVjdChTQ1JBUEVSU1tDb21wYW55VHlwZXMuYmVoYXRzZGFhXSkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QoU0NSQVBFUlNbQ29tcGFueVR5cGVzLmJlaGF0c2RhYV0ubG9naW5GaWVsZHMpLnRvQ29udGFpbignaWQnKTtcbiAgICBleHBlY3QoU0NSQVBFUlNbQ29tcGFueVR5cGVzLmJlaGF0c2RhYV0ubG9naW5GaWVsZHMpLnRvQ29udGFpbigncGFzc3dvcmQnKTtcbiAgfSk7XG5cbiAgbWF5YmVUZXN0Q29tcGFueUFQSShDb21wYW55VHlwZXMuYmVoYXRzZGFhLCBjb25maWcgPT4gY29uZmlnLmNvbXBhbnlBUEkuaW52YWxpZFBhc3N3b3JkKShcbiAgICAnc2hvdWxkIGZhaWwgb24gaW52YWxpZCB1c2VyL3Bhc3N3b3JkXCInLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNjcmFwZXIgPSBuZXcgQmVoYXRzZGFhU2NyYXBlcih7XG4gICAgICAgIC4uLnRlc3RzQ29uZmlnLm9wdGlvbnMsXG4gICAgICAgIGNvbXBhbnlJZDogQ29tcGFueVR5cGVzLmJlaGF0c2RhYSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzY3JhcGVyLnNjcmFwZSh7IGlkOiAnZm9vZm9vZm9vJywgcGFzc3dvcmQ6ICdiYXJiYXJiYXInIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zdWNjZXNzKS50b0JlRmFsc3koKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZXJyb3JUeXBlKS50b0JlKExvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmQpO1xuICAgIH0sXG4gICk7XG5cbiAgbWF5YmVUZXN0Q29tcGFueUFQSShDb21wYW55VHlwZXMuYmVoYXRzZGFhKSgnc2hvdWxkIHNjcmFwZSB0cmFuc2FjdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2NyYXBlciA9IG5ldyBCZWhhdHNkYWFTY3JhcGVyKHtcbiAgICAgIC4uLnRlc3RzQ29uZmlnLm9wdGlvbnMsXG4gICAgICBjb21wYW55SWQ6IENvbXBhbnlUeXBlcy5iZWhhdHNkYWEsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzY3JhcGVyLnNjcmFwZSh0ZXN0c0NvbmZpZy5jcmVkZW50aWFsc1tDb21wYW55VHlwZXMuYmVoYXRzZGFhXSk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QocmVzdWx0LmVycm9yTWVzc2FnZSkudG9CZUZhbHN5KCk7XG4gICAgZXhwZWN0KHJlc3VsdC5lcnJvclR5cGUpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdChyZXN1bHQuc3VjY2VzcykudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChyZXN1bHQuYWNjb3VudHMpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KHJlc3VsdC5hY2NvdW50cykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cG9ydFRyYW5zYWN0aW9ucyhDb21wYW55VHlwZXMuYmVoYXRzZGFhLCByZXN1bHQuYWNjb3VudHMgfHwgW10pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUFBLFlBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLHVCQUFBLEdB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
@@ -0,0 +1,7 @@
1
+ import BeinleumiGroupBaseScraper from './base-beinleumi-group';
2
+ declare class BeinleumiScraper extends BeinleumiGroupBaseScraper {
3
+ BASE_URL: string;
4
+ LOGIN_URL: string;
5
+ TRANSACTIONS_URL: string;
6
+ }
7
+ export default BeinleumiScraper;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _baseBeinleumiGroup = _interopRequireDefault(require("./base-beinleumi-group"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ class BeinleumiScraper extends _baseBeinleumiGroup.default {
10
+ BASE_URL = 'https://online.fibi.co.il';
11
+ LOGIN_URL = `${this.BASE_URL}/MatafLoginService/MatafLoginServlet?bankId=FIBIPORTAL&site=Private&KODSAFA=HE`;
12
+ TRANSACTIONS_URL = `${this.BASE_URL}/wps/myportal/FibiMenu/Online/OnAccountMngment/OnBalanceTrans/PrivateAccountFlow`;
13
+ }
14
+ var _default = exports.default = BeinleumiScraper;
15
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmFzZUJlaW5sZXVtaUdyb3VwIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJCZWlubGV1bWlTY3JhcGVyIiwiQmVpbmxldW1pR3JvdXBCYXNlU2NyYXBlciIsIkJBU0VfVVJMIiwiTE9HSU5fVVJMIiwiVFJBTlNBQ1RJT05TX1VSTCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9iZWlubGV1bWkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJlaW5sZXVtaUdyb3VwQmFzZVNjcmFwZXIgZnJvbSAnLi9iYXNlLWJlaW5sZXVtaS1ncm91cCc7XG5cbmNsYXNzIEJlaW5sZXVtaVNjcmFwZXIgZXh0ZW5kcyBCZWlubGV1bWlHcm91cEJhc2VTY3JhcGVyIHtcbiAgQkFTRV9VUkwgPSAnaHR0cHM6Ly9vbmxpbmUuZmliaS5jby5pbCc7XG5cbiAgTE9HSU5fVVJMID0gYCR7dGhpcy5CQVNFX1VSTH0vTWF0YWZMb2dpblNlcnZpY2UvTWF0YWZMb2dpblNlcnZsZXQ/YmFua0lkPUZJQklQT1JUQUwmc2l0ZT1Qcml2YXRlJktPRFNBRkE9SEVgO1xuXG4gIFRSQU5TQUNUSU9OU19VUkwgPSBgJHt0aGlzLkJBU0VfVVJMfS93cHMvbXlwb3J0YWwvRmliaU1lbnUvT25saW5lL09uQWNjb3VudE1uZ21lbnQvT25CYWxhbmNlVHJhbnMvUHJpdmF0ZUFjY291bnRGbG93YDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQmVpbmxldW1pU2NyYXBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsbUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUErRCxTQUFBRCx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUUvRCxNQUFNRyxnQkFBZ0IsU0FBU0MsMkJBQXlCLENBQUM7RUFDdkRDLFFBQVEsR0FBRywyQkFBMkI7RUFFdENDLFNBQVMsR0FBRyxHQUFHLElBQUksQ0FBQ0QsUUFBUSxnRkFBZ0Y7RUFFNUdFLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxDQUFDRixRQUFRLGtGQUFrRjtBQUN2SDtBQUFDLElBQUFHLFFBQUEsR0FBQUMsT0FBQSxDQUFBUCxPQUFBLEdBRWNDLGdCQUFnQiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ var _beinleumi = _interopRequireDefault(require("./beinleumi"));
4
+ var _testsUtils = require("../tests/tests-utils");
5
+ var _definitions = require("../definitions");
6
+ var _baseScraperWithBrowser = require("./base-scraper-with-browser");
7
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
+ const COMPANY_ID = 'beinleumi'; // TODO this property should be hard-coded in the provider
9
+ const testsConfig = (0, _testsUtils.getTestsConfig)();
10
+ describe('Beinleumi', () => {
11
+ beforeAll(() => {
12
+ (0, _testsUtils.extendAsyncTimeout)(); // The default timeout is 5 seconds per async test, this function extends the timeout value
13
+ });
14
+ test('should expose login fields in scrapers constant', () => {
15
+ expect(_definitions.SCRAPERS.beinleumi).toBeDefined();
16
+ expect(_definitions.SCRAPERS.beinleumi.loginFields).toContain('username');
17
+ expect(_definitions.SCRAPERS.beinleumi.loginFields).toContain('password');
18
+ });
19
+ (0, _testsUtils.maybeTestCompanyAPI)(COMPANY_ID, config => config.companyAPI.invalidPassword)('should fail on invalid user/password', async () => {
20
+ const options = {
21
+ ...testsConfig.options,
22
+ companyId: COMPANY_ID
23
+ };
24
+ const scraper = new _beinleumi.default(options);
25
+ const result = await scraper.scrape({
26
+ username: 'e10s12',
27
+ password: '3f3ss3d'
28
+ });
29
+ expect(result).toBeDefined();
30
+ expect(result.success).toBeFalsy();
31
+ expect(result.errorType).toBe(_baseScraperWithBrowser.LoginResults.InvalidPassword);
32
+ });
33
+ (0, _testsUtils.maybeTestCompanyAPI)(COMPANY_ID)('should scrape transactions"', async () => {
34
+ const options = {
35
+ ...testsConfig.options,
36
+ companyId: COMPANY_ID
37
+ };
38
+ const scraper = new _beinleumi.default(options);
39
+ const result = await scraper.scrape(testsConfig.credentials.beinleumi);
40
+ expect(result).toBeDefined();
41
+ const error = `${result.errorType || ''} ${result.errorMessage || ''}`.trim();
42
+ expect(error).toBe('');
43
+ expect(result.success).toBeTruthy();
44
+ (0, _testsUtils.exportTransactions)(COMPANY_ID, result.accounts || []);
45
+ });
46
+ });
47
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmVpbmxldW1pIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfdGVzdHNVdGlscyIsIl9kZWZpbml0aW9ucyIsIl9iYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiQ09NUEFOWV9JRCIsInRlc3RzQ29uZmlnIiwiZ2V0VGVzdHNDb25maWciLCJkZXNjcmliZSIsImJlZm9yZUFsbCIsImV4dGVuZEFzeW5jVGltZW91dCIsInRlc3QiLCJleHBlY3QiLCJTQ1JBUEVSUyIsImJlaW5sZXVtaSIsInRvQmVEZWZpbmVkIiwibG9naW5GaWVsZHMiLCJ0b0NvbnRhaW4iLCJtYXliZVRlc3RDb21wYW55QVBJIiwiY29uZmlnIiwiY29tcGFueUFQSSIsImludmFsaWRQYXNzd29yZCIsIm9wdGlvbnMiLCJjb21wYW55SWQiLCJzY3JhcGVyIiwiQmVpbmxldW1pU2NyYXBlciIsInJlc3VsdCIsInNjcmFwZSIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJzdWNjZXNzIiwidG9CZUZhbHN5IiwiZXJyb3JUeXBlIiwidG9CZSIsIkxvZ2luUmVzdWx0cyIsIkludmFsaWRQYXNzd29yZCIsImNyZWRlbnRpYWxzIiwiZXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJ0cmltIiwidG9CZVRydXRoeSIsImV4cG9ydFRyYW5zYWN0aW9ucyIsImFjY291bnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmFwZXJzL2JlaW5sZXVtaS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCZWlubGV1bWlTY3JhcGVyIGZyb20gJy4vYmVpbmxldW1pJztcbmltcG9ydCB7IG1heWJlVGVzdENvbXBhbnlBUEksIGV4dGVuZEFzeW5jVGltZW91dCwgZ2V0VGVzdHNDb25maWcsIGV4cG9ydFRyYW5zYWN0aW9ucyB9IGZyb20gJy4uL3Rlc3RzL3Rlc3RzLXV0aWxzJztcbmltcG9ydCB7IFNDUkFQRVJTIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgTG9naW5SZXN1bHRzIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcblxuY29uc3QgQ09NUEFOWV9JRCA9ICdiZWlubGV1bWknOyAvLyBUT0RPIHRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIGhhcmQtY29kZWQgaW4gdGhlIHByb3ZpZGVyXG5jb25zdCB0ZXN0c0NvbmZpZyA9IGdldFRlc3RzQ29uZmlnKCk7XG5cbmRlc2NyaWJlKCdCZWlubGV1bWknLCAoKSA9PiB7XG4gIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgZXh0ZW5kQXN5bmNUaW1lb3V0KCk7IC8vIFRoZSBkZWZhdWx0IHRpbWVvdXQgaXMgNSBzZWNvbmRzIHBlciBhc3luYyB0ZXN0LCB0aGlzIGZ1bmN0aW9uIGV4dGVuZHMgdGhlIHRpbWVvdXQgdmFsdWVcbiAgfSk7XG5cbiAgdGVzdCgnc2hvdWxkIGV4cG9zZSBsb2dpbiBmaWVsZHMgaW4gc2NyYXBlcnMgY29uc3RhbnQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KFNDUkFQRVJTLmJlaW5sZXVtaSkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QoU0NSQVBFUlMuYmVpbmxldW1pLmxvZ2luRmllbGRzKS50b0NvbnRhaW4oJ3VzZXJuYW1lJyk7XG4gICAgZXhwZWN0KFNDUkFQRVJTLmJlaW5sZXVtaS5sb2dpbkZpZWxkcykudG9Db250YWluKCdwYXNzd29yZCcpO1xuICB9KTtcblxuICBtYXliZVRlc3RDb21wYW55QVBJKENPTVBBTllfSUQsIGNvbmZpZyA9PiBjb25maWcuY29tcGFueUFQSS5pbnZhbGlkUGFzc3dvcmQpKFxuICAgICdzaG91bGQgZmFpbCBvbiBpbnZhbGlkIHVzZXIvcGFzc3dvcmQnLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRlc3RzQ29uZmlnLm9wdGlvbnMsXG4gICAgICAgIGNvbXBhbnlJZDogQ09NUEFOWV9JRCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNjcmFwZXIgPSBuZXcgQmVpbmxldW1pU2NyYXBlcihvcHRpb25zKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2NyYXBlci5zY3JhcGUoeyB1c2VybmFtZTogJ2UxMHMxMicsIHBhc3N3b3JkOiAnM2Yzc3MzZCcgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QocmVzdWx0LnN1Y2Nlc3MpLnRvQmVGYWxzeSgpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5lcnJvclR5cGUpLnRvQmUoTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZCk7XG4gICAgfSxcbiAgKTtcblxuICBtYXliZVRlc3RDb21wYW55QVBJKENPTVBBTllfSUQpKCdzaG91bGQgc2NyYXBlIHRyYW5zYWN0aW9uc1wiJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAuLi50ZXN0c0NvbmZpZy5vcHRpb25zLFxuICAgICAgY29tcGFueUlkOiBDT01QQU5ZX0lELFxuICAgIH07XG5cbiAgICBjb25zdCBzY3JhcGVyID0gbmV3IEJlaW5sZXVtaVNjcmFwZXIob3B0aW9ucyk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2NyYXBlci5zY3JhcGUodGVzdHNDb25maWcuY3JlZGVudGlhbHMuYmVpbmxldW1pKTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlRGVmaW5lZCgpO1xuICAgIGNvbnN0IGVycm9yID0gYCR7cmVzdWx0LmVycm9yVHlwZSB8fCAnJ30gJHtyZXN1bHQuZXJyb3JNZXNzYWdlIHx8ICcnfWAudHJpbSgpO1xuICAgIGV4cGVjdChlcnJvcikudG9CZSgnJyk7XG4gICAgZXhwZWN0KHJlc3VsdC5zdWNjZXNzKS50b0JlVHJ1dGh5KCk7XG5cbiAgICBleHBvcnRUcmFuc2FjdGlvbnMoQ09NUEFOWV9JRCwgcmVzdWx0LmFjY291bnRzIHx8IFtdKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxV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
@@ -0,0 +1,30 @@
1
+ import { type Transaction } from '../transactions';
2
+ import { BaseScraperWithBrowser, type PossibleLoginResults } from './base-scraper-with-browser';
3
+ type ScraperSpecificCredentials = {
4
+ id: string;
5
+ password: string;
6
+ };
7
+ declare class BeyahadBishvilhaScraper extends BaseScraperWithBrowser<ScraperSpecificCredentials> {
8
+ protected getViewPort(): {
9
+ width: number;
10
+ height: number;
11
+ };
12
+ getLoginOptions(credentials: ScraperSpecificCredentials): {
13
+ loginUrl: string;
14
+ fields: {
15
+ selector: string;
16
+ value: string;
17
+ }[];
18
+ submitButtonSelector: () => Promise<void>;
19
+ possibleResults: PossibleLoginResults;
20
+ };
21
+ fetchData(): Promise<{
22
+ success: boolean;
23
+ accounts: {
24
+ accountNumber: any;
25
+ balance: number;
26
+ txns: Transaction[];
27
+ }[];
28
+ }>;
29
+ }
30
+ export default BeyahadBishvilhaScraper;
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _moment = _interopRequireDefault(require("moment"));
8
+ var _constants = require("../constants");
9
+ var _debug = require("../helpers/debug");
10
+ var _elementsInteractions = require("../helpers/elements-interactions");
11
+ var _transactions = require("../helpers/transactions");
12
+ var _transactions2 = require("../transactions");
13
+ var _baseScraperWithBrowser = require("./base-scraper-with-browser");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ const debug = (0, _debug.getDebug)('beyahadBishvilha');
16
+ const DATE_FORMAT = 'DD/MM/YY';
17
+ const LOGIN_URL = 'https://www.hist.org.il/login';
18
+ const SUCCESS_URL = 'https://www.hist.org.il/';
19
+ const CARD_URL = 'https://www.hist.org.il/card/balanceAndUses';
20
+ function getAmountData(amountStr) {
21
+ const amountStrCln = amountStr.replace(',', '');
22
+ let currency = null;
23
+ let amount = null;
24
+ if (amountStrCln.includes(_constants.SHEKEL_CURRENCY_SYMBOL)) {
25
+ amount = parseFloat(amountStrCln.replace(_constants.SHEKEL_CURRENCY_SYMBOL, ''));
26
+ currency = _constants.SHEKEL_CURRENCY;
27
+ } else if (amountStrCln.includes(_constants.DOLLAR_CURRENCY_SYMBOL)) {
28
+ amount = parseFloat(amountStrCln.replace(_constants.DOLLAR_CURRENCY_SYMBOL, ''));
29
+ currency = _constants.DOLLAR_CURRENCY;
30
+ } else if (amountStrCln.includes(_constants.EURO_CURRENCY_SYMBOL)) {
31
+ amount = parseFloat(amountStrCln.replace(_constants.EURO_CURRENCY_SYMBOL, ''));
32
+ currency = _constants.EURO_CURRENCY;
33
+ } else {
34
+ const parts = amountStrCln.split(' ');
35
+ [currency] = parts;
36
+ amount = parseFloat(parts[1]);
37
+ }
38
+ return {
39
+ amount,
40
+ currency
41
+ };
42
+ }
43
+ function convertTransactions(txns) {
44
+ debug(`convert ${txns.length} raw transactions to official Transaction structure`);
45
+ return txns.map(txn => {
46
+ const chargedAmountTuple = getAmountData(txn.chargedAmount || '');
47
+ const txnProcessedDate = (0, _moment.default)(txn.date, DATE_FORMAT);
48
+ const result = {
49
+ type: _transactions2.TransactionTypes.Normal,
50
+ status: _transactions2.TransactionStatuses.Completed,
51
+ date: txnProcessedDate.toISOString(),
52
+ processedDate: txnProcessedDate.toISOString(),
53
+ originalAmount: chargedAmountTuple.amount,
54
+ originalCurrency: chargedAmountTuple.currency,
55
+ chargedAmount: chargedAmountTuple.amount,
56
+ chargedCurrency: chargedAmountTuple.currency,
57
+ description: txn.description || '',
58
+ memo: '',
59
+ identifier: txn.identifier
60
+ };
61
+ return result;
62
+ });
63
+ }
64
+ async function fetchTransactions(page, options) {
65
+ await page.goto(CARD_URL);
66
+ await (0, _elementsInteractions.waitUntilElementFound)(page, '.react-loading.hide', false);
67
+ const defaultStartMoment = (0, _moment.default)().subtract(1, 'years');
68
+ const startDate = options.startDate || defaultStartMoment.toDate();
69
+ const startMoment = _moment.default.max(defaultStartMoment, (0, _moment.default)(startDate));
70
+ const accountNumber = await (0, _elementsInteractions.pageEval)(page, '.wallet-details div:nth-of-type(2)', null, element => {
71
+ return element.innerText.replace('מספר כרטיס ', '');
72
+ });
73
+ const balance = await (0, _elementsInteractions.pageEval)(page, '.wallet-details div:nth-of-type(4) > span:nth-of-type(2)', null, element => {
74
+ return element.innerText;
75
+ });
76
+ debug('fetch raw transactions from page');
77
+ const rawTransactions = await (0, _elementsInteractions.pageEvalAll)(page, '.transaction-container, .transaction-component-container', [], items => {
78
+ return items.map(el => {
79
+ const columns = el.querySelectorAll('.transaction-item > span');
80
+ if (columns.length === 7) {
81
+ return {
82
+ date: columns[0].innerText,
83
+ identifier: columns[1].innerText,
84
+ description: columns[3].innerText,
85
+ type: columns[5].innerText,
86
+ chargedAmount: columns[6].innerText
87
+ };
88
+ }
89
+ return null;
90
+ });
91
+ });
92
+ debug(`fetched ${rawTransactions.length} raw transactions from page`);
93
+ const accountTransactions = convertTransactions(rawTransactions.filter(item => !!item));
94
+ debug('filer out old transactions');
95
+ const txns = options.outputData?.enableTransactionsFilterByDate ?? true ? (0, _transactions.filterOldTransactions)(accountTransactions, startMoment, false) : accountTransactions;
96
+ debug(`found ${txns.length} valid transactions out of ${accountTransactions.length} transactions for account ending with ${accountNumber.substring(accountNumber.length - 2)}`);
97
+ return {
98
+ accountNumber,
99
+ balance: getAmountData(balance).amount,
100
+ txns
101
+ };
102
+ }
103
+ function getPossibleLoginResults() {
104
+ const urls = {};
105
+ urls[_baseScraperWithBrowser.LoginResults.Success] = [SUCCESS_URL];
106
+ urls[_baseScraperWithBrowser.LoginResults.ChangePassword] = []; // TODO
107
+ urls[_baseScraperWithBrowser.LoginResults.InvalidPassword] = []; // TODO
108
+ urls[_baseScraperWithBrowser.LoginResults.UnknownError] = []; // TODO
109
+ return urls;
110
+ }
111
+ function createLoginFields(credentials) {
112
+ return [{
113
+ selector: '#loginId',
114
+ value: credentials.id
115
+ }, {
116
+ selector: '#loginPassword',
117
+ value: credentials.password
118
+ }];
119
+ }
120
+ class BeyahadBishvilhaScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
121
+ getViewPort() {
122
+ return {
123
+ width: 1500,
124
+ height: 800
125
+ };
126
+ }
127
+ getLoginOptions(credentials) {
128
+ return {
129
+ loginUrl: LOGIN_URL,
130
+ fields: createLoginFields(credentials),
131
+ submitButtonSelector: async () => {
132
+ const button = await this.page.$('xpath//button[contains(., "התחבר")]');
133
+ if (button) {
134
+ await button.click();
135
+ }
136
+ },
137
+ possibleResults: getPossibleLoginResults()
138
+ };
139
+ }
140
+ async fetchData() {
141
+ const account = await fetchTransactions(this.page, this.options);
142
+ return {
143
+ success: true,
144
+ accounts: [account]
145
+ };
146
+ }
147
+ }
148
+ var _default = exports.default = BeyahadBishvilhaScraper;
149
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2RlYnVnIiwiX2VsZW1lbnRzSW50ZXJhY3Rpb25zIiwiX3RyYW5zYWN0aW9ucyIsIl90cmFuc2FjdGlvbnMyIiwiX2Jhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJkZWJ1ZyIsImdldERlYnVnIiwiREFURV9GT1JNQVQiLCJMT0dJTl9VUkwiLCJTVUNDRVNTX1VSTCIsIkNBUkRfVVJMIiwiZ2V0QW1vdW50RGF0YSIsImFtb3VudFN0ciIsImFtb3VudFN0ckNsbiIsInJlcGxhY2UiLCJjdXJyZW5jeSIsImFtb3VudCIsImluY2x1ZGVzIiwiU0hFS0VMX0NVUlJFTkNZX1NZTUJPTCIsInBhcnNlRmxvYXQiLCJTSEVLRUxfQ1VSUkVOQ1kiLCJET0xMQVJfQ1VSUkVOQ1lfU1lNQk9MIiwiRE9MTEFSX0NVUlJFTkNZIiwiRVVST19DVVJSRU5DWV9TWU1CT0wiLCJFVVJPX0NVUlJFTkNZIiwicGFydHMiLCJzcGxpdCIsImNvbnZlcnRUcmFuc2FjdGlvbnMiLCJ0eG5zIiwibGVuZ3RoIiwibWFwIiwidHhuIiwiY2hhcmdlZEFtb3VudFR1cGxlIiwiY2hhcmdlZEFtb3VudCIsInR4blByb2Nlc3NlZERhdGUiLCJtb21lbnQiLCJkYXRlIiwicmVzdWx0IiwidHlwZSIsIlRyYW5zYWN0aW9uVHlwZXMiLCJOb3JtYWwiLCJzdGF0dXMiLCJUcmFuc2FjdGlvblN0YXR1c2VzIiwiQ29tcGxldGVkIiwidG9JU09TdHJpbmciLCJwcm9jZXNzZWREYXRlIiwib3JpZ2luYWxBbW91bnQiLCJvcmlnaW5hbEN1cnJlbmN5IiwiY2hhcmdlZEN1cnJlbmN5IiwiZGVzY3JpcHRpb24iLCJtZW1vIiwiaWRlbnRpZmllciIsImZldGNoVHJhbnNhY3Rpb25zIiwicGFnZSIsIm9wdGlvbnMiLCJnb3RvIiwid2FpdFVudGlsRWxlbWVudEZvdW5kIiwiZGVmYXVsdFN0YXJ0TW9tZW50Iiwic3VidHJhY3QiLCJzdGFydERhdGUiLCJ0b0RhdGUiLCJzdGFydE1vbWVudCIsIm1heCIsImFjY291bnROdW1iZXIiLCJwYWdlRXZhbCIsImVsZW1lbnQiLCJpbm5lclRleHQiLCJiYWxhbmNlIiwicmF3VHJhbnNhY3Rpb25zIiwicGFnZUV2YWxBbGwiLCJpdGVtcyIsImVsIiwiY29sdW1ucyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJhY2NvdW50VHJhbnNhY3Rpb25zIiwiZmlsdGVyIiwiaXRlbSIsIm91dHB1dERhdGEiLCJlbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGUiLCJmaWx0ZXJPbGRUcmFuc2FjdGlvbnMiLCJzdWJzdHJpbmciLCJnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyIsInVybHMiLCJMb2dpblJlc3VsdHMiLCJTdWNjZXNzIiwiQ2hhbmdlUGFzc3dvcmQiLCJJbnZhbGlkUGFzc3dvcmQiLCJVbmtub3duRXJyb3IiLCJjcmVhdGVMb2dpbkZpZWxkcyIsImNyZWRlbnRpYWxzIiwic2VsZWN0b3IiLCJ2YWx1ZSIsImlkIiwicGFzc3dvcmQiLCJCZXlhaGFkQmlzaHZpbGhhU2NyYXBlciIsIkJhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJnZXRWaWV3UG9ydCIsIndpZHRoIiwiaGVpZ2h0IiwiZ2V0TG9naW5PcHRpb25zIiwibG9naW5VcmwiLCJmaWVsZHMiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsImJ1dHRvbiIsIiQiLCJjbGljayIsInBvc3NpYmxlUmVzdWx0cyIsImZldGNoRGF0YSIsImFjY291bnQiLCJzdWNjZXNzIiwiYWNjb3VudHMiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyYXBlcnMvYmV5YWhhZC1iaXNodmlsaGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgdHlwZSBQYWdlIH0gZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7XG4gIERPTExBUl9DVVJSRU5DWSxcbiAgRE9MTEFSX0NVUlJFTkNZX1NZTUJPTCxcbiAgRVVST19DVVJSRU5DWSxcbiAgRVVST19DVVJSRU5DWV9TWU1CT0wsXG4gIFNIRUtFTF9DVVJSRU5DWSxcbiAgU0hFS0VMX0NVUlJFTkNZX1NZTUJPTCxcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQgeyBwYWdlRXZhbCwgcGFnZUV2YWxBbGwsIHdhaXRVbnRpbEVsZW1lbnRGb3VuZCB9IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IGZpbHRlck9sZFRyYW5zYWN0aW9ucyB9IGZyb20gJy4uL2hlbHBlcnMvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uU3RhdHVzZXMsIFRyYW5zYWN0aW9uVHlwZXMsIHR5cGUgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgQmFzZVNjcmFwZXJXaXRoQnJvd3NlciwgTG9naW5SZXN1bHRzLCB0eXBlIFBvc3NpYmxlTG9naW5SZXN1bHRzIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcbmltcG9ydCB7IHR5cGUgU2NyYXBlck9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5cbmNvbnN0IGRlYnVnID0gZ2V0RGVidWcoJ2JleWFoYWRCaXNodmlsaGEnKTtcblxuY29uc3QgREFURV9GT1JNQVQgPSAnREQvTU0vWVknO1xuY29uc3QgTE9HSU5fVVJMID0gJ2h0dHBzOi8vd3d3Lmhpc3Qub3JnLmlsL2xvZ2luJztcbmNvbnN0IFNVQ0NFU1NfVVJMID0gJ2h0dHBzOi8vd3d3Lmhpc3Qub3JnLmlsLyc7XG5jb25zdCBDQVJEX1VSTCA9ICdodHRwczovL3d3dy5oaXN0Lm9yZy5pbC9jYXJkL2JhbGFuY2VBbmRVc2VzJztcblxuaW50ZXJmYWNlIFNjcmFwZWRUcmFuc2FjdGlvbiB7XG4gIGRhdGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBjaGFyZ2VkQW1vdW50OiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0QW1vdW50RGF0YShhbW91bnRTdHI6IHN0cmluZykge1xuICBjb25zdCBhbW91bnRTdHJDbG4gPSBhbW91bnRTdHIucmVwbGFjZSgnLCcsICcnKTtcbiAgbGV0IGN1cnJlbmN5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgbGV0IGFtb3VudDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGlmIChhbW91bnRTdHJDbG4uaW5jbHVkZXMoU0hFS0VMX0NVUlJFTkNZX1NZTUJPTCkpIHtcbiAgICBhbW91bnQgPSBwYXJzZUZsb2F0KGFtb3VudFN0ckNsbi5yZXBsYWNlKFNIRUtFTF9DVVJSRU5DWV9TWU1CT0wsICcnKSk7XG4gICAgY3VycmVuY3kgPSBTSEVLRUxfQ1VSUkVOQ1k7XG4gIH0gZWxzZSBpZiAoYW1vdW50U3RyQ2xuLmluY2x1ZGVzKERPTExBUl9DVVJSRU5DWV9TWU1CT0wpKSB7XG4gICAgYW1vdW50ID0gcGFyc2VGbG9hdChhbW91bnRTdHJDbG4ucmVwbGFjZShET0xMQVJfQ1VSUkVOQ1lfU1lNQk9MLCAnJykpO1xuICAgIGN1cnJlbmN5ID0gRE9MTEFSX0NVUlJFTkNZO1xuICB9IGVsc2UgaWYgKGFtb3VudFN0ckNsbi5pbmNsdWRlcyhFVVJPX0NVUlJFTkNZX1NZTUJPTCkpIHtcbiAgICBhbW91bnQgPSBwYXJzZUZsb2F0KGFtb3VudFN0ckNsbi5yZXBsYWNlKEVVUk9fQ1VSUkVOQ1lfU1lNQk9MLCAnJykpO1xuICAgIGN1cnJlbmN5ID0gRVVST19DVVJSRU5DWTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJ0cyA9IGFtb3VudFN0ckNsbi5zcGxpdCgnICcpO1xuICAgIFtjdXJyZW5jeV0gPSBwYXJ0cztcbiAgICBhbW91bnQgPSBwYXJzZUZsb2F0KHBhcnRzWzFdKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYW1vdW50LFxuICAgIGN1cnJlbmN5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VHJhbnNhY3Rpb25zKHR4bnM6IFNjcmFwZWRUcmFuc2FjdGlvbltdKTogVHJhbnNhY3Rpb25bXSB7XG4gIGRlYnVnKGBjb252ZXJ0ICR7dHhucy5sZW5ndGh9IHJhdyB0cmFuc2FjdGlvbnMgdG8gb2ZmaWNpYWwgVHJhbnNhY3Rpb24gc3RydWN0dXJlYCk7XG4gIHJldHVybiB0eG5zLm1hcCh0eG4gPT4ge1xuICAgIGNvbnN0IGNoYXJnZWRBbW91bnRUdXBsZSA9IGdldEFtb3VudERhdGEodHhuLmNoYXJnZWRBbW91bnQgfHwgJycpO1xuICAgIGNvbnN0IHR4blByb2Nlc3NlZERhdGUgPSBtb21lbnQodHhuLmRhdGUsIERBVEVfRk9STUFUKTtcblxuICAgIGNvbnN0IHJlc3VsdDogVHJhbnNhY3Rpb24gPSB7XG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGVzLk5vcm1hbCxcbiAgICAgIHN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXNlcy5Db21wbGV0ZWQsXG4gICAgICBkYXRlOiB0eG5Qcm9jZXNzZWREYXRlLnRvSVNPU3RyaW5nKCksXG4gICAgICBwcm9jZXNzZWREYXRlOiB0eG5Qcm9jZXNzZWREYXRlLnRvSVNPU3RyaW5nKCksXG4gICAgICBvcmlnaW5hbEFtb3VudDogY2hhcmdlZEFtb3VudFR1cGxlLmFtb3VudCxcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IGNoYXJnZWRBbW91bnRUdXBsZS5jdXJyZW5jeSxcbiAgICAgIGNoYXJnZWRBbW91bnQ6IGNoYXJnZWRBbW91bnRUdXBsZS5hbW91bnQsXG4gICAgICBjaGFyZ2VkQ3VycmVuY3k6IGNoYXJnZWRBbW91bnRUdXBsZS5jdXJyZW5jeSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0eG4uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICBtZW1vOiAnJyxcbiAgICAgIGlkZW50aWZpZXI6IHR4bi5pZGVudGlmaWVyLFxuICAgIH07XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hUcmFuc2FjdGlvbnMocGFnZTogUGFnZSwgb3B0aW9uczogU2NyYXBlck9wdGlvbnMpIHtcbiAgYXdhaXQgcGFnZS5nb3RvKENBUkRfVVJMKTtcbiAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICcucmVhY3QtbG9hZGluZy5oaWRlJywgZmFsc2UpO1xuICBjb25zdCBkZWZhdWx0U3RhcnRNb21lbnQgPSBtb21lbnQoKS5zdWJ0cmFjdCgxLCAneWVhcnMnKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gb3B0aW9ucy5zdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudC5tYXgoZGVmYXVsdFN0YXJ0TW9tZW50LCBtb21lbnQoc3RhcnREYXRlKSk7XG5cbiAgY29uc3QgYWNjb3VudE51bWJlciA9IGF3YWl0IHBhZ2VFdmFsKHBhZ2UsICcud2FsbGV0LWRldGFpbHMgZGl2Om50aC1vZi10eXBlKDIpJywgbnVsbCwgZWxlbWVudCA9PiB7XG4gICAgcmV0dXJuIChlbGVtZW50IGFzIGFueSkuaW5uZXJUZXh0LnJlcGxhY2UoJ9ee16HXpNeoINeb16jXmNeZ16EgJywgJycpO1xuICB9KTtcblxuICBjb25zdCBiYWxhbmNlID0gYXdhaXQgcGFnZUV2YWwocGFnZSwgJy53YWxsZXQtZGV0YWlscyBkaXY6bnRoLW9mLXR5cGUoNCkgPiBzcGFuOm50aC1vZi10eXBlKDIpJywgbnVsbCwgZWxlbWVudCA9PiB7XG4gICAgcmV0dXJuIChlbGVtZW50IGFzIGFueSkuaW5uZXJUZXh0O1xuICB9KTtcblxuICBkZWJ1ZygnZmV0Y2ggcmF3IHRyYW5zYWN0aW9ucyBmcm9tIHBhZ2UnKTtcblxuICBjb25zdCByYXdUcmFuc2FjdGlvbnM6IChTY3JhcGVkVHJhbnNhY3Rpb24gfCBudWxsKVtdID0gYXdhaXQgcGFnZUV2YWxBbGw8KFNjcmFwZWRUcmFuc2FjdGlvbiB8IG51bGwpW10+KFxuICAgIHBhZ2UsXG4gICAgJy50cmFuc2FjdGlvbi1jb250YWluZXIsIC50cmFuc2FjdGlvbi1jb21wb25lbnQtY29udGFpbmVyJyxcbiAgICBbXSxcbiAgICBpdGVtcyA9PiB7XG4gICAgICByZXR1cm4gaXRlbXMubWFwKGVsID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uczogTm9kZUxpc3RPZjxIVE1MU3BhbkVsZW1lbnQ+ID0gZWwucXVlcnlTZWxlY3RvckFsbCgnLnRyYW5zYWN0aW9uLWl0ZW0gPiBzcGFuJyk7XG4gICAgICAgIGlmIChjb2x1bW5zLmxlbmd0aCA9PT0gNykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRlOiBjb2x1bW5zWzBdLmlubmVyVGV4dCxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGNvbHVtbnNbMV0uaW5uZXJUZXh0LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGNvbHVtbnNbM10uaW5uZXJUZXh0LFxuICAgICAgICAgICAgdHlwZTogY29sdW1uc1s1XS5pbm5lclRleHQsXG4gICAgICAgICAgICBjaGFyZ2VkQW1vdW50OiBjb2x1bW5zWzZdLmlubmVyVGV4dCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgfSxcbiAgKTtcbiAgZGVidWcoYGZldGNoZWQgJHtyYXdUcmFuc2FjdGlvbnMubGVuZ3RofSByYXcgdHJhbnNhY3Rpb25zIGZyb20gcGFnZWApO1xuXG4gIGNvbnN0IGFjY291bnRUcmFuc2FjdGlvbnMgPSBjb252ZXJ0VHJhbnNhY3Rpb25zKHJhd1RyYW5zYWN0aW9ucy5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pIGFzIFNjcmFwZWRUcmFuc2FjdGlvbltdKTtcblxuICBkZWJ1ZygnZmlsZXIgb3V0IG9sZCB0cmFuc2FjdGlvbnMnKTtcbiAgY29uc3QgdHhucyA9XG4gICAgKG9wdGlvbnMub3V0cHV0RGF0YT8uZW5hYmxlVHJhbnNhY3Rpb25zRmlsdGVyQnlEYXRlID8/IHRydWUpXG4gICAgICA/IGZpbHRlck9sZFRyYW5zYWN0aW9ucyhhY2NvdW50VHJhbnNhY3Rpb25zLCBzdGFydE1vbWVudCwgZmFsc2UpXG4gICAgICA6IGFjY291bnRUcmFuc2FjdGlvbnM7XG4gIGRlYnVnKFxuICAgIGBmb3VuZCAke3R4bnMubGVuZ3RofSB2YWxpZCB0cmFuc2FjdGlvbnMgb3V0IG9mICR7YWNjb3VudFRyYW5zYWN0aW9ucy5sZW5ndGh9IHRyYW5zYWN0aW9ucyBmb3IgYWNjb3VudCBlbmRpbmcgd2l0aCAke2FjY291bnROdW1iZXIuc3Vic3RyaW5nKGFjY291bnROdW1iZXIubGVuZ3RoIC0gMil9YCxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIGFjY291bnROdW1iZXIsXG4gICAgYmFsYW5jZTogZ2V0QW1vdW50RGF0YShiYWxhbmNlKS5hbW91bnQsXG4gICAgdHhucyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVMb2dpblJlc3VsdHMoKTogUG9zc2libGVMb2dpblJlc3VsdHMge1xuICBjb25zdCB1cmxzOiBQb3NzaWJsZUxvZ2luUmVzdWx0cyA9IHt9O1xuICB1cmxzW0xvZ2luUmVzdWx0cy5TdWNjZXNzXSA9IFtTVUNDRVNTX1VSTF07XG4gIHVybHNbTG9naW5SZXN1bHRzLkNoYW5nZVBhc3N3b3JkXSA9IFtdOyAvLyBUT0RPXG4gIHVybHNbTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZF0gPSBbXTsgLy8gVE9ET1xuICB1cmxzW0xvZ2luUmVzdWx0cy5Vbmtub3duRXJyb3JdID0gW107IC8vIFRPRE9cbiAgcmV0dXJuIHVybHM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscykge1xuICByZXR1cm4gW1xuICAgIHsgc2VsZWN0b3I6ICcjbG9naW5JZCcsIHZhbHVlOiBjcmVkZW50aWFscy5pZCB9LFxuICAgIHsgc2VsZWN0b3I6ICcjbG9naW5QYXNzd29yZCcsIHZhbHVlOiBjcmVkZW50aWFscy5wYXNzd29yZCB9LFxuICBdO1xufVxuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0geyBpZDogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH07XG5cbmNsYXNzIEJleWFoYWRCaXNodmlsaGFTY3JhcGVyIGV4dGVuZHMgQmFzZVNjcmFwZXJXaXRoQnJvd3NlcjxTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscz4ge1xuICBwcm90ZWN0ZWQgZ2V0Vmlld1BvcnQoKTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IDE1MDAsXG4gICAgICBoZWlnaHQ6IDgwMCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscykge1xuICAgIHJldHVybiB7XG4gICAgICBsb2dpblVybDogTE9HSU5fVVJMLFxuICAgICAgZmllbGRzOiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFscyksXG4gICAgICBzdWJtaXRCdXR0b25TZWxlY3RvcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidXR0b24gPSBhd2FpdCB0aGlzLnBhZ2UuJCgneHBhdGgvL2J1dHRvbltjb250YWlucyguLCBcIteU16rXl9eR16hcIildJyk7XG4gICAgICAgIGlmIChidXR0b24pIHtcbiAgICAgICAgICBhd2FpdCBidXR0b24uY2xpY2soKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHBvc3NpYmxlUmVzdWx0czogZ2V0UG9zc2libGVMb2dpblJlc3VsdHMoKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hEYXRhKCkge1xuICAgIGNvbnN0IGFjY291bnQgPSBhd2FpdCBmZXRjaFRyYW5zYWN0aW9ucyh0aGlzLnBhZ2UsIHRoaXMub3B0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBhY2NvdW50czogW2FjY291bnRdLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmV5YWhhZEJpc2h2aWxoYVNjcmFwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQVFBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLHFCQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxhQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxjQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSx1QkFBQSxHQUFBTixPQUFBO0FBQThHLFNBQUFELHVCQUFBUSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRzlHLE1BQU1HLEtBQUssR0FBRyxJQUFBQyxlQUFRLEVBQUMsa0JBQWtCLENBQUM7QUFFMUMsTUFBTUMsV0FBVyxHQUFHLFVBQVU7QUFDOUIsTUFBTUMsU0FBUyxHQUFHLCtCQUErQjtBQUNqRCxNQUFNQyxXQUFXLEdBQUcsMEJBQTBCO0FBQzlDLE1BQU1DLFFBQVEsR0FBRyw2Q0FBNkM7QUFVOUQsU0FBU0MsYUFBYUEsQ0FBQ0MsU0FBaUIsRUFBRTtFQUN4QyxNQUFNQyxZQUFZLEdBQUdELFNBQVMsQ0FBQ0UsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDL0MsSUFBSUMsUUFBdUIsR0FBRyxJQUFJO0VBQ2xDLElBQUlDLE1BQXFCLEdBQUcsSUFBSTtFQUNoQyxJQUFJSCxZQUFZLENBQUNJLFFBQVEsQ0FBQ0MsaUNBQXNCLENBQUMsRUFBRTtJQUNqREYsTUFBTSxHQUFHRyxVQUFVLENBQUNOLFlBQVksQ0FBQ0MsT0FBTyxDQUFDSSxpQ0FBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRUgs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
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ var _beyahadBishvilha = _interopRequireDefault(require("./beyahad-bishvilha"));
4
+ var _testsUtils = require("../tests/tests-utils");
5
+ var _definitions = require("../definitions");
6
+ var _baseScraperWithBrowser = require("./base-scraper-with-browser");
7
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
+ const COMPANY_ID = 'beyahadBishvilha'; // TODO this property should be hard-coded in the provider
9
+ const testsConfig = (0, _testsUtils.getTestsConfig)();
10
+ describe('Beyahad Bishvilha scraper', () => {
11
+ beforeAll(() => {
12
+ (0, _testsUtils.extendAsyncTimeout)(); // The default timeout is 5 seconds per async test, this function extends the timeout value
13
+ });
14
+ test('should expose login fields in scrapers constant', () => {
15
+ expect(_definitions.SCRAPERS.beyahadBishvilha).toBeDefined();
16
+ expect(_definitions.SCRAPERS.beyahadBishvilha.loginFields).toContain('id');
17
+ expect(_definitions.SCRAPERS.beyahadBishvilha.loginFields).toContain('password');
18
+ });
19
+ (0, _testsUtils.maybeTestCompanyAPI)(COMPANY_ID, config => config.companyAPI.invalidPassword)('should fail on invalid user/password"', async () => {
20
+ const options = {
21
+ ...testsConfig.options,
22
+ companyId: COMPANY_ID
23
+ };
24
+ const scraper = new _beyahadBishvilha.default(options);
25
+ const result = await scraper.scrape({
26
+ id: 'e10s12',
27
+ password: '3f3ss3d'
28
+ });
29
+ expect(result).toBeDefined();
30
+ expect(result.success).toBeFalsy();
31
+ expect(result.errorType).toBe(_baseScraperWithBrowser.LoginResults.InvalidPassword);
32
+ });
33
+ (0, _testsUtils.maybeTestCompanyAPI)(COMPANY_ID)('should scrape transactions"', async () => {
34
+ const options = {
35
+ ...testsConfig.options,
36
+ companyId: COMPANY_ID
37
+ };
38
+ const scraper = new _beyahadBishvilha.default(options);
39
+ const result = await scraper.scrape(testsConfig.credentials.beyahadBishvilha);
40
+ expect(result).toBeDefined();
41
+ const error = `${result.errorType || ''} ${result.errorMessage || ''}`.trim();
42
+ expect(error).toBe('');
43
+ expect(result.success).toBeTruthy();
44
+ (0, _testsUtils.exportTransactions)(COMPANY_ID, result.accounts || []);
45
+ });
46
+ });
47
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmV5YWhhZEJpc2h2aWxoYSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3Rlc3RzVXRpbHMiLCJfZGVmaW5pdGlvbnMiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkNPTVBBTllfSUQiLCJ0ZXN0c0NvbmZpZyIsImdldFRlc3RzQ29uZmlnIiwiZGVzY3JpYmUiLCJiZWZvcmVBbGwiLCJleHRlbmRBc3luY1RpbWVvdXQiLCJ0ZXN0IiwiZXhwZWN0IiwiU0NSQVBFUlMiLCJiZXlhaGFkQmlzaHZpbGhhIiwidG9CZURlZmluZWQiLCJsb2dpbkZpZWxkcyIsInRvQ29udGFpbiIsIm1heWJlVGVzdENvbXBhbnlBUEkiLCJjb25maWciLCJjb21wYW55QVBJIiwiaW52YWxpZFBhc3N3b3JkIiwib3B0aW9ucyIsImNvbXBhbnlJZCIsInNjcmFwZXIiLCJCZXlhaGFkQmlzaHZpbGhhU2NyYXBlciIsInJlc3VsdCIsInNjcmFwZSIsImlkIiwicGFzc3dvcmQiLCJzdWNjZXNzIiwidG9CZUZhbHN5IiwiZXJyb3JUeXBlIiwidG9CZSIsIkxvZ2luUmVzdWx0cyIsIkludmFsaWRQYXNzd29yZCIsImNyZWRlbnRpYWxzIiwiZXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJ0cmltIiwidG9CZVRydXRoeSIsImV4cG9ydFRyYW5zYWN0aW9ucyIsImFjY291bnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmFwZXJzL2JleWFoYWQtYmlzaHZpbGhhLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJleWFoYWRCaXNodmlsaGFTY3JhcGVyIGZyb20gJy4vYmV5YWhhZC1iaXNodmlsaGEnO1xuaW1wb3J0IHsgbWF5YmVUZXN0Q29tcGFueUFQSSwgZXh0ZW5kQXN5bmNUaW1lb3V0LCBnZXRUZXN0c0NvbmZpZywgZXhwb3J0VHJhbnNhY3Rpb25zIH0gZnJvbSAnLi4vdGVzdHMvdGVzdHMtdXRpbHMnO1xuaW1wb3J0IHsgU0NSQVBFUlMgfSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBMb2dpblJlc3VsdHMgfSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuXG5jb25zdCBDT01QQU5ZX0lEID0gJ2JleWFoYWRCaXNodmlsaGEnOyAvLyBUT0RPIHRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIGhhcmQtY29kZWQgaW4gdGhlIHByb3ZpZGVyXG5jb25zdCB0ZXN0c0NvbmZpZyA9IGdldFRlc3RzQ29uZmlnKCk7XG5cbmRlc2NyaWJlKCdCZXlhaGFkIEJpc2h2aWxoYSBzY3JhcGVyJywgKCkgPT4ge1xuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIGV4dGVuZEFzeW5jVGltZW91dCgpOyAvLyBUaGUgZGVmYXVsdCB0aW1lb3V0IGlzIDUgc2Vjb25kcyBwZXIgYXN5bmMgdGVzdCwgdGhpcyBmdW5jdGlvbiBleHRlbmRzIHRoZSB0aW1lb3V0IHZhbHVlXG4gIH0pO1xuXG4gIHRlc3QoJ3Nob3VsZCBleHBvc2UgbG9naW4gZmllbGRzIGluIHNjcmFwZXJzIGNvbnN0YW50JywgKCkgPT4ge1xuICAgIGV4cGVjdChTQ1JBUEVSUy5iZXlhaGFkQmlzaHZpbGhhKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChTQ1JBUEVSUy5iZXlhaGFkQmlzaHZpbGhhLmxvZ2luRmllbGRzKS50b0NvbnRhaW4oJ2lkJyk7XG4gICAgZXhwZWN0KFNDUkFQRVJTLmJleWFoYWRCaXNodmlsaGEubG9naW5GaWVsZHMpLnRvQ29udGFpbigncGFzc3dvcmQnKTtcbiAgfSk7XG5cbiAgbWF5YmVUZXN0Q29tcGFueUFQSShDT01QQU5ZX0lELCBjb25maWcgPT4gY29uZmlnLmNvbXBhbnlBUEkuaW52YWxpZFBhc3N3b3JkKShcbiAgICAnc2hvdWxkIGZhaWwgb24gaW52YWxpZCB1c2VyL3Bhc3N3b3JkXCInLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRlc3RzQ29uZmlnLm9wdGlvbnMsXG4gICAgICAgIGNvbXBhbnlJZDogQ09NUEFOWV9JRCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNjcmFwZXIgPSBuZXcgQmV5YWhhZEJpc2h2aWxoYVNjcmFwZXIob3B0aW9ucyk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNjcmFwZXIuc2NyYXBlKHsgaWQ6ICdlMTBzMTInLCBwYXNzd29yZDogJzNmM3NzM2QnIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zdWNjZXNzKS50b0JlRmFsc3koKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZXJyb3JUeXBlKS50b0JlKExvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmQpO1xuICAgIH0sXG4gICk7XG5cbiAgbWF5YmVUZXN0Q29tcGFueUFQSShDT01QQU5ZX0lEKSgnc2hvdWxkIHNjcmFwZSB0cmFuc2FjdGlvbnNcIicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgLi4udGVzdHNDb25maWcub3B0aW9ucyxcbiAgICAgIGNvbXBhbnlJZDogQ09NUEFOWV9JRCxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2NyYXBlciA9IG5ldyBCZXlhaGFkQmlzaHZpbGhhU2NyYXBlcihvcHRpb25zKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzY3JhcGVyLnNjcmFwZSh0ZXN0c0NvbmZpZy5jcmVkZW50aWFscy5iZXlhaGFkQmlzaHZpbGhhKTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlRGVmaW5lZCgpO1xuICAgIGNvbnN0IGVycm9yID0gYCR7cmVzdWx0LmVycm9yVHlwZSB8fCAnJ30gJHtyZXN1bHQuZXJyb3JNZXNzYWdlIHx8ICcnfWAudHJpbSgpO1xuICAgIGV4cGVjdChlcnJvcikudG9CZSgnJyk7XG4gICAgZXhwZWN0KHJlc3VsdC5zdWNjZXNzKS50b0JlVHJ1dGh5KCk7XG5cbiAgICBleHBvcnRUcmFuc2FjdGlvbnMoQ09NUEFOWV9JRCwgcmVzdWx0LmFjY291bnRzIHx8IFtdKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsdUJBQUEsR0FBQUgsT0FBQTtBQUEyRCxTQUFBRCx1QkFBQUssQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUUzRCxNQUFNRyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztBQUN2QyxNQUFNQyxXQUFXLEdBQUcsSUFBQUMsMEJBQWMsRUFBQyxDQUFDO0FBRXBDQyxRQUFRLENBQUMsMkJBQTJCLEVBQUUsTUFBTTtFQUMxQ0MsU0FBUyxDQUFDLE1BQU07SUFDZCxJQUFBQyw4QkFBa0IsRUFBQyxDQUFDLENBQUMsQ0FBQztFQUN4QixDQUFDLENBQUM7RUFFRkMsSUFBSSxDQUFDLGlEQUFpRCxFQUFFLE1BQU07SUFDNURDLE1BQU0sQ0FBQ0MscUJBQVEsQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUM7SUFDL0NILE1BQU0sQ0FBQ0MscUJBQVEsQ0FBQ0MsZ0JBQWdCLENBQUNFLFdBQVcsQ0FBQyxDQUFDQyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQzdETCxNQUFNLENBQUNDLHFCQUFRLENBQUNDLGdCQUFnQixDQUFDRSxXQUFXLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLFVBQVUsQ0FBQztFQUNyRSxDQUFDLENBQUM7RUFFRixJQUFBQywrQkFBbUIsRUFBQ2IsVUFBVSxFQUFFYyxNQUFNLElBQUlBLE1BQU0sQ0FBQ0MsVUFBVSxDQUFDQyxlQUFlLENBQUMsQ0FDMUUsdUNBQXVDLEVBQ3ZDLFlBQVk7SUFDVixNQUFNQyxPQUFPLEdBQUc7TUFDZCxHQUFHaEIsV0FBVyxDQUFDZ0IsT0FBTztNQUN0QkMsU0FBUyxFQUFFbEI7SUFDYixDQUFDO0lBRUQsTUFBTW1CLE9BQU8sR0FBRyxJQUFJQyx5QkFBdUIsQ0FBQ0gsT0FBTyxDQUFDO0lBRXBELE1BQU1JLE1BQU0sR0FBRyxNQUFNRixPQUFPLENBQUNHLE1BQU0sQ0FBQztNQUFFQyxFQUFFLEVBQUUsUUFBUTtNQUFFQyxRQUFRLEVBQUU7SUFBVSxDQUFDLENBQUM7SUFFMUVqQixNQUFNLENBQUNjLE1BQU0sQ0FBQyxDQUFDWCxXQUFXLENBQUMsQ0FBQztJQUM1QkgsTUFBTSxDQUFDYyxNQUFNLENBQUNJLE9BQU8sQ0FBQyxDQUFDQyxTQUFTLENBQUMsQ0FBQztJQUNsQ25CLE1BQU0sQ0FBQ2MsTUFBTSxDQUFDTSxTQUFTLENBQUMsQ0FBQ0MsSUFBSSxDQUFDQyxvQ0FBWSxDQUFDQyxlQUFlLENBQUM7RUFDN0QsQ0FDRixDQUFDO0VBRUQsSUFBQWpCLCtCQUFtQixFQUFDYixVQUFVLENBQUMsQ0FBQyw2QkFBNkIsRUFBRSxZQUFZO0lBQ3pFLE1BQU1pQixPQUFPLEdBQUc7TUFDZCxHQUFHaEIsV0FBVyxDQUFDZ0IsT0FBTztNQUN0QkMsU0FBUyxFQUFFbEI7SUFDYixDQUFDO0lBRUQsTUFBTW1CLE9BQU8sR0FBRyxJQUFJQyx5QkFBdUIsQ0FBQ0gsT0FBTyxDQUFDO0lBQ3BELE1BQU1JLE1BQU0sR0FBRyxNQUFNRixPQUFPLENBQUNHLE1BQU0sQ0FBQ3JCLFdBQVcsQ0FBQzhCLFdBQVcsQ0FBQ3RCLGdCQUFnQixDQUFDO0lBQzdFRixNQUFNLENBQUNjLE1BQU0sQ0FBQyxDQUFDWCxXQUFXLENBQUMsQ0FBQztJQUM1QixNQUFNc0IsS0FBSyxHQUFHLEdBQUdYLE1BQU0sQ0FBQ00sU0FBUyxJQUFJLEVBQUUsSUFBSU4sTUFBTSxDQUFDWSxZQUFZLElBQUksRUFBRSxFQUFFLENBQUNDLElBQUksQ0FBQyxDQUFDO0lBQzdFM0IsTUFBTSxDQUFDeUIsS0FBSyxDQUFDLENBQUNKLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdEJyQixNQUFNLENBQUNjLE1BQU0sQ0FBQ0ksT0FBTyxDQUFDLENBQUNVLFVBQVUsQ0FBQyxDQUFDO0lBRW5DLElBQUFDLDhCQUFrQixFQUFDcEMsVUFBVSxFQUFFcUIsTUFBTSxDQUFDZ0IsUUFBUSxJQUFJLEVBQUUsQ0FBQztFQUN2RCxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,22 @@
1
+ import { BaseScraperWithBrowser, type PossibleLoginResults } from './base-scraper-with-browser';
2
+ import { type ScraperScrapingResult } from './interface';
3
+ type ScraperSpecificCredentials = {
4
+ id: string;
5
+ password: string;
6
+ num: string;
7
+ };
8
+ declare class DiscountScraper extends BaseScraperWithBrowser<ScraperSpecificCredentials> {
9
+ getLoginOptions(credentials: ScraperSpecificCredentials): {
10
+ loginUrl: string;
11
+ checkReadiness: () => Promise<void>;
12
+ fields: {
13
+ selector: string;
14
+ value: string;
15
+ }[];
16
+ submitButtonSelector: string;
17
+ postAction: () => Promise<void>;
18
+ possibleResults: PossibleLoginResults;
19
+ };
20
+ fetchData(): Promise<ScraperScrapingResult>;
21
+ }
22
+ export default DiscountScraper;