UNPKG

israeli-bank-scrapers

Version:

Provide scrapers for all major Israeli banks and credit card companies

91 lines (84 loc) 12.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseScraper = void 0; var _events = require("events"); var _momentTimezone = _interopRequireDefault(require("moment-timezone")); var _definitions = require("../definitions"); var _waiting = require("../helpers/waiting"); var _errors = require("./errors"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const SCRAPE_PROGRESS = 'SCRAPE_PROGRESS'; class BaseScraper { eventEmitter = new _events.EventEmitter(); constructor(options) { this.options = options; } // eslint-disable-next-line @typescript-eslint/require-await async initialize() { this.emitProgress(_definitions.ScraperProgressTypes.Initializing); _momentTimezone.default.tz.setDefault('Asia/Jerusalem'); } async scrape(credentials) { this.emitProgress(_definitions.ScraperProgressTypes.StartScraping); await this.initialize(); let loginResult; try { loginResult = await this.login(credentials); } catch (e) { loginResult = e instanceof _waiting.TimeoutError ? (0, _errors.createTimeoutError)(e.message) : (0, _errors.createGenericError)(e.message); } let scrapeResult; if (loginResult.success) { try { scrapeResult = await this.fetchData(); } catch (e) { scrapeResult = e instanceof _waiting.TimeoutError ? (0, _errors.createTimeoutError)(e.message) : (0, _errors.createGenericError)(e.message); } } else { scrapeResult = loginResult; } try { const success = scrapeResult && scrapeResult.success === true; await this.terminate(success); } catch (e) { scrapeResult = (0, _errors.createGenericError)(e.message); } this.emitProgress(_definitions.ScraperProgressTypes.EndScraping); return scrapeResult; } // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await triggerTwoFactorAuth(_phoneNumber) { throw new Error(`triggerOtp() is not created in ${this.options.companyId}`); } // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await getLongTermTwoFactorToken(_otpCode) { throw new Error(`getPermanentOtpToken() is not created in ${this.options.companyId}`); } // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await async login(_credentials) { throw new Error(`login() is not created in ${this.options.companyId}`); } // eslint-disable-next-line @typescript-eslint/require-await async fetchData() { throw new Error(`fetchData() is not created in ${this.options.companyId}`); } // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await async terminate(_success) { this.emitProgress(_definitions.ScraperProgressTypes.Terminating); } emitProgress(type) { this.emit(SCRAPE_PROGRESS, { type }); } emit(eventName, payload) { this.eventEmitter.emit(eventName, this.options.companyId, payload); } onProgress(func) { this.eventEmitter.on(SCRAPE_PROGRESS, func); } } exports.BaseScraper = BaseScraper; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9tb21lbnRUaW1lem9uZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZGVmaW5pdGlvbnMiLCJfd2FpdGluZyIsIl9lcnJvcnMiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJTQ1JBUEVfUFJPR1JFU1MiLCJCYXNlU2NyYXBlciIsImV2ZW50RW1pdHRlciIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImluaXRpYWxpemUiLCJlbWl0UHJvZ3Jlc3MiLCJTY3JhcGVyUHJvZ3Jlc3NUeXBlcyIsIkluaXRpYWxpemluZyIsIm1vbWVudCIsInR6Iiwic2V0RGVmYXVsdCIsInNjcmFwZSIsImNyZWRlbnRpYWxzIiwiU3RhcnRTY3JhcGluZyIsImxvZ2luUmVzdWx0IiwibG9naW4iLCJUaW1lb3V0RXJyb3IiLCJjcmVhdGVUaW1lb3V0RXJyb3IiLCJtZXNzYWdlIiwiY3JlYXRlR2VuZXJpY0Vycm9yIiwic2NyYXBlUmVzdWx0Iiwic3VjY2VzcyIsImZldGNoRGF0YSIsInRlcm1pbmF0ZSIsIkVuZFNjcmFwaW5nIiwidHJpZ2dlclR3b0ZhY3RvckF1dGgiLCJfcGhvbmVOdW1iZXIiLCJFcnJvciIsImNvbXBhbnlJZCIsImdldExvbmdUZXJtVHdvRmFjdG9yVG9rZW4iLCJfb3RwQ29kZSIsIl9jcmVkZW50aWFscyIsIl9zdWNjZXNzIiwiVGVybWluYXRpbmciLCJ0eXBlIiwiZW1pdCIsImV2ZW50TmFtZSIsInBheWxvYWQiLCJvblByb2dyZXNzIiwiZnVuYyIsIm9uIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9iYXNlLXNjcmFwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCB7IHR5cGUgQ29tcGFueVR5cGVzLCBTY3JhcGVyUHJvZ3Jlc3NUeXBlcyB9IGZyb20gJy4uL2RlZmluaXRpb25zJztcbmltcG9ydCB7IFRpbWVvdXRFcnJvciB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdGluZyc7XG5pbXBvcnQgeyBjcmVhdGVHZW5lcmljRXJyb3IsIGNyZWF0ZVRpbWVvdXRFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7XG4gIHR5cGUgU2NyYXBlcixcbiAgdHlwZSBTY3JhcGVyQ3JlZGVudGlhbHMsXG4gIHR5cGUgU2NyYXBlckdldExvbmdUZXJtVHdvRmFjdG9yVG9rZW5SZXN1bHQsXG4gIHR5cGUgU2NyYXBlckxvZ2luUmVzdWx0LFxuICB0eXBlIFNjcmFwZXJPcHRpb25zLFxuICB0eXBlIFNjcmFwZXJTY3JhcGluZ1Jlc3VsdCxcbiAgdHlwZSBTY3JhcGVyVHdvRmFjdG9yQXV0aFRyaWdnZXJSZXN1bHQsXG59IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY29uc3QgU0NSQVBFX1BST0dSRVNTID0gJ1NDUkFQRV9QUk9HUkVTUyc7XG5cbmV4cG9ydCBjbGFzcyBCYXNlU2NyYXBlcjxUQ3JlZGVudGlhbHMgZXh0ZW5kcyBTY3JhcGVyQ3JlZGVudGlhbHM+IGltcGxlbWVudHMgU2NyYXBlcjxUQ3JlZGVudGlhbHM+IHtcbiAgcHJpdmF0ZSBldmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIG9wdGlvbnM6IFNjcmFwZXJPcHRpb25zKSB7fVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcbiAgYXN5bmMgaW5pdGlhbGl6ZSgpIHtcbiAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5Jbml0aWFsaXppbmcpO1xuICAgIG1vbWVudC50ei5zZXREZWZhdWx0KCdBc2lhL0plcnVzYWxlbScpO1xuICB9XG5cbiAgYXN5bmMgc2NyYXBlKGNyZWRlbnRpYWxzOiBUQ3JlZGVudGlhbHMpOiBQcm9taXNlPFNjcmFwZXJTY3JhcGluZ1Jlc3VsdD4ge1xuICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLlN0YXJ0U2NyYXBpbmcpO1xuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpO1xuXG4gICAgbGV0IGxvZ2luUmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICBsb2dpblJlc3VsdCA9IGF3YWl0IHRoaXMubG9naW4oY3JlZGVudGlhbHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2luUmVzdWx0ID1cbiAgICAgICAgZSBpbnN0YW5jZW9mIFRpbWVvdXRFcnJvciA/IGNyZWF0ZVRpbWVvdXRFcnJvcigoZSBhcyBFcnJvcikubWVzc2FnZSkgOiBjcmVhdGVHZW5lcmljRXJyb3IoKGUgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGxldCBzY3JhcGVSZXN1bHQ7XG4gICAgaWYgKGxvZ2luUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNjcmFwZVJlc3VsdCA9IGF3YWl0IHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNjcmFwZVJlc3VsdCA9XG4gICAgICAgICAgZSBpbnN0YW5jZW9mIFRpbWVvdXRFcnJvclxuICAgICAgICAgICAgPyBjcmVhdGVUaW1lb3V0RXJyb3IoKGUgYXMgRXJyb3IpLm1lc3NhZ2UpXG4gICAgICAgICAgICA6IGNyZWF0ZUdlbmVyaWNFcnJvcigoZSBhcyBFcnJvcikubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjcmFwZVJlc3VsdCA9IGxvZ2luUmVzdWx0O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gc2NyYXBlUmVzdWx0ICYmIHNjcmFwZVJlc3VsdC5zdWNjZXNzID09PSB0cnVlO1xuICAgICAgYXdhaXQgdGhpcy50ZXJtaW5hdGUoc3VjY2Vzcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2NyYXBlUmVzdWx0ID0gY3JlYXRlR2VuZXJpY0Vycm9yKChlIGFzIEVycm9yKS5tZXNzYWdlKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuRW5kU2NyYXBpbmcpO1xuXG4gICAgcmV0dXJuIHNjcmFwZVJlc3VsdDtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG4gIHRyaWdnZXJUd29GYWN0b3JBdXRoKF9waG9uZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxTY3JhcGVyVHdvRmFjdG9yQXV0aFRyaWdnZXJSZXN1bHQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHRyaWdnZXJPdHAoKSBpcyBub3QgY3JlYXRlZCBpbiAke3RoaXMub3B0aW9ucy5jb21wYW55SWR9YCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvcmVxdWlyZS1hd2FpdFxuICBnZXRMb25nVGVybVR3b0ZhY3RvclRva2VuKF9vdHBDb2RlOiBzdHJpbmcpOiBQcm9taXNlPFNjcmFwZXJHZXRMb25nVGVybVR3b0ZhY3RvclRva2VuUmVzdWx0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBnZXRQZXJtYW5lbnRPdHBUb2tlbigpIGlzIG5vdCBjcmVhdGVkIGluICR7dGhpcy5vcHRpb25zLmNvbXBhbnlJZH1gKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG4gIHByb3RlY3RlZCBhc3luYyBsb2dpbihfY3JlZGVudGlhbHM6IFRDcmVkZW50aWFscyk6IFByb21pc2U8U2NyYXBlckxvZ2luUmVzdWx0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBsb2dpbigpIGlzIG5vdCBjcmVhdGVkIGluICR7dGhpcy5vcHRpb25zLmNvbXBhbnlJZH1gKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcbiAgcHJvdGVjdGVkIGFzeW5jIGZldGNoRGF0YSgpOiBQcm9taXNlPFNjcmFwZXJTY3JhcGluZ1Jlc3VsdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcihgZmV0Y2hEYXRhKCkgaXMgbm90IGNyZWF0ZWQgaW4gJHt0aGlzLm9wdGlvbnMuY29tcGFueUlkfWApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcbiAgcHJvdGVjdGVkIGFzeW5jIHRlcm1pbmF0ZShfc3VjY2VzczogYm9vbGVhbikge1xuICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLlRlcm1pbmF0aW5nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbWl0UHJvZ3Jlc3ModHlwZTogU2NyYXBlclByb2dyZXNzVHlwZXMpIHtcbiAgICB0aGlzLmVtaXQoU0NSQVBFX1BST0dSRVNTLCB7IHR5cGUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdChldmVudE5hbWU6IHN0cmluZywgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoZXZlbnROYW1lLCB0aGlzLm9wdGlvbnMuY29tcGFueUlkLCBwYXlsb2FkKTtcbiAgfVxuXG4gIG9uUHJvZ3Jlc3MoZnVuYzogKGNvbXBhbnlJZDogQ29tcGFueVR5cGVzLCBwYXlsb2FkOiB7IHR5cGU6IFNjcmFwZXJQcm9ncmVzc1R5cGVzIH0pID0+IHZvaWQpIHtcbiAgICB0aGlzLmV2ZW50RW1pdHRlci5vbihTQ1JBUEVfUFJPR1JFU1MsIGZ1bmMpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFlBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFFBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUFrRSxTQUFBRSx1QkFBQUksQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQVdsRSxNQUFNRyxlQUFlLEdBQUcsaUJBQWlCO0FBRWxDLE1BQU1DLFdBQVcsQ0FBMkU7RUFDekZDLFlBQVksR0FBRyxJQUFJQyxvQkFBWSxDQUFDLENBQUM7RUFFekNDLFdBQVdBLENBQVFDLE9BQXVCLEVBQUU7SUFBQSxLQUF6QkEsT0FBdUIsR0FBdkJBLE9BQXVCO0VBQUc7O0VBRTdDO0VBQ0EsTUFBTUMsVUFBVUEsQ0FBQSxFQUFHO0lBQ2pCLElBQUksQ0FBQ0MsWUFBWSxDQUFDQyxpQ0FBb0IsQ0FBQ0MsWUFBWSxDQUFDO0lBQ3BEQyx1QkFBTSxDQUFDQyxFQUFFLENBQUNDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztFQUN4QztFQUVBLE1BQU1DLE1BQU1BLENBQUNDLFdBQXlCLEVBQWtDO0lBQ3RFLElBQUksQ0FBQ1AsWUFBWSxDQUFDQyxpQ0FBb0IsQ0FBQ08sYUFBYSxDQUFDO0lBQ3JELE1BQU0sSUFBSSxDQUFDVCxVQUFVLENBQUMsQ0FBQztJQUV2QixJQUFJVSxXQUFXO0lBQ2YsSUFBSTtNQUNGQSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUNDLEtBQUssQ0FBQ0gsV0FBVyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxPQUFPakIsQ0FBQyxFQUFFO01BQ1ZtQixXQUFXLEdBQ1RuQixDQUFDLFlBQVlxQixxQkFBWSxHQUFHLElB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