@forestadmin/agent-bff 1.24.0 → 1.25.1
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/README.md +3 -1
- package/dist/api-key/api-key-client.js +2 -1
- package/dist/cli-core.js +3 -3
- package/dist/cors/cors-middleware.d.ts +3 -1
- package/dist/cors/cors-middleware.js +8 -2
- package/dist/cors/origin.d.ts +6 -0
- package/dist/cors/origin.js +11 -1
- package/dist/cors/per-key-origin.d.ts +6 -1
- package/dist/cors/per-key-origin.js +38 -3
- package/dist/openapi/openapi-document.d.ts +1 -0
- package/dist/openapi/openapi-document.js +137 -8
- package/dist/openapi/schemas.d.ts +32 -0
- package/dist/openapi/schemas.js +67 -2
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -21,7 +21,9 @@ Everything the agent proxy exposes lives under `/agent/v1`. The data and action
|
|
|
21
21
|
| `/agent/v1/permissions` | `GET` | what the caller may see and do, **as display hints** for graying out UI — never an authorization decision |
|
|
22
22
|
| `/agent/openapi.json` | `GET`/`HEAD` | the unfolded document, auth-gated, when `BFF_OPENAPI_ENABLED` is on |
|
|
23
23
|
|
|
24
|
-
`/health
|
|
24
|
+
`/health`, the `/oauth/*` login routes and the `/docs` viewer (page and `redoc.standalone.js`
|
|
25
|
+
bundle) sit outside the prefix and outside the auth edge; `/health` and `/docs` answer `HEAD` as
|
|
26
|
+
well as `GET`.
|
|
25
27
|
|
|
26
28
|
**The agent enforces permissions and scopes, not the BFF.** Each proxied call carries a
|
|
27
29
|
short-lived agent token the BFF mints for the caller, so a request reaches the agent as that
|
|
@@ -55,6 +55,7 @@ class ApiKeyClient {
|
|
|
55
55
|
const candidate = body;
|
|
56
56
|
return (typeof candidate.renderingId === 'number' &&
|
|
57
57
|
Array.isArray(candidate.allowedOrigins) &&
|
|
58
|
+
candidate.allowedOrigins.every(entry => typeof entry === 'string') &&
|
|
58
59
|
ApiKeyClient.isIdentityUser(candidate.user));
|
|
59
60
|
}
|
|
60
61
|
// Every field the agent-token mint reads must be present, so a partial body fails here
|
|
@@ -82,4 +83,4 @@ class ApiKeyClient {
|
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
85
|
exports.default = ApiKeyClient;
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpLWtleS9hcGkta2V5LWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtRUFBNkQ7QUFFN0QsaUVBQTZEO0FBQXBELDJIQUFBLGtCQUFrQixPQUFBO0FBd0IzQixNQUFNLGVBQWUsR0FBRyxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBVyxDQUFDO0FBQ3hFLE1BQU0sa0JBQWtCLEdBQUcsS0FBTSxDQUFDO0FBQ2xDLE1BQU0sWUFBWSxHQUFHLGdDQUFnQyxDQUFDO0FBTXRELE1BQXFCLFlBQVk7SUFJL0IsWUFBWSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQXVCO1FBQzdELElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFNBR25CO1FBQ0MsSUFBSSxRQUFrQixDQUFDO1FBRXZCLElBQUksQ0FBQztZQUNILFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUM3QyxNQUFNLEVBQUUsTUFBTTtnQkFDZCxPQUFPLEVBQUUsRUFBRSxHQUFHLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNwRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzFFLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2FBQ2hELENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFNLElBQUksMENBQWtCLENBQUMsRUFBRSxXQUFXLEVBQUUs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
|
package/dist/cli-core.js
CHANGED
|
@@ -298,7 +298,7 @@ function buildAgentMiddlewares(config, logger, oauth, aiMiddlewares) {
|
|
|
298
298
|
maxRequests: config.rateLimitMaxRequests,
|
|
299
299
|
windowMs: config.rateLimitWindowMs,
|
|
300
300
|
}),
|
|
301
|
-
(0, per_key_origin_1.default)(),
|
|
301
|
+
(0, per_key_origin_1.default)({ logger, serverAllowedOrigins: config.allowedOrigins }),
|
|
302
302
|
(0, openapi_routes_1.default)({
|
|
303
303
|
version: version_1.default,
|
|
304
304
|
enabled: config.openapiEnabled,
|
|
@@ -327,7 +327,7 @@ async function runCli(env, logger = (0, console_logger_1.default)()) {
|
|
|
327
327
|
const agentErrorMiddleware = hasAgentEdge ? [agentScoped((0, error_middleware_1.default)({ logger }))] : [];
|
|
328
328
|
const agentJsonOnlyGuard = hasAgentEdge ? [agentScoped(createJsonOnlyGuard())] : [];
|
|
329
329
|
const middlewares = [
|
|
330
|
-
(0, cors_middleware_1.default)({ allowedOrigins: config.allowedOrigins }),
|
|
330
|
+
(0, cors_middleware_1.default)({ allowedOrigins: config.allowedOrigins, logger }),
|
|
331
331
|
...agentErrorMiddleware,
|
|
332
332
|
...agentJsonOnlyGuard,
|
|
333
333
|
createBodyParser(aiMiddlewares.length > 0),
|
|
@@ -356,4 +356,4 @@ function reportFatalError(err) {
|
|
|
356
356
|
process.stderr.write(`Error: ${(0, errors_1.extractErrorMessage)(err)}\n`);
|
|
357
357
|
process.exitCode = 1;
|
|
358
358
|
}
|
|
359
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xpLWNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1SEEsZ0RBZUM7QUFvSkQsa0RBRUM7QUFpSEQseUJBNkNDO0FBRUQsNENBR0M7QUF2YkQsZ0RBQTZDO0FBRTdDLGlHQUE2RTtBQUM3RSwrRUFBNEQ7QUFDNUQsb0VBQTJEO0FBQzNELDJFQUFpRDtBQUNqRCxrRkFBcUY7QUFDckYsNEZBQXdFO0FBQ3hFLDhFQUFvRDtBQUNwRCxzRkFBa0U7QUFDbEUsNEVBQXlEO0FBQ3pELHVGQUFtRTtBQUNuRSxvREFBa0Q7QUFDbEQsb0dBQWdGO0FBQ2hGLDZFQUEwRDtBQUMxRCwyRUFBaUU7QUFDakUsMkZBQXVFO0FBQ3ZFLHFFQUFrRDtBQUNsRCxxQ0FBK0M7QUFDL0MsMERBQTJFO0FBQzNFLDZFQUFtRDtBQUNuRCxnRUFBOEQ7QUFDOUQsK0VBQTREO0FBQzVELHdGQUE4RDtBQUM5RCx3RUFBcUQ7QUFDckQsMEVBQStEO0FBQy9ELHdFQUFxRDtBQUNyRCwyRUFBNkU7QUFDN0Usd0ZBQStEO0FBQy9ELDBGQUFpRTtBQUNqRSxnSEFBNEY7QUFDNUYseUVBQWtEO0FBQ2xELCtGQUEyRTtBQUMzRSx1RkFBNkQ7QUFDN0QseUZBQXNFO0FBQ3RFLHdEQUFnQztBQUVoQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBRXpDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRXZELE1BQU0sZUFBZSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUVuRSxTQUFTLE9BQU8sQ0FBQyxHQUE4QjtJQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxN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
|
|
359
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xpLWNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1SEEsZ0RBZUM7QUFvSkQsa0RBRUM7QUFpSEQseUJBNkNDO0FBRUQsNENBR0M7QUF2YkQsZ0RBQTZDO0FBRTdDLGlHQUE2RTtBQUM3RSwrRUFBNEQ7QUFDNUQsb0VBQTJEO0FBQzNELDJFQUFpRDtBQUNqRCxrRkFBcUY7QUFDckYsNEZBQXdFO0FBQ3hFLDhFQUFvRDtBQUNwRCxzRkFBa0U7QUFDbEUsNEVBQXlEO0FBQ3pELHVGQUFtRTtBQUNuRSxvREFBa0Q7QUFDbEQsb0dBQWdGO0FBQ2hGLDZFQUEwRDtBQUMxRCwyRUFBaUU7QUFDakUsMkZBQXVFO0FBQ3ZFLHFFQUFrRDtBQUNsRCxxQ0FBK0M7QUFDL0MsMERBQTJFO0FBQzNFLDZFQUFtRDtBQUNuRCxnRUFBOEQ7QUFDOUQsK0VBQTREO0FBQzVELHdGQUE4RDtBQUM5RCx3RUFBcUQ7QUFDckQsMEVBQStEO0FBQy9ELHdFQUFxRDtBQUNyRCwyRUFBNkU7QUFDN0Usd0ZBQStEO0FBQy9ELDBGQUFpRTtBQUNqRSxnSEFBNEY7QUFDNUYseUVBQWtEO0FBQ2xELCtGQUEyRTtBQUMzRSx1RkFBNkQ7QUFDN0QseUZBQXNFO0FBQ3RFLHdEQUFnQztBQUVoQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBRXpDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRXZELE1BQU0sZUFBZSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUVuRSxTQUFTLE9BQU8sQ0FBQyxHQUE4QjtJQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxN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
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import type { Logger } from '../ports/logger-port';
|
|
1
2
|
import type { Middleware } from 'koa';
|
|
2
3
|
export declare const ALLOWED_METHODS = "GET, POST, PUT, PATCH, DELETE, OPTIONS";
|
|
3
4
|
export declare const ALLOWED_HEADERS = "Authorization, Content-Type, X-Forest-Timezone, X-Forest-Bff-Key, X-Request-Id, Forest-Projection";
|
|
4
5
|
export declare const PREFLIGHT_MAX_AGE_SECONDS = 600;
|
|
5
6
|
export interface CorsMiddlewareOptions {
|
|
6
7
|
allowedOrigins: string[];
|
|
8
|
+
logger: Logger;
|
|
7
9
|
}
|
|
8
|
-
export default function createCorsMiddleware({ allowedOrigins, }: CorsMiddlewareOptions): Middleware;
|
|
10
|
+
export default function createCorsMiddleware({ allowedOrigins, logger, }: CorsMiddlewareOptions): Middleware;
|
|
9
11
|
//# sourceMappingURL=cors-middleware.d.ts.map
|
|
@@ -6,7 +6,7 @@ const origin_1 = require("./origin");
|
|
|
6
6
|
exports.ALLOWED_METHODS = 'GET, POST, PUT, PATCH, DELETE, OPTIONS';
|
|
7
7
|
exports.ALLOWED_HEADERS = 'Authorization, Content-Type, X-Forest-Timezone, X-Forest-Bff-Key, X-Request-Id, Forest-Projection';
|
|
8
8
|
exports.PREFLIGHT_MAX_AGE_SECONDS = 600;
|
|
9
|
-
function createCorsMiddleware({ allowedOrigins, }) {
|
|
9
|
+
function createCorsMiddleware({ allowedOrigins, logger, }) {
|
|
10
10
|
return async function corsMiddleware(ctx, next) {
|
|
11
11
|
const origin = ctx.get('Origin');
|
|
12
12
|
if (origin)
|
|
@@ -20,10 +20,16 @@ function createCorsMiddleware({ allowedOrigins, }) {
|
|
|
20
20
|
ctx.set('Access-Control-Allow-Headers', exports.ALLOWED_HEADERS);
|
|
21
21
|
ctx.set('Access-Control-Max-Age', String(exports.PREFLIGHT_MAX_AGE_SECONDS));
|
|
22
22
|
}
|
|
23
|
+
else if (origin && ctx.get('Access-Control-Request-Method')) {
|
|
24
|
+
logger('Warn', 'BFF preflight origin rejected', {
|
|
25
|
+
origin: (0, origin_1.loggableOrigin)(origin),
|
|
26
|
+
path: ctx.path,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
23
29
|
ctx.status = 204;
|
|
24
30
|
return;
|
|
25
31
|
}
|
|
26
32
|
await next();
|
|
27
33
|
};
|
|
28
34
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycy1taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcnMvY29ycy1taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWVBLHVDQWdDQztBQTVDRCxxQ0FBeUQ7QUFFNUMsUUFBQSxlQUFlLEdBQUcsd0NBQXdDLENBQUM7QUFDM0QsUUFBQSxlQUFlLEdBQzFCLG1HQUFtRyxDQUFDO0FBQ3pGLFFBQUEseUJBQXlCLEdBQUcsR0FBRyxDQUFDO0FBTzdDLFNBQXdCLG9CQUFvQixDQUFDLEVBQzNDLGNBQWMsRUFDZCxNQUFNLEdBQ2dCO0lBQ3RCLE9BQU8sS0FBSyxVQUFVLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSTtRQUM1QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWpDLElBQUksTUFBTTtZQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFL0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFBLHNCQUFhLEVBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFdkUsSUFBSSxPQUFPO1lBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1RCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixHQUFHLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLHVCQUFlLENBQUMsQ0FBQztnQkFDekQsR0FBRyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSx1QkFBZSxDQUFDLENBQUM7Z0JBQ3pELEdBQUcsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLGlDQUF5QixDQUFDLENBQUMsQ0FBQztZQUN2RSxDQUFDO2lCQUFNLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsRUFBRSxDQUFDO2dCQUM5RCxNQUFNLENBQUMsTUFBTSxFQUFFLCtCQUErQixFQUFFO29CQUM5QyxNQUFNLEVBQUUsSUFBQSx1QkFBYyxFQUFDLE1BQU0sQ0FBQztvQkFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO2lCQUNmLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUVqQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDZixDQUFDLENBQUM7QUFDSixDQUFDIn0=
|
package/dist/cors/origin.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The origin as it is safe to log: caller-controlled, so a header near Node's ~16kb limit would
|
|
3
|
+
* otherwise land verbatim in one Warn per rejected request, with no rate limit above it. The
|
|
4
|
+
* truncation marker keeps a cut value from reading like the real one.
|
|
5
|
+
*/
|
|
6
|
+
export declare function loggableOrigin(raw: string): string;
|
|
1
7
|
export declare function hasOrigin(raw: string | undefined | null): raw is string;
|
|
2
8
|
export declare function normalizeOrigin(raw: string | undefined | null): string | null;
|
|
3
9
|
export declare function parseAllowedOrigins(raw: string | undefined): {
|
package/dist/cors/origin.js
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loggableOrigin = loggableOrigin;
|
|
3
4
|
exports.hasOrigin = hasOrigin;
|
|
4
5
|
exports.normalizeOrigin = normalizeOrigin;
|
|
5
6
|
exports.parseAllowedOrigins = parseAllowedOrigins;
|
|
6
7
|
exports.originAllowed = originAllowed;
|
|
8
|
+
const MAX_LOGGED_ORIGIN_LENGTH = 256;
|
|
9
|
+
/**
|
|
10
|
+
* The origin as it is safe to log: caller-controlled, so a header near Node's ~16kb limit would
|
|
11
|
+
* otherwise land verbatim in one Warn per rejected request, with no rate limit above it. The
|
|
12
|
+
* truncation marker keeps a cut value from reading like the real one.
|
|
13
|
+
*/
|
|
14
|
+
function loggableOrigin(raw) {
|
|
15
|
+
return raw.length > MAX_LOGGED_ORIGIN_LENGTH ? `${raw.slice(0, MAX_LOGGED_ORIGIN_LENGTH)}…` : raw;
|
|
16
|
+
}
|
|
7
17
|
function hasOrigin(raw) {
|
|
8
18
|
return raw !== undefined && raw !== null && raw.trim() !== '';
|
|
9
19
|
}
|
|
@@ -48,4 +58,4 @@ function originAllowed(requestOrigin, allowList) {
|
|
|
48
58
|
return false;
|
|
49
59
|
return allowList.some(entry => normalizeOrigin(entry) === normalized);
|
|
50
60
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JpZ2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcnMvb3JpZ2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esd0NBRUM7QUFFRCw4QkFFQztBQUVELDBDQWlCQztBQUVELGtEQXNCQztBQUVELHNDQUtDO0FBL0RELE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0FBRXJDOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQUMsR0FBVztJQUN4QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEcsQ0FBQztBQUVELFNBQWdCLFNBQVMsQ0FBQyxHQUE4QjtJQUN0RCxPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ2hFLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQUMsR0FBOEI7SUFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUVqQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsSUFBSSxPQUFPLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXBDLElBQUksR0FBUSxDQUFDO0lBRWIsSUFBSSxDQUFDO1FBQ0gsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXZDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUNwQixDQUFDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsR0FBdUI7SUFJekQsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBRWhGLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUM3QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFFN0IsTUFBTSxPQUFPLEdBQUcsR0FBRztTQUNoQixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzFCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQztJQUVqQyxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxQyxJQUFJLFVBQVUsS0FBSyxJQUFJO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsYUFBaUMsRUFBRSxTQUFtQjtJQUNsRixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbEQsSUFBSSxVQUFVLEtBQUssSUFBSTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXRDLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztBQUN4RSxDQUFDIn0=
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import type { Logger } from '../ports/logger-port';
|
|
1
2
|
import type { Middleware } from 'koa';
|
|
2
|
-
export
|
|
3
|
+
export interface PerKeyOriginMiddlewareOptions {
|
|
4
|
+
logger: Logger;
|
|
5
|
+
serverAllowedOrigins: string[];
|
|
6
|
+
}
|
|
7
|
+
export default function createPerKeyOriginMiddleware({ logger, serverAllowedOrigins, }: PerKeyOriginMiddlewareOptions): Middleware;
|
|
3
8
|
//# sourceMappingURL=per-key-origin.d.ts.map
|
|
@@ -2,16 +2,51 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.default = createPerKeyOriginMiddleware;
|
|
4
4
|
const origin_1 = require("./origin");
|
|
5
|
+
const api_key_1 = require("../api-key/api-key");
|
|
6
|
+
const api_key_middleware_1 = require("../api-key/api-key-middleware");
|
|
5
7
|
const bff_http_error_1 = require("../http/bff-http-error");
|
|
6
|
-
|
|
8
|
+
// A key whose allowedOrigins share nothing with BFF_ALLOWED_ORIGINS can never serve a browser: this
|
|
9
|
+
// middleware lets the request through, the server-level CORS layer omits Access-Control-Allow-Origin,
|
|
10
|
+
// and the browser drops a response the BFF answered normally — no rejection anywhere, no trace. The
|
|
11
|
+
// misconfiguration belongs to the key, not to the request, so it is reported once per key rather
|
|
12
|
+
// than once per request; the cap keeps the seen set bounded on a rotating key population.
|
|
13
|
+
const MAX_ASSESSED_KEYS = 1000;
|
|
14
|
+
function createPerKeyOriginMiddleware({ logger, serverAllowedOrigins, }) {
|
|
15
|
+
const assessedKeys = new Set();
|
|
16
|
+
function reportOriginsThatCanNeverPass(allowedOrigins, keyHash) {
|
|
17
|
+
if (serverAllowedOrigins.length === 0 || assessedKeys.has(keyHash))
|
|
18
|
+
return;
|
|
19
|
+
const canNeverPass = !allowedOrigins.some(entry => (0, origin_1.originAllowed)(entry, serverAllowedOrigins));
|
|
20
|
+
if (assessedKeys.size >= MAX_ASSESSED_KEYS)
|
|
21
|
+
assessedKeys.clear();
|
|
22
|
+
assessedKeys.add(keyHash);
|
|
23
|
+
if (canNeverPass) {
|
|
24
|
+
logger('Warn', 'BFF key origins are all outside BFF_ALLOWED_ORIGINS', {
|
|
25
|
+
keyHash,
|
|
26
|
+
keyOrigins: allowedOrigins.map(origin_1.loggableOrigin),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
7
30
|
return async function perKeyOriginMiddleware(ctx, next) {
|
|
8
31
|
const identity = ctx.state.apiKeyIdentity;
|
|
9
32
|
const allowedOrigins = identity?.allowedOrigins ?? [];
|
|
10
33
|
const origin = ctx.get('Origin');
|
|
11
|
-
if (allowedOrigins.length
|
|
34
|
+
if (!identity || allowedOrigins.length === 0) {
|
|
35
|
+
await next();
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const keyHash = (0, api_key_1.fingerprintApiKey)(ctx.get(api_key_middleware_1.BFF_KEY_HEADER));
|
|
39
|
+
reportOriginsThatCanNeverPass(allowedOrigins, keyHash);
|
|
40
|
+
if ((0, origin_1.hasOrigin)(origin) && !(0, origin_1.originAllowed)(origin, allowedOrigins)) {
|
|
41
|
+
logger('Warn', 'BFF per-key origin rejected', {
|
|
42
|
+
origin: (0, origin_1.loggableOrigin)(origin),
|
|
43
|
+
path: ctx.path,
|
|
44
|
+
keyHash,
|
|
45
|
+
renderingId: identity.renderingId,
|
|
46
|
+
});
|
|
12
47
|
throw (0, bff_http_error_1.originNotAllowed)();
|
|
13
48
|
}
|
|
14
49
|
await next();
|
|
15
50
|
};
|
|
16
51
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyLWtleS1vcmlnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29ycy9wZXIta2V5LW9yaWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFCQSwrQ0FnREM7QUFqRUQscUNBQW9FO0FBQ3BFLGdEQUF1RDtBQUN2RCxzRUFBK0Q7QUFDL0QsMkRBQTBEO0FBTzFELG9HQUFvRztBQUNwRyxzR0FBc0c7QUFDdEcsb0dBQW9HO0FBQ3BHLGlHQUFpRztBQUNqRywwRkFBMEY7QUFDMUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFFL0IsU0FBd0IsNEJBQTRCLENBQUMsRUFDbkQsTUFBTSxFQUNOLG9CQUFvQixHQUNVO0lBQzlCLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFdkMsU0FBUyw2QkFBNkIsQ0FBQyxjQUF3QixFQUFFLE9BQWU7UUFDOUUsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTztRQUUzRSxNQUFNLFlBQVksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFBLHNCQUFhLEVBQUMsS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztRQUMvRixJQUFJLFlBQVksQ0FBQyxJQUFJLElBQUksaUJBQWlCO1lBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pFLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsTUFBTSxFQUFFLHFEQUFxRCxFQUFFO2dCQUNwRSxPQUFPO2dCQUNQLFVBQVUsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLHVCQUFjLENBQUM7YUFDL0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSTtRQUNwRCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQW9ELENBQUM7UUFDaEYsTUFBTSxjQUFjLEdBQUcsUUFBUSxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7UUFDdEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUViLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBQSwyQkFBaUIsRUFBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG1DQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzNELDZCQUE2QixDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV2RCxJQUFJLElBQUEsa0JBQVMsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUEsc0JBQWEsRUFBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxNQUFNLENBQUMsTUFBTSxFQUFFLDZCQUE2QixFQUFFO2dCQUM1QyxNQUFNLEVBQUUsSUFBQSx1QkFBYyxFQUFDLE1BQU0sQ0FBQztnQkFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO2dCQUNkLE9BQU87Z0JBQ1AsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO2FBQ2xDLENBQUMsQ0FBQztZQUVILE1BQU0sSUFBQSxpQ0FBZ0IsR0FBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -2,6 +2,7 @@ import type { Unfolding } from './unfolding';
|
|
|
2
2
|
import type { OpenAPIObject } from 'openapi3-ts/oas31';
|
|
3
3
|
export declare const OPENAPI_VERSION = "3.1.0";
|
|
4
4
|
export declare const ROUTE_PREFIX = "/agent/v1";
|
|
5
|
+
export declare const DOCUMENT_PATH = "/agent/openapi.json";
|
|
5
6
|
export interface GenerateOpenApiDocumentOptions {
|
|
6
7
|
unfolding?: Unfolding;
|
|
7
8
|
hasAiQueryRoute?: boolean;
|
|
@@ -36,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.ROUTE_PREFIX = exports.OPENAPI_VERSION = void 0;
|
|
39
|
+
exports.DOCUMENT_PATH = exports.ROUTE_PREFIX = exports.OPENAPI_VERSION = void 0;
|
|
40
40
|
exports.generateOpenApiDocument = generateOpenApiDocument;
|
|
41
41
|
exports.serializeOpenApi = serializeOpenApi;
|
|
42
42
|
const zod_to_openapi_1 = require("@asteasolutions/zod-to-openapi");
|
|
@@ -46,8 +46,10 @@ const unfolded_paths_1 = __importDefault(require("./unfolded-paths"));
|
|
|
46
46
|
const zod_openapi_1 = require("./zod-openapi");
|
|
47
47
|
const bff_local_errors_1 = require("../http/bff-local-errors");
|
|
48
48
|
const body_limit_1 = __importStar(require("../http/body-limit"));
|
|
49
|
+
const permissions_cache_1 = require("../permissions/permissions-cache");
|
|
49
50
|
exports.OPENAPI_VERSION = '3.1.0';
|
|
50
51
|
exports.ROUTE_PREFIX = '/agent/v1';
|
|
52
|
+
exports.DOCUMENT_PATH = '/agent/openapi.json';
|
|
51
53
|
const SESSION_SCHEME = 'bffSession';
|
|
52
54
|
const API_KEY_SCHEME = 'bffApiKey';
|
|
53
55
|
const SECURITY = [{ [SESSION_SCHEME]: [] }, { [API_KEY_SCHEME]: [] }];
|
|
@@ -63,14 +65,17 @@ const ERROR_STATUSES = {
|
|
|
63
65
|
500: 'The agent payload could not be mapped to the BFF contract, or the BFF hit an unexpected error',
|
|
64
66
|
501: 'The BFF is running without an agent configured, so the proxy is not implemented',
|
|
65
67
|
502: 'The agent refused the connection, its host could not be resolved, or the transport failed another way (a connection reset mid-flight, a socket hang up, a TLS failure) — it failed outright rather than running out of time',
|
|
66
|
-
503: 'The agent schema is unavailable, the agent returned a 5xx,
|
|
68
|
+
503: 'The agent schema is unavailable, the agent returned a 5xx, the API key could not be resolved, or the Forest permissions could not be fetched and no fresh cache was left (type permissions_unavailable)',
|
|
67
69
|
504: 'The agent did not answer before the BFF timeout (BFF_AGENT_TIMEOUT_MS, 10s by default). The deadline is armed when the request starts, so at the default it also covers a host that accepts nothing and never resets the connection — raise the timeout past the OS connect timeout and that case reverts to 502',
|
|
68
70
|
};
|
|
69
71
|
const UNSUPPORTED_RESULT_DESCRIPTION = 'Either the BFF runs without an agent configured, or the action returned a result shape the ' +
|
|
70
72
|
'BFF cannot normalize. The second case carries no message field.';
|
|
71
73
|
const ERROR_RESPONSE_REF = '#/components/schemas/ErrorResponse';
|
|
72
74
|
const MESSAGELESS_ERROR_RESPONSE_REF = '#/components/schemas/MessagelessErrorResponse';
|
|
75
|
+
const OPENAPI_DISABLED_RESPONSE_REF = '#/components/schemas/OpenapiDisabledErrorResponse';
|
|
73
76
|
const UNSUPPORTED_ACTION_RESULT_COMPONENT = 'UnsupportedActionResult';
|
|
77
|
+
const OPENAPI_DISABLED_COMPONENT = 'Error404OpenapiDisabled';
|
|
78
|
+
const OPENAPI_DISABLED_DESCRIPTION = 'The deployment runs with `BFF_OPENAPI_ENABLED=false`, so the document is not served over HTTP.';
|
|
74
79
|
const retryAfterHeader = (description) => ({
|
|
75
80
|
'Retry-After': {
|
|
76
81
|
description,
|
|
@@ -78,12 +83,23 @@ const retryAfterHeader = (description) => ({
|
|
|
78
83
|
schema: { type: 'integer' },
|
|
79
84
|
},
|
|
80
85
|
});
|
|
81
|
-
const RETRY_AFTER_HEADER = retryAfterHeader('Seconds to wait before retrying. Set when the
|
|
86
|
+
const RETRY_AFTER_HEADER = retryAfterHeader('Seconds to wait before retrying. Set when the BFF could not reach the Forest server — an ' +
|
|
87
|
+
'unresolvable API key, or permissions it could not fetch.');
|
|
82
88
|
const RETRY_AFTER_RATE_LIMIT_HEADER = retryAfterHeader('Seconds until the BFF rate-limit window of the caller resets. When the limiter is ' +
|
|
83
89
|
'saturated the caller has no window yet, so the value is a lower bound instead: the ' +
|
|
84
90
|
'earliest reset among the identities currently holding one, after which a slot may free ' +
|
|
85
91
|
'up. Present when the BFF itself emitted this 429; an agent 429 relayed from upstream ' +
|
|
86
92
|
'carries no header.');
|
|
93
|
+
const HEAD_DOCUMENT_RESPONSES = {
|
|
94
|
+
200: { description: 'The document exists and is readable; no body is returned for HEAD' },
|
|
95
|
+
400: { description: ERROR_STATUSES['400'] },
|
|
96
|
+
401: { description: ERROR_STATUSES['401'] },
|
|
97
|
+
403: { description: ERROR_STATUSES['403'] },
|
|
98
|
+
404: { description: `${OPENAPI_DISABLED_DESCRIPTION} The status is the same as the GET one.` },
|
|
99
|
+
429: { description: ERROR_STATUSES['429'], headers: RETRY_AFTER_RATE_LIMIT_HEADER },
|
|
100
|
+
500: { description: ERROR_STATUSES['500'] },
|
|
101
|
+
503: { description: ERROR_STATUSES['503'], headers: RETRY_AFTER_HEADER },
|
|
102
|
+
};
|
|
87
103
|
function registerErrorComponent(registry, name, { description, schema, headers }) {
|
|
88
104
|
return registry.registerComponent('responses', name, {
|
|
89
105
|
description,
|
|
@@ -103,7 +119,12 @@ function retryAfterHeaders(status) {
|
|
|
103
119
|
}
|
|
104
120
|
function registerErrorResponses(registry, statuses, withActionResults) {
|
|
105
121
|
registry.register('ErrorResponse', schemas_1.ErrorResponseSchema);
|
|
122
|
+
registry.register('OpenapiDisabledErrorResponse', schemas_1.OpenapiDisabledErrorResponseSchema);
|
|
106
123
|
const byStatus = {};
|
|
124
|
+
const openapiDisabled = registerErrorComponent(registry, OPENAPI_DISABLED_COMPONENT, {
|
|
125
|
+
description: `${OPENAPI_DISABLED_DESCRIPTION} The body is typed \`openapi_disabled\`, and the schema pins that value so a generated client can tell this 404 from any other; a bare 404 with no typed body means the agent edge is not mounted at all.`,
|
|
126
|
+
schema: { $ref: OPENAPI_DISABLED_RESPONSE_REF },
|
|
127
|
+
});
|
|
107
128
|
statuses.forEach(status => {
|
|
108
129
|
const description = ERROR_STATUSES[status];
|
|
109
130
|
if (!description)
|
|
@@ -116,8 +137,9 @@ function registerErrorResponses(registry, statuses, withActionResults) {
|
|
|
116
137
|
});
|
|
117
138
|
// A document with no action path must not carry this response, nor the messageless body it
|
|
118
139
|
// references: an unreferenced component trips redocly's unused-component rule.
|
|
119
|
-
if (!withActionResults)
|
|
120
|
-
return { byStatus, unsupportedActionResult: byStatus['501'] };
|
|
140
|
+
if (!withActionResults) {
|
|
141
|
+
return { byStatus, openapiDisabled, unsupportedActionResult: byStatus['501'] };
|
|
142
|
+
}
|
|
121
143
|
registry.register('MessagelessErrorResponse', schemas_1.MessagelessErrorResponseSchema);
|
|
122
144
|
const unsupportedActionResult = registerErrorComponent(registry, UNSUPPORTED_ACTION_RESULT_COMPONENT, {
|
|
123
145
|
description: UNSUPPORTED_RESULT_DESCRIPTION,
|
|
@@ -125,7 +147,7 @@ function registerErrorResponses(registry, statuses, withActionResults) {
|
|
|
125
147
|
anyOf: [{ $ref: ERROR_RESPONSE_REF }, { $ref: MESSAGELESS_ERROR_RESPONSE_REF }],
|
|
126
148
|
},
|
|
127
149
|
});
|
|
128
|
-
return { byStatus, unsupportedActionResult };
|
|
150
|
+
return { byStatus, openapiDisabled, unsupportedActionResult };
|
|
129
151
|
}
|
|
130
152
|
function errorResponses(refs, executeResults) {
|
|
131
153
|
return executeResults
|
|
@@ -281,6 +303,12 @@ const SHARED_DESCRIPTION = 'The timezone is resolved from the `X-Forest-Timezone
|
|
|
281
303
|
'routes read application/json (and application/*+json) bodies only: any other Content-Type, ' +
|
|
282
304
|
'form-urlencoded included, is rejected with 415 instead of being read as an absent body, and ' +
|
|
283
305
|
'so is a body sent with no Content-Type at all. A bodyless POST needs no Content-Type.';
|
|
306
|
+
const SURFACE_DESCRIPTION = 'Only the auth-gated `/agent` surface is described here. Three live route families are ' +
|
|
307
|
+
'deliberately absent because they sit outside that surface and outside its auth edge: the ' +
|
|
308
|
+
'`/health` probe (`GET` and `HEAD`), which answers 200 `ok` or 503 `degraded` to an ' +
|
|
309
|
+
'unauthenticated request; the `/oauth/*` login routes; and the unauthenticated `/docs` viewer ' +
|
|
310
|
+
'that renders this very document — `GET` and `HEAD` on the page and on its public ' +
|
|
311
|
+
'`redoc.standalone.js` bundle. The package README documents all three.';
|
|
284
312
|
const GENERIC_DESCRIPTION = 'Paths are generic: one per operation, with the collection, relation and action passed as path ' +
|
|
285
313
|
'segments, and no field enumerated. This is the fallback form — a deployment configured to ' +
|
|
286
314
|
'reach its Forest schema and its agent unfolds one path per real collection, relation and ' +
|
|
@@ -294,6 +322,105 @@ const UNFOLDED_DESCRIPTION = 'Paths are unfolded: one per exposed collection, to
|
|
|
294
322
|
"collection's capabilities. Only to-many relations appear; a to-one or polymorphic relation has " +
|
|
295
323
|
'no list or count route. This document describes the whole exposed schema regardless of the ' +
|
|
296
324
|
'caller: it is not filtered by the permissions of whoever fetched it.';
|
|
325
|
+
function registerPermissionsPath(registry, errorRefs, timezoneHeader) {
|
|
326
|
+
registry.registerPath({
|
|
327
|
+
method: 'get',
|
|
328
|
+
path: `${exports.ROUTE_PREFIX}/permissions`,
|
|
329
|
+
operationId: 'getPermissionHints',
|
|
330
|
+
summary: 'Read what the caller may see and do, as display hints',
|
|
331
|
+
description: 'Answers for the caller behind the credentials, so two callers get two different payloads. ' +
|
|
332
|
+
'The hints come from the Forest permissions, cached for ' +
|
|
333
|
+
`${permissions_cache_1.PERMISSIONS_CACHE_TTL_MS / 60000} minutes, so they lag a change made in Forest. The agent runs with ` +
|
|
334
|
+
'`instantCacheRefresh` by default, so its own cache has no meaningful expiry — about a year — ' +
|
|
335
|
+
'and freshness rides on the Forest event stream: as long as those events reach it, the agent ' +
|
|
336
|
+
'enforces the new permission while these hints are still stale. If the stream is cut — a ' +
|
|
337
|
+
'reverse proxy that swallows it, which the agent logs once at subscribe time when the first ' +
|
|
338
|
+
'heartbeat never arrives — the agent can hold the old permission far longer than these ' +
|
|
339
|
+
'hints, and the hints are then the fresher of the two. An agent ' +
|
|
340
|
+
'explicitly configured with `instantCacheRefresh: false` caches for ' +
|
|
341
|
+
'`permissionsCacheDurationInSeconds` — 15 minutes by default, configurable with a 60-second ' +
|
|
342
|
+
'floor — independently of these hints. That agent refetches on a denial, so a newly GRANTED ' +
|
|
343
|
+
'permission lands on the next call while these hints still hide it; only a REVOKED one ' +
|
|
344
|
+
'lingers agent-side until the cache expires. A 503 here is `permissions_unavailable` or ' +
|
|
345
|
+
'`key_resolution_unavailable`, which always carry Retry-After, or `schema_unavailable`, ' +
|
|
346
|
+
'which does not. Unlike the context and document routes, and the AI-query relay where it is ' +
|
|
347
|
+
'published, this one sits behind the ' +
|
|
348
|
+
'timezone middleware even though it reads no timezone, so a deployment with no configured ' +
|
|
349
|
+
'default answers 400 `missing_timezone` unless `X-Forest-Timezone` is sent.',
|
|
350
|
+
security: SECURITY,
|
|
351
|
+
request: {
|
|
352
|
+
query: zod_openapi_1.z.object({
|
|
353
|
+
collections: zod_openapi_1.z
|
|
354
|
+
.union([zod_openapi_1.z.string(), zod_openapi_1.z.array(zod_openapi_1.z.string())])
|
|
355
|
+
.optional()
|
|
356
|
+
.openapi({
|
|
357
|
+
description: 'Comma-separated collection names to restrict the answer to, repeatable — a ' +
|
|
358
|
+
'repeated parameter is joined with commas before being split again, so both forms ' +
|
|
359
|
+
'behave the same. Absent means every exposed collection. Entries are trimmed and ' +
|
|
360
|
+
'deduplicated, and a name the schema does not expose is dropped silently rather ' +
|
|
361
|
+
'than rejected — so an empty `collections` object means none of the names matched.',
|
|
362
|
+
}),
|
|
363
|
+
}),
|
|
364
|
+
headers: timezoneHeader,
|
|
365
|
+
},
|
|
366
|
+
responses: {
|
|
367
|
+
200: {
|
|
368
|
+
description: 'The display hints for the caller role',
|
|
369
|
+
content: { 'application/json': { schema: schemas_1.PermissionHintsSchema } },
|
|
370
|
+
},
|
|
371
|
+
400: errorRefs.byStatus['400'],
|
|
372
|
+
401: errorRefs.byStatus['401'],
|
|
373
|
+
403: errorRefs.byStatus['403'],
|
|
374
|
+
429: errorRefs.byStatus['429'],
|
|
375
|
+
500: errorRefs.byStatus['500'],
|
|
376
|
+
501: errorRefs.byStatus['501'],
|
|
377
|
+
503: errorRefs.byStatus['503'],
|
|
378
|
+
},
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
function registerDocumentPath(registry, errorRefs) {
|
|
382
|
+
registry.registerPath({
|
|
383
|
+
method: 'get',
|
|
384
|
+
path: exports.DOCUMENT_PATH,
|
|
385
|
+
operationId: 'getOpenApiDocument',
|
|
386
|
+
summary: 'Read this document',
|
|
387
|
+
description: 'Serves this very document behind credentials, like every other `/agent` route: without ' +
|
|
388
|
+
'them the schema it describes is not readable. Both auth modes reach it — a session or an ' +
|
|
389
|
+
'API key — as they do on every data, action, context and permissions route; the AI-query ' +
|
|
390
|
+
'relay, where it is published, is the one exception and takes a session only. `HEAD` is ' +
|
|
391
|
+
'served identically. The ' +
|
|
392
|
+
'answer is never cached (`Cache-Control: no-store`) and is regenerated when the BFF ' +
|
|
393
|
+
'refreshes its schema, so a client can re-fetch it to pick up a new collection or field.',
|
|
394
|
+
security: SECURITY,
|
|
395
|
+
request: {},
|
|
396
|
+
responses: {
|
|
397
|
+
200: {
|
|
398
|
+
description: 'The OpenAPI document of this BFF',
|
|
399
|
+
content: { 'application/json': { schema: zod_openapi_1.z.unknown() } },
|
|
400
|
+
},
|
|
401
|
+
400: errorRefs.byStatus['400'],
|
|
402
|
+
401: errorRefs.byStatus['401'],
|
|
403
|
+
403: errorRefs.byStatus['403'],
|
|
404
|
+
404: errorRefs.openapiDisabled,
|
|
405
|
+
429: errorRefs.byStatus['429'],
|
|
406
|
+
500: errorRefs.byStatus['500'],
|
|
407
|
+
503: errorRefs.byStatus['503'],
|
|
408
|
+
},
|
|
409
|
+
});
|
|
410
|
+
registry.registerPath({
|
|
411
|
+
method: 'head',
|
|
412
|
+
path: exports.DOCUMENT_PATH,
|
|
413
|
+
operationId: 'headOpenApiDocument',
|
|
414
|
+
summary: 'Probe this document without fetching it',
|
|
415
|
+
description: 'Same route as `GET`, answering the same statuses and headers with no body, so a client can ' +
|
|
416
|
+
'probe whether the document is enabled and reachable before re-fetching it. The six error ' +
|
|
417
|
+
'statuses below reuse the GET wording, which describes a JSON body no HEAD ever returns: ' +
|
|
418
|
+
'read the status, not the type. The 200 and the 404 carry their own.',
|
|
419
|
+
security: SECURITY,
|
|
420
|
+
request: {},
|
|
421
|
+
responses: HEAD_DOCUMENT_RESPONSES,
|
|
422
|
+
});
|
|
423
|
+
}
|
|
297
424
|
function registerAiQueryPath(registry, aiErrorRefs) {
|
|
298
425
|
registry.registerPath({
|
|
299
426
|
method: 'post',
|
|
@@ -377,6 +504,8 @@ function generateOpenApiDocument(version, { unfolding, hasAiQueryRoute = false,
|
|
|
377
504
|
503: errorRefs.byStatus['503'],
|
|
378
505
|
},
|
|
379
506
|
});
|
|
507
|
+
registerPermissionsPath(registry, errorRefs, timezoneHeader);
|
|
508
|
+
registerDocumentPath(registry, errorRefs);
|
|
380
509
|
if (aiErrorRefs)
|
|
381
510
|
registerAiQueryPath(registry, aiErrorRefs);
|
|
382
511
|
if (unfolding) {
|
|
@@ -428,7 +557,7 @@ function generateOpenApiDocument(version, { unfolding, hasAiQueryRoute = false,
|
|
|
428
557
|
title: 'Forest BFF',
|
|
429
558
|
version,
|
|
430
559
|
license: { name: 'GPL-3.0', url: 'https://www.gnu.org/licenses/gpl-3.0.html' },
|
|
431
|
-
description: `${unfolding ? UNFOLDED_DESCRIPTION : GENERIC_DESCRIPTION} ${SHARED_DESCRIPTION}`,
|
|
560
|
+
description: `${unfolding ? UNFOLDED_DESCRIPTION : GENERIC_DESCRIPTION} ${SHARED_DESCRIPTION} ${SURFACE_DESCRIPTION}`,
|
|
432
561
|
},
|
|
433
562
|
servers: [
|
|
434
563
|
publicUrl
|
|
@@ -440,4 +569,4 @@ function generateOpenApiDocument(version, { unfolding, hasAiQueryRoute = false,
|
|
|
440
569
|
function serializeOpenApi(document) {
|
|
441
570
|
return JSON.stringify(document, null, 2);
|
|
442
571
|
}
|
|
443
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS1kb2N1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL29wZW5hcGktZG9jdW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa2FBLDBEQTBIQztBQUVELDRDQUVDO0FBN2hCRCxtRUFBc0Y7QUFFdEYsc0VBQTZDO0FBQzdDLHVDQWNtQjtBQUNuQixzRUFBcUQ7QUFDckQsK0NBQWtDO0FBQ2xDLCtEQUE2RDtBQUM3RCxpRUFBK0Q7QUFFbEQsUUFBQSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQzFCLFFBQUEsWUFBWSxHQUFHLFdBQVcsQ0FBQztBQUV4QyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFDcEMsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBRW5DLE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRXRFLE1BQU0sY0FBYyxHQUEyQjtJQUM3QyxHQUFHLEVBQUUsa1ZBQWtWO0lBQ3ZWLEdBQUcsRUFBRSwwQ0FBMEM7SUFDL0MsR0FBRyxFQUFFLDBPQUEwTztJQUMvTyxHQUFHLEVBQUUseUNBQXlDO0lBQzlDLEdBQUcsRUFBRSw2Q0FBNkMsb0JBQVUsRUFBRTtJQUM5RCxHQUFHLEVBQUUsNlNBQTZTO0lBQ2xULEdBQUcsRUFBRSx1SUFBdUk7SUFDNUksR0FBRyxFQUFFLDhQQUE4UCxvQ0FBaUIsQ0FBQyxhQUFhLFdBQVcsb0NBQWlCLENBQUMsZ0JBQWdCLDRUQUE0VDtJQUMzb0IsR0FBRyxFQUFFLCtGQUErRjtJQUNwRyxHQUFHLEVBQUUsaUZBQWlGO0lBQ3RGLEdBQUcsRUFBRSw2TkFBNk47SUFDbE8sR0FBRyxFQUFFLGlHQUFpRztJQUN0RyxHQUFHLEVBQUUsa1RB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
|
|
572
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS1kb2N1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL29wZW5hcGktZG9jdW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd2pCQSwwREE2SEM7QUFFRCw0Q0FFQztBQXRyQkQsbUVBQXNGO0FBRXRGLHNFQUE2QztBQUM3Qyx1Q0FnQm1CO0FBQ25CLHNFQUFxRDtBQUNyRCwrQ0FBa0M7QUFDbEMsK0RBQTZEO0FBQzdELGlFQUErRDtBQUMvRCx3RUFBNEU7QUFFL0QsUUFBQSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQzFCLFFBQUEsWUFBWSxHQUFHLFdBQVcsQ0FBQztBQUMzQixRQUFBLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztBQUVuRCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFDcEMsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBRW5DLE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRXRFLE1BQU0sY0FBYyxHQUEyQjtJQUM3QyxHQUFHLEVBQUUsa1ZBQWtWO0lBQ3ZWLEdBQUcsRUFBRSwwQ0FBMEM7SUFDL0MsR0FBRyxFQUFFLDBPQUEwTztJQUMvTyxHQUFHLEVBQUUseUNBQXlDO0lBQzlDLEdBQUcsRUFBRSw2Q0FBNkMsb0JBQVUsRUFBRTtJQUM5RCxHQUFHLEVBQUUsNlNBQTZTO0lBQ2xULEdBQUcsRUFBRSx1SUFBdUk7SUFDNUksR0FBRyxFQUFFLDhQQUE4UCxvQ0FBaUIsQ0FBQyxhQUFhLFdBQVcsb0NBQWlCLENBQUMsZ0JBQWdCLDRUQUE0VDtJQUMzb0IsR0FBRyxFQUFFLCtGQUErRjtJQUNwRyxHQUFHLEVBQUUsaUZBQWlGO0lBQ3RGLEdBQUcsRUFBRSw2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
|
|
@@ -168,6 +168,31 @@ export declare const ContextResponseSchema: z.ZodObject<{
|
|
|
168
168
|
environmentId: z.ZodOptional<z.ZodNumber>;
|
|
169
169
|
}, z.core.$strip>;
|
|
170
170
|
}, z.core.$strip>;
|
|
171
|
+
export declare const PermissionHintsSchema: z.ZodObject<{
|
|
172
|
+
collections: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
173
|
+
crud: z.ZodObject<{
|
|
174
|
+
browse: z.ZodBoolean;
|
|
175
|
+
read: z.ZodBoolean;
|
|
176
|
+
edit: z.ZodBoolean;
|
|
177
|
+
add: z.ZodBoolean;
|
|
178
|
+
delete: z.ZodBoolean;
|
|
179
|
+
export: z.ZodBoolean;
|
|
180
|
+
}, z.core.$strip>;
|
|
181
|
+
actions: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
182
|
+
collection: z.ZodString;
|
|
183
|
+
name: z.ZodString;
|
|
184
|
+
visible: z.ZodBoolean;
|
|
185
|
+
requiresApprovalHint: z.ZodBoolean;
|
|
186
|
+
canApproveHint: z.ZodBoolean;
|
|
187
|
+
canSelfApproveHint: z.ZodBoolean;
|
|
188
|
+
finality: z.ZodLiteral<"display_hint">;
|
|
189
|
+
}, z.core.$strip>>;
|
|
190
|
+
}, z.core.$strip>>;
|
|
191
|
+
visibleActions: z.ZodArray<z.ZodObject<{
|
|
192
|
+
collection: z.ZodString;
|
|
193
|
+
name: z.ZodString;
|
|
194
|
+
}, z.core.$strip>>;
|
|
195
|
+
}, z.core.$strip>;
|
|
171
196
|
export declare const AiQueryRequestSchema: z.ZodUnknown;
|
|
172
197
|
export declare const ErrorResponseSchema: z.ZodObject<{
|
|
173
198
|
error: z.ZodObject<{
|
|
@@ -184,5 +209,12 @@ export declare const MessagelessErrorResponseSchema: z.ZodObject<{
|
|
|
184
209
|
details: z.ZodOptional<z.ZodUnknown>;
|
|
185
210
|
}, z.core.$strip>;
|
|
186
211
|
}, z.core.$strip>;
|
|
212
|
+
export declare const OpenapiDisabledErrorResponseSchema: z.ZodObject<{
|
|
213
|
+
error: z.ZodObject<{
|
|
214
|
+
type: z.ZodLiteral<"openapi_disabled">;
|
|
215
|
+
status: z.ZodLiteral<404>;
|
|
216
|
+
message: z.ZodString;
|
|
217
|
+
}, z.core.$strip>;
|
|
218
|
+
}, z.core.$strip>;
|
|
187
219
|
export { ConditionTreeSchema, ParentIdSchema, OPERATORS };
|
|
188
220
|
//# sourceMappingURL=schemas.d.ts.map
|
package/dist/openapi/schemas.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OPERATORS = exports.ParentIdSchema = exports.ConditionTreeSchema = exports.MessagelessErrorResponseSchema = exports.ErrorResponseSchema = exports.AiQueryRequestSchema = exports.ContextResponseSchema = exports.CountResponseSchema = exports.ListResponseSchema = exports.ForestRecordMetaSchema = exports.ActionResultSchema = exports.ActionFormResponseSchema = exports.ActionRequestSchema = exports.RelationCountRequestSchema = exports.RelationListRequestSchema = exports.CountRequestSchema = exports.ListRequestSchema = exports.CLOSED_BODY_NOTE = exports.SearchExtendedSchema = exports.SearchSchema = exports.TimezoneSchema = exports.PageSchema = exports.SortClauseSchema = void 0;
|
|
3
|
+
exports.OPERATORS = exports.ParentIdSchema = exports.ConditionTreeSchema = exports.OpenapiDisabledErrorResponseSchema = exports.MessagelessErrorResponseSchema = exports.ErrorResponseSchema = exports.AiQueryRequestSchema = exports.PermissionHintsSchema = exports.ContextResponseSchema = exports.CountResponseSchema = exports.ListResponseSchema = exports.ForestRecordMetaSchema = exports.ActionResultSchema = exports.ActionFormResponseSchema = exports.ActionRequestSchema = exports.RelationCountRequestSchema = exports.RelationListRequestSchema = exports.CountRequestSchema = exports.ListRequestSchema = exports.CLOSED_BODY_NOTE = exports.SearchExtendedSchema = exports.SearchSchema = exports.TimezoneSchema = exports.PageSchema = exports.SortClauseSchema = void 0;
|
|
4
4
|
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
5
5
|
const zod_openapi_1 = require("./zod-openapi");
|
|
6
6
|
const pack_id_1 = require("../data/pack-id");
|
|
7
7
|
const request_schemas_1 = require("../data/request-schemas");
|
|
8
|
+
const build_permission_hints_1 = require("../permissions/build-permission-hints");
|
|
8
9
|
const read_model_1 = require("../read-model/read-model");
|
|
9
10
|
const capabilities_validator_1 = require("../validation/capabilities-validator");
|
|
10
11
|
const OPERATORS = [...datasource_toolkit_1.allOperators];
|
|
@@ -338,6 +339,55 @@ exports.ContextResponseSchema = zod_openapi_1.z
|
|
|
338
339
|
'from its own secret — it is telemetry, not a routing input, and it is absent when the ' +
|
|
339
340
|
'deployment runs without the OAuth configuration.',
|
|
340
341
|
});
|
|
342
|
+
const CrudHintsSchema = zod_openapi_1.z
|
|
343
|
+
.object({
|
|
344
|
+
browse: zod_openapi_1.z.boolean(),
|
|
345
|
+
read: zod_openapi_1.z.boolean(),
|
|
346
|
+
edit: zod_openapi_1.z.boolean(),
|
|
347
|
+
add: zod_openapi_1.z.boolean(),
|
|
348
|
+
delete: zod_openapi_1.z.boolean(),
|
|
349
|
+
export: zod_openapi_1.z.boolean(),
|
|
350
|
+
})
|
|
351
|
+
.openapi('CrudHints', {
|
|
352
|
+
description: 'The six collection-level rights of the caller role, as Forest states them. `browse` false ' +
|
|
353
|
+
'does not remove the collection from this response, nor from the schema contract. On a ' +
|
|
354
|
+
'development environment all six are true whatever the role, so an all-true block is not a ' +
|
|
355
|
+
'statement about the role.',
|
|
356
|
+
});
|
|
357
|
+
const ActionHintsSchema = zod_openapi_1.z
|
|
358
|
+
.object({
|
|
359
|
+
collection: zod_openapi_1.z.string(),
|
|
360
|
+
name: zod_openapi_1.z.string(),
|
|
361
|
+
visible: zod_openapi_1.z.boolean(),
|
|
362
|
+
requiresApprovalHint: zod_openapi_1.z.boolean(),
|
|
363
|
+
canApproveHint: zod_openapi_1.z.boolean(),
|
|
364
|
+
canSelfApproveHint: zod_openapi_1.z.boolean(),
|
|
365
|
+
finality: zod_openapi_1.z.literal(build_permission_hints_1.DISPLAY_HINT_FINALITY),
|
|
366
|
+
})
|
|
367
|
+
.openapi('ActionHints', {
|
|
368
|
+
description: 'Display hints for one action. `visible` is the trigger right, so it is what gates showing ' +
|
|
369
|
+
'the button; `requiresApprovalHint` says a trigger by this role opens an approval request ' +
|
|
370
|
+
'instead of running, and the two approval flags say whether this role may approve such a ' +
|
|
371
|
+
'request, and its own. `collection` and `name` repeat the keys of the enclosing objects, so ' +
|
|
372
|
+
'a flattened list stays self-describing. On a development environment every exposed action ' +
|
|
373
|
+
'is visible with all three approval flags false, whatever the role. `finality` is always ' +
|
|
374
|
+
`\`${build_permission_hints_1.DISPLAY_HINT_FINALITY}\`: it marks the whole payload as UI advice.`,
|
|
375
|
+
});
|
|
376
|
+
exports.PermissionHintsSchema = zod_openapi_1.z
|
|
377
|
+
.object({
|
|
378
|
+
collections: zod_openapi_1.z.record(zod_openapi_1.z.string(), zod_openapi_1.z.object({ crud: CrudHintsSchema, actions: zod_openapi_1.z.record(zod_openapi_1.z.string(), ActionHintsSchema) })),
|
|
379
|
+
visibleActions: zod_openapi_1.z.array(zod_openapi_1.z.object({ collection: zod_openapi_1.z.string(), name: zod_openapi_1.z.string() })),
|
|
380
|
+
})
|
|
381
|
+
.openapi('PermissionHints', {
|
|
382
|
+
description: 'What the caller may see and do, **as display hints only** — gray out a button, hide a ' +
|
|
383
|
+
'column. Never an authorization decision: the agent re-checks the caller on every proxied ' +
|
|
384
|
+
'call, so a hint reading true grants nothing and a client must still handle 403. ' +
|
|
385
|
+
'`collections` is keyed by the exact schema collection name, and `actions` by the exact ' +
|
|
386
|
+
'action name — only the actions the schema exposes with an endpoint, so an action absent ' +
|
|
387
|
+
'here is not a permission answer. `visibleActions` flattens the actions whose `visible` is ' +
|
|
388
|
+
'true, so a client can build its menu without walking `collections`. The hints describe the ' +
|
|
389
|
+
'caller role alone, and say nothing about record-level scopes.',
|
|
390
|
+
});
|
|
341
391
|
exports.AiQueryRequestSchema = zod_openapi_1.z.unknown().openapi('AiQueryRequest', {
|
|
342
392
|
description: 'Passed through to the Forest AI proxy without validation or rewriting, so the authority on ' +
|
|
343
393
|
'this shape is the upstream contract, not the BFF. It is left free-form on purpose: the BFF ' +
|
|
@@ -376,4 +426,19 @@ exports.MessagelessErrorResponseSchema = zod_openapi_1.z
|
|
|
376
426
|
.openapi('MessagelessErrorResponse', {
|
|
377
427
|
description: 'The unsupported-action-result body, which carries no message field unlike every other error.',
|
|
378
428
|
});
|
|
379
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL3NjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0VBQStEO0FBRS9ELCtDQUFrQztBQUNsQyw2Q0FBc0Q7QUFDdEQsNkRBWWlDO0FBQ2pDLHlEQUE4RDtBQUM5RCxpRkFBd0U7QUFFeEUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLGlDQUFZLENBQTBCLENBQUM7QUFnY2YsOEJBQVM7QUE5YnZELE1BQU0sdUJBQXVCLEdBQUcsZUFBQztLQUM5QixZQUFZLENBQUM7SUFDWixLQUFLLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRTtJQUNqQixRQUFRLEVBQUUsZUFBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDM0IsS0FBSyxFQUFFLGVBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDOUIsQ0FBQztLQUNELE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixXQUFXLEVBQ1QsMEZBQTBGO1FBQzFGLHFGQUFxRjtDQUN4RixDQUFDLENBQUM7QUFFTCxNQUFNLG1CQUFtQixHQUFjLGVBQUM7S0FDckMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUNULGVBQUMsQ0FBQyxLQUFLLENBQUM7SUFDTix1QkFBdUI7SUFDdkIsZUFBQyxDQUFDLFlBQVksQ0FBQztRQUNiLFVBQVUsRUFBRSxlQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pDLFVBQVUsRUFBRSxlQUFDLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDO0tBQ3pDLENBQUM7SUFDRixlQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztDQUNuQixDQUFDLENBQ0g7S0FDQSxPQUFPLENBQUMsZUFBZSxFQUFFO0lBQ3hCLFdBQVcsRUFDVCwyRkFBMkY7UUFDM0YsMkRBQTJEO1FBQzNELHVGQUF1RjtRQUN2Rix1RkFBdUY7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
|
|
429
|
+
exports.OpenapiDisabledErrorResponseSchema = zod_openapi_1.z
|
|
430
|
+
.object({
|
|
431
|
+
error: zod_openapi_1.z.object({
|
|
432
|
+
type: zod_openapi_1.z.literal('openapi_disabled'),
|
|
433
|
+
status: zod_openapi_1.z.literal(404),
|
|
434
|
+
message: zod_openapi_1.z.string(),
|
|
435
|
+
}),
|
|
436
|
+
})
|
|
437
|
+
.openapi('OpenapiDisabledErrorResponse', {
|
|
438
|
+
description: 'The one error body whose `type` is pinned here: this 404 has a single cause, where the ' +
|
|
439
|
+
'shared statuses cover several. A generated client can branch on it, which is what the ' +
|
|
440
|
+
'README asks of a consumer — never on the message text. It carries no `details`, unlike ' +
|
|
441
|
+
'the shared envelope: the thrower passes none, so declaring the field would send a client ' +
|
|
442
|
+
'looking for something the runtime never emits.',
|
|
443
|
+
});
|
|
444
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL3NjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0VBQStEO0FBRS9ELCtDQUFrQztBQUNsQyw2Q0FBc0Q7QUFDdEQsNkRBWWlDO0FBQ2pDLGtGQUE4RTtBQUM5RSx5REFBOEQ7QUFDOUQsaUZBQXdFO0FBRXhFLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxpQ0FBWSxDQUEwQixDQUFDO0FBMmdCZiw4QkFBUztBQXpnQnZELE1BQU0sdUJBQXVCLEdBQUcsZUFBQztLQUM5QixZQUFZLENBQUM7SUFDWixLQUFLLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRTtJQUNqQixRQUFRLEVBQUUsZUFBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDM0IsS0FBSyxFQUFFLGVBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDOUIsQ0FBQztLQUNELE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixXQUFXLEVBQ1QsMEZBQTBGO1FBQzFGLHFGQUFxRjtDQUN4RixDQUFDLENBQUM7QUFFTCxNQUFNLG1CQUFtQixHQUFjLGVBQUM7S0FDckMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUNULGVBQUMsQ0FBQyxLQUFLLENBQUM7SUFDTix1QkFBdUI7SUFDdkIsZUFBQyxDQUFDLFlBQVksQ0FBQztRQUNiLFVBQVUsRUFBRSxlQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pDLFVBQVUsRUFBRSxlQUFDLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDO0tBQ3pDLENBQUM7SUFDRixlQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztDQUNuQixDQUFDLENBQ0g7S0FDQSxPQUFPLENBQUMsZUFBZSxFQUFFO0lBQ3hCLFdBQVcsRUFDVCwyRkFBMkY7UUFDM0YsMkRBQTJEO1FBQzNELHVGQUF1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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forestadmin/agent-bff",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.25.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"bin": {
|
|
6
6
|
"forest-bff": "dist/cli.js"
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"zod": "4.3.6"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@forestadmin/agent": "1.98.
|
|
48
|
-
"@forestadmin/agent-testing": "1.2.
|
|
47
|
+
"@forestadmin/agent": "1.98.9",
|
|
48
|
+
"@forestadmin/agent-testing": "1.2.13",
|
|
49
49
|
"@hey-api/openapi-ts": "0.99.0",
|
|
50
50
|
"@redocly/cli": "2.35.1",
|
|
51
51
|
"@types/inflected": "^1.1.29",
|