import { FastifyInstance } from "fastify"; import { $mail, ProxyRequest } from "./mailProxy.schema"; import { getOutlookTokens } from "./mailProxy.service"; import axios from "axios"; export async function mailProxyRoutes(fastify: FastifyInstance) { fastify.post( "/", { schema: { body: $mail("proxyRequest"), }, config: { requiredClaims: ["mail:all"] }, preHandler: [fastify.authorize], }, async (req, res) => { const input = req.body as ProxyRequest; try { const tokens = await getOutlookTokens(input.email); if (!tokens) return res.code(404).send({ error: "resource not found" }); const result = await axios({ url: input.url, method: input.method, headers: { Authorization: "Bearer " + tokens.access_token, }, data: input.body, validateStatus: () => true, }); return res.code(result.status).send(result.data); } catch (err) { return err; } } ); }