async handle(req, res) {
        if (!req.body || !req.headers['stripe-signature']) {
            res.writeHead(400);
            return res.end();
        }
        let event;
        try {
            event = this.webhookManager.parseWebhook(req.body, req.headers['stripe-signature']);
        } catch (err) {
            logging.error(err);
            res.writeHead(401);
            return res.end();
        }

        logging.info(`Handling webhook ${event.type}`);
        try {
            await this.handleEvent(event);
            res.writeHead(200);
            res.end();
        } catch (err) {
            logging.error(`Error handling webhook ${event.type}`, err);
            res.writeHead(err.statusCode || 500);
            res.end();
        }
    }
Handles a Stripe webhook event.
- Parses the webhook event
- Delegates the event to the appropriate handler
- Returns a 200 response to Stripe to confirm receipt of the event, or an error response if the event is not handled or if an error occurs
@param {import('express').Request} req
@param {import('express').Response} res
@returns {Promise<void>}