@forestadmin/agent-bff 1.23.6 → 1.23.7

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.
Files changed (34) hide show
  1. package/README.md +13 -2
  2. package/dist/action/action-execute-mapper.d.ts +3 -3
  3. package/dist/action/action-form-mapper.d.ts +2 -1
  4. package/dist/action/action-form-mapper.js +12 -8
  5. package/dist/action/action-routes-middleware.js +15 -4
  6. package/dist/action/action-values-validator.d.ts +4 -0
  7. package/dist/action/action-values-validator.js +79 -0
  8. package/dist/action/agent-action-client.d.ts +1 -0
  9. package/dist/action/agent-action-client.js +1 -1
  10. package/dist/agent/create-agent-http-requester.d.ts +3 -0
  11. package/dist/agent/create-agent-http-requester.js +25 -12
  12. package/dist/context/build-context.d.ts +1 -1
  13. package/dist/data/agent-query.d.ts +15 -28
  14. package/dist/data/agent-query.js +66 -35
  15. package/dist/data/data-routes-middleware.js +5 -5
  16. package/dist/data/request-schemas.d.ts +37 -16
  17. package/dist/data/request-schemas.js +24 -18
  18. package/dist/http/agent-error-mapper.d.ts +2 -1
  19. package/dist/http/agent-error-mapper.js +8 -1
  20. package/dist/openapi/collect-unfolding.js +12 -7
  21. package/dist/openapi/field-schemas.d.ts +5 -4
  22. package/dist/openapi/field-schemas.js +24 -22
  23. package/dist/openapi/openapi-document.js +8 -6
  24. package/dist/openapi/schemas.d.ts +44 -15
  25. package/dist/openapi/schemas.js +143 -39
  26. package/dist/openapi/unfolded-paths.js +86 -50
  27. package/dist/openapi/unfolding.d.ts +2 -1
  28. package/dist/read-model/capabilities-cache.d.ts +1 -11
  29. package/dist/read-model/capabilities-cache.js +1 -1
  30. package/dist/read-model/field-type.d.ts +17 -0
  31. package/dist/read-model/field-type.js +42 -0
  32. package/dist/validation/validation-errors.d.ts +6 -0
  33. package/dist/validation/validation-errors.js +14 -1
  34. package/package.json +4 -4
@@ -1,27 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = toFieldSchema;
4
- // Forest primitives, mapped to the closest JSON Schema shape. `Json` maps to no constraint at all,
5
- // which is honest: any JSON value is accepted there.
6
- const PRIMITIVE_SCHEMAS = {
7
- Binary: { type: 'string' },
8
- Boolean: { type: 'boolean' },
9
- Date: { type: 'string', format: 'date-time' },
10
- Dateonly: { type: 'string', format: 'date' },
11
- Enum: { type: 'string' },
12
- File: { type: 'string', description: 'A data URI.' },
13
- Json: {},
14
- Number: { type: 'number' },
15
- Point: { type: 'string' },
16
- String: { type: 'string' },
17
- Time: { type: 'string' },
18
- Timeonly: { type: 'string' },
19
- Uuid: { type: 'string', format: 'uuid' },
20
- };
4
+ const field_type_1 = require("../read-model/field-type");
5
+ const FORMATS = new Map([
6
+ ['Date', 'date-time'],
7
+ ['Dateonly', 'date'],
8
+ ['Uuid', 'uuid'],
9
+ ]);
10
+ const DESCRIPTIONS = new Map([['File', 'A data URI.']]);
21
11
  /**
22
- * Turns a Forest column type into a JSON Schema. Anything unrecognized — a relation marker such as
23
- * `ManyToOne`, or a type a newer agent introduced — maps to an unconstrained schema rather than a
24
- * guess, so the document never rejects a value the runtime accepts.
12
+ * Turns a Forest column type into a JSON Schema, off the shared primitive table in
13
+ * `read-model/field-type`. Anything unrecognized — a relation marker such as `ManyToOne`, or a type
14
+ * a newer agent introduced — maps to an unconstrained schema rather than a guess, so the document
15
+ * never rejects a value the runtime accepts.
25
16
  */
26
17
  function toFieldSchema(type) {
27
18
  if (Array.isArray(type)) {
@@ -38,6 +29,17 @@ function toFieldSchema(type) {
38
29
  properties: Object.fromEntries(named.map(field => [field.field, toFieldSchema(field.type)])),
39
30
  };
40
31
  }
41
- return typeof type === 'string' ? PRIMITIVE_SCHEMAS[type] ?? {} : {};
32
+ if (typeof type !== 'string')
33
+ return {};
34
+ const shape = (0, field_type_1.primitiveShapeOf)(type);
35
+ if (shape === 'any')
36
+ return {};
37
+ const format = FORMATS.get(type);
38
+ const description = DESCRIPTIONS.get(type);
39
+ return {
40
+ type: shape,
41
+ ...(format !== undefined && { format }),
42
+ ...(description !== undefined && { description }),
43
+ };
42
44
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtc2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL2ZpZWxkLXNjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEwQkEsZ0NBc0JDO0FBN0NELG1HQUFtRztBQUNuRyxxREFBcUQ7QUFDckQsTUFBTSxpQkFBaUIsR0FBaUM7SUFDdEQsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUMxQixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQzVCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTtJQUM3QyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7SUFDNUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUN4QixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUU7SUFDcEQsSUFBSSxFQUFFLEVBQUU7SUFDUixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQzFCLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDekIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUMxQixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQ3hCLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDNUIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0NBQ3pDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsU0FBd0IsYUFBYSxDQUFDLElBQWU7SUFDbkQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUVwQixPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqRixDQUFDO0lBRUQsbUdBQW1HO0lBQ25HLG9HQUFvRztJQUNwRyw0RkFBNEY7SUFDNUYsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzVFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUM5QixLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQ3hGLENBQUM7UUFFRixPQUFPO1lBQ0wsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdGLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3ZFLENBQUMifQ==
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtc2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL2ZpZWxkLXNjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsZ0NBbUNDO0FBbkRELHlEQUE0RDtBQUU1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN0QixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7SUFDckIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztDQUNqQixDQUFDLENBQUM7QUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV4RDs7Ozs7R0FLRztBQUNILFNBQXdCLGFBQWEsQ0FBQyxJQUFlO0lBQ25ELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFcEIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakYsQ0FBQztJQUVELG1HQUFtRztJQUNuRyxvR0FBb0c7SUFDcEcsNEZBQTRGO0lBQzVGLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM1RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDOUIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUN4RixDQUFDO1FBRUYsT0FBTztZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3RixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRXhDLE1BQU0sS0FBSyxHQUFHLElBQUEsNkJBQWdCLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFFckMsSUFBSSxLQUFLLEtBQUssS0FBSztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRS9CLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUzQyxPQUFPO1FBQ0wsSUFBSSxFQUFFLEtBQUs7UUFDWCxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7S0FDbEQsQ0FBQztBQUNKLENBQUMifQ==
@@ -51,18 +51,19 @@ const SESSION_SCHEME = 'bffSession';
51
51
  const API_KEY_SCHEME = 'bffApiKey';
52
52
  const SECURITY = [{ [SESSION_SCHEME]: [] }, { [API_KEY_SCHEME]: [] }];
53
53
  const ERROR_STATUSES = {
54
- 400: 'Malformed body, a malformed URL-encoded path segment, an invalid filter operator, a filter nested too deep, ambiguous credentials, an unsupported page, a missing or invalid timezone, an unknown submitted action field, or a rejected action form (type action_error)',
54
+ 400: 'Malformed body, a malformed URL-encoded path segment, an invalid filter operator, a filter nested too deep, ambiguous credentials, an unsupported page, a missing or invalid timezone, an unknown submitted action field, a required action field left empty or a malformed file value at execute, or a rejected action form (type action_error)',
55
55
  401: 'Missing, invalid, or expired credentials',
56
56
  403: 'The action needs approval before it runs (the body carries the approving roles), the Forest identity behind the API key is not allowed, the origin is not allowed for this key, or the agent refused the collection, relation, or action',
57
57
  404: 'Unknown collection, relation, or action',
58
58
  413: `The request body exceeds the BFF limit of ${body_limit_1.default}`,
59
59
  415: 'The request Content-Type is neither application/json nor an application/*+json type, including form-urlencoded, and is rejected with 415 instead of being silently dropped; a request carrying a body with no Content-Type at all is rejected the same way; or the declared character set cannot be decoded',
60
- 422: 'A field is unknown, not filterable, or is a nested relation path',
60
+ 422: 'A field is unknown, not filterable, is a nested relation path, or an action value at execute is outside its enum or of the wrong type',
61
61
  429: 'The agent rate-limited the request',
62
62
  500: 'The agent payload could not be mapped to the BFF contract, or the BFF hit an unexpected error',
63
63
  501: 'The BFF is running without an agent configured, so the proxy is not implemented',
64
- 502: 'The agent could not be reached',
64
+ 502: 'The agent refused the connection, its host could not be resolved, or the transport failed another way (a connection reset mid-flight, a socket hang up, a TLS failure) — it failed outright rather than running out of time',
65
65
  503: 'The agent schema is unavailable, the agent returned a 5xx, or the API key could not be resolved',
66
+ 504: 'The agent did not answer before the BFF timeout (BFF_AGENT_TIMEOUT_MS, 10s by default). The deadline is armed when the request starts, so at the default it also covers a host that accepts nothing and never resets the connection — raise the timeout past the OS connect timeout and that case reverts to 502',
66
67
  };
67
68
  const UNSUPPORTED_RESULT_DESCRIPTION = 'Either the BFF runs without an agent configured, or the action returned a result shape the ' +
68
69
  'BFF cannot normalize. The second case carries no message field.';
@@ -130,6 +131,7 @@ const DATA_ERRORS = [
130
131
  '501',
131
132
  '502',
132
133
  '503',
134
+ '504',
133
135
  ];
134
136
  const AI_RELAYED_OR_ENVELOPE = 'Below 500 the BFF relays whatever JSON the Forest AI proxy answered, unchanged, so the authority ' +
135
137
  'on this body is the upstream contract and not the BFF one. When the upstream answer carried no ' +
@@ -222,7 +224,7 @@ const ROUTES = [
222
224
  operationId: 'getActionForm',
223
225
  summary: 'Load the form of a custom action',
224
226
  request: schemas_1.ActionRequestSchema,
225
- response: zod_openapi_1.z.unknown(),
227
+ response: schemas_1.ActionFormResponseSchema,
226
228
  responseDescription: 'The action form fields; htmlBlock layout content is sanitized server-side against an allowlist before relaying',
227
229
  params: ['collection', 'action'],
228
230
  bodyRequired: true,
@@ -232,7 +234,7 @@ const ROUTES = [
232
234
  operationId: 'executeAction',
233
235
  summary: 'Execute a custom action',
234
236
  request: schemas_1.ActionRequestSchema,
235
- response: zod_openapi_1.z.unknown(),
237
+ response: schemas_1.ActionResultSchema,
236
238
  responseDescription: 'The normalized action result; a success result html field is sanitized server-side against an allowlist before relaying',
237
239
  params: ['collection', 'action'],
238
240
  bodyRequired: true,
@@ -405,4 +407,4 @@ function generateOpenApiDocument(version, { unfolding, hasAiQueryRoute = false }
405
407
  function serializeOpenApi(document) {
406
408
  return JSON.stringify(document, null, 2);
407
409
  }
408
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS1kb2N1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL29wZW5hcGktZG9jdW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNFhBLDBEQStHQztBQUVELDRDQUVDO0FBNWVELG1FQUFzRjtBQUV0RixzRUFBNkM7QUFDN0MsdUNBWW1CO0FBQ25CLHNFQUFxRDtBQUNyRCwrQ0FBa0M7QUFDbEMsaUVBQStEO0FBRWxELFFBQUEsZUFBZSxHQUFHLE9BQU8sQ0FBQztBQUMxQixRQUFBLFlBQVksR0FBRyxXQUFXLENBQUM7QUFFeEMsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDO0FBQ3BDLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQztBQUVuQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUV0RSxNQUFNLGNBQWMsR0FBMkI7SUFDN0MsR0FBRyxFQUFFLHlRQUF5UTtJQUM5USxHQUFHLEVBQUUsMENBQTBDO0lBQy9DLEdBQUcsRUFBRSwwT0FBME87SUFDL08sR0FBRyxFQUFFLHlDQUF5QztJQUM5QyxHQUFHLEVBQUUsNkNBQTZDLG9CQUFVLEVBQUU7SUFDOUQsR0FBRyxFQUFFLDZTQUE2UztJQUNsVCxHQUFHLEVBQUUsa0VBQWtFO0lBQ3ZFLEdBQUcsRUFBRSxvQ0FBb0M7SUFDekMsR0FBRyxFQUFFLCtGQUErRjtJQUNwRyxHQUFHLEVBQUUsaUZBQWlGO0lBQ3RGLEdBQUcsRUFBRSxnQ0FBZ0M7SUFDckMsR0FBRyxFQUFFLGlHQUFpRztDQUN2RyxDQUFDO0FBRUYsTUFBTSw4QkFBOEIsR0FDbEMsNkZBQTZGO0lBQzdGLGlFQUFpRSxDQUFDO0FBRXBFLE1BQU0sa0JBQWtCLEdBQUcs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
410
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS1kb2N1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL29wZW5hcGktZG9jdW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ1lBLDBEQStHQztBQUVELDRDQUVDO0FBaGZELG1FQUFzRjtBQUV0RixzRUFBNkM7QUFDN0MsdUNBY21CO0FBQ25CLHNFQUFxRDtBQUNyRCwrQ0FBa0M7QUFDbEMsaUVBQStEO0FBRWxELFFBQUEsZUFBZSxHQUFHLE9BQU8sQ0FBQztBQUMxQixRQUFBLFlBQVksR0FBRyxXQUFXLENBQUM7QUFFeEMsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDO0FBQ3BDLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQztBQUVuQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUV0RSxNQUFNLGNBQWMsR0FBMkI7SUFDN0MsR0FBRyxFQUFFLGtWQUFrVjtJQUN2VixHQUFHLEVBQUUsMENBQTBDO0lBQy9DLEdBQUcsRUFBRSwwT0FBME87SUFDL08sR0FBRyxFQUFFLHlDQUF5QztJQUM5QyxHQUFHLEVBQUUsNkNBQTZDLG9CQUFVLEVBQUU7SUFDOUQsR0FBRyxFQUFFLDZTQUE2UztJQUNsVCxHQUFHLEVBQUUsdUlBQXVJO0lBQzVJLEdBQUcsRUFBRSxvQ0FBb0M7SUFDekMsR0FBRyxFQUFFLCtGQUErRjtJQUNwRyxHQUFHLEVBQUUsaUZBQWlGO0lBQ3RGLEdBQUcsRUFBRSw2TkFBNk47SUFDbE8sR0FBRyxFQUFFLGlHQUFpRztJQUN0RyxHQUFHLEVBQUUsa1RBQWtUO0NBQ3hULENBQUM7QUFFRixNQUFNLDhCQUE4QixHQUNsQyw2RkFBNkY7SUFDN0YsaUVBQWlFLENBQUM7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
@@ -7,16 +7,17 @@ export declare const SortClauseSchema: z.ZodObject<{
7
7
  asc: "asc";
8
8
  desc: "desc";
9
9
  }>>;
10
- }, z.core.$strip>;
10
+ }, z.core.$strict>;
11
11
  export declare const PageSchema: z.ZodObject<{
12
12
  limit: z.ZodNumber;
13
13
  offset: z.ZodNumber;
14
- }, z.core.$strip>;
14
+ }, z.core.$strict>;
15
15
  export declare const TimezoneSchema: z.ZodString;
16
16
  export declare const SearchSchema: z.ZodString;
17
17
  export declare const SearchExtendedSchema: z.ZodBoolean;
18
+ declare const ParentIdSchema: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
19
+ export declare const CLOSED_BODY_NOTE: string;
18
20
  export declare const ListRequestSchema: z.ZodObject<{
19
- filter: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
20
21
  projection: z.ZodOptional<z.ZodArray<z.ZodString>>;
21
22
  sort: z.ZodOptional<z.ZodArray<z.ZodObject<{
22
23
  field: z.ZodString;
@@ -24,53 +25,81 @@ export declare const ListRequestSchema: z.ZodObject<{
24
25
  asc: "asc";
25
26
  desc: "desc";
26
27
  }>>;
27
- }, z.core.$strip>>>;
28
+ }, z.core.$strict>>>;
28
29
  page: z.ZodOptional<z.ZodObject<{
29
30
  limit: z.ZodNumber;
30
31
  offset: z.ZodNumber;
31
- }, z.core.$strip>>;
32
+ }, z.core.$strict>>;
33
+ filter: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
32
34
  search: z.ZodOptional<z.ZodString>;
33
35
  searchExtended: z.ZodOptional<z.ZodBoolean>;
34
36
  timezone: z.ZodOptional<z.ZodString>;
35
- }, z.core.$strip>;
37
+ }, z.core.$strict>;
36
38
  export declare const CountRequestSchema: z.ZodObject<{
37
39
  filter: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
38
40
  search: z.ZodOptional<z.ZodString>;
39
41
  searchExtended: z.ZodOptional<z.ZodBoolean>;
40
42
  timezone: z.ZodOptional<z.ZodString>;
41
- }, z.core.$strip>;
42
- declare const ParentIdSchema: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
43
+ }, z.core.$strict>;
43
44
  export declare const RelationListRequestSchema: z.ZodObject<{
44
- filter: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
45
45
  projection: z.ZodOptional<z.ZodArray<z.ZodString>>;
46
+ parentId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
46
47
  sort: z.ZodOptional<z.ZodArray<z.ZodObject<{
47
48
  field: z.ZodString;
48
49
  direction: z.ZodOptional<z.ZodEnum<{
49
50
  asc: "asc";
50
51
  desc: "desc";
51
52
  }>>;
52
- }, z.core.$strip>>>;
53
+ }, z.core.$strict>>>;
53
54
  page: z.ZodOptional<z.ZodObject<{
54
55
  limit: z.ZodNumber;
55
56
  offset: z.ZodNumber;
56
- }, z.core.$strip>>;
57
+ }, z.core.$strict>>;
58
+ filter: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
57
59
  search: z.ZodOptional<z.ZodString>;
58
60
  searchExtended: z.ZodOptional<z.ZodBoolean>;
59
61
  timezone: z.ZodOptional<z.ZodString>;
60
- parentId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
61
- }, z.core.$strip>;
62
+ }, z.core.$strict>;
62
63
  export declare const RelationCountRequestSchema: z.ZodObject<{
64
+ parentId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
63
65
  filter: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
64
66
  search: z.ZodOptional<z.ZodString>;
65
67
  searchExtended: z.ZodOptional<z.ZodBoolean>;
66
68
  timezone: z.ZodOptional<z.ZodString>;
67
- parentId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
68
- }, z.core.$strip>;
69
+ }, z.core.$strict>;
69
70
  export declare const ActionRequestSchema: z.ZodObject<{
70
71
  recordIds: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
71
72
  values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
72
73
  timezone: z.ZodOptional<z.ZodString>;
74
+ }, z.core.$strict>;
75
+ export declare const ActionFormResponseSchema: z.ZodObject<{
76
+ fields: z.ZodArray<z.ZodObject<{
77
+ name: z.ZodString;
78
+ type: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
79
+ value: z.ZodOptional<z.ZodUnknown>;
80
+ isRequired: z.ZodBoolean;
81
+ enumValues: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodNull]>>;
82
+ }, z.core.$strip>>;
83
+ canExecute: z.ZodBoolean;
84
+ requiredFields: z.ZodArray<z.ZodString>;
85
+ skippedFields: z.ZodArray<z.ZodString>;
86
+ layout: z.ZodArray<z.ZodUnknown>;
73
87
  }, z.core.$strip>;
88
+ export declare const ActionResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
89
+ type: z.ZodLiteral<"success">;
90
+ message: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
91
+ invalidated: z.ZodArray<z.ZodString>;
92
+ html: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
93
+ }, z.core.$strip>, z.ZodObject<{
94
+ type: z.ZodLiteral<"webhook">;
95
+ url: z.ZodString;
96
+ method: z.ZodString;
97
+ headers: z.ZodOptional<z.ZodUnknown>;
98
+ body: z.ZodOptional<z.ZodUnknown>;
99
+ }, z.core.$strip>, z.ZodObject<{
100
+ type: z.ZodLiteral<"redirect">;
101
+ path: z.ZodString;
102
+ }, z.core.$strip>], "type">;
74
103
  export declare const ListResponseSchema: z.ZodObject<{
75
104
  data: z.ZodArray<z.ZodIntersection<z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodObject<{
76
105
  __forest: z.ZodObject<{
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OPERATORS = exports.ParentIdSchema = exports.ConditionTreeSchema = exports.MessagelessErrorResponseSchema = exports.ErrorResponseSchema = exports.AiQueryRequestSchema = exports.ContextResponseSchema = exports.CountResponseSchema = exports.ListResponseSchema = exports.ActionRequestSchema = exports.RelationCountRequestSchema = exports.RelationListRequestSchema = exports.CountRequestSchema = exports.ListRequestSchema = exports.SearchExtendedSchema = exports.SearchSchema = exports.TimezoneSchema = exports.PageSchema = exports.SortClauseSchema = void 0;
3
+ exports.OPERATORS = exports.ParentIdSchema = exports.ConditionTreeSchema = exports.MessagelessErrorResponseSchema = exports.ErrorResponseSchema = exports.AiQueryRequestSchema = exports.ContextResponseSchema = exports.CountResponseSchema = exports.ListResponseSchema = exports.ActionResultSchema = exports.ActionFormResponseSchema = exports.ActionRequestSchema = exports.RelationCountRequestSchema = exports.RelationListRequestSchema = exports.CountRequestSchema = exports.ListRequestSchema = exports.CLOSED_BODY_NOTE = exports.SearchExtendedSchema = exports.SearchSchema = exports.TimezoneSchema = exports.PageSchema = exports.SortClauseSchema = void 0;
4
4
  const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
5
5
  const zod_openapi_1 = require("./zod-openapi");
6
6
  const request_schemas_1 = require("../data/request-schemas");
@@ -9,7 +9,7 @@ const capabilities_validator_1 = require("../validation/capabilities-validator")
9
9
  const OPERATORS = [...datasource_toolkit_1.allOperators];
10
10
  exports.OPERATORS = OPERATORS;
11
11
  const ConditionTreeLeafSchema = zod_openapi_1.z
12
- .object({
12
+ .strictObject({
13
13
  field: zod_openapi_1.z.string(),
14
14
  operator: zod_openapi_1.z.enum(OPERATORS),
15
15
  value: zod_openapi_1.z.unknown().optional(),
@@ -21,13 +21,15 @@ const ConditionTreeLeafSchema = zod_openapi_1.z
21
21
  const ConditionTreeSchema = zod_openapi_1.z
22
22
  .lazy(() => zod_openapi_1.z.union([
23
23
  ConditionTreeLeafSchema,
24
- zod_openapi_1.z.object({
24
+ zod_openapi_1.z.strictObject({
25
25
  aggregator: zod_openapi_1.z.enum(['And', 'Or']),
26
26
  conditions: zod_openapi_1.z.array(ConditionTreeSchema),
27
27
  }),
28
+ zod_openapi_1.z.strictObject({}),
28
29
  ]))
29
30
  .openapi('ConditionTree', {
30
- description: 'Either a leaf condition or a branch nesting more conditions. A branch must carry its ' +
31
+ description: 'Either a leaf condition, a branch nesting more conditions, or the empty object, which is ' +
32
+ 'how an absent filter is spelled. A branch must carry its ' +
31
33
  '`aggregator`: the BFF forwards a branch without one, but the agent then parses it as ' +
32
34
  'neither leaf nor branch and answers 400. On top-level list and count, nesting deeper ' +
33
35
  `than ${capabilities_validator_1.MAX_FILTER_DEPTH} levels is rejected and each field is checked against the ` +
@@ -47,9 +49,12 @@ exports.PageSchema = request_schemas_1.PageInput.openapi('Page', {
47
49
  '`page` and walk it to read a collection in full.',
48
50
  });
49
51
  exports.TimezoneSchema = request_schemas_1.TimezoneInput.openapi('Timezone', {
50
- description: 'Used when the X-Forest-Timezone header is absent. The header wins when both are sent. A ' +
51
- 'deployment with no configured default rejects a request carrying neither with 400 ' +
52
- 'missing_timezone.',
52
+ description: 'Used when the X-Forest-Timezone header is absent. The header wins when both are sent, but ' +
53
+ 'the key is still validated: on a list or count body a blank or whitespace-only string is ' +
54
+ 'rejected with 400 even when the header carries a usable zone. An action body is read ' +
55
+ 'without that validation, so a blank one there falls back to the header or the default ' +
56
+ 'instead. A deployment with no configured default rejects a request carrying neither with ' +
57
+ '400 missing_timezone.',
53
58
  });
54
59
  exports.SearchSchema = request_schemas_1.SearchInput.openapi('Search', {
55
60
  description: "The agent's native full-text search, applied on top of `filter` rather than instead of it. " +
@@ -69,51 +74,141 @@ exports.SearchExtendedSchema = request_schemas_1.SearchExtendedInput.openapi('Se
69
74
  'changes nothing. It is not the only way a search reaches a relation — see `Search` for the ' +
70
75
  '`relation.column:value` syntax, which does so without this flag.',
71
76
  });
72
- exports.ListRequestSchema = zod_openapi_1.z
73
- .object({
74
- filter: ConditionTreeSchema.optional(),
75
- projection: request_schemas_1.ProjectionInput.optional(),
76
- sort: zod_openapi_1.z.array(exports.SortClauseSchema).optional(),
77
- page: exports.PageSchema.optional(),
78
- search: exports.SearchSchema.optional(),
79
- searchExtended: exports.SearchExtendedSchema.optional(),
80
- timezone: exports.TimezoneSchema.optional(),
81
- })
82
- .openapi('ListRequest');
83
- exports.CountRequestSchema = zod_openapi_1.z
84
- .object({
77
+ const ParentIdSchema = request_schemas_1.ParentIdInput.openapi('ParentId', {
78
+ description: 'The parent record id, opaque: a composite or packed id must be passed unchanged. A ' +
79
+ 'blank string is rejected.',
80
+ });
81
+ exports.ParentIdSchema = ParentIdSchema;
82
+ exports.CLOSED_BODY_NOTE = 'The runtime rejects an undeclared key with 400 invalid_request, at the top level and inside ' +
83
+ 'the filter tree alike: `filters` instead of `filter` is an error rather than a silently ' +
84
+ 'unfiltered result, and a leaf carrying `valu` instead of `value` is rejected rather than run ' +
85
+ 'with its value dropped.';
86
+ const countOverrides = {
85
87
  filter: ConditionTreeSchema.optional(),
86
88
  search: exports.SearchSchema.optional(),
87
89
  searchExtended: exports.SearchExtendedSchema.optional(),
88
90
  timezone: exports.TimezoneSchema.optional(),
89
- })
90
- .openapi('CountRequest', {
91
- description: 'Accepts the same search inputs as list, so a client can count exactly the rows its search ' +
92
- 'returns.',
91
+ };
92
+ const listOverrides = {
93
+ ...countOverrides,
94
+ sort: zod_openapi_1.z.array(exports.SortClauseSchema).optional(),
95
+ page: exports.PageSchema.optional(),
96
+ };
97
+ exports.ListRequestSchema = request_schemas_1.ListFlatInputs.extend(listOverrides).openapi('ListRequest', {
98
+ description: exports.CLOSED_BODY_NOTE,
93
99
  });
94
- const ParentIdSchema = request_schemas_1.ParentIdInput.openapi('ParentId', {
95
- description: 'The parent record id, opaque: a composite or packed id must be passed unchanged. A ' +
96
- 'blank string is rejected.',
100
+ exports.CountRequestSchema = request_schemas_1.CountFlatInputs.extend(countOverrides).openapi('CountRequest', {
101
+ description: 'Accepts the same search inputs as list, so a client can count exactly the rows its search ' +
102
+ `returns. ${exports.CLOSED_BODY_NOTE}`,
97
103
  });
98
- exports.ParentIdSchema = ParentIdSchema;
99
- exports.RelationListRequestSchema = exports.ListRequestSchema.extend({
104
+ const relationListOverrides = {
105
+ ...listOverrides,
100
106
  parentId: ParentIdSchema,
101
- }).openapi('RelationListRequest', {
102
- description: 'Filter, sort, projection and search apply to the FOREIGN collection; the parent only resolves ' +
103
- 'which records are related.',
104
- });
105
- exports.RelationCountRequestSchema = exports.CountRequestSchema.extend({
107
+ };
108
+ const relationCountOverrides = {
109
+ ...countOverrides,
106
110
  parentId: ParentIdSchema,
107
- }).openapi('RelationCountRequest');
111
+ };
112
+ exports.RelationListRequestSchema = request_schemas_1.RelationListFlatInputs.extend(relationListOverrides).openapi('RelationListRequest', {
113
+ description: 'Filter, sort, projection and search apply to the FOREIGN collection; the parent only ' +
114
+ `resolves which records are related. ${exports.CLOSED_BODY_NOTE}`,
115
+ });
116
+ exports.RelationCountRequestSchema = request_schemas_1.RelationCountFlatInputs.extend(relationCountOverrides).openapi('RelationCountRequest', { description: exports.CLOSED_BODY_NOTE });
108
117
  exports.ActionRequestSchema = zod_openapi_1.z
109
- .object({
118
+ .strictObject({
110
119
  recordIds: zod_openapi_1.z.array(zod_openapi_1.z.union([zod_openapi_1.z.string(), zod_openapi_1.z.number()])),
111
120
  values: zod_openapi_1.z.record(zod_openapi_1.z.string(), zod_openapi_1.z.unknown()).optional(),
112
121
  timezone: exports.TimezoneSchema.optional(),
113
122
  })
114
123
  .openapi('ActionRequest', {
115
124
  description: '`recordIds` is required, even on a global action: send an empty array when the action ' +
116
- 'targets no record. Every id is coerced to a string before reaching the agent.',
125
+ 'targets no record. Every id is coerced to a string before reaching the agent. On execute ' +
126
+ 'the submitted values are validated against the live form: a required field left empty ' +
127
+ 'answers 400, an out-of-enum or wrongly typed value 422. Only the JSON type and an Enum ' +
128
+ "field's options are checked there: a declared string format (date-time, uuid) and a " +
129
+ "widget's own option list are not.",
130
+ });
131
+ const UNTRUSTED_HTML_NOTE = 'sanitize it before rendering (stored/reflected XSS risk)';
132
+ const ActionFormResponseFieldSchema = zod_openapi_1.z
133
+ .object({
134
+ name: zod_openapi_1.z.string(),
135
+ type: zod_openapi_1.z.union([zod_openapi_1.z.string(), zod_openapi_1.z.array(zod_openapi_1.z.string()).min(1).max(1)]),
136
+ value: zod_openapi_1.z.unknown().optional(),
137
+ isRequired: zod_openapi_1.z.boolean(),
138
+ enumValues: zod_openapi_1.z.union([zod_openapi_1.z.array(zod_openapi_1.z.string()), zod_openapi_1.z.null()]).optional(),
139
+ })
140
+ .openapi('ActionFormResponseField', {
141
+ description: 'A form field with its current value. `value` is the resolved value at load time: absent ' +
142
+ 'when the field carries none (the resolved value was undefined), an explicit null is ' +
143
+ 'serialized as null. `enumValues` is present only on an Enum field, and null when the ' +
144
+ 'agent declares no options.',
145
+ });
146
+ exports.ActionFormResponseSchema = zod_openapi_1.z
147
+ .object({
148
+ fields: zod_openapi_1.z.array(ActionFormResponseFieldSchema),
149
+ canExecute: zod_openapi_1.z.boolean(),
150
+ requiredFields: zod_openapi_1.z.array(zod_openapi_1.z.string()),
151
+ skippedFields: zod_openapi_1.z.array(zod_openapi_1.z.string()),
152
+ layout: zod_openapi_1.z.array(zod_openapi_1.z.unknown()),
153
+ })
154
+ .openapi('ActionFormResponse', {
155
+ description: 'The loaded form. `canExecute` is true only when every required field already carries a ' +
156
+ 'value: a null or absent value counts as missing, an explicit empty string or 0 as ' +
157
+ 'present. ' +
158
+ '`requiredFields` names the required fields still missing a value. `skippedFields` names ' +
159
+ 'the submitted fields the static form does not carry; the same names are rejected with 400 ' +
160
+ 'on execute. `layout` is the agent layout tree relayed verbatim (pages, rows, separators, ' +
161
+ 'HTML blocks and field references, discriminated by `component`); it is the agent own ' +
162
+ 'contract, so it is left untyped here.',
163
+ });
164
+ const ActionResultSuccessSchema = zod_openapi_1.z
165
+ .object({
166
+ type: zod_openapi_1.z.literal('success'),
167
+ message: zod_openapi_1.z.union([zod_openapi_1.z.string(), zod_openapi_1.z.null()]),
168
+ invalidated: zod_openapi_1.z.array(zod_openapi_1.z.string()),
169
+ html: zod_openapi_1.z
170
+ .union([zod_openapi_1.z.string(), zod_openapi_1.z.null()])
171
+ .describe(`Untrusted HTML relayed verbatim from the agent result: ${UNTRUSTED_HTML_NOTE}. Null ` +
172
+ 'when the result carries none.'),
173
+ })
174
+ .openapi('ActionResultSuccess', {
175
+ description: 'The action ran. `invalidated` names the relations of the acted-on collection whose ' +
176
+ 'Related Data should be re-fetched — the agent fills it from ' +
177
+ '`resultBuilder.success(message, { invalidated })` and the BFF relays it from the agent ' +
178
+ '`refresh.relationships`. `message` is the agent wording: an agent-nodejs success with ' +
179
+ 'no message serializes the empty string, so null means the agent omitted `success` ' +
180
+ 'entirely.',
181
+ });
182
+ const ActionResultWebhookSchema = zod_openapi_1.z
183
+ .object({
184
+ type: zod_openapi_1.z.literal('webhook'),
185
+ url: zod_openapi_1.z.string(),
186
+ method: zod_openapi_1.z.string(),
187
+ headers: zod_openapi_1.z.unknown().optional(),
188
+ body: zod_openapi_1.z.unknown().optional(),
189
+ })
190
+ .openapi('ActionResultWebhook', {
191
+ description: 'The action asks the caller to fire an HTTP request. `headers` and `body` are relayed ' +
192
+ 'from the agent payload: absent when it omitted them, an explicit null relayed as null.',
193
+ });
194
+ const ActionResultRedirectSchema = zod_openapi_1.z
195
+ .object({
196
+ type: zod_openapi_1.z.literal('redirect'),
197
+ path: zod_openapi_1.z.string(),
198
+ })
199
+ .openapi('ActionResultRedirect', {
200
+ description: 'The action asks the caller to navigate to `path`, relayed verbatim.',
201
+ });
202
+ exports.ActionResultSchema = zod_openapi_1.z
203
+ .discriminatedUnion('type', [
204
+ ActionResultSuccessSchema,
205
+ ActionResultWebhookSchema,
206
+ ActionResultRedirectSchema,
207
+ ])
208
+ .openapi('ActionResult', {
209
+ description: 'The normalized execute result, discriminated by `type`. These three are the only 200 ' +
210
+ 'bodies: a result the BFF cannot normalize answers 501 instead (see the execute 501 ' +
211
+ 'response), and a form the agent rejects answers 400 action_error.',
117
212
  });
118
213
  const ForestRecordMetaSchema = zod_openapi_1.z
119
214
  .object({
@@ -253,7 +348,16 @@ exports.ErrorResponseSchema = zod_openapi_1.z
253
348
  details: zod_openapi_1.z.unknown().optional(),
254
349
  }),
255
350
  })
256
- .openapi('ErrorResponse');
351
+ .openapi('ErrorResponse', {
352
+ description: 'The error envelope. `details` is left untyped because its shape depends on `type`: ' +
353
+ '`{ field }` on unknown_field and field_not_filterable, `{ field, validOperators }` on ' +
354
+ 'invalid_filter_operator, `{ maxDepth }` on filter_too_deep, `{ fields }` on ' +
355
+ 'relation_field_not_supported, and, when the agent supplies them, ' +
356
+ '`{ roleIdsAllowedToApprove }` on action_requires_approval and `{ html }` on action_error. ' +
357
+ 'An error forwarded from the agent carries the agent own payload instead, and any other ' +
358
+ 'type carries no `details` at all. The action_error html is untrusted agent output relayed ' +
359
+ `verbatim: ${UNTRUSTED_HTML_NOTE}, exactly like the execute success html.`,
360
+ });
257
361
  exports.MessagelessErrorResponseSchema = zod_openapi_1.z
258
362
  .object({
259
363
  error: zod_openapi_1.z.object({
@@ -265,4 +369,4 @@ exports.MessagelessErrorResponseSchema = zod_openapi_1.z
265
369
  .openapi('MessagelessErrorResponse', {
266
370
  description: 'The unsupported-action-result body, which carries no message field unlike every other error.',
267
371
  });
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL3NjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0VBQStEO0FBRS9ELCtDQUFrQztBQUNsQyw2REFRaUM7QUFDakMseURBQThEO0FBQzlELGlGQUF3RTtBQUV4RSxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsaUNBQVksQ0FBMEIsQ0FBQztBQXVUZiw4QkFBUztBQXJUdkQsTUFBTSx1QkFBdUIsR0FBRyxlQUFDO0tBQzlCLE1BQU0sQ0FBQztJQUNOLEtBQUssRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2pCLFFBQVEsRUFBRSxlQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMzQixLQUFLLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUM5QixDQUFDO0tBQ0QsT0FBTyxDQUFDLG1CQUFtQixFQUFFO0lBQzVCLFdBQVcsRUFDVCwwRkFBMEY7UUFDMUYscUZBQXFGO0NBQ3hGLENBQUMsQ0FBQztBQUVMLE1BQU0sbUJBQW1CLEdBQWMsZUFBQztLQUNyQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQ1QsZUFBQyxDQUFDLEtBQUssQ0FBQztJQUNOLHVCQUF1QjtJQUN2QixlQUFDLENBQUMsTUFBTSxDQUFDO1FBQ1AsVUFBVSxFQUFFLGVBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsVUFBVSxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUM7S0FDekMsQ0FBQztDQUNILENBQUMsQ0FDSDtLQUNBLE9BQU8sQ0FBQyxlQUFlLEVBQUU7SUFDeEIsV0FBVyxFQUNULHVGQUF1RjtRQUN2Rix1RkFBdUY7UUFDdkYsdUZBQXVGO1FBQ3ZGLFFBQVEseUNBQWdCLDREQUE0RDtRQUNwRiwyRkFBMkY7Q0FDOUYsQ0FBQyxDQUFDO0FBd1JJLGtE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
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL3NjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0VBQStEO0FBRS9ELCtDQUFrQztBQUNsQyw2REFXaUM7QUFDakMseURBQThEO0FBQzlELGlGQUF3RTtBQUV4RSxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsaUNBQVksQ0FBMEIsQ0FBQztBQTBiZiw4QkFBUztBQXhidkQsTUFBTSx1QkFBdUIsR0FBRyxlQUFDO0tBQzlCLFlBQVksQ0FBQztJQUNaLEtBQUssRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2pCLFFBQVEsRUFBRSxlQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMzQixLQUFLLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUM5QixDQUFDO0tBQ0QsT0FBTyxDQUFDLG1CQUFtQixFQUFFO0lBQzVCLFdBQVcsRUFDVCwwRkFBMEY7UUFDMUYscUZBQXFGO0NBQ3hGLENBQUMsQ0FBQztBQUVMLE1BQU0sbUJBQW1CLEdBQWMsZUFBQztLQUNyQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQ1QsZUFBQyxDQUFDLEtBQUssQ0FBQztJQUNOLHVCQUF1QjtJQUN2QixlQUFDLENBQUMsWUFBWSxDQUFDO1FBQ2IsVUFBVSxFQUFFLGVBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsVUFBVSxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUM7S0FDekMsQ0FBQztJQUNGLGVBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO0NBQ25CLENBQUMsQ0FDSDtLQUNBLE9BQU8sQ0FBQyxlQUFlLEVBQUU7SUFDeEIsV0FBVyxFQUNULDJGQUEyRjtRQUMzRiwyREFBMkQ7UUFDM0QsdUZBQXVGO1FBQ3ZGLHVGQUF1RjtRQUN2RixRQUFRLHlDQUFnQiw0REFBNEQ7UUFDcEYsMkZBQTJGO0NBQzlGLENBQUMsQ0FBQztBQXlaSSxrREFBbUI7QUF2WmYsUUFBQSxnQkFBZ0IsR0FBRyxpQ0FBZSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7SUFDcEUsV0FBVyxFQUFFLHVDQUF1QztDQUNyRCxDQUFDLENBQUM7QUFFVSxRQUFBLFVBQVUsR0FBRywyQkFBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7SUFDbEQsV0FBVyxFQUNULHVGQUF1RjtRQUN2Rix1RkFBdUY7UUFDdkYsc0ZBQXNGO1FBQ3RGLGtGQUFrRjtRQUNsRix1RkFBdUY7UUFDdkYscUZBQXFGO1FBQ3JGLGtEQUFrRDtDQUNyRCxDQUFDLENBQUM7QUFFVSxRQUFBLGNBQWMsR0FBRywrQkFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7SUFDOUQsV0FBVyxFQUNULDRGQUE0RjtRQUM1RiwyRkFBMkY7UUFDM0YsdUZBQXVGO1FBQ3ZGLHdGQUF3RjtRQUN4RiwyRkFBMkY7UUFDM0YsdUJBQXVCO0NBQzFCLENBQUMsQ0FBQztBQUVVLFFBQUEsWUFBWSxHQUFHLDZCQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtJQUN4RCxXQUFXLEVBQ1QsNkZBQTZGO1FBQzdGLDZGQUE2RjtRQUM3Rix5RkFBeUY7UUFDekYsOEZBQThGO1FBQzlGLDBGQUEwRjtRQUMxRix3RkFBd0Y7UUFDeEYsNkZBQTZGO1FBQzdGLCtGQUErRjtRQUMvRiw0RkFBNEY7UUFDNUYsd0VBQXdFO0NBQzNFLENBQUMsQ0FBQztBQUVVLFFBQUEsb0JBQW9CLEdBQUcscUNBQW1CLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO0lBQ2hGLFdBQVcsRUFDVCw0RkFBNEY7UUFDNUYsNEZBQTRGO1FBQzVGLDZGQUE2RjtRQUM3RixrRUFBa0U7Q0FDckUsQ0FBQyxDQUFDO0FBRUgsTUFBTSxjQUFjLEdBQUcsK0JBQWEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO0lBQ3ZELFdBQVcsRUFDVCxxRkFBcUY7UUFDckYsMkJBQTJCO0NBQzlCLENBQUMsQ0FBQztBQW9XMkIsd0NBQWM7QUFsVy9CLFFBQUEsZ0JBQWdCLEdBQzNCLDhGQUE4RjtJQUM5RiwwRkFBMEY7SUFDMUYsK0ZBQStGO0lBQy9GLHlCQUF5QixDQUFDO0FBSTVCLE1BQU0sY0FBYyxHQUFHO0lBQ3JCLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLEVBQUU7SUFDdEMsTUFBTSxFQUFFLG9CQUFZLENBQUMsUUFBUSxFQUFFO0lBQy9CLGNBQWMsRUFBRSw0QkFBb0IsQ0FBQyxRQUFRLEVBQUU7SUFDL0MsUUFBUSxFQUFFLHNCQUFjLENBQUMsUUFBUSxFQUFFO0NBQ1UsQ0FBQztBQUVoRCxNQUFNLGFBQWEsR0FBRztJQUNwQixHQUFHLGNBQWM7SUFDakIsSUFBSSxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQUMsd0JBQWdCLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDMUMsSUFBSSxFQUFFLGtCQUFVLENBQUMsUUFBUSxFQUFFO0NBQ2lCLENBQUM7QUFFbEMsUUFBQSxpQkFBaUIsR0FBRyxnQ0FBYyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO0lBQzNGLFdBQVcsRUFBRSx3QkFBZ0I7Q0FDOUIsQ0FBQyxDQUFDO0FBRVUsUUFBQSxrQkFBa0IsR0FBRyxpQ0FBZSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO0lBQy9GLFdBQVcsRUFDVCw0RkFBNEY7UUFDNUYsWUFBWSx3QkFBZ0IsRUFBRTtDQUNqQyxDQUFDLENBQUM7QUFFSCxNQUFNLHFCQUFxQixHQUFHO0lBQzVCLEdBQUcsYUFBYTtJQUNoQixRQUFRLEVBQUUsY0FBYztDQUM0QixDQUFDO0FBRXZELE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsR0FBRyxjQUFjO0lBQ2pCLFFBQVEsRUFBRSxjQUFjO0NBQzZCLENBQUM7QUFFM0MsUUFBQSx5QkFBeUIsR0FBRyx3Q0FBc0IsQ0FBQyxNQUFNLENBQ3BFLHFCQUFxQixDQUN0QixDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRTtJQUMvQixXQUFXLEVBQ1QsdUZBQXVGO1FBQ3ZGLHVDQUF1Qyx3QkFBZ0IsRUFBRTtDQUM1RCxDQUFDLENBQUM7QUFFVSxRQUFBLDBCQUEwQixHQUFHLHlDQUF1QixDQUFDLE1BQU0sQ0FDdEUsc0JBQXNCLENBQ3ZCLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsV0FBVyxFQUFFLHdCQUFnQixFQUFFLENBQUMsQ0FBQztBQUV4RCxRQUFBLG1CQUFtQixHQUFHLGVBQUM7S0FDakMsWUFBWSxDQUFDO0lBQ1osU0FBUyxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQUMsZUFBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGVBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sRUFBRSxlQUFDLENBQUMsTUFBTSxDQUFDLGVBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxlQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDcEQsUUFBUSxFQUFFLHNCQUFjLENBQUMsUUFBUSxFQUFFO0NBQ3BDLENBQUM7S0FDRCxPQUFPLENBQUMsZUFBZSxFQUFFO0lBQ3hCLFdBQVcsRUFDVCx3RkFBd0Y7UUFDeEYsMkZBQTJGO1FBQzNGLHdGQUF3RjtRQUN4Rix5RkFBeUY7UUFDekYsc0ZBQXNGO1FBQ3RGLG1DQUFtQztDQUN0QyxDQUFDLENBQUM7QUFFTCxNQUFNLG1CQUFtQixHQUFHLDBEQUEwRCxDQUFDO0FBRXZGLE1BQU0sNkJBQTZCLEdBQUcsZUFBQztLQUNwQyxNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixJQUFJLEVBQUUsZUFBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGVBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxlQUFDLENBQUMsS0FBSyxDQUFDLGVBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxLQUFLLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixVQUFVLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRTtJQUN2QixVQUFVLEVBQUUsZUFBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGVBQUMsQ0FBQyxLQUFLLENBQUMsZUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsZUFBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDaEUsQ0FBQztLQUNELE9BQU8sQ0FBQyx5QkFBeUIsRUFBRTtJQUNsQyxXQUFXLEVBQ1QsMEZBQTBGO1FBQzFGLHNGQUFzRjtRQUN0Rix1RkFBdUY7UUFDdkYsNEJBQTRCO0NBQy9CLENBQUMsQ0FBQztBQUVRLFFBQUEsd0JBQXdCLEdBQUcsZUFBQztLQUN0QyxNQUFNLENBQUM7SUFDTixNQUFNLEVBQUUsZUFBQyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQztJQUM5QyxVQUFVLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRTtJQUN2QixjQUFjLEVBQUUsZUFBQyxDQUFDLEtBQUssQ0FBQyxlQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkMsYUFBYSxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQUMsZUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2xDLE1BQU0sRUFBRSxlQUFDLENBQUMsS0FBSyxDQUFDLGVBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUM3QixDQUFDO0tBQ0QsT0FBTyxDQUFDLG9CQUFvQixFQUFFO0lBQzdCLFdBQVcsRUFDVCx5RkFBeUY7UUFDekYsb0ZBQW9GO1FBQ3BGLFdBQVc7UUFDWCwwRkFBMEY7UUFDMUYsNEZBQTRGO1FBQzVGLDJGQUEyRjtRQUMzRix1RkFBdUY7UUFDdkYsdUNBQXVDO0NBQzFDLENBQUMsQ0FBQztBQUVMLE1BQU0seUJBQXlCLEdBQUcsZUFBQztLQUNoQyxNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsZUFBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDMUIsT0FBTyxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEMsV0FBVyxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQUMsZUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hDLElBQUksRUFBRSxlQUFDO1NBQ0osS0FBSyxDQUFDLENBQUMsZUFBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQzdCLFFBQVEsQ0FDUCwwREFBMEQsbUJBQW1CLFNBQVM7UUFDcEYsK0JBQStCLENBQ2xDO0NBQ0osQ0FBQztLQUNELE9BQU8sQ0FBQyxxQkFBcUIsRUFBRTtJQUM5QixXQUFXLEVBQ1QscUZBQXFGO1FBQ3JGLDhEQUE4RDtRQUM5RCx5RkFBeUY7UUFDekYsd0ZBQXdGO1FBQ3hGLG9GQUFvRjtRQUNwRixXQUFXO0NBQ2QsQ0FBQyxDQUFDO0FBRUwsTUFBTSx5QkFBeUIsR0FBRyxlQUFDO0tBQ2hDLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxlQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUMxQixHQUFHLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRTtJQUNmLE1BQU0sRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2xCLE9BQU8sRUFBRSxlQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQy9CLElBQUksRUFBRSxlQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUM7S0FDRCxPQUFPLENBQUMscUJBQXFCLEVBQUU7SUFDOUIsV0FBVyxFQUNULHVGQUF1RjtRQUN2Rix3RkFBd0Y7Q0FDM0YsQ0FBQyxDQUFDO0FBRUwsTUFBTSwwQkFBMEIsR0FBRyxlQUFDO0tBQ2pDLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxlQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUMzQixJQUFJLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRTtDQUNqQixDQUFDO0tBQ0QsT0FBTyxDQUFDLHNCQUFzQixFQUFFO0lBQy9CLFdBQVcsRUFBRSxxRUFBcUU7Q0FDbkYsQ0FBQyxDQUFDO0FBRVEsUUFBQSxrQkFBa0IsR0FBRyxlQUFDO0tBQ2hDLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtJQUMxQix5QkFBeUI7SUFDekIseUJBQXlCO0lBQ3pCLDBCQUEwQjtDQUMzQixDQUFDO0tBQ0QsT0FBTyxDQUFDLGNBQWMsRUFBRTtJQUN2QixXQUFXLEVBQ1QsdUZBQXVGO1FBQ3ZGLHFGQUFxRjtRQUNyRixtRUFBbUU7Q0FDdEUsQ0FBQyxDQUFDO0FBRUwsTUFBTSxzQkFBc0IsR0FBRyxlQUFDO0tBQzdCLE1BQU0sQ0FBQztJQUNOLFVBQVUsRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3RCLFVBQVUsRUFBRSxlQUFDLENBQUMsTUFBTSxDQUFDLGVBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxlQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsZUFBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDcEUsQ0FBQztLQUNELE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtJQUMzQixXQUFXLEVBQ1QsdUZBQXVGO1FBQ3ZGLG1CQUFtQjtDQUN0QixDQUFDLENBQUM7QUFFUSxRQUFBLGtCQUFrQixHQUFHLGVBQUM7S0FDaEMsTUFBTSxDQUFDO0lBQ04sSUFBSSxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQ1gsZUFBQyxDQUFDLE1BQU0sQ0FBQyxlQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQ3RGO0lBQ0QsSUFBSSxFQUFFLGVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLEVBQUUsZUFBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO0NBQzVELENBQUM7S0FDRCxPQUFPLENBQUMsY0FBYyxFQUFFO0lBQ3ZCLFdBQVcsRUFDVCx5RkFBeUY7UUFDekYsMEZBQTBGO1FBQzFGLDJGQUEyRjtRQUMzRix3RkFBd0Y7UUFDeEYsdUZBQXVGO1FBQ3ZGLHlGQUF5RjtRQUN6Rix5QkFBeUI7Q0FDNUIsQ0FBQyxDQUFDO0FBRVEsUUFBQSxtQkFBbUIsR0FBRyxlQUFDO0tBQ2pDLEtBQUssQ0FBQztJQUNMLGVBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxlQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7SUFDcEUsZUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxlQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLGVBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztDQUNyRSxDQUFDO0tBQ0QsT0FBTyxDQUFDLGVBQWUsRUFBRTtJQUN4QixXQUFXLEVBQ1Qsa0ZBQWtGO1FBQ2xGLHNEQUFzRDtDQUN6RCxDQUFDLENBQUM7QUFFTCxNQUFNLHNCQUFzQixHQUFjLGVBQUM7S0FDeEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUNULGVBQUMsQ0FBQyxLQUFLLENBQUM7SUFDTixlQUFDLENBQUMsTUFBTSxFQUFFO0lBQ1YsZUFBQyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztJQUMvQixlQUFDLENBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQ2IsZUFBQyxDQUFDLE1BQU0sQ0FBQztZQUNQLEtBQUssRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFO1lBQ2pCLElBQUksRUFBRSxzQkFBc0I7WUFDNUIsS0FBSyxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQUMsZUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO1NBQ3RDLENBQUMsQ0FDSDtLQUNGLENBQUM7Q0FDSCxDQUFDLENBQ0g7S0FDQSxPQUFPLENBQUMsa0JBQWtCLEVBQUU7SUFDM0IsV0FBVyxFQUNULDRGQUE0RjtRQUM1Riw0RkFBNEY7UUFDNUYsc0ZBQXNGO1FBQ3RGLDRGQUE0RjtRQUM1Riw2QkFBNkI7Q0FDaEMsQ0FBQyxDQUFDO0FBRUwsTUFBTSx1QkFBdUIsR0FBRyxlQUFDO0tBQzlCLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO0tBQzNELE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixXQUFXLEVBQ1QseUZBQXlGO1FBQ3pGLHVGQUF1RjtRQUN2Riw0RkFBNEY7UUFDNUYsMEZBQTBGO1FBQzFGLHVGQUF1RjtRQUN2RiwyRkFBMkY7UUFDM0Ysd0ZBQXdGO1FBQ3hGLDBDQUEwQztDQUM3QyxDQUFDLENBQUM7QUFFTCxNQUFNLGtCQUFrQixHQUFHLGVBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbEMsS0FBSyxFQUFFLGVBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDakIsSUFBSSxFQUFFLHNCQUFzQjtJQUM1QixZQUFZLEVBQUUsZUFBQyxDQUFDLElBQUksQ0FBQywrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNuRCxTQUFTLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNoQyxTQUFTLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNoQyxrQkFBa0IsRUFBRSxlQUFDLENBQUMsS0FBSyxDQUFDLGVBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNsRCxZQUFZLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxVQUFVLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxVQUFVLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxLQUFLLEVBQUUsZUFBQyxDQUFDLEtBQUssQ0FBQyxlQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDckMsV0FBVyxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDekQsQ0FBQyxDQUFDO0FBRUgsTUFBTSxtQkFBbUIsR0FBRyxlQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25DLEVBQUUsRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2QsSUFBSSxFQUFFLGVBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDaEIsSUFBSSxFQUFFLGVBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sRUFBRSxlQUFDLENBQUMsS0FBSyxDQUNiLGVBQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxLQUFLLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRTtRQUNqQixJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLFVBQVUsRUFBRSxlQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ2xDLFlBQVksRUFBRSxlQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3BDLEtBQUssRUFBRSxlQUFDLENBQUMsS0FBSyxDQUFDLGVBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtLQUN0QyxDQUFDLENBQ0g7Q0FDRixDQUFDLENBQUM7QUFFVSxRQUFBLHFCQUFxQixHQUFHLGVBQUM7S0FDbkMsTUFBTSxDQUFDO0lBQ04sV0FBVyxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQ2xCLGVBQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxJQUFJLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRTtRQUNoQixNQUFNLEVBQUUsZUFBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNuQyxPQUFPLEVBQUUsZUFBQyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztLQUN0QyxDQUFDLENBQ0g7SUFDRCxJQUFJLEVBQUUsZUFBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLGNBQWMsRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsYUFBYSxFQUFFLGVBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO0NBQ3JGLENBQUM7S0FDRCxPQUFPLENBQUMsaUJBQWlCLEVBQUU7SUFDMUIsV0FBVyxFQUNULDBGQUEwRjtRQUMxRix5RkFBeUY7UUFDekYsdUZBQXVGO1FBQ3ZGLHlGQUF5RjtRQUN6Rix5RkFBeUY7UUFDekYsMEZBQTBGO1FBQzFGLDRGQUE0RjtRQUM1RixtRkFBbUY7UUFDbkYsMEZBQTBGO1FBQzFGLG1GQUFtRjtRQUNuRiwwRkFBMEY7UUFDMUYsd0ZBQXdGO1FBQ3hGLG1DQUFtQztRQUNuQyx3RkFBd0Y7UUFDeEYsMEZBQTBGO1FBQzFGLHlGQUF5RjtRQUN6RiwwRkFBMEY7UUFDMUYsK0RBQStEO1FBQy9ELDBGQUEwRjtRQUMxRiwwRkFBMEY7UUFDMUYsd0ZBQXdGO1FBQ3hGLGtEQUFrRDtDQUNyRCxDQUFDLENBQUM7QUFFUSxRQUFBLG9CQUFvQixHQUFHLGVBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7SUFDeEUsV0FBVyxFQUNULDZGQUE2RjtRQUM3Riw2RkFBNkY7UUFDN0YsNEZBQTRGO1FBQzVGLHdGQUF3RjtRQUN4Riw2RkFBNkY7UUFDN0YsNkNBQTZDO0NBQ2hELENBQUMsQ0FBQztBQUVVLFFBQUEsbUJBQW1CLEdBQUcsZUFBQztLQUNqQyxNQUFNLENBQUM7SUFDTixLQUFLLEVBQUUsZUFBQyxDQUFDLE1BQU0sQ0FBQztRQUNkLElBQUksRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFO1FBQ2hCLE1BQU0sRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFO1FBQ3hCLE9BQU8sRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFO1FBQ25CLE9BQU8sRUFBRSxlQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQ2hDLENBQUM7Q0FDSCxDQUFDO0tBQ0QsT0FBTyxDQUFDLGVBQWUsRUFBRTtJQUN4QixXQUFXLEVBQ1QscUZBQXFGO1FBQ3JGLHdGQUF3RjtRQUN4Riw4RUFBOEU7UUFDOUUsbUVBQW1FO1FBQ25FLDRGQUE0RjtRQUM1Rix5RkFBeUY7UUFDekYsNEZBQTRGO1FBQzVGLGFBQWEsbUJBQW1CLDBDQUEwQztDQUM3RSxDQUFDLENBQUM7QUFFUSxRQUFBLDhCQUE4QixHQUFHLGVBQUM7S0FDNUMsTUFBTSxDQUFDO0lBQ04sS0FBSyxFQUFFLGVBQUMsQ0FBQyxNQUFNLENBQUM7UUFDZCxJQUFJLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRTtRQUNoQixNQUFNLEVBQUUsZUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRTtRQUN4QixPQUFPLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtLQUNoQyxDQUFDO0NBQ0gsQ0FBQztLQUNELE9BQU8sQ0FBQywwQkFBMEIsRUFBRTtJQUNuQyxXQUFXLEVBQ1QsOEZBQThGO0NBQ2pHLENBQUMsQ0FBQyJ9