Al solicitar el servicio de notificaciones de NUBIX API es posible realizar la configuración de dicho servicio de la siguiente forma:

Importar librerías, crear ruta, middleware e iniciar servidor.

const express = require('express')
const bodyParser = require('body-parser')
const https = require('https')

const app = express()

app.use((req, res, next) => {
if (req.headers['x-amz-sns-message-type']) {
req.headers['content-type'] = 'application/json; charset=UTF-8';
}
next();
});

app.use(bodyParser.json());

app.post('/', (req, res) => {
...
}

app.listen(5000)

Como primer requisito y para facilitar la manipulación de la información es necesario agregar las librerías: express, body-parser y https.

Se agrega el middleware que permite el tratamiento de la información y esta pueda ser manipulada utilizando json de body-parser.

Recibir mensaje.

app.post('/', (req, res) => {
let message = req.body
...
})

Se define la ruta que manejará la información, por lo que se hace la solicitud  POST en la ruta indicada https://dominio.ext/ y se obtiene el cuerpo del mensaje almacenándolo en la variable 'message'.

Se obtiene tipo.

let type = message['Type']
if (type === 'SubscriptionConfirmation') {
https.get(message['SubscribeURL'])
res.status(200).end()
} else if (type === 'Notification') {
...
} else {
res.status(400).end()
}

Se obtiene el tipo en el mensaje y se verificarán dos opciones de tipo, la primera será la confirmación de la suscripción, de no ser esta la opción que se solicita, entonces se valida si es una notificación, en caso de que el mensaje no sea ninguna de las dos se envía el código de error 400.

Confirmar suscripción.

if (type === 'SubscriptionConfirmation') {
https.get(message['SubscribeURL'])
res.status(200).end()
}

Se realiza la comparación de la cadena de tipo (type) con la cadena de confirmación de la suscripción ('SubscriptionConfirmation'), si esta es igual entonces, se realiza un GET a la URL que recibe de la ruta indicada a través de la cadena 'SubscribeURL'  devolviendo el código 200.

Notificación.

else if (type === 'Notification') {
let subject = message['Subject']
if ( subject === 'New Study') {
...
} else if (subject === 'New Interpretation') {
...
} else {
res.status(400).end()
}

Se realiza la comparación del texto tipo (type) con el texto de notificación ('Notification'), si es igual, entonces se obtiene la información del JSON para Subject, almacenándola en la variable subject la cual debe ser revisada, ya que en NUBIX se cuenta con dos tipos de notificaciones; una para indicar un estudio nuevo ('New Study') y otra que informa acerca de una nueva interpretación ('New Interpretation'), de no ser ninguna de estas se envía el error 400.

Notificación de nuevo estudio.

if ( subject === 'New Study') {
console.log(JSON.parse(message['Message']))
res.status(200).end()
}

Una vez que contamos con la información correspondiente de subject se debe verificar el tipo de notificación, por lo que se realizará una primera comparación donde se validará si la notificación corresponde a un nuevo estudio en la plataforma, indicando el código 200.

Notificación de nueva interpretación.

else if (subject === 'New Interpretation') {
console.log(JSON.parse(message['Message']))
res.status(200).end()
}

O si corresponde a una nueva interpretación, regresando el código 200.

A continuación se muestra el código completo del archivo ejemplo.js en la ruta https://dominio.ext/, le recomendamos utilizar Ultrahoook durante la fase de desarrollo:

const express = require('express')
const bodyParser = require('body-parser')
const https = require('https')

const app = express()

app.use((req, res, next) => {
if (req.headers['x-amz-sns-message-type']) {
req.headers['content-type'] = 'application/json; charset=UTF-8';
}
next();
});

app.use(bodyParser.json());

app.post('/', (req, res) => {
let message = req.body
let type = message['Type']
if (type === 'SubscriptionConfirmation') {
https.get(message['SubscribeURL'])
res.status(200).end()
} else if (type === 'Notification') {
let subject = message['Subject']
if ( subject === 'New Study') {
console.log(JSON.parse(message['Message']))
res.status(200).end()
} else if (subject === 'New Interpretation') {
console.log(JSON.parse(message['Message']))
res.status(200).end()
} else {
res.status(400).end()
}
} else {
res.status(400).end()
}
})

app.listen(5000)

 Ver en GitHub Gist