ghost
Version:
The professional publishing platform
83 lines (76 loc) • 2.53 kB
JavaScript
const _ = require('lodash');
const StripeService = require('./StripeService');
const logging = require('@tryghost/logging');
const membersService = require('../members');
const config = require('../../../shared/config');
const settings = require('../../../shared/settings-cache');
const urlUtils = require('../../../shared/url-utils');
const events = require('../../lib/common/events');
const models = require('../../models');
const {getConfig} = require('./config');
const settingsHelpers = require('../settings-helpers');
const donationService = require('../donations');
const staffService = require('../staff');
const labs = require('../../../shared/labs');
async function configureApi() {
const cfg = getConfig({settingsHelpers, config, urlUtils});
if (cfg) {
// @NOTE: to not start test mode when running playwright suite
cfg.testEnv = process.env.NODE_ENV.startsWith('test') && process.env.NODE_ENV !== 'testing-browser';
await module.exports.configure(cfg);
return true;
}
return false;
}
const debouncedConfigureApi = _.debounce(() => {
configureApi().catch((err) => {
logging.error(err);
});
}, 600);
module.exports = new StripeService({
labs,
membersService,
models: _.pick(models, [
'Product',
'StripePrice',
'StripeCustomerSubscription',
'StripeProduct',
'MemberStripeCustomer',
'Offer',
'Settings'
]),
StripeWebhook: {
async get() {
return {
webhook_id: settings.get('members_stripe_webhook_id'),
secret: settings.get('members_stripe_webhook_secret')
};
},
async save(data) {
await models.Settings.edit([{
key: 'members_stripe_webhook_id',
value: data.webhook_id
}, {
key: 'members_stripe_webhook_secret',
value: data.secret
}]);
}
},
donationService,
staffService
});
function stripeSettingsChanged(model) {
if (['stripe_publishable_key', 'stripe_secret_key', 'stripe_connect_publishable_key', 'stripe_connect_secret_key'].includes(model.get('key'))) {
debouncedConfigureApi();
}
}
module.exports.init = async function init() {
try {
await configureApi();
} catch (err) {
logging.error(err);
}
events
.removeListener('settings.edited', stripeSettingsChanged)
.on('settings.edited', stripeSettingsChanged);
};