// @flow
import stream from "stream";
import { type Context } from "koa";

export default function apiWrapper() {
  return async function apiWrapperMiddleware(
    ctx: Context,
    next: () => Promise<*>
  ) {
    await next();

    const ok = ctx.status < 400;

    if (
      typeof ctx.body !== "string" &&
      !(ctx.body instanceof stream.Readable)
    ) {
      // $FlowFixMe
      ctx.body = {
        // $FlowFixMe
        ...ctx.body,
        status: ctx.status,
        ok,
      };
    }
  };
}
