@forestadmin/agent-bff 1.26.0 → 1.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,42 @@
1
+ /**
2
+ * The prefix is interpolated raw into everything the BFF emits — the docs page's absolute paths and
3
+ * the OpenAPI `servers` entry — so it is normalized once, here, before anything reads it. The two
4
+ * inputs that hurt are the ones that still look right:
5
+ *
6
+ * - `'/'` would emit `//agent/openapi.json`, an RFC 3986 network-path reference: a browser resolves
7
+ * `agent` as a HOST, so the page loads neither its document nor its bundle.
8
+ * - `'bff'` would emit a RELATIVE `servers` url, which a generator resolves against wherever it read
9
+ * the document from rather than against the origin — the page and the generated client then
10
+ * disagree silently.
11
+ *
12
+ * Anything that is not a plain path prefix is rejected rather than repaired: the value comes from the
13
+ * embedding host, usually an environment variable, and a mount the host does not serve is a
14
+ * misconfiguration to report, not a url to publish.
15
+ */
16
+ export default function normalizeBasePath(input?: string): string;
17
+ /**
18
+ * What the caller actually asked for, as a prefix, rather than what the deployment was configured
19
+ * with. A host that serves the BFF under a sub-path of its own — `app.use('/api', sub)` — strips
20
+ * that sub-path before the request lands here, so the configured value is only half the truth and
21
+ * every absolute path the BFF emits would miss it.
22
+ *
23
+ * The host preserves the untouched url on the request (`originalUrl`, the convention Express and
24
+ * Connect already follow), so the prefix is the difference between it and what this app was handed.
25
+ * Suffix removal rather than concatenation: the untouched url already contains the configured
26
+ * prefix, and re-appending it would emit `/api/bff/bff`.
27
+ *
28
+ * Falls back to the configured value whenever the two cannot be related — a standalone deployment
29
+ * has no `originalUrl` at all, and a host that rewrote the path beyond a prefix is not something to
30
+ * guess at.
31
+ */
32
+ export declare function resolveEmittedBase(untouchedUrl: string | undefined, seenUrl: string, configured: string): string;
33
+ /**
34
+ * Same thing, read off a Koa context. Defensive on purpose: a caller exercising a middleware with a
35
+ * hand-built context has no `req` at all, and an emitted path is never worth throwing over.
36
+ */
37
+ export declare function emittedBaseOf(ctx: {
38
+ req?: unknown;
39
+ originalUrl?: string;
40
+ url?: string;
41
+ }, configured: string): string;
42
+ //# sourceMappingURL=base-path.d.ts.map
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = normalizeBasePath;
4
+ exports.resolveEmittedBase = resolveEmittedBase;
5
+ exports.emittedBaseOf = emittedBaseOf;
6
+ const errors_1 = require("./errors");
7
+ const SHAPE = /^(\/[A-Za-z0-9_-]+)+$/;
8
+ /**
9
+ * The prefix is interpolated raw into everything the BFF emits — the docs page's absolute paths and
10
+ * the OpenAPI `servers` entry — so it is normalized once, here, before anything reads it. The two
11
+ * inputs that hurt are the ones that still look right:
12
+ *
13
+ * - `'/'` would emit `//agent/openapi.json`, an RFC 3986 network-path reference: a browser resolves
14
+ * `agent` as a HOST, so the page loads neither its document nor its bundle.
15
+ * - `'bff'` would emit a RELATIVE `servers` url, which a generator resolves against wherever it read
16
+ * the document from rather than against the origin — the page and the generated client then
17
+ * disagree silently.
18
+ *
19
+ * Anything that is not a plain path prefix is rejected rather than repaired: the value comes from the
20
+ * embedding host, usually an environment variable, and a mount the host does not serve is a
21
+ * misconfiguration to report, not a url to publish.
22
+ */
23
+ function normalizeBasePath(input) {
24
+ if (!input)
25
+ return '';
26
+ const trimmed = input.trim();
27
+ if (trimmed === '' || trimmed === '/')
28
+ return '';
29
+ const collapsed = `/${trimmed}`.replace(/\/+/g, '/').replace(/\/+$/, '');
30
+ if (!SHAPE.test(collapsed)) {
31
+ throw new errors_1.ConfigurationError(`Invalid BFF base path "${input}": use a plain path prefix like "/bff" ` +
32
+ `(letters, digits, "-" and "_" only).`);
33
+ }
34
+ return collapsed;
35
+ }
36
+ /**
37
+ * What the caller actually asked for, as a prefix, rather than what the deployment was configured
38
+ * with. A host that serves the BFF under a sub-path of its own — `app.use('/api', sub)` — strips
39
+ * that sub-path before the request lands here, so the configured value is only half the truth and
40
+ * every absolute path the BFF emits would miss it.
41
+ *
42
+ * The host preserves the untouched url on the request (`originalUrl`, the convention Express and
43
+ * Connect already follow), so the prefix is the difference between it and what this app was handed.
44
+ * Suffix removal rather than concatenation: the untouched url already contains the configured
45
+ * prefix, and re-appending it would emit `/api/bff/bff`.
46
+ *
47
+ * Falls back to the configured value whenever the two cannot be related — a standalone deployment
48
+ * has no `originalUrl` at all, and a host that rewrote the path beyond a prefix is not something to
49
+ * guess at.
50
+ */
51
+ function resolveEmittedBase(untouchedUrl, seenUrl, configured) {
52
+ if (typeof untouchedUrl !== 'string' || !untouchedUrl.endsWith(seenUrl))
53
+ return configured;
54
+ const prefix = untouchedUrl.slice(0, untouchedUrl.length - seenUrl.length);
55
+ return prefix.endsWith('/') ? prefix.slice(0, -1) : prefix;
56
+ }
57
+ /**
58
+ * Same thing, read off a Koa context. Defensive on purpose: a caller exercising a middleware with a
59
+ * hand-built context has no `req` at all, and an emitted path is never worth throwing over.
60
+ */
61
+ function emittedBaseOf(ctx, configured) {
62
+ const untouched = ctx.req?.originalUrl;
63
+ return resolveEmittedBase(untouched, ctx.originalUrl ?? ctx.url ?? '', configured);
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jhc2UtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1CQSxvQ0FpQkM7QUFpQkQsZ0RBVUM7QUFNRCxzQ0FPQztBQTVFRCxxQ0FBOEM7QUFFOUMsTUFBTSxLQUFLLEdBQUcsdUJBQXVCLENBQUM7QUFFdEM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUF3QixpQkFBaUIsQ0FBQyxLQUFjO0lBQ3RELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFFdEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRTdCLElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssR0FBRztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRWpELE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXpFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLDJCQUFrQixDQUMxQiwwQkFBMEIsS0FBSyx5Q0FBeUM7WUFDdEUsc0NBQXNDLENBQ3pDLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQ2hDLFlBQWdDLEVBQ2hDLE9BQWUsRUFDZixVQUFrQjtJQUVsQixJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQUUsT0FBTyxVQUFVLENBQUM7SUFFM0YsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0UsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDN0QsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGFBQWEsQ0FDM0IsR0FBMEQsRUFDMUQsVUFBa0I7SUFFbEIsTUFBTSxTQUFTLEdBQUksR0FBRyxDQUFDLEdBQTRDLEVBQUUsV0FBVyxDQUFDO0lBRWpGLE9BQU8sa0JBQWtCLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDckYsQ0FBQyJ9
@@ -7,6 +7,15 @@ export type BffCallback = (req: IncomingMessage, res: ServerResponse) => void |
7
7
  export interface BuildBffOptions {
8
8
  config: BFFConfig;
9
9
  logger?: Logger;
10
+ /**
11
+ * Prefix the host serves this BFF under, `/bff` for an embedded one. Routing is the host's job —
12
+ * it strips the prefix before the request lands here — but the paths the BFF *emits* (the OpenAPI
13
+ * `servers` entry, the docs page's asset and document urls) must carry it.
14
+ *
15
+ * A plain path prefix, with or without its leading slash; `'/'` and `''` both mean the BFF owns the
16
+ * origin root. Normalized by `normalizeBasePath`, which throws on anything else.
17
+ */
18
+ basePath?: string;
10
19
  }
11
20
  export interface Bff {
12
21
  callback: BffCallback;
@@ -27,6 +36,6 @@ export declare function resolveUnfoldSource(config: BFFConfig, logger: Logger):
27
36
  * answers 404 itself instead of yielding to a host `next()` — and every path it serves is absolute,
28
37
  * so a prefix mount would move `/health` and `/agent/...` off the paths the frontend calls.
29
38
  */
30
- export default function buildBff({ config, logger, }: BuildBffOptions): Promise<Bff>;
39
+ export default function buildBff({ config, logger, basePath, }: BuildBffOptions): Promise<Bff>;
31
40
  export {};
32
41
  //# sourceMappingURL=build-bff.d.ts.map
package/dist/build-bff.js CHANGED
@@ -52,6 +52,7 @@ const api_key_client_1 = __importDefault(require("./api-key/api-key-client"));
52
52
  const api_key_middleware_1 = __importDefault(require("./api-key/api-key-middleware"));
53
53
  const resolve_cache_1 = __importDefault(require("./api-key/resolve-cache"));
54
54
  const auth_mode_middleware_1 = __importDefault(require("./auth/auth-mode-middleware"));
55
+ const base_path_1 = __importDefault(require("./base-path"));
55
56
  const missing_config_warning_1 = __importDefault(require("./config/missing-config-warning"));
56
57
  const context_routes_middleware_1 = __importDefault(require("./context/context-routes-middleware"));
57
58
  const cors_middleware_1 = __importDefault(require("./cors/cors-middleware"));
@@ -284,7 +285,7 @@ function buildAiMiddlewares(config, oauth, logger) {
284
285
  }),
285
286
  ];
286
287
  }
287
- function buildAgentMiddlewares(config, logger, oauth, aiMiddlewares) {
288
+ function buildAgentMiddlewares(config, logger, oauth, aiMiddlewares, basePath) {
288
289
  const { forestAuthSecret, defaultTimezone } = config;
289
290
  if (!forestAuthSecret) {
290
291
  logger('Warn', 'Agent edge disabled: FOREST_AUTH_SECRET is missing');
@@ -309,6 +310,7 @@ function buildAgentMiddlewares(config, logger, oauth, aiMiddlewares) {
309
310
  source,
310
311
  hasAiQueryRoute: aiMiddlewares.length > 0,
311
312
  publicUrl: config.publicUrl,
313
+ basePath,
312
314
  }),
313
315
  ...(bundle
314
316
  ? [
@@ -333,7 +335,10 @@ function buildAgentMiddlewares(config, logger, oauth, aiMiddlewares) {
333
335
  * answers 404 itself instead of yielding to a host `next()` — and every path it serves is absolute,
334
336
  * so a prefix mount would move `/health` and `/agent/...` off the paths the frontend calls.
335
337
  */
336
- async function buildBff({ config, logger = (0, console_logger_1.default)(), }) {
338
+ async function buildBff({ config, logger = (0, console_logger_1.default)(), basePath, }) {
339
+ // Before anything is assembled: a mount the host does not serve must fail at boot, not surface as
340
+ // a docs page that cannot load itself.
341
+ const mountPath = (0, base_path_1.default)(basePath);
337
342
  if (config.invalidAllowedOrigins.length > 0) {
338
343
  logger('Warn', 'Ignoring malformed BFF_ALLOWED_ORIGINS entries', {
339
344
  entries: config.invalidAllowedOrigins,
@@ -342,7 +347,7 @@ async function buildBff({ config, logger = (0, console_logger_1.default)(), }) {
342
347
  (0, missing_config_warning_1.default)(config, logger);
343
348
  const oauth = buildOAuthMiddlewares(config, logger);
344
349
  const aiMiddlewares = buildAiMiddlewares(config, oauth, logger);
345
- const agentMiddlewares = buildAgentMiddlewares(config, logger, oauth, aiMiddlewares);
350
+ const agentMiddlewares = buildAgentMiddlewares(config, logger, oauth, aiMiddlewares, mountPath);
346
351
  const hasAgentEdge = agentMiddlewares.length > 0;
347
352
  const agentErrorMiddleware = hasAgentEdge ? [agentScoped((0, error_middleware_1.default)({ logger }))] : [];
348
353
  const agentJsonOnlyGuard = hasAgentEdge ? [agentScoped(createJsonOnlyGuard())] : [];
@@ -360,6 +365,7 @@ async function buildBff({ config, logger = (0, console_logger_1.default)(), }) {
360
365
  (0, docs_routes_1.default)({
361
366
  enabled: config.openapiEnabled && agentMiddlewares.length > 0,
362
367
  documentPath: openapi_routes_1.OPENAPI_PATH,
368
+ basePath: mountPath,
363
369
  logger,
364
370
  }),
365
371
  ...agentMiddlewares,
@@ -369,4 +375,4 @@ async function buildBff({ config, logger = (0, console_logger_1.default)(), }) {
369
375
  app.use(middleware);
370
376
  return { callback: app.callback() };
371
377
  }
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtYmZmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2J1aWxkLWJmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdJQSxnREFlQztBQXNKRCxrREFFQztBQWtJRCwyQkEwQ0M7QUFqZEQsZ0RBQTZDO0FBQzdDLDhDQUFzQjtBQUV0QixpR0FBNkU7QUFDN0UsK0VBQTREO0FBQzVELG9FQUEyRDtBQUMzRCw2REFBOEQ7QUFDOUQsMkVBQWlEO0FBQ2pELGtGQUFxRjtBQUNyRiw0RkFBd0U7QUFDeEUsOEVBQW9EO0FBQ3BELHNGQUFrRTtBQUNsRSw0RUFBeUQ7QUFDekQsdUZBQW1FO0FBQ25FLDZGQUFnRTtBQUNoRSxvR0FBZ0Y7QUFDaEYsNkVBQTBEO0FBQzFELDJFQUFpRTtBQUNqRSwyRkFBdUU7QUFDdkUscUVBQWtEO0FBQ2xELDBEQUEyRTtBQUMzRSxnRUFBOEQ7QUFDOUQsK0VBQTREO0FBQzVELHVFQUFvRDtBQUNwRCxpR0FBNkU7QUFDN0UseUVBQW1HO0FBQ25HLHdGQUE4RDtBQUM5RCx3RUFBcUQ7QUFDckQsMEVBQStEO0FBQy9ELHdFQUFxRDtBQUNyRCwyRUFBNkU7QUFDN0Usd0ZBQStEO0FBQy9ELDBGQUFpRTtBQUNqRSxnSEFBNEY7QUFDNUYseUVBQWtEO0FBQ2xELCtGQUEyRTtBQUMzRSx1RkFBNkQ7QUFDN0QseUZBQXNFO0FBQ3RFLHdEQUFnQztBQWNoQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBRXpDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRXZELE1BQU0sZUFBZSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUVuRSxTQUFTLE9BQU8sQ0FBQyxHQUE4QjtJQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDOUUsQ0FBQztBQUVELFNBQVMsbUJBQW1CO0lBQzFCLE9BQU8sS0FBSyxVQUFVLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSTtRQUMzQyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM3RSxNQUFNLElBQUEscUNBQW9CLEdBQUUsQ0FBQztRQUMvQixDQUFDO1FBRUQsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUNmLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxVQUFzQjtJQUN6QyxPQUFPLEtBQUssVUFBVSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDcEMsSUFBSSxDQUFDLElBQUEsb0JBQVcsRUFBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksRUFBRSxDQUFDO1lBRWIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsZUFBd0I7SUFDaEQsTUFBTSxXQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBQSx1QkFBVSxFQUFDLEVBQUUsU0FBUyxFQUFFLG9CQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUVyRSxJQUFJLENBQUMsZUFBZTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXZDLE1BQU0sV0FBVyxHQUFHLElBQUEsdUJBQVUsRUFBQztRQUM3QixTQUFTLEVBQUUsMEJBQWE7UUFDeEIsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3JCLFdBQVc7S0FDWixDQUFDLENBQUM7SUFFSCxPQUFPLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsSUFBSTtRQUNoRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUsscUNBQWMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUU3QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FBQyxNQUFjO0lBQ2xELE9BQU8sS0FBSyxVQUFVLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxJQUFJO1FBQ3BELElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDckMsTUFBTSxDQUFDLE9BQU8sRUFBRSwyREFBMkQsQ0FBQyxDQUFDO1lBQzdFLE1BQU0sSUFBQSw2QkFBWSxFQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDZixDQUFDLENBQUM7QUFDSixDQUFDO0FBVUQsU0FBZ0Isa0JBQWtCLENBQUMsTUFBaUI7SUFDbEQsTUFBTSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLEdBQzVGLE1BQU0sQ0FBQztJQUVULElBQ0UsZUFBZTtRQUNmLGVBQWU7UUFDZixZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUNsQixDQUFDO1FBQ0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLENBQUM7SUFDbEcsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFjRCxTQUFTLHFCQUFxQixDQUFDLE1BQWlCLEVBQUUsTUFBYztJQUM5RCxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUvQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsTUFBTSxDQUFDLE1BQU0sRUFBRSwwREFBMEQsQ0FBQyxDQUFDO1FBRTNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxHQUM1RixXQUFXLENBQUM7SUFFZCxNQUFNLFlBQVksR0FBRyxJQUFJLDhCQUFrQixDQUFDLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQzdGLE1BQU0sb0JBQW9CLEdBQUcsSUFBQSx3QkFBMkIsRUFBQyxZQUFZLENBQUMsQ0FBQztJQUV2RSxNQUFNLFlBQVksR0FBRyxJQUFBLHVCQUEwQixFQUFDO1FBQzlDLE1BQU0sRUFBRSxJQUFBLHNCQUFpQixFQUFDLGtCQUFrQixDQUFDO1FBQzdDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ3JCLGlCQUFpQixFQUFFLG1CQUFtQjtLQUN2QyxDQUFDLENBQUM7SUFFSCxNQUFNLFdBQVcsR0FBRyxJQUFBLHNCQUFpQixFQUFDO1FBQ3BDLFlBQVk7UUFDWixZQUFZO1FBQ1osWUFBWTtRQUNaLFVBQVUsRUFBRSxnQkFBZ0I7UUFDNUIsb0JBQW9CO1FBQ3BCLE1BQU07S0FDUCxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDO1FBQzFCLG9CQUFvQjtRQUNwQixPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUU7S0FDaEUsQ0FBQztBQUNKLENBQUM7QUFRRCxTQUFTLG1CQUFtQixDQUFDLE1BQWlCO0lBQzVDLE1BQU0sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRXRFLElBQUksZUFBZSxJQUFJLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLE1BQWlCLEVBQUUsTUFBYztJQUM5RCxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVqRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLE1BQU0sRUFBRSwwREFBMEQsQ0FBQyxDQUFDO1FBRTNFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLHdCQUFZLENBQUM7UUFDOUIsZUFBZSxFQUFFLFlBQVksQ0FBQyxlQUFlO1FBQzdDLFNBQVMsRUFBRSxZQUFZLENBQUMsZUFBZTtLQUN4QyxDQUFDLENBQUM7SUFDSCxNQUFNLEtBQUssR0FBRyxJQUFBLHVCQUFrQixFQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUQsTUFBTSxhQUFhLEdBQUcsSUFBQSwrQkFBeUIsRUFBQztRQUM5QyxNQUFNO1FBQ04sS0FBSztRQUNMLFVBQVUsRUFBRSxZQUFZLENBQUMsZ0JBQWdCO0tBQzFDLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBQSw0QkFBc0IsRUFBQyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFPRDs7OztHQUlHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FDN0IsTUFBaUIsRUFDakIsTUFBYyxFQUNkLE9BQWlCO0lBRWpCLE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWpELElBQUksQ0FBQyxZQUFZO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFcEMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUEsMkJBQWUsRUFBQztRQUNoQyxlQUFlLEVBQUUsWUFBWSxDQUFDLGVBQWU7UUFDN0MsU0FBUyxFQUFFLFlBQVksQ0FBQyxlQUFlO1FBQ3ZDLE1BQU07UUFDTixPQUFPO0tBQ1IsQ0FBQyxDQUFDO0lBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUNqQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGNBQWMsQ0FDckIsTUFBbUMsRUFDbkMsTUFBaUIsRUFDakIsTUFBYztJQUVkLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRWxELE9BQU87UUFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsU0FBUyxFQUFFLElBQUEscUNBQW1CLEVBQUM7WUFDN0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLFNBQVMsRUFBRSxNQUFNLENBQUMsY0FBYztTQUNqQyxDQUFDO1FBQ0YsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsR0FBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBRW5GLFNBQWdCLG1CQUFtQixDQUFDLE1BQWlCLEVBQUUsTUFBYztJQUNuRSxPQUFPLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1RixDQUFDO0FBRUQsaUZBQWlGO0FBQ2pGLFNBQVMsMEJBQTBCLENBQ2pDLE1BQW1DLEVBQ25DLE1BQWlCLEVBQ2pCLE1BQWM7SUFFZCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLENBQ0osTUFBTSxFQUNOLHdIQUF3SCxDQUN6SCxDQUFDO1FBRUYsT0FBTyxDQUFDLElBQUEsb0JBQXlCLEdBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUN2QyxNQUFNLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFdkQsTUFBTSxxQkFBcUIsR0FBRyxJQUFBLHVDQUFpQyxFQUFDO1FBQzlELEtBQUs7UUFDTCxNQUFNLEVBQUUsSUFBSSw0QkFBaUIsQ0FBQztZQUM1QixlQUFlLEVBQUUsWUFBWSxDQUFDLGVBQWU7WUFDN0MsU0FBUyxFQUFFLFlBQVksQ0FBQyxlQUFlO1NBQ3hDLENBQUM7UUFDRixLQUFLLEVBQUUsSUFBSSwyQkFBZ0IsRUFBRTtRQUM3QixNQUFNO0tBQ1AsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxDQUFDLE1BQU0sRUFBRSwwREFBMEQsQ0FBQyxDQUFDO1FBRTNFLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxJQUFBLG9CQUF5QixHQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBQSxxQ0FBbUIsRUFBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRS9ELE9BQU87UUFDTCxxQkFBcUI7UUFDckIsSUFBQSxnQ0FBMEIsRUFBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDeEQsSUFBQSxrQ0FBNEIsRUFBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7S0FDM0QsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLE1BQWlCLEVBQUUsS0FBZ0IsRUFBRSxNQUFjO0lBQzdFLE1BQU0sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFaEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxDQUFDLE1BQU0sRUFBRSxrRUFBa0UsQ0FBQyxDQUFDO1FBRW5GLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLElBQUkseUJBQWEsQ0FBQztRQUMvQixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7UUFDeEMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxXQUFXO0tBQzlCLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxJQUFBLDhCQUF3QixFQUFDO1lBQ3ZCLE1BQU07WUFDTixZQUFZLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDM0IsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1lBQ2xDLG9CQUFvQjtZQUNwQixNQUFNO1NBQ1AsQ0FBQztLQUNILENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FDNUIsTUFBaUIsRUFDakIsTUFBYyxFQUNkLEtBQWdCLEVBQ2hCLGFBQTJCO0lBRTNCLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFckQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxvREFBb0QsQ0FBQyxDQUFDO1FBRXJFLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRyxtR0FBbUc7SUFDbkcsMkZBQTJGO0lBQzNGLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0RCxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV0RCxNQUFNLEtBQUssR0FBaUI7UUFDMUIsSUFBQSw4QkFBd0IsRUFBQyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFELFVBQVU7UUFDVixJQUFBLCtCQUF5QixFQUFDO1lBQ3hCLFdBQVcsRUFBRSxNQUFNLENBQUMsb0JBQW9CO1lBQ3hDLFFBQVEsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1NBQ25DLENBQUM7UUFDRixJQUFBLHdCQUE0QixFQUFDLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyRixJQUFBLHdCQUFtQixFQUFDO1lBQ2xCLE9BQU8sRUFBUCxpQkFBTztZQUNQLE9BQU8sRUFBRSxNQUFNLENBQUMsY0FBYztZQUM5QixNQUFNO1lBQ04sZUFBZSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUN6QyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7U0FDNUIsQ0FBQztRQUNGLEdBQUcsQ0FBQyxNQUFNO1lBQ1IsQ0FBQyxDQUFDO2dCQUNFLElBQUEsbUNBQTZCLEVBQUM7b0JBQzVCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztvQkFDbkIsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjt3QkFDOUMsQ0FBQyxDQUFDLElBQUEsNkNBQTRCLEVBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQzt3QkFDbEUsQ0FBQyxDQUFDLFNBQVM7aUJBQ2QsQ0FBQzthQUNIO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLEdBQUcsYUFBYTtRQUNoQixJQUFBLDZCQUF3QixFQUFDLEVBQUUsZUFBZSxFQUFFLENBQUM7UUFDN0MsR0FBRywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztLQUN0RCxDQUFDO0lBRUYsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDWSxLQUFLLFVBQVUsUUFBUSxDQUFDLEVBQ3JDLE1BQU0sRUFDTixNQUFNLEdBQUcsSUFBQSx3QkFBbUIsR0FBRSxHQUNkO0lBQ2hCLElBQUksTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxNQUFNLENBQUMsTUFBTSxFQUFFLGdEQUFnRCxFQUFFO1lBQy9ELE9BQU8sRUFBRSxNQUFNLENBQUMscUJBQXFCO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFBLGdDQUFpQixFQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVsQyxNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEQsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRSxNQUFNLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakQsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUEsMEJBQXFCLEVBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2xHLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRXBGLE1BQU0sV0FBVyxHQUFHO1FBQ2xCLElBQUEsbUNBQTZCLEVBQUMsaUJBQU8sQ0FBQztRQUN0QyxJQUFBLHNCQUFpQixFQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBUCxpQkFBTyxFQUFFLENBQUM7UUFDdEMsSUFBQSx5QkFBb0IsRUFBQyxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3ZFLEdBQUcsb0JBQW9CO1FBQ3ZCLEdBQUcsa0JBQWtCO1FBQ3JCLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLEdBQUcsS0FBSyxDQUFDLFdBQVc7UUFDcEIsa0dBQWtHO1FBQ2xHLDhGQUE4RjtRQUM5RiwwRkFBMEY7UUFDMUYsSUFBQSxxQkFBZ0IsRUFBQztZQUNmLE9BQU8sRUFBRSxNQUFNLENBQUMsY0FBYyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzdELFlBQVksRUFBRSw2QkFBWTtZQUMxQixNQUFNO1NBQ1AsQ0FBQztRQUNGLEdBQUcsZ0JBQWdCO0tBQ3BCLENBQUM7SUFFRixNQUFNLEdBQUcsR0FBRyxJQUFJLGFBQUcsRUFBRSxDQUFDO0lBQ3RCLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVztRQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztBQUN0QyxDQUFDIn0=
378
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtYmZmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2J1aWxkLWJmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtKQSxnREFlQztBQXNKRCxrREFFQztBQW9JRCwyQkFnREM7QUFuZUQsZ0RBQTZDO0FBQzdDLDhDQUFzQjtBQUV0QixpR0FBNkU7QUFDN0UsK0VBQTREO0FBQzVELG9FQUEyRDtBQUMzRCw2REFBOEQ7QUFDOUQsMkVBQWlEO0FBQ2pELGtGQUFxRjtBQUNyRiw0RkFBd0U7QUFDeEUsOEVBQW9EO0FBQ3BELHNGQUFrRTtBQUNsRSw0RUFBeUQ7QUFDekQsdUZBQW1FO0FBQ25FLDREQUE0QztBQUM1Qyw2RkFBZ0U7QUFDaEUsb0dBQWdGO0FBQ2hGLDZFQUEwRDtBQUMxRCwyRUFBaUU7QUFDakUsMkZBQXVFO0FBQ3ZFLHFFQUFrRDtBQUNsRCwwREFBMkU7QUFDM0UsZ0VBQThEO0FBQzlELCtFQUE0RDtBQUM1RCx1RUFBb0Q7QUFDcEQsaUdBQTZFO0FBQzdFLHlFQUFtRztBQUNuRyx3RkFBOEQ7QUFDOUQsd0VBQXFEO0FBQ3JELDBFQUErRDtBQUMvRCx3RUFBcUQ7QUFDckQsMkVBQTZFO0FBQzdFLHdGQUErRDtBQUMvRCwwRkFBaUU7QUFDakUsZ0hBQTRGO0FBQzVGLHlFQUFrRDtBQUNsRCwrRkFBMkU7QUFDM0UsdUZBQTZEO0FBQzdELHlGQUFzRTtBQUN0RSx3REFBZ0M7QUF1QmhDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFFekMsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFdkQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBRW5FLFNBQVMsT0FBTyxDQUFD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
@@ -6,6 +6,11 @@ export interface DocsRoutesOptions {
6
6
  enabled: boolean;
7
7
  /** Where the shell fetches the document. Passed in so this module never reaches into `src/openapi`. */
8
8
  documentPath: string;
9
+ /**
10
+ * Prefix the host serves the BFF under. The page carries absolute paths — the browser resolves
11
+ * them against the origin, not against the page — so they must carry the prefix too.
12
+ */
13
+ basePath?: string;
9
14
  logger: Logger;
10
15
  /** The bundle lookup, as a seam: an install that shipped without the asset is a real state to serve. */
11
16
  resolveBundlePath?: () => string | undefined;
@@ -30,5 +35,5 @@ export declare function resolveBundle(directory?: string): string | undefined;
30
35
  * instead of the BFF error contract. A 404 also keeps a disabled deployment from advertising a page
31
36
  * it does not serve.
32
37
  */
33
- export default function createDocsRoutes({ enabled, documentPath, logger, resolveBundlePath, }: DocsRoutesOptions): Middleware;
38
+ export default function createDocsRoutes({ enabled, documentPath, basePath, logger, resolveBundlePath, }: DocsRoutesOptions): Middleware;
34
39
  //# sourceMappingURL=docs-routes.d.ts.map
@@ -9,6 +9,7 @@ exports.default = createDocsRoutes;
9
9
  const fs_1 = require("fs");
10
10
  const path_1 = __importDefault(require("path"));
11
11
  const docs_page_1 = __importDefault(require("./docs-page"));
12
+ const base_path_1 = require("../base-path");
12
13
  exports.DOCS_PATH = '/docs';
13
14
  exports.DOCS_BUNDLE_PATH = '/docs/redoc.standalone.js';
14
15
  const BUNDLE_FILE = 'redoc.standalone.js';
@@ -45,12 +46,22 @@ function resolveBundle(directory = __dirname) {
45
46
  * instead of the BFF error contract. A 404 also keeps a disabled deployment from advertising a page
46
47
  * it does not serve.
47
48
  */
48
- function createDocsRoutes({ enabled, documentPath, logger, resolveBundlePath = resolveBundle, }) {
49
+ function createDocsRoutes({ enabled, documentPath, basePath = '', logger, resolveBundlePath = resolveBundle, }) {
49
50
  const bundle = enabled ? resolveBundlePath() : undefined;
50
51
  if (enabled && !bundle) {
51
52
  logger('Warn', `API documentation page disabled: ${BUNDLE_FILE} is missing from this install`);
52
53
  }
53
- const page = bundle ? (0, docs_page_1.default)(documentPath, exports.DOCS_BUNDLE_PATH) : undefined;
54
+ // Rendered per request rather than once: the prefix depends on where the host serves the BFF,
55
+ // which only the request knows. Memoized per prefix, of which a deployment has one in practice.
56
+ const pages = new Map();
57
+ const pageFor = (base) => {
58
+ const cached = pages.get(base);
59
+ if (cached !== undefined)
60
+ return cached;
61
+ const rendered = (0, docs_page_1.default)(`${base}${documentPath}`, `${base}${exports.DOCS_BUNDLE_PATH}`);
62
+ pages.set(base, rendered);
63
+ return rendered;
64
+ };
54
65
  let script;
55
66
  return async function docsRoutes(ctx, next) {
56
67
  const isDocsPath = ctx.path === exports.DOCS_PATH || ctx.path === exports.DOCS_BUNDLE_PATH;
@@ -80,7 +91,7 @@ function createDocsRoutes({ enabled, documentPath, logger, resolveBundlePath = r
80
91
  ctx.status = 200;
81
92
  ctx.type = 'text/html';
82
93
  ctx.set('Cache-Control', 'no-store');
83
- ctx.body = page;
94
+ ctx.body = pageFor((0, base_path_1.emittedBaseOf)(ctx, basePath));
84
95
  };
85
96
  }
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jcy1yb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9jcy9kb2NzLXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUErQkEsc0NBWUM7QUFhRCxtQ0FvREM7QUF6R0QsMkJBQThDO0FBQzlDLGdEQUF3QjtBQUV4Qiw0REFBeUM7QUFFNUIsUUFBQSxTQUFTLEdBQUcsT0FBTyxDQUFDO0FBQ3BCLFFBQUEsZ0JBQWdCLEdBQUcsMkJBQTJCLENBQUM7QUFFNUQsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUM7QUFDMUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQVc5Qzs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLFlBQW9CLFNBQVM7SUFDekQsTUFBTSxNQUFNLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFakQsSUFBSSxJQUFBLGVBQVUsRUFBQyxNQUFNLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUV0QyxJQUFJLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQO2lFQUN5RDtRQUN6RCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUF3QixnQkFBZ0IsQ0FBQyxFQUN2QyxPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sRUFDTixpQkFBaUIsR0FBRyxhQUFhLEdBQ2Y7SUFDbEIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFekQsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsTUFBTSxFQUFFLG9DQUFvQyxXQUFXLCtCQUErQixDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBQSxtQkFBYyxFQUFDLFlBQVksRUFBRSx3QkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDakYsSUFBSSxNQUEwQixDQUFDO0lBRS9CLE9BQU8sS0FBSyxVQUFVLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSTtRQUN4QyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLGlCQUFTLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyx3QkFBZ0IsQ0FBQztRQUUzRSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxNQUFNLElBQUksRUFBRSxDQUFDO1lBRWIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssd0JBQWdCLEVBQUUsQ0FBQztZQUNsQywrRkFBK0Y7WUFDL0YsZ0dBQWdHO1lBQ2hHLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUM7b0JBQ0gsTUFBTSxHQUFHLElBQUEsaUJBQVksRUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixNQUFNLENBQUMsTUFBTSxFQUFFLHdDQUF3QyxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBRTVFLE1BQU0sSUFBSSxFQUFFLENBQUM7b0JBRWIsT0FBTztnQkFDVCxDQUFDO1lBQ0gsQ0FBQztZQUVELEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1lBQ2pCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsd0JBQXdCLENBQUM7WUFDcEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUNqRCxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUVsQixPQUFPO1FBQ1QsQ0FBQztRQUVELEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO1FBQ3ZCLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztBQUNKLENBQUMifQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jcy1yb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9jcy9kb2NzLXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFxQ0Esc0NBWUM7QUFhRCxtQ0FrRUM7QUE3SEQsMkJBQThDO0FBQzlDLGdEQUF3QjtBQUV4Qiw0REFBeUM7QUFDekMsNENBQTZDO0FBRWhDLFFBQUEsU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUNwQixRQUFBLGdCQUFnQixHQUFHLDJCQUEyQixDQUFDO0FBRTVELE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFnQjlDOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixhQUFhLENBQUMsWUFBb0IsU0FBUztJQUN6RCxNQUFNLE1BQU0sR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVqRCxJQUFJLElBQUEsZUFBVSxFQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBRXRDLElBQUksQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1A7aUVBQ3lEO1FBQ3pELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQXdCLGdCQUFnQixDQUFDLEVBQ3ZDLE9BQU8sRUFDUCxZQUFZLEVBQ1osUUFBUSxHQUFHLEVBQUUsRUFDYixNQUFNLEVBQ04saUJBQWlCLEdBQUcsYUFBYSxHQUNmO0lBQ2xCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRXpE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
@@ -5,10 +5,14 @@
5
5
  * In the page rather than in the document, deliberately. Three samples per operation weigh ~73 KB on
6
6
  * a 16-collection schema and several hundred KB on a large one, which every consumer of
7
7
  * `/agent/openapi.json` would pay for an extension only a viewer reads — where this costs one
8
- * function whatever the operation count. It also lets a sample carry the REAL origin: the document
9
- * declares `servers` root-relative unless `BFF_PUBLIC_URL` is set, so a sample built into it could
10
- * only hold a placeholder host, while the page knows where it is served from and emits a command
11
- * that runs as pasted.
8
+ * function whatever the operation count. It also lets a sample carry the REAL origin: unless
9
+ * `BFF_PUBLIC_URL` is set, the document's `servers` entry is root-relative — at most a mount prefix,
10
+ * never a host — so a sample built into it could only hold a placeholder host, while the page knows
11
+ * the origin it was served from.
12
+ *
13
+ * The two halves therefore compose — origin from the page, prefix from the document — rather than
14
+ * either one alone: a BFF mounted under `/bff` answers on the page's origin, but at `/bff/agent/...`,
15
+ * and a sample that skipped the prefix would 404, or worse reach whatever owns the origin root.
12
16
  *
13
17
  * The key is never inlined: each language reads it from the environment, so a copied sample cannot
14
18
  * carry a credential into a shell history or a paste.
@@ -13,10 +13,14 @@ const SESSION_VARIABLE = 'BFF_SESSION';
13
13
  * In the page rather than in the document, deliberately. Three samples per operation weigh ~73 KB on
14
14
  * a 16-collection schema and several hundred KB on a large one, which every consumer of
15
15
  * `/agent/openapi.json` would pay for an extension only a viewer reads — where this costs one
16
- * function whatever the operation count. It also lets a sample carry the REAL origin: the document
17
- * declares `servers` root-relative unless `BFF_PUBLIC_URL` is set, so a sample built into it could
18
- * only hold a placeholder host, while the page knows where it is served from and emits a command
19
- * that runs as pasted.
16
+ * function whatever the operation count. It also lets a sample carry the REAL origin: unless
17
+ * `BFF_PUBLIC_URL` is set, the document's `servers` entry is root-relative — at most a mount prefix,
18
+ * never a host — so a sample built into it could only hold a placeholder host, while the page knows
19
+ * the origin it was served from.
20
+ *
21
+ * The two halves therefore compose — origin from the page, prefix from the document — rather than
22
+ * either one alone: a BFF mounted under `/bff` answers on the page's origin, but at `/bff/agent/...`,
23
+ * and a sample that skipped the prefix would 404, or worse reach whatever owns the origin root.
20
24
  *
21
25
  * The key is never inlined: each language reads it from the environment, so a copied sample cannot
22
26
  * carry a credential into a shell history or a paste.
@@ -294,7 +298,7 @@ const SAMPLES_SCRIPT = `
294
298
  return lines.join('\\n');
295
299
  }
296
300
 
297
- function decorateWithSamples(spec, origin) {
301
+ function decorateWithSamples(spec, base) {
298
302
  var paths = spec.paths || {};
299
303
 
300
304
  Object.keys(paths).forEach(function (path) {
@@ -307,7 +311,7 @@ const SAMPLES_SCRIPT = `
307
311
 
308
312
  var body = exampleBody(spec, operation);
309
313
  var headers = headersOf(spec, operation, body);
310
- var url = origin + samplePath(spec, item, operation, path);
314
+ var url = base + samplePath(spec, item, operation, path);
311
315
  var verb = method.toUpperCase();
312
316
 
313
317
  operation['x-codeSamples'] = [
@@ -321,6 +325,22 @@ const SAMPLES_SCRIPT = `
321
325
  return spec;
322
326
  }
323
327
 
328
+ /**
329
+ * The base every sample is built on, read off the document's own \`servers\` entry so the
330
+ * snippets and the generated clients cannot disagree. An entry that already carries a scheme
331
+ * and a host is the base as it stands; a bare prefix is appended to the origin the page was
332
+ * served from, and \`/\` means the BFF owns that origin root.
333
+ */
334
+ function sampleBase(spec) {
335
+ var mount = (((spec.servers || [])[0]) || {}).url || '/';
336
+
337
+ while (mount.length > 1 && mount.slice(-1) === '/') mount = mount.slice(0, -1);
338
+
339
+ if (mount.indexOf('//') === 0 || mount.indexOf('://') !== -1) return mount;
340
+
341
+ return mount === '/' ? window.location.origin : window.location.origin + mount;
342
+ }
343
+
324
344
  /**
325
345
  * Samples are a convenience; the document is the point. A shape the generator cannot walk
326
346
  * costs the reader its snippets, never the page — and reporting it as a Redoc render failure
@@ -328,11 +348,11 @@ const SAMPLES_SCRIPT = `
328
348
  */
329
349
  function withSamples(spec) {
330
350
  try {
331
- return decorateWithSamples(spec, window.location.origin);
351
+ return decorateWithSamples(spec, sampleBase(spec));
332
352
  } catch (samplesError) {
333
353
  return spec;
334
354
  }
335
355
  }
336
356
  `;
337
357
  exports.default = SAMPLES_SCRIPT;
338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jcy1zYW1wbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RvY3MvZG9jcy1zYW1wbGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0VBQStEO0FBQy9ELHlFQUFrRTtBQUVsRSxpR0FBaUc7QUFDakcsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQzlCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUMvQixNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztBQUV2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sY0FBYyxHQUFHOzJCQUNJLElBQUksQ0FBQyxTQUFTLENBQUMsbUNBQWMsQ0FBQztnQ0FDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQ0FBZSxDQUFDO2dDQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQzs2QkFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7aUNBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBMlNoRSxDQUFDO0FBRUYsa0JBQWUsY0FBYyxDQUFDIn0=
358
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jcy1zYW1wbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RvY3MvZG9jcy1zYW1wbGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0VBQStEO0FBQy9ELHlFQUFrRTtBQUVsRSxpR0FBaUc7QUFDakcsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQzlCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUMvQixNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztBQUV2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFNLGNBQWMsR0FBRzsyQkFDSSxJQUFJLENBQUMsU0FBUyxDQUFDLG1DQUFjLENBQUM7Z0NBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMscUNBQWUsQ0FBQztnQ0FDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7NkJBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO2lDQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EyVGhFLENBQUM7QUFFRixrQkFBZSxjQUFjLENBQUMifQ==
@@ -6,9 +6,11 @@ export declare const DOCUMENT_PATH = "/agent/openapi.json";
6
6
  export interface GenerateOpenApiDocumentOptions {
7
7
  unfolding?: Unfolding;
8
8
  hasAiQueryRoute?: boolean;
9
- /** The deployment's own external base URL, from `BFF_PUBLIC_URL`. Absent falls back to `/`. */
9
+ /** The deployment's own external base URL, from `BFF_PUBLIC_URL`. Takes precedence. */
10
10
  publicUrl?: string;
11
+ /** Where the BFF answers from the caller's point of view. Empty when it owns the origin root. */
12
+ basePath?: string;
11
13
  }
12
- export declare function generateOpenApiDocument(version: string, { unfolding, hasAiQueryRoute, publicUrl }?: GenerateOpenApiDocumentOptions): OpenAPIObject;
14
+ export declare function generateOpenApiDocument(version: string, { unfolding, hasAiQueryRoute, publicUrl, basePath, }?: GenerateOpenApiDocumentOptions): OpenAPIObject;
13
15
  export declare function serializeOpenApi(document: OpenAPIObject): string;
14
16
  //# sourceMappingURL=openapi-document.d.ts.map
@@ -457,7 +457,7 @@ const CONFIGURED_SERVER_DESCRIPTION = 'The public base URL of this BFF deploymen
457
457
  const RELATIVE_SERVER_DESCRIPTION = 'Resolved against the URL this document was fetched from. Set BFF_PUBLIC_URL on the deployment ' +
458
458
  'to publish its absolute base URL here instead, which a client generated from an offline export ' +
459
459
  'needs.';
460
- function generateOpenApiDocument(version, { unfolding, hasAiQueryRoute = false, publicUrl } = {}) {
460
+ function generateOpenApiDocument(version, { unfolding, hasAiQueryRoute = false, publicUrl, basePath = '', } = {}) {
461
461
  const registry = new zod_to_openapi_1.OpenAPIRegistry();
462
462
  const hasActions = unfolding === undefined ||
463
463
  unfolding.collections.some(collection => collection.actions.length > 0);
@@ -562,11 +562,11 @@ function generateOpenApiDocument(version, { unfolding, hasAiQueryRoute = false,
562
562
  servers: [
563
563
  publicUrl
564
564
  ? { url: publicUrl, description: CONFIGURED_SERVER_DESCRIPTION }
565
- : { url: '/', description: RELATIVE_SERVER_DESCRIPTION },
565
+ : { url: basePath || '/', description: RELATIVE_SERVER_DESCRIPTION },
566
566
  ],
567
567
  });
568
568
  }
569
569
  function serializeOpenApi(document) {
570
570
  return JSON.stringify(document, null, 2);
571
571
  }
572
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS1kb2N1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL29wZW5hcGktZG9jdW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd2pCQSwwREE2SEM7QUFFRCw0Q0FFQztBQXRyQkQsbUVBQXNGO0FBRXRGLHNFQUE2QztBQUM3Qyx1Q0FnQm1CO0FBQ25CLHNFQUFxRDtBQUNyRCwrQ0FBa0M7QUFDbEMsK0RBQTZEO0FBQzdELGlFQUErRDtBQUMvRCx3RUFBNEU7QUFFL0QsUUFBQSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQzFCLFFBQUEsWUFBWSxHQUFHLFdBQVcsQ0FBQztBQUMzQixRQUFBLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztBQUVuRCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFDcEMsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBRW5DLE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRXRFLE1BQU0sY0FBYyxHQUEyQjtJQUM3QyxHQUFHLEVBQUUsa1ZBQWtWO0lBQ3ZWLEdBQUcsRUFBRSwwQ0FBMEM7SUFDL0MsR0FBRyxFQUFFLDBPQUEwTztJQUMvTyxHQUFHLEVBQUUseUNBQXlDO0lBQzlDLEdBQUcsRUFBRSw2Q0FBNkMsb0JBQVUsRUFBRTtJQUM5RCxHQUFHLEVBQUUsNlNBQTZTO0lBQ2xULEdBQUcsRUFBRSx1SUFBdUk7SUFDNUksR0FBRyxFQUFFLDhQQUE4UCxvQ0FBaUIsQ0FBQyxhQUFhLFdBQVcsb0NBQWlCLENBQUMsZ0JBQWdCLDRUQUE0VDtJQUMzb0IsR0FBRyxFQUFFLCtGQUErRjtJQUNwRyxHQUFHLEVBQUUsaUZBQWlGO0lBQ3RGLEdBQUcsRUFBRSw2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
572
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS1kb2N1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL29wZW5hcGktZG9jdW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMGpCQSwwREFrSUM7QUFFRCw0Q0FFQztBQTdyQkQsbUVBQXNGO0FBRXRGLHNFQUE2QztBQUM3Qyx1Q0FnQm1CO0FBQ25CLHNFQUFxRDtBQUNyRCwrQ0FBa0M7QUFDbEMsK0RBQTZEO0FBQzdELGlFQUErRDtBQUMvRCx3RUFBNEU7QUFFL0QsUUFBQSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQzFCLFFBQUEsWUFBWSxHQUFHLFdBQVcsQ0FBQztBQUMzQixRQUFBLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztBQUVuRCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFDcEMsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBRW5DLE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRXRFLE1BQU0sY0FBYyxHQUEyQjtJQUM3QyxHQUFHLEVBQUUsa1ZBQWtWO0lBQ3ZWLEdBQUcsRUFBRSwwQ0FBMEM7SUFDL0MsR0FBRyxFQUFFLDBPQUEwTztJQUMvTyxHQUFHLEVBQUUseUNBQXlDO0lBQzlDLEdBQUcsRUFBRSw2Q0FBNkMsb0JBQVUsRUFBRTtJQUM5RCxHQUFHLEVBQUUsNlNBQTZTO0lBQ2xULEdBQUcsRUFBRSx1SUFBdUk7SUFDNUksR0FBRyxFQUFFLDhQQUE4UCxvQ0FBaUIsQ0FBQyxhQUFhLFdBQVcsb0NBQWlCLENBQUMsZ0JBQWdCLDRUQUE0VDtJQUMzb0IsR0FBRyxFQUFFLCtGQUErRjtJQUNwRyxHQUFHLEVBQUUsaUZBQWlGO0lBQ3RGLEdBQUcsRUFBRSw2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
@@ -6,8 +6,10 @@ export interface OpenApiRoutesOptions {
6
6
  enabled: boolean;
7
7
  hasAiQueryRoute: boolean;
8
8
  publicUrl?: string;
9
+ /** Prefix the host serves the BFF under, so a generated client targets the right base url. */
10
+ basePath?: string;
9
11
  /** Absent (no agent or no read-model configuration) serves the generic document. */
10
12
  source?: UnfoldSource;
11
13
  }
12
- export default function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, publicUrl, }: OpenApiRoutesOptions): Middleware;
14
+ export default function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, publicUrl, basePath, }: OpenApiRoutesOptions): Middleware;
13
15
  //# sourceMappingURL=openapi-routes.d.ts.map
@@ -8,21 +8,30 @@ exports.default = createOpenApiRoutes;
8
8
  const openapi_document_1 = require("./openapi-document");
9
9
  const unfolded_document_1 = __importDefault(require("./unfolded-document"));
10
10
  const unfolding_1 = require("./unfolding");
11
+ const base_path_1 = require("../base-path");
11
12
  const agent_route_helpers_1 = require("../http/agent-route-helpers");
12
13
  const bff_local_errors_1 = require("../http/bff-local-errors");
13
14
  exports.OPENAPI_PATH = '/agent/openapi.json';
14
15
  const READ_METHODS = new Set(['GET', 'HEAD']);
15
16
  const MAX_GENERATION_RETRIES = 3;
16
- function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, publicUrl, }) {
17
- const generic = enabled && !source
18
- ? (0, openapi_document_1.serializeOpenApi)((0, openapi_document_1.generateOpenApiDocument)(version, { hasAiQueryRoute, publicUrl }))
19
- : undefined;
17
+ function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, publicUrl, basePath, }) {
18
+ // Both documents carry the prefix the caller reached the BFF under, which only the request knows,
19
+ // so both are memoized per prefix instead of built once. A deployment has one prefix in practice.
20
+ const generics = new Map();
21
+ const genericFor = (base) => {
22
+ const cached = generics.get(base);
23
+ if (cached !== undefined)
24
+ return cached;
25
+ const document = (0, openapi_document_1.serializeOpenApi)((0, openapi_document_1.generateOpenApiDocument)(version, { hasAiQueryRoute, publicUrl, basePath: base }));
26
+ generics.set(base, document);
27
+ return document;
28
+ };
20
29
  // Memoized on the read-model identity: the store builds a new one per schema generation, so the
21
30
  // document is rebuilt exactly when the schema it describes changed.
22
- let unfolded;
23
- async function resolveDocument(ctx, attemptsLeft = MAX_GENERATION_RETRIES) {
31
+ const unfoldedByBase = new Map();
32
+ async function resolveDocument(ctx, base, attemptsLeft = MAX_GENERATION_RETRIES) {
24
33
  if (!source)
25
- return generic;
34
+ return genericFor(base);
26
35
  if (attemptsLeft <= 0) {
27
36
  throw new Error('Schema generation kept changing while building the OpenAPI document');
28
37
  }
@@ -30,19 +39,21 @@ function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, public
30
39
  // fetch anything: the unfolded document needs a token to ask the agent for capabilities.
31
40
  const token = (0, agent_route_helpers_1.requireAgentToken)(ctx);
32
41
  const readModel = await (0, agent_route_helpers_1.resolveReadModel)(source.store);
33
- if (unfolded?.readModel === readModel)
34
- return unfolded.document;
42
+ const memoized = unfoldedByBase.get(base);
43
+ if (memoized?.readModel === readModel)
44
+ return memoized.document;
35
45
  const { document, unfolding } = await (0, unfolded_document_1.default)(source, readModel, token, {
36
46
  version,
37
47
  hasAiQueryRoute,
38
48
  publicUrl,
49
+ basePath: base,
39
50
  });
40
51
  // A schema refresh landing during the capabilities fan-out mixes the new generation's field sets
41
52
  // into this generation's collections, relations and actions. Such a document must not be served
42
53
  // nor cached — a consumer would generate a client from a self-contradictory schema. Bounded like
43
54
  // `ReadModelStore.getCapabilities`, and driven by the 24h schema TTL rather than request volume.
44
55
  if ((await (0, agent_route_helpers_1.resolveReadModel)(source.store)) !== readModel) {
45
- return resolveDocument(ctx, attemptsLeft - 1);
56
+ return resolveDocument(ctx, base, attemptsLeft - 1);
46
57
  }
47
58
  // Only a complete document is memoized. The memo key is the schema generation, which moves on a
48
59
  // 24h TTL, so caching a document built while the agent was briefly down would keep serving a
@@ -50,7 +61,7 @@ function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, public
50
61
  // the revision. `CapabilitiesCache` deliberately caches successes only; this keeps that true
51
62
  // end to end, at the cost of re-running the fan-out until the agent answers again.
52
63
  if (!(0, unfolding_1.hasDegradedCollection)(unfolding)) {
53
- unfolded = { readModel, document };
64
+ unfoldedByBase.set(base, { readModel, document });
54
65
  }
55
66
  return document;
56
67
  }
@@ -62,11 +73,11 @@ function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, public
62
73
  if (!enabled) {
63
74
  throw (0, bff_local_errors_1.openapiDisabled)();
64
75
  }
65
- const document = await resolveDocument(ctx);
76
+ const document = await resolveDocument(ctx, (0, base_path_1.emittedBaseOf)(ctx, basePath ?? ''));
66
77
  ctx.status = 200;
67
78
  ctx.type = 'application/json';
68
79
  ctx.set('Cache-Control', 'no-store');
69
80
  ctx.body = document;
70
81
  };
71
82
  }
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS1yb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFwaS9vcGVuYXBpLXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF5QkEsc0NBNkVDO0FBbEdELHlEQUErRTtBQUMvRSw0RUFBd0Q7QUFDeEQsMkNBQW9EO0FBQ3BELHFFQUFrRjtBQUNsRiwrREFBMkQ7QUFFOUMsUUFBQSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFFbEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUU5QyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQVdqQyxTQUF3QixtQkFBbUIsQ0FBQyxFQUMxQyxPQUFPLEVBQ1AsT0FBTyxFQUNQLE1BQU0sRUFDTixlQUFlLEVBQ2YsU0FBUyxHQUNZO0lBQ3JCLE1BQU0sT0FBTyxHQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU07UUFDaEIsQ0FBQyxDQUFDLElBQUEsbUNBQWdCLEVBQUMsSUFBQSwwQ0FBdUIsRUFBQyxPQUFPLEVBQUUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRixDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWhCLGdHQUFnRztJQUNoRyxvRUFBb0U7SUFDcEUsSUFBSSxRQUFnRSxDQUFDO0lBRXJFLEtBQUssVUFBVSxlQUFlLENBQzVCLEdBQThCLEVBQzlCLFlBQVksR0FBRyxzQkFBc0I7UUFFckMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLE9BQWlCLENBQUM7UUFFdEMsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFFRCw0RkFBNEY7UUFDNUYseUZBQXlGO1FBQ3pGLE1BQU0sS0FBSyxHQUFHLElBQUEsdUNBQWlCLEVBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFBLHNDQUFnQixFQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2RCxJQUFJLFFBQVEsRUFBRSxTQUFTLEtBQUssU0FBUztZQUFFLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUVoRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sSUFBQSwyQkFBcUIsRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtZQUNwRixPQUFPO1lBQ1AsZUFBZTtZQUNmLFNBQVM7U0FDVixDQUFDLENBQUM7UUFFSCxpR0FBaUc7UUFDakcsZ0dBQWdHO1FBQ2hHLGlHQUFpRztRQUNqRyxpR0FBaUc7UUFDakcsSUFBSSxDQUFDLE1BQU0sSUFBQSxzQ0FBZ0IsRUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN6RCxPQUFPLGVBQWUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxnR0FBZ0c7UUFDaEcsNkZBQTZGO1FBQzdGLCtGQUErRjtRQUMvRiw2RkFBNkY7UUFDN0YsbUZBQW1GO1FBQ25GLElBQUksQ0FBQyxJQUFBLGlDQUFxQixFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdEMsUUFBUSxHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsT0FBTyxLQUFLLFVBQVUsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJO1FBQzNDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxvQkFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvRCxNQUFNLElBQUksRUFBRSxDQUFDO1lBRWIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUEsa0NBQWUsR0FBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU1QyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNqQixHQUFHLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1FBQzlCLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBQ3RCLENBQUMsQ0FBQztBQUNKLENBQUMifQ==
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS1yb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFwaS9vcGVuYXBpLXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUE0QkEsc0NBNEZDO0FBcEhELHlEQUErRTtBQUMvRSw0RUFBd0Q7QUFDeEQsMkNBQW9EO0FBQ3BELDRDQUE2QztBQUM3QyxxRUFBa0Y7QUFDbEYsK0RBQTJEO0FBRTlDLFFBQUEsWUFBWSxHQUFHLHFCQUFxQixDQUFDO0FBRWxELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFOUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUM7QUFhakMsU0FBd0IsbUJBQW1CLENBQUMsRUFDMUMsT0FBTyxFQUNQLE9BQU8sRUFDUCxNQUFNLEVBQ04sZUFBZSxFQUNmLFNBQVMsRUFDVCxRQUFRLEdBQ2E7SUFDckIsa0dBQWtHO0lBQ2xHLGtHQUFrRztJQUNsRyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUUzQyxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFO1FBQzFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxNQUFNLEtBQUssU0FBUztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBRXhDLE1BQU0sUUFBUSxHQUFHLElBQUEsbUNBQWdCLEVBQy9CLElBQUEsMENBQXVCLEVBQUMsT0FBTyxFQUFFLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FDakYsQ0FBQztRQUNGLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTdCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUVGLGdHQUFnRztJQUNoRyxvRUFB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
@@ -18,8 +18,9 @@ export interface UnfoldOptions {
18
18
  version: string;
19
19
  hasAiQueryRoute: boolean;
20
20
  publicUrl?: string;
21
+ basePath?: string;
21
22
  }
22
- export default function buildUnfoldedDocument(source: UnfoldSource, readModel: ReadModel, token: string | (() => string), { version, hasAiQueryRoute, publicUrl }: UnfoldOptions): Promise<UnfoldedDocument>;
23
+ export default function buildUnfoldedDocument(source: UnfoldSource, readModel: ReadModel, token: string | (() => string), { version, hasAiQueryRoute, publicUrl, basePath }: UnfoldOptions): Promise<UnfoldedDocument>;
23
24
  /**
24
25
  * The CLI has no caller to borrow an agent token from, so it signs its own with the deployment's
25
26
  * auth secret — the only thing the agent verifies, and the capabilities route it calls runs no
@@ -9,7 +9,7 @@ const collect_unfolding_1 = __importDefault(require("./collect-unfolding"));
9
9
  const openapi_document_1 = require("./openapi-document");
10
10
  const agent_token_1 = require("../api-key/agent-token");
11
11
  const agent_capabilities_fetcher_1 = __importDefault(require("../read-model/agent-capabilities-fetcher"));
12
- async function buildUnfoldedDocument(source, readModel, token, { version, hasAiQueryRoute, publicUrl }) {
12
+ async function buildUnfoldedDocument(source, readModel, token, { version, hasAiQueryRoute, publicUrl, basePath }) {
13
13
  const unfolding = await (0, collect_unfolding_1.default)({
14
14
  readModel,
15
15
  store: source.store,
@@ -17,7 +17,7 @@ async function buildUnfoldedDocument(source, readModel, token, { version, hasAiQ
17
17
  logger: source.logger,
18
18
  });
19
19
  return {
20
- document: (0, openapi_document_1.serializeOpenApi)((0, openapi_document_1.generateOpenApiDocument)(version, { unfolding, hasAiQueryRoute, publicUrl })),
20
+ document: (0, openapi_document_1.serializeOpenApi)((0, openapi_document_1.generateOpenApiDocument)(version, { unfolding, hasAiQueryRoute, publicUrl, basePath })),
21
21
  unfolding,
22
22
  };
23
23
  }
@@ -48,4 +48,4 @@ function issueOpenApiAgentToken(authSecret) {
48
48
  },
49
49
  });
50
50
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5mb2xkZWQtZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFwaS91bmZvbGRlZC1kb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQThCQSx3Q0FtQkM7QUFXRCx3REFpQkM7QUF2RUQsNEVBQW1EO0FBQ25ELHlEQUErRTtBQUMvRSx3REFBeUQ7QUFDekQsMEdBQXNGO0FBcUJ2RSxLQUFLLFVBQVUscUJBQXFCLENBQ2pELE1BQW9CLEVBQ3BCLFNBQW9CLEVBQ3BCLEtBQThCLEVBQzlCLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQWlCO0lBRXRELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBQSwyQkFBZ0IsRUFBQztRQUN2QyxTQUFTO1FBQ1QsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ25CLG1CQUFtQixFQUFFLElBQUEsb0NBQThCLEVBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMzRixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07S0FDdEIsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLFFBQVEsRUFBRSxJQUFBLG1DQUFnQixFQUN4QixJQUFBLDBDQUF1QixFQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FDNUU7UUFDRCxTQUFTO0tBQ1YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLFVBQWtCO0lBQ3ZELE9BQU8sSUFBQSw2QkFBZSxFQUFDO1FBQ3JCLFVBQVU7UUFDVixRQUFRLEVBQUU7WUFDUixXQUFXLEVBQUUsQ0FBQztZQUNkLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLElBQUksRUFBRTtnQkFDSixFQUFFLEVBQUUsQ0FBQztnQkFDTCxLQUFLLEVBQUUsbUNBQW1DO2dCQUMxQyxTQUFTLEVBQUUsUUFBUTtnQkFDbkIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLElBQUksRUFBRSxFQUFFO2dCQUNSLGVBQWUsRUFBRSxPQUFPO2FBQ3pCO1NBQ0Y7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIn0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5mb2xkZWQtZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFwaS91bmZvbGRlZC1kb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQStCQSx3Q0FtQkM7QUFXRCx3REFpQkM7QUF4RUQsNEVBQW1EO0FBQ25ELHlEQUErRTtBQUMvRSx3REFBeUQ7QUFDekQsMEdBQXNGO0FBc0J2RSxLQUFLLFVBQVUscUJBQXFCLENBQ2pELE1BQW9CLEVBQ3BCLFNBQW9CLEVBQ3BCLEtBQThCLEVBQzlCLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFpQjtJQUVoRSxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEsMkJBQWdCLEVBQUM7UUFDdkMsU0FBUztRQUNULEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixtQkFBbUIsRUFBRSxJQUFBLG9DQUE4QixFQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDM0YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0tBQ3RCLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxRQUFRLEVBQUUsSUFBQSxtQ0FBZ0IsRUFDeEIsSUFBQSwwQ0FBdUIsRUFBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUN0RjtRQUNELFNBQVM7S0FDVixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsVUFBa0I7SUFDdkQsT0FBTyxJQUFBLDZCQUFlLEVBQUM7UUFDckIsVUFBVTtRQUNWLFFBQVEsRUFBRTtZQUNSLFdBQVcsRUFBRSxDQUFDO1lBQ2QsY0FBYyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxFQUFFO2dCQUNKLEVBQUUsRUFBRSxDQUFDO2dCQUNMLEtBQUssRUFBRSxtQ0FBbUM7Z0JBQzFDLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixRQUFRLEVBQUUsS0FBSztnQkFDZixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsZUFBZSxFQUFFLE9BQU87YUFDekI7U0FDRjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/agent-bff",
3
- "version": "1.26.0",
3
+ "version": "1.27.0",
4
4
  "main": "dist/index.js",
5
5
  "bin": {
6
6
  "forest-bff": "dist/cli.js"