core-connector-lib
Version:
A connector that facilitates payments between a Mojaloop Connector (SDK Scheme Adapter) and a Core Banking system
50 lines (42 loc) • 1.7 kB
text/typescript
import { Plugin, Request, ResponseToolkit } from '@hapi/hapi';
import { ILogger } from '../domain';
import { ReqAppState } from './types';
export type LoggingPluginOptions = {
logger: ILogger;
};
export const loggingPlugin: Plugin<LoggingPluginOptions> = {
name: 'loggingPlugin',
version: '1.0.0',
once: true,
register: async (server, options) => {
const { logger } = options;
server.ext({
type: 'onPreHandler',
method: (req: Request, h: ResponseToolkit) => {
const { path, method, info } = req;
const { id, remoteAddress, received } = info;
const context = {
id,
remoteAddress,
path,
method,
received,
};
Object.assign(req.app, { context });
logger.info(`[==> req] ${method.toUpperCase()} ${path}`, context);
return h.continue;
},
});
server.ext({
type: 'onPreResponse',
method: (req: Request, h: ResponseToolkit) => {
const { path, method, response } = req;
const { context } = req.app as ReqAppState; // todo: think, how to specify req.app type
const responseTimeSec = ((Date.now() - context.received) / 1000).toFixed(3);
const statusCode = response instanceof Error ? response.output.statusCode : response.statusCode;
logger.info(`[<== ${statusCode}][${responseTimeSec} s] ${method.toUpperCase()} ${path}`, context);
return h.continue;
},
});
},
};