UNPKG

fedapay

Version:

NodeJs library for FedaPay Api

180 lines (158 loc) 5.3 kB
import { Resource, FedaPayObject } from '.'; import { InvalidRequest } from './Error'; import { arrayToFedaPayObject } from './Util'; /** * Class Transaction * * @property int $id * @property string $reference * @property string $description * @property string $callback_url * @property string $amount * @property string $status * @property int $transaction_id * @property string $created_at * @property string $updated_at */ export class Transaction extends Resource { protected static ressourceName = 'transaction'; private static PAID_STATUS = [ 'approved', 'transferred', 'refunded', 'approved_partially_refunded', 'transferred_partially_refunded' ]; /** * Check if the transaction was paid * * @return {boolean} */ public wasPaid(): boolean { return Transaction.PAID_STATUS.includes(this.status); } /** * Check if the transacton was refunded. Status must include refunded. * * @return {boolean} */ public wasRefunded() { return this.status.includes('refunded'); } /** * Check if the transacton was partially refunded. Status must include partially_refunded. * * @return {boolean} */ public wasPartiallyRefunded(): boolean { return this.status.includes('partially_refunded'); } /** * @param {Object|null} params * @param {Object|null} headers * @returns {Promise<Transaction>} */ static create(params = {}, headers = {}): Promise<Transaction> { return <Promise<Transaction>>this._create(params, headers); } /** * @param {Object|null} params * @param {Object|null} headers * @returns {Promise<FedaPayObject>} */ static all(params = {}, headers = {}): Promise<FedaPayObject> { return <Promise<FedaPayObject>> this._all(params, headers); } /** * @param {string|number} id * @param {Object|null} params * @param {Object|null} headers * @returns {Promise<Transaction>} */ static retrieve(id, params = {}, headers = {}): Promise<Transaction> { return <Promise<Transaction>> this._retrieve(id, params, headers); } /** * @param {string|number} id string The ID of the transaction to update. * @param {object|null} params * @param {object|null} headers * * @returns {Promise<Transaction>} */ static update(id, params = {}, headers = {}): Promise<Transaction> { return <Promise<Transaction>>this._update(id, params, headers); } /** * @param {array|string|null} $headers * @returns {Promise<Transaction>} The saved transaction. */ save(headers = {}): Promise<Transaction> { return <Promise<Transaction>>this._save(headers); } /** * @param {array} $headers * @returns Transaction The deleted transaction. */ delete(headers = {}): Promise<Transaction> { return <Promise<Transaction>>this._delete(headers); } /** * Generate token * @param {Object} params * @param {Object} headers * @returns {Promise<FedaPayObject>} */ generateToken(params = {}, headers = {}) : Promise<FedaPayObject> { const url = this.instanceUrl() + '/token'; return Transaction._staticRequest('post', url, params, headers) .then(({ data, options }) => { let object = <FedaPayObject>arrayToFedaPayObject(data, options); return <FedaPayObject>object; }); } /** * Send Mobile Money request with token * @param {string} mode * @param {string} token * @param {Object} params * @param {Object} headers * * @returns {Promise<FedaPayObject>} */ sendNowWithToken(mode: string, token: string, params: any = {}, headers = {}) : Promise<FedaPayObject> { const url = '/' + mode; params.token = token; return Transaction._staticRequest('post', url, params, headers) .then(({ data, options }) => { let object = <FedaPayObject>arrayToFedaPayObject(data, options); return <FedaPayObject>object; }); } /** * Send Mobile Money request * @param string mode * @param {Object} params * @param {Object} headers * * @returns {Promise<FedaPayObject>} */ async sendNow(mode: string, params = {}, headers = {}) : Promise<FedaPayObject> { const tokenObject = await this.generateToken({}, headers); return this.sendNowWithToken(mode, tokenObject.token, params, headers); } /** * Send fees request * @param string mode * @param {Object} params * @param {Object} headers * * @returns {Promise<FedaPayObject>} */ async getFees(token: string, mode: string, params: any = {}, headers = {}) : Promise<FedaPayObject> { const url = Transaction.classPath() + '/fees'; params.token = token; params.mode = mode; return Transaction._staticRequest('get', url, params, headers) .then(({ data, options }) => { let object = <FedaPayObject>arrayToFedaPayObject(data, options); return <FedaPayObject>object; }); } }