UNPKG

@wepublish/api

Version:
55 lines 3.07 kB
"use strict"; 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