@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,299 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ exports.getMemo = getMemo;
8
+ var _moment = _interopRequireDefault(require("moment"));
9
+ var _constants = require("../constants");
10
+ var _dates = _interopRequireDefault(require("../helpers/dates"));
11
+ var _debug = require("../helpers/debug");
12
+ var _elementsInteractions = require("../helpers/elements-interactions");
13
+ var _fetch = require("../helpers/fetch");
14
+ var _navigation = require("../helpers/navigation");
15
+ var _transactions = require("../helpers/transactions");
16
+ var _transactions2 = require("../transactions");
17
+ var _baseScraperWithBrowser = require("./base-scraper-with-browser");
18
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
+ const debug = (0, _debug.getDebug)('max');
20
+ const BASE_API_ACTIONS_URL = 'https://onlinelcapi.max.co.il';
21
+ const BASE_WELCOME_URL = 'https://www.max.co.il';
22
+ const LOGIN_URL = `${BASE_WELCOME_URL}/homepage/welcome`;
23
+ const PASSWORD_EXPIRED_URL = `${BASE_WELCOME_URL}/renew-password`;
24
+ const SUCCESS_URL = `${BASE_WELCOME_URL}/homepage/personal`;
25
+ var MaxPlanName = /*#__PURE__*/function (MaxPlanName) {
26
+ MaxPlanName["Normal"] = "\u05E8\u05D2\u05D9\u05DC\u05D4";
27
+ MaxPlanName["ImmediateCharge"] = "\u05D7\u05D9\u05D5\u05D1 \u05E2\u05E1\u05E7\u05D5\u05EA \u05DE\u05D9\u05D9\u05D3\u05D9";
28
+ MaxPlanName["InternetShopping"] = "\u05D0\u05D9\u05E0\u05D8\u05E8\u05E0\u05D8/\u05D7\u05D5\"\u05DC";
29
+ MaxPlanName["Installments"] = "\u05EA\u05E9\u05DC\u05D5\u05DE\u05D9\u05DD";
30
+ MaxPlanName["MonthlyCharge"] = "\u05D7\u05D9\u05D5\u05D1 \u05D7\u05D5\u05D3\u05E9\u05D9";
31
+ MaxPlanName["OneMonthPostponed"] = "\u05D3\u05D7\u05D5\u05D9 \u05D7\u05D5\u05D3\u05E9";
32
+ MaxPlanName["MonthlyPostponed"] = "\u05D3\u05D7\u05D5\u05D9 \u05DC\u05D7\u05D9\u05D5\u05D1 \u05D4\u05D7\u05D5\u05D3\u05E9\u05D9";
33
+ MaxPlanName["MonthlyPayment"] = "\u05EA\u05E9\u05DC\u05D5\u05DD \u05D7\u05D5\u05D3\u05E9\u05D9";
34
+ MaxPlanName["FuturePurchaseFinancing"] = "\u05DE\u05D9\u05DE\u05D5\u05DF \u05DC\u05E8\u05DB\u05D9\u05E9\u05D4 \u05E2\u05EA\u05D9\u05D3\u05D9\u05EA";
35
+ MaxPlanName["MonthlyPostponedInstallments"] = "\u05D3\u05D7\u05D5\u05D9 \u05D7\u05D5\u05D3\u05E9 \u05EA\u05E9\u05DC\u05D5\u05DE\u05D9\u05DD";
36
+ MaxPlanName["ThirtyDaysPlus"] = "\u05E2\u05E1\u05E7\u05EA 30 \u05E4\u05DC\u05D5\u05E1";
37
+ MaxPlanName["TwoMonthsPostponed"] = "\u05D3\u05D7\u05D5\u05D9 \u05D7\u05D5\u05D3\u05E9\u05D9\u05D9\u05DD";
38
+ MaxPlanName["TwoMonthsPostponed2"] = "\u05D3\u05D7\u05D5\u05D9 2 \u05D7' \u05EA\u05E9\u05DC\u05D5\u05DE\u05D9\u05DD";
39
+ MaxPlanName["MonthlyChargePlusInterest"] = "\u05D7\u05D5\u05D3\u05E9\u05D9 + \u05E8\u05D9\u05D1\u05D9\u05EA";
40
+ MaxPlanName["Credit"] = "\u05E7\u05E8\u05D3\u05D9\u05D8";
41
+ MaxPlanName["CreditOutsideTheLimit"] = "\u05E7\u05E8\u05D3\u05D9\u05D8-\u05DE\u05D7\u05D5\u05E5 \u05DC\u05DE\u05E1\u05D2\u05E8\u05EA";
42
+ MaxPlanName["AccumulatingBasket"] = "\u05E1\u05DC \u05DE\u05E6\u05D8\u05D1\u05E8";
43
+ MaxPlanName["PostponedTransactionInstallments"] = "\u05E4\u05E8\u05D9\u05E1\u05EA \u05D4\u05E2\u05E1\u05E7\u05D4 \u05D4\u05D3\u05D7\u05D5\u05D9\u05D4";
44
+ MaxPlanName["ReplacementCard"] = "\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D7\u05DC\u05D9\u05E4\u05D9";
45
+ MaxPlanName["EarlyRepayment"] = "\u05E4\u05E8\u05E2\u05D5\u05DF \u05DE\u05D5\u05E7\u05D3\u05DD";
46
+ MaxPlanName["MonthlyCardFee"] = "\u05D3\u05DE\u05D9 \u05DB\u05E8\u05D8\u05D9\u05E1";
47
+ MaxPlanName["CurrencyPocket"] = "\u05D7\u05D9\u05D5\u05D1 \u05D0\u05E8\u05E0\u05E7 \u05DE\u05D8\u05D7";
48
+ return MaxPlanName;
49
+ }(MaxPlanName || {});
50
+ const INVALID_DETAILS_SELECTOR = '#popupWrongDetails';
51
+ const LOGIN_ERROR_SELECTOR = '#popupCardHoldersLoginError';
52
+ const categories = new Map();
53
+ function redirectOrDialog(page) {
54
+ return Promise.race([(0, _navigation.waitForRedirect)(page, 20000, false, [BASE_WELCOME_URL, `${BASE_WELCOME_URL}/`]), (0, _elementsInteractions.waitUntilElementFound)(page, INVALID_DETAILS_SELECTOR, true), (0, _elementsInteractions.waitUntilElementFound)(page, LOGIN_ERROR_SELECTOR, true)]);
55
+ }
56
+ function getTransactionsUrl(monthMoment) {
57
+ const month = monthMoment.month() + 1;
58
+ const year = monthMoment.year();
59
+ const date = `${year}-${month}-01`;
60
+
61
+ /**
62
+ * url explanation:
63
+ * userIndex: -1 for all account owners
64
+ * cardIndex: -1 for all cards under the account
65
+ * all other query params are static, beside the date which changes for request per month
66
+ */
67
+ const url = new URL(`${BASE_API_ACTIONS_URL}/api/registered/transactionDetails/getTransactionsAndGraphs`);
68
+ url.searchParams.set('filterData', `{"userIndex":-1,"cardIndex":-1,"monthView":true,"date":"${date}","dates":{"startDate":"0","endDate":"0"},"bankAccount":{"bankAccountIndex":-1,"cards":null}}`);
69
+ url.searchParams.set('firstCallCardIndex', '-1');
70
+ return url.toString();
71
+ }
72
+ async function loadCategories(page) {
73
+ debug('Loading categories');
74
+ const res = await (0, _fetch.fetchGetWithinPage)(page, `${BASE_API_ACTIONS_URL}/api/contents/getCategories`);
75
+ if (res && Array.isArray(res.result)) {
76
+ debug(`${res.result.length} categories loaded`);
77
+ res.result?.forEach(({
78
+ id,
79
+ name
80
+ }) => categories.set(id, name));
81
+ }
82
+ }
83
+ function getTransactionType(planName, planTypeId) {
84
+ const cleanedUpTxnTypeStr = planName.replace('\t', ' ').trim();
85
+ switch (cleanedUpTxnTypeStr) {
86
+ case MaxPlanName.ImmediateCharge:
87
+ case MaxPlanName.Normal:
88
+ case MaxPlanName.MonthlyCharge:
89
+ case MaxPlanName.OneMonthPostponed:
90
+ case MaxPlanName.MonthlyPostponed:
91
+ case MaxPlanName.FuturePurchaseFinancing:
92
+ case MaxPlanName.MonthlyPayment:
93
+ case MaxPlanName.MonthlyPostponedInstallments:
94
+ case MaxPlanName.ThirtyDaysPlus:
95
+ case MaxPlanName.TwoMonthsPostponed:
96
+ case MaxPlanName.TwoMonthsPostponed2:
97
+ case MaxPlanName.AccumulatingBasket:
98
+ case MaxPlanName.InternetShopping:
99
+ case MaxPlanName.MonthlyChargePlusInterest:
100
+ case MaxPlanName.PostponedTransactionInstallments:
101
+ case MaxPlanName.ReplacementCard:
102
+ case MaxPlanName.EarlyRepayment:
103
+ case MaxPlanName.MonthlyCardFee:
104
+ case MaxPlanName.CurrencyPocket:
105
+ return _transactions2.TransactionTypes.Normal;
106
+ case MaxPlanName.Installments:
107
+ case MaxPlanName.Credit:
108
+ case MaxPlanName.CreditOutsideTheLimit:
109
+ return _transactions2.TransactionTypes.Installments;
110
+ default:
111
+ switch (planTypeId) {
112
+ case 2:
113
+ case 3:
114
+ return _transactions2.TransactionTypes.Installments;
115
+ case 5:
116
+ return _transactions2.TransactionTypes.Normal;
117
+ default:
118
+ throw new Error(`Unknown transaction type ${cleanedUpTxnTypeStr}`);
119
+ }
120
+ }
121
+ }
122
+ function getInstallmentsInfo(comments) {
123
+ if (!comments) {
124
+ return undefined;
125
+ }
126
+ const matches = comments.match(/\d+/g);
127
+ if (!matches || matches.length < 2) {
128
+ return undefined;
129
+ }
130
+ return {
131
+ number: parseInt(matches[0], 10),
132
+ total: parseInt(matches[1], 10)
133
+ };
134
+ }
135
+ function getChargedCurrency(currencyId) {
136
+ switch (currencyId) {
137
+ case 376:
138
+ return _constants.SHEKEL_CURRENCY;
139
+ case 840:
140
+ return _constants.DOLLAR_CURRENCY;
141
+ case 978:
142
+ return _constants.EURO_CURRENCY;
143
+ default:
144
+ return undefined;
145
+ }
146
+ }
147
+ function getMemo({
148
+ comments,
149
+ fundsTransferReceiverOrTransfer,
150
+ fundsTransferComment
151
+ }) {
152
+ if (fundsTransferReceiverOrTransfer) {
153
+ const memo = comments ? `${comments} ${fundsTransferReceiverOrTransfer}` : fundsTransferReceiverOrTransfer;
154
+ return fundsTransferComment ? `${memo}: ${fundsTransferComment}` : memo;
155
+ }
156
+ return comments;
157
+ }
158
+ function mapTransaction(rawTransaction) {
159
+ const isPending = rawTransaction.paymentDate === null;
160
+ const processedDate = (0, _moment.default)(isPending ? rawTransaction.purchaseDate : rawTransaction.paymentDate).toISOString();
161
+ const status = isPending ? _transactions2.TransactionStatuses.Pending : _transactions2.TransactionStatuses.Completed;
162
+ const installments = getInstallmentsInfo(rawTransaction.comments);
163
+ const identifier = installments ? `${rawTransaction.dealData?.arn}_${installments.number}` : rawTransaction.dealData?.arn;
164
+ return {
165
+ type: getTransactionType(rawTransaction.planName, rawTransaction.planTypeId),
166
+ date: (0, _moment.default)(rawTransaction.purchaseDate).toISOString(),
167
+ processedDate,
168
+ originalAmount: -rawTransaction.originalAmount,
169
+ originalCurrency: rawTransaction.originalCurrency,
170
+ chargedAmount: -rawTransaction.actualPaymentAmount,
171
+ chargedCurrency: getChargedCurrency(rawTransaction.paymentCurrency),
172
+ description: rawTransaction.merchantName.trim(),
173
+ memo: getMemo(rawTransaction),
174
+ category: categories.get(rawTransaction?.categoryId),
175
+ installments,
176
+ identifier,
177
+ status
178
+ };
179
+ }
180
+ async function fetchTransactionsForMonth(page, monthMoment) {
181
+ const url = getTransactionsUrl(monthMoment);
182
+ const data = await (0, _fetch.fetchGetWithinPage)(page, url);
183
+ const transactionsByAccount = {};
184
+ if (!data || !data.result) return transactionsByAccount;
185
+ data.result.transactions
186
+ // Filter out non-transactions without a plan type, e.g. summary rows
187
+ .filter(transaction => !!transaction.planName).forEach(transaction => {
188
+ if (!transactionsByAccount[transaction.shortCardNumber]) {
189
+ transactionsByAccount[transaction.shortCardNumber] = [];
190
+ }
191
+ const mappedTransaction = mapTransaction(transaction);
192
+ transactionsByAccount[transaction.shortCardNumber].push(mappedTransaction);
193
+ });
194
+ return transactionsByAccount;
195
+ }
196
+ function addResult(allResults, result) {
197
+ const clonedResults = {
198
+ ...allResults
199
+ };
200
+ Object.keys(result).forEach(accountNumber => {
201
+ if (!clonedResults[accountNumber]) {
202
+ clonedResults[accountNumber] = [];
203
+ }
204
+ clonedResults[accountNumber].push(...result[accountNumber]);
205
+ });
206
+ return clonedResults;
207
+ }
208
+ function prepareTransactions(txns, startMoment, combineInstallments, enableTransactionsFilterByDate) {
209
+ let clonedTxns = Array.from(txns);
210
+ if (!combineInstallments) {
211
+ clonedTxns = (0, _transactions.fixInstallments)(clonedTxns);
212
+ }
213
+ clonedTxns = (0, _transactions.sortTransactionsByDate)(clonedTxns);
214
+ clonedTxns = enableTransactionsFilterByDate ? (0, _transactions.filterOldTransactions)(clonedTxns, startMoment, combineInstallments || false) : clonedTxns;
215
+ return clonedTxns;
216
+ }
217
+ async function fetchTransactions(page, options) {
218
+ const futureMonthsToScrape = options.futureMonthsToScrape ?? 1;
219
+ const defaultStartMoment = (0, _moment.default)().subtract(1, 'years');
220
+ const startMomentLimit = (0, _moment.default)().subtract(4, 'years');
221
+ const startDate = options.startDate || defaultStartMoment.toDate();
222
+ const startMoment = _moment.default.max(startMomentLimit, (0, _moment.default)(startDate));
223
+ const allMonths = (0, _dates.default)(startMoment, futureMonthsToScrape);
224
+ await loadCategories(page);
225
+ let allResults = {};
226
+ for (let i = 0; i < allMonths.length; i += 1) {
227
+ const result = await fetchTransactionsForMonth(page, allMonths[i]);
228
+ allResults = addResult(allResults, result);
229
+ }
230
+ Object.keys(allResults).forEach(accountNumber => {
231
+ let txns = allResults[accountNumber];
232
+ txns = prepareTransactions(txns, startMoment, options.combineInstallments || false, options.outputData?.enableTransactionsFilterByDate ?? true);
233
+ allResults[accountNumber] = txns;
234
+ });
235
+ return allResults;
236
+ }
237
+ function getPossibleLoginResults(page) {
238
+ const urls = {};
239
+ urls[_baseScraperWithBrowser.LoginResults.Success] = [SUCCESS_URL];
240
+ urls[_baseScraperWithBrowser.LoginResults.ChangePassword] = [PASSWORD_EXPIRED_URL];
241
+ urls[_baseScraperWithBrowser.LoginResults.InvalidPassword] = [async () => {
242
+ return (0, _elementsInteractions.elementPresentOnPage)(page, INVALID_DETAILS_SELECTOR);
243
+ }];
244
+ urls[_baseScraperWithBrowser.LoginResults.UnknownError] = [async () => {
245
+ return (0, _elementsInteractions.elementPresentOnPage)(page, LOGIN_ERROR_SELECTOR);
246
+ }];
247
+ return urls;
248
+ }
249
+ function createLoginFields(credentials) {
250
+ return [{
251
+ selector: '#user-name',
252
+ value: credentials.username
253
+ }, {
254
+ selector: '#password',
255
+ value: credentials.password
256
+ }];
257
+ }
258
+ class MaxScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
259
+ getLoginOptions(credentials) {
260
+ return {
261
+ loginUrl: LOGIN_URL,
262
+ fields: createLoginFields(credentials),
263
+ submitButtonSelector: 'app-user-login-form .general-button.send-me-code',
264
+ preAction: async () => {
265
+ if (await (0, _elementsInteractions.elementPresentOnPage)(this.page, '#closePopup')) {
266
+ await (0, _elementsInteractions.clickButton)(this.page, '#closePopup');
267
+ }
268
+ await (0, _elementsInteractions.clickButton)(this.page, '.personal-area > a.go-to-personal-area');
269
+ if (await (0, _elementsInteractions.elementPresentOnPage)(this.page, '.login-link#private')) {
270
+ await (0, _elementsInteractions.clickButton)(this.page, '.login-link#private');
271
+ }
272
+ await (0, _elementsInteractions.waitUntilElementFound)(this.page, '#login-password-link', true);
273
+ await (0, _elementsInteractions.clickButton)(this.page, '#login-password-link');
274
+ await (0, _elementsInteractions.waitUntilElementFound)(this.page, '#login-password.tab-pane.active app-user-login-form', true);
275
+ },
276
+ checkReadiness: async () => {
277
+ await (0, _elementsInteractions.waitUntilElementFound)(this.page, '.personal-area > a.go-to-personal-area', true);
278
+ },
279
+ postAction: async () => redirectOrDialog(this.page),
280
+ possibleResults: getPossibleLoginResults(this.page),
281
+ waitUntil: 'domcontentloaded'
282
+ };
283
+ }
284
+ async fetchData() {
285
+ const results = await fetchTransactions(this.page, this.options);
286
+ const accounts = Object.keys(results).map(accountNumber => {
287
+ return {
288
+ accountNumber,
289
+ txns: results[accountNumber]
290
+ };
291
+ });
292
+ return {
293
+ success: true,
294
+ accounts
295
+ };
296
+ }
297
+ }
298
+ var _default = exports.default = MaxScraper;
299
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2RhdGVzIiwiX2RlYnVnIiwiX2VsZW1lbnRzSW50ZXJhY3Rpb25zIiwiX2ZldGNoIiwiX25hdmlnYXRpb24iLCJfdHJhbnNhY3Rpb25zIiwiX3RyYW5zYWN0aW9uczIiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImRlYnVnIiwiZ2V0RGVidWciLCJCQVNFX0FQSV9BQ1RJT05TX1VSTCIsIkJBU0VfV0VMQ09NRV9VUkwiLCJMT0dJTl9VUkwiLCJQQVNTV09SRF9FWFBJUkVEX1VSTCIsIlNVQ0NFU1NfVVJMIiwiTWF4UGxhbk5hbWUiLCJJTlZBTElEX0RFVEFJTFNfU0VMRUNUT1IiLCJMT0dJTl9FUlJPUl9TRUxFQ1RPUiIsImNhdGVnb3JpZXMiLCJNYXAiLCJyZWRpcmVjdE9yRGlhbG9nIiwicGFnZSIsIlByb21pc2UiLCJyYWNlIiwid2FpdEZvclJlZGlyZWN0Iiwid2FpdFVudGlsRWxlbWVudEZvdW5kIiwiZ2V0VHJhbnNhY3Rpb25zVXJsIiwibW9udGhNb21lbnQiLCJtb250aCIsInllYXIiLCJkYXRlIiwidXJsIiwiVVJMIiwic2VhcmNoUGFyYW1zIiwic2V0IiwidG9TdHJpbmciLCJsb2FkQ2F0ZWdvcmllcyIsInJlcyIsImZldGNoR2V0V2l0aGluUGFnZSIsIkFycmF5IiwiaXNBcnJheSIsInJlc3VsdCIsImxlbmd0aCIsImZvckVhY2giLCJpZCIsIm5hbWUiLCJnZXRUcmFuc2FjdGlvblR5cGUiLCJwbGFuTmFtZSIsInBsYW5UeXBlSWQiLCJjbGVhbmVkVXBUeG5UeXBlU3RyIiwicmVwbGFjZSIsInRyaW0iLCJJbW1lZGlhdGVDaGFyZ2UiLCJOb3JtYWwiLCJNb250aGx5Q2hhcmdlIiwiT25lTW9udGhQb3N0cG9uZWQiLCJNb250aGx5UG9zdHBvbmVkIiwiRnV0dXJlUHVyY2hhc2VGaW5hbmNpbmciLCJNb250aGx5UGF5bWVudCIsIk1vbnRobHlQb3N0cG9uZWRJbnN0YWxsbWVudHMiLCJUaGlydHlEYXlzUGx1cyIsIlR3b01vbnRoc1Bvc3Rwb25lZCIsIlR3b01vbnRoc1Bvc3Rwb25lZDIiLCJBY2N1bXVsYXRpbmdCYXNrZXQiLCJJbnRlcm5ldFNob3BwaW5nIiwiTW9udGhseUNoYXJnZVBsdXNJbnRlcmVzdCIsIlBvc3Rwb25lZFRyYW5zYWN0aW9uSW5zdGFsbG1lbnRzIiwiUmVwbGFjZW1lbnRDYXJkIiwiRWFybHlSZXBheW1lbnQiLCJNb250aGx5Q2FyZEZlZSIsIkN1cnJlbmN5UG9ja2V0IiwiVHJhbnNhY3Rpb25UeXBlcyIsIkluc3RhbGxtZW50cyIsIkNyZWRpdCIsIkNyZWRpdE91dHNpZGVUaGVMaW1pdCIsIkVycm9yIiwiZ2V0SW5zdGFsbG1lbnRzSW5mbyIsImNvbW1lbnRzIiwidW5kZWZpbmVkIiwibWF0Y2hlcyIsIm1hdGNoIiwibnVtYmVyIiwicGFyc2VJbnQiLCJ0b3RhbCIsImdldENoYXJnZWRDdXJyZW5jeSIsImN1cnJlbmN5SWQiLCJTSEVLRUxfQ1VSUkVOQ1kiLCJET0xMQVJfQ1VSUkVOQ1kiLCJFVVJPX0NVUlJFTkNZIiwiZ2V0TWVtbyIsImZ1bmRzVHJhbnNmZXJSZWNlaXZlck9yVHJhbnNmZXIiLCJmdW5kc1RyYW5zZmVyQ29tbWVudCIsIm1lbW8iLCJtYXBUcmFuc2FjdGlvbiIsInJhd1RyYW5zYWN0aW9uIiwiaXNQZW5kaW5nIiwicGF5bWVudERhdGUiLCJwcm9jZXNzZWREYXRlIiwibW9tZW50IiwicHVyY2hhc2VEYXRlIiwidG9JU09TdHJpbmciLCJzdGF0dXMiLCJUcmFuc2FjdGlvblN0YXR1c2VzIiwiUGVuZGluZyIsIkNvbXBsZXRlZCIsImluc3RhbGxtZW50cyIsImlkZW50aWZpZXIiLCJkZWFsRGF0YSIsImFybiIsInR5cGUiLCJvcmlnaW5hbEFtb3VudCIsIm9yaWdpbmFsQ3VycmVuY3kiLCJjaGFyZ2VkQW1vdW50IiwiYWN0dWFsUGF5bWVudEFtb3VudCIsImNoYXJnZWRDdXJyZW5jeSIsInBheW1lbnRDdXJyZW5jeSIsImRlc2NyaXB0aW9uIiwibWVyY2hhbnROYW1lIiwiY2F0ZWdvcnkiLCJnZXQiLCJjYXRlZ29yeUlkIiwiZmV0Y2hUcmFuc2FjdGlvbnNGb3JNb250aCIsImRhdGEiLCJ0cmFuc2FjdGlvbnNCeUFjY291bnQiLCJ0cmFuc2FjdGlvbnMiLCJmaWx0ZXIiLCJ0cmFuc2FjdGlvbiIsInNob3J0Q2FyZE51bWJlciIsIm1hcHBlZFRyYW5zYWN0aW9uIiwicHVzaCIsImFkZFJlc3VsdCIsImFsbFJlc3VsdHMiLCJjbG9uZWRSZXN1bHRzIiwiT2JqZWN0Iiwia2V5cyIsImFjY291bnROdW1iZXIiLCJwcmVwYXJlVHJhbnNhY3Rpb25zIiwidHhucyIsInN0YXJ0TW9tZW50IiwiY29tYmluZUluc3RhbGxtZW50cyIsImVuYWJsZVRyYW5zYWN0aW9uc0ZpbHRlckJ5RGF0ZSIsImNsb25lZFR4bnMiLCJmcm9tIiwiZml4SW5zdGFsbG1lbnRzIiwic29ydFRyYW5zYWN0aW9uc0J5RGF0ZSIsImZpbHRlck9sZFRyYW5zYWN0aW9ucyIsImZldGNoVHJhbnNhY3Rpb25zIiwib3B0aW9ucyIsImZ1dHVyZU1vbnRoc1RvU2NyYXBlIiwiZGVmYXVsdFN0YXJ0TW9tZW50Iiwic3VidHJhY3QiLCJzdGFydE1vbWVudExpbWl0Iiwic3RhcnREYXRlIiwidG9EYXRlIiwibWF4IiwiYWxsTW9udGhzIiwiZ2V0QWxsTW9udGhNb21lbnRzIiwiaSIsIm91dHB1dERhdGEiLCJnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyIsInVybHMiLCJMb2dpblJlc3VsdHMiLCJTdWNjZXNzIiwiQ2hhbmdlUGFzc3dvcmQiLCJJbnZhbGlkUGFzc3dvcmQiLCJlbGVtZW50UHJlc2VudE9uUGFnZSIsIlVua25vd25FcnJvciIsImNyZWF0ZUxvZ2luRmllbGRzIiwiY3JlZGVudGlhbHMiLCJzZWxlY3RvciIsInZhbHVlIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIk1heFNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZ2V0TG9naW5PcHRpb25zIiwibG9naW5VcmwiLCJmaWVsZHMiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsInByZUFjdGlvbiIsImNsaWNrQnV0dG9uIiwiY2hlY2tSZWFkaW5lc3MiLCJwb3N0QWN0aW9uIiwicG9zc2libGVSZXN1bHRzIiwid2FpdFVudGlsIiwiZmV0Y2hEYXRhIiwicmVzdWx0cyIsImFjY291bnRzIiwibWFwIiwic3VjY2VzcyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9tYXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCwgeyB0eXBlIE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyB0eXBlIFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgRE9MTEFSX0NVUlJFTkNZLCBFVVJPX0NVUlJFTkNZLCBTSEVLRUxfQ1VSUkVOQ1kgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IGdldEFsbE1vbnRoTW9tZW50cyBmcm9tICcuLi9oZWxwZXJzL2RhdGVzJztcbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQgeyBjbGlja0J1dHRvbiwgZWxlbWVudFByZXNlbnRPblBhZ2UsIHdhaXRVbnRpbEVsZW1lbnRGb3VuZCB9IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IGZldGNoR2V0V2l0aGluUGFnZSB9IGZyb20gJy4uL2hlbHBlcnMvZmV0Y2gnO1xuaW1wb3J0IHsgd2FpdEZvclJlZGlyZWN0IH0gZnJvbSAnLi4vaGVscGVycy9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IGZpbHRlck9sZFRyYW5zYWN0aW9ucywgZml4SW5zdGFsbG1lbnRzLCBzb3J0VHJhbnNhY3Rpb25zQnlEYXRlIH0gZnJvbSAnLi4vaGVscGVycy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25TdGF0dXNlcywgVHJhbnNhY3Rpb25UeXBlcywgdHlwZSBUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQge1xuICBCYXNlU2NyYXBlcldpdGhCcm93c2VyLFxuICBMb2dpblJlc3VsdHMsXG4gIHR5cGUgTG9naW5PcHRpb25zLFxuICB0eXBlIFBvc3NpYmxlTG9naW5SZXN1bHRzLFxufSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuaW1wb3J0IHsgdHlwZSBTY3JhcGVyT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZygnbWF4Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uIHtcbiAgc2hvcnRDYXJkTnVtYmVyOiBzdHJpbmc7XG4gIHBheW1lbnREYXRlPzogc3RyaW5nO1xuICBwdXJjaGFzZURhdGU6IHN0cmluZztcbiAgYWN0dWFsUGF5bWVudEFtb3VudDogc3RyaW5nO1xuICBwYXltZW50Q3VycmVuY3k6IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsQ3VycmVuY3k6IHN0cmluZztcbiAgb3JpZ2luYWxBbW91bnQ6IG51bWJlcjtcbiAgcGxhbk5hbWU6IHN0cmluZztcbiAgcGxhblR5cGVJZDogbnVtYmVyO1xuICBjb21tZW50czogc3RyaW5nO1xuICBtZXJjaGFudE5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnlJZDogbnVtYmVyO1xuICBmdW5kc1RyYW5zZmVyQ29tbWVudD86IHN0cmluZztcbiAgZnVuZHNUcmFuc2ZlclJlY2VpdmVyT3JUcmFuc2Zlcj86IHN0cmluZztcbiAgZGVhbERhdGE/OiB7XG4gICAgYXJuOiBzdHJpbmc7XG4gIH07XG59XG5cbmNvbnN0IEJBU0VfQVBJX0FDVElPTlNfVVJMID0gJ2h0dHBzOi8vb25saW5lbGNhcGkubWF4LmNvLmlsJztcbmNvbnN0IEJBU0VfV0VMQ09NRV9VUkwgPSAnaHR0cHM6Ly93d3cubWF4LmNvLmlsJztcblxuY29uc3QgTE9HSU5fVVJMID0gYCR7QkFTRV9XRUxDT01FX1VSTH0vaG9tZXBhZ2Uvd2VsY29tZWA7XG5jb25zdCBQQVNTV09SRF9FWFBJUkVEX1VSTCA9IGAke0JBU0VfV0VMQ09NRV9VUkx9L3JlbmV3LXBhc3N3b3JkYDtcbmNvbnN0IFNVQ0NFU1NfVVJMID0gYCR7QkFTRV9XRUxDT01FX1VSTH0vaG9tZXBhZ2UvcGVyc29uYWxgO1xuXG5lbnVtIE1heFBsYW5OYW1lIHtcbiAgTm9ybWFsID0gJ9eo15LXmdec15QnLFxuICBJbW1lZGlhdGVDaGFyZ2UgPSAn15fXmdeV15Eg16LXoden15XXqiDXnteZ15nXk9eZJyxcbiAgSW50ZXJuZXRTaG9wcGluZyA9ICfXkNeZ16DXmNeo16DXmC/Xl9eVXCLXnCcsXG4gIEluc3RhbGxtZW50cyA9ICfXqtep15zXldee15nXnScsXG4gIE1vbnRobHlDaGFyZ2UgPSAn15fXmdeV15Eg15fXldeT16nXmScsXG4gIE9uZU1vbnRoUG9zdHBvbmVkID0gJ9eT15fXldeZINeX15XXk9epJyxcbiAgTW9udGhseVBvc3Rwb25lZCA9ICfXk9eX15XXmSDXnNeX15nXldeRINeU15fXldeT16nXmScsXG4gIE1vbnRobHlQYXltZW50ID0gJ9eq16nXnNeV150g15fXldeT16nXmScsXG4gIEZ1dHVyZVB1cmNoYXNlRmluYW5jaW5nID0gJ9ee15nXnteV158g15zXqNeb15nXqdeUINei16rXmdeT15nXqicsXG4gIE1vbnRobHlQb3N0cG9uZWRJbnN0YWxsbWVudHMgPSAn15PXl9eV15kg15fXldeT16kg16rXqdec15XXnteZ150nLFxuICBUaGlydHlEYXlzUGx1cyA9ICfXoteh16fXqiAzMCDXpNec15XXoScsXG4gIFR3b01vbnRoc1Bvc3Rwb25lZCA9ICfXk9eX15XXmSDXl9eV15PXqdeZ15nXnScsXG4gIFR3b01vbnRoc1Bvc3Rwb25lZDIgPSBcIteT15fXldeZIDIg15cnINeq16nXnNeV157XmdedXCIsXG4gIE1vbnRobHlDaGFyZ2VQbHVzSW50ZXJlc3QgPSAn15fXldeT16nXmSArINeo15nXkdeZ16onLFxuICBDcmVkaXQgPSAn16fXqNeT15nXmCcsXG4gIENyZWRpdE91dHNpZGVUaGVMaW1pdCA9ICfXp9eo15PXmdeYLdee15fXldelINec157XodeS16jXqicsXG4gIEFjY3VtdWxhdGluZ0Jhc2tldCA9ICfXodecINee16bXmNeR16gnLFxuICBQb3N0cG9uZWRUcmFuc2FjdGlvbkluc3RhbGxtZW50cyA9ICfXpNeo15nXodeqINeU16LXoden15Qg15TXk9eX15XXmdeUJyxcbiAgUmVwbGFjZW1lbnRDYXJkID0gJ9eb16jXmNeZ16Eg15fXnNeZ16TXmScsXG4gIEVhcmx5UmVwYXltZW50ID0gJ9ek16jXoteV158g157Xlden15PXnScsXG4gIE1vbnRobHlDYXJkRmVlID0gJ9eT157XmSDXm9eo15jXmdehJyxcbiAgQ3VycmVuY3lQb2NrZXQgPSAn15fXmdeV15Eg15DXqNeg16cg157XmNeXJyxcbn1cblxuY29uc3QgSU5WQUxJRF9ERVRBSUxTX1NFTEVDVE9SID0gJyNwb3B1cFdyb25nRGV0YWlscyc7XG5jb25zdCBMT0dJTl9FUlJPUl9TRUxFQ1RPUiA9ICcjcG9wdXBDYXJkSG9sZGVyc0xvZ2luRXJyb3InO1xuXG5jb25zdCBjYXRlZ29yaWVzID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcblxuZnVuY3Rpb24gcmVkaXJlY3RPckRpYWxvZyhwYWdlOiBQYWdlKSB7XG4gIHJldHVybiBQcm9taXNlLnJhY2UoW1xuICAgIHdhaXRGb3JSZWRpcmVjdChwYWdlLCAyMDAwMCwgZmFsc2UsIFtCQVNFX1dFTENPTUVfVVJMLCBgJHtCQVNFX1dFTENPTUVfVVJMfS9gXSksXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsIElOVkFMSURfREVUQUlMU19TRUxFQ1RPUiwgdHJ1ZSksXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsIExPR0lOX0VSUk9SX1NFTEVDVE9SLCB0cnVlKSxcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uc1VybChtb250aE1vbWVudDogTW9tZW50KSB7XG4gIGNvbnN0IG1vbnRoID0gbW9udGhNb21lbnQubW9udGgoKSArIDE7XG4gIGNvbnN0IHllYXIgPSBtb250aE1vbWVudC55ZWFyKCk7XG4gIGNvbnN0IGRhdGUgPSBgJHt5ZWFyfS0ke21vbnRofS0wMWA7XG5cbiAgLyoqXG4gICAqIHVybCBleHBsYW5hdGlvbjpcbiAgICogdXNlckluZGV4OiAtMSBmb3IgYWxsIGFjY291bnQgb3duZXJzXG4gICAqIGNhcmRJbmRleDogLTEgZm9yIGFsbCBjYXJkcyB1bmRlciB0aGUgYWNjb3VudFxuICAgKiBhbGwgb3RoZXIgcXVlcnkgcGFyYW1zIGFyZSBzdGF0aWMsIGJlc2lkZSB0aGUgZGF0ZSB3aGljaCBjaGFuZ2VzIGZvciByZXF1ZXN0IHBlciBtb250aFxuICAgKi9cbiAgY29uc3QgdXJsID0gbmV3IFVSTChgJHtCQVNFX0FQSV9BQ1RJT05TX1VSTH0vYXBpL3JlZ2lzdGVyZWQvdHJhbnNhY3Rpb25EZXRhaWxzL2dldFRyYW5zYWN0aW9uc0FuZEdyYXBoc2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcbiAgICAnZmlsdGVyRGF0YScsXG4gICAgYHtcInVzZXJJbmRleFwiOi0xLFwiY2FyZEluZGV4XCI6LTEsXCJtb250aFZpZXdcIjp0cnVlLFwiZGF0ZVwiOlwiJHtkYXRlfVwiLFwiZGF0ZXNcIjp7XCJzdGFydERhdGVcIjpcIjBcIixcImVuZERhdGVcIjpcIjBcIn0sXCJiYW5rQWNjb3VudFwiOntcImJhbmtBY2NvdW50SW5kZXhcIjotMSxcImNhcmRzXCI6bnVsbH19YCxcbiAgKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2ZpcnN0Q2FsbENhcmRJbmRleCcsICctMScpO1xuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG5cbmludGVyZmFjZSBGZXRjaENhdGVnb3J5UmVzdWx0IHtcbiAgcmVzdWx0PzogQXJyYXk8e1xuICAgIGlkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICB9Pjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZENhdGVnb3JpZXMocGFnZTogUGFnZSkge1xuICBkZWJ1ZygnTG9hZGluZyBjYXRlZ29yaWVzJyk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxGZXRjaENhdGVnb3J5UmVzdWx0PihwYWdlLCBgJHtCQVNFX0FQSV9BQ1RJT05TX1VSTH0vYXBpL2NvbnRlbnRzL2dldENhdGVnb3JpZXNgKTtcbiAgaWYgKHJlcyAmJiBBcnJheS5pc0FycmF5KHJlcy5yZXN1bHQpKSB7XG4gICAgZGVidWcoYCR7cmVzLnJlc3VsdC5sZW5ndGh9IGNhdGVnb3JpZXMgbG9hZGVkYCk7XG4gICAgcmVzLnJlc3VsdD8uZm9yRWFjaCgoeyBpZCwgbmFtZSB9KSA9PiBjYXRlZ29yaWVzLnNldChpZCwgbmFtZSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uVHlwZShwbGFuTmFtZTogc3RyaW5nLCBwbGFuVHlwZUlkOiBudW1iZXIpIHtcbiAgY29uc3QgY2xlYW5lZFVwVHhuVHlwZVN0ciA9IHBsYW5OYW1lLnJlcGxhY2UoJ1xcdCcsICcgJykudHJpbSgpIGFzIE1heFBsYW5OYW1lO1xuICBzd2l0Y2ggKGNsZWFuZWRVcFR4blR5cGVTdHIpIHtcbiAgICBjYXNlIE1heFBsYW5OYW1lLkltbWVkaWF0ZUNoYXJnZTpcbiAgICBjYXNlIE1heFBsYW5OYW1lLk5vcm1hbDpcbiAgICBjYXNlIE1heFBsYW5OYW1lLk1vbnRobHlDaGFyZ2U6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5PbmVNb250aFBvc3Rwb25lZDpcbiAgICBjYXNlIE1heFBsYW5OYW1lLk1vbnRobHlQb3N0cG9uZWQ6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5GdXR1cmVQdXJjaGFzZUZpbmFuY2luZzpcbiAgICBjYXNlIE1heFBsYW5OYW1lLk1vbnRobHlQYXltZW50OlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuTW9udGhseVBvc3Rwb25lZEluc3RhbGxtZW50czpcbiAgICBjYXNlIE1heFBsYW5OYW1lLlRoaXJ0eURheXNQbHVzOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuVHdvTW9udGhzUG9zdHBvbmVkOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuVHdvTW9udGhzUG9zdHBvbmVkMjpcbiAgICBjYXNlIE1heFBsYW5OYW1lLkFjY3VtdWxhdGluZ0Jhc2tldDpcbiAgICBjYXNlIE1heFBsYW5OYW1lLkludGVybmV0U2hvcHBpbmc6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5Nb250aGx5Q2hhcmdlUGx1c0ludGVyZXN0OlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuUG9zdHBvbmVkVHJhbnNhY3Rpb25JbnN0YWxsbWVudHM6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5SZXBsYWNlbWVudENhcmQ6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5FYXJseVJlcGF5bWVudDpcbiAgICBjYXNlIE1heFBsYW5OYW1lLk1vbnRobHlDYXJkRmVlOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuQ3VycmVuY3lQb2NrZXQ6XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWw7XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5JbnN0YWxsbWVudHM6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5DcmVkaXQ6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5DcmVkaXRPdXRzaWRlVGhlTGltaXQ6XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlcy5JbnN0YWxsbWVudHM7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN3aXRjaCAocGxhblR5cGVJZCkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlcy5JbnN0YWxsbWVudHM7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWw7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHRyYW5zYWN0aW9uIHR5cGUgJHtjbGVhbmVkVXBUeG5UeXBlU3RyIGFzIHN0cmluZ31gKTtcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJbnN0YWxsbWVudHNJbmZvKGNvbW1lbnRzOiBzdHJpbmcpIHtcbiAgaWYgKCFjb21tZW50cykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IGNvbW1lbnRzLm1hdGNoKC9cXGQrL2cpO1xuICBpZiAoIW1hdGNoZXMgfHwgbWF0Y2hlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbnVtYmVyOiBwYXJzZUludChtYXRjaGVzWzBdLCAxMCksXG4gICAgdG90YWw6IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcmdlZEN1cnJlbmN5KGN1cnJlbmN5SWQ6IG51bWJlciB8IG51bGwpIHtcbiAgc3dpdGNoIChjdXJyZW5jeUlkKSB7XG4gICAgY2FzZSAzNzY6XG4gICAgICByZXR1cm4gU0hFS0VMX0NVUlJFTkNZO1xuICAgIGNhc2UgODQwOlxuICAgICAgcmV0dXJuIERPTExBUl9DVVJSRU5DWTtcbiAgICBjYXNlIDk3ODpcbiAgICAgIHJldHVybiBFVVJPX0NVUlJFTkNZO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1vKHtcbiAgY29tbWVudHMsXG4gIGZ1bmRzVHJhbnNmZXJSZWNlaXZlck9yVHJhbnNmZXIsXG4gIGZ1bmRzVHJhbnNmZXJDb21tZW50LFxufTogUGljazxTY3JhcGVkVHJhbnNhY3Rpb24sICdjb21tZW50cycgfCAnZnVuZHNUcmFuc2ZlclJlY2VpdmVyT3JUcmFuc2ZlcicgfCAnZnVuZHNUcmFuc2ZlckNvbW1lbnQnPikge1xuICBpZiAoZnVuZHNUcmFuc2ZlclJlY2VpdmVyT3JUcmFuc2Zlcikge1xuICAgIGNvbnN0IG1lbW8gPSBjb21tZW50cyA/IGAke2NvbW1lbnRzfSAke2Z1bmRzVHJhbnNmZXJSZWNlaXZlck9yVHJhbnNmZXJ9YCA6IGZ1bmRzVHJhbnNmZXJSZWNlaXZlck9yVHJhbnNmZXI7XG4gICAgcmV0dXJuIGZ1bmRzVHJhbnNmZXJDb21tZW50ID8gYCR7bWVtb306ICR7ZnVuZHNUcmFuc2ZlckNvbW1lbnR9YCA6IG1lbW87XG4gIH1cblxuICByZXR1cm4gY29tbWVudHM7XG59XG5cbmZ1bmN0aW9uIG1hcFRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBTY3JhcGVkVHJhbnNhY3Rpb24pOiBUcmFuc2FjdGlvbiB7XG4gIGNvbnN0IGlzUGVuZGluZyA9IHJhd1RyYW5zYWN0aW9uLnBheW1lbnREYXRlID09PSBudWxsO1xuICBjb25zdCBwcm9jZXNzZWREYXRlID0gbW9tZW50KGlzUGVuZGluZyA/IHJhd1RyYW5zYWN0aW9uLnB1cmNoYXNlRGF0ZSA6IHJhd1RyYW5zYWN0aW9uLnBheW1lbnREYXRlKS50b0lTT1N0cmluZygpO1xuICBjb25zdCBzdGF0dXMgPSBpc1BlbmRpbmcgPyBUcmFuc2FjdGlvblN0YXR1c2VzLlBlbmRpbmcgOiBUcmFuc2FjdGlvblN0YXR1c2VzLkNvbXBsZXRlZDtcblxuICBjb25zdCBpbnN0YWxsbWVudHMgPSBnZXRJbnN0YWxsbWVudHNJbmZvKHJhd1RyYW5zYWN0aW9uLmNvbW1lbnRzKTtcbiAgY29uc3QgaWRlbnRpZmllciA9IGluc3RhbGxtZW50c1xuICAgID8gYCR7cmF3VHJhbnNhY3Rpb24uZGVhbERhdGE/LmFybn1fJHtpbnN0YWxsbWVudHMubnVtYmVyfWBcbiAgICA6IHJhd1RyYW5zYWN0aW9uLmRlYWxEYXRhPy5hcm47XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBnZXRUcmFuc2FjdGlvblR5cGUocmF3VHJhbnNhY3Rpb24ucGxhbk5hbWUsIHJhd1RyYW5zYWN0aW9uLnBsYW5UeXBlSWQpLFxuICAgIGRhdGU6IG1vbWVudChyYXdUcmFuc2FjdGlvbi5wdXJjaGFzZURhdGUpLnRvSVNPU3RyaW5nKCksXG4gICAgcHJvY2Vzc2VkRGF0ZSxcbiAgICBvcmlnaW5hbEFtb3VudDogLXJhd1RyYW5zYWN0aW9uLm9yaWdpbmFsQW1vdW50LFxuICAgIG9yaWdpbmFsQ3VycmVuY3k6IHJhd1RyYW5zYWN0aW9uLm9yaWdpbmFsQ3VycmVuY3ksXG4gICAgY2hhcmdlZEFtb3VudDogLXJhd1RyYW5zYWN0aW9uLmFjdHVhbFBheW1lbnRBbW91bnQsXG4gICAgY2hhcmdlZEN1cnJlbmN5OiBnZXRDaGFyZ2VkQ3VycmVuY3kocmF3VHJhbnNhY3Rpb24ucGF5bWVudEN1cnJlbmN5KSxcbiAgICBkZXNjcmlwdGlvbjogcmF3VHJhbnNhY3Rpb24ubWVyY2hhbnROYW1lLnRyaW0oKSxcbiAgICBtZW1vOiBnZXRNZW1vKHJhd1RyYW5zYWN0aW9uKSxcbiAgICBjYXRlZ29yeTogY2F0ZWdvcmllcy5nZXQocmF3VHJhbnNhY3Rpb24/LmNhdGVnb3J5SWQpLFxuICAgIGluc3RhbGxtZW50cyxcbiAgICBpZGVudGlmaWVyLFxuICAgIHN0YXR1cyxcbiAgfTtcbn1cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb25zUmVzdWx0IHtcbiAgcmVzdWx0Pzoge1xuICAgIHRyYW5zYWN0aW9uczogU2NyYXBlZFRyYW5zYWN0aW9uW107XG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25zRm9yTW9udGgocGFnZTogUGFnZSwgbW9udGhNb21lbnQ6IE1vbWVudCkge1xuICBjb25zdCB1cmwgPSBnZXRUcmFuc2FjdGlvbnNVcmwobW9udGhNb21lbnQpO1xuXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8U2NyYXBlZFRyYW5zYWN0aW9uc1Jlc3VsdD4ocGFnZSwgdXJsKTtcbiAgY29uc3QgdHJhbnNhY3Rpb25zQnlBY2NvdW50OiBSZWNvcmQ8c3RyaW5nLCBUcmFuc2FjdGlvbltdPiA9IHt9O1xuXG4gIGlmICghZGF0YSB8fCAhZGF0YS5yZXN1bHQpIHJldHVybiB0cmFuc2FjdGlvbnNCeUFjY291bnQ7XG5cbiAgZGF0YS5yZXN1bHQudHJhbnNhY3Rpb25zXG4gICAgLy8gRmlsdGVyIG91dCBub24tdHJhbnNhY3Rpb25zIHdpdGhvdXQgYSBwbGFuIHR5cGUsIGUuZy4gc3VtbWFyeSByb3dzXG4gICAgLmZpbHRlcih0cmFuc2FjdGlvbiA9PiAhIXRyYW5zYWN0aW9uLnBsYW5OYW1lKVxuICAgIC5mb3JFYWNoKCh0cmFuc2FjdGlvbjogU2NyYXBlZFRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIXRyYW5zYWN0aW9uc0J5QWNjb3VudFt0cmFuc2FjdGlvbi5zaG9ydENhcmROdW1iZXJdKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uc0J5QWNjb3VudFt0cmFuc2FjdGlvbi5zaG9ydENhcmROdW1iZXJdID0gW107XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcHBlZFRyYW5zYWN0aW9uID0gbWFwVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pO1xuICAgICAgdHJhbnNhY3Rpb25zQnlBY2NvdW50W3RyYW5zYWN0aW9uLnNob3J0Q2FyZE51bWJlcl0ucHVzaChtYXBwZWRUcmFuc2FjdGlvbik7XG4gICAgfSk7XG5cbiAgcmV0dXJuIHRyYW5zYWN0aW9uc0J5QWNjb3VudDtcbn1cblxuZnVuY3Rpb24gYWRkUmVzdWx0KGFsbFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIFRyYW5zYWN0aW9uW10+LCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFRyYW5zYWN0aW9uW10+KSB7XG4gIGNvbnN0IGNsb25lZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIFRyYW5zYWN0aW9uW10+ID0geyAuLi5hbGxSZXN1bHRzIH07XG4gIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChhY2NvdW50TnVtYmVyID0+IHtcbiAgICBpZiAoIWNsb25lZFJlc3VsdHNbYWNjb3VudE51bWJlcl0pIHtcbiAgICAgIGNsb25lZFJlc3VsdHNbYWNjb3VudE51bWJlcl0gPSBbXTtcbiAgICB9XG4gICAgY2xvbmVkUmVzdWx0c1thY2NvdW50TnVtYmVyXS5wdXNoKC4uLnJlc3VsdFthY2NvdW50TnVtYmVyXSk7XG4gIH0pO1xuICByZXR1cm4gY2xvbmVkUmVzdWx0cztcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRyYW5zYWN0aW9ucyhcbiAgdHhuczogVHJhbnNhY3Rpb25bXSxcbiAgc3RhcnRNb21lbnQ6IG1vbWVudC5Nb21lbnQsXG4gIGNvbWJpbmVJbnN0YWxsbWVudHM6IGJvb2xlYW4sXG4gIGVuYWJsZVRyYW5zYWN0aW9uc0ZpbHRlckJ5RGF0ZTogYm9vbGVhbixcbikge1xuICBsZXQgY2xvbmVkVHhucyA9IEFycmF5LmZyb20odHhucyk7XG4gIGlmICghY29tYmluZUluc3RhbGxtZW50cykge1xuICAgIGNsb25lZFR4bnMgPSBmaXhJbnN0YWxsbWVudHMoY2xvbmVkVHhucyk7XG4gIH1cbiAgY2xvbmVkVHhucyA9IHNvcnRUcmFuc2FjdGlvbnNCeURhdGUoY2xvbmVkVHhucyk7XG4gIGNsb25lZFR4bnMgPSBlbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGVcbiAgICA/IGZpbHRlck9sZFRyYW5zYWN0aW9ucyhjbG9uZWRUeG5zLCBzdGFydE1vbWVudCwgY29tYmluZUluc3RhbGxtZW50cyB8fCBmYWxzZSlcbiAgICA6IGNsb25lZFR4bnM7XG4gIHJldHVybiBjbG9uZWRUeG5zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFRyYW5zYWN0aW9ucyhwYWdlOiBQYWdlLCBvcHRpb25zOiBTY3JhcGVyT3B0aW9ucykge1xuICBjb25zdCBmdXR1cmVNb250aHNUb1NjcmFwZSA9IG9wdGlvbnMuZnV0dXJlTW9udGhzVG9TY3JhcGUgPz8gMTtcbiAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJyk7XG4gIGNvbnN0IHN0YXJ0TW9tZW50TGltaXQgPSBtb21lbnQoKS5zdWJ0cmFjdCg0LCAneWVhcnMnKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gb3B0aW9ucy5zdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudC5tYXgoc3RhcnRNb21lbnRMaW1pdCwgbW9tZW50KHN0YXJ0RGF0ZSkpO1xuICBjb25zdCBhbGxNb250aHMgPSBnZXRBbGxNb250aE1vbWVudHMoc3RhcnRNb21lbnQsIGZ1dHVyZU1vbnRoc1RvU2NyYXBlKTtcblxuICBhd2FpdCBsb2FkQ2F0ZWdvcmllcyhwYWdlKTtcblxuICBsZXQgYWxsUmVzdWx0czogUmVjb3JkPHN0cmluZywgVHJhbnNhY3Rpb25bXT4gPSB7fTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxNb250aHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaFRyYW5zYWN0aW9uc0Zvck1vbnRoKHBhZ2UsIGFsbE1vbnRoc1tpXSk7XG4gICAgYWxsUmVzdWx0cyA9IGFkZFJlc3VsdChhbGxSZXN1bHRzLCByZXN1bHQpO1xuICB9XG5cbiAgT2JqZWN0LmtleXMoYWxsUmVzdWx0cykuZm9yRWFjaChhY2NvdW50TnVtYmVyID0+IHtcbiAgICBsZXQgdHhucyA9IGFsbFJlc3VsdHNbYWNjb3VudE51bWJlcl07XG4gICAgdHhucyA9IHByZXBhcmVUcmFuc2FjdGlvbnMoXG4gICAgICB0eG5zLFxuICAgICAgc3RhcnRNb21lbnQsXG4gICAgICBvcHRpb25zLmNvbWJpbmVJbnN0YWxsbWVudHMgfHwgZmFsc2UsXG4gICAgICBvcHRpb25zLm91dHB1dERhdGE/LmVuYWJsZVRyYW5zYWN0aW9uc0ZpbHRlckJ5RGF0ZSA/PyB0cnVlLFxuICAgICk7XG4gICAgYWxsUmVzdWx0c1thY2NvdW50TnVtYmVyXSA9IHR4bnM7XG4gIH0pO1xuXG4gIHJldHVybiBhbGxSZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyhwYWdlOiBQYWdlKTogUG9zc2libGVMb2dpblJlc3VsdHMge1xuICBjb25zdCB1cmxzOiBQb3NzaWJsZUxvZ2luUmVzdWx0cyA9IHt9O1xuICB1cmxzW0xvZ2luUmVzdWx0cy5TdWNjZXNzXSA9IFtTVUNDRVNTX1VSTF07XG4gIHVybHNbTG9naW5SZXN1bHRzLkNoYW5nZVBhc3N3b3JkXSA9IFtQQVNTV09SRF9FWFBJUkVEX1VSTF07XG4gIHVybHNbTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZF0gPSBbXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGVsZW1lbnRQcmVzZW50T25QYWdlKHBhZ2UsIElOVkFMSURfREVUQUlMU19TRUxFQ1RPUik7XG4gICAgfSxcbiAgXTtcbiAgdXJsc1tMb2dpblJlc3VsdHMuVW5rbm93bkVycm9yXSA9IFtcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gZWxlbWVudFByZXNlbnRPblBhZ2UocGFnZSwgTE9HSU5fRVJST1JfU0VMRUNUT1IpO1xuICAgIH0sXG4gIF07XG4gIHJldHVybiB1cmxzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpIHtcbiAgcmV0dXJuIFtcbiAgICB7IHNlbGVjdG9yOiAnI3VzZXItbmFtZScsIHZhbHVlOiBjcmVkZW50aWFscy51c2VybmFtZSB9LFxuICAgIHsgc2VsZWN0b3I6ICcjcGFzc3dvcmQnLCB2YWx1ZTogY3JlZGVudGlhbHMucGFzc3dvcmQgfSxcbiAgXTtcbn1cblxudHlwZSBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyA9IHsgdXNlcm5hbWU6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9O1xuXG5jbGFzcyBNYXhTY3JhcGVyIGV4dGVuZHMgQmFzZVNjcmFwZXJXaXRoQnJvd3NlcjxTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscz4ge1xuICBnZXRMb2dpbk9wdGlvbnMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKTogTG9naW5PcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9naW5Vcmw6IExPR0lOX1VSTCxcbiAgICAgIGZpZWxkczogY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHMpLFxuICAgICAgc3VibWl0QnV0dG9uU2VsZWN0b3I6ICdhcHAtdXNlci1sb2dpbi1mb3JtIC5nZW5lcmFsLWJ1dHRvbi5zZW5kLW1lLWNvZGUnLFxuICAgICAgcHJlQWN0aW9uOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChhd2FpdCBlbGVtZW50UHJlc2VudE9uUGFnZSh0aGlzLnBhZ2UsICcjY2xvc2VQb3B1cCcpKSB7XG4gICAgICAgICAgYXdhaXQgY2xpY2tCdXR0b24odGhpcy5wYWdlLCAnI2Nsb3NlUG9wdXAnKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBjbGlja0J1dHRvbih0aGlzLnBhZ2UsICcucGVyc29uYWwtYXJlYSA+IGEuZ28tdG8tcGVyc29uYWwtYXJlYScpO1xuICAgICAgICBpZiAoYXdhaXQgZWxlbWVudFByZXNlbnRPblBhZ2UodGhpcy5wYWdlLCAnLmxvZ2luLWxpbmsjcHJpdmF0ZScpKSB7XG4gICAgICAgICAgYXdhaXQgY2xpY2tCdXR0b24odGhpcy5wYWdlLCAnLmxvZ2luLWxpbmsjcHJpdmF0ZScpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZCh0aGlzLnBhZ2UsICcjbG9naW4tcGFzc3dvcmQtbGluaycsIHRydWUpO1xuICAgICAgICBhd2FpdCBjbGlja0J1dHRvbih0aGlzLnBhZ2UsICcjbG9naW4tcGFzc3dvcmQtbGluaycpO1xuICAgICAgICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQodGhpcy5wYWdlLCAnI2xvZ2luLXBhc3N3b3JkLnRhYi1wYW5lLmFjdGl2ZSBhcHAtdXNlci1sb2dpbi1mb3JtJywgdHJ1ZSk7XG4gICAgICB9LFxuICAgICAgY2hlY2tSZWFkaW5lc3M6IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKHRoaXMucGFnZSwgJy5wZXJzb25hbC1hcmVhID4gYS5nby10by1wZXJzb25hbC1hcmVhJywgdHJ1ZSk7XG4gICAgICB9LFxuICAgICAgcG9zdEFjdGlvbjogYXN5bmMgKCkgPT4gcmVkaXJlY3RPckRpYWxvZyh0aGlzLnBhZ2UpLFxuICAgICAgcG9zc2libGVSZXN1bHRzOiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyh0aGlzLnBhZ2UpLFxuICAgICAgd2FpdFVudGlsOiAnZG9tY29udGVudGxvYWRlZCcsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRGF0YSgpIHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgZmV0Y2hUcmFuc2FjdGlvbnModGhpcy5wYWdlLCB0aGlzLm9wdGlvbnMpO1xuICAgIGNvbnN0IGFjY291bnRzID0gT2JqZWN0LmtleXMocmVzdWx0cykubWFwKGFjY291bnROdW1iZXIgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWNjb3VudE51bWJlcixcbiAgICAgICAgdHhuczogcmVzdWx0c1thY2NvdW50TnVtYmVyXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIGFjY291bnRzLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF4U2NyYXBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLHFCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxXQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxhQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxjQUFBLEdB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
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ var _max = _interopRequireWildcard(require("./max"));
4
+ var _testsUtils = require("../tests/tests-utils");
5
+ var _definitions = require("../definitions");
6
+ var _baseScraperWithBrowser = require("./base-scraper-with-browser");
7
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
8
+ const COMPANY_ID = 'max'; // TODO this property should be hard-coded in the provider
9
+ const testsConfig = (0, _testsUtils.getTestsConfig)();
10
+ describe('Max 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.max).toBeDefined();
16
+ expect(_definitions.SCRAPERS.max.loginFields).toContain('username');
17
+ expect(_definitions.SCRAPERS.max.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 _max.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 _max.default(options);
39
+ const result = await scraper.scrape(testsConfig.credentials.max);
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
+ describe('getMemo', () => {
48
+ test.each([[{
49
+ comments: ''
50
+ }, ''], [{
51
+ comments: 'comment without funds'
52
+ }, 'comment without funds'], [{
53
+ comments: '',
54
+ fundsTransferReceiverOrTransfer: 'Daniel H'
55
+ }, 'Daniel H'], [{
56
+ comments: '',
57
+ fundsTransferReceiverOrTransfer: 'Daniel',
58
+ fundsTransferComment: 'Foo bar'
59
+ }, 'Daniel: Foo bar']])('%o should create memo: %s', (transaction, expected) => {
60
+ const memo = (0, _max.getMemo)(transaction);
61
+ expect(memo).toBe(expected);
62
+ });
63
+ });
64
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF4IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX3Rlc3RzVXRpbHMiLCJfZGVmaW5pdGlvbnMiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkNPTVBBTllfSUQiLCJ0ZXN0c0NvbmZpZyIsImdldFRlc3RzQ29uZmlnIiwiZGVzY3JpYmUiLCJiZWZvcmVBbGwiLCJleHRlbmRBc3luY1RpbWVvdXQiLCJ0ZXN0IiwiZXhwZWN0IiwiU0NSQVBFUlMiLCJtYXgiLCJ0b0JlRGVmaW5lZCIsImxvZ2luRmllbGRzIiwidG9Db250YWluIiwibWF5YmVUZXN0Q29tcGFueUFQSSIsImNvbmZpZyIsImNvbXBhbnlBUEkiLCJpbnZhbGlkUGFzc3dvcmQiLCJvcHRpb25zIiwiY29tcGFueUlkIiwic2NyYXBlciIsIk1heFNjcmFwZXIiLCJyZXN1bHQiLCJzY3JhcGUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwic3VjY2VzcyIsInRvQmVGYWxzeSIsImVycm9yVHlwZSIsInRvQmUiLCJMb2dpblJlc3VsdHMiLCJJbnZhbGlkUGFzc3dvcmQiLCJjcmVkZW50aWFscyIsImVycm9yIiwiZXJyb3JNZXNzYWdlIiwidHJpbSIsInRvQmVUcnV0aHkiLCJleHBvcnRUcmFuc2FjdGlvbnMiLCJhY2NvdW50cyIsImVhY2giLCJjb21tZW50cyIsImZ1bmRzVHJhbnNmZXJSZWNlaXZlck9yVHJhbnNmZXIiLCJmdW5kc1RyYW5zZmVyQ29tbWVudCIsInRyYW5zYWN0aW9uIiwiZXhwZWN0ZWQiLCJtZW1vIiwiZ2V0TWVtbyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9tYXgudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTWF4U2NyYXBlciwgeyBnZXRNZW1vIH0gZnJvbSAnLi9tYXgnO1xuaW1wb3J0IHsgbWF5YmVUZXN0Q29tcGFueUFQSSwgZXh0ZW5kQXN5bmNUaW1lb3V0LCBnZXRUZXN0c0NvbmZpZywgZXhwb3J0VHJhbnNhY3Rpb25zIH0gZnJvbSAnLi4vdGVzdHMvdGVzdHMtdXRpbHMnO1xuaW1wb3J0IHsgU0NSQVBFUlMgfSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBMb2dpblJlc3VsdHMgfSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuXG5jb25zdCBDT01QQU5ZX0lEID0gJ21heCc7IC8vIFRPRE8gdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgaGFyZC1jb2RlZCBpbiB0aGUgcHJvdmlkZXJcbmNvbnN0IHRlc3RzQ29uZmlnID0gZ2V0VGVzdHNDb25maWcoKTtcblxuZGVzY3JpYmUoJ01heCBzY3JhcGVyJywgKCkgPT4ge1xuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIGV4dGVuZEFzeW5jVGltZW91dCgpOyAvLyBUaGUgZGVmYXVsdCB0aW1lb3V0IGlzIDUgc2Vjb25kcyBwZXIgYXN5bmMgdGVzdCwgdGhpcyBmdW5jdGlvbiBleHRlbmRzIHRoZSB0aW1lb3V0IHZhbHVlXG4gIH0pO1xuXG4gIHRlc3QoJ3Nob3VsZCBleHBvc2UgbG9naW4gZmllbGRzIGluIHNjcmFwZXJzIGNvbnN0YW50JywgKCkgPT4ge1xuICAgIGV4cGVjdChTQ1JBUEVSUy5tYXgpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KFNDUkFQRVJTLm1heC5sb2dpbkZpZWxkcykudG9Db250YWluKCd1c2VybmFtZScpO1xuICAgIGV4cGVjdChTQ1JBUEVSUy5tYXgubG9naW5GaWVsZHMpLnRvQ29udGFpbigncGFzc3dvcmQnKTtcbiAgfSk7XG5cbiAgbWF5YmVUZXN0Q29tcGFueUFQSShDT01QQU5ZX0lELCBjb25maWcgPT4gY29uZmlnLmNvbXBhbnlBUEkuaW52YWxpZFBhc3N3b3JkKShcbiAgICAnc2hvdWxkIGZhaWwgb24gaW52YWxpZCB1c2VyL3Bhc3N3b3JkXCInLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRlc3RzQ29uZmlnLm9wdGlvbnMsXG4gICAgICAgIGNvbXBhbnlJZDogQ09NUEFOWV9JRCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNjcmFwZXIgPSBuZXcgTWF4U2NyYXBlcihvcHRpb25zKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2NyYXBlci5zY3JhcGUoeyB1c2VybmFtZTogJ2UxMHMxMicsIHBhc3N3b3JkOiAnM2Yzc3MzZCcgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QocmVzdWx0LnN1Y2Nlc3MpLnRvQmVGYWxzeSgpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5lcnJvclR5cGUpLnRvQmUoTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZCk7XG4gICAgfSxcbiAgKTtcblxuICBtYXliZVRlc3RDb21wYW55QVBJKENPTVBBTllfSUQpKCdzaG91bGQgc2NyYXBlIHRyYW5zYWN0aW9uc1wiJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAuLi50ZXN0c0NvbmZpZy5vcHRpb25zLFxuICAgICAgY29tcGFueUlkOiBDT01QQU5ZX0lELFxuICAgIH07XG5cbiAgICBjb25zdCBzY3JhcGVyID0gbmV3IE1heFNjcmFwZXIob3B0aW9ucyk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2NyYXBlci5zY3JhcGUodGVzdHNDb25maWcuY3JlZGVudGlhbHMubWF4KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlRGVmaW5lZCgpO1xuICAgIGNvbnN0IGVycm9yID0gYCR7cmVzdWx0LmVycm9yVHlwZSB8fCAnJ30gJHtyZXN1bHQuZXJyb3JNZXNzYWdlIHx8ICcnfWAudHJpbSgpO1xuICAgIGV4cGVjdChlcnJvcikudG9CZSgnJyk7XG4gICAgZXhwZWN0KHJlc3VsdC5zdWNjZXNzKS50b0JlVHJ1dGh5KCk7XG5cbiAgICBleHBvcnRUcmFuc2FjdGlvbnMoQ09NUEFOWV9JRCwgcmVzdWx0LmFjY291bnRzIHx8IFtdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2dldE1lbW8nLCAoKSA9PiB7XG4gIHR5cGUgVHJhbnNhY3Rpb25Gb3JNZW1vVGVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIGdldE1lbW8+WzBdO1xuICB0ZXN0LmVhY2g8W1RyYW5zYWN0aW9uRm9yTWVtb1Rlc3QsIHN0cmluZ10+KFtcbiAgICBbeyBjb21tZW50czogJycgfSwgJyddLFxuICAgIFt7IGNvbW1lbnRzOiAnY29tbWVudCB3aXRob3V0IGZ1bmRzJyB9LCAnY29tbWVudCB3aXRob3V0IGZ1bmRzJ10sXG4gICAgW3sgY29tbWVudHM6ICcnLCBmdW5kc1RyYW5zZmVyUmVjZWl2ZXJPclRyYW5zZmVyOiAnRGFuaWVsIEgnIH0sICdEYW5pZWwgSCddLFxuICAgIFt7IGNvbW1lbnRzOiAnJywgZnVuZHNUcmFuc2ZlclJlY2VpdmVyT3JUcmFuc2ZlcjogJ0RhbmllbCcsIGZ1bmRzVHJhbnNmZXJDb21tZW50OiAnRm9vIGJhcicgfSwgJ0RhbmllbDogRm9vIGJhciddLFxuICBdKSgnJW8gc2hvdWxkIGNyZWF0ZSBtZW1vOiAlcycsICh0cmFuc2FjdGlvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICBjb25zdCBtZW1vID0gZ2V0TWVtbyh0cmFuc2FjdGlvbik7XG4gICAgZXhwZWN0KG1lbW8pLnRvQmUoZXhwZWN0ZWQpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUFBLElBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLHVCQUFBLEdBQUFILE9B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
@@ -0,0 +1,20 @@
1
+ import DiscountScraper from './discount';
2
+ type ScraperSpecificCredentials = {
3
+ id: string;
4
+ password: string;
5
+ num: string;
6
+ };
7
+ declare class MercantileScraper extends DiscountScraper {
8
+ getLoginOptions(credentials: ScraperSpecificCredentials): {
9
+ loginUrl: string;
10
+ checkReadiness: () => Promise<void>;
11
+ fields: {
12
+ selector: string;
13
+ value: string;
14
+ }[];
15
+ submitButtonSelector: string;
16
+ postAction: () => Promise<void>;
17
+ possibleResults: import("./base-scraper-with-browser").PossibleLoginResults;
18
+ };
19
+ }
20
+ export default MercantileScraper;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _discount = _interopRequireDefault(require("./discount"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ class MercantileScraper extends _discount.default {
10
+ getLoginOptions(credentials) {
11
+ return {
12
+ ...super.getLoginOptions(credentials),
13
+ loginUrl: 'https://start.telebank.co.il/login/?bank=m'
14
+ };
15
+ }
16
+ }
17
+ var _default = exports.default = MercantileScraper;
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGlzY291bnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk1lcmNhbnRpbGVTY3JhcGVyIiwiRGlzY291bnRTY3JhcGVyIiwiZ2V0TG9naW5PcHRpb25zIiwiY3JlZGVudGlhbHMiLCJsb2dpblVybCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9tZXJjYW50aWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaXNjb3VudFNjcmFwZXIgZnJvbSAnLi9kaXNjb3VudCc7XG5cbnR5cGUgU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMgPSB7IGlkOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmc7IG51bTogc3RyaW5nIH07XG5jbGFzcyBNZXJjYW50aWxlU2NyYXBlciBleHRlbmRzIERpc2NvdW50U2NyYXBlciB7XG4gIGdldExvZ2luT3B0aW9ucyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzKSxcbiAgICAgIGxvZ2luVXJsOiAnaHR0cHM6Ly9zdGFydC50ZWxlYmFuay5jby5pbC9sb2dpbi8/YmFuaz1tJyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lcmNhbnRpbGVTY3JhcGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxTQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBeUMsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFHekMsTUFBTUcsaUJBQWlCLFNBQVNDLGlCQUFlLENBQUM7RUFDOUNDLGVBQWVBLENBQUNDLFdBQXVDLEVBQUU7SUFDdkQsT0FBTztNQUNMLEdBQUcsS0FBSyxDQUFDRCxlQUFlLENBQUNDLFdBQVcsQ0FBQztNQUNyQ0MsUUFBUSxFQUFFO0lBQ1osQ0FBQztFQUNIO0FBQ0Y7QUFBQyxJQUFBQyxRQUFBLEdBQUFDLE9BQUEsQ0FBQVAsT0FBQSxHQUVjQyxpQkFBaUIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ var _mercantile = _interopRequireDefault(require("./mercantile"));
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 = 'mercantile'; // TODO this property should be hard-coded in the provider
9
+ const testsConfig = (0, _testsUtils.getTestsConfig)();
10
+ describe('Mercantile legacy 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.mercantile).toBeDefined();
16
+ expect(_definitions.SCRAPERS.mercantile.loginFields).toContain('id');
17
+ expect(_definitions.SCRAPERS.mercantile.loginFields).toContain('password');
18
+ expect(_definitions.SCRAPERS.mercantile.loginFields).toContain('num');
19
+ });
20
+ (0, _testsUtils.maybeTestCompanyAPI)(COMPANY_ID, config => config.companyAPI.invalidPassword)('should fail on invalid user/password"', async () => {
21
+ const options = {
22
+ ...testsConfig.options,
23
+ companyId: COMPANY_ID
24
+ };
25
+ const scraper = new _mercantile.default(options);
26
+ const result = await scraper.scrape(testsConfig.credentials.mercantile);
27
+ expect(result).toBeDefined();
28
+ expect(result.success).toBeFalsy();
29
+ expect(result.errorType).toBe(_baseScraperWithBrowser.LoginResults.InvalidPassword);
30
+ });
31
+ (0, _testsUtils.maybeTestCompanyAPI)(COMPANY_ID)('should scrape transactions"', async () => {
32
+ const options = {
33
+ ...testsConfig.options,
34
+ companyId: COMPANY_ID
35
+ };
36
+ const scraper = new _mercantile.default(options);
37
+ const result = await scraper.scrape(testsConfig.credentials.mercantile);
38
+ expect(result).toBeDefined();
39
+ const error = `${result.errorType || ''} ${result.errorMessage || ''}`.trim();
40
+ expect(error).toBe('');
41
+ expect(result.success).toBeTruthy();
42
+ (0, _testsUtils.exportTransactions)(COMPANY_ID, result.accounts || []);
43
+ });
44
+ });
45
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWVyY2FudGlsZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3Rlc3RzVXRpbHMiLCJfZGVmaW5pdGlvbnMiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkNPTVBBTllfSUQiLCJ0ZXN0c0NvbmZpZyIsImdldFRlc3RzQ29uZmlnIiwiZGVzY3JpYmUiLCJiZWZvcmVBbGwiLCJleHRlbmRBc3luY1RpbWVvdXQiLCJ0ZXN0IiwiZXhwZWN0IiwiU0NSQVBFUlMiLCJtZXJjYW50aWxlIiwidG9CZURlZmluZWQiLCJsb2dpbkZpZWxkcyIsInRvQ29udGFpbiIsIm1heWJlVGVzdENvbXBhbnlBUEkiLCJjb25maWciLCJjb21wYW55QVBJIiwiaW52YWxpZFBhc3N3b3JkIiwib3B0aW9ucyIsImNvbXBhbnlJZCIsInNjcmFwZXIiLCJNZXJjYW50aWxlU2NyYXBlciIsInJlc3VsdCIsInNjcmFwZSIsImNyZWRlbnRpYWxzIiwic3VjY2VzcyIsInRvQmVGYWxzeSIsImVycm9yVHlwZSIsInRvQmUiLCJMb2dpblJlc3VsdHMiLCJJbnZhbGlkUGFzc3dvcmQiLCJlcnJvciIsImVycm9yTWVzc2FnZSIsInRyaW0iLCJ0b0JlVHJ1dGh5IiwiZXhwb3J0VHJhbnNhY3Rpb25zIiwiYWNjb3VudHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyYXBlcnMvbWVyY2FudGlsZS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNZXJjYW50aWxlU2NyYXBlciBmcm9tICcuL21lcmNhbnRpbGUnO1xuaW1wb3J0IHsgbWF5YmVUZXN0Q29tcGFueUFQSSwgZXh0ZW5kQXN5bmNUaW1lb3V0LCBnZXRUZXN0c0NvbmZpZywgZXhwb3J0VHJhbnNhY3Rpb25zIH0gZnJvbSAnLi4vdGVzdHMvdGVzdHMtdXRpbHMnO1xuaW1wb3J0IHsgU0NSQVBFUlMgfSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBMb2dpblJlc3VsdHMgfSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuXG5jb25zdCBDT01QQU5ZX0lEID0gJ21lcmNhbnRpbGUnOyAvLyBUT0RPIHRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIGhhcmQtY29kZWQgaW4gdGhlIHByb3ZpZGVyXG5jb25zdCB0ZXN0c0NvbmZpZyA9IGdldFRlc3RzQ29uZmlnKCk7XG5cbmRlc2NyaWJlKCdNZXJjYW50aWxlIGxlZ2FjeSBzY3JhcGVyJywgKCkgPT4ge1xuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIGV4dGVuZEFzeW5jVGltZW91dCgpOyAvLyBUaGUgZGVmYXVsdCB0aW1lb3V0IGlzIDUgc2Vjb25kcyBwZXIgYXN5bmMgdGVzdCwgdGhpcyBmdW5jdGlvbiBleHRlbmRzIHRoZSB0aW1lb3V0IHZhbHVlXG4gIH0pO1xuXG4gIHRlc3QoJ3Nob3VsZCBleHBvc2UgbG9naW4gZmllbGRzIGluIHNjcmFwZXJzIGNvbnN0YW50JywgKCkgPT4ge1xuICAgIGV4cGVjdChTQ1JBUEVSUy5tZXJjYW50aWxlKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChTQ1JBUEVSUy5tZXJjYW50aWxlLmxvZ2luRmllbGRzKS50b0NvbnRhaW4oJ2lkJyk7XG4gICAgZXhwZWN0KFNDUkFQRVJTLm1lcmNhbnRpbGUubG9naW5GaWVsZHMpLnRvQ29udGFpbigncGFzc3dvcmQnKTtcbiAgICBleHBlY3QoU0NSQVBFUlMubWVyY2FudGlsZS5sb2dpbkZpZWxkcykudG9Db250YWluKCdudW0nKTtcbiAgfSk7XG5cbiAgbWF5YmVUZXN0Q29tcGFueUFQSShDT01QQU5ZX0lELCBjb25maWcgPT4gY29uZmlnLmNvbXBhbnlBUEkuaW52YWxpZFBhc3N3b3JkKShcbiAgICAnc2hvdWxkIGZhaWwgb24gaW52YWxpZCB1c2VyL3Bhc3N3b3JkXCInLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRlc3RzQ29uZmlnLm9wdGlvbnMsXG4gICAgICAgIGNvbXBhbnlJZDogQ09NUEFOWV9JRCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNjcmFwZXIgPSBuZXcgTWVyY2FudGlsZVNjcmFwZXIob3B0aW9ucyk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNjcmFwZXIuc2NyYXBlKHRlc3RzQ29uZmlnLmNyZWRlbnRpYWxzLm1lcmNhbnRpbGUpO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zdWNjZXNzKS50b0JlRmFsc3koKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZXJyb3JUeXBlKS50b0JlKExvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmQpO1xuICAgIH0sXG4gICk7XG5cbiAgbWF5YmVUZXN0Q29tcGFueUFQSShDT01QQU5ZX0lEKSgnc2hvdWxkIHNjcmFwZSB0cmFuc2FjdGlvbnNcIicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgLi4udGVzdHNDb25maWcub3B0aW9ucyxcbiAgICAgIGNvbXBhbnlJZDogQ09NUEFOWV9JRCxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2NyYXBlciA9IG5ldyBNZXJjYW50aWxlU2NyYXBlcihvcHRpb25zKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzY3JhcGVyLnNjcmFwZSh0ZXN0c0NvbmZpZy5jcmVkZW50aWFscy5tZXJjYW50aWxlKTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlRGVmaW5lZCgpO1xuICAgIGNvbnN0IGVycm9yID0gYCR7cmVzdWx0LmVycm9yVHlwZSB8fCAnJ30gJHtyZXN1bHQuZXJyb3JNZXNzYWdlIHx8ICcnfWAudHJpbSgpO1xuICAgIGV4cGVjdChlcnJvcikudG9CZSgnJyk7XG4gICAgZXhwZWN0KHJlc3VsdC5zdWNjZXNzKS50b0JlVHJ1dGh5KCk7XG5cbiAgICBleHBvcnRUcmFuc2FjdGlvbnMoQ09NUEFOWV9JRCwgcmVzdWx0LmFjY291bnRzIHx8IFtdKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxXQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyx1QkFBQSxHQUFBSCxPQUFBO0FBQTJELFNBQUFELHVCQUFBSyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRTNELE1BQU1HLFVBQVUsR0FBRyxZQUFZLENBQUMsQ0FBQztBQUNqQyxNQUFNQyxXQUFXLEdBQUcsSUFBQUMsMEJBQWMsRUFBQyxDQUFDO0FBRXBDQyxRQUFRLENBQUMsMkJBQTJCLEVBQUUsTUFBTTtFQUMxQ0MsU0FBUyxDQUFDLE1BQU07SUFDZCxJQUFBQyw4QkFBa0IsRUFBQyxDQUFDLENBQUMsQ0FBQztFQUN4QixDQUFDLENBQUM7RUFFRkMsSUFBSSxDQUFDLGlEQUFpRCxFQUFFLE1BQU07SUFDNURDLE1BQU0sQ0FBQ0MscUJBQVEsQ0FBQ0MsVUFBVSxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDSCxNQUFNLENBQUNDLHFCQUFRLENBQUNDLFVBQVUsQ0FBQ0UsV0FBVyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDdkRMLE1BQU0sQ0FBQ0MscUJBQVEsQ0FBQ0MsVUFBVSxDQUFDRSxXQUFXLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUM3REwsTUFBTSxDQUFDQyxxQkFBUSxDQUFDQyxVQUFVLENBQUNFLFdBQVcsQ0FBQyxDQUFDQyxTQUFTLENBQUMsS0FBSyxDQUFDO0VBQzFELENBQUMsQ0FBQztFQUVGLElBQUFDLCtCQUFtQixFQUFDYixVQUFVLEVBQUVjLE1BQU0sSUFBSUEsTUFBTSxDQUFDQyxVQUFVLENBQUNDLGVBQWUsQ0FBQyxDQUMxRSx1Q0FBdUMsRUFDdkMsWUFBWTtJQUNWLE1BQU1DLE9BQU8sR0FBRztNQUNkLEdBQUdoQixXQUFXLENBQUNnQixPQUFPO01BQ3RCQyxTQUFTLEVBQUVsQjtJQUNiLENBQUM7SUFFRCxNQUFNbUIsT0FBTyxHQUFHLElBQUlDLG1CQUFpQixDQUFDSCxPQUFPLENBQUM7SUFFOUMsTUFBTUksTUFBTSxHQUFHLE1BQU1GLE9BQU8sQ0FBQ0csTUFBTSxDQUFDckIsV0FBVyxDQUFDc0IsV0FBVyxDQUFDZCxVQUFVLENBQUM7SUFFdkVGLE1BQU0sQ0FBQ2MsTUFBTSxDQUFDLENBQUNYLFdBQVcsQ0FBQyxDQUFDO0lBQzVCSCxNQUFNLENBQUNjLE1BQU0sQ0FBQ0csT0FBTyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDbEIsTUFBTSxDQUFDYyxNQUFNLENBQUNLLFNBQVMsQ0FBQyxDQUFDQyxJQUFJLENBQUNDLG9DQUFZLENBQUNDLGVBQWUsQ0FBQztFQUM3RCxDQUNGLENBQUM7RUFFRCxJQUFBaEIsK0JBQW1CLEVBQUNiLFVBQVUsQ0FBQyxDQUFDLDZCQUE2QixFQUFFLFlBQVk7SUFDekUsTUFBTWlCLE9BQU8sR0FBRztNQUNkLEdBQUdoQixXQUFXLENBQUNnQixPQUFPO01BQ3RCQyxTQUFTLEVBQUVsQjtJQUNiLENBQUM7SUFFRCxNQUFNbUIsT0FBTyxHQUFHLElBQUlDLG1CQUFpQixDQUFDSCxPQUFPLENBQUM7SUFDOUMsTUFBTUksTUFBTSxHQUFHLE1BQU1GLE9BQU8sQ0FBQ0csTUFBTSxDQUFDckIsV0FBVyxDQUFDc0IsV0FBVyxDQUFDZCxVQUFVLENBQUM7SUFDdkVGLE1BQU0sQ0FBQ2MsTUFBTSxDQUFDLENBQUNYLFdBQVcsQ0FBQyxDQUFDO0lBQzVCLE1BQU1vQixLQUFLLEdBQUcsR0FBR1QsTUFBTSxDQUFDSyxTQUFTLElBQUksRUFBRSxJQUFJTCxNQUFNLENBQUNVLFlBQVksSUFBSSxFQUFFLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDLENBQUM7SUFDN0V6QixNQUFNLENBQUN1QixLQUFLLENBQUMsQ0FBQ0gsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN0QnBCLE1BQU0sQ0FBQ2MsTUFBTSxDQUFDRyxPQUFPLENBQUMsQ0FBQ1MsVUFBVSxDQUFDLENBQUM7SUFFbkMsSUFBQUMsOEJBQWtCLEVBQUNsQyxVQUFVLEVBQUVxQixNQUFNLENBQUNjLFFBQVEsSUFBSSxFQUFFLENBQUM7RUFDdkQsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,35 @@
1
+ import { type TransactionsAccount } from '../transactions';
2
+ import { BaseScraperWithBrowser, type PossibleLoginResults } from './base-scraper-with-browser';
3
+ import { ScraperErrorTypes } from './errors';
4
+ type ScraperSpecificCredentials = {
5
+ username: string;
6
+ password: string;
7
+ };
8
+ declare class MizrahiScraper extends BaseScraperWithBrowser<ScraperSpecificCredentials> {
9
+ getLoginOptions(credentials: ScraperSpecificCredentials): {
10
+ loginUrl: string;
11
+ fields: {
12
+ selector: string;
13
+ value: string;
14
+ }[];
15
+ submitButtonSelector: string;
16
+ checkReadiness: () => Promise<void>;
17
+ postAction: () => Promise<void>;
18
+ possibleResults: PossibleLoginResults;
19
+ };
20
+ fetchData(): Promise<{
21
+ success: boolean;
22
+ accounts: TransactionsAccount[];
23
+ errorType?: undefined;
24
+ errorMessage?: undefined;
25
+ } | {
26
+ success: boolean;
27
+ errorType: ScraperErrorTypes;
28
+ errorMessage: string;
29
+ accounts?: undefined;
30
+ }>;
31
+ private getPendingTransactions;
32
+ private fetchAccount;
33
+ private shouldMarkAsPending;
34
+ }
35
+ export default MizrahiScraper;