@wepublish/api
Version:
API core for we.publish.
55 lines • 3.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupPaymentProvider = exports.PAYMENT_WEBHOOK_PATH_PREFIX = void 0;
const tslib_1 = require("tslib");
const express_1 = require("express");
const context_1 = require("./context");
const api_1 = require("../../utils-api/src");
exports.PAYMENT_WEBHOOK_PATH_PREFIX = 'payment-webhooks';
function setupPaymentProvider(opts) {
const { paymentProviders } = opts;
const paymentProviderWebhookRouter = (0, express_1.Router)();
// setup webhook routes for each payment provider
paymentProviders.forEach(paymentProvider => {
paymentProviderWebhookRouter
.route(`/${paymentProvider.id}`)
.all(paymentProvider.incomingRequestHandler, (req, res) => tslib_1.__awaiter(this, void 0, void 0, function* () {
(0, api_1.logger)('paymentProvider').info('Received webhook from %s for paymentProvider %s', req.get('origin'), paymentProvider.id);
try {
const webhookResponse = yield paymentProvider.webhookForPaymentIntent({ req });
switch (webhookResponse.status) {
case 200:
if (webhookResponse.paymentStates) {
const context = yield (0, context_1.contextFromRequest)(req, opts);
for (const paymentStatus of webhookResponse.paymentStates) {
// TODO: handle errors properly
yield paymentProvider.updatePaymentWithIntentState({
intentState: paymentStatus,
paymentClient: context.prisma.payment,
paymentsByID: context.loaders.paymentsByID,
invoicesByID: context.loaders.invoicesByID,
subscriptionClient: context.prisma.subscription,
userClient: context.prisma.user,
invoiceClient: context.prisma.invoice,
subscriptionPeriodClient: context.prisma.subscriptionPeriod,
invoiceItemClient: context.prisma.invoiceItem
});
}
}
yield res.status(200).send(webhookResponse.message || 'OK');
break;
default:
yield res.status(webhookResponse.status).send(webhookResponse.message);
break;
}
}
catch (error) {
yield res.status(500).send('Internal server error');
(0, api_1.logger)('paymentProvider').error(error, 'Error during webhook update in paymentProvider %s', paymentProvider.id);
}
}));
});
return paymentProviderWebhookRouter;
}
exports.setupPaymentProvider = setupPaymentProvider;
//# sourceMappingURL=payments.js.map