type IMiddlewareFn = (arg0: any) => any; export function applyMiddleware(middleware: Array, params: object, key?: string): Promise { return middleware.reduce( (accumulator, fn) => accumulator.then((result) => { if (key != null) { params[key] = result; } return fn(params); }), Promise.resolve(key != null ? params[key] : params), ); }