require('dotenv').config();
import express from "express"
import { IntegralApiClient: Integral } from "@integralapi/node"

const app = express();

const {
  parse
} = new Integral({
  environment: process.env.NODE_ENV,
  apiKey: "YOUR_SECRET_KEY",
  integralApplicationId: "YOUR_APPLICATION_ID"
});

const middleware = async (req, res, next) => {
  const response = await parse.preProcess({
    apiKey: req.headers.authorization,
    ip: req.ip,
    method: req.method,
    requestBody: req.body,
    headers: req.headers,
    path: req.originalUrl,
    queryParams: req.query,
    idempotencyKey: req.headers["Idempotency-Key"],
    version: req.headers["Version"]
  });

  const {
    request,
    statusCode,
    user,
    application,
    returnBackToUser
  } = response;

  if (request.hasResponseContent) {
    return res
      .status(statusCode)
      .json({
        ...returnBackToUser,
      })
  }

  // Directly find a user by the primary key for your database, returned by Integral
  req.user = await User.findOne({ id: user.userId });

  next();
}

app.use(middleware())
...