UNPKG

@apihawk/billia-sdk

Version:

The ApiHawk Billia SDK

136 lines (135 loc) 5.41 kB
"use strict"; 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;