@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.
- package/dist/base-path.d.ts +42 -0
- package/dist/base-path.js +65 -0
- package/dist/build-bff.d.ts +10 -1
- package/dist/build-bff.js +10 -4
- package/dist/docs/docs-routes.d.ts +6 -1
- package/dist/docs/docs-routes.js +15 -4
- package/dist/docs/docs-samples.d.ts +8 -4
- package/dist/docs/docs-samples.js +28 -8
- package/dist/openapi/openapi-document.d.ts +4 -2
- package/dist/openapi/openapi-document.js +3 -3
- package/dist/openapi/openapi-routes.d.ts +3 -1
- package/dist/openapi/openapi-routes.js +24 -13
- package/dist/openapi/unfolded-document.d.ts +2 -1
- package/dist/openapi/unfolded-document.js +3 -3
- package/package.json +1 -1
|
@@ -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
|
package/dist/build-bff.d.ts
CHANGED
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtYmZmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2J1aWxkLWJmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdJQSxnREFlQztBQXNKRCxrREFFQztBQWtJRCwyQkEwQ0M7QUFqZEQsZ0RBQTZDO0FBQzdDLDhDQUFzQjtBQUV0QixpR0FBNkU7QUFDN0UsK0VBQTREO0FBQzVELG9FQUEyRDtBQUMzRCw2REFBOEQ7QUFDOUQsMkVBQWlEO0FBQ2pELGtGQUFxRjtBQUNyRiw0RkFBd0U7QUFDeEUsOEVBQW9EO0FBQ3BELHNGQUFrRTtBQUNsRSw0RUFBeUQ7QUFDekQsdUZBQW1FO0FBQ25FLDZGQUFnRTtBQUNoRSxvR0FBZ0Y7QUFDaEYsNkVBQTBEO0FBQzFELDJFQUFpRTtBQUNqRSwyRkFBdUU7QUFDdkUscUVBQWtEO0FBQ2xELDBEQUEyRTtBQUMzRSxnRUFBOEQ7QUFDOUQsK0VBQTREO0FBQzVELHVFQUFvRDtBQUNwRCxpR0FBNkU7QUFDN0UseUVBQW1HO0FBQ25HLHdGQUE4RDtBQUM5RCx3RUFBcUQ7QUFDckQsMEVBQStEO0FBQy9ELHdFQUFxRDtBQUNyRCwyRUFBNkU7QUFDN0Usd0ZBQStEO0FBQy9ELDBGQUFpRTtBQUNqRSxnSEFBNEY7QUFDNUYseUVBQWtEO0FBQ2xELCtGQUEyRTtBQUMzRSx1RkFBNkQ7QUFDN0QseUZBQXNFO0FBQ3RFLHdEQUFnQztBQWNoQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBRXpDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRXZELE1BQU0sZUFBZSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUVuRSxTQUFTLE9BQU8sQ0FBQyxHQUE4QjtJQUM3QyxP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
|
|
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
|
package/dist/docs/docs-routes.js
CHANGED
|
@@ -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
|
-
|
|
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 =
|
|
94
|
+
ctx.body = pageFor((0, base_path_1.emittedBaseOf)(ctx, basePath));
|
|
84
95
|
};
|
|
85
96
|
}
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
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:
|
|
9
|
-
*
|
|
10
|
-
* only hold a placeholder host, while the page knows
|
|
11
|
-
*
|
|
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:
|
|
17
|
-
*
|
|
18
|
-
* only hold a placeholder host, while the page knows
|
|
19
|
-
*
|
|
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,
|
|
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 =
|
|
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,
|
|
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,
|
|
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`.
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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,
|
|
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,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5mb2xkZWQtZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFwaS91bmZvbGRlZC1kb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQStCQSx3Q0FtQkM7QUFXRCx3REFpQkM7QUF4RUQsNEVBQW1EO0FBQ25ELHlEQUErRTtBQUMvRSx3REFBeUQ7QUFDekQsMEdBQXNGO0FBc0J2RSxLQUFLLFVBQVUscUJBQXFCLENBQ2pELE1BQW9CLEVBQ3BCLFNBQW9CLEVBQ3BCLEtBQThCLEVBQzlCLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFpQjtJQUVoRSxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEsMkJBQWdCLEVBQUM7UUFDdkMsU0FBUztRQUNULEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixtQkFBbUIsRUFBRSxJQUFBLG9DQUE4QixFQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDM0YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0tBQ3RCLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxRQUFRLEVBQUUsSUFBQSxtQ0FBZ0IsRUFDeEIsSUFBQSwwQ0FBdUIsRUFBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUN0RjtRQUNELFNBQVM7S0FDVixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsVUFBa0I7SUFDdkQsT0FBTyxJQUFBLDZCQUFlLEVBQUM7UUFDckIsVUFBVTtRQUNWLFFBQVEsRUFBRTtZQUNSLFdBQVcsRUFBRSxDQUFDO1lBQ2QsY0FBYyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxFQUFFO2dCQUNKLEVBQUUsRUFBRSxDQUFDO2dCQUNMLEtBQUssRUFBRSxtQ0FBbUM7Z0JBQzFDLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixRQUFRLEVBQUUsS0FBSztnQkFDZixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsZUFBZSxFQUFFLE9BQU87YUFDekI7U0FDRjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
|