Uma requisição para /api/whoami retorna um objeto JSON com uma key ipaddress com um valor do IP público do user.
Uma key language com a linguagem principal, e a key software com as definições de browser e OS.

Segue o código:

const express = require('express')

const app = express()

//usando a lib padrão http do Node
const http = require('http');
let ip  = ''

//pegando o IP público atraves de uma API pública
var options = {
  host: 'ipv4bot.whatismyipaddress.com',
  port: 80,
  path: '/'
};

http.get(options, res => {
      res.on("data", chunk => {
      ip = chunk.toString();
    });
  }).on('error', e => {
    console.log("error: " + e.message);
  });


// montando o objeto que será enviado manipulando o req.headers
const port = process.env.port || 3000
app.get('/api/whoami', (req,res)=>{
    let language = []
    language.push(req.headers['accept-language'].split(',')[0])
    language.push(req.headers['accept-language'].split(',')[1])
    res.send({
        ipaddress: ip, 
        language: language.join(','), 
        software: req.headers['user-agent'] 
    })
})

app.listen(port, ()=>{
    console.log(`server running on port ${port}`)
})