import axios from 'axios' import express, { Request } from 'express' import { env } from './env' import { BearerParser } from 'bearer-token-parser' import jwt_decode from 'jwt-decode' import { JwtToken } from './types' export const decodeToken = (headers: object): JwtToken | undefined => { const encodedToken = BearerParser.parseBearerToken(headers) console.log(`[Token] ${JSON.stringify(encodedToken)}`) var token = jwt_decode(encodedToken) as JwtToken return token } export const pick = ( obj: Obj, keys: Keys[] ) => { let ans = {} as { [Key in Keys]: Obj[Key] } for (let k of keys) { if (obj && obj.hasOwnProperty(k)) { ans[k] = obj[k] } } return ans } const stringifyErr = (e: unknown) => { if (axios.isAxiosError(e)) return ( `${e.name} ${e.code || e.response?.status || ''} ${ e.response?.statusText || '' }:` + `${e.config.method} ${e.config.baseURL || ''}${ e.config.url || '' }\n${JSON.stringify(e.response?.data)}` ) if (e instanceof Error) return `${e.name}: ${e.message}\n${e.stack}` return JSON.stringify(e) } export const exressHandleError: express.ErrorRequestHandler = ( err, req, res, next ) => { const error = stringifyErr(err) console.error(error) res.status(400).json({ error: error }) }