# eshaham/israeli-bank-scrapers architecture

> Architecture diagram of the GitHub repository eshaham/israeli-bank-scrapers, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/eshaham/israeli-bank-scrapers
- Repository: https://github.com/eshaham/israeli-bank-scrapers

## Overview

This is a Node.js library that logs into Israeli bank and card-provider sites, gathers account and transaction data, and returns normalized results. The principal flow is a consumer creating a scraper for a company, supplying credentials, and calling scrape; the selected scraper handles provider access and produces the result. Browser-based and API-oriented implementations share common scraping and transaction utilities. The README documents support across banks, card issuers, experimental OneZero, and two-factor authentication. Edges use the README or indexed source references; some provider-specific behavior is unsampled, so uncertain links are omitted.

Main entry points: [`src/scrapers/factory.ts`](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/factory.ts) (Scraper Factory), [`src/scrapers/visa-cal.ts`](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/visa-cal.ts) (Visa Cal Scraper), [`src/scrapers/base-scraper-with-browser.ts`](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/base-scraper-with-browser.ts) (Browser Session), [`src/scrapers/leumi/leumi.ts`](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/leumi/leumi.ts) (Leumi Scraper)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Public API"]
  node_public["Public Exports<br/>[index.ts]"]
  node_metadata["Company Metadata<br/>[definitions.ts]"]
end

subgraph group_runtime["Scraper Runtime"]
  node_factory["Scraper Factory<br/>[factory.ts]"]
  node_interface["Scraper Options<br/>[interface.ts]"]
  node_base["Scraper Lifecycle<br/>[base-scraper.ts]"]
  node_browser["Browser Session"]
  node_fetch["HTTP Helpers<br/>[fetch.ts]"]
  node_elements["Page Interactions"]
  node_navigation["Navigation Helpers<br/>[navigation.ts]"]
  node_waiting["Wait Utilities<br/>[waiting.ts]"]
end

subgraph group_providers["Provider Scrapers"]
  node_bankcore["Bank Scrapers"]
  node_cardcore["Card Scrapers"]
  node_leumi["Leumi Scraper<br/>[leumi.ts]"]
  node_max["Max Scraper<br/>[max.ts]"]
  node_mizrahi["Mizrahi Scraper<br/>[mizrahi.ts]"]
  node_visa["Visa Cal Scraper<br/>[visa-cal.ts]"]
  node_onezero["OneZero Scraper<br/>[one-zero.ts]"]
  node_onezeroqueries["OneZero Queries"]
end

subgraph group_domain["Shared Domain"]
  node_models["Transaction Models<br/>[transactions.ts]"]
  node_transform["Transaction Helpers<br/>[transactions.ts]"]
end

node_consumer(("Library Consumer"))
node_browserlib["Puppeteer Browser"]
node_provider["Financial Providers"]

node_consumer -->|"imports"| node_public
node_public -->|"exports"| node_factory
node_public -->|"exports"| node_metadata
node_consumer -->|"selects company"| node_factory
node_factory -->|"selects scraper"| node_bankcore
node_factory -->|"selects scraper"| node_cardcore
node_factory -->|"constructs"| node_leumi
node_factory -->|"constructs"| node_max
node_factory -->|"constructs"| node_mizrahi
node_factory -->|"constructs"| node_visa
node_factory -->|"constructs"| node_onezero
node_consumer -->|"configures"| node_interface
node_leumi -->|"extends"| node_browser
node_max -->|"extends"| node_browser
node_mizrahi -->|"extends"| node_browser
node_visa -->|"extends"| node_browser
node_onezero -->|"extends"| node_base
node_browser -->|"drives"| node_browserlib
node_browser -->|"uses"| node_elements
node_browser -->|"uses"| node_navigation
node_elements -->|"waits with"| node_waiting
node_navigation -->|"waits with"| node_waiting
node_leumi -.->|"scrapes"| node_provider
node_max -.->|"scrapes"| node_provider
node_visa -.->|"scrapes"| node_provider
node_onezero -.->|"scrapes"| node_provider
node_leumi -->|"uses"| node_fetch
node_max -->|"uses"| node_fetch
node_mizrahi -->|"uses"| node_fetch
node_visa -->|"requests with"| node_fetch
node_onezero -->|"uses"| node_fetch
node_onezero -->|"uses queries"| node_onezeroqueries
node_visa -->|"interacts with"| node_elements
node_leumi -->|"uses"| node_transform
node_max -->|"uses"| node_transform
node_mizrahi -->|"uses"| node_transform
node_visa -->|"filters with"| node_transform
node_onezero -->|"uses"| node_transform
node_transform -->|"transforms"| node_models
node_leumi -->|"returns accounts"| node_models
node_max -->|"returns accounts"| node_models
node_visa -->|"returns accounts"| node_models

click node_public "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/index.ts"
click node_metadata "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/definitions.ts"
click node_factory "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/factory.ts"
click node_interface "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/interface.ts"
click node_base "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/base-scraper.ts"
click node_browser "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/base-scraper-with-browser.ts"
click node_bankcore "https://github.com/eshaham/israeli-bank-scrapers/tree/master/src/scrapers"
click node_cardcore "https://github.com/eshaham/israeli-bank-scrapers/tree/master/src/scrapers"
click node_leumi "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/leumi/leumi.ts"
click node_max "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/max.ts"
click node_mizrahi "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/mizrahi.ts"
click node_visa "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/visa-cal.ts"
click node_onezero "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/one-zero.ts"
click node_onezeroqueries "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/one-zero-queries.ts"
click node_models "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/transactions.ts"
click node_transform "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/helpers/transactions.ts"
click node_fetch "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/helpers/fetch.ts"
click node_elements "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/helpers/elements-interactions.ts"
click node_navigation "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/helpers/navigation.ts"
click node_waiting "https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/helpers/waiting.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_public,node_metadata,node_browserlib toneBlue
class node_factory,node_interface,node_base,node_browser,node_fetch,node_elements,node_navigation,node_waiting toneAmber
class node_bankcore,node_cardcore,node_leumi,node_max,node_mizrahi,node_visa,node_onezero,node_onezeroqueries toneMint
class node_models,node_transform toneRose
class node_consumer,node_provider toneIndigo
```

## Components

### Public API

- [Public Exports](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/index.ts): `src/index.ts`
- [Company Metadata](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/definitions.ts): `src/definitions.ts`

### Scraper Runtime

- [Scraper Factory](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/factory.ts): `src/scrapers/factory.ts`
- [Scraper Options](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/interface.ts): `src/scrapers/interface.ts`
- [Scraper Lifecycle](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/base-scraper.ts): `src/scrapers/base-scraper.ts`
- [Browser Session](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/base-scraper-with-browser.ts): `src/scrapers/base-scraper-with-browser.ts`
- [HTTP Helpers](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/helpers/fetch.ts): `src/helpers/fetch.ts`
- [Page Interactions](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/helpers/elements-interactions.ts): `src/helpers/elements-interactions.ts`
- [Navigation Helpers](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/helpers/navigation.ts): `src/helpers/navigation.ts`
- [Wait Utilities](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/helpers/waiting.ts): `src/helpers/waiting.ts`

### Provider Scrapers

- [Bank Scrapers](https://github.com/eshaham/israeli-bank-scrapers/tree/master/src/scrapers): `src/scrapers`
- [Card Scrapers](https://github.com/eshaham/israeli-bank-scrapers/tree/master/src/scrapers): `src/scrapers`
- [Leumi Scraper](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/leumi/leumi.ts): `src/scrapers/leumi/leumi.ts`
- [Max Scraper](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/max.ts): `src/scrapers/max.ts`
- [Mizrahi Scraper](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/mizrahi.ts): `src/scrapers/mizrahi.ts`
- [Visa Cal Scraper](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/visa-cal.ts): `src/scrapers/visa-cal.ts`
- [OneZero Scraper](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/one-zero.ts): `src/scrapers/one-zero.ts`
- [OneZero Queries](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/scrapers/one-zero-queries.ts): `src/scrapers/one-zero-queries.ts`

### Shared Domain

- [Transaction Models](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/transactions.ts): `src/transactions.ts`
- [Transaction Helpers](https://github.com/eshaham/israeli-bank-scrapers/blob/master/src/helpers/transactions.ts): `src/helpers/transactions.ts`

### Other components

- **Library Consumer**
- **Puppeteer Browser**
- **Financial Providers**

## Connections

- Library Consumer → Public Exports: imports
- Public Exports → Scraper Factory: exports (evidence: `src/index.ts`)
- Public Exports → Company Metadata: exports (evidence: `src/index.ts`)
- Library Consumer → Scraper Factory: selects company
- Scraper Factory → Bank Scrapers: selects scraper (evidence: `src/scrapers/factory.ts`)
- Scraper Factory → Card Scrapers: selects scraper (evidence: `src/scrapers/factory.ts`)
- Scraper Factory → Leumi Scraper: constructs (evidence: `src/scrapers/factory.ts`)
- Scraper Factory → Max Scraper: constructs (evidence: `src/scrapers/factory.ts`)
- Scraper Factory → Mizrahi Scraper: constructs (evidence: `src/scrapers/factory.ts`)
- Scraper Factory → Visa Cal Scraper: constructs (evidence: `src/scrapers/factory.ts`)
- Scraper Factory → OneZero Scraper: constructs (evidence: `src/scrapers/factory.ts`)
- Library Consumer → Scraper Options: configures
- Leumi Scraper → Browser Session: extends (evidence: `src/scrapers/leumi/leumi.ts`)
- Max Scraper → Browser Session: extends (evidence: `src/scrapers/max.ts`)
- Mizrahi Scraper → Browser Session: extends (evidence: `src/scrapers/mizrahi.ts`)
- Visa Cal Scraper → Browser Session: extends (evidence: `src/scrapers/visa-cal.ts`)
- OneZero Scraper → Scraper Lifecycle: extends (evidence: `src/scrapers/one-zero.ts`)
- Browser Session → Puppeteer Browser: drives (evidence: `src/scrapers/base-scraper-with-browser.ts`)
- Browser Session → Page Interactions: uses (evidence: `src/scrapers/base-scraper-with-browser.ts`)
- Browser Session → Navigation Helpers: uses (evidence: `src/scrapers/base-scraper-with-browser.ts`)
- Page Interactions → Wait Utilities: waits with (evidence: `src/helpers/elements-interactions.ts`)
- Navigation Helpers → Wait Utilities: waits with (evidence: `src/helpers/navigation.ts`)
- Leumi Scraper → Financial Providers: scrapes
- Max Scraper → Financial Providers: scrapes
- Visa Cal Scraper → Financial Providers: scrapes
- OneZero Scraper → Financial Providers: scrapes
- Leumi Scraper → HTTP Helpers: uses (evidence: `src/scrapers/leumi/leumi.ts`)
- Max Scraper → HTTP Helpers: uses (evidence: `src/scrapers/max.ts`)
- Mizrahi Scraper → HTTP Helpers: uses (evidence: `src/scrapers/mizrahi.ts`)
- Visa Cal Scraper → HTTP Helpers: requests with (evidence: `src/scrapers/visa-cal.ts`)
- OneZero Scraper → HTTP Helpers: uses (evidence: `src/scrapers/one-zero.ts`)
- OneZero Scraper → OneZero Queries: uses queries (evidence: `src/scrapers/one-zero.ts`)
- Visa Cal Scraper → Page Interactions: interacts with (evidence: `src/scrapers/visa-cal.ts`)
- Leumi Scraper → Transaction Helpers: uses (evidence: `src/scrapers/leumi/leumi.ts`)
- Max Scraper → Transaction Helpers: uses (evidence: `src/scrapers/max.ts`)
- Mizrahi Scraper → Transaction Helpers: uses (evidence: `src/scrapers/mizrahi.ts`)
- Visa Cal Scraper → Transaction Helpers: filters with (evidence: `src/scrapers/visa-cal.ts`)
- OneZero Scraper → Transaction Helpers: uses (evidence: `src/scrapers/one-zero.ts`)
- Transaction Helpers → Transaction Models: transforms (evidence: `src/helpers/transactions.ts`)
- Leumi Scraper → Transaction Models: returns accounts (evidence: `src/scrapers/leumi/leumi.ts`)
- Max Scraper → Transaction Models: returns accounts (evidence: `src/scrapers/max.ts`)
- Visa Cal Scraper → Transaction Models: returns accounts (evidence: `src/scrapers/visa-cal.ts`)
