israeli-bank-scrapers
Version:
Provide scrapers for all major Israeli banks and credit card companies
91 lines (84 loc) • 12.5 kB
JavaScript
;
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
triggerTwoFactorAuth(_phoneNumber) {
throw new Error(`triggerTwoFactorAuth() is not created in ${this.options.companyId}`);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
getLongTermTwoFactorToken(_otpCode) {
throw new Error(`getLongTermTwoFactorToken() 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/IGNyZWF0ZVRpbWVvdXRFcnJvcigoZSBhcyBFcnJvcikubWVzc2FnZSkgOiBjcmVhdGVHZW5lcmljRXJyb3IoKGUgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGxldCBzY3JhcGVSZXN1bHQ7XG4gICAgaWYgKGxvZ2luUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNjcmFwZVJlc3VsdCA9IGF3YWl0IHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNjcmFwZVJlc3VsdCA9XG4gICAgICAgICAgZSBpbnN0YW5jZW9mIFRpbWVvdXRFcnJvclxuICAgICAgICAgICAgPyBjcmVhdGVUaW1lb3V0RXJyb3IoKGUgYXMgRXJyb3IpLm1lc3NhZ2UpXG4gICAgICAgICAgICA6IGNyZWF0ZUdlbmVyaWNFcnJvcigoZSBhcyBFcnJvcikubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjcmFwZVJlc3VsdCA9IGxvZ2luUmVzdWx0O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gc2NyYXBlUmVzdWx0ICYmIHNjcmFwZVJlc3VsdC5zdWNjZXNzID09PSB0cnVlO1xuICAgICAgYXdhaXQgdGhpcy50ZXJtaW5hdGUoc3VjY2Vzcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2NyYXBlUmVzdWx0ID0gY3JlYXRlR2VuZXJpY0Vycm9yKChlIGFzIEVycm9yKS5tZXNzYWdlKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuRW5kU2NyYXBpbmcpO1xuXG4gICAgcmV0dXJuIHNjcmFwZVJlc3VsdDtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgdHJpZ2dlclR3b0ZhY3RvckF1dGgoX3Bob25lTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPFNjcmFwZXJUd29GYWN0b3JBdXRoVHJpZ2dlclJlc3VsdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcihgdHJpZ2dlclR3b0ZhY3RvckF1dGgoKSBpcyBub3QgY3JlYXRlZCBpbiAke3RoaXMub3B0aW9ucy5jb21wYW55SWR9YCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGdldExvbmdUZXJtVHdvRmFjdG9yVG9rZW4oX290cENvZGU6IHN0cmluZyk6IFByb21pc2U8U2NyYXBlckdldExvbmdUZXJtVHdvRmFjdG9yVG9rZW5SZXN1bHQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGdldExvbmdUZXJtVHdvRmFjdG9yVG9rZW4oKSBpcyBub3QgY3JlYXRlZCBpbiAke3RoaXMub3B0aW9ucy5jb21wYW55SWR9YCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvcmVxdWlyZS1hd2FpdFxuICBwcm90ZWN0ZWQgYXN5bmMgbG9naW4oX2NyZWRlbnRpYWxzOiBUQ3JlZGVudGlhbHMpOiBQcm9taXNlPFNjcmFwZXJMb2dpblJlc3VsdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcihgbG9naW4oKSBpcyBub3QgY3JlYXRlZCBpbiAke3RoaXMub3B0aW9ucy5jb21wYW55SWR9YCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG4gIHByb3RlY3RlZCBhc3luYyBmZXRjaERhdGEoKTogUHJvbWlzZTxTY3JhcGVyU2NyYXBpbmdSZXN1bHQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZldGNoRGF0YSgpIGlzIG5vdCBjcmVhdGVkIGluICR7dGhpcy5vcHRpb25zLmNvbXBhbnlJZH1gKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG4gIHByb3RlY3RlZCBhc3luYyB0ZXJtaW5hdGUoX3N1Y2Nlc3M6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5UZXJtaW5hdGluZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdFByb2dyZXNzKHR5cGU6IFNjcmFwZXJQcm9ncmVzc1R5cGVzKSB7XG4gICAgdGhpcy5lbWl0KFNDUkFQRV9QUk9HUkVTUywgeyB0eXBlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXQoZXZlbnROYW1lOiBzdHJpbmcsIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KGV2ZW50TmFtZSwgdGhpcy5vcHRpb25zLmNvbXBhbnlJZCwgcGF5bG9hZCk7XG4gIH1cblxuICBvblByb2dyZXNzKGZ1bmM6IChjb21wYW55SWQ6IENvbXBhbnlUeXBlcywgcGF5bG9hZDogeyB0eXBlOiBTY3JhcGVyUHJvZ3Jlc3NUeXBlcyB9KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oU0NSQVBFX1BST0dSRVNTLCBmdW5jKTtc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