@apihawk/billia-sdk
Version:
The ApiHawk Billia SDK
136 lines (135 loc) • 5.41 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const billia_sdk_service_base_1 = require("../lib/billia-sdk-service-base");
const to_rest_resource_1 = require("./common/to-rest-resource");
class BilliaSDKWallet extends billia_sdk_service_base_1.BilliaSDKServiceBase {
/**
* Gets the financial status for the user (balance and credit).
*
* @param session - user session
*/
getAccountFunds(session) {
return __awaiter(this, void 0, void 0, function* () {
const response = yield this.api.call({
url: '/customer/wallet',
method: 'GET',
session,
headers: {
Accept: 'application/hal+json'
}
});
return response;
});
}
/**
* Gets the transaction history of the user with pagination.
*
* @param session - user session
* @param query - query options
*/
getTransactionHistory(session, query = {}) {
return __awaiter(this, void 0, void 0, function* () {
const filterData = {};
const { sort_by, sort_order } = query;
filterData.page = query.page || 1;
filterData.page_size = query.page_size || 25;
if (sort_by && sort_order && sort_order.match(/^(A|DE)SC$/)) {
switch (sort_by) {
case 'id':
filterData.order = [
{ field: 'customer_wallet_record_id', sort: sort_order }
];
break;
case 'date':
filterData.order = [{ field: 'created', sort: sort_order }];
break;
case 'credit':
filterData.order = [
{ field: 'amount', type: 'greaterThan', value: 0, sort: 'ASC' },
{
field: 'amount',
sort: sort_order === 'ASC' ? 'DESC' : 'ASC'
}
];
break;
case 'debit':
filterData.order = [
{
field: 'amount',
type: 'lessThanOrEqualTo',
value: 0,
sort: 'ASC'
},
{ field: 'amount', sort: sort_order }
];
break;
case 'type':
filterData.order = [{ field: 'type', sort: sort_order }];
break;
}
}
const response = yield this.api.call({
url: '/customer/wallet-record',
method: 'GET',
session,
query: filterData,
headers: {
Accept: 'application/hal+json',
'Accept-Response': 'Advanced'
}
});
const paginatedResponse = to_rest_resource_1.toRestResource(response, 'customer_wallet_record');
paginatedResponse.items = paginatedResponse.items.map((item) => {
// add the purchase ID (we don't need the orders list)
if (Array.isArray(item.order) && item.order.length) {
item.purchase_id = item.order[0].purchase_id;
}
delete item.order;
return item;
});
return paginatedResponse;
});
}
/**
* Adds funds to a user wallet.
* The amount will be added after a successful payment.
*
* @param session - user session
* @param params - amount and payment method
*
* @returns
* URL where the customer should be redirected
* in order to complete the payment.
*/
addAccountFunds(session, params) {
return __awaiter(this, void 0, void 0, function* () {
const validationError = this.validate(params, [
'wallet',
'add-account-funds'
]);
if (validationError) {
throw validationError;
}
const response = yield this.api.call({
url: '/billing/add-funds',
method: 'POST',
session,
body: params,
headers: {
Accept: 'application/hal+json',
'Content-Type': 'application/json'
}
});
return response;
});
}
}
exports.BilliaSDKWallet = BilliaSDKWallet;