UNPKG

@a11ywatch/core

Version:
90 lines 4.26 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.setStripeRoutes = exports.stripeHook = void 0; const config_1 = require("../../config"); const external_1 = require("../../core/external"); const controllers_1 = require("../../core/controllers"); const date_fns_1 = require("date-fns"); const stripeHook = (req, res) => __awaiter(void 0, void 0, void 0, function* () { var _a, _b, _c; let event; try { event = yield external_1.stripe.webhooks.constructEventAsync(req.body.raw, req.headers["stripe-signature"], config_1.config.STRIPE_WH_SECRET); } catch (err) { res.status(400).send(`Webhook Error: ${err.message}`); return; } let statusCode = 200; const { object: stripeCustomer } = (_a = event === null || event === void 0 ? void 0 : event.data) !== null && _a !== void 0 ? _a : {}; const userEmail = (_b = stripeCustomer === null || stripeCustomer === void 0 ? void 0 : stripeCustomer.customer_email) !== null && _b !== void 0 ? _b : stripeCustomer === null || stripeCustomer === void 0 ? void 0 : stripeCustomer.email; switch (event.type) { case "customer.subscription.deleted": { const [user, collection] = yield (0, controllers_1.UsersController)().getUser({ email: userEmail, }); yield (0, controllers_1.WebsitesController)().removeWebsite({ userId: user.id, deleteMany: true, }); yield (0, controllers_1.UsersController)().downgradeStripeUserValues({ user, collection, }); break; } case "invoice.payment_succeeded": { if (["manual", "subscription_cycle", "subscription_update"].includes(stripeCustomer.billing_reason)) { const [user, collection] = yield (0, controllers_1.UsersController)().getUser({ email: userEmail, }); if (((_c = user === null || user === void 0 ? void 0 : user.paymentSubscription) === null || _c === void 0 ? void 0 : _c.status) !== "active") { user.paymentSubscription.status = "active"; } yield collection.updateOne({ email: user.email }, { $set: stripeCustomer.billing_reason === "subscription_cycle" ? { paymentSubscription: user.paymentSubscription, usageAnchorDate: user.usageAnchorDate ? (0, date_fns_1.addMonths)(user.usageAnchorDate, 1) : new Date(), } : { paymentSubscription: user.paymentSubscription, }, }); } break; } case "customer.created": { const [user, collection] = yield (0, controllers_1.UsersController)().getUser({ email: userEmail, }); yield collection.updateOne({ email: user.email }, { $set: { usageAnchorDate: new Date(), }, }); break; } default: { statusCode = 200; } } res.status(statusCode).send(true); }); exports.stripeHook = stripeHook; const setStripeRoutes = (app) => { app.post("/api/stripes/event", exports.stripeHook); }; exports.setStripeRoutes = setStripeRoutes; //# sourceMappingURL=stripe.js.map