diff --git a/.changeset/odd-dancers-burn.md b/.changeset/odd-dancers-burn.md new file mode 100644 index 00000000..c4acbe85 --- /dev/null +++ b/.changeset/odd-dancers-burn.md @@ -0,0 +1,5 @@ +--- +"counterfact": patch +--- + +fixed #721: .proxy on / .proxy off commands in REPL have no effect diff --git a/bin/counterfact.js b/bin/counterfact.js index c88895a4..acfcbb75 100755 --- a/bin/counterfact.js +++ b/bin/counterfact.js @@ -137,6 +137,7 @@ program .option( "--prefix ", "base path from which routes will be served (e.g. /api/v1)", + "", ) .action(main) // eslint-disable-next-line sonar/process-argv diff --git a/src/server/koa-middleware.ts b/src/server/koa-middleware.ts index 7341b82f..238218d6 100644 --- a/src/server/koa-middleware.ts +++ b/src/server/koa-middleware.ts @@ -1,11 +1,15 @@ import type { IncomingHttpHeaders } from "node:http"; +import createDebug from "debug"; import type Koa from "koa"; import koaProxy from "koa-proxy"; +import type { Config } from "./config.js"; import type { Dispatcher } from "./dispatcher.js"; import type { HttpMethods } from "./registry.js"; +const debug = createDebug("counterfact:server:create-koa-app"); + const HTTP_STATUS_CODE_OK = 200; function addCors(ctx: Koa.ExtendableContext, headers?: IncomingHttpHeaders) { @@ -50,11 +54,16 @@ function getAuthObject( export function koaMiddleware( dispatcher: Dispatcher, - { proxyEnabled = false, proxyUrl = "", routePrefix = "" } = {}, + config: Config, proxy = koaProxy, ): Koa.Middleware { // eslint-disable-next-line max-statements return async function middleware(ctx, next) { + const { proxyEnabled, proxyUrl, routePrefix } = config; + + debug("middleware running for path: %s", ctx.request.path); + debug("routePrefix: %s", routePrefix); + if (!ctx.request.path.startsWith(routePrefix)) { // eslint-disable-next-line @typescript-eslint/no-unsafe-return return await next(); diff --git a/src/server/page-middleware.ts b/src/server/page-middleware.ts index 769f3a44..2c2e3c10 100644 --- a/src/server/page-middleware.ts +++ b/src/server/page-middleware.ts @@ -26,11 +26,12 @@ export function pageMiddleware( .join(__dirname, `../client/${templateName}.html.hbs`) .replaceAll("\\", "/"); - debug("pathToHandlebarsTemplate: %s", pathToHandlebarsTemplate); - const render = Handlebars.compile(await readFile(pathToHandlebarsTemplate)); if (ctx.URL.pathname === pathname) { + debug("rendering page: %s", pathname); + debug("locals: %o", locals); + ctx.body = render(locals); return; diff --git a/test/server/koa-middleware.test.ts b/test/server/koa-middleware.test.ts index 259b079c..88b34c64 100644 --- a/test/server/koa-middleware.test.ts +++ b/test/server/koa-middleware.test.ts @@ -9,6 +9,15 @@ import { Dispatcher } from "../../src/server/dispatcher.js"; import { koaMiddleware } from "../../src/server/koa-middleware.js"; import { Registry } from "../../src/server/registry.js"; +const CONFIG = { + basePath: "", + openApiPath: "", + port: 9999, + proxyEnabled: false, + proxyUrl: "", + routePrefix: "", +}; + const mockKoaProxy = (options: KoaProxy.Options | undefined) => function proxy(ctx: KoaContext) { ctx.mockProxyHost = options?.host; @@ -28,7 +37,7 @@ describe("koa middleware", () => { }); const dispatcher = new Dispatcher(registry, new ContextRegistry()); - const middleware = koaMiddleware(dispatcher); + const middleware = koaMiddleware(dispatcher, CONFIG); // eslint-disable-next-line @typescript-eslint/consistent-type-assertions const ctx = { req: { @@ -65,7 +74,7 @@ describe("koa middleware", () => { }); const dispatcher = new Dispatcher(registry, new ContextRegistry()); - const middleware = koaMiddleware(dispatcher); + const middleware = koaMiddleware(dispatcher, CONFIG); const ctx = { request: { headers: {}, method: "GET", path: "/not-modified" }, @@ -93,7 +102,7 @@ describe("koa middleware", () => { const dispatcher = new Dispatcher(registry, new ContextRegistry()); const middleware = koaMiddleware( dispatcher, - { proxyEnabled: true, proxyUrl: "https://example.com" }, + { ...CONFIG, proxyEnabled: true, proxyUrl: "https://example.com" }, mockKoaProxy, ); const ctx = { @@ -122,7 +131,7 @@ describe("koa middleware", () => { }); const dispatcher = new Dispatcher(registry, new ContextRegistry()); - const middleware = koaMiddleware(dispatcher); + const middleware = koaMiddleware(dispatcher, CONFIG); const ctx = { body: undefined, @@ -172,7 +181,7 @@ describe("koa middleware", () => { }); const dispatcher = new Dispatcher(registry, new ContextRegistry()); - const middleware = koaMiddleware(dispatcher); + const middleware = koaMiddleware(dispatcher, CONFIG); const ctx = { body: undefined, @@ -237,7 +246,7 @@ describe("koa middleware", () => { }); const dispatcher = new Dispatcher(registry, new ContextRegistry()); - const middleware = koaMiddleware(dispatcher); + const middleware = koaMiddleware(dispatcher, CONFIG); const ctx = { body: undefined, @@ -318,7 +327,7 @@ describe("koa middleware", () => { }); const dispatcher = new Dispatcher(registry, new ContextRegistry()); - const middleware = koaMiddleware(dispatcher); + const middleware = koaMiddleware(dispatcher, CONFIG); // eslint-disable-next-line @typescript-eslint/consistent-type-assertions const ctx = { req: {