@a11ywatch/core
Version:
a11ywatch central API
90 lines • 4.26 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.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