@forestadmin/agent-bff 1.20.2 → 1.22.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/README.md +64 -6
- package/dist/ai/ai-proxy-client.d.ts +26 -0
- package/dist/ai/ai-proxy-client.js +74 -0
- package/dist/ai/ai-proxy-timeout-error.d.ts +5 -0
- package/dist/ai/ai-proxy-timeout-error.js +11 -0
- package/dist/ai/ai-routes-middleware.d.ts +15 -0
- package/dist/ai/ai-routes-middleware.js +96 -0
- package/dist/api-key/agent-token.js +4 -7
- package/dist/auth/auth-mode.d.ts +2 -0
- package/dist/auth/auth-mode.js +9 -1
- package/dist/cli-core.d.ts +9 -0
- package/dist/cli-core.js +55 -7
- package/dist/cli-dispatch.js +15 -3
- package/dist/config/env-config.d.ts +3 -1
- package/dist/config/env-config.js +10 -8
- package/dist/data/agent-query.d.ts +4 -0
- package/dist/data/agent-query.js +53 -41
- package/dist/data/request-schemas.d.ts +49 -0
- package/dist/data/request-schemas.js +40 -0
- package/dist/docs/docs-samples.js +24 -16
- package/dist/http/bff-local-errors.d.ts +4 -0
- package/dist/http/bff-local-errors.js +19 -1
- package/dist/http/body-limit.d.ts +1 -0
- package/dist/http/body-limit.js +3 -1
- package/dist/oauth/oauth-error.d.ts +3 -2
- package/dist/oauth/oauth-error.js +5 -4
- package/dist/oauth/session-lifecycle.js +2 -2
- package/dist/openapi/openapi-document.d.ts +5 -1
- package/dist/openapi/openapi-document.js +133 -17
- package/dist/openapi/openapi-routes.d.ts +2 -1
- package/dist/openapi/openapi-routes.js +9 -4
- package/dist/openapi/schemas.d.ts +11 -0
- package/dist/openapi/schemas.js +45 -19
- package/dist/openapi/unfolded-document.d.ts +5 -1
- package/dist/openapi/unfolded-document.js +6 -3
- package/dist/openapi/zod-openapi.d.ts +1 -2
- package/dist/openapi/zod-openapi.js +5 -4
- package/dist/zod.d.ts +3 -0
- package/dist/zod.js +11 -0
- package/package.json +3 -1
package/dist/cli-dispatch.js
CHANGED
|
@@ -42,6 +42,7 @@ exports.default = dispatchCli;
|
|
|
42
42
|
const fs_1 = require("fs");
|
|
43
43
|
const path_1 = __importDefault(require("path"));
|
|
44
44
|
const console_logger_1 = __importDefault(require("./adapters/console-logger"));
|
|
45
|
+
const ai_routes_middleware_1 = require("./ai/ai-routes-middleware");
|
|
45
46
|
const cli_core_1 = __importStar(require("./cli-core"));
|
|
46
47
|
const env_config_1 = require("./config/env-config");
|
|
47
48
|
const errors_1 = require("./errors");
|
|
@@ -79,6 +80,16 @@ const NOTHING_TO_UNFOLD = `${UNFOLD_VARS.join(', ')} must all be set to unfold i
|
|
|
79
80
|
function wantsUnfolding(env) {
|
|
80
81
|
return UNFOLD_VARS.every(name => (env[name] ?? '').trim() !== '');
|
|
81
82
|
}
|
|
83
|
+
function publishesAiQuery(env, logger) {
|
|
84
|
+
try {
|
|
85
|
+
return (0, cli_core_1.resolveOAuthConfig)((0, env_config_1.parseConfig)(env)) !== undefined;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
const reason = (0, errors_1.extractErrorMessage)(error);
|
|
89
|
+
logger('Warn', `Omitting ${ai_routes_middleware_1.AI_QUERY_ROUTE} from the document: the configuration could not be read (${reason})`);
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
82
93
|
/**
|
|
83
94
|
* Unfolds when the deployment is configured to be inspected, and emits the generic document when it
|
|
84
95
|
* is not configured at all — the command keeps working without configuration. A deployment that IS
|
|
@@ -94,13 +105,14 @@ async function renderOpenApi(env, logger) {
|
|
|
94
105
|
const unfoldable = authSecret && wantsUnfolding(env)
|
|
95
106
|
? { source: (0, cli_core_1.resolveUnfoldSource)((0, env_config_1.parseConfig)(env), logger), authSecret }
|
|
96
107
|
: undefined;
|
|
108
|
+
const hasAiQueryRoute = publishesAiQuery(env, logger);
|
|
97
109
|
if (!unfoldable?.source) {
|
|
98
110
|
logger('Warn', `Emitting the generic OpenAPI document: ${NOTHING_TO_UNFOLD}`);
|
|
99
|
-
return `${(0, openapi_document_1.serializeOpenApi)((0, openapi_document_1.generateOpenApiDocument)(version_1.default))}\n`;
|
|
111
|
+
return `${(0, openapi_document_1.serializeOpenApi)((0, openapi_document_1.generateOpenApiDocument)(version_1.default, { hasAiQueryRoute }))}\n`;
|
|
100
112
|
}
|
|
101
113
|
const { source } = unfoldable;
|
|
102
114
|
const readModel = await source.store.getReadModel();
|
|
103
|
-
const { document, unfolding } = await (0, unfolded_document_1.default)(source, readModel, () => (0, unfolded_document_1.issueOpenApiAgentToken)(unfoldable.authSecret), version_1.default);
|
|
115
|
+
const { document, unfolding } = await (0, unfolded_document_1.default)(source, readModel, () => (0, unfolded_document_1.issueOpenApiAgentToken)(unfoldable.authSecret), { version: version_1.default, hasAiQueryRoute });
|
|
104
116
|
// Not one collection came back with its field set, so the agent was unreachable throughout. The
|
|
105
117
|
// paths are real but every field schema is free-form, which is not the document this command
|
|
106
118
|
// promises — a CI job regenerating it needs something to branch on, and the degraded notes buried
|
|
@@ -169,4 +181,4 @@ async function dispatchCli(argv, env, logger) {
|
|
|
169
181
|
process.stdout.write(document);
|
|
170
182
|
return { exitCode: 0 };
|
|
171
183
|
}
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWRpc3BhdGNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS1kaXNwYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnRkEsc0NBeUNDO0FBZ0RELDhCQWdEQztBQXRORCwyQkFBOEM7QUFDOUMsZ0RBQXdCO0FBRXhCLCtFQUE0RDtBQUM1RCxvRUFBMkQ7QUFDM0QsdURBQTZFO0FBQzdFLG9EQUFrRDtBQUNsRCxxQ0FBK0M7QUFDL0MsaUVBQXVGO0FBQ3ZGLGlGQUE0RjtBQUM1RixtREFBc0Q7QUFDdEQsd0RBQWdDO0FBRW5CLFFBQUEsbUJBQW1CLEdBQUcsY0FBYyxDQUFDO0FBRWxELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQztBQUVsQixRQUFBLEtBQUssR0FBRzs7Ozs7Ozs7OztvQ0FVZSwyQkFBbUI7Ozs7b0RBSUgsQ0FBQztBQUV4QyxRQUFBLElBQUksR0FBRyxvQ0FBb0MsQ0FBQztBQUV6RCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzdDLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFPbkQsTUFBTSxXQUFXLEdBQUc7SUFDbEIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsV0FBVztDQUNILENBQUM7QUFFWCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUM7QUFFbkYsU0FBUyxjQUFjLENBQUMsR0FBc0I7SUFDNUMsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFF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
|
|
@@ -12,12 +12,14 @@ export interface BFFConfig {
|
|
|
12
12
|
invalidAllowedOrigins: string[];
|
|
13
13
|
defaultTimezone?: string;
|
|
14
14
|
agentTimeoutMs?: number;
|
|
15
|
+
aiTimeoutMs: number;
|
|
15
16
|
openapiEnabled: boolean;
|
|
16
17
|
httpPort: number;
|
|
17
18
|
presence: PresenceMap;
|
|
18
19
|
hasAllRequired: boolean;
|
|
19
20
|
}
|
|
20
21
|
export declare const DEFAULT_AGENT_TIMEOUT_MS = 10000;
|
|
21
|
-
export declare const
|
|
22
|
+
export declare const DEFAULT_AI_TIMEOUT_MS = 120000;
|
|
23
|
+
export declare const MAX_TIMEOUT_MS = 2147483647;
|
|
22
24
|
export declare function parseConfig(env: NodeJS.ProcessEnv): BFFConfig;
|
|
23
25
|
//# sourceMappingURL=env-config.d.ts.map
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.MAX_TIMEOUT_MS = exports.DEFAULT_AI_TIMEOUT_MS = exports.DEFAULT_AGENT_TIMEOUT_MS = exports.REQUIRED_KEYS = void 0;
|
|
7
7
|
exports.parseConfig = parseConfig;
|
|
8
8
|
const zod_1 = require("zod");
|
|
9
9
|
const origin_1 = require("../cors/origin");
|
|
@@ -20,7 +20,8 @@ exports.REQUIRED_KEYS = [
|
|
|
20
20
|
const URL_KEYS = ['FOREST_SERVER_URL', 'FOREST_APP_URL', 'AGENT_URL'];
|
|
21
21
|
const DECIMAL_INTEGER = /^\d+$/;
|
|
22
22
|
exports.DEFAULT_AGENT_TIMEOUT_MS = 10000;
|
|
23
|
-
exports.
|
|
23
|
+
exports.DEFAULT_AI_TIMEOUT_MS = 120000;
|
|
24
|
+
exports.MAX_TIMEOUT_MS = 2147483647;
|
|
24
25
|
const MAX_PORT = 65535;
|
|
25
26
|
const ENCRYPTION_KEY_BYTES = 32;
|
|
26
27
|
const BASE64_PATTERN = /^[A-Za-z0-9+/]+={0,2}$/;
|
|
@@ -51,13 +52,13 @@ function parseEncryptionKey(raw) {
|
|
|
51
52
|
}
|
|
52
53
|
return value;
|
|
53
54
|
}
|
|
54
|
-
function
|
|
55
|
+
function parseTimeoutMs(raw, envName, defaultMs) {
|
|
55
56
|
const value = normalize(raw);
|
|
56
57
|
if (value === undefined)
|
|
57
|
-
return
|
|
58
|
+
return defaultMs;
|
|
58
59
|
const timeout = DECIMAL_INTEGER.test(value.trim()) ? Number(value.trim()) : NaN;
|
|
59
|
-
if (Number.isNaN(timeout) || timeout === 0 || timeout > exports.
|
|
60
|
-
throw new errors_1.ConfigurationError(`Invalid configuration:
|
|
60
|
+
if (Number.isNaN(timeout) || timeout === 0 || timeout > exports.MAX_TIMEOUT_MS) {
|
|
61
|
+
throw new errors_1.ConfigurationError(`Invalid configuration: ${envName} must be a positive integer of at most ${exports.MAX_TIMEOUT_MS} milliseconds.`);
|
|
61
62
|
}
|
|
62
63
|
return timeout;
|
|
63
64
|
}
|
|
@@ -98,11 +99,12 @@ function parseConfig(env) {
|
|
|
98
99
|
allowedOrigins,
|
|
99
100
|
invalidAllowedOrigins,
|
|
100
101
|
defaultTimezone,
|
|
101
|
-
agentTimeoutMs:
|
|
102
|
+
agentTimeoutMs: parseTimeoutMs(env.BFF_AGENT_TIMEOUT_MS, 'BFF_AGENT_TIMEOUT_MS', exports.DEFAULT_AGENT_TIMEOUT_MS),
|
|
103
|
+
aiTimeoutMs: parseTimeoutMs(env.BFF_AI_TIMEOUT_MS, 'BFF_AI_TIMEOUT_MS', exports.DEFAULT_AI_TIMEOUT_MS),
|
|
102
104
|
openapiEnabled: parseOpenApiEnabled(env.BFF_OPENAPI_ENABLED),
|
|
103
105
|
httpPort: parsePort(env.HTTP_PORT),
|
|
104
106
|
presence,
|
|
105
107
|
hasAllRequired: exports.REQUIRED_KEYS.every(key => presence[key]) && tokenEncryptionKey !== undefined,
|
|
106
108
|
};
|
|
107
109
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvZW52LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUE0SEEsa0NBNENDO0FBeEtELDZCQUF3QjtBQUV4QiwyQ0FBcUQ7QUFDckQsMkRBQTJDO0FBQzNDLHNDQUErQztBQUMvQyxtREFBdUQ7QUFFMUMsUUFBQSxhQUFhLEdBQUc7SUFDM0Isb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsZ0JBQWdCO0lBQ2hCLFdBQVc7Q0FDSCxDQUFDO0FBSVgsTUFBTSxRQUFRLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLENBQVUsQ0FBQztBQXNCL0UsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ25CLFFBQUEsd0JBQXdCLEdBQUcsS0FBTSxDQUFDO0FBQ2xDLFFBQUEscUJBQXFCLEdBQUcsTUFBTyxDQUFDO0FBQ2hDLFFBQUEsY0FBYyxHQUFHLFVBQWEsQ0FBQztBQUM1QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDdkIsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUM7QUFDaEQsTUFBTSxlQUFlLEdBQUcsT0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBRXhELFNBQVMsU0FBUyxDQUFDLEtBQXlCO0lBQzFDLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4RSxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBWTtJQUM3QixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDNUIsSUFBSSxPQUFPLEtBQUss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
|
|
@@ -13,9 +13,13 @@ export interface ListRequestBody {
|
|
|
13
13
|
projection?: string[];
|
|
14
14
|
sort?: BffSortClause[];
|
|
15
15
|
page?: BffPage;
|
|
16
|
+
search?: string;
|
|
17
|
+
searchExtended?: boolean;
|
|
16
18
|
}
|
|
17
19
|
export interface CountRequestBody {
|
|
18
20
|
filter?: unknown;
|
|
21
|
+
search?: string;
|
|
22
|
+
searchExtended?: boolean;
|
|
19
23
|
}
|
|
20
24
|
export type RelationListRequestBody = ListRequestBody & {
|
|
21
25
|
parentId: string;
|
package/dist/data/agent-query.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.parseParentId = parseParentId;
|
|
|
10
10
|
exports.parseRelationListRequest = parseRelationListRequest;
|
|
11
11
|
exports.parseRelationCountRequest = parseRelationCountRequest;
|
|
12
12
|
exports.collectCountFieldPaths = collectCountFieldPaths;
|
|
13
|
+
const request_schemas_1 = require("./request-schemas");
|
|
13
14
|
const bff_local_errors_1 = require("../http/bff-local-errors");
|
|
14
15
|
const capabilities_validator_1 = require("../validation/capabilities-validator");
|
|
15
16
|
Object.defineProperty(exports, "MAX_PARSED_FILTER_DEPTH", { enumerable: true, get: function () { return capabilities_validator_1.MAX_FILTER_DEPTH; } });
|
|
@@ -30,54 +31,41 @@ function assertNoNodeReadableAsBothLeafAndBranch(node, depth = 0) {
|
|
|
30
31
|
node.conditions.forEach(condition => assertNoNodeReadableAsBothLeafAndBranch(condition, depth + 1));
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Checks the flat inputs against the shared schema and reports the first failure as
|
|
36
|
+
* 400 invalid_request, so a malformed shape (`projection` as a string, a fractional `page.limit`)
|
|
37
|
+
* surfaces as a client error rather than a 500 from an array method blowing up downstream.
|
|
38
|
+
*
|
|
39
|
+
* Unknown keys are left alone: the object schemas ignore them, so `filter`, `timezone` and
|
|
40
|
+
* `parentId` travel through untouched and the body is returned by reference, not rebuilt.
|
|
41
|
+
*/
|
|
42
|
+
function assertFlatInputs(schema, body) {
|
|
43
|
+
const result = schema.safeParse(body);
|
|
44
|
+
if (result.success)
|
|
45
|
+
return;
|
|
46
|
+
const [issue] = result.error.issues;
|
|
47
|
+
const path = issue.path.join('.');
|
|
48
|
+
throw (0, bff_local_errors_1.invalidRequest)(path ? `${path}: ${issue.message}` : issue.message);
|
|
49
|
+
}
|
|
50
|
+
function assertFilter(filter) {
|
|
51
|
+
if (filter === undefined)
|
|
52
|
+
return;
|
|
53
|
+
if (!isPlainObject(filter))
|
|
54
|
+
throw (0, bff_local_errors_1.invalidRequest)('filter must be an object');
|
|
55
|
+
assertNoNodeReadableAsBothLeafAndBranch(filter);
|
|
56
|
+
}
|
|
36
57
|
function parseListRequest(body) {
|
|
37
58
|
if (!isPlainObject(body))
|
|
38
59
|
throw (0, bff_local_errors_1.invalidRequest)('Request body must be an object');
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (!Array.isArray(projection) || projection.some(field => typeof field !== 'string')) {
|
|
42
|
-
throw (0, bff_local_errors_1.invalidRequest)('projection must be an array of field names');
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
if (sort !== undefined) {
|
|
46
|
-
const valid = Array.isArray(sort) &&
|
|
47
|
-
sort.every(clause => isPlainObject(clause) &&
|
|
48
|
-
typeof clause.field === 'string' &&
|
|
49
|
-
(clause.direction === undefined ||
|
|
50
|
-
clause.direction === 'asc' ||
|
|
51
|
-
clause.direction === 'desc'));
|
|
52
|
-
if (!valid)
|
|
53
|
-
throw (0, bff_local_errors_1.invalidRequest)('sort must be an array of { field, direction? }');
|
|
54
|
-
}
|
|
55
|
-
if (filter !== undefined) {
|
|
56
|
-
if (!isPlainObject(filter))
|
|
57
|
-
throw (0, bff_local_errors_1.invalidRequest)('filter must be an object');
|
|
58
|
-
assertNoNodeReadableAsBothLeafAndBranch(filter);
|
|
59
|
-
}
|
|
60
|
-
if (page !== undefined) {
|
|
61
|
-
if (!isPlainObject(page)) {
|
|
62
|
-
throw (0, bff_local_errors_1.invalidRequest)('page must be an object with limit and offset');
|
|
63
|
-
}
|
|
64
|
-
if (!Number.isInteger(page.limit) || page.limit <= 0) {
|
|
65
|
-
throw (0, bff_local_errors_1.invalidRequest)('page.limit must be a positive integer');
|
|
66
|
-
}
|
|
67
|
-
if (!Number.isInteger(page.offset) || page.offset < 0) {
|
|
68
|
-
throw (0, bff_local_errors_1.invalidRequest)('page.offset must be a non-negative integer');
|
|
69
|
-
}
|
|
70
|
-
}
|
|
60
|
+
assertFlatInputs(request_schemas_1.ListFlatInputs, body);
|
|
61
|
+
assertFilter(body.filter);
|
|
71
62
|
return body;
|
|
72
63
|
}
|
|
73
64
|
function parseCountRequest(body) {
|
|
74
65
|
if (!isPlainObject(body))
|
|
75
66
|
throw (0, bff_local_errors_1.invalidRequest)('Request body must be an object');
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
throw (0, bff_local_errors_1.invalidRequest)('filter must be an object');
|
|
79
|
-
assertNoNodeReadableAsBothLeafAndBranch(body.filter);
|
|
80
|
-
}
|
|
67
|
+
assertFlatInputs(request_schemas_1.CountFlatInputs, body);
|
|
68
|
+
assertFilter(body.filter);
|
|
81
69
|
return body;
|
|
82
70
|
}
|
|
83
71
|
function collectFilterFields(filter, acc) {
|
|
@@ -101,6 +89,28 @@ function serializePage(page) {
|
|
|
101
89
|
}
|
|
102
90
|
return { 'page[size]': limit, 'page[number]': offset / limit + 1 };
|
|
103
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* `search` and `searchExtended` are the wire names the agent reads; no other spelling is parsed.
|
|
94
|
+
*
|
|
95
|
+
* A blank search is dropped rather than forwarded. The agent's search decorator already treats it
|
|
96
|
+
* as absent, but `parseSearch` guards on a truthy value, so a whitespace-only search would raise
|
|
97
|
+
* "Collection is not searchable" on a non-searchable collection while an empty one would not — a
|
|
98
|
+
* cleared search box must not depend on how many spaces it holds.
|
|
99
|
+
*
|
|
100
|
+
* `searchExtended` only ships alongside a real search: on its own it changes nothing agent-side,
|
|
101
|
+
* and emitting it would alter the outgoing query of every search-less request.
|
|
102
|
+
*
|
|
103
|
+
* The value is trimmed on the way out, not in the parser: parsing stays pure validation here, and
|
|
104
|
+
* `parseListRequest` returns the caller's body untouched, which its own callers rely on.
|
|
105
|
+
*/
|
|
106
|
+
function applySearch(query, body) {
|
|
107
|
+
const search = body.search?.trim();
|
|
108
|
+
if (!search)
|
|
109
|
+
return;
|
|
110
|
+
query.search = search;
|
|
111
|
+
if (body.searchExtended !== undefined)
|
|
112
|
+
query.searchExtended = body.searchExtended;
|
|
113
|
+
}
|
|
104
114
|
function buildListAgentQuery(collection, timezone, body) {
|
|
105
115
|
const query = { timezone };
|
|
106
116
|
if (body.filter !== undefined)
|
|
@@ -111,12 +121,14 @@ function buildListAgentQuery(collection, timezone, body) {
|
|
|
111
121
|
query.sort = serializeSort(body.sort);
|
|
112
122
|
if (body.page)
|
|
113
123
|
Object.assign(query, serializePage(body.page));
|
|
124
|
+
applySearch(query, body);
|
|
114
125
|
return query;
|
|
115
126
|
}
|
|
116
127
|
function buildCountAgentQuery(timezone, body) {
|
|
117
128
|
const query = { timezone };
|
|
118
129
|
if (body.filter !== undefined)
|
|
119
130
|
query.filters = JSON.stringify(body.filter);
|
|
131
|
+
applySearch(query, body);
|
|
120
132
|
return query;
|
|
121
133
|
}
|
|
122
134
|
function collectListFieldPaths(body) {
|
|
@@ -152,4 +164,4 @@ function collectCountFieldPaths(body) {
|
|
|
152
164
|
collectFilterFields(body.filter, paths);
|
|
153
165
|
return paths;
|
|
154
166
|
}
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YS9hZ2VudC1xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzRkEsNENBT0M7QUFFRCw4Q0FPQztBQW9ERCxrREFjQztBQUVELG9EQU9DO0FBRUQsc0RBTUM7QUFLRCxzQ0FZQztBQUVELDREQUlDO0FBRUQsOERBSUM7QUFFRCx3REFLQztBQTNORCx1REFBb0U7QUFDcEUsK0RBQTBEO0FBQzFELGlGQUEwRjtBQUc3RCx3R0FIcEIseUNBQWdCLE9BRzJCO0FBRnBELHVFQUFnRTtBQW1DaEUsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQsU0FBUyx1Q0FBdUMsQ0FBQyxJQUFhLEVBQUUsS0FBSyxHQUFHLENBQUM7SUFDdkUsSUFBSSxLQUFLLEdBQUcseUNBQWdCO1FBQUUsTUFBTSxJQUFBLGlDQUFhLEVBQUMseUNBQWdCLENBQUMsQ0FBQztJQUNwRSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssSUFBSTtRQUFFLE9BQU87SUFFdEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLGlDQUFRLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFFeEMsSUFBSSxJQUFBLCtCQUFNLEVBQUMsSUFBSSxDQUFDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUEsaUNBQWMsRUFBQywwREFBMEQsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDbEMsdUNBQXVDLENBQUMsU0FBUyxFQUFFLEtBQUssR0FBRyxD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
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from '../zod';
|
|
2
|
+
/**
|
|
3
|
+
* The validation rules of a request body, declared once. `src/openapi/schemas.ts` decorates these
|
|
4
|
+
* with names and descriptions to publish them, and the parsers below check bodies against them, so
|
|
5
|
+
* the document and the runtime cannot drift apart.
|
|
6
|
+
*
|
|
7
|
+
* `filter` is deliberately absent: its operators are checked against the collection capabilities
|
|
8
|
+
* (`capabilities-validator`), and a node readable as both leaf and branch has no schema equivalent,
|
|
9
|
+
* so it keeps its own path in `agent-query.ts`.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SortClauseInput: z.ZodObject<{
|
|
12
|
+
field: z.ZodString;
|
|
13
|
+
direction: z.ZodOptional<z.ZodEnum<{
|
|
14
|
+
asc: "asc";
|
|
15
|
+
desc: "desc";
|
|
16
|
+
}>>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
export declare const PageInput: z.ZodObject<{
|
|
19
|
+
limit: z.ZodNumber;
|
|
20
|
+
offset: z.ZodNumber;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export declare const ProjectionInput: z.ZodArray<z.ZodString>;
|
|
23
|
+
export declare const SearchInput: z.ZodString;
|
|
24
|
+
export declare const SearchExtendedInput: z.ZodBoolean;
|
|
25
|
+
export declare const TimezoneInput: z.ZodString;
|
|
26
|
+
export declare const ParentIdInput: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
27
|
+
/** Everything a list body carries except `filter`, which is validated separately. */
|
|
28
|
+
export declare const ListFlatInputs: z.ZodObject<{
|
|
29
|
+
projection: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
30
|
+
sort: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
31
|
+
field: z.ZodString;
|
|
32
|
+
direction: z.ZodOptional<z.ZodEnum<{
|
|
33
|
+
asc: "asc";
|
|
34
|
+
desc: "desc";
|
|
35
|
+
}>>;
|
|
36
|
+
}, z.core.$strip>>>;
|
|
37
|
+
page: z.ZodOptional<z.ZodObject<{
|
|
38
|
+
limit: z.ZodNumber;
|
|
39
|
+
offset: z.ZodNumber;
|
|
40
|
+
}, z.core.$strip>>;
|
|
41
|
+
search: z.ZodOptional<z.ZodString>;
|
|
42
|
+
searchExtended: z.ZodOptional<z.ZodBoolean>;
|
|
43
|
+
}, z.core.$strip>;
|
|
44
|
+
/** A count body carries no projection, sort or page. */
|
|
45
|
+
export declare const CountFlatInputs: z.ZodObject<{
|
|
46
|
+
search: z.ZodOptional<z.ZodString>;
|
|
47
|
+
searchExtended: z.ZodOptional<z.ZodBoolean>;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
//# sourceMappingURL=request-schemas.d.ts.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CountFlatInputs = exports.ListFlatInputs = exports.ParentIdInput = exports.TimezoneInput = exports.SearchExtendedInput = exports.SearchInput = exports.ProjectionInput = exports.PageInput = exports.SortClauseInput = void 0;
|
|
4
|
+
const zod_1 = require("../zod");
|
|
5
|
+
/**
|
|
6
|
+
* The validation rules of a request body, declared once. `src/openapi/schemas.ts` decorates these
|
|
7
|
+
* with names and descriptions to publish them, and the parsers below check bodies against them, so
|
|
8
|
+
* the document and the runtime cannot drift apart.
|
|
9
|
+
*
|
|
10
|
+
* `filter` is deliberately absent: its operators are checked against the collection capabilities
|
|
11
|
+
* (`capabilities-validator`), and a node readable as both leaf and branch has no schema equivalent,
|
|
12
|
+
* so it keeps its own path in `agent-query.ts`.
|
|
13
|
+
*/
|
|
14
|
+
exports.SortClauseInput = zod_1.z.object({
|
|
15
|
+
field: zod_1.z.string(),
|
|
16
|
+
direction: zod_1.z.enum(['asc', 'desc']).optional(),
|
|
17
|
+
});
|
|
18
|
+
exports.PageInput = zod_1.z.object({
|
|
19
|
+
limit: zod_1.z.number().int().positive(),
|
|
20
|
+
offset: zod_1.z.number().int().nonnegative(),
|
|
21
|
+
});
|
|
22
|
+
exports.ProjectionInput = zod_1.z.array(zod_1.z.string());
|
|
23
|
+
exports.SearchInput = zod_1.z.string();
|
|
24
|
+
exports.SearchExtendedInput = zod_1.z.boolean();
|
|
25
|
+
exports.TimezoneInput = zod_1.z.string();
|
|
26
|
+
exports.ParentIdInput = zod_1.z.union([zod_1.z.string().regex(/\S/), zod_1.z.number()]);
|
|
27
|
+
/** Everything a list body carries except `filter`, which is validated separately. */
|
|
28
|
+
exports.ListFlatInputs = zod_1.z.object({
|
|
29
|
+
projection: exports.ProjectionInput.optional(),
|
|
30
|
+
sort: zod_1.z.array(exports.SortClauseInput).optional(),
|
|
31
|
+
page: exports.PageInput.optional(),
|
|
32
|
+
search: exports.SearchInput.optional(),
|
|
33
|
+
searchExtended: exports.SearchExtendedInput.optional(),
|
|
34
|
+
});
|
|
35
|
+
/** A count body carries no projection, sort or page. */
|
|
36
|
+
exports.CountFlatInputs = zod_1.z.object({
|
|
37
|
+
search: exports.SearchInput.optional(),
|
|
38
|
+
searchExtended: exports.SearchExtendedInput.optional(),
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1zY2hlbWFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGEvcmVxdWVzdC1zY2hlbWFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdDQUEyQjtBQUUzQjs7Ozs7Ozs7R0FRRztBQUNVLFFBQUEsZUFBZSxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDdEMsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDakIsU0FBUyxFQUFFLE9BQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDOUMsQ0FBQyxDQUFDO0FBRVUsUUFBQSxTQUFTLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNoQyxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRTtDQUN2QyxDQUFDLENBQUM7QUFFVSxRQUFBLGVBQWUsR0FBRyxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBRXRDLFFBQUEsV0FBVyxHQUFHLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUV6QixRQUFBLG1CQUFtQixHQUFHLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUVsQyxRQUFBLGFBQWEsR0FBRyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFFM0IsUUFBQSxhQUFhLEdBQUcsT0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUUzRSxxRkFBcUY7QUFDeEUsUUFBQSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxVQUFVLEVBQUUsdUJBQWUsQ0FBQyxRQUFRLEVBQUU7SUFDdEMsSUFBSSxFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsdUJBQWUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN6QyxJQUFJLEVBQUUsaUJBQVMsQ0FBQyxRQUFRLEVBQUU7SUFDMUIsTUFBTSxFQUFFLG1CQUFXLENBQUMsUUFBUSxFQUFFO0lBQzlCLGNBQWMsRUFBRSwyQkFBbUIsQ0FBQyxRQUFRLEVBQUU7Q0FDL0MsQ0FBQyxDQUFDO0FBRUgsd0RBQXdEO0FBQzNDLFFBQUEsZUFBZSxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDdEMsTUFBTSxFQUFFLG1CQUFXLENBQUMsUUFBUSxFQUFFO0lBQzlCLGNBQWMsRUFBRSwyQkFBbUIsQ0FBQyxRQUFRLEVBQUU7Q0FDL0MsQ0FBQyxDQUFDIn0=
|
|
@@ -5,6 +5,7 @@ const timezone_middleware_1 = require("../timezone/timezone-middleware");
|
|
|
5
5
|
/** Neutral and always valid, where a local zone would only be right for whoever generated it. */
|
|
6
6
|
const SAMPLE_TIMEZONE = 'UTC';
|
|
7
7
|
const KEY_VARIABLE = 'BFF_KEY';
|
|
8
|
+
const SESSION_VARIABLE = 'BFF_SESSION';
|
|
8
9
|
/**
|
|
9
10
|
* Browser source, injected into the page: it decorates the fetched document with `x-codeSamples`,
|
|
10
11
|
* which Redoc renders as one tab per language, then hands it to `Redoc.init`.
|
|
@@ -32,6 +33,7 @@ const SAMPLES_SCRIPT = `
|
|
|
32
33
|
var TIMEZONE_HEADER = ${JSON.stringify(timezone_middleware_1.TIMEZONE_HEADER)};
|
|
33
34
|
var SAMPLE_TIMEZONE = ${JSON.stringify(SAMPLE_TIMEZONE)};
|
|
34
35
|
var KEY_VARIABLE = ${JSON.stringify(KEY_VARIABLE)};
|
|
36
|
+
var SESSION_VARIABLE = ${JSON.stringify(SESSION_VARIABLE)};
|
|
35
37
|
|
|
36
38
|
/**
|
|
37
39
|
* Every walk below is depth-bounded, because a document can reference itself: a filter is a
|
|
@@ -107,27 +109,29 @@ const SAMPLES_SCRIPT = `
|
|
|
107
109
|
return body;
|
|
108
110
|
}
|
|
109
111
|
|
|
110
|
-
// The
|
|
112
|
+
// The page only ever unlocks with the API key, so it wins wherever an operation takes it. A
|
|
113
|
+
// session-only operation samples the bearer it names, under its OWN variable: that route
|
|
114
|
+
// answers 403 oauth_required to an API key, so reusing the unlock secret would emit a
|
|
115
|
+
// command that cannot work.
|
|
111
116
|
function authHeader(spec, operation) {
|
|
112
117
|
var schemes = (spec.components || {}).securitySchemes || {};
|
|
113
118
|
var requirements = operation.security || spec.security || [];
|
|
114
|
-
var
|
|
119
|
+
var apiKey = null;
|
|
120
|
+
var bearer = null;
|
|
115
121
|
|
|
116
122
|
requirements.forEach(function (requirement) {
|
|
117
123
|
Object.keys(requirement).forEach(function (name) {
|
|
118
|
-
if (header) return;
|
|
119
|
-
|
|
120
124
|
var scheme = schemes[name] || {};
|
|
121
125
|
|
|
122
126
|
if (scheme.type === 'apiKey' && scheme.in === 'header') {
|
|
123
|
-
|
|
127
|
+
apiKey = { name: scheme.name, prefix: '', variable: KEY_VARIABLE };
|
|
124
128
|
} else if (scheme.type === 'http' && scheme.scheme === 'bearer') {
|
|
125
|
-
|
|
129
|
+
bearer = { name: 'Authorization', prefix: 'Bearer ', variable: SESSION_VARIABLE };
|
|
126
130
|
}
|
|
127
131
|
});
|
|
128
132
|
});
|
|
129
133
|
|
|
130
|
-
return
|
|
134
|
+
return apiKey || bearer || { name: KEY_HEADER, prefix: '', variable: KEY_VARIABLE };
|
|
131
135
|
}
|
|
132
136
|
|
|
133
137
|
/**
|
|
@@ -195,13 +199,13 @@ const SAMPLES_SCRIPT = `
|
|
|
195
199
|
var lines = ['curl -X ' + method + ' ' + shellQuoted(url)];
|
|
196
200
|
|
|
197
201
|
headers.forEach(function (header) {
|
|
198
|
-
if (header.
|
|
202
|
+
if (header.variable) {
|
|
199
203
|
var expanded =
|
|
200
204
|
shellExpanding(header.name) +
|
|
201
205
|
': ' +
|
|
202
206
|
shellExpanding(header.prefix) +
|
|
203
207
|
'$' +
|
|
204
|
-
|
|
208
|
+
header.variable;
|
|
205
209
|
|
|
206
210
|
lines.push(' -H "' + expanded + '"');
|
|
207
211
|
|
|
@@ -224,10 +228,10 @@ const SAMPLES_SCRIPT = `
|
|
|
224
228
|
];
|
|
225
229
|
|
|
226
230
|
headers.forEach(function (header) {
|
|
227
|
-
var value = header.
|
|
231
|
+
var value = header.variable
|
|
228
232
|
? (header.prefix ? JSON.stringify(header.prefix) + ' + ' : '') +
|
|
229
233
|
'process.env.' +
|
|
230
|
-
|
|
234
|
+
header.variable
|
|
231
235
|
: JSON.stringify(header.value);
|
|
232
236
|
|
|
233
237
|
lines.push(' ' + JSON.stringify(header.name) + ': ' + value + ',');
|
|
@@ -261,10 +265,14 @@ const SAMPLES_SCRIPT = `
|
|
|
261
265
|
];
|
|
262
266
|
|
|
263
267
|
headers.forEach(function (header) {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
+
if (!header.variable) {
|
|
269
|
+
lines.push('request[' + rubyQuoted(header.name) + '] = ' + rubyQuoted(header.value));
|
|
270
|
+
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
var read = "ENV.fetch('" + header.variable + "')";
|
|
275
|
+
var value = header.prefix ? '"' + header.prefix + '#{' + read + '}"' : read;
|
|
268
276
|
|
|
269
277
|
lines.push('request[' + rubyQuoted(header.name) + '] = ' + value);
|
|
270
278
|
});
|
|
@@ -326,4 +334,4 @@ const SAMPLES_SCRIPT = `
|
|
|
326
334
|
}
|
|
327
335
|
`;
|
|
328
336
|
exports.default = SAMPLES_SCRIPT;
|
|
329
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
337
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jcy1zYW1wbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RvY3MvZG9jcy1zYW1wbGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0VBQStEO0FBQy9ELHlFQUFrRTtBQUVsRSxpR0FBaUc7QUFDakcsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQzlCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUMvQixNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztBQUV2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxjQUFjLEdBQUc7MkJBQ0ksSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQ0FBYyxDQUFDO2dDQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLHFDQUFlLENBQUM7Z0NBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDOzZCQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztpQ0FDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EyU2hFLENBQUM7QUFFRixrQkFBZSxjQUFjLENBQUMifQ==
|
|
@@ -12,6 +12,10 @@ export declare function unsupportedActionResult(message?: string): BffHttpError;
|
|
|
12
12
|
export declare function actionError(message?: string, details?: unknown): BffHttpError;
|
|
13
13
|
export declare function openapiDisabled(message?: string): BffHttpError;
|
|
14
14
|
export declare function forestIdentityNotAllowed(message?: string): BffHttpError;
|
|
15
|
+
export declare function oauthRequired(message?: string): BffHttpError;
|
|
16
|
+
export declare function upstreamError(status: number): BffHttpError;
|
|
17
|
+
export declare function upstreamUnreachable(): BffHttpError;
|
|
18
|
+
export declare function upstreamTimeout(): BffHttpError;
|
|
15
19
|
export declare function permissionsUnavailable(retryAfter: number, message?: string): BffHttpError;
|
|
16
20
|
export declare function actionRequiresApproval(message?: string, details?: unknown): BffHttpError;
|
|
17
21
|
//# sourceMappingURL=bff-local-errors.d.ts.map
|
|
@@ -13,6 +13,10 @@ exports.unsupportedActionResult = unsupportedActionResult;
|
|
|
13
13
|
exports.actionError = actionError;
|
|
14
14
|
exports.openapiDisabled = openapiDisabled;
|
|
15
15
|
exports.forestIdentityNotAllowed = forestIdentityNotAllowed;
|
|
16
|
+
exports.oauthRequired = oauthRequired;
|
|
17
|
+
exports.upstreamError = upstreamError;
|
|
18
|
+
exports.upstreamUnreachable = upstreamUnreachable;
|
|
19
|
+
exports.upstreamTimeout = upstreamTimeout;
|
|
16
20
|
exports.permissionsUnavailable = permissionsUnavailable;
|
|
17
21
|
exports.actionRequiresApproval = actionRequiresApproval;
|
|
18
22
|
const bff_http_error_1 = require("./bff-http-error");
|
|
@@ -55,10 +59,24 @@ function openapiDisabled(message = 'The OpenAPI document is not served') {
|
|
|
55
59
|
function forestIdentityNotAllowed(message = 'Forest identity not allowed') {
|
|
56
60
|
return new bff_http_error_1.BffHttpError(403, 'forest_identity_not_allowed', message);
|
|
57
61
|
}
|
|
62
|
+
function oauthRequired(message = 'This route requires an OAuth session') {
|
|
63
|
+
return new bff_http_error_1.BffHttpError(403, 'oauth_required', message);
|
|
64
|
+
}
|
|
65
|
+
const UPSTREAM_FALLBACK_STATUS = 502;
|
|
66
|
+
function upstreamError(status) {
|
|
67
|
+
const relayed = status >= 400 && status <= 599 ? status : UPSTREAM_FALLBACK_STATUS;
|
|
68
|
+
return new bff_http_error_1.BffHttpError(relayed, 'upstream_error', 'The Forest server failed to handle the request');
|
|
69
|
+
}
|
|
70
|
+
function upstreamUnreachable() {
|
|
71
|
+
return new bff_http_error_1.BffHttpError(502, 'network_error', 'The Forest server could not be reached');
|
|
72
|
+
}
|
|
73
|
+
function upstreamTimeout() {
|
|
74
|
+
return new bff_http_error_1.BffHttpError(504, 'upstream_timeout', 'The Forest server did not respond in time');
|
|
75
|
+
}
|
|
58
76
|
function permissionsUnavailable(retryAfter, message = 'Permissions are unavailable') {
|
|
59
77
|
return new bff_http_error_1.BffHttpError(503, 'permissions_unavailable', message, { retryAfter });
|
|
60
78
|
}
|
|
61
79
|
function actionRequiresApproval(message = 'This action requires an approval before it can run', details) {
|
|
62
80
|
return new bff_http_error_1.BffHttpError(403, 'action_requires_approval', message, { details });
|
|
63
81
|
}
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmZmLWxvY2FsLWVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwL2JmZi1sb2NhbC1lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSw4Q0FFQztBQUVELDBDQUVDO0FBRUQsc0NBRUM7QUFFRCxvREFFQztBQUVELGdEQUVDO0FBRUQsNENBRUM7QUFFRCx3Q0FFQztBQUVELG9DQUVDO0FBRUQsOENBRUM7QUFFRCwwREFFQztBQUVELGtDQUVDO0FBRUQsMENBRUM7QUFFRCw0REFFQztBQUVELHNDQUVDO0FBSUQsc0NBUUM7QUFFRCxrREFFQztBQUVELDBDQUVDO0FBRUQsd0RBS0M7QUFFRCx3REFLQztBQTFGRCxxREFBZ0Q7QUFFaEQsU0FBZ0IsaUJBQWlCLENBQUMsT0FBTyxHQUFHLG9CQUFvQjtJQUM5RCxPQUFPLElBQUksNkJBQVksQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELFNBQWdCLGVBQWUsQ0FBQyxPQUFPLEdBQUcsa0JBQWtCO0lBQzFELE9BQU8sSUFBSSw2QkFBWSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLE9BQU8sR0FBRyxnQkFBZ0I7SUFDdEQsT0FBTyxJQUFJLDZCQUFZLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxPQUFPLEdBQUcsMkJBQTJCO0lBQ3hFLE9BQU8sSUFBSSw2QkFBWSxDQUFDLEdBQUcsRUFBRSx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsT0FBTyxHQUFHLHlCQUF5QjtJQUNwRSxPQUFPLElBQUksNkJBQVksQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLEVBQUUs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
|
package/dist/http/body-limit.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AI_BODY_LIMIT = void 0;
|
|
3
4
|
const BODY_LIMIT = '16kb';
|
|
5
|
+
exports.AI_BODY_LIMIT = '1mb';
|
|
4
6
|
exports.default = BODY_LIMIT;
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS1saW1pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwL2JvZHktbGltaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBRWIsUUFBQSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBRW5DLGtCQUFlLFVBQVUsQ0FBQyJ9
|