@a11ywatch/core
Version:
a11ywatch central API
226 lines • 8.78 kB
JavaScript
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
;