UNPKG

forest-express

Version:

Official package for all Forest Express Lianas

82 lines (81 loc) 2.77 kB
"use strict"; var P = require('bluebird'); var logger = require('../../../services/logger'); var dataUtil = require('../../../utils/data'); function SourcesGetter(Implementation, params, opts, integrationInfo) { var stripe = opts.integrations.stripe.stripe(opts.integrations.stripe.apiKey); function hasPagination() { return params.page; } function getLimit() { if (hasPagination()) { return params.page.size || 10; } return 10; } function getStartingAfter() { if (hasPagination() && params.starting_after) { return params.starting_after; } return undefined; } function getEndingBefore() { if (hasPagination() && params.ending_before) { return params.ending_before; } return undefined; } function getSources(customerId, query) { return new P(function (resolve, reject) { stripe.customers.listSources(customerId, query, function (error, sources) { if (error) { return reject(error); } return resolve([sources.total_count, sources.data]); }); }); } this.perform = function () { var collectionModel = integrationInfo.collection, collectionFieldName = integrationInfo.field, embeddedPath = integrationInfo.embeddedPath; var fieldName = embeddedPath ? "".concat(collectionFieldName, ".").concat(embeddedPath) : collectionFieldName; return Implementation.Stripe.getCustomer(collectionModel, collectionFieldName, params.recordId).then(function (customer) { var query = { limit: getLimit(), starting_after: getStartingAfter(), ending_before: getEndingBefore(), 'include[]': 'total_count', object: params.object }; var customerId; if (customer[collectionFieldName]) { customerId = dataUtil.find(customer[collectionFieldName], embeddedPath); } if (customer && !customerId) { return P.resolve([0, []]); } return getSources(customerId, query).spread(function (count, sources) { return P.map(sources, function (source) { if (customer) { source.customer = customer; } else { return Implementation.Stripe.getCustomerByUserField(collectionModel, fieldName, source.customer).then(function (customerFound) { source.customer = customerFound; return source; }); } return source; }).then(function (sourcesData) { return [count, sourcesData]; }); })["catch"](function (error) { logger.warn('Stripe sources retrieval issue: ', error); return P.resolve([0, []]); }); }, function () { return P.resolve([0, []]); }); }; } module.exports = SourcesGetter;