edahab
v1.0.1
Published
Production-ready JavaScript/TypeScript SDK for eDahab payments
Maintainers
Readme
edahab
Production-ready JavaScript/TypeScript SDK for eDahab payments.
Features
- eDahab request hash generation (
SHA-256(body + apiSecret)) - Issue invoice (
Issueinvoice) - Verify invoice (
CheckInvoiceStatus) - Credit payment (
agentPayment) - Strong TypeScript types and custom
EdahabError - ESM + CommonJS builds
Install
npm install edahabQuick Start
import { createEdahabClient } from "edahab";
const client = createEdahabClient({
apiKey: process.env.EDAHAB_API_KEY!,
apiSecret: process.env.EDAHAB_API_SECRET!,
});
const invoice = await client.issueInvoice({
edahabNumber: "65XXXXXXXX",
amount: 10,
agentCode: "5555",
currency: "USD",
});
if (invoice.InvoiceStatus === "Paid") {
console.log("Payment successful:", invoice.TransactionId);
}API
createEdahabClient(options)
Creates an EdahabClient.
Options:
apiKey: string(required)apiSecret: string(required)baseUrl?: string(default:https://edahab.net/api/api)fetchFn?: typeof fetch(optional custom fetch for testing/runtime adapters)timeoutMs?: number(default:20000)
client.issueInvoice(request)
Request:
edahabNumber: stringamount: numberagentCode: stringcurrency?: "USD" | "SLSH"(default:"USD")
client.verifyInvoice(request)
Request:
invoiceId: string
client.creditPayment(request)
Request:
transactionAmount: numberphoneNumber: stringtransactionId: string | numbercurrency?: "USD" | "SLSH"(default:"USD")
client.isInvoicePaid(invoiceId)
Convenience helper that returns true only when invoice status is Paid.
generateRequestHash(body, apiSecret)
Returns the documented eDahab hash:
sha256(JSON.stringify(body) + apiSecret)
Error Handling
The SDK throws EdahabError for:
- HTTP errors
- API status failures (
StatusCode !== 0) - Request timeout
- Network failures
- Invalid JSON responses
import { EdahabError } from "edahab";
try {
await client.verifyInvoice({ invoiceId: "INV123" });
} catch (error) {
if (error instanceof EdahabError) {
console.error(error.message, error.statusCode, error.endpoint);
}
}eDahab Status Codes
The underlying API may return:
0: Success1: Api_Error2: Invalid_Json3: Validation_Error4: Invalid_Api_Credentials5: Insufficient_Customer_Balance6: Invoice_Not_Found7: Invalid
Reference docs:
edahab
Production-ready JavaScript/TypeScript SDK for eDahab payments.
- Purchase via push/pop-up (
Issueinvoice) - Credit payment (
agentPayment) - Invoice verification (
CheckInvoiceStatus) - Automatic request hash signing (SHA-256)
- Strong TypeScript types and robust error handling
Install
npm install edahabQuick Start
import { createEdahabClient } from "edahab";
const edahab = createEdahabClient({
apiKey: process.env.EDAHAB_API_KEY!,
apiSecret: process.env.EDAHAB_API_SECRET!,
});
const invoice = await edahab.issueInvoice({
edahabNumber: "65XXXXXXXX",
amount: 10,
agentCode: "5555",
currency: "USD",
});
if (invoice.InvoiceStatus === "Paid") {
console.log("Payment success", invoice.TransactionId);
}API
createEdahabClient(options)
Creates a new EdahabClient instance.
Options:
apiKey(required)apiSecret(required)baseUrl(optional, default:https://edahab.net/api/api)fetchFn(optional custom fetch implementation)timeoutMs(optional request timeout, default:20000)
client.issueInvoice(payload)
Uses POST /Issueinvoice?hash={{hash}}.
const result = await client.issueInvoice({
edahabNumber: "65XXXXXXXX",
amount: 1,
agentCode: "5555",
currency: "USD", // or "SLSH"
});client.creditPayment(payload)
Uses POST /agentPayment?hash={{hash}}.
const result = await client.creditPayment({
transactionAmount: 1,
phoneNumber: "65XXXXXXXX",
transactionId: "ORDER-1001",
currency: "SLSH",
});client.verifyInvoice(payload)
Uses POST /CheckInvoiceStatus?hash={{hash}}.
const result = await client.verifyInvoice({
invoiceId: "INV123456789",
});client.isInvoicePaid(invoiceId)
Convenience method that returns true only when InvoiceStatus === "Paid".
generateRequestHash(body, apiSecret)
Utility helper if you need to generate the eDahab hash manually.
Error Handling
The SDK throws EdahabError for:
- HTTP errors
- API status failures (
StatusCode !== 0) - Timeouts
- JSON parse/network failures
import { EdahabError } from "edahab";
try {
await client.issueInvoice({ edahabNumber: "65", amount: 1, agentCode: "5555" });
} catch (error) {
if (error instanceof EdahabError) {
console.error(error.message, error.statusCode, error.endpoint, error.responseBody);
}
}Notes
- According to eDahab docs, focus on
InvoiceStatusand treat only"Paid"as successful. - Request hash is generated as
sha256(JSON.stringify(body) + apiSecret).
