@forestadmin/agent-bff 1.21.0 → 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 +40 -3
- 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/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 +1 -0
- package/dist/openapi/schemas.js +10 -2
- package/dist/openapi/unfolded-document.d.ts +5 -1
- package/dist/openapi/unfolded-document.js +6 -3
- package/package.json +1 -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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
|
|
@@ -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
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export declare class OAuthRequestError extends Error {
|
|
2
2
|
readonly status: number;
|
|
3
3
|
readonly type: string;
|
|
4
|
-
|
|
4
|
+
readonly cause?: unknown;
|
|
5
|
+
constructor(status: number, type: string, message: string, cause?: unknown);
|
|
5
6
|
}
|
|
6
7
|
export interface OAuthErrorBody {
|
|
7
8
|
error: string;
|
|
@@ -15,5 +16,5 @@ export declare function unsupportedGrantType(message: string): OAuthRequestError
|
|
|
15
16
|
export declare function forestIdentityNotAllowed(message: string): OAuthRequestError;
|
|
16
17
|
export declare function sessionExpired(message: string): OAuthRequestError;
|
|
17
18
|
export declare function sessionInvalidated(message: string): OAuthRequestError;
|
|
18
|
-
export declare function serverError(message: string): OAuthRequestError;
|
|
19
|
+
export declare function serverError(message: string, cause?: unknown): OAuthRequestError;
|
|
19
20
|
//# sourceMappingURL=oauth-error.d.ts.map
|
|
@@ -11,11 +11,12 @@ exports.sessionExpired = sessionExpired;
|
|
|
11
11
|
exports.sessionInvalidated = sessionInvalidated;
|
|
12
12
|
exports.serverError = serverError;
|
|
13
13
|
class OAuthRequestError extends Error {
|
|
14
|
-
constructor(status, type, message) {
|
|
14
|
+
constructor(status, type, message, cause) {
|
|
15
15
|
super(message);
|
|
16
16
|
this.name = 'OAuthRequestError';
|
|
17
17
|
this.status = status;
|
|
18
18
|
this.type = type;
|
|
19
|
+
this.cause = cause;
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
22
|
exports.OAuthRequestError = OAuthRequestError;
|
|
@@ -43,7 +44,7 @@ function sessionExpired(message) {
|
|
|
43
44
|
function sessionInvalidated(message) {
|
|
44
45
|
return new OAuthRequestError(401, 'session_invalidated', message);
|
|
45
46
|
}
|
|
46
|
-
function serverError(message) {
|
|
47
|
-
return new OAuthRequestError(502, 'server_error', message);
|
|
47
|
+
function serverError(message, cause) {
|
|
48
|
+
return new OAuthRequestError(502, 'server_error', message, cause);
|
|
48
49
|
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb2F1dGgvb2F1dGgtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbUJBLGtDQUVDO0FBRUQsd0NBRUM7QUFFRCxzQ0FFQztBQUVELG9DQUVDO0FBRUQsb0RBRUM7QUFFRCw0REFFQztBQUVELHdDQUVDO0FBRUQsZ0RBRUM7QUFFRCxrQ0FFQztBQXJERCxNQUFhLGlCQUFrQixTQUFRLEtBQUs7SUFLMUMsWUFBWSxNQUFjLEVBQUUsSUFBWSxFQUFFLE9BQWUsRUFBRSxLQUFlO1FBQ3hFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztDQUNGO0FBWkQsOENBWUM7QUFPRCxTQUFnQixXQUFXLENBQUMsS0FBd0I7SUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNqRSxDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLE9BQWU7SUFDNUMsT0FBTyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLE9BQWU7SUFDM0MsT0FBTyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsU0FBZ0IsWUFBWSxDQUFDLE9BQWU7SUFDMUMsT0FBTyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELFNBQWdCLG9CQUFvQixDQUFDLE9BQWU7SUFDbEQsT0FBTyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsRUFBRSx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQsU0FBZ0Isd0JBQXdCLENBQUMsT0FBZTtJQUN0RCxPQUFPLElBQUksaUJBQWlCLENBQUMsR0FBRyxFQUFFLDZCQUE2QixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFnQixjQUFjLENBQUMsT0FBZTtJQUM1QyxPQUFPLElBQUksaUJBQWlCLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxPQUFlO0lBQ2hELE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxPQUFlLEVBQUUsS0FBZTtJQUMxRCxPQUFPLElBQUksaUJBQWlCLENBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEUsQ0FBQyJ9
|
|
@@ -26,7 +26,7 @@ async function refreshAndPersist(sid, store, serverClient) {
|
|
|
26
26
|
if (error instanceof forest_server_client_1.OAuthExchangeError && CLIENT_ERROR_CODES.has(error.error)) {
|
|
27
27
|
throw (0, oauth_error_1.sessionExpired)('The Forest server rejected the refresh token');
|
|
28
28
|
}
|
|
29
|
-
throw (0, oauth_error_1.serverError)('Failed to reach the Forest server to refresh the session');
|
|
29
|
+
throw (0, oauth_error_1.serverError)('Failed to reach the Forest server to refresh the session', error);
|
|
30
30
|
}
|
|
31
31
|
if (!store.get(sid)) {
|
|
32
32
|
throw (0, oauth_error_1.sessionExpired)('Session expired during token refresh');
|
|
@@ -54,4 +54,4 @@ async function ensureFreshServerAccess({ sid, store, serverClient, }) {
|
|
|
54
54
|
inFlightRefreshesBySid.set(sid, refresh);
|
|
55
55
|
return refresh;
|
|
56
56
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1saWZlY3ljbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb2F1dGgvc2Vzc2lvbi1saWZlY3ljbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUEyREEsMENBd0JDO0FBaEZELGdFQUF3QztBQUV4QyxpRUFBNEQ7QUFDNUQsK0NBQTREO0FBUTVELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBRTNGLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7QUFFbEUsU0FBUyxpQkFBaUIsQ0FBQyxlQUF1QjtJQUNoRCxNQUFNLE9BQU8sR0FBRyxzQkFBWSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQTRCLENBQUM7SUFFaEYsT0FBTyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsS0FBSyxVQUFVLGlCQUFpQixDQUM5QixHQUFXLEVBQ1gsS0FBbUIsRUFDbkIsWUFBZ0M7SUFFaEMsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXRELElBQUksY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBQSw0QkFBYyxFQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksT0FBc0UsQ0FBQztJQUUzRSxJQUFJLENBQUM7UUFDSCxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSx5Q0FBa0IsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0UsTUFBTSxJQUFBLDRCQUFjLEVBQUMsOENBQThDLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBRUQsTUFBTSxJQUFBLHlCQUFXLEVBQUMsMERBQTBELEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFBLDRCQUFjLEVBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtRQUMxQixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7UUFDeEMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtLQUMzQyxDQUFDLENBQUM7SUFFSCxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUM7QUFDakMsQ0FBQztBQUVjLEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxFQUNwRCxHQUFHLEVBQ0gsS0FBSyxFQUNMLFlBQVksR0FDa0I7SUFDOUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUvQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUEsNEJBQWMsRUFBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQy9FLE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELElBQUksUUFBUTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBRTlCLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUN2RSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDSCxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXpDLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMifQ==
|
|
@@ -2,6 +2,10 @@ 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
|
|
5
|
+
export interface GenerateOpenApiDocumentOptions {
|
|
6
|
+
unfolding?: Unfolding;
|
|
7
|
+
hasAiQueryRoute?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function generateOpenApiDocument(version: string, { unfolding, hasAiQueryRoute }?: GenerateOpenApiDocumentOptions): OpenAPIObject;
|
|
6
10
|
export declare function serializeOpenApi(document: OpenAPIObject): string;
|
|
7
11
|
//# sourceMappingURL=openapi-document.d.ts.map
|