UNPKG

flutterwave-universal

Version:

Universal TypeScript SDK for Flutterwave payment services, compatible with Node.js, Bun, Deno, Cloudflare Workers and Edge Functions

2 lines 6.44 kB
var i=class a extends Error{constructor(e,n,o,p){super(e),this.name="FlutterwaveError",this.status=n,this.code=o,this.data=p,Object.setPrototypeOf(this,a.prototype)}};var v="v3",k=`https://api.flutterwave.com/${v}`;var l=class{constructor(e){if(!e.secretKey)throw new Error("Flutterwave secret key is required.");this.secretKey=e.secretKey,this.baseUrl=k,this.timeout=e.timeout||6e4}async request(e,n,o){let p=`${this.baseUrl}/${n}`,T={Authorization:`Bearer ${this.secretKey}`,"Content-Type":"application/json",Accept:"application/json"},f={method:e,headers:T};if(o){if(e==="PUT"||e==="POST")f.body=JSON.stringify(o);else if(e==="GET"||e==="DELETE"){let r=new URLSearchParams(Object.entries(o).reduce((s,[t,c])=>(c!=null&&(s[t]=String(c)),s),{})).toString();r&&(p=`${p}?${r}`)}}let R=new AbortController,w=setTimeout(()=>R.abort(),this.timeout);f.signal=R.signal;try{let r=await fetch(p,f);if(clearTimeout(w),!r.ok){let t;try{t=await r.json()}catch{t=await r.text()}let c=typeof t=="string"?t||`API request failed with status ${r.status}`:t.message||`API request failed with status ${r.status}`,b=typeof t!="string"?t.code:void 0,A=typeof t!="string"?t.data:void 0;throw new i(c,String(r.status),b,A)}if(r.status===204)return{};let s=await r.json();if(s.status&&s.status==="error"){let t=s;throw new i(t.message,"API Error",t.code,t.data)}return s.data!==void 0?s.data:s}catch(r){throw clearTimeout(w),r instanceof i?r:r instanceof Error&&r.name==="AbortError"?new i(`Request timed out after ${this.timeout}ms`,"TimeoutError"):new i(r instanceof Error?r.message:"An unexpected network error occurred","NetworkError")}}get(e,n){return this.request("GET",e,n)}post(e,n){return this.request("POST",e,n)}put(e,n){return this.request("PUT",e,n)}delete(e,n){return this.request("DELETE",e,n)}};var u=class{constructor(e){this.apiClient=e}async list(e){return this.apiClient.get(`banks/${e}`)}async branches(e){return this.apiClient.get(`banks/${e}/branches`)}};var y=class{constructor(e){this.client=e}async card(e){return this.client.post("charges?type=card",e)}async bankTransfer(e){return this.client.post("charges?type=bank_transfer",e)}async ach(e){return this.client.post("charges?type=ach_payment",e)}async bank_uk_eu(e){return this.client.post("charges?type=debit_uk_account",e)}async bank_ng(e){return this.client.post("charges?type=mono",e)}async mpesa(e){return this.client.post("charges?type=mpesa",e)}async ghanaMobile(e){return this.client.post("charges?type=mobile_money_ghana",e)}async rwandaMobile(e){return this.client.post("charges?type=mobile_money_rwanda",e)}async ugandaMobile(e){return this.client.post("charges?type=mobile_money_uganda",e)}async francophoneMobile(e){return this.client.post("charges?type=mobile_money_franco",e)}async tanzaniaMobile(e){return this.client.post("charges?type=mobile_money_tanzania",e)}async zambiaMobile(e){return this.client.post("harges?type=mobile_money_zambia",e)}async voucher(e){return this.client.post("charges?type=voucher_payment",e)}async applePay(e){return this.client.post("charges?type=applepay",e)}async googlePay(e){return this.client.post("charges?type=googlepay",e)}async enaira(e){return this.client.post("charges?type=enaira",e)}async ussd(e){return this.client.post("charges?type=ussd",e)}async nqr(e){return this.client.post("charges?type=qr",e)}async opay(e){return this.client.post("charges?type=opay",e)}async capitec(e){return this.client.post("charges?type=capitec",e)}async fawryPay(e){return this.client.post("charges?type=fawry_pay",e)}async validate(e){return this.client.post("validate-charge",e)}};var h=class{constructor(e){this.client=e}async generate(e){return this.client.post("otps",e)}async validate(e){return this.client.post(`otps/${crypto.randomUUID()}/validate`,e)}};var g=class{constructor(e){this.apiClient=e}async initiate(e){return this.apiClient.post("payments",e)}};var m=class{constructor(e){this.apiClient=e}async create(e){return this.apiClient.post("transfers",e)}async retry(e){return this.apiClient.post(`transfers/${e.id}/retries`,e)}async bulkTransfer(e){return this.apiClient.post("bulk-transfers",e)}async queryFee(e){return this.apiClient.get(`transfers/fee?amount=${e.amount}&currency=${e.currency}&type=${e.type}`)}async list(e){return this.apiClient.get(`transfers?${new URLSearchParams(e).toString()}`)}async get(e){return this.apiClient.get(`transfers/${e.id}`)}async getRetry(e){return this.apiClient.get(`transfers/${e.id}/retries`)}async getBulkTransfer(e){return this.apiClient.get(`transfers?${new URLSearchParams(e).toString()}`)}async queryTransferRates(e){return this.apiClient.get(`transfers/rates?${new URLSearchParams(e).toString()}`)}async queryBulkRates(e){return this.apiClient.post("bulk-rates",e)}async verifyBulkRates(e){return this.apiClient.get(`bulk-rates?id=${e.id}`)}};var C=class{constructor(e){this.apiClient=e}async create(e){return this.apiClient.post("beneficiaries",e)}async list(e){return this.apiClient.get(`beneficiaries?page=${e.page}`)}async get(e){return this.apiClient.get(`beneficiaries/${e.id}`)}async delete(e){return this.apiClient.delete(`beneficiaries/${e.id}`)}};var d=class{constructor(e){this.apiClient=e}async create(e){return this.apiClient.post("virtual-account-numbers",e)}async createBulk(e){return this.apiClient.post("bulk-virtual-account-numbers",e)}async get(e){return this.apiClient.get(`virtual-account-numbers/${e.account_number}`)}async getBulk(e){return this.apiClient.get(`bulk-virtual-account-numbers/${e.batch_id}`)}async updateBVN(e){return this.apiClient.put(`virtual-account-numbers/${e.order_ref}`,{bvn:e.bvn})}async delete(e){return this.apiClient.delete(`virtual-account-numbers/${e.order_ref}`,{status:e.status})}};var P=class{constructor(e){if(!e||!e.secretKey)throw new Error("Flutterwave configuration with secretKey is required.");this.apiClient=new l(e),this.banks=new u(this.apiClient),this.payments=new g(this.apiClient),this.otp=new h(this.apiClient),this.charges=new y(this.apiClient),this.transfer=new m(this.apiClient),this.beneficiary=new C(this.apiClient),this.virtualAccount=new d(this.apiClient)}async ping(){try{return await this.banks.list("NG"),{status:"success",message:"Flutterwave API connection successful."}}catch(e){return{status:"error",message:`Flutterwave API connection failed: ${e instanceof Error?e.message:"Unknown error"}`}}}},H=P;export{P as Flutterwave,i as FlutterwaveError,H as default}; //# sourceMappingURL=index.mjs.map