israeli-bank-scrapers 6.1.0 → 6.1.1
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 +5 -7
- package/lib/constants.js +13 -16
- package/lib/definitions.js +109 -113
- package/lib/helpers/browser.js +9 -16
- package/lib/helpers/dates.js +18 -19
- package/lib/helpers/debug.js +9 -9
- package/lib/helpers/elements-interactions.js +78 -84
- package/lib/helpers/fetch.js +82 -89
- package/lib/helpers/navigation.js +24 -31
- package/lib/helpers/storage.js +10 -12
- package/lib/helpers/transactions.js +33 -35
- package/lib/helpers/waiting.js +45 -44
- package/lib/index.js +15 -82
- package/lib/scrapers/amex.js +11 -13
- package/lib/scrapers/base-beinleumi-group.js +233 -252
- package/lib/scrapers/base-isracard-amex.js +273 -286
- package/lib/scrapers/base-scraper-with-browser.js +240 -274
- package/lib/scrapers/base-scraper.js +82 -86
- package/lib/scrapers/behatsdaa.js +98 -107
- package/lib/scrapers/beinleumi.js +11 -20
- package/lib/scrapers/beyahad-bishvilha.js +132 -138
- package/lib/scrapers/discount.js +97 -103
- package/lib/scrapers/errors.js +22 -25
- package/lib/scrapers/factory.js +66 -67
- package/lib/scrapers/hapoalim.js +162 -182
- package/lib/scrapers/interface.js +2 -5
- package/lib/scrapers/isracard.js +11 -13
- package/lib/scrapers/leumi.js +167 -176
- package/lib/scrapers/massad.js +11 -20
- package/lib/scrapers/max.js +256 -268
- package/lib/scrapers/mercantile.js +14 -20
- package/lib/scrapers/mizrahi.js +158 -159
- package/lib/scrapers/one-zero-queries.js +4 -7
- package/lib/scrapers/one-zero.js +176 -240
- package/lib/scrapers/otsar-hahayal.js +11 -20
- package/lib/scrapers/pagi.js +11 -20
- package/lib/scrapers/union-bank.js +172 -179
- package/lib/scrapers/visa-cal.js +254 -263
- package/lib/scrapers/yahav.js +190 -211
- package/lib/transactions.js +13 -16
- package/package.json +12 -14
- package/lib/scrapers/amex.test.d.ts +0 -1
- package/lib/scrapers/amex.test.js +0 -54
- package/lib/scrapers/base-scraper-with-browser.test.d.ts +0 -1
- package/lib/scrapers/base-scraper-with-browser.test.js +0 -58
- package/lib/scrapers/behatsdaa.test.d.ts +0 -1
- package/lib/scrapers/behatsdaa.test.js +0 -50
- package/lib/scrapers/beinleumi.test.d.ts +0 -1
- package/lib/scrapers/beinleumi.test.js +0 -52
- package/lib/scrapers/beyahad-bishvilha.test.d.ts +0 -1
- package/lib/scrapers/beyahad-bishvilha.test.js +0 -52
- package/lib/scrapers/discount.test.d.ts +0 -1
- package/lib/scrapers/discount.test.js +0 -54
- package/lib/scrapers/factory.test.d.ts +0 -1
- package/lib/scrapers/factory.test.js +0 -19
- package/lib/scrapers/hapoalim.test.d.ts +0 -1
- package/lib/scrapers/hapoalim.test.js +0 -52
- package/lib/scrapers/isracard.test.d.ts +0 -1
- package/lib/scrapers/isracard.test.js +0 -54
- package/lib/scrapers/leumi.test.d.ts +0 -1
- package/lib/scrapers/leumi.test.js +0 -52
- package/lib/scrapers/max.test.d.ts +0 -1
- package/lib/scrapers/max.test.js +0 -71
- package/lib/scrapers/mercantile.test.d.ts +0 -1
- package/lib/scrapers/mercantile.test.js +0 -50
- package/lib/scrapers/mizrahi.test.d.ts +0 -1
- package/lib/scrapers/mizrahi.test.js +0 -58
- package/lib/scrapers/one-zero.test.d.ts +0 -1
- package/lib/scrapers/one-zero.test.js +0 -56
- package/lib/scrapers/otsar-hahayal.test.d.ts +0 -1
- package/lib/scrapers/otsar-hahayal.test.js +0 -52
- package/lib/scrapers/pagi.test.d.ts +0 -1
- package/lib/scrapers/pagi.test.js +0 -52
- package/lib/scrapers/union-bank.test.d.ts +0 -1
- package/lib/scrapers/union-bank.test.js +0 -52
- package/lib/scrapers/visa-cal.test.d.ts +0 -1
- package/lib/scrapers/visa-cal.test.js +0 -54
- package/lib/scrapers/yahav.test.d.ts +0 -1
- package/lib/scrapers/yahav.test.js +0 -54
|
@@ -1,50 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.filterOldTransactions =
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var _moment = _interopRequireDefault(require("moment"));
|
|
11
|
-
var _transactions = require("../transactions");
|
|
12
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
14
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
15
|
-
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
16
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
17
|
-
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.filterOldTransactions = exports.sortTransactionsByDate = exports.fixInstallments = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const moment_1 = __importDefault(require("moment"));
|
|
9
|
+
const transactions_1 = require("../transactions");
|
|
18
10
|
function isNormalTransaction(txn) {
|
|
19
|
-
|
|
11
|
+
return txn && txn.type === transactions_1.TransactionTypes.Normal;
|
|
20
12
|
}
|
|
21
13
|
function isInstallmentTransaction(txn) {
|
|
22
|
-
|
|
14
|
+
return txn && txn.type === transactions_1.TransactionTypes.Installments;
|
|
23
15
|
}
|
|
24
16
|
function isNonInitialInstallmentTransaction(txn) {
|
|
25
|
-
|
|
17
|
+
return isInstallmentTransaction(txn) && !!txn.installments && txn.installments.number > 1;
|
|
26
18
|
}
|
|
27
19
|
function isInitialInstallmentTransaction(txn) {
|
|
28
|
-
|
|
20
|
+
return isInstallmentTransaction(txn) && !!txn.installments && txn.installments.number === 1;
|
|
29
21
|
}
|
|
30
22
|
function fixInstallments(txns) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
23
|
+
return txns.map((txn) => {
|
|
24
|
+
const clonedTxn = { ...txn };
|
|
25
|
+
if (isInstallmentTransaction(clonedTxn) &&
|
|
26
|
+
isNonInitialInstallmentTransaction(clonedTxn) &&
|
|
27
|
+
clonedTxn.installments) {
|
|
28
|
+
const dateMoment = (0, moment_1.default)(clonedTxn.date);
|
|
29
|
+
const actualDateMoment = dateMoment.add(clonedTxn.installments.number - 1, 'month');
|
|
30
|
+
clonedTxn.date = actualDateMoment.toISOString();
|
|
31
|
+
}
|
|
32
|
+
return clonedTxn;
|
|
33
|
+
});
|
|
40
34
|
}
|
|
35
|
+
exports.fixInstallments = fixInstallments;
|
|
41
36
|
function sortTransactionsByDate(txns) {
|
|
42
|
-
|
|
37
|
+
return lodash_1.default.sortBy(txns, ['date']);
|
|
43
38
|
}
|
|
39
|
+
exports.sortTransactionsByDate = sortTransactionsByDate;
|
|
44
40
|
function filterOldTransactions(txns, startMoment, combineInstallments) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
41
|
+
return txns.filter(txn => {
|
|
42
|
+
const combineNeededAndInitialOrNormal = combineInstallments && (isNormalTransaction(txn) || isInitialInstallmentTransaction(txn));
|
|
43
|
+
return ((!combineInstallments && startMoment.isSameOrBefore(txn.date)) ||
|
|
44
|
+
(combineNeededAndInitialOrNormal && startMoment.isSameOrBefore(txn.date)));
|
|
45
|
+
});
|
|
49
46
|
}
|
|
50
|
-
|
|
47
|
+
exports.filterOldTransactions = filterOldTransactions;
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlcnMvdHJhbnNhY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUF1QjtBQUN2QixvREFBNkM7QUFDN0Msa0RBQXFFO0FBRXJFLFNBQVMsbUJBQW1CLENBQUMsR0FBUTtJQUNuQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLCtCQUFnQixDQUFDLE1BQU0sQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FBQyxHQUFRO0lBQ3hDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssK0JBQWdCLENBQUMsWUFBWSxDQUFDO0FBQzNELENBQUM7QUFFRCxTQUFTLGtDQUFrQyxDQUFDLEdBQWdCO0lBQzFELE9BQU8sd0JBQXdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVGLENBQUM7QUFFRCxTQUFTLCtCQUErQixDQUFDLEdBQWdCO0lBQ3ZELE9BQU8sd0JBQXdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQUMsSUFBbUI7SUFDakQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBZ0IsRUFBRSxFQUFFO1FBQ25DLE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUU3QixJQUNFLHdCQUF3QixDQUFDLFNBQVMsQ0FBQztZQUNuQyxrQ0FBa0MsQ0FBQyxTQUFTLENBQUM7WUFDN0MsU0FBUyxDQUFDLFlBQVksRUFDdEI7WUFDQSxNQUFNLFVBQVUsR0FBRyxJQUFBLGdCQUFNLEVBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFDLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDcEYsU0FBUyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNqRDtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWZELDBDQWVDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQUMsSUFBbUI7SUFDeEQsT0FBTyxnQkFBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFGRCx3REFFQztBQUVELFNBQWdCLHFCQUFxQixDQUFDLElBQW1CLEVBQUUsV0FBbUIsRUFBRSxtQkFBNEI7SUFDMUcsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3ZCLE1BQU0sK0JBQStCLEdBQ25DLG1CQUFtQixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLElBQUksK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RixPQUFPLENBQ0wsQ0FBQyxDQUFDLG1CQUFtQixJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlELENBQUMsK0JBQStCLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQVRELHNEQVNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQsIHsgdHlwZSBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlcywgdHlwZSBUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5cbmZ1bmN0aW9uIGlzTm9ybWFsVHJhbnNhY3Rpb24odHhuOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR4biAmJiB0eG4udHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWw7XG59XG5cbmZ1bmN0aW9uIGlzSW5zdGFsbG1lbnRUcmFuc2FjdGlvbih0eG46IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHhuICYmIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGVzLkluc3RhbGxtZW50cztcbn1cblxuZnVuY3Rpb24gaXNOb25Jbml0aWFsSW5zdGFsbG1lbnRUcmFuc2FjdGlvbih0eG46IFRyYW5zYWN0aW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc0luc3RhbGxtZW50VHJhbnNhY3Rpb24odHhuKSAmJiAhIXR4bi5pbnN0YWxsbWVudHMgJiYgdHhuLmluc3RhbGxtZW50cy5udW1iZXIgPiAxO1xufVxuXG5mdW5jdGlvbiBpc0luaXRpYWxJbnN0YWxsbWVudFRyYW5zYWN0aW9uKHR4bjogVHJhbnNhY3Rpb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzSW5zdGFsbG1lbnRUcmFuc2FjdGlvbih0eG4pICYmICEhdHhuLmluc3RhbGxtZW50cyAmJiB0eG4uaW5zdGFsbG1lbnRzLm51bWJlciA9PT0gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpeEluc3RhbGxtZW50cyh0eG5zOiBUcmFuc2FjdGlvbltdKTogVHJhbnNhY3Rpb25bXSB7XG4gIHJldHVybiB0eG5zLm1hcCgodHhuOiBUcmFuc2FjdGlvbikgPT4ge1xuICAgIGNvbnN0IGNsb25lZFR4biA9IHsgLi4udHhuIH07XG5cbiAgICBpZiAoXG4gICAgICBpc0luc3RhbGxtZW50VHJhbnNhY3Rpb24oY2xvbmVkVHhuKSAmJlxuICAgICAgaXNOb25Jbml0aWFsSW5zdGFsbG1lbnRUcmFuc2FjdGlvbihjbG9uZWRUeG4pICYmXG4gICAgICBjbG9uZWRUeG4uaW5zdGFsbG1lbnRzXG4gICAgKSB7XG4gICAgICBjb25zdCBkYXRlTW9tZW50ID0gbW9tZW50KGNsb25lZFR4bi5kYXRlKTtcbiAgICAgIGNvbnN0IGFjdHVhbERhdGVNb21lbnQgPSBkYXRlTW9tZW50LmFkZChjbG9uZWRUeG4uaW5zdGFsbG1lbnRzLm51bWJlciAtIDEsICdtb250aCcpO1xuICAgICAgY2xvbmVkVHhuLmRhdGUgPSBhY3R1YWxEYXRlTW9tZW50LnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZWRUeG47XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydFRyYW5zYWN0aW9uc0J5RGF0ZSh0eG5zOiBUcmFuc2FjdGlvbltdKSB7XG4gIHJldHVybiBfLnNvcnRCeSh0eG5zLCBbJ2RhdGUnXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJPbGRUcmFuc2FjdGlvbnModHhuczogVHJhbnNhY3Rpb25bXSwgc3RhcnRNb21lbnQ6IE1vbWVudCwgY29tYmluZUluc3RhbGxtZW50czogYm9vbGVhbikge1xuICByZXR1cm4gdHhucy5maWx0ZXIodHhuID0+IHtcbiAgICBjb25zdCBjb21iaW5lTmVlZGVkQW5kSW5pdGlhbE9yTm9ybWFsID1cbiAgICAgIGNvbWJpbmVJbnN0YWxsbWVudHMgJiYgKGlzTm9ybWFsVHJhbnNhY3Rpb24odHhuKSB8fCBpc0luaXRpYWxJbnN0YWxsbWVudFRyYW5zYWN0aW9uKHR4bikpO1xuICAgIHJldHVybiAoXG4gICAgICAoIWNvbWJpbmVJbnN0YWxsbWVudHMgJiYgc3RhcnRNb21lbnQuaXNTYW1lT3JCZWZvcmUodHhuLmRhdGUpKSB8fFxuICAgICAgKGNvbWJpbmVOZWVkZWRBbmRJbml0aWFsT3JOb3JtYWwgJiYgc3RhcnRNb21lbnQuaXNTYW1lT3JCZWZvcmUodHhuLmRhdGUpKVxuICAgICk7XG4gIH0pO1xufVxuIl19
|
package/lib/helpers/waiting.js
CHANGED
|
@@ -1,60 +1,61 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
exports.TimeoutError = exports.SECOND = void 0;
|
|
7
|
-
exports.raceTimeout = raceTimeout;
|
|
8
|
-
exports.runSerial = runSerial;
|
|
9
|
-
exports.sleep = sleep;
|
|
10
|
-
exports.waitUntil = waitUntil;
|
|
11
|
-
require("core-js/modules/es.array.iterator.js");
|
|
12
|
-
require("core-js/modules/es.promise.js");
|
|
13
|
-
class TimeoutError extends Error {}
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sleep = exports.runSerial = exports.raceTimeout = exports.waitUntil = exports.SECOND = exports.TimeoutError = void 0;
|
|
4
|
+
class TimeoutError extends Error {
|
|
5
|
+
}
|
|
14
6
|
exports.TimeoutError = TimeoutError;
|
|
15
|
-
|
|
7
|
+
exports.SECOND = 1000;
|
|
16
8
|
function timeoutPromise(ms, promise, description) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
9
|
+
const timeout = new Promise((_, reject) => {
|
|
10
|
+
const id = setTimeout(() => {
|
|
11
|
+
clearTimeout(id);
|
|
12
|
+
const error = new TimeoutError(description);
|
|
13
|
+
reject(error);
|
|
14
|
+
}, ms);
|
|
15
|
+
});
|
|
16
|
+
return Promise.race([
|
|
17
|
+
promise,
|
|
18
|
+
// casting to avoid type error- safe since this promise will always reject
|
|
19
|
+
timeout,
|
|
20
|
+
]);
|
|
27
21
|
}
|
|
28
|
-
|
|
29
22
|
/**
|
|
30
23
|
* Wait until a promise resolves with a truthy value or reject after a timeout
|
|
31
24
|
*/
|
|
32
25
|
function waitUntil(asyncTest, description = '', timeout = 10000, interval = 100) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
26
|
+
const promise = new Promise((resolve, reject) => {
|
|
27
|
+
function wait() {
|
|
28
|
+
asyncTest()
|
|
29
|
+
.then(value => {
|
|
30
|
+
if (value) {
|
|
31
|
+
resolve(value);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
setTimeout(wait, interval);
|
|
35
|
+
}
|
|
36
|
+
})
|
|
37
|
+
.catch(() => {
|
|
38
|
+
reject();
|
|
39
|
+
});
|
|
40
40
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
wait();
|
|
46
|
-
});
|
|
47
|
-
return timeoutPromise(timeout, promise, description);
|
|
41
|
+
wait();
|
|
42
|
+
});
|
|
43
|
+
return timeoutPromise(timeout, promise, description);
|
|
48
44
|
}
|
|
45
|
+
exports.waitUntil = waitUntil;
|
|
49
46
|
function raceTimeout(ms, promise) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
return timeoutPromise(ms, promise, 'timeout').catch(err => {
|
|
48
|
+
if (!(err instanceof TimeoutError))
|
|
49
|
+
throw err;
|
|
50
|
+
});
|
|
53
51
|
}
|
|
52
|
+
exports.raceTimeout = raceTimeout;
|
|
54
53
|
function runSerial(actions) {
|
|
55
|
-
|
|
54
|
+
return actions.reduce((m, a) => m.then(async (x) => [...x, await a()]), Promise.resolve(new Array()));
|
|
56
55
|
}
|
|
56
|
+
exports.runSerial = runSerial;
|
|
57
57
|
function sleep(ms) {
|
|
58
|
-
|
|
58
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
59
59
|
}
|
|
60
|
-
|
|
60
|
+
exports.sleep = sleep;
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzL3dhaXRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBYSxZQUFhLFNBQVEsS0FBSztDQUFHO0FBQTFDLG9DQUEwQztBQUU3QixRQUFBLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFFM0IsU0FBUyxjQUFjLENBQUksRUFBVSxFQUFFLE9BQW1CLEVBQUUsV0FBbUI7SUFDN0UsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDeEMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN6QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ2xCLE9BQU87UUFDUCwwRUFBMEU7UUFDMUUsT0FBcUI7S0FDdEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFJLFNBQTJCLEVBQUUsV0FBVyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFLFFBQVEsR0FBRyxHQUFHO0lBQ3pHLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ2pELFNBQVMsSUFBSTtZQUNYLFNBQVMsRUFBRTtpQkFDUixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ1osSUFBSSxLQUFLLEVBQUU7b0JBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNoQjtxQkFBTTtvQkFDTCxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUM1QjtZQUNILENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLE1BQU0sRUFBRSxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQ0QsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQWxCRCw4QkFrQkM7QUFFRCxTQUFnQixXQUFXLENBQUMsRUFBVSxFQUFFLE9BQXFCO0lBQzNELE9BQU8sY0FBYyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3hELElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxZQUFZLENBQUM7WUFBRSxNQUFNLEdBQUcsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFKRCxrQ0FJQztBQUVELFNBQWdCLFNBQVMsQ0FBSSxPQUE2QjtJQUN4RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBTSxJQUFJLEtBQUssRUFBSyxDQUFDLENBQUMsQ0FBQztBQUM5RyxDQUFDO0FBRkQsOEJBRUM7QUFFRCxTQUFnQixLQUFLLENBQUMsRUFBVTtJQUM5QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFGRCxzQkFFQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG5leHBvcnQgY29uc3QgU0VDT05EID0gMTAwMDtcblxuZnVuY3Rpb24gdGltZW91dFByb21pc2U8VD4obXM6IG51bWJlciwgcHJvbWlzZTogUHJvbWlzZTxUPiwgZGVzY3JpcHRpb246IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICBjb25zdCB0aW1lb3V0ID0gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVGltZW91dEVycm9yKGRlc2NyaXB0aW9uKTtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfSwgbXMpO1xuICB9KTtcblxuICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcbiAgICBwcm9taXNlLFxuICAgIC8vIGNhc3RpbmcgdG8gYXZvaWQgdHlwZSBlcnJvci0gc2FmZSBzaW5jZSB0aGlzIHByb21pc2Ugd2lsbCBhbHdheXMgcmVqZWN0XG4gICAgdGltZW91dCBhcyBQcm9taXNlPFQ+LFxuICBdKTtcbn1cblxuLyoqXG4gKiBXYWl0IHVudGlsIGEgcHJvbWlzZSByZXNvbHZlcyB3aXRoIGEgdHJ1dGh5IHZhbHVlIG9yIHJlamVjdCBhZnRlciBhIHRpbWVvdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRVbnRpbDxUPihhc3luY1Rlc3Q6ICgpID0+IFByb21pc2U8VD4sIGRlc2NyaXB0aW9uID0gJycsIHRpbWVvdXQgPSAxMDAwMCwgaW50ZXJ2YWwgPSAxMDApIHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmdW5jdGlvbiB3YWl0KCkge1xuICAgICAgYXN5bmNUZXN0KClcbiAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQod2FpdCwgaW50ZXJ2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdhaXQoKTtcbiAgfSk7XG4gIHJldHVybiB0aW1lb3V0UHJvbWlzZSh0aW1lb3V0LCBwcm9taXNlLCBkZXNjcmlwdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYWNlVGltZW91dChtczogbnVtYmVyLCBwcm9taXNlOiBQcm9taXNlPGFueT4pIHtcbiAgcmV0dXJuIHRpbWVvdXRQcm9taXNlKG1zLCBwcm9taXNlLCAndGltZW91dCcpLmNhdGNoKGVyciA9PiB7XG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgVGltZW91dEVycm9yKSkgdGhyb3cgZXJyO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1blNlcmlhbDxUPihhY3Rpb25zOiAoKCkgPT4gUHJvbWlzZTxUPilbXSk6IFByb21pc2U8VFtdPiB7XG4gIHJldHVybiBhY3Rpb25zLnJlZHVjZSgobSwgYSkgPT4gbS50aGVuKGFzeW5jIHggPT4gWy4uLngsIGF3YWl0IGEoKV0pLCBQcm9taXNlLnJlc29sdmU8VFtdPihuZXcgQXJyYXk8VD4oKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG4iXX0=
|
package/lib/index.js
CHANGED
|
@@ -1,85 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
get: function () {
|
|
15
|
-
return _oneZero.default;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
Object.defineProperty(exports, "SCRAPERS", {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function () {
|
|
21
|
-
return _definitions.SCRAPERS;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
Object.defineProperty(exports, "ScaperLoginResult", {
|
|
25
|
-
enumerable: true,
|
|
26
|
-
get: function () {
|
|
27
|
-
return _interface.ScraperLoginResult;
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
Object.defineProperty(exports, "ScaperScrapingResult", {
|
|
31
|
-
enumerable: true,
|
|
32
|
-
get: function () {
|
|
33
|
-
return _interface.ScraperScrapingResult;
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
Object.defineProperty(exports, "Scraper", {
|
|
37
|
-
enumerable: true,
|
|
38
|
-
get: function () {
|
|
39
|
-
return _interface.Scraper;
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
Object.defineProperty(exports, "ScraperCredentials", {
|
|
43
|
-
enumerable: true,
|
|
44
|
-
get: function () {
|
|
45
|
-
return _interface.ScraperCredentials;
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
Object.defineProperty(exports, "ScraperLoginResult", {
|
|
49
|
-
enumerable: true,
|
|
50
|
-
get: function () {
|
|
51
|
-
return _interface.ScraperLoginResult;
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
Object.defineProperty(exports, "ScraperOptions", {
|
|
55
|
-
enumerable: true,
|
|
56
|
-
get: function () {
|
|
57
|
-
return _interface.ScraperOptions;
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
Object.defineProperty(exports, "ScraperScrapingResult", {
|
|
61
|
-
enumerable: true,
|
|
62
|
-
get: function () {
|
|
63
|
-
return _interface.ScraperScrapingResult;
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
Object.defineProperty(exports, "createScraper", {
|
|
67
|
-
enumerable: true,
|
|
68
|
-
get: function () {
|
|
69
|
-
return _factory.default;
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
exports.getPuppeteerConfig = getPuppeteerConfig;
|
|
73
|
-
var _definitions = require("./definitions");
|
|
74
|
-
var _factory = _interopRequireDefault(require("./scrapers/factory"));
|
|
75
|
-
var _interface = require("./scrapers/interface");
|
|
76
|
-
var _oneZero = _interopRequireDefault(require("./scrapers/one-zero"));
|
|
77
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
78
|
-
// Note: the typo ScaperScrapingResult & ScraperLoginResult (sic) are exported here for backward compatibility
|
|
79
|
-
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getPuppeteerConfig = exports.OneZeroScraper = exports.createScraper = exports.SCRAPERS = exports.CompanyTypes = void 0;
|
|
7
|
+
var definitions_1 = require("./definitions");
|
|
8
|
+
Object.defineProperty(exports, "CompanyTypes", { enumerable: true, get: function () { return definitions_1.CompanyTypes; } });
|
|
9
|
+
Object.defineProperty(exports, "SCRAPERS", { enumerable: true, get: function () { return definitions_1.SCRAPERS; } });
|
|
10
|
+
var factory_1 = require("./scrapers/factory");
|
|
11
|
+
Object.defineProperty(exports, "createScraper", { enumerable: true, get: function () { return __importDefault(factory_1).default; } });
|
|
12
|
+
var one_zero_1 = require("./scrapers/one-zero");
|
|
13
|
+
Object.defineProperty(exports, "OneZeroScraper", { enumerable: true, get: function () { return __importDefault(one_zero_1).default; } });
|
|
80
14
|
function getPuppeteerConfig() {
|
|
81
|
-
|
|
82
|
-
chromiumRevision: '1250580'
|
|
83
|
-
}; // https://github.com/puppeteer/puppeteer/releases/tag/puppeteer-core-v22.5.0
|
|
15
|
+
return { chromiumRevision: '1250580' }; // https://github.com/puppeteer/puppeteer/releases/tag/puppeteer-core-v22.5.0
|
|
84
16
|
}
|
|
85
|
-
|
|
17
|
+
exports.getPuppeteerConfig = getPuppeteerConfig;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkNBQXVEO0FBQTlDLDJHQUFBLFlBQVksT0FBQTtBQUFFLHVHQUFBLFFBQVEsT0FBQTtBQUMvQiw4Q0FBOEQ7QUFBckQseUhBQUEsT0FBTyxPQUFpQjtBQWFqQyxnREFBZ0U7QUFBdkQsMkhBQUEsT0FBTyxPQUFrQjtBQUVsQyxTQUFnQixrQkFBa0I7SUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsNkVBQTZFO0FBQ3ZILENBQUM7QUFGRCxnREFFQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENvbXBhbnlUeXBlcywgU0NSQVBFUlMgfSBmcm9tICcuL2RlZmluaXRpb25zJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlU2NyYXBlciB9IGZyb20gJy4vc2NyYXBlcnMvZmFjdG9yeSc7XG5cbi8vIE5vdGU6IHRoZSB0eXBvIFNjYXBlclNjcmFwaW5nUmVzdWx0ICYgU2NyYXBlckxvZ2luUmVzdWx0IChzaWMpIGFyZSBleHBvcnRlZCBoZXJlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5leHBvcnQge1xuICBTY3JhcGVyTG9naW5SZXN1bHQgYXMgU2NhcGVyTG9naW5SZXN1bHQsXG4gIFNjcmFwZXJTY3JhcGluZ1Jlc3VsdCBhcyBTY2FwZXJTY3JhcGluZ1Jlc3VsdCxcbiAgU2NyYXBlcixcbiAgU2NyYXBlckNyZWRlbnRpYWxzLFxuICBTY3JhcGVyTG9naW5SZXN1bHQsXG4gIFNjcmFwZXJPcHRpb25zLFxuICBTY3JhcGVyU2NyYXBpbmdSZXN1bHQsXG59IGZyb20gJy4vc2NyYXBlcnMvaW50ZXJmYWNlJztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBPbmVaZXJvU2NyYXBlciB9IGZyb20gJy4vc2NyYXBlcnMvb25lLXplcm8nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHVwcGV0ZWVyQ29uZmlnKCkge1xuICByZXR1cm4geyBjaHJvbWl1bVJldmlzaW9uOiAnMTI1MDU4MCcgfTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3B1cHBldGVlci9wdXBwZXRlZXIvcmVsZWFzZXMvdGFnL3B1cHBldGVlci1jb3JlLXYyMi41LjBcbn1cbiJdfQ==
|
package/lib/scrapers/amex.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
|
|
7
|
-
var _baseIsracardAmex = _interopRequireDefault(require("./base-isracard-amex"));
|
|
8
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const base_isracard_amex_1 = __importDefault(require("./base-isracard-amex"));
|
|
9
7
|
const BASE_URL = 'https://he.americanexpress.co.il';
|
|
10
8
|
const COMPANY_CODE = '77';
|
|
11
|
-
class AmexScraper extends
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
class AmexScraper extends base_isracard_amex_1.default {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
super(options, BASE_URL, COMPANY_CODE);
|
|
12
|
+
}
|
|
15
13
|
}
|
|
16
|
-
|
|
17
|
-
//# sourceMappingURL=data:application/json;
|
|
14
|
+
exports.default = AmexScraper;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1leC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9hbWV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOEVBQTJEO0FBRzNELE1BQU0sUUFBUSxHQUFHLGtDQUFrQyxDQUFDO0FBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztBQUUxQixNQUFNLFdBQVksU0FBUSw0QkFBdUI7SUFDL0MsWUFBWSxPQUF1QjtRQUNqQyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUFFRCxrQkFBZSxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSXNyYWNhcmRBbWV4QmFzZVNjcmFwZXIgZnJvbSAnLi9iYXNlLWlzcmFjYXJkLWFtZXgnO1xuaW1wb3J0IHsgdHlwZSBTY3JhcGVyT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY29uc3QgQkFTRV9VUkwgPSAnaHR0cHM6Ly9oZS5hbWVyaWNhbmV4cHJlc3MuY28uaWwnO1xuY29uc3QgQ09NUEFOWV9DT0RFID0gJzc3JztcblxuY2xhc3MgQW1leFNjcmFwZXIgZXh0ZW5kcyBJc3JhY2FyZEFtZXhCYXNlU2NyYXBlciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFNjcmFwZXJPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucywgQkFTRV9VUkwsIENPTVBBTllfQ09ERSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQW1leFNjcmFwZXI7XG4iXX0=
|