Soy bastante nuevo en los webhooks y necesito que sea posible registrar un webhook en una API que estoy creando. Uso esquemas para crear y almacenar datos. Quiero que el webhook emita un evento cada vez que se cree un nuevo objeto 'estudiante' a partir del esquema. Quiero que el usuario pueda enviar una solicitud de webhook a https://localhost:8080/api/webhook que contenga un secreto de enlace en el encabezado y junto con la URL, a la que se enviará el evento de emisión, en el cuerpo. Si creo un objeto a partir de, por ejemplo, un esquema de 'suscriptor' para cada webhook, ¿cómo debo emitir el evento a todos los webhooks?
Estoy escribiendo en Vanilla JS. Estoy usando Express y Socket.io para el servidor. MongoDB como base de datos.
¿Puedo usar res.io.emit() para hacerlo? Si es así, ¿cómo le digo a la función dónde enviar el evento de emisión?
Así es como actualmente registro un suscriptor/webhook:
export class WebHook { authorize (req, res, next) { if (req.headers['x-app-secret'] !== process.env.HOOK_SECRET) { res.status(403).send('incorrect hook secret') return } next() } async registerSubscriber (req, res, next) { try { // Creates a new subscriber object. const subscriber = await Subscriber.insert(req.body, req.user).then(response => { return response }) res.status(200).end() } catch (error) { let err = error err = createError(500) err.innerException = error next(error) } } }Esta es la función de cómo se crea un nuevo objeto de estudiante y dónde quiero que se notifique a todos los suscriptores:
async create (req, res, next) { try { // Creates a new student object. const student = await Student.insert(req.body).then(response => { return response }) // SOMETHING LIKE "res.io.emit()" SHOULD HAPPEN HERE: res .status(201) .send('Accepted') .json(student) } catch (error) { let err = error err = createError(500) err.innerException = error next(error) } }