Logo Lanfrica

oneshotEFA/verification-engine

Domain:

digital infrastructure

Record type:

software
Creator:
one
Host:
A TypeScript engine for verifying Ethiopian bank transfer receipts — supports CBE, Telebirr, Bank of Abyssinia, and E-Birr via receipt links, SMS, transaction references, and OCR screenshots. No framework dependencies # @localpay/verification-engine **Bank receipt verification engine for Ethiopian and East African banks** Verify Ethiopian bank transfer receipts in real time. Supports SMS, receipt links, transaction references, and OCR screenshots. Zero framework dependencies — works in any Node.js project. Installation · Quick Start · Supported Banks · Verification Methods · URL Validation · Proxy Support · Adding a Bank · NestJS --- ## Features - 🏦 **5 Ethiopian banks** — CBE, Telebirr, Bank of Abyssinia, E-Birr, Awash Bank - 🔗 **5 verification methods** — LINK, SMS, TRANSACTION_REF, OCR, SCREENSHOT - 🛡️ **Automatic URL validation** — domain allowlist + structural checks before any network call - 🌍 **Proxy support** — per-country routing via a simple interface - ✅ **Amount matching** — configurable tolerance, strips currency symbols and commas automatically - 🔌 **Zero framework lock-in** — plain TypeScript, no NestJS, no Prisma - 🧩 **Extensible** — add any bank parser by implementing one interface - 📦 **Tree-shakeable** — `sideEffects: false` --- ## Installation ```bash npm install @localpay/verification-engine ``` > **Optional:** Install `puppeteer` only if you verify **Telebirr** or **Bank of Abyssinia** > receipts — those banks serve JavaScript-rendered pages requiring a headless browser. ```bash npm install puppeteer ``` Requires **Node.js ≥ 20**. --- ## Quick Start ```ts import { VerificationEngine } from "@localpay/verification-engine"; const engine = new VerificationEngine(); const result = await engine.verify({ bank: "CBE", amount: 500, verMethod: "LINK", rawProof: "apps.cbe.com.et", }); if (result.status === "SUCCESS") { console.log(result.receipt.bank); // "CBE" console.log(result.receipt.transactionNumber); // "FT26093JCD32..." console.log(result.receipt.amount); // "500" console.log(result.receipt.receiverAccount); // account number console.log(result.receipt.receiverN …

Languages

Licenses