UNPKG

@wepublish/api

Version:
46 lines 1.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createPaymentFromInvoice = void 0; const tslib_1 = require("tslib"); const permissions_1 = require("../permissions"); const client_1 = require("@prisma/client"); const api_1 = require("../../../../permissions-api/src"); const createPaymentFromInvoice = (input, authenticate, paymentProviders, invoicesByID, paymentMethodsByID, paymentClient) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const { roles } = authenticate(); (0, permissions_1.authorise)(api_1.CanCreatePayment, roles); const { invoiceID, paymentMethodID, successURL, failureURL } = input; const paymentMethod = yield paymentMethodsByID.load(paymentMethodID); const paymentProvider = paymentProviders.find(pp => pp.id === (paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.paymentProviderID)); const invoice = yield invoicesByID.load(invoiceID); if (!invoice || !paymentProvider) { throw new Error('Invalid data'); // TODO: better error handling } const payment = yield paymentClient.create({ data: { paymentMethodID, invoiceID, state: client_1.PaymentState.created } }); const intent = yield paymentProvider.createIntent({ paymentID: payment.id, invoice, saveCustomer: true, successURL, failureURL }); return yield paymentClient.update({ where: { id: payment.id }, data: { state: intent.state, intentID: intent.intentID, intentData: intent.intentData, intentSecret: intent.intentSecret, paymentData: intent.paymentData, paymentMethodID: payment.paymentMethodID, invoiceID: payment.invoiceID } }); }); exports.createPaymentFromInvoice = createPaymentFromInvoice; //# sourceMappingURL=payment.private-mutation.js.map