UNPKG

@a11ywatch/core

Version:
226 lines 8.78 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.downgradeStripeUserValues = exports.viewUpcomingInvoice = exports.cancelSubscription = exports.addPaymentSubscription = void 0; const strings_1 = require("../../../strings"); const utils_1 = require("../../../utils"); const price_handler_1 = require("../../../utils/price-handler"); const find_1 = require("../find"); const stripe_1 = require("../../../external/stripe"); const addPaymentSubscription = ({ keyid, email: emailP, stripeToken, yearly, paymentPlan, }) => __awaiter(void 0, void 0, void 0, function* () { var _a, _b, _c; const [user, collection] = yield (0, find_1.getUser)({ email: emailP, id: keyid }); const email = (_a = user === null || user === void 0 ? void 0 : user.email) !== null && _a !== void 0 ? _a : emailP; if (user && stripeToken) { let parsedToken = null; if (stripeToken) { if (typeof stripeToken === "string") { try { parsedToken = JSON.parse(stripeToken); } catch (e) { console.error(e); } } else { parsedToken = stripeToken; } if (!parsedToken && !user.stripeID) { return { user, code: 400, success: false, message: "Error invalid stripe token.", }; } } const plan = (_c = (_b = parsedToken === null || parsedToken === void 0 ? void 0 : parsedToken.plan) !== null && _b !== void 0 ? _b : paymentPlan) !== null && _c !== void 0 ? _c : "L1"; const createParams = { email, }; let customer = { id: user.stripeID }; if (!user.stripeID) { customer = yield stripe_1.stripe.customers.create(createParams); } else { try { customer = yield stripe_1.stripe.customers.retrieve(user.stripeID); } catch (e) { console.error(e); } if (!customer) { try { customer = yield stripe_1.stripe.customers.create(createParams); } catch (e) { console.error(e); } } } if (customer) { if (parsedToken === null || parsedToken === void 0 ? void 0 : parsedToken.id) { try { yield stripe_1.stripe.customers.createSource(customer.id, { source: parsedToken.id, }); } catch (e) { console.error(e); } } const stripeProductPlan = (0, price_handler_1.stripeProductId)(plan, yearly); const activeSub = user === null || user === void 0 ? void 0 : user.paymentSubscription; const upgradeAccount = (activeSub === null || activeSub === void 0 ? void 0 : activeSub.status) === "active"; let charge = null; if (upgradeAccount) { try { charge = yield stripe_1.stripe.subscriptions.update(activeSub.id, { proration_behavior: "create_prorations", cancel_at_period_end: false, items: [ { id: activeSub.items.data[0].id, price: stripeProductPlan, }, ], }); } catch (e) { console.error(e); } } if (!charge) { charge = yield stripe_1.stripe.subscriptions.create({ customer: customer.id, items: [ { plan: stripeProductPlan, }, ], }); } if (charge) { const role = (0, price_handler_1.roleHandler)(plan); const jwt = (0, utils_1.signJwt)({ email, role, keyid: user.id }); user.jwt = jwt; user.role = role; user.paymentSubscription = charge; user.stripeID = customer.id; yield collection.updateOne({ id: user.id }, { $set: { jwt, role, stripeID: customer.id, paymentSubscription: charge, }, }); } } return { user, code: 200, success: true, message: strings_1.SUCCESS, }; } return { code: 404, success: false, message: strings_1.EMAIL_ERROR }; }); exports.addPaymentSubscription = addPaymentSubscription; const cancelSubscription = ({ keyid }, blockUpdate) => __awaiter(void 0, void 0, void 0, function* () { const [user, collection] = yield (0, find_1.getUser)({ id: keyid }); if (!user) { throw new Error(strings_1.EMAIL_ERROR); } if (user === null || user === void 0 ? void 0 : user.stripeID) { const deletedSubscription = yield removeUserSubscriptions(user.stripeID); if (deletedSubscription && !blockUpdate) { const jwt = (0, utils_1.signJwt)({ email: user.email, role: 0, keyid: user.id, }); user.jwt = jwt; user.role = 0; yield collection.updateOne({ email: user === null || user === void 0 ? void 0 : user.email }, { $set: { jwt, role: 0, lastRole: user.role, paymentSubscription: false, }, }); } } return { user, code: 200, success: true, message: strings_1.SUCCESS, }; }); exports.cancelSubscription = cancelSubscription; const viewUpcomingInvoice = ({ userId }) => __awaiter(void 0, void 0, void 0, function* () { if (userId === "undefined") { return Promise.resolve(null); } const [user] = yield (0, find_1.getUser)({ id: userId }); if (!user) { throw new Error(strings_1.EMAIL_ERROR); } if (user && user.role && user.stripeID) { const invoice = yield stripe_1.stripe.invoices .retrieveUpcoming({ customer: user.stripeID, }) .catch((e) => { console.error(e); }); return invoice; } }); exports.viewUpcomingInvoice = viewUpcomingInvoice; const downgradeStripeUserValues = ({ user, collection, }) => __awaiter(void 0, void 0, void 0, function* () { const email = user.email; const jwt = (0, utils_1.signJwt)({ email, role: 0, keyid: user.id, }); yield collection.updateOne({ email }, { $set: { jwt, role: 0, lastRole: user.role, paymentSubscription: false, }, }); }); exports.downgradeStripeUserValues = downgradeStripeUserValues; const removeUserSubscriptions = (stripeID) => __awaiter(void 0, void 0, void 0, function* () { const customer = yield stripe_1.stripe.subscriptions.list({ customer: stripeID, }); const subscriptions = customer === null || customer === void 0 ? void 0 : customer.data; let deletedSubscription = false; if (subscriptions && subscriptions.length) { deletedSubscription = subscriptions.every((item) => __awaiter(void 0, void 0, void 0, function* () { try { return yield stripe_1.stripe.subscriptions.del(item.id); } catch (e) { console.error(e); } })); } return deletedSubscription; }); //# sourceMappingURL=payments.js.map