israeli-bank-scrapers 6.1.1 → 6.1.3
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.
- package/lib/assertNever.js +7 -5
- package/lib/constants.js +16 -13
- package/lib/definitions.js +113 -109
- package/lib/helpers/browser.js +13 -9
- package/lib/helpers/dates.js +19 -18
- package/lib/helpers/debug.js +9 -9
- package/lib/helpers/elements-interactions.js +82 -78
- package/lib/helpers/fetch.js +85 -82
- package/lib/helpers/navigation.js +28 -24
- package/lib/helpers/storage.js +11 -10
- package/lib/helpers/transactions.js +32 -33
- package/lib/helpers/waiting.js +42 -45
- package/lib/index.js +82 -15
- package/lib/scrapers/amex.js +13 -11
- package/lib/scrapers/amex.test.d.ts +1 -0
- package/lib/scrapers/amex.test.js +49 -0
- package/lib/scrapers/base-beinleumi-group.d.ts +32 -0
- package/lib/scrapers/base-beinleumi-group.js +350 -234
- package/lib/scrapers/base-isracard-amex.js +273 -273
- package/lib/scrapers/base-scraper-with-browser.js +263 -241
- package/lib/scrapers/base-scraper-with-browser.test.d.ts +1 -0
- package/lib/scrapers/base-scraper-with-browser.test.js +53 -0
- package/lib/scrapers/base-scraper.js +82 -82
- package/lib/scrapers/behatsdaa.js +103 -98
- package/lib/scrapers/behatsdaa.test.d.ts +1 -0
- package/lib/scrapers/behatsdaa.test.js +46 -0
- package/lib/scrapers/beinleumi.js +13 -11
- package/lib/scrapers/beinleumi.test.d.ts +1 -0
- package/lib/scrapers/beinleumi.test.js +47 -0
- package/lib/scrapers/beyahad-bishvilha.js +132 -132
- package/lib/scrapers/beyahad-bishvilha.test.d.ts +1 -0
- package/lib/scrapers/beyahad-bishvilha.test.js +47 -0
- package/lib/scrapers/discount.js +101 -97
- package/lib/scrapers/discount.test.d.ts +1 -0
- package/lib/scrapers/discount.test.js +49 -0
- package/lib/scrapers/errors.js +25 -22
- package/lib/scrapers/factory.js +67 -66
- package/lib/scrapers/factory.test.d.ts +1 -0
- package/lib/scrapers/factory.test.js +19 -0
- package/lib/scrapers/hapoalim.js +175 -162
- package/lib/scrapers/hapoalim.test.d.ts +1 -0
- package/lib/scrapers/hapoalim.test.js +47 -0
- package/lib/scrapers/interface.js +5 -2
- package/lib/scrapers/isracard.js +13 -11
- package/lib/scrapers/isracard.test.d.ts +1 -0
- package/lib/scrapers/isracard.test.js +49 -0
- package/lib/scrapers/leumi.js +170 -167
- package/lib/scrapers/leumi.test.d.ts +1 -0
- package/lib/scrapers/leumi.test.js +47 -0
- package/lib/scrapers/massad.js +13 -11
- package/lib/scrapers/max.js +261 -261
- package/lib/scrapers/max.test.d.ts +1 -0
- package/lib/scrapers/max.test.js +65 -0
- package/lib/scrapers/mercantile.js +16 -14
- package/lib/scrapers/mercantile.test.d.ts +1 -0
- package/lib/scrapers/mercantile.test.js +45 -0
- package/lib/scrapers/mizrahi.js +154 -158
- package/lib/scrapers/mizrahi.test.d.ts +1 -0
- package/lib/scrapers/mizrahi.test.js +53 -0
- package/lib/scrapers/one-zero-queries.js +7 -4
- package/lib/scrapers/one-zero.js +221 -176
- package/lib/scrapers/one-zero.test.d.ts +1 -0
- package/lib/scrapers/one-zero.test.js +51 -0
- package/lib/scrapers/otsar-hahayal.js +13 -11
- package/lib/scrapers/otsar-hahayal.test.d.ts +1 -0
- package/lib/scrapers/otsar-hahayal.test.js +47 -0
- package/lib/scrapers/pagi.js +13 -11
- package/lib/scrapers/pagi.test.d.ts +1 -0
- package/lib/scrapers/pagi.test.js +47 -0
- package/lib/scrapers/union-bank.js +173 -172
- package/lib/scrapers/union-bank.test.d.ts +1 -0
- package/lib/scrapers/union-bank.test.js +47 -0
- package/lib/scrapers/visa-cal.d.ts +2 -0
- package/lib/scrapers/visa-cal.js +263 -254
- package/lib/scrapers/visa-cal.test.d.ts +1 -0
- package/lib/scrapers/visa-cal.test.js +49 -0
- package/lib/scrapers/yahav.js +206 -190
- package/lib/scrapers/yahav.test.d.ts +1 -0
- package/lib/scrapers/yahav.test.js +49 -0
- package/lib/transactions.js +16 -13
- package/package.json +9 -4
package/lib/scrapers/mizrahi.js
CHANGED
|
@@ -1,26 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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 _elementsInteractions = require("../helpers/elements-interactions");
|
|
10
|
+
var _fetch = require("../helpers/fetch");
|
|
11
|
+
var _navigation = require("../helpers/navigation");
|
|
12
|
+
var _transactions = require("../transactions");
|
|
13
|
+
var _baseScraperWithBrowser = require("./base-scraper-with-browser");
|
|
14
|
+
var _errors = require("./errors");
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
16
|
const BASE_WEBSITE_URL = 'https://www.mizrahi-tefahot.co.il';
|
|
15
17
|
const LOGIN_URL = `${BASE_WEBSITE_URL}/login/index.html#/auth-page-he`;
|
|
16
18
|
const BASE_APP_URL = 'https://mto.mizrahi-tefahot.co.il';
|
|
17
19
|
const AFTER_LOGIN_BASE_URL = /https:\/\/mto\.mizrahi-tefahot\.co\.il\/OnlineApp\/.*/;
|
|
18
20
|
const OSH_PAGE = '/osh/legacy/legacy-Osh-Main';
|
|
19
21
|
const TRANSACTIONS_PAGE = '/osh/legacy/root-main-osh-p428New';
|
|
20
|
-
const TRANSACTIONS_REQUEST_URLS = [
|
|
21
|
-
`${BASE_APP_URL}/OnlinePilot/api/SkyOSH/get428Index`,
|
|
22
|
-
`${BASE_APP_URL}/Online/api/SkyOSH/get428Index`,
|
|
23
|
-
];
|
|
22
|
+
const TRANSACTIONS_REQUEST_URLS = [`${BASE_APP_URL}/OnlinePilot/api/SkyOSH/get428Index`, `${BASE_APP_URL}/Online/api/SkyOSH/get428Index`];
|
|
24
23
|
const PENDING_TRANSACTIONS_PAGE = '/osh/legacy/legacy-Osh-p420';
|
|
25
24
|
const PENDING_TRANSACTIONS_IFRAME = 'p420.aspx';
|
|
26
25
|
const CHANGE_PASSWORD_URL = /https:\/\/www\.mizrahi-tefahot\.co\.il\/login\/index\.html#\/change-pass/;
|
|
@@ -37,167 +36,164 @@ const pendingTrxIdentifierId = '#ctl00_ContentPlaceHolder2_panel1';
|
|
|
37
36
|
const checkingAccountTabHebrewName = 'עובר ושב';
|
|
38
37
|
const checkingAccountTabEnglishName = 'Checking Account';
|
|
39
38
|
function createLoginFields(credentials) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
return [{
|
|
40
|
+
selector: usernameSelector,
|
|
41
|
+
value: credentials.username
|
|
42
|
+
}, {
|
|
43
|
+
selector: passwordSelector,
|
|
44
|
+
value: credentials.password
|
|
45
|
+
}];
|
|
44
46
|
}
|
|
45
47
|
async function isLoggedIn(options) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
if (!options?.page) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const oshXPath = `//a//span[contains(., "${checkingAccountTabHebrewName}") or contains(., "${checkingAccountTabEnglishName}")]`;
|
|
52
|
+
const oshTab = await options.page.$$(`xpath${oshXPath}`);
|
|
53
|
+
return oshTab.length > 0;
|
|
52
54
|
}
|
|
53
55
|
function getPossibleLoginResults(page) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
return {
|
|
57
|
+
[_baseScraperWithBrowser.LoginResults.Success]: [AFTER_LOGIN_BASE_URL, isLoggedIn],
|
|
58
|
+
[_baseScraperWithBrowser.LoginResults.InvalidPassword]: [async () => !!(await page.$(invalidPasswordSelector))],
|
|
59
|
+
[_baseScraperWithBrowser.LoginResults.ChangePassword]: [CHANGE_PASSWORD_URL]
|
|
60
|
+
};
|
|
59
61
|
}
|
|
60
62
|
function getStartMoment(optionsStartDate) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
63
|
+
const defaultStartMoment = (0, _moment.default)().subtract(1, 'years');
|
|
64
|
+
const startDate = optionsStartDate || defaultStartMoment.toDate();
|
|
65
|
+
return _moment.default.max(defaultStartMoment, (0, _moment.default)(startDate));
|
|
64
66
|
}
|
|
65
67
|
function createDataFromRequest(request, optionsStartDate) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
const data = JSON.parse(request.postData() || '{}');
|
|
69
|
+
data.inFromDate = getStartMoment(optionsStartDate).format(DATE_FORMAT);
|
|
70
|
+
data.inToDate = (0, _moment.default)().format(DATE_FORMAT);
|
|
71
|
+
data.table.maxRow = MAX_ROWS_PER_REQUEST;
|
|
72
|
+
return data;
|
|
71
73
|
}
|
|
72
74
|
function createHeadersFromRequest(request) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
return {
|
|
76
|
+
mizrahixsrftoken: request.headers().mizrahixsrftoken,
|
|
77
|
+
'Content-Type': request.headers()['content-type']
|
|
78
|
+
};
|
|
77
79
|
}
|
|
78
80
|
function convertTransactions(txns) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
81
|
+
return txns.map(row => {
|
|
82
|
+
const txnDate = (0, _moment.default)(row.MC02PeulaTaaEZ, _moment.default.HTML5_FMT.DATETIME_LOCAL_SECONDS).toISOString();
|
|
83
|
+
return {
|
|
84
|
+
type: _transactions.TransactionTypes.Normal,
|
|
85
|
+
identifier: row.MC02AsmahtaMekoritEZ ? parseInt(row.MC02AsmahtaMekoritEZ, 10) : undefined,
|
|
86
|
+
date: txnDate,
|
|
87
|
+
processedDate: txnDate,
|
|
88
|
+
originalAmount: row.MC02SchumEZ,
|
|
89
|
+
originalCurrency: _constants.SHEKEL_CURRENCY,
|
|
90
|
+
chargedAmount: row.MC02SchumEZ,
|
|
91
|
+
description: row.MC02TnuaTeurEZ,
|
|
92
|
+
status: _transactions.TransactionStatuses.Completed
|
|
93
|
+
};
|
|
94
|
+
});
|
|
93
95
|
}
|
|
94
96
|
async function extractPendingTransactions(page) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
97
|
+
const pendingTxn = await (0, _elementsInteractions.pageEvalAll)(page, 'tr.rgRow', [], trs => {
|
|
98
|
+
return trs.map(tr => Array.from(tr.querySelectorAll('td'), td => td.textContent || ''));
|
|
99
|
+
});
|
|
100
|
+
return pendingTxn.map(txn => {
|
|
101
|
+
const date = (0, _moment.default)(txn[0], 'DD/MM/YY').toISOString();
|
|
102
|
+
const amount = parseInt(txn[3], 10);
|
|
103
|
+
return {
|
|
104
|
+
type: _transactions.TransactionTypes.Normal,
|
|
105
|
+
date,
|
|
106
|
+
processedDate: date,
|
|
107
|
+
originalAmount: amount,
|
|
108
|
+
originalCurrency: _constants.SHEKEL_CURRENCY,
|
|
109
|
+
chargedAmount: amount,
|
|
110
|
+
description: txn[1],
|
|
111
|
+
status: _transactions.TransactionStatuses.Pending
|
|
112
|
+
};
|
|
113
|
+
});
|
|
112
114
|
}
|
|
113
115
|
async function postLogin(page) {
|
|
114
|
-
|
|
115
|
-
(0, elements_interactions_1.waitUntilElementFound)(page, afterLoginSelector),
|
|
116
|
-
(0, elements_interactions_1.waitUntilElementFound)(page, invalidPasswordSelector),
|
|
117
|
-
(0, navigation_1.waitForUrl)(page, CHANGE_PASSWORD_URL),
|
|
118
|
-
]);
|
|
116
|
+
await Promise.race([(0, _elementsInteractions.waitUntilElementFound)(page, afterLoginSelector), (0, _elementsInteractions.waitUntilElementFound)(page, invalidPasswordSelector), (0, _navigation.waitForUrl)(page, CHANGE_PASSWORD_URL)]);
|
|
119
117
|
}
|
|
120
|
-
class MizrahiScraper extends
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
await this.page.$eval(`${accountDropDownItemSelector}:nth-child(${i + 1})`, el => el.click());
|
|
141
|
-
results.push(await this.fetchAccount());
|
|
142
|
-
}
|
|
143
|
-
return {
|
|
144
|
-
success: true,
|
|
145
|
-
accounts: results,
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
catch (e) {
|
|
149
|
-
return {
|
|
150
|
-
success: false,
|
|
151
|
-
errorType: errors_1.ScraperErrorTypes.Generic,
|
|
152
|
-
errorMessage: e.message,
|
|
153
|
-
};
|
|
118
|
+
class MizrahiScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
|
|
119
|
+
getLoginOptions(credentials) {
|
|
120
|
+
return {
|
|
121
|
+
loginUrl: LOGIN_URL,
|
|
122
|
+
fields: createLoginFields(credentials),
|
|
123
|
+
submitButtonSelector,
|
|
124
|
+
checkReadiness: async () => (0, _elementsInteractions.waitUntilElementDisappear)(this.page, loginSpinnerSelector),
|
|
125
|
+
postAction: async () => postLogin(this.page),
|
|
126
|
+
possibleResults: getPossibleLoginResults(this.page)
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
async fetchData() {
|
|
130
|
+
await this.page.$eval('#dropdownBasic, .item', el => el.click());
|
|
131
|
+
const numOfAccounts = (await this.page.$$(accountDropDownItemSelector)).length;
|
|
132
|
+
try {
|
|
133
|
+
const results = [];
|
|
134
|
+
for (let i = 0; i < numOfAccounts; i += 1) {
|
|
135
|
+
if (i > 0) {
|
|
136
|
+
await this.page.$eval('#dropdownBasic, .item', el => el.click());
|
|
154
137
|
}
|
|
138
|
+
await this.page.$eval(`${accountDropDownItemSelector}:nth-child(${i + 1})`, el => el.click());
|
|
139
|
+
results.push(await this.fetchAccount());
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
success: true,
|
|
143
|
+
accounts: results
|
|
144
|
+
};
|
|
145
|
+
} catch (e) {
|
|
146
|
+
return {
|
|
147
|
+
success: false,
|
|
148
|
+
errorType: _errors.ScraperErrorTypes.Generic,
|
|
149
|
+
errorMessage: e.message
|
|
150
|
+
};
|
|
155
151
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
return [];
|
|
164
|
-
}
|
|
165
|
-
const pendingTxn = await extractPendingTransactions(frame);
|
|
166
|
-
return pendingTxn;
|
|
152
|
+
}
|
|
153
|
+
async getPendingTransactions() {
|
|
154
|
+
await this.page.$eval(`a[href*="${PENDING_TRANSACTIONS_PAGE}"]`, el => el.click());
|
|
155
|
+
const frame = await (0, _elementsInteractions.waitUntilIframeFound)(this.page, f => f.url().includes(PENDING_TRANSACTIONS_IFRAME));
|
|
156
|
+
const isPending = await (0, _elementsInteractions.waitUntilElementFound)(frame, pendingTrxIdentifierId).then(() => true).catch(() => false);
|
|
157
|
+
if (!isPending) {
|
|
158
|
+
return [];
|
|
167
159
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
// workaround for a bug which the bank's API returns transactions before the requested start date
|
|
191
|
-
const startMoment = getStartMoment(this.options.startDate);
|
|
192
|
-
const oshTxnAfterStartDate = oshTxn.filter(txn => (0, moment_1.default)(txn.date).isSameOrAfter(startMoment));
|
|
193
|
-
const pendingTxn = await this.getPendingTransactions();
|
|
194
|
-
const allTxn = oshTxnAfterStartDate.concat(pendingTxn);
|
|
195
|
-
return {
|
|
196
|
-
accountNumber,
|
|
197
|
-
txns: allTxn,
|
|
198
|
-
balance: +response.body.fields?.Yitra,
|
|
199
|
-
};
|
|
160
|
+
const pendingTxn = await extractPendingTransactions(frame);
|
|
161
|
+
return pendingTxn;
|
|
162
|
+
}
|
|
163
|
+
async fetchAccount() {
|
|
164
|
+
await this.page.waitForSelector(`a[href*="${OSH_PAGE}"]`);
|
|
165
|
+
await this.page.$eval(`a[href*="${OSH_PAGE}"]`, el => el.click());
|
|
166
|
+
await (0, _elementsInteractions.waitUntilElementFound)(this.page, `a[href*="${TRANSACTIONS_PAGE}"]`);
|
|
167
|
+
await this.page.$eval(`a[href*="${TRANSACTIONS_PAGE}"]`, el => el.click());
|
|
168
|
+
const accountNumberElement = await this.page.$('#dropdownBasic b span');
|
|
169
|
+
const accountNumberHandle = await accountNumberElement?.getProperty('title');
|
|
170
|
+
const accountNumber = await accountNumberHandle?.jsonValue();
|
|
171
|
+
if (!accountNumber) {
|
|
172
|
+
throw new Error('Account number not found');
|
|
173
|
+
}
|
|
174
|
+
const response = await Promise.any(TRANSACTIONS_REQUEST_URLS.map(async url => {
|
|
175
|
+
const request = await this.page.waitForRequest(url);
|
|
176
|
+
const data = createDataFromRequest(request, this.options.startDate);
|
|
177
|
+
const headers = createHeadersFromRequest(request);
|
|
178
|
+
return (0, _fetch.fetchPostWithinPage)(this.page, url, data, headers);
|
|
179
|
+
}));
|
|
180
|
+
if (!response || response.header.success === false) {
|
|
181
|
+
throw new Error(`Error fetching transaction. Response message: ${response ? response.header.messages[0].text : ''}`);
|
|
200
182
|
}
|
|
183
|
+
const relevantRows = response.body.table.rows.filter(row => row.RecTypeSpecified);
|
|
184
|
+
const oshTxn = convertTransactions(relevantRows);
|
|
185
|
+
|
|
186
|
+
// workaround for a bug which the bank's API returns transactions before the requested start date
|
|
187
|
+
const startMoment = getStartMoment(this.options.startDate);
|
|
188
|
+
const oshTxnAfterStartDate = oshTxn.filter(txn => (0, _moment.default)(txn.date).isSameOrAfter(startMoment));
|
|
189
|
+
const pendingTxn = await this.getPendingTransactions();
|
|
190
|
+
const allTxn = oshTxnAfterStartDate.concat(pendingTxn);
|
|
191
|
+
return {
|
|
192
|
+
accountNumber,
|
|
193
|
+
txns: allTxn,
|
|
194
|
+
balance: +response.body.fields?.Yitra
|
|
195
|
+
};
|
|
196
|
+
}
|
|
201
197
|
}
|
|
202
|
-
exports.default = MizrahiScraper;
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl6cmFoaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9taXpyYWhpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDRDQUErQztBQUMvQyw0RUFLMEM7QUFDMUMsNENBQXVEO0FBQ3ZELHNEQUFtRDtBQUNuRCxrREFBb0g7QUFDcEgsMkVBQThHO0FBQzlHLHFDQUE2QztBQXlCN0MsTUFBTSxnQkFBZ0IsR0FBRyxtQ0FBbUMsQ0FBQztBQUM3RCxNQUFNLFNBQVMsR0FBRyxHQUFHLGdCQUFnQixpQ0FBaUMsQ0FBQztBQUN2RSxNQUFNLFlBQVksR0FBRyxtQ0FBbUMsQ0FBQztBQUN6RCxNQUFNLG9CQUFvQixHQUFHLHVEQUF1RCxDQUFDO0FBQ3JGLE1BQU0sUUFBUSxHQUFHLDZCQUE2QixDQUFDO0FBQy9DLE1BQU0saUJBQWlCLEdBQUcsbUNBQW1DLENBQUM7QUFDOUQsTUFBTSx5QkFBeUIsR0FBRztJQUNoQyxHQUFHLFlBQVkscUNBQXFDO0lBQ3BELEdBQUcsWUFBWSxnQ0FBZ0M7Q0FDaEQsQ0FBQztBQUNGLE1BQU0seUJBQXlCLEdBQUcsNkJBQTZCLENBQUM7QUFDaEUsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUM7QUFDaEQsTUFBTSxtQkFBbUIsR0FBRywwRUFBMEUsQ0FBQztBQUN2RyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUM7QUFDakMsTUFBTSxvQkFBb0IsR0FBRyxXQUFXLENBQUM7QUFFekMsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztBQUM1QyxNQUFNLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDO0FBQ2pELE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLENBQUM7QUFDcEQsTUFBTSx1QkFBdUIsR0FBRyxxRUFBcUUsQ0FBQztBQUN0RyxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDO0FBQzVDLE1BQU0sb0JBQW9CLEdBQUcsb0NBQW9DLENBQUM7QUFD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LENBQUM7U0FDSDtRQUVELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRixNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVqRCxpR0FBaUc7UUFDakcsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBQSxnQkFBTSxFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUUvRixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV2RCxPQUFPO1lBQ0wsYUFBYTtZQUNiLElBQUksRUFBRSxNQUFNO1lBQ1osT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSztTQUN0QyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsa0JBQWUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgdHlwZSBGcmFtZSwgdHlwZSBIVFRQUmVxdWVzdCwgdHlwZSBQYWdlIH0gZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7IFNIRUtFTF9DVVJSRU5DWSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBwYWdlRXZhbEFsbCxcbiAgd2FpdFVudGlsRWxlbWVudERpc2FwcGVhcixcbiAgd2FpdFVudGlsRWxlbWVudEZvdW5kLFxuICB3YWl0VW50aWxJZnJhbWVGb3VuZCxcbn0gZnJvbSAnLi4vaGVscGVycy9lbGVtZW50cy1pbnRlcmFjdGlvbnMnO1xuaW1wb3J0IHsgZmV0Y2hQb3N0V2l0aGluUGFnZSB9IGZyb20gJy4uL2hlbHBlcnMvZmV0Y2gnO1xuaW1wb3J0IHsgd2FpdEZvclVybCB9IGZyb20gJy4uL2hlbHBlcnMvbmF2aWdhdGlvbic7XG5pbXBvcnQgeyB0eXBlIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblN0YXR1c2VzLCBUcmFuc2FjdGlvblR5cGVzLCB0eXBlIFRyYW5zYWN0aW9uc0FjY291bnQgfSBmcm9tICcuLi90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgQmFzZVNjcmFwZXJXaXRoQnJvd3NlciwgTG9naW5SZXN1bHRzLCB0eXBlIFBvc3NpYmxlTG9naW5SZXN1bHRzIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcbmltcG9ydCB7IFNjcmFwZXJFcnJvclR5cGVzIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uIHtcbiAgUmVjVHlwZVNwZWNpZmllZDogYm9vbGVhbjtcbiAgTUMwMlBldWxhVGFhRVo6IHN0cmluZztcbiAgTUMwMlNjaHVtRVo6IG51bWJlcjtcbiAgTUMwMkFzbWFodGFNZWtvcml0RVo6IHN0cmluZztcbiAgTUMwMlRudWFUZXVyRVo6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNjcmFwZWRUcmFuc2FjdGlvbnNSZXN1bHQge1xuICBoZWFkZXI6IHtcbiAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgIG1lc3NhZ2VzOiB7IHRleHQ6IHN0cmluZyB9W107XG4gIH07XG4gIGJvZHk6IHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIFlpdHJhOiBzdHJpbmc7XG4gICAgfTtcbiAgICB0YWJsZToge1xuICAgICAgcm93czogU2NyYXBlZFRyYW5zYWN0aW9uW107XG4gICAgfTtcbiAgfTtcbn1cblxuY29uc3QgQkFTRV9XRUJTSVRFX1VSTCA9ICdodHRwczovL3d3dy5taXpyYWhpLXRlZmFob3QuY28uaWwnO1xuY29uc3QgTE9HSU5fVVJMID0gYCR7QkFTRV9XRUJTSVRFX1VSTH0vbG9naW4vaW5kZXguaHRtbCMvYXV0aC1wYWdlLWhlYDtcbmNvbnN0IEJBU0VfQVBQX1VSTCA9ICdodHRwczovL210by5taXpyYWhpLXRlZmFob3QuY28uaWwnO1xuY29uc3QgQUZURVJfTE9HSU5fQkFTRV9VUkwgPSAvaHR0cHM6XFwvXFwvbXRvXFwubWl6cmFoaS10ZWZhaG90XFwuY29cXC5pbFxcL09ubGluZUFwcFxcLy4qLztcbmNvbnN0IE9TSF9QQUdFID0gJy9vc2gvbGVnYWN5L2xlZ2FjeS1Pc2gtTWFpbic7XG5jb25zdCBUUkFOU0FDVElPTlNfUEFHRSA9ICcvb3NoL2xlZ2FjeS9yb290LW1haW4tb3NoLXA0MjhOZXcnO1xuY29uc3QgVFJBTlNBQ1RJT05TX1JFUVVFU1RfVVJMUyA9IFtcbiAgYCR7QkFTRV9BUFBfVVJMfS9PbmxpbmVQaWxvdC9hcGkvU2t5T1NIL2dldDQyOEluZGV4YCxcbiAgYCR7QkFTRV9BUFBfVVJMfS9PbmxpbmUvYXBpL1NreU9TSC9nZXQ0MjhJbmRleGAsXG5dO1xuY29uc3QgUEVORElOR19UUkFOU0FDVElPTlNfUEFHRSA9ICcvb3NoL2xlZ2FjeS9sZWdhY3ktT3NoLXA0MjAnO1xuY29uc3QgUEVORElOR19UUkFOU0FDVElPTlNfSUZSQU1FID0gJ3A0MjAuYXNweCc7XG5jb25zdCBDSEFOR0VfUEFTU1dPUkRfVVJMID0gL2h0dHBzOlxcL1xcL3d3d1xcLm1penJhaGktdGVmYWhvdFxcLmNvXFwuaWxcXC9sb2dpblxcL2luZGV4XFwuaHRtbCNcXC9jaGFuZ2UtcGFzcy87XG5jb25zdCBEQVRFX0ZPUk1BVCA9ICdERC9NTS9ZWVlZJztcbmNvbnN0IE1BWF9ST1dTX1BFUl9SRVFVRVNUID0gMTAwMDAwMDAwMDA7XG5cbmNvbnN0IHVzZXJuYW1lU2VsZWN0b3IgPSAnI2VtYWlsRGVza3RvcEhlYic7XG5jb25zdCBwYXNzd29yZFNlbGVjdG9yID0gJyNwYXNzd29yZElERGVza3RvcEhFQic7XG5jb25zdCBzdWJtaXRCdXR0b25TZWxlY3RvciA9ICcuZm9ybS1kZXNrdG9wIGJ1dHRvbic7XG5jb25zdCBpbnZhbGlkUGFzc3dvcmRTZWxlY3RvciA9ICdhW2hyZWYqPVwiaHR0cHM6Ly9zYy5taXpyYWhpLXRlZmFob3QuY28uaWwvU0NTZXJ2aWNlcy9TQy9QMDEwLmFzcHhcIl0nO1xuY29uc3QgYWZ0ZXJMb2dpblNlbGVjdG9yID0gJyNkcm9wZG93bkJhc2ljJztcbmNvbnN0IGxvZ2luU3Bpbm5lclNlbGVjdG9yID0gJ2Rpdi5uZ3gtb3ZlcmxheS5sb2FkaW5nLWZvcmVncm91bmQnO1xuY29uc3QgYWNjb3VudERyb3BEb3duSXRlbVNlbGVjdG9yID0gJyNBY2NvdW50UGlja2VyIC5pdGVtJztcbmNvbnN0IHBlbmRpbmdUcnhJZGVudGlmaWVySWQgPSAnI2N0bDAwX0NvbnRlbnRQbGFjZUhvbGRlcjJfcGFuZWwxJztcbmNvbnN0IGNoZWNraW5nQWNjb3VudFRhYkhlYnJld05hbWUgPSAn16LXldeR16gg15XXqdeRJztcbmNvbnN0IGNoZWNraW5nQWNjb3VudFRhYkVuZ2xpc2hOYW1lID0gJ0NoZWNraW5nIEFjY291bnQnO1xuXG5mdW5jdGlvbiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpIHtcbiAgcmV0dXJuIFtcbiAgICB7IHNlbGVjdG9yOiB1c2VybmFtZVNlbGVjdG9yLCB2YWx1ZTogY3JlZGVudGlhbHMudXNlcm5hbWUgfSxcbiAgICB7IHNlbGVjdG9yOiBwYXNzd29yZFNlbGVjdG9yLCB2YWx1ZTogY3JlZGVudGlhbHMucGFzc3dvcmQgfSxcbiAgXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNMb2dnZWRJbihvcHRpb25zOiB7IHBhZ2U/OiBQYWdlIHwgdW5kZWZpbmVkIH0gfCB1bmRlZmluZWQpIHtcbiAgaWYgKCFvcHRpb25zPy5wYWdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IG9zaFhQYXRoID0gYC8vYS8vc3Bhbltjb250YWlucyguLCBcIiR7Y2hlY2tpbmdBY2NvdW50VGFiSGVicmV3TmFtZX1cIikgb3IgY29udGFpbnMoLiwgXCIke2NoZWNraW5nQWNjb3VudFRhYkVuZ2xpc2hOYW1lfVwiKV1gO1xuICBjb25zdCBvc2hUYWIgPSBhd2FpdCBvcHRpb25zLnBhZ2UuJCQoYHhwYXRoJHtvc2hYUGF0aH1gKTtcbiAgcmV0dXJuIG9zaFRhYi5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyhwYWdlOiBQYWdlKTogUG9zc2libGVMb2dpblJlc3VsdHMge1xuICByZXR1cm4ge1xuICAgIFtMb2dpblJlc3VsdHMuU3VjY2Vzc106IFtBRlRFUl9MT0dJTl9CQVNFX1VSTCwgaXNMb2dnZWRJbl0sXG4gICAgW0xvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmRdOiBbYXN5bmMgKCkgPT4gISEoYXdhaXQgcGFnZS4kKGludmFsaWRQYXNzd29yZFNlbGVjdG9yKSldLFxuICAgIFtMb2dpblJlc3VsdHMuQ2hhbmdlUGFzc3dvcmRdOiBbQ0hBTkdFX1BBU1NXT1JEX1VSTF0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFN0YXJ0TW9tZW50KG9wdGlvbnNTdGFydERhdGU6IERhdGUpIHtcbiAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJyk7XG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IG9wdGlvbnNTdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICByZXR1cm4gbW9tZW50Lm1heChkZWZhdWx0U3RhcnRNb21lbnQsIG1vbWVudChzdGFydERhdGUpKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGF0YUZyb21SZXF1ZXN0KHJlcXVlc3Q6IEhUVFBSZXF1ZXN0LCBvcHRpb25zU3RhcnREYXRlOiBEYXRlKSB7XG4gIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHJlcXVlc3QucG9zdERhdGEoKSB8fCAne30nKTtcblxuICBkYXRhLmluRnJvbURhdGUgPSBnZXRTdGFydE1vbWVudChvcHRpb25zU3RhcnREYXRlKS5mb3JtYXQoREFURV9GT1JNQVQpO1xuICBkYXRhLmluVG9EYXRlID0gbW9tZW50KCkuZm9ybWF0KERBVEVfRk9STUFUKTtcbiAgZGF0YS50YWJsZS5tYXhSb3cgPSBNQVhfUk9XU19QRVJfUkVRVUVTVDtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGVhZGVyc0Zyb21SZXF1ZXN0KHJlcXVlc3Q6IEhUVFBSZXF1ZXN0KSB7XG4gIHJldHVybiB7XG4gICAgbWl6cmFoaXhzcmZ0b2tlbjogcmVxdWVzdC5oZWFkZXJzKCkubWl6cmFoaXhzcmZ0b2tlbixcbiAgICAnQ29udGVudC1UeXBlJzogcmVxdWVzdC5oZWFkZXJzKClbJ2NvbnRlbnQtdHlwZSddLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VHJhbnNhY3Rpb25zKHR4bnM6IFNjcmFwZWRUcmFuc2FjdGlvbltdKTogVHJhbnNhY3Rpb25bXSB7XG4gIHJldHVybiB0eG5zLm1hcChyb3cgPT4ge1xuICAgIGNvbnN0IHR4bkRhdGUgPSBtb21lbnQocm93Lk1DMDJQZXVsYVRhYUVaLCBtb21lbnQuSFRNTDVfRk1ULkRBVEVUSU1FX0xPQ0FMX1NFQ09ORFMpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWwsXG4gICAgICBpZGVudGlmaWVyOiByb3cuTUMwMkFzbWFodGFNZWtvcml0RVogPyBwYXJzZUludChyb3cuTUMwMkFzbWFodGFNZWtvcml0RVosIDEwKSA6IHVuZGVmaW5lZCxcbiAgICAgIGRhdGU6IHR4bkRhdGUsXG4gICAgICBwcm9jZXNzZWREYXRlOiB0eG5EYXRlLFxuICAgICAgb3JpZ2luYWxBbW91bnQ6IHJvdy5NQzAyU2NodW1FWixcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IFNIRUtFTF9DVVJSRU5DWSxcbiAgICAgIGNoYXJnZWRBbW91bnQ6IHJvdy5NQzAyU2NodW1FWixcbiAgICAgIGRlc2NyaXB0aW9uOiByb3cuTUMwMlRudWFUZXVyRVosXG4gICAgICBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzZXMuQ29tcGxldGVkLFxuICAgIH07XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0UGVuZGluZ1RyYW5zYWN0aW9ucyhwYWdlOiBGcmFtZSk6IFByb21pc2U8VHJhbnNhY3Rpb25bXT4ge1xuICBjb25zdCBwZW5kaW5nVHhuID0gYXdhaXQgcGFnZUV2YWxBbGwocGFnZSwgJ3RyLnJnUm93JywgW10sIHRycyA9PiB7XG4gICAgcmV0dXJuIHRycy5tYXAodHIgPT4gQXJyYXkuZnJvbSh0ci5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpLCAodGQ6IEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudCkgPT4gdGQudGV4dENvbnRlbnQgfHwgJycpKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHBlbmRpbmdUeG4ubWFwKHR4biA9PiB7XG4gICAgY29uc3QgZGF0ZSA9IG1vbWVudCh0eG5bMF0sICdERC9NTS9ZWScpLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgYW1vdW50ID0gcGFyc2VJbnQodHhuWzNdLCAxMCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZXMuTm9ybWFsLFxuICAgICAgZGF0ZSxcbiAgICAgIHByb2Nlc3NlZERhdGU6IGRhdGUsXG4gICAgICBvcmlnaW5hbEFtb3VudDogYW1vdW50LFxuICAgICAgb3JpZ2luYWxDdXJyZW5jeTogU0hFS0VMX0NVUlJFTkNZLFxuICAgICAgY2hhcmdlZEFtb3VudDogYW1vdW50LFxuICAgICAgZGVzY3JpcHRpb246IHR4blsxXSxcbiAgICAgIHN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXNlcy5QZW5kaW5nLFxuICAgIH07XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwb3N0TG9naW4ocGFnZTogUGFnZSkge1xuICBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCBhZnRlckxvZ2luU2VsZWN0b3IpLFxuICAgIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCBpbnZhbGlkUGFzc3dvcmRTZWxlY3RvciksXG4gICAgd2FpdEZvclVybChwYWdlLCBDSEFOR0VfUEFTU1dPUkRfVVJMKSxcbiAgXSk7XG59XG5cbnR5cGUgU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMgPSB7IHVzZXJuYW1lOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfTtcblxuY2xhc3MgTWl6cmFoaVNjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlcldpdGhCcm93c2VyPFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzPiB7XG4gIGdldExvZ2luT3B0aW9ucyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9naW5Vcmw6IExPR0lOX1VSTCxcbiAgICAgIGZpZWxkczogY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHMpLFxuICAgICAgc3VibWl0QnV0dG9uU2VsZWN0b3IsXG4gICAgICBjaGVja1JlYWRpbmVzczogYXN5bmMgKCkgPT4gd2FpdFVudGlsRWxlbWVudERpc2FwcGVhcih0aGlzLnBhZ2UsIGxvZ2luU3Bpbm5lclNlbGVjdG9yKSxcbiAgICAgIHBvc3RBY3Rpb246IGFzeW5jICgpID0+IHBvc3RMb2dpbih0aGlzLnBhZ2UpLFxuICAgICAgcG9zc2libGVSZXN1bHRzOiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyh0aGlzLnBhZ2UpLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEoKSB7XG4gICAgYXdhaXQgdGhpcy5wYWdlLiRldmFsKCcjZHJvcGRvd25CYXNpYywgLml0ZW0nLCBlbCA9PiAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsaWNrKCkpO1xuXG4gICAgY29uc3QgbnVtT2ZBY2NvdW50cyA9IChhd2FpdCB0aGlzLnBhZ2UuJCQoYWNjb3VudERyb3BEb3duSXRlbVNlbGVjdG9yKSkubGVuZ3RoO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdHM6IFRyYW5zYWN0aW9uc0FjY291bnRbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU9mQWNjb3VudHM7IGkgKz0gMSkge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnBhZ2UuJGV2YWwoJyNkcm9wZG93bkJhc2ljLCAuaXRlbScsIGVsID0+IChlbCBhcyBIVE1MRWxlbWVudCkuY2xpY2soKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLnBhZ2UuJGV2YWwoYCR7YWNjb3VudERyb3BEb3duSXRlbVNlbGVjdG9yfTpudGgtY2hpbGQoJHtpICsgMX0pYCwgZWwgPT4gKGVsIGFzIEhUTUxFbGVtZW50KS5jbGljaygpKTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKGF3YWl0IHRoaXMuZmV0Y2hBY2NvdW50KCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBhY2NvdW50czogcmVzdWx0cyxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuR2VuZXJpYyxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiAoZSBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRQZW5kaW5nVHJhbnNhY3Rpb25zKCk6IFByb21pc2U8VHJhbnNhY3Rpb25bXT4ge1xuICAgIGF3YWl0IHRoaXMucGFnZS4kZXZhbChgYVtocmVmKj1cIiR7UEVORElOR19UUkFOU0FDVElPTlNfUEFHRX1cIl1gLCBlbCA9PiAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsaWNrKCkpO1xuICAgIGNvbnN0IGZyYW1lID0gYXdhaXQgd2FpdFVudGlsSWZyYW1lRm91bmQodGhpcy5wYWdlLCBmID0+IGYudXJsKCkuaW5jbHVkZXMoUEVORElOR19UUkFOU0FDVElPTlNfSUZSQU1FKSk7XG4gICAgY29uc3QgaXNQZW5kaW5nID0gYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKGZyYW1lLCBwZW5kaW5nVHJ4SWRlbnRpZmllcklkKVxuICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgIC5jYXRjaCgoKSA9PiBmYWxzZSk7XG4gICAgaWYgKCFpc1BlbmRpbmcpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBwZW5kaW5nVHhuID0gYXdhaXQgZXh0cmFjdFBlbmRpbmdUcmFuc2FjdGlvbnMoZnJhbWUpO1xuICAgIHJldHVybiBwZW5kaW5nVHhuO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaEFjY291bnQoKSB7XG4gICAgYXdhaXQgdGhpcy5wYWdlLndhaXRGb3JTZWxlY3RvcihgYVtocmVmKj1cIiR7T1NIX1BBR0V9XCJdYCk7XG4gICAgYXdhaXQgdGhpcy5wYWdlLiRldmFsKGBhW2hyZWYqPVwiJHtPU0hfUEFHRX1cIl1gLCBlbCA9PiAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsaWNrKCkpO1xuICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZCh0aGlzLnBhZ2UsIGBhW2hyZWYqPVwiJHtUUkFOU0FDVElPTlNfUEFHRX1cIl1gKTtcbiAgICBhd2FpdCB0aGlzLnBhZ2UuJGV2YWwoYGFbaHJlZio9XCIke1RSQU5TQUNUSU9OU19QQUdFfVwiXWAsIGVsID0+IChlbCBhcyBIVE1MRWxlbWVudCkuY2xpY2soKSk7XG5cbiAgICBjb25zdCBhY2NvdW50TnVtYmVyRWxlbWVudCA9IGF3YWl0IHRoaXMucGFnZS4kKCcjZHJvcGRvd25CYXNpYyBiIHNwYW4nKTtcbiAgICBjb25zdCBhY2NvdW50TnVtYmVySGFuZGxlID0gYXdhaXQgYWNjb3VudE51bWJlckVsZW1lbnQ/LmdldFByb3BlcnR5KCd0aXRsZScpO1xuICAgIGNvbnN0IGFjY291bnROdW1iZXIgPSAoYXdhaXQgYWNjb3VudE51bWJlckhhbmRsZT8uanNvblZhbHVlKCkpIGFzIHN0cmluZztcbiAgICBpZiAoIWFjY291bnROdW1iZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWNjb3VudCBudW1iZXIgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLmFueShcbiAgICAgIFRSQU5TQUNUSU9OU19SRVFVRVNUX1VSTFMubWFwKGFzeW5jIHVybCA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCB0aGlzLnBhZ2Uud2FpdEZvclJlcXVlc3QodXJsKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGNyZWF0ZURhdGFGcm9tUmVxdWVzdChyZXF1ZXN0LCB0aGlzLm9wdGlvbnMuc3RhcnREYXRlKTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IGNyZWF0ZUhlYWRlcnNGcm9tUmVxdWVzdChyZXF1ZXN0KTtcblxuICAgICAgICByZXR1cm4gZmV0Y2hQb3N0V2l0aGluUGFnZTxTY3JhcGVkVHJhbnNhY3Rpb25zUmVzdWx0Pih0aGlzLnBhZ2UsIHVybCwgZGF0YSwgaGVhZGVycyk7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5oZWFkZXIuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEVycm9yIGZldGNoaW5nIHRyYW5zYWN0aW9uLiBSZXNwb25zZSBtZXNzYWdlOiAke3Jlc3BvbnNlID8gcmVzcG9uc2UuaGVhZGVyLm1lc3NhZ2VzWzBdLnRleHQgOiAnJ31gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWxldmFudFJvd3MgPSByZXNwb25zZS5ib2R5LnRhYmxlLnJvd3MuZmlsdGVyKHJvdyA9PiByb3cuUmVjVHlwZVNwZWNpZmllZCk7XG4gICAgY29uc3Qgb3NoVHhuID0gY29udmVydFRyYW5zYWN0aW9ucyhyZWxldmFudFJvd3MpO1xuXG4gICAgLy8gd29ya2Fyb3VuZCBmb3IgYSBidWcgd2hpY2ggdGhlIGJhbmsncyBBUEkgcmV0dXJucyB0cmFuc2FjdGlvbnMgYmVmb3JlIHRoZSByZXF1ZXN0ZWQgc3RhcnQgZGF0ZVxuICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gZ2V0U3RhcnRNb21lbnQodGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSk7XG4gICAgY29uc3Qgb3NoVHhuQWZ0ZXJTdGFydERhdGUgPSBvc2hUeG4uZmlsdGVyKHR4biA9PiBtb21lbnQodHhuLmRhdGUpLmlzU2FtZU9yQWZ0ZXIoc3RhcnRNb21lbnQpKTtcblxuICAgIGNvbnN0IHBlbmRpbmdUeG4gPSBhd2FpdCB0aGlzLmdldFBlbmRpbmdUcmFuc2FjdGlvbnMoKTtcbiAgICBjb25zdCBhbGxUeG4gPSBvc2hUeG5BZnRlclN0YXJ0RGF0ZS5jb25jYXQocGVuZGluZ1R4bik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudE51bWJlcixcbiAgICAgIHR4bnM6IGFsbFR4bixcbiAgICAgIGJhbGFuY2U6ICtyZXNwb25zZS5ib2R5LmZpZWxkcz8uWWl0cmEsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNaXpyYWhpU2NyYXBlcjtcbiJdfQ==
|
|
198
|
+
var _default = exports.default = MizrahiScraper;
|
|
199
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2VsZW1lbnRzSW50ZXJhY3Rpb25zIiwiX2ZldGNoIiwiX25hdmlnYXRpb24iLCJfdHJhbnNhY3Rpb25zIiwiX2Jhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJfZXJyb3JzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiQkFTRV9XRUJTSVRFX1VSTCIsIkxPR0lOX1VSTCIsIkJBU0VfQVBQX1VSTCIsIkFGVEVSX0xPR0lOX0JBU0VfVVJMIiwiT1NIX1BBR0UiLCJUUkFOU0FDVElPTlNfUEFHRSIsIlRSQU5TQUNUSU9OU19SRVFVRVNUX1VSTFMiLCJQRU5ESU5HX1RSQU5TQUNUSU9OU19QQUdFIiwiUEVORElOR19UUkFOU0FDVElPTlNfSUZSQU1FIiwiQ0hBTkdFX1BBU1NXT1JEX1VSTCIsIkRBVEVfRk9STUFUIiwiTUFYX1JPV1NfUEVSX1JFUVVFU1QiLCJ1c2VybmFtZVNlbGVjdG9yIiwicGFzc3dvcmRTZWxlY3RvciIsInN1Ym1pdEJ1dHRvblNlbGVjdG9yIiwiaW52YWxpZFBhc3N3b3JkU2VsZWN0b3IiLCJhZnRlckxvZ2luU2VsZWN0b3IiLCJsb2dpblNwaW5uZXJTZWxlY3RvciIsImFjY291bnREcm9wRG93bkl0ZW1TZWxlY3RvciIsInBlbmRpbmdUcnhJZGVudGlmaWVySWQiLCJjaGVja2luZ0FjY291bnRUYWJIZWJyZXdOYW1lIiwiY2hlY2tpbmdBY2NvdW50VGFiRW5nbGlzaE5hbWUiLCJjcmVhdGVMb2dpbkZpZWxkcyIsImNyZWRlbnRpYWxzIiwic2VsZWN0b3IiLCJ2YWx1ZSIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJpc0xvZ2dlZEluIiwib3B0aW9ucyIsInBhZ2UiLCJvc2hYUGF0aCIsIm9zaFRhYiIsIiQkIiwibGVuZ3RoIiwiZ2V0UG9zc2libGVMb2dpblJlc3VsdHMiLCJMb2dpblJlc3VsdHMiLCJTdWNjZXNzIiwiSW52YWxpZFBhc3N3b3JkIiwiJCIsIkNoYW5nZVBhc3N3b3JkIiwiZ2V0U3RhcnRNb21lbnQiLCJvcHRpb25zU3RhcnREYXRlIiwiZGVmYXVsdFN0YXJ0TW9tZW50IiwibW9tZW50Iiwic3VidHJhY3QiLCJzdGFydERhdGUiLCJ0b0RhdGUiLCJtYXgiLCJjcmVhdGVEYXRhRnJvbVJlcXVlc3QiLCJyZXF1ZXN0IiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBvc3REYXRhIiwiaW5Gcm9tRGF0ZSIsImZvcm1hdCIsImluVG9EYXRlIiwidGFibGUiLCJtYXhSb3ciLCJjcmVhdGVIZWFkZXJzRnJvbVJlcXVlc3QiLCJtaXpyYWhpeHNyZnRva2VuIiwiaGVhZGVycyIsImNvbnZlcnRUcmFuc2FjdGlvbnMiLCJ0eG5zIiwibWFwIiwicm93IiwidHhuRGF0ZSIsIk1DMDJQZXVsYVRhYUVaIiwiSFRNTDVfRk1UIiwiREFURVRJTUVfTE9DQUxfU0VDT05EUyIsInRvSVNPU3RyaW5nIiwidHlwZSIsIlRyYW5zYWN0aW9uVHlwZXMiLCJOb3JtYWwiLCJpZGVudGlmaWVyIiwiTUMwMkFzbWFodGFNZWtvcml0RVoiLCJwYXJzZUludCIsInVuZGVmaW5lZCIsImRhdGUiLCJwcm9jZXNzZWREYXRlIiwib3JpZ2luYWxBbW91bnQiLCJNQzAyU2NodW1FWiIsIm9yaWdpbmFsQ3VycmVuY3kiLCJTSEVLRUxfQ1VSUkVOQ1kiLCJjaGFyZ2VkQW1vdW50IiwiZGVzY3JpcHRpb24iLCJNQzAyVG51YVRldXJFWiIsInN0YXR1cyIsIlRyYW5zYWN0aW9uU3RhdHVzZXMiLCJDb21wbGV0ZWQiLCJleHRyYWN0UGVuZGluZ1RyYW5zYWN0aW9ucyIsInBlbmRpbmdUeG4iLCJwYWdlRXZhbEFsbCIsInRycyIsInRyIiwiQXJyYXkiLCJmcm9tIiwicXVlcnlTZWxlY3RvckFsbCIsInRkIiwidGV4dENvbnRlbnQiLCJ0eG4iLCJhbW91bnQiLCJQZW5kaW5nIiwicG9zdExvZ2luIiwiUHJvbWlzZSIsInJhY2UiLCJ3YWl0VW50aWxFbGVtZW50Rm91bmQiLCJ3YWl0Rm9yVXJsIiwiTWl6cmFoaVNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZ2V0TG9naW5PcHRpb25zIiwibG9naW5VcmwiLCJmaWVsZHMiLCJjaGVja1JlYWRpbmVzcyIsIndhaXRVbnRpbEVsZW1lbnREaXNhcHBlYXIiLCJwb3N0QWN0aW9uIiwicG9zc2libGVSZXN1bHRzIiwiZmV0Y2hEYXRhIiwiJGV2YWwiLCJlbCIsImNsaWNrIiwibnVtT2ZBY2NvdW50cyIsInJlc3VsdHMiLCJpIiwicHVzaCIsImZldGNoQWNjb3VudCIsInN1Y2Nlc3MiLCJhY2NvdW50cyIsImVycm9yVHlwZSIsIlNjcmFwZXJFcnJvclR5cGVzIiwiR2VuZXJpYyIsImVycm9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJnZXRQZW5kaW5nVHJhbnNhY3Rpb25zIiwiZnJhbWUiLCJ3YWl0VW50aWxJZnJhbWVGb3VuZCIsImYiLCJ1cmwiLCJpbmNsdWRlcyIsImlzUGVuZGluZyIsInRoZW4iLCJjYXRjaCIsIndhaXRGb3JTZWxlY3RvciIsImFjY291bnROdW1iZXJFbGVtZW50IiwiYWNjb3VudE51bWJlckhhbmRsZSIsImdldFByb3BlcnR5IiwiYWNjb3VudE51bWJlciIsImpzb25WYWx1ZSIsIkVycm9yIiwicmVzcG9uc2UiLCJhbnkiLCJ3YWl0Rm9yUmVxdWVzdCIsImZldGNoUG9zdFdpdGhpblBhZ2UiLCJoZWFkZXIiLCJtZXNzYWdlcyIsInRleHQiLCJyZWxldmFudFJvd3MiLCJib2R5Iiwicm93cyIsImZpbHRlciIsIlJlY1R5cGVTcGVjaWZpZWQiLCJvc2hUeG4iLCJzdGFydE1vbWVudCIsIm9zaFR4bkFmdGVyU3RhcnREYXRlIiwiaXNTYW1lT3JBZnRlciIsImFsbFR4biIsImNvbmNhdCIsImJhbGFuY2UiLCJZaXRyYSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9taXpyYWhpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IHR5cGUgRnJhbWUsIHR5cGUgSFRUUFJlcXVlc3QsIHR5cGUgUGFnZSB9IGZyb20gJ3B1cHBldGVlcic7XG5pbXBvcnQgeyBTSEVLRUxfQ1VSUkVOQ1kgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcGFnZUV2YWxBbGwsXG4gIHdhaXRVbnRpbEVsZW1lbnREaXNhcHBlYXIsXG4gIHdhaXRVbnRpbEVsZW1lbnRGb3VuZCxcbiAgd2FpdFVudGlsSWZyYW1lRm91bmQsXG59IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IGZldGNoUG9zdFdpdGhpblBhZ2UgfSBmcm9tICcuLi9oZWxwZXJzL2ZldGNoJztcbmltcG9ydCB7IHdhaXRGb3JVcmwgfSBmcm9tICcuLi9oZWxwZXJzL25hdmlnYXRpb24nO1xuaW1wb3J0IHsgdHlwZSBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25TdGF0dXNlcywgVHJhbnNhY3Rpb25UeXBlcywgdHlwZSBUcmFuc2FjdGlvbnNBY2NvdW50IH0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIsIExvZ2luUmVzdWx0cywgdHlwZSBQb3NzaWJsZUxvZ2luUmVzdWx0cyB9IGZyb20gJy4vYmFzZS1zY3JhcGVyLXdpdGgtYnJvd3Nlcic7XG5pbXBvcnQgeyBTY3JhcGVyRXJyb3JUeXBlcyB9IGZyb20gJy4vZXJyb3JzJztcblxuaW50ZXJmYWNlIFNjcmFwZWRUcmFuc2FjdGlvbiB7XG4gIFJlY1R5cGVTcGVjaWZpZWQ6IGJvb2xlYW47XG4gIE1DMDJQZXVsYVRhYUVaOiBzdHJpbmc7XG4gIE1DMDJTY2h1bUVaOiBudW1iZXI7XG4gIE1DMDJBc21haHRhTWVrb3JpdEVaOiBzdHJpbmc7XG4gIE1DMDJUbnVhVGV1ckVaOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb25zUmVzdWx0IHtcbiAgaGVhZGVyOiB7XG4gICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICBtZXNzYWdlczogeyB0ZXh0OiBzdHJpbmcgfVtdO1xuICB9O1xuICBib2R5OiB7XG4gICAgZmllbGRzOiB7XG4gICAgICBZaXRyYTogc3RyaW5nO1xuICAgIH07XG4gICAgdGFibGU6IHtcbiAgICAgIHJvd3M6IFNjcmFwZWRUcmFuc2FjdGlvbltdO1xuICAgIH07XG4gIH07XG59XG5cbmNvbnN0IEJBU0VfV0VCU0lURV9VUkwgPSAnaHR0cHM6Ly93d3cubWl6cmFoaS10ZWZhaG90LmNvLmlsJztcbmNvbnN0IExPR0lOX1VSTCA9IGAke0JBU0VfV0VCU0lURV9VUkx9L2xvZ2luL2luZGV4Lmh0bWwjL2F1dGgtcGFnZS1oZWA7XG5jb25zdCBCQVNFX0FQUF9VUkwgPSAnaHR0cHM6Ly9tdG8ubWl6cmFoaS10ZWZhaG90LmNvLmlsJztcbmNvbnN0IEFGVEVSX0xPR0lOX0JBU0VfVVJMID0gL2h0dHBzOlxcL1xcL210b1xcLm1penJhaGktdGVmYWhvdFxcLmNvXFwuaWxcXC9PbmxpbmVBcHBcXC8uKi87XG5jb25zdCBPU0hfUEFHRSA9ICcvb3NoL2xlZ2FjeS9sZWdhY3ktT3NoLU1haW4nO1xuY29uc3QgVFJBTlNBQ1RJT05TX1BBR0UgPSAnL29zaC9sZWdhY3kvcm9vdC1tYWluLW9zaC1wNDI4TmV3JztcbmNvbnN0IFRSQU5TQUNUSU9OU19SRVFVRVNUX1VSTFMgPSBbXG4gIGAke0JBU0VfQVBQX1VSTH0vT25saW5lUGlsb3QvYXBpL1NreU9TSC9nZXQ0MjhJbmRleGAsXG4gIGAke0JBU0VfQVBQX1VSTH0vT25saW5lL2FwaS9Ta3lPU0gvZ2V0NDI4SW5kZXhgLFxuXTtcbmNvbnN0IFBFTkRJTkdfVFJBTlNBQ1RJT05TX1BBR0UgPSAnL29zaC9sZWdhY3kvbGVnYWN5LU9zaC1wNDIwJztcbmNvbnN0IFBFTkRJTkdfVFJBTlNBQ1RJT05TX0lGUkFNRSA9ICdwNDIwLmFzcHgnO1xuY29uc3QgQ0hBTkdFX1BBU1NXT1JEX1VSTCA9IC9odHRwczpcXC9cXC93d3dcXC5taXpyYWhpLXRlZmFob3RcXC5jb1xcLmlsXFwvbG9naW5cXC9pbmRleFxcLmh0bWwjXFwvY2hhbmdlLXBhc3MvO1xuY29uc3QgREFURV9GT1JNQVQgPSAnREQvTU0vWVlZWSc7XG5jb25zdCBNQVhfUk9XU19QRVJfUkVRVUVTVCA9IDEwMDAwMDAwMDAwO1xuXG5jb25zdCB1c2VybmFtZVNlbGVjdG9yID0gJyNlbWFpbERlc2t0b3BIZWInO1xuY29uc3QgcGFzc3dvcmRTZWxlY3RvciA9ICcjcGFzc3dvcmRJRERlc2t0b3BIRUInO1xuY29uc3Qgc3VibWl0QnV0dG9uU2VsZWN0b3IgPSAnLmZvcm0tZGVza3RvcCBidXR0b24nO1xuY29uc3QgaW52YWxpZFBhc3N3b3JkU2VsZWN0b3IgPSAnYVtocmVmKj1cImh0dHBzOi8vc2MubWl6cmFoaS10ZWZhaG90LmNvLmlsL1NDU2VydmljZXMvU0MvUDAxMC5hc3B4XCJdJztcbmNvbnN0IGFmdGVyTG9naW5TZWxlY3RvciA9ICcjZHJvcGRvd25CYXNpYyc7XG5jb25zdCBsb2dpblNwaW5uZXJTZWxlY3RvciA9ICdkaXYubmd4LW92ZXJsYXkubG9hZGluZy1mb3JlZ3JvdW5kJztcbmNvbnN0IGFjY291bnREcm9wRG93bkl0ZW1TZWxlY3RvciA9ICcjQWNjb3VudFBpY2tlciAuaXRlbSc7XG5jb25zdCBwZW5kaW5nVHJ4SWRlbnRpZmllcklkID0gJyNjdGwwMF9Db250ZW50UGxhY2VIb2xkZXIyX3BhbmVsMSc7XG5jb25zdCBjaGVja2luZ0FjY291bnRUYWJIZWJyZXdOYW1lID0gJ9ei15XXkdeoINeV16nXkSc7XG5jb25zdCBjaGVja2luZ0FjY291bnRUYWJFbmdsaXNoTmFtZSA9ICdDaGVja2luZyBBY2NvdW50JztcblxuZnVuY3Rpb24gY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gIHJldHVybiBbXG4gICAgeyBzZWxlY3RvcjogdXNlcm5hbWVTZWxlY3RvciwgdmFsdWU6IGNyZWRlbnRpYWxzLnVzZXJuYW1lIH0sXG4gICAgeyBzZWxlY3RvcjogcGFzc3dvcmRTZWxlY3RvciwgdmFsdWU6IGNyZWRlbnRpYWxzLnBhc3N3b3JkIH0sXG4gIF07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzTG9nZ2VkSW4ob3B0aW9uczogeyBwYWdlPzogUGFnZSB8IHVuZGVmaW5lZCB9IHwgdW5kZWZpbmVkKSB7XG4gIGlmICghb3B0aW9ucz8ucGFnZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBvc2hYUGF0aCA9IGAvL2EvL3NwYW5bY29udGFpbnMoLiwgXCIke2NoZWNraW5nQWNjb3VudFRhYkhlYnJld05hbWV9XCIpIG9yIGNvbnRhaW5zKC4sIFwiJHtjaGVja2luZ0FjY291bnRUYWJFbmdsaXNoTmFtZX1cIildYDtcbiAgY29uc3Qgb3NoVGFiID0gYXdhaXQgb3B0aW9ucy5wYWdlLiQkKGB4cGF0aCR7b3NoWFBhdGh9YCk7XG4gIHJldHVybiBvc2hUYWIubGVuZ3RoID4gMDtcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVMb2dpblJlc3VsdHMocGFnZTogUGFnZSk6IFBvc3NpYmxlTG9naW5SZXN1bHRzIHtcbiAgcmV0dXJuIHtcbiAgICBbTG9naW5SZXN1bHRzLlN1Y2Nlc3NdOiBbQUZURVJfTE9HSU5fQkFTRV9VUkwsIGlzTG9nZ2VkSW5dLFxuICAgIFtMb2dpblJlc3VsdHMuSW52YWxpZFBhc3N3b3JkXTogW2FzeW5jICgpID0+ICEhKGF3YWl0IHBhZ2UuJChpbnZhbGlkUGFzc3dvcmRTZWxlY3RvcikpXSxcbiAgICBbTG9naW5SZXN1bHRzLkNoYW5nZVBhc3N3b3JkXTogW0NIQU5HRV9QQVNTV09SRF9VUkxdLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRTdGFydE1vbWVudChvcHRpb25zU3RhcnREYXRlOiBEYXRlKSB7XG4gIGNvbnN0IGRlZmF1bHRTdGFydE1vbWVudCA9IG1vbWVudCgpLnN1YnRyYWN0KDEsICd5ZWFycycpO1xuICBjb25zdCBzdGFydERhdGUgPSBvcHRpb25zU3RhcnREYXRlIHx8IGRlZmF1bHRTdGFydE1vbWVudC50b0RhdGUoKTtcbiAgcmV0dXJuIG1vbWVudC5tYXgoZGVmYXVsdFN0YXJ0TW9tZW50LCBtb21lbnQoc3RhcnREYXRlKSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURhdGFGcm9tUmVxdWVzdChyZXF1ZXN0OiBIVFRQUmVxdWVzdCwgb3B0aW9uc1N0YXJ0RGF0ZTogRGF0ZSkge1xuICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShyZXF1ZXN0LnBvc3REYXRhKCkgfHwgJ3t9Jyk7XG5cbiAgZGF0YS5pbkZyb21EYXRlID0gZ2V0U3RhcnRNb21lbnQob3B0aW9uc1N0YXJ0RGF0ZSkuZm9ybWF0KERBVEVfRk9STUFUKTtcbiAgZGF0YS5pblRvRGF0ZSA9IG1vbWVudCgpLmZvcm1hdChEQVRFX0ZPUk1BVCk7XG4gIGRhdGEudGFibGUubWF4Um93ID0gTUFYX1JPV1NfUEVSX1JFUVVFU1Q7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnNGcm9tUmVxdWVzdChyZXF1ZXN0OiBIVFRQUmVxdWVzdCkge1xuICByZXR1cm4ge1xuICAgIG1penJhaGl4c3JmdG9rZW46IHJlcXVlc3QuaGVhZGVycygpLm1penJhaGl4c3JmdG9rZW4sXG4gICAgJ0NvbnRlbnQtVHlwZSc6IHJlcXVlc3QuaGVhZGVycygpWydjb250ZW50LXR5cGUnXSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydFRyYW5zYWN0aW9ucyh0eG5zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXSk6IFRyYW5zYWN0aW9uW10ge1xuICByZXR1cm4gdHhucy5tYXAocm93ID0+IHtcbiAgICBjb25zdCB0eG5EYXRlID0gbW9tZW50KHJvdy5NQzAyUGV1bGFUYWFFWiwgbW9tZW50LkhUTUw1X0ZNVC5EQVRFVElNRV9MT0NBTF9TRUNPTkRTKS50b0lTT1N0cmluZygpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZXMuTm9ybWFsLFxuICAgICAgaWRlbnRpZmllcjogcm93Lk1DMDJBc21haHRhTWVrb3JpdEVaID8gcGFyc2VJbnQocm93Lk1DMDJBc21haHRhTWVrb3JpdEVaLCAxMCkgOiB1bmRlZmluZWQsXG4gICAgICBkYXRlOiB0eG5EYXRlLFxuICAgICAgcHJvY2Vzc2VkRGF0ZTogdHhuRGF0ZSxcbiAgICAgIG9yaWdpbmFsQW1vdW50OiByb3cuTUMwMlNjaHVtRVosXG4gICAgICBvcmlnaW5hbEN1cnJlbmN5OiBTSEVLRUxfQ1VSUkVOQ1ksXG4gICAgICBjaGFyZ2VkQW1vdW50OiByb3cuTUMwMlNjaHVtRVosXG4gICAgICBkZXNjcmlwdGlvbjogcm93Lk1DMDJUbnVhVGV1ckVaLFxuICAgICAgc3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzLkNvbXBsZXRlZCxcbiAgICB9O1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFBlbmRpbmdUcmFuc2FjdGlvbnMocGFnZTogRnJhbWUpOiBQcm9taXNlPFRyYW5zYWN0aW9uW10+IHtcbiAgY29uc3QgcGVuZGluZ1R4biA9IGF3YWl0IHBhZ2VFdmFsQWxsKHBhZ2UsICd0ci5yZ1JvdycsIFtdLCB0cnMgPT4ge1xuICAgIHJldHVybiB0cnMubWFwKHRyID0+IEFycmF5LmZyb20odHIucXVlcnlTZWxlY3RvckFsbCgndGQnKSwgKHRkOiBIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQpID0+IHRkLnRleHRDb250ZW50IHx8ICcnKSk7XG4gIH0pO1xuXG4gIHJldHVybiBwZW5kaW5nVHhuLm1hcCh0eG4gPT4ge1xuICAgIGNvbnN0IGRhdGUgPSBtb21lbnQodHhuWzBdLCAnREQvTU0vWVknKS50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IGFtb3VudCA9IHBhcnNlSW50KHR4blszXSwgMTApO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGVzLk5vcm1hbCxcbiAgICAgIGRhdGUsXG4gICAgICBwcm9jZXNzZWREYXRlOiBkYXRlLFxuICAgICAgb3JpZ2luYWxBbW91bnQ6IGFtb3VudCxcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IFNIRUtFTF9DVVJSRU5DWSxcbiAgICAgIGNoYXJnZWRBbW91bnQ6IGFtb3VudCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0eG5bMV0sXG4gICAgICBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzZXMuUGVuZGluZyxcbiAgICB9O1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9zdExvZ2luKHBhZ2U6IFBhZ2UpIHtcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgYWZ0ZXJMb2dpblNlbGVjdG9yKSxcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgaW52YWxpZFBhc3N3b3JkU2VsZWN0b3IpLFxuICAgIHdhaXRGb3JVcmwocGFnZSwgQ0hBTkdFX1BBU1NXT1JEX1VSTCksXG4gIF0pO1xufVxuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0geyB1c2VybmFtZTogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH07XG5cbmNsYXNzIE1penJhaGlTY3JhcGVyIGV4dGVuZHMgQmFzZVNjcmFwZXJXaXRoQnJvd3NlcjxTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscz4ge1xuICBnZXRMb2dpbk9wdGlvbnMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvZ2luVXJsOiBMT0dJTl9VUkwsXG4gICAgICBmaWVsZHM6IGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzKSxcbiAgICAgIHN1Ym1pdEJ1dHRvblNlbGVjdG9yLFxuICAgICAgY2hlY2tSZWFkaW5lc3M6IGFzeW5jICgpID0+IHdhaXRVbnRpbEVsZW1lbnREaXNhcHBlYXIodGhpcy5wYWdlLCBsb2dpblNwaW5uZXJTZWxlY3RvciksXG4gICAgICBwb3N0QWN0aW9uOiBhc3luYyAoKSA9PiBwb3N0TG9naW4odGhpcy5wYWdlKSxcbiAgICAgIHBvc3NpYmxlUmVzdWx0czogZ2V0UG9zc2libGVMb2dpblJlc3VsdHModGhpcy5wYWdlKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hEYXRhKCkge1xuICAgIGF3YWl0IHRoaXMucGFnZS4kZXZhbCgnI2Ryb3Bkb3duQmFzaWMsIC5pdGVtJywgZWwgPT4gKGVsIGFzIEhUTUxFbGVtZW50KS5jbGljaygpKTtcblxuICAgIGNvbnN0IG51bU9mQWNjb3VudHMgPSAoYXdhaXQgdGhpcy5wYWdlLiQkKGFjY291bnREcm9wRG93bkl0ZW1TZWxlY3RvcikpLmxlbmd0aDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHRzOiBUcmFuc2FjdGlvbnNBY2NvdW50W10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1PZkFjY291bnRzOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wYWdlLiRldmFsKCcjZHJvcGRvd25CYXNpYywgLml0ZW0nLCBlbCA9PiAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsaWNrKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5wYWdlLiRldmFsKGAke2FjY291bnREcm9wRG93bkl0ZW1TZWxlY3Rvcn06bnRoLWNoaWxkKCR7aSArIDF9KWAsIGVsID0+IChlbCBhcyBIVE1MRWxlbWVudCkuY2xpY2soKSk7XG4gICAgICAgIHJlc3VsdHMucHVzaChhd2FpdCB0aGlzLmZldGNoQWNjb3VudCgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgYWNjb3VudHM6IHJlc3VsdHMsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvclR5cGU6IFNjcmFwZXJFcnJvclR5cGVzLkdlbmVyaWMsXG4gICAgICAgIGVycm9yTWVzc2FnZTogKGUgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UGVuZGluZ1RyYW5zYWN0aW9ucygpOiBQcm9taXNlPFRyYW5zYWN0aW9uW10+IHtcbiAgICBhd2FpdCB0aGlzLnBhZ2UuJGV2YWwoYGFbaHJlZio9XCIke1BFTkRJTkdfVFJBTlNBQ1RJT05TX1BBR0V9XCJdYCwgZWwgPT4gKGVsIGFzIEhUTUxFbGVtZW50KS5jbGljaygpKTtcbiAgICBjb25zdCBmcmFtZSA9IGF3YWl0IHdhaXRVbnRpbElmcmFtZUZvdW5kKHRoaXMucGFnZSwgZiA9PiBmLnVybCgpLmluY2x1ZGVzKFBFTkRJTkdfVFJBTlNBQ1RJT05TX0lGUkFNRSkpO1xuICAgIGNvbnN0IGlzUGVuZGluZyA9IGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChmcmFtZSwgcGVuZGluZ1RyeElkZW50aWZpZXJJZClcbiAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAuY2F0Y2goKCkgPT4gZmFsc2UpO1xuICAgIGlmICghaXNQZW5kaW5nKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgcGVuZGluZ1R4biA9IGF3YWl0IGV4dHJhY3RQZW5kaW5nVHJhbnNhY3Rpb25zKGZyYW1lKTtcbiAgICByZXR1cm4gcGVuZGluZ1R4bjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hBY2NvdW50KCkge1xuICAgIGF3YWl0IHRoaXMucGFnZS53YWl0Rm9yU2VsZWN0b3IoYGFbaHJlZio9XCIke09TSF9QQUdFfVwiXWApO1xuICAgIGF3YWl0IHRoaXMucGFnZS4kZXZhbChgYVtocmVmKj1cIiR7T1NIX1BBR0V9XCJdYCwgZWwgPT4gKGVsIGFzIEhUTUxFbGVtZW50KS5jbGljaygpKTtcbiAgICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQodGhpcy5wYWdlLCBgYVtocmVmKj1cIiR7VFJBTlNBQ1RJT05TX1BBR0V9XCJdYCk7XG4gICAgYXdhaXQgdGhpcy5wYWdlLiRldmFsKGBhW2hyZWYqPVwiJHtUUkFOU0FDVElPTlNfUEFHRX1cIl1gLCBlbCA9PiAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsaWNrKCkpO1xuXG4gICAgY29uc3QgYWNjb3VudE51bWJlckVsZW1lbnQgPSBhd2FpdCB0aGlzLnBhZ2UuJCgnI2Ryb3Bkb3duQmFzaWMgYiBzcGFuJyk7XG4gICAgY29uc3QgYWNjb3VudE51bWJlckhhbmRsZSA9IGF3YWl0IGFjY291bnROdW1iZXJFbGVtZW50Py5nZXRQcm9wZXJ0eSgndGl0bGUnKTtcbiAgICBjb25zdCBhY2NvdW50TnVtYmVyID0gKGF3YWl0IGFjY291bnROdW1iZXJIYW5kbGU/Lmpzb25WYWx1ZSgpKSBhcyBzdHJpbmc7XG4gICAgaWYgKCFhY2NvdW50TnVtYmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjY291bnQgbnVtYmVyIG5vdCBmb3VuZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5hbnkoXG4gICAgICBUUkFOU0FDVElPTlNfUkVRVUVTVF9VUkxTLm1hcChhc3luYyB1cmwgPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgdGhpcy5wYWdlLndhaXRGb3JSZXF1ZXN0KHVybCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBjcmVhdGVEYXRhRnJvbVJlcXVlc3QocmVxdWVzdCwgdGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSk7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBjcmVhdGVIZWFkZXJzRnJvbVJlcXVlc3QocmVxdWVzdCk7XG5cbiAgICAgICAgcmV0dXJuIGZldGNoUG9zdFdpdGhpblBhZ2U8U2NyYXBlZFRyYW5zYWN0aW9uc1Jlc3VsdD4odGhpcy5wYWdlLCB1cmwsIGRhdGEsIGhlYWRlcnMpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2UuaGVhZGVyLnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFcnJvciBmZXRjaGluZyB0cmFuc2FjdGlvbi4gUmVzcG9uc2UgbWVzc2FnZTogJHtyZXNwb25zZSA/IHJlc3BvbnNlLmhlYWRlci5tZXNzYWdlc1swXS50ZXh0IDogJyd9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVsZXZhbnRSb3dzID0gcmVzcG9uc2UuYm9keS50YWJsZS5yb3dzLmZpbHRlcihyb3cgPT4gcm93LlJlY1R5cGVTcGVjaWZpZWQpO1xuICAgIGNvbnN0IG9zaFR4biA9IGNvbnZlcnRUcmFuc2FjdGlvbnMocmVsZXZhbnRSb3dzKTtcblxuICAgIC8vIHdvcmthcm91bmQgZm9yIGEgYnVnIHdoaWNoIHRoZSBiYW5rJ3MgQVBJIHJldHVybnMgdHJhbnNhY3Rpb25zIGJlZm9yZSB0aGUgcmVxdWVzdGVkIHN0YXJ0IGRhdGVcbiAgICBjb25zdCBzdGFydE1vbWVudCA9IGdldFN0YXJ0TW9tZW50KHRoaXMub3B0aW9ucy5zdGFydERhdGUpO1xuICAgIGNvbnN0IG9zaFR4bkFmdGVyU3RhcnREYXRlID0gb3NoVHhuLmZpbHRlcih0eG4gPT4gbW9tZW50KHR4bi5kYXRlKS5pc1NhbWVPckFmdGVyKHN0YXJ0TW9tZW50KSk7XG5cbiAgICBjb25zdCBwZW5kaW5nVHhuID0gYXdhaXQgdGhpcy5nZXRQZW5kaW5nVHJhbnNhY3Rpb25zKCk7XG4gICAgY29uc3QgYWxsVHhuID0gb3NoVHhuQWZ0ZXJTdGFydERhdGUuY29uY2F0KHBlbmRpbmdUeG4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY291bnROdW1iZXIsXG4gICAgICB0eG5zOiBhbGxUeG4sXG4gICAgICBiYWxhbmNlOiArcmVzcG9uc2UuYm9keS5maWVsZHM/LllpdHJhLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWl6cmFoaVNjcmFwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _mizrahi = _interopRequireDefault(require("./mizrahi"));
|
|
4
|
+
var _testsUtils = require("../tests/tests-utils");
|
|
5
|
+
var _definitions = require("../definitions");
|
|
6
|
+
var _constants = require("../constants");
|
|
7
|
+
var _baseScraperWithBrowser = require("./base-scraper-with-browser");
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
const COMPANY_ID = 'mizrahi'; // TODO this property should be hard-coded in the provider
|
|
10
|
+
const testsConfig = (0, _testsUtils.getTestsConfig)();
|
|
11
|
+
describe('Mizrahi scraper', () => {
|
|
12
|
+
beforeAll(() => {
|
|
13
|
+
(0, _testsUtils.extendAsyncTimeout)(); // The default timeout is 5 seconds per async test, this function extends the timeout value
|
|
14
|
+
});
|
|
15
|
+
test('should expose login fields in scrapers constant', () => {
|
|
16
|
+
expect(_definitions.SCRAPERS.mizrahi).toBeDefined();
|
|
17
|
+
expect(_definitions.SCRAPERS.mizrahi.loginFields).toContain('username');
|
|
18
|
+
expect(_definitions.SCRAPERS.mizrahi.loginFields).toContain('password');
|
|
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 _mizrahi.default(options);
|
|
26
|
+
const result = await scraper.scrape({
|
|
27
|
+
username: 'e10s12',
|
|
28
|
+
password: '3f3ss3d'
|
|
29
|
+
});
|
|
30
|
+
expect(result).toBeDefined();
|
|
31
|
+
expect(result.success).toBeFalsy();
|
|
32
|
+
expect(result.errorType).toBe(_baseScraperWithBrowser.LoginResults.InvalidPassword);
|
|
33
|
+
});
|
|
34
|
+
(0, _testsUtils.maybeTestCompanyAPI)(COMPANY_ID)('should scrape transactions', async () => {
|
|
35
|
+
const options = {
|
|
36
|
+
...testsConfig.options,
|
|
37
|
+
companyId: COMPANY_ID
|
|
38
|
+
};
|
|
39
|
+
const scraper = new _mizrahi.default(options);
|
|
40
|
+
const result = await scraper.scrape(testsConfig.credentials.mizrahi);
|
|
41
|
+
expect(result).toBeDefined();
|
|
42
|
+
const error = `${result.errorType || ''} ${result.errorMessage || ''}`.trim();
|
|
43
|
+
expect(error).toBe('');
|
|
44
|
+
expect(result.success).toBeTruthy();
|
|
45
|
+
expect(result.accounts).toBeDefined();
|
|
46
|
+
expect(result.accounts.length).toBeGreaterThan(0);
|
|
47
|
+
const account = result.accounts[0];
|
|
48
|
+
expect(account.accountNumber).not.toBe('');
|
|
49
|
+
expect(account.txns[0].date).toMatch(_constants.ISO_DATE_REGEX);
|
|
50
|
+
(0, _testsUtils.exportTransactions)(COMPANY_ID, result.accounts || []);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWl6cmFoaSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3Rlc3RzVXRpbHMiLCJfZGVmaW5pdGlvbnMiLCJfY29uc3RhbnRzIiwiX2Jhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJDT01QQU5ZX0lEIiwidGVzdHNDb25maWciLCJnZXRUZXN0c0NvbmZpZyIsImRlc2NyaWJlIiwiYmVmb3JlQWxsIiwiZXh0ZW5kQXN5bmNUaW1lb3V0IiwidGVzdCIsImV4cGVjdCIsIlNDUkFQRVJTIiwibWl6cmFoaSIsInRvQmVEZWZpbmVkIiwibG9naW5GaWVsZHMiLCJ0b0NvbnRhaW4iLCJtYXliZVRlc3RDb21wYW55QVBJIiwiY29uZmlnIiwiY29tcGFueUFQSSIsImludmFsaWRQYXNzd29yZCIsIm9wdGlvbnMiLCJjb21wYW55SWQiLCJzY3JhcGVyIiwiTWl6cmFoaVNjcmFwZXIiLCJyZXN1bHQiLCJzY3JhcGUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwic3VjY2VzcyIsInRvQmVGYWxzeSIsImVycm9yVHlwZSIsInRvQmUiLCJMb2dpblJlc3VsdHMiLCJJbnZhbGlkUGFzc3dvcmQiLCJjcmVkZW50aWFscyIsImVycm9yIiwiZXJyb3JNZXNzYWdlIiwidHJpbSIsInRvQmVUcnV0aHkiLCJhY2NvdW50cyIsImxlbmd0aCIsInRvQmVHcmVhdGVyVGhhbiIsImFjY291bnQiLCJhY2NvdW50TnVtYmVyIiwibm90IiwidHhucyIsImRhdGUiLCJ0b01hdGNoIiwiSVNPX0RBVEVfUkVHRVgiLCJleHBvcnRUcmFuc2FjdGlvbnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyYXBlcnMvbWl6cmFoaS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNaXpyYWhpU2NyYXBlciBmcm9tICcuL21penJhaGknO1xuaW1wb3J0IHsgbWF5YmVUZXN0Q29tcGFueUFQSSwgZXh0ZW5kQXN5bmNUaW1lb3V0LCBnZXRUZXN0c0NvbmZpZywgZXhwb3J0VHJhbnNhY3Rpb25zIH0gZnJvbSAnLi4vdGVzdHMvdGVzdHMtdXRpbHMnO1xuaW1wb3J0IHsgU0NSQVBFUlMgfSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBJU09fREFURV9SRUdFWCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBMb2dpblJlc3VsdHMgfSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuaW1wb3J0IHsgdHlwZSBUcmFuc2FjdGlvbnNBY2NvdW50IH0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcblxuY29uc3QgQ09NUEFOWV9JRCA9ICdtaXpyYWhpJzsgLy8gVE9ETyB0aGlzIHByb3BlcnR5IHNob3VsZCBiZSBoYXJkLWNvZGVkIGluIHRoZSBwcm92aWRlclxuY29uc3QgdGVzdHNDb25maWcgPSBnZXRUZXN0c0NvbmZpZygpO1xuXG5kZXNjcmliZSgnTWl6cmFoaSBzY3JhcGVyJywgKCkgPT4ge1xuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIGV4dGVuZEFzeW5jVGltZW91dCgpOyAvLyBUaGUgZGVmYXVsdCB0aW1lb3V0IGlzIDUgc2Vjb25kcyBwZXIgYXN5bmMgdGVzdCwgdGhpcyBmdW5jdGlvbiBleHRlbmRzIHRoZSB0aW1lb3V0IHZhbHVlXG4gIH0pO1xuXG4gIHRlc3QoJ3Nob3VsZCBleHBvc2UgbG9naW4gZmllbGRzIGluIHNjcmFwZXJzIGNvbnN0YW50JywgKCkgPT4ge1xuICAgIGV4cGVjdChTQ1JBUEVSUy5taXpyYWhpKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChTQ1JBUEVSUy5taXpyYWhpLmxvZ2luRmllbGRzKS50b0NvbnRhaW4oJ3VzZXJuYW1lJyk7XG4gICAgZXhwZWN0KFNDUkFQRVJTLm1penJhaGkubG9naW5GaWVsZHMpLnRvQ29udGFpbigncGFzc3dvcmQnKTtcbiAgfSk7XG5cbiAgbWF5YmVUZXN0Q29tcGFueUFQSShDT01QQU5ZX0lELCBjb25maWcgPT4gY29uZmlnLmNvbXBhbnlBUEkuaW52YWxpZFBhc3N3b3JkKShcbiAgICAnc2hvdWxkIGZhaWwgb24gaW52YWxpZCB1c2VyL3Bhc3N3b3JkJyxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAuLi50ZXN0c0NvbmZpZy5vcHRpb25zLFxuICAgICAgICBjb21wYW55SWQ6IENPTVBBTllfSUQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzY3JhcGVyID0gbmV3IE1penJhaGlTY3JhcGVyKG9wdGlvbnMpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzY3JhcGVyLnNjcmFwZSh7IHVzZXJuYW1lOiAnZTEwczEyJywgcGFzc3dvcmQ6ICczZjNzczNkJyB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuc3VjY2VzcykudG9CZUZhbHN5KCk7XG4gICAgICBleHBlY3QocmVzdWx0LmVycm9yVHlwZSkudG9CZShMb2dpblJlc3VsdHMuSW52YWxpZFBhc3N3b3JkKTtcbiAgICB9LFxuICApO1xuXG4gIG1heWJlVGVzdENvbXBhbnlBUEkoQ09NUEFOWV9JRCkoJ3Nob3VsZCBzY3JhcGUgdHJhbnNhY3Rpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAuLi50ZXN0c0NvbmZpZy5vcHRpb25zLFxuICAgICAgY29tcGFueUlkOiBDT01QQU5ZX0lELFxuICAgIH07XG5cbiAgICBjb25zdCBzY3JhcGVyID0gbmV3IE1penJhaGlTY3JhcGVyKG9wdGlvbnMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNjcmFwZXIuc2NyYXBlKHRlc3RzQ29uZmlnLmNyZWRlbnRpYWxzLm1penJhaGkpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvQmVEZWZpbmVkKCk7XG4gICAgY29uc3QgZXJyb3IgPSBgJHtyZXN1bHQuZXJyb3JUeXBlIHx8ICcnfSAke3Jlc3VsdC5lcnJvck1lc3NhZ2UgfHwgJyd9YC50cmltKCk7XG4gICAgZXhwZWN0KGVycm9yKS50b0JlKCcnKTtcbiAgICBleHBlY3QocmVzdWx0LnN1Y2Nlc3MpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QocmVzdWx0LmFjY291bnRzKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdCgocmVzdWx0LmFjY291bnRzIGFzIGFueSkubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG4gICAgY29uc3QgYWNjb3VudDogVHJhbnNhY3Rpb25zQWNjb3VudCA9IChyZXN1bHQgYXMgYW55KS5hY2NvdW50c1swXTtcbiAgICBleHBlY3QoYWNjb3VudC5hY2NvdW50TnVtYmVyKS5ub3QudG9CZSgnJyk7XG4gICAgZXhwZWN0KGFjY291bnQudHhuc1swXS5kYXRlKS50b01hdGNoKElTT19EQVRFX1JFR0VYKTtcblxuICAgIGV4cG9ydFRyYW5zYWN0aW9ucyhDT01QQU5ZX0lELCByZXN1bHQuYWNjb3VudHMgfHwgW10pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLHVCQUFBLEdBQUFKLE9BQUE7QUFBMkQsU0FBQUQsdUJBQUFNLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFHM0QsTUFBTUcsVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQzlCLE1BQU1DLFdBQVcsR0FBRyxJQUFBQywwQkFBYyxFQUFDLENBQUM7QUFFcENDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNO0VBQ2hDQyxTQUFTLENBQUMsTUFBTTtJQUNkLElBQUFDLDhCQUFrQixFQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hCLENBQUMs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
|