@forestadmin/agent-bff 1.29.0 → 1.30.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 +115 -8
- package/dist/action/action-routes-middleware.js +8 -1
- package/dist/build-bff.js +3 -1
- package/dist/context/build-context.d.ts +1 -0
- package/dist/context/build-context.js +18 -4
- package/dist/data/agent-query.js +23 -3
- package/dist/data/data-routes-middleware.js +7 -2
- package/dist/data/pack-id.d.ts +6 -1
- package/dist/data/pack-id.js +96 -3
- package/dist/data/response-mappers.js +2 -2
- package/dist/http/access-log-middleware.d.ts +26 -0
- package/dist/http/access-log-middleware.js +68 -0
- package/dist/http/agent-error-mapper.js +42 -27
- package/dist/openapi/collect-unfolding.js +23 -9
- package/dist/openapi/schemas.d.ts +1 -0
- package/dist/openapi/schemas.js +22 -3
- package/dist/openapi/unfolded-document.js +7 -2
- package/dist/openapi/unfolded-paths.js +96 -16
- package/dist/openapi/unfolding.d.ts +12 -0
- package/dist/openapi/unfolding.js +1 -1
- package/dist/read-model/agent-capabilities-fetcher.d.ts +6 -1
- package/dist/read-model/agent-capabilities-fetcher.js +88 -6
- package/dist/read-model/capabilities-cache.d.ts +1 -0
- package/dist/read-model/capabilities-cache.js +1 -1
- package/dist/read-model/forest-schema-client.d.ts +3 -3
- package/dist/read-model/forest-schema-client.js +2 -2
- package/dist/read-model/read-model-store.d.ts +2 -1
- package/dist/read-model/read-model-store.js +3 -3
- package/dist/read-model/read-model.d.ts +34 -0
- package/dist/read-model/read-model.js +79 -4
- package/dist/read-model/schema-cache.d.ts +17 -1
- package/dist/read-model/schema-cache.js +19 -6
- package/dist/read-model/synthesize-capabilities.d.ts +35 -0
- package/dist/read-model/synthesize-capabilities.js +133 -0
- package/dist/validation/capabilities-validator.d.ts +6 -4
- package/dist/validation/capabilities-validator.js +12 -1
- package/dist/validation/operator-normalizer.d.ts +0 -6
- package/dist/validation/operator-normalizer.js +6 -14
- package/dist/validation/validation-errors.d.ts +1 -0
- package/dist/validation/validation-errors.js +7 -1
- package/package.json +3 -3
package/dist/data/pack-id.js
CHANGED
|
@@ -1,28 +1,121 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.PACKED_ID_SEPARATOR = void 0;
|
|
4
7
|
exports.default = unpackPrimaryKey;
|
|
8
|
+
const record_key_1 = __importDefault(require("./record-key"));
|
|
5
9
|
const bff_local_errors_1 = require("../http/bff-local-errors");
|
|
6
10
|
exports.PACKED_ID_SEPARATOR = '|';
|
|
7
11
|
// The only column type unpacked to a number, mirroring the agent's `IdUtils.unpackId`.
|
|
8
12
|
const NUMBER_COLUMN_TYPE = 'Number';
|
|
13
|
+
/**
|
|
14
|
+
* The numeric form of an id, but only when it round-trips back to the exact same characters. A
|
|
15
|
+
* derived key carries the agent id opaque, so a cast that loses anything defeats its whole purpose:
|
|
16
|
+
* `9007199254740993` casts to `...992` and would name a different record, `Infinity` and `NaN`
|
|
17
|
+
* serialize as `null`, and `1e3` or `042` come back spelled differently from what the record's `id`
|
|
18
|
+
* holds. In every one of those the string is kept, which the contract already allows.
|
|
19
|
+
*/
|
|
20
|
+
function toNumberIfLossless(value) {
|
|
21
|
+
const numeric = Number(value);
|
|
22
|
+
return Number.isSafeInteger(numeric) && String(numeric) === value ? numeric : value;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The value a record carries for a key field, when it can stand for a packed segment. The field is
|
|
26
|
+
* read under its own name first, then under the camelCase key the deserializer emits
|
|
27
|
+
* (`agent-client/src/http-requester.ts`). Anything that is not a string or a finite number is
|
|
28
|
+
* ignored: a record attribute can also be `null`, a boolean, a relation object written over the
|
|
29
|
+
* same key, or the JSON of a Buffer, and none of those names a segment.
|
|
30
|
+
*
|
|
31
|
+
* A key whose response key is shared with another field is refused outright. The record then holds
|
|
32
|
+
* a single value under that key and which field wrote it is not knowable here, so reading it could
|
|
33
|
+
* claim the segment of a sibling key — worse than not matching at all.
|
|
34
|
+
*/
|
|
35
|
+
function comparableValue(record, key) {
|
|
36
|
+
if (key.ambiguousRecordKey)
|
|
37
|
+
return null;
|
|
38
|
+
const { name } = key;
|
|
39
|
+
const declared = record[name];
|
|
40
|
+
const value = declared === undefined || declared === null ? record[(0, record_key_1.default)(name)] : declared;
|
|
41
|
+
if (typeof value === 'string')
|
|
42
|
+
return value;
|
|
43
|
+
return typeof value === 'number' && Number.isFinite(value) ? String(value) : null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The packed segments, reordered onto the keys they belong to.
|
|
47
|
+
*
|
|
48
|
+
* The pairing cannot come from the order the keys arrive in: the apimap sorts its fields
|
|
49
|
+
* alphabetically (`agent/src/utils/forest-schema/generator-collection.ts`) while the agent packs in
|
|
50
|
+
* declaration order (`agent/src/utils/id.ts`), and the two agree only by accident — a
|
|
51
|
+
* `tenant_id`/`seq` collection packs `acme|42` and gets `"acme"` cast as `seq`, so every list of it
|
|
52
|
+
* answers 500.
|
|
53
|
+
*
|
|
54
|
+
* The record settles it. Its attributes hold the key values, so a segment equal to one of them
|
|
55
|
+
* belongs to that key whatever the published order. The record is used for THAT and nothing else —
|
|
56
|
+
* the value emitted is always the packed segment, never the record's own. The case that forces it
|
|
57
|
+
* is a key named `id`: `jsonapi-serializer` overwrites that attribute with the resource id
|
|
58
|
+
* (`deserializer-utils.js`), so the record would hand back `acme|42` for it. Reading the segment
|
|
59
|
+
* instead keeps that key correct, and it matches nothing, so it takes what its siblings left. A
|
|
60
|
+
* `Date` or a Buffer key is the same story from the other side: their attribute form differs from
|
|
61
|
+
* the packed one (ISO versus `String(date)`), they match nothing, and they keep their position.
|
|
62
|
+
*
|
|
63
|
+
* One key the record cannot answer for is still placed: the single segment left over is necessarily
|
|
64
|
+
* its own, whatever the published order. Two are not. Which of the remaining segments is whose is
|
|
65
|
+
* exactly the question the record failed to answer, and placing them anyway hands back a wrong key
|
|
66
|
+
* under a 200 where the positional pairing would have raised its numeric-cast error. So the whole
|
|
67
|
+
* reordering is dropped as soon as a second key goes unread, errors included. Keeping an unread key
|
|
68
|
+
* on its own segment instead is not enough: with four keys, two read and two unread, both unread
|
|
69
|
+
* ones can sit on their published segment and both still be wrong.
|
|
70
|
+
*
|
|
71
|
+
* With no record, the values are returned whole and the pairing is the positional one.
|
|
72
|
+
*/
|
|
73
|
+
function segmentsByKey(values, primaryKeys, record) {
|
|
74
|
+
if (!record)
|
|
75
|
+
return values;
|
|
76
|
+
const claimed = values.map(() => false);
|
|
77
|
+
const matched = primaryKeys.map(key => {
|
|
78
|
+
const wanted = comparableValue(record, key);
|
|
79
|
+
const index = wanted === null ? -1 : values.findIndex((v, i) => !claimed[i] && v === wanted);
|
|
80
|
+
if (index === -1)
|
|
81
|
+
return null;
|
|
82
|
+
claimed[index] = true;
|
|
83
|
+
return values[index];
|
|
84
|
+
});
|
|
85
|
+
if (matched.filter(value => value === null).length > 1)
|
|
86
|
+
return values;
|
|
87
|
+
const leftovers = values.filter((_, index) => !claimed[index]);
|
|
88
|
+
return matched.map(value => value ?? leftovers.shift());
|
|
89
|
+
}
|
|
9
90
|
/**
|
|
10
91
|
* Rebuild the structured primary key of a record from its opaque packed id, mirroring the agent's
|
|
11
92
|
* `IdUtils.packId`/`unpackId` (`|`-joined values, `Number` columns cast back to numbers). Returns a
|
|
12
93
|
* `{ pkField: value }` map for `__forest.primaryKey`. Throws a mapping error rather than emitting a
|
|
13
94
|
* malformed key when the schema lacks key metadata or the packed id shape does not match it.
|
|
95
|
+
*
|
|
96
|
+
* A DERIVED key is the exception: the schema published none, so its arity is a guess and the real
|
|
97
|
+
* key may be composite. Splitting `tenant|42` against one guessed key would 500 every list of that
|
|
98
|
+
* collection, so a derived key takes the packed id whole — typed when the declared `id` field says
|
|
99
|
+
* `Number` and the id is numeric, left a string otherwise, and never a throw.
|
|
14
100
|
*/
|
|
15
|
-
function unpackPrimaryKey(packedId, primaryKeys) {
|
|
101
|
+
function unpackPrimaryKey(packedId, primaryKeys, record) {
|
|
16
102
|
if (primaryKeys.length === 0) {
|
|
17
103
|
throw (0, bff_local_errors_1.mappingError)('Cannot build primary key: the collection exposes no key metadata');
|
|
18
104
|
}
|
|
105
|
+
const [first] = primaryKeys;
|
|
106
|
+
if (first.derived) {
|
|
107
|
+
return {
|
|
108
|
+
[first.name]: first.type === NUMBER_COLUMN_TYPE ? toNumberIfLossless(packedId) : packedId,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
19
111
|
const values = packedId.split(exports.PACKED_ID_SEPARATOR);
|
|
20
112
|
if (values.length !== primaryKeys.length) {
|
|
21
113
|
throw (0, bff_local_errors_1.mappingError)(`Cannot build primary key: expected ${primaryKeys.length} values, found ${values.length}`);
|
|
22
114
|
}
|
|
115
|
+
const segments = segmentsByKey(values, primaryKeys, record);
|
|
23
116
|
const result = {};
|
|
24
117
|
primaryKeys.forEach(({ name, type }, index) => {
|
|
25
|
-
const value =
|
|
118
|
+
const value = segments[index];
|
|
26
119
|
if (type !== NUMBER_COLUMN_TYPE) {
|
|
27
120
|
result[name] = value;
|
|
28
121
|
return;
|
|
@@ -35,4 +128,4 @@ function unpackPrimaryKey(packedId, primaryKeys) {
|
|
|
35
128
|
});
|
|
36
129
|
return result;
|
|
37
130
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFjay1pZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL3BhY2staWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBOEdBLG1DQWlEQztBQTdKRCw4REFBcUM7QUFDckMsK0RBQXdEO0FBRTNDLFFBQUEsbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBRXZDLHVGQUF1RjtBQUN2RixNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQztBQUVwQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLEtBQWE7SUFDdkMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlCLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN0RixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsZUFBZSxDQUFDLE1BQStCLEVBQUUsR0FBb0I7SUFDNUUsSUFBSSxHQUFHLENBQUMsa0JBQWtCO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFeEMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNyQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsTUFBTSxLQUFLLEdBQUcsUUFBUSxLQUFLLFNBQVMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBQSxvQkFBUyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUUvRixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUU1QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FB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
|
|
@@ -17,7 +17,7 @@ function mapListResponse(collection, records, primaryKeys) {
|
|
|
17
17
|
...record,
|
|
18
18
|
__forest: {
|
|
19
19
|
collection,
|
|
20
|
-
primaryKey: (0, pack_id_1.default)(String(record.id), primaryKeys),
|
|
20
|
+
primaryKey: (0, pack_id_1.default)(String(record.id), primaryKeys, record),
|
|
21
21
|
},
|
|
22
22
|
};
|
|
23
23
|
});
|
|
@@ -35,4 +35,4 @@ function mapCountResponse(raw) {
|
|
|
35
35
|
// Neither schema metadata nor a usable raw payload: never silently report 0.
|
|
36
36
|
throw (0, bff_local_errors_1.mappingError)('Agent count payload has no numeric count and no deactivated marker');
|
|
37
37
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UtbWFwcGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL3Jlc3BvbnNlLW1hcHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFzQkEsMENBb0JDO0FBR0QsNENBZ0JDO0FBM0RELHdEQUF5QztBQUN6QywrREFBd0Q7QUFpQnhELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQztBQUVsQyxTQUFnQixlQUFlLENBQzdCLFVBQWtCLEVBQ2xCLE9BQWtDLEVBQ2xDLFdBQThCO0lBRTlCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDaEMsSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2xELE1BQU0sSUFBQSwrQkFBWSxFQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU87WUFDTCxHQUFHLE1BQU07WUFDVCxRQUFRLEVBQUU7Z0JBQ1IsVUFBVTtnQkFDVixVQUFVLEVBQUUsSUFBQSxpQkFBZ0IsRUFBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUM7YUFDckU7U0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDO0FBQzFELENBQUM7QUFFRCxnRUFBZ0U7QUFDaEUsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBWTtJQUMzQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FHL0QsQ0FBQztJQUVGLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDckMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsTUFBTSxJQUFBLCtCQUFZLEVBQUMsb0VBQW9FLENBQUMsQ0FBQztBQUMzRixDQUFDIn0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Logger } from '../ports/logger-port';
|
|
2
|
+
import type { Middleware } from 'koa';
|
|
3
|
+
export interface AccessLogMiddlewareOptions {
|
|
4
|
+
logger: Logger;
|
|
5
|
+
/** Prefix the host serves this BFF under, so the line names a url the caller can actually call. */
|
|
6
|
+
basePath: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* One line per request, in the shape the agent's own request logger emits (`[200] GET /path - 12ms`)
|
|
10
|
+
* so both layers read the same way in an embedded deployment.
|
|
11
|
+
*
|
|
12
|
+
* Belongs at the head of the chain: everything below it — `/health`, `/docs`, `/oauth/*`, a 401 from
|
|
13
|
+
* the auth edge, a rejected origin — either never reaches the agent or never reaches the
|
|
14
|
+
* agent-scoped error middleware, and is exactly the traffic that used to leave no trace at all.
|
|
15
|
+
*
|
|
16
|
+
* The query string is deliberately absent. Nothing routed today needs it, and a line that carries it
|
|
17
|
+
* would leak whatever a future route accepts there without anyone revisiting this decision.
|
|
18
|
+
*
|
|
19
|
+
* Carries no cause either, so that a host logger which cannot take structured fields still reads as
|
|
20
|
+
* one line per request. The detail is not lost where it matters: `createErrorMiddleware` already
|
|
21
|
+
* reports it for everything under `/agent`. Outside it — a body parser rejection on an OAuth POST is
|
|
22
|
+
* the only route there today — the stack reaches stderr through Koa's own handler, as it did before
|
|
23
|
+
* this middleware existed.
|
|
24
|
+
*/
|
|
25
|
+
export default function createAccessLogMiddleware({ logger, basePath, }: AccessLogMiddlewareOptions): Middleware;
|
|
26
|
+
//# sourceMappingURL=access-log-middleware.d.ts.map
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = createAccessLogMiddleware;
|
|
4
|
+
const base_path_1 = require("../base-path");
|
|
5
|
+
const CLIENT_ERROR = 400;
|
|
6
|
+
const SERVER_ERROR = 500;
|
|
7
|
+
function levelOf(status) {
|
|
8
|
+
if (status >= SERVER_ERROR)
|
|
9
|
+
return 'Error';
|
|
10
|
+
if (status >= CLIENT_ERROR)
|
|
11
|
+
return 'Warn';
|
|
12
|
+
return 'Info';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The status the caller will see, read off an exception rather than off the response: this
|
|
16
|
+
* middleware sits above every error handler the BFF has, so at the moment it logs, `ctx.status` is
|
|
17
|
+
* still the 404 Koa defaults to and would name a status nobody was ever answered.
|
|
18
|
+
*/
|
|
19
|
+
function statusOf(error) {
|
|
20
|
+
if (typeof error !== 'object' || error === null)
|
|
21
|
+
return SERVER_ERROR;
|
|
22
|
+
const { status, statusCode } = error;
|
|
23
|
+
const value = typeof status === 'number' ? status : statusCode;
|
|
24
|
+
return typeof value === 'number' ? value : SERVER_ERROR;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* One line per request, in the shape the agent's own request logger emits (`[200] GET /path - 12ms`)
|
|
28
|
+
* so both layers read the same way in an embedded deployment.
|
|
29
|
+
*
|
|
30
|
+
* Belongs at the head of the chain: everything below it — `/health`, `/docs`, `/oauth/*`, a 401 from
|
|
31
|
+
* the auth edge, a rejected origin — either never reaches the agent or never reaches the
|
|
32
|
+
* agent-scoped error middleware, and is exactly the traffic that used to leave no trace at all.
|
|
33
|
+
*
|
|
34
|
+
* The query string is deliberately absent. Nothing routed today needs it, and a line that carries it
|
|
35
|
+
* would leak whatever a future route accepts there without anyone revisiting this decision.
|
|
36
|
+
*
|
|
37
|
+
* Carries no cause either, so that a host logger which cannot take structured fields still reads as
|
|
38
|
+
* one line per request. The detail is not lost where it matters: `createErrorMiddleware` already
|
|
39
|
+
* reports it for everything under `/agent`. Outside it — a body parser rejection on an OAuth POST is
|
|
40
|
+
* the only route there today — the stack reaches stderr through Koa's own handler, as it did before
|
|
41
|
+
* this middleware existed.
|
|
42
|
+
*/
|
|
43
|
+
function createAccessLogMiddleware({ logger, basePath, }) {
|
|
44
|
+
return async function accessLog(ctx, next) {
|
|
45
|
+
const startedAt = Date.now();
|
|
46
|
+
const write = (status) => {
|
|
47
|
+
const path = `${(0, base_path_1.emittedBaseOf)(ctx, basePath)}${ctx.path}`;
|
|
48
|
+
try {
|
|
49
|
+
logger(levelOf(status), `[${status}] ${ctx.method} ${path} - ${Date.now() - startedAt}ms`);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// The logger belongs to the host and nothing in the port forbids it from throwing. Left
|
|
53
|
+
// unguarded, a throw here would answer 500 to a request the route served, and on the error
|
|
54
|
+
// path it would replace the exception being reported with its own. There is nowhere to
|
|
55
|
+
// report this: the only sink available is the logger that just failed.
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
try {
|
|
59
|
+
await next();
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
write(statusOf(error));
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
write(ctx.response.status);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWxvZy1taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2h0dHAvYWNjZXNzLWxvZy1taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBb0RBLDRDQThCQztBQS9FRCw0Q0FBNkM7QUFRN0MsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUV6QixTQUFTLE9BQU8sQ0FBQyxNQUFjO0lBQzdCLElBQUksTUFBTSxJQUFJLFlBQVk7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUMzQyxJQUFJLE1BQU0sSUFBSSxZQUFZO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFFMUMsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFFckUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFtRCxDQUFDO0lBQ25GLE1BQU0sS0FBSyxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFFL0QsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0FBQzFELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQXdCLHlCQUF5QixDQUFDLEVBQ2hELE1BQU0sRUFDTixRQUFRLEdBQ21CO0lBQzNCLE9BQU8sS0FBSyxVQUFVLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSTtRQUN2QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFN0IsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUMvQixNQUFNLElBQUksR0FBRyxHQUFHLElBQUEseUJBQWEsRUFBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRTFELElBQUksQ0FBQztnQkFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLElBQUksSUFBSSxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLElBQUksQ0FBQyxDQUFDO1lBQzdGLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1Asd0ZBQXdGO2dCQUN4RiwyRkFBMkY7Z0JBQzNGLHVGQUF1RjtnQkFDdkYsdUVBQXVFO1lBQ3pFLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ2YsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFdkIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO1FBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -86,44 +86,59 @@ function parseJsonApiFromMessage(error) {
|
|
|
86
86
|
return undefined;
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
function
|
|
89
|
+
function asNonEmptyString(value) {
|
|
90
|
+
if (typeof value !== 'string')
|
|
91
|
+
return undefined;
|
|
92
|
+
return value || undefined;
|
|
93
|
+
}
|
|
94
|
+
function mapFlatBody(error, logger) {
|
|
95
|
+
const { status, body, responseText } = error;
|
|
90
96
|
const flat = (typeof body === 'object' && body !== null ? body : {});
|
|
91
|
-
const message = (
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
97
|
+
const message = asNonEmptyString(flat.error) ?? asNonEmptyString(flat.message);
|
|
98
|
+
// An unstructured 4xx body is whatever the agent's host framework emitted: an HTML error page, a
|
|
99
|
+
// proxy notice, a stack trace. It is not a message for the client, and it leaks the agent's
|
|
100
|
+
// internals, so it is logged as the cause and answered generically -- the same treatment the 5xx
|
|
101
|
+
// path already gives.
|
|
102
|
+
if (message === undefined) {
|
|
103
|
+
logger('Warn', 'Agent 4xx carried no structured error; client message is generic', {
|
|
104
|
+
status,
|
|
105
|
+
cause: asNonEmptyString(responseText),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return new bff_http_error_1.BffHttpError(status, fallbackTypeByStatus(status), message ?? DEFAULT_ERROR_MESSAGE);
|
|
109
|
+
}
|
|
110
|
+
function mapErrorWithoutHttpResponse(error, logger) {
|
|
111
|
+
if (error instanceof create_agent_http_requester_1.AgentTimeoutError) {
|
|
112
|
+
logger('Warn', 'Agent timeout mapped to agent_timeout', { cause: error.message });
|
|
113
|
+
return new bff_http_error_1.BffHttpError(504, TYPE_AGENT_TIMEOUT, DEFAULT_TIMEOUT_MESSAGE);
|
|
114
|
+
}
|
|
115
|
+
const agentError = parseJsonApiFromMessage(error);
|
|
116
|
+
if (agentError)
|
|
117
|
+
return mapJsonApiError(agentError, 400, logger);
|
|
118
|
+
// No HTTP response: treated as a transport failure reaching the agent. Log the real cause but
|
|
119
|
+
// return a generic message — transport errors embed internal topology (hostnames/IPs) that must
|
|
120
|
+
// not leak to the client. Semantic agent-client errors (action form validation / approval
|
|
121
|
+
// outcomes) are NOT transport failures: the action endpoint catches and maps those before this
|
|
122
|
+
// fallback. Callers must scope their try/catch to the agent call so a local BFF bug surfaces as
|
|
123
|
+
// a 500 through the error middleware rather than being mislabelled here.
|
|
124
|
+
logger('Warn', 'Agent transport failure mapped to network_error', {
|
|
125
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
126
|
+
});
|
|
127
|
+
return new bff_http_error_1.BffHttpError(502, TYPE_NETWORK_ERROR, DEFAULT_NETWORK_MESSAGE);
|
|
96
128
|
}
|
|
97
129
|
function mapAgentError(error, { logger }) {
|
|
98
130
|
// A BFF-origin error that reached here (e.g. thrown inside a caller's agent-call try/catch) keeps
|
|
99
131
|
// its own type — it must not be recategorized as a transport/agent error.
|
|
100
132
|
if (error instanceof bff_http_error_1.BffHttpError)
|
|
101
133
|
return error;
|
|
102
|
-
if (!(error instanceof agent_client_1.AgentHttpError))
|
|
103
|
-
|
|
104
|
-
logger('Warn', 'Agent timeout mapped to agent_timeout', { cause: error.message });
|
|
105
|
-
return new bff_http_error_1.BffHttpError(504, TYPE_AGENT_TIMEOUT, DEFAULT_TIMEOUT_MESSAGE);
|
|
106
|
-
}
|
|
107
|
-
const agentError = parseJsonApiFromMessage(error);
|
|
108
|
-
if (agentError)
|
|
109
|
-
return mapJsonApiError(agentError, 400, logger);
|
|
110
|
-
// No HTTP response: treated as a transport failure reaching the agent. Log the real cause but
|
|
111
|
-
// return a generic message — transport errors embed internal topology (hostnames/IPs) that must
|
|
112
|
-
// not leak to the client. Semantic agent-client errors (action form validation / approval
|
|
113
|
-
// outcomes) are NOT transport failures: the action endpoint catches and maps those before this
|
|
114
|
-
// fallback. Callers must scope their try/catch to the agent call so a local BFF bug surfaces as
|
|
115
|
-
// a 500 through the error middleware rather than being mislabelled here.
|
|
116
|
-
logger('Warn', 'Agent transport failure mapped to network_error', {
|
|
117
|
-
cause: error instanceof Error ? error.message : String(error),
|
|
118
|
-
});
|
|
119
|
-
return new bff_http_error_1.BffHttpError(502, TYPE_NETWORK_ERROR, DEFAULT_NETWORK_MESSAGE);
|
|
120
|
-
}
|
|
134
|
+
if (!(error instanceof agent_client_1.AgentHttpError))
|
|
135
|
+
return mapErrorWithoutHttpResponse(error, logger);
|
|
121
136
|
if (error.status >= 500) {
|
|
122
137
|
return logCauseAndReturnAgentUnavailable(logger, error.status, firstJsonApiError(error.body)?.detail ?? error.responseText ?? DEFAULT_ERROR_MESSAGE);
|
|
123
138
|
}
|
|
124
139
|
const agentError = firstJsonApiError(error.body);
|
|
125
140
|
if (agentError)
|
|
126
141
|
return mapJsonApiError(agentError, error.status, logger);
|
|
127
|
-
return mapFlatBody(error
|
|
142
|
+
return mapFlatBody(error, logger);
|
|
128
143
|
}
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtZXJyb3ItbWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2h0dHAvYWdlbnQtZXJyb3ItbWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTJMQSxzQ0FtQkM7QUE1TUQsNERBQTJEO0FBRTNELHFEQUFnRDtBQUNoRCxzRkFBeUU7QUFFekUsTUFBTSxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQztBQUMvQyxNQUFNLHFCQUFxQixHQUFHLGtCQUFrQixDQUFDO0FBQ2pELE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDO0FBQ3pDLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQztBQUNuQyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUM7QUFDbkMsTUFBTSxrQkFBa0IsR0FBRyxzQkFBc0IsQ0FBQztBQUNsRCxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQixDQUFDO0FBQ25ELE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDO0FBQzNDLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDO0FBQzNDLE1BQU0sc0JBQXNCLEdBQUcsbUJBQW1CLENBQUM7QUFjbkQsTUFBTSx1QkFBdUIsR0FBRyxnQ0FBZ0MsQ0FBQztBQUNqRSxNQUFNLHVCQUF1QixHQUFHLG1DQUFtQyxDQUFDO0FBQ3BFLE1BQU0sMkJBQTJCLEdBQUcsMEJBQTBCLENBQUM7QUFDL0QsTUFBTSxxQkFBcUIsR0FBRyxrQkFBa0IsQ0FBQztBQUVwQyxRQUFBLG9CQUFvQixHQUFpQztJQUNoRSxlQUFlLEVBQUUscUJBQXFCO0lBQ3RDLGVBQWUsRUFBRSxvQkFBb0I7SUFDckMsaUJBQWlCLEVBQUUsaUJBQWlCO0lBQ3BDLGNBQWMsRUFBRSxjQUFjO0lBQzlCLGFBQWEsRUFBRSxjQUFjO0lBQzdCLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxvQkFBb0IsRUFBRSxzQkFBc0I7Q0FDN0MsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLEdBQWlDO0lBQzVELEdBQUcsRUFB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
|
|
@@ -57,13 +57,25 @@ function documentedOperators(collection, field, operators, logger) {
|
|
|
57
57
|
}
|
|
58
58
|
return (0, operator_normalizer_1.toCanonicalOperatorSet)(normalized);
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* The filterable subset, plus whether a field was dropped as undocumentable rather than as genuinely
|
|
62
|
+
* not filterable. The caller needs the two apart: a field with no operator is an ANSWER the document
|
|
63
|
+
* can state, while a field dropped for operator skew leaves the filterable set incomplete, and an
|
|
64
|
+
* incomplete set that ends up empty must not be documented as "nothing is filterable".
|
|
65
|
+
*/
|
|
60
66
|
function collectFilterableFields(collection, capabilities, logger) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
+
const fields = [];
|
|
68
|
+
let undocumentable = false;
|
|
69
|
+
for (const field of capabilities.fields) {
|
|
70
|
+
if ((field.operators?.length ?? 0) > 0) {
|
|
71
|
+
const operators = documentedOperators(collection, field.name, field.operators, logger);
|
|
72
|
+
if (operators === null)
|
|
73
|
+
undocumentable = true;
|
|
74
|
+
else
|
|
75
|
+
fields.push({ name: field.name, operators });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return { fields, undocumentable };
|
|
67
79
|
}
|
|
68
80
|
async function collectFields(collection, { store, capabilitiesFetcher, logger }) {
|
|
69
81
|
try {
|
|
@@ -74,10 +86,12 @@ async function collectFields(collection, { store, capabilitiesFetcher, logger })
|
|
|
74
86
|
});
|
|
75
87
|
return UNTYPED('no_fields');
|
|
76
88
|
}
|
|
89
|
+
const filterable = collectFilterableFields(collection, capabilities, logger);
|
|
77
90
|
return {
|
|
78
|
-
projectable: capabilities.fields.map(({ name, type }) =>
|
|
79
|
-
filterable:
|
|
91
|
+
projectable: capabilities.fields.map(({ name, type, sortable }) => sortable === false ? { name, type, sortable } : { name, type }),
|
|
92
|
+
filterable: filterable.fields,
|
|
80
93
|
degraded: null,
|
|
94
|
+
...(filterable.undocumentable ? { undocumentableFilter: true } : {}),
|
|
81
95
|
};
|
|
82
96
|
}
|
|
83
97
|
catch (error) {
|
|
@@ -146,4 +160,4 @@ async function collectUnfolding(options) {
|
|
|
146
160
|
}));
|
|
147
161
|
return { collections };
|
|
148
162
|
}
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdC11bmZvbGRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFwaS9jb2xsZWN0LXVuZm9sZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEwTkEsbUNBZ0JDO0FBNU5ELHNDQUFnRDtBQUNoRCx5REFBOEQ7QUFDOUQsMkVBQThGO0FBRTlGLG9HQUFvRztBQUNwRyxrR0FBa0c7QUFDbEcsa0ZBQWtGO0FBQ3JFLFFBQUEsd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBVTNDLEtBQUssVUFBVSxrQkFBa0IsQ0FDL0IsS0FBVSxFQUNWLEtBQWEsRUFDYixHQUE0QjtJQUU1QixNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0MsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRWYsaUdBQWlHO0lBQ2pHLCtDQUErQztJQUMvQyxNQUFNLE1BQU0sR0FBRyxLQUFLLElBQW1CLEVBQUU7UUFDdkMsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRW5DLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNyQixNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXpDLE1BQU0sTUFBTSxFQUFFLENBQUM7SUFDakIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUVqRixPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFzQyxF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
|
|
@@ -139,6 +139,7 @@ export declare const ContextResponseSchema: z.ZodObject<{
|
|
|
139
139
|
inverseOf: z.ZodOptional<z.ZodString>;
|
|
140
140
|
polymorphicTargets: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
141
141
|
isPrimaryKey: z.ZodOptional<z.ZodBoolean>;
|
|
142
|
+
isPrimaryKeyDerived: z.ZodOptional<z.ZodBoolean>;
|
|
142
143
|
isRequired: z.ZodOptional<z.ZodBoolean>;
|
|
143
144
|
isReadOnly: z.ZodOptional<z.ZodBoolean>;
|
|
144
145
|
enums: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
package/dist/openapi/schemas.js
CHANGED
|
@@ -222,7 +222,14 @@ exports.ForestRecordMetaSchema = zod_openapi_1.z
|
|
|
222
222
|
description: 'The record identity, unpacked from the agent id. A composite primary key carries one ' +
|
|
223
223
|
'entry per column. The values are TYPED here — a Number key column is a number — whereas ' +
|
|
224
224
|
'the record carries the same id as a string under `id`, so comparing the two forms ' +
|
|
225
|
-
'without coercion fails.'
|
|
225
|
+
'without coercion fails. One exception to the per-column promise: against a schema that ' +
|
|
226
|
+
'declares no primary key at all, this carries the agent id whole under the name `id`, ' +
|
|
227
|
+
'never split per column — the schema published no key, so its real shape is unknown and a ' +
|
|
228
|
+
'composite one would stay packed, separator included. That `id` is a real column only when ' +
|
|
229
|
+
'the schema declares a field of that name; otherwise it is not a column at all and the ' +
|
|
230
|
+
'context marks no field as the key. When it does declare one, the context flags it ' +
|
|
231
|
+
'`isPrimaryKeyDerived`, meaning the key is a guess and a filter on it may match nothing. ' +
|
|
232
|
+
'Filter on a field the context lists, never on a key name read back here.',
|
|
226
233
|
});
|
|
227
234
|
exports.ListResponseSchema = zod_openapi_1.z
|
|
228
235
|
.object({
|
|
@@ -232,7 +239,9 @@ exports.ListResponseSchema = zod_openapi_1.z
|
|
|
232
239
|
.openapi('ListResponse', {
|
|
233
240
|
description: 'Records are flat, each carrying a `__forest` envelope. A record always holds `id`, the ' +
|
|
234
241
|
`agent id as a string — a composite key is its values joined by \`${pack_id_1.PACKED_ID_SEPARATOR}\` — ` +
|
|
235
|
-
'while `__forest.primaryKey` holds that same id typed and split per column
|
|
242
|
+
'while `__forest.primaryKey` holds that same id typed and split per column — with the one ' +
|
|
243
|
+
'exception `ForestRecordMeta` describes, where the name it carries is not a column. ' +
|
|
244
|
+
'The list never ' +
|
|
236
245
|
'carries a total: call the count endpoint for that, which is why `countStatus` is always ' +
|
|
237
246
|
'`not_requested`. ' +
|
|
238
247
|
'It is always one page, not guaranteed to be the whole collection: a request that omitted ' +
|
|
@@ -290,6 +299,16 @@ const ContextFieldSchema = zod_openapi_1.z.object({
|
|
|
290
299
|
inverseOf: zod_openapi_1.z.string().optional(),
|
|
291
300
|
polymorphicTargets: zod_openapi_1.z.array(zod_openapi_1.z.string()).optional(),
|
|
292
301
|
isPrimaryKey: zod_openapi_1.z.boolean().optional(),
|
|
302
|
+
isPrimaryKeyDerived: zod_openapi_1.z
|
|
303
|
+
.boolean()
|
|
304
|
+
.optional()
|
|
305
|
+
.openapi({
|
|
306
|
+
description: 'Set only alongside `isPrimaryKey`, when the schema declared no primary key at all and ' +
|
|
307
|
+
'the BFF derived one from a field named `id`. The key is then a GUESS: it is what ' +
|
|
308
|
+
'`__forest.primaryKey` carries, but nothing confirms it is the column the records are ' +
|
|
309
|
+
'really keyed on, so a filter on it can answer 200 with no row. Use it to read record ' +
|
|
310
|
+
'identities, not to filter by identity.',
|
|
311
|
+
}),
|
|
293
312
|
isRequired: zod_openapi_1.z.boolean().optional(),
|
|
294
313
|
isReadOnly: zod_openapi_1.z.boolean().optional(),
|
|
295
314
|
enums: zod_openapi_1.z.array(zod_openapi_1.z.string()).optional(),
|
|
@@ -452,4 +471,4 @@ exports.OpenapiDisabledErrorResponseSchema = zod_openapi_1.z
|
|
|
452
471
|
'the shared envelope: the thrower passes none, so declaring the field would send a client ' +
|
|
453
472
|
'looking for something the runtime never emits.',
|
|
454
473
|
});
|
|
455
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL3NjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0VBQStEO0FBRS9ELCtDQUFrQztBQUNsQyw2Q0FBc0Q7QUFDdEQsNkRBWWlDO0FBQ2pDLGtGQUE4RTtBQUM5RSx5REFBOEQ7QUFDOUQsaUZBQXdFO0FBRXhFLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxpQ0FBWSxDQUEwQixDQUFDO0FBc2hCZiw4QkFBUztBQXBoQnZELE1BQU0sdUJBQXVCLEdBQUcsZUFBQztLQUM5QixZQUFZLENBQUM7SUFDWixLQUFLLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRTtJQUNqQixRQUFRLEVBQUUsZUFBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDM0IsS0FBSyxFQUFFLGVBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDOUIsQ0FBQztLQUNELE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixXQUFXLEVBQ1QsMEZBQTBGO1FBQzFGLHFGQUFxRjtDQUN4RixDQUFDLENBQUM7QUFFTCxNQUFNLG1CQUFtQixHQUFjLGVBQUM7S0FDckMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUNULGVBQUMsQ0FBQyxLQUFLLENBQUM7SUFDTix1QkFBdUI7SUFDdkIsZUFBQyxDQUFDLFlBQVksQ0FBQztRQUNiLFVBQVUsRUFBRSxlQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pDLFVBQVUsRUFBRSxlQUFDLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDO0tBQ3pDLENBQUM7SUFDRixlQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztDQUNuQixDQUFDLENBQ0g7S0FDQSxPQUFPLENBQUMsZUFBZSxFQUFFO0lBQ3hCLFdBQVcsRUFDVCwyRkFBMkY7UUFDM0YsMkRBQTJEO1FBQzNELHVGQUF1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
|
|
474
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL3NjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0VBQStEO0FBRS9ELCtDQUFrQztBQUNsQyw2Q0FBc0Q7QUFDdEQsNkRBWWlDO0FBQ2pDLGtGQUE4RTtBQUM5RSx5REFBOEQ7QUFDOUQsaUZBQXdFO0FBRXhFLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxpQ0FBWSxDQUEwQixDQUFDO0FBMGlCZiw4QkFBUztBQXhpQnZELE1BQU0sdUJBQXVCLEdBQUcsZUFBQztLQUM5QixZQUFZLENBQUM7SUFDWixLQUFLLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRTtJQUNqQixRQUFRLEVBQUUsZUFBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDM0IsS0FBSyxFQUFFLGVBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDOUIsQ0FBQztLQUNELE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixXQUFXLEVBQ1QsMEZBQTBGO1FBQzFGLHFGQUFxRjtDQUN4RixDQUFDLENBQUM7QUFFTCxNQUFNLG1CQUFtQixHQUFjLGVBQUM7S0FDckMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUNULGVBQUMsQ0FBQyxLQUFLLENBQUM7SUFDTix1QkFBdUI7SUFDdkIsZUFBQyxDQUFDLFlBQVksQ0FBQztRQUNiLFVBQVUsRUFBRSxlQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pDLFVBQVUsRUFBRSxlQUFDLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDO0tBQ3pDLENBQUM7SUFDRixlQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztDQUNuQixDQUFDLENBQ0g7S0FDQSxPQUFPLENBQUMsZUFBZSxFQUFFO0lBQ3hCLFdBQVcsRUFDVCwyRkFBMkY7UUFDM0YsMkRBQTJEO1FBQzNELHVGQUF1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
|
|
@@ -13,7 +13,12 @@ async function buildUnfoldedDocument(source, readModel, token, { version, hasAiQ
|
|
|
13
13
|
const unfolding = await (0, collect_unfolding_1.default)({
|
|
14
14
|
readModel,
|
|
15
15
|
store: source.store,
|
|
16
|
-
capabilitiesFetcher: (0, agent_capabilities_fetcher_1.default)({
|
|
16
|
+
capabilitiesFetcher: (0, agent_capabilities_fetcher_1.default)({
|
|
17
|
+
transport: source.transport,
|
|
18
|
+
token,
|
|
19
|
+
store: source.store,
|
|
20
|
+
logger: source.logger,
|
|
21
|
+
}),
|
|
17
22
|
logger: source.logger,
|
|
18
23
|
});
|
|
19
24
|
return {
|
|
@@ -48,4 +53,4 @@ function issueOpenApiAgentToken(authSecret) {
|
|
|
48
53
|
},
|
|
49
54
|
});
|
|
50
55
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5mb2xkZWQtZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFwaS91bmZvbGRlZC1kb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQStCQSx3Q0F3QkM7QUFXRCx3REFpQkM7QUE3RUQsNEVBQW1EO0FBQ25ELHlEQUErRTtBQUMvRSx3REFBeUQ7QUFDekQsMEdBQXNGO0FBc0J2RSxLQUFLLFVBQVUscUJBQXFCLENBQ2pELE1BQW9CLEVBQ3BCLFNBQW9CLEVBQ3BCLEtBQThCLEVBQzlCLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFpQjtJQUVoRSxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEsMkJBQWdCLEVBQUM7UUFDdkMsU0FBUztRQUNULEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixtQkFBbUIsRUFBRSxJQUFBLG9DQUE4QixFQUFDO1lBQ2xELFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztZQUMzQixLQUFLO1lBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtTQUN0QixDQUFDO1FBQ0YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0tBQ3RCLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxRQUFRLEVBQUUsSUFBQSxtQ0FBZ0IsRUFDeEIsSUFBQSwwQ0FBdUIsRUFBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUN0RjtRQUNELFNBQVM7S0FDVixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsVUFBa0I7SUFDdkQsT0FBTyxJQUFBLDZCQUFlLEVBQUM7UUFDckIsVUFBVTtRQUNWLFFBQVEsRUFBRTtZQUNSLFdBQVcsRUFBRSxDQUFDO1lBQ2QsY0FBYyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxFQUFFO2dCQUNKLEVBQUUsRUFBRSxDQUFDO2dCQUNMLEtBQUssRUFBRSxtQ0FBbUM7Z0JBQzFDLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixRQUFRLEVBQUUsS0FBSztnQkFDZixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsZUFBZSxFQUFFLE9BQU87YUFDekI7U0FDRjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
|