@wepublish/api
Version:
API core for we.publish.
46 lines • 1.97 kB
JavaScript
"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