@forestadmin/agent-bff 1.23.6 → 1.23.8

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 (54) hide show
  1. package/README.md +53 -31
  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/cli-core.js +9 -5
  13. package/dist/cli-dispatch.js +4 -3
  14. package/dist/config/env-config.d.ts +8 -0
  15. package/dist/config/env-config.js +50 -18
  16. package/dist/context/build-context.d.ts +1 -1
  17. package/dist/cors/origin.d.ts +1 -0
  18. package/dist/cors/origin.js +7 -3
  19. package/dist/cors/per-key-origin.js +3 -2
  20. package/dist/data/agent-query.d.ts +15 -28
  21. package/dist/data/agent-query.js +66 -35
  22. package/dist/data/data-routes-middleware.js +5 -5
  23. package/dist/data/request-schemas.d.ts +38 -16
  24. package/dist/data/request-schemas.js +26 -19
  25. package/dist/docs/docs-samples.d.ts +3 -2
  26. package/dist/docs/docs-samples.js +4 -3
  27. package/dist/http/agent-error-mapper.d.ts +2 -1
  28. package/dist/http/agent-error-mapper.js +8 -1
  29. package/dist/http/bff-local-errors.d.ts +6 -0
  30. package/dist/http/bff-local-errors.js +13 -1
  31. package/dist/openapi/collect-unfolding.js +12 -7
  32. package/dist/openapi/field-schemas.d.ts +5 -4
  33. package/dist/openapi/field-schemas.js +24 -22
  34. package/dist/openapi/openapi-document.d.ts +3 -1
  35. package/dist/openapi/openapi-document.js +50 -15
  36. package/dist/openapi/openapi-routes.d.ts +2 -1
  37. package/dist/openapi/openapi-routes.js +4 -3
  38. package/dist/openapi/schemas.d.ts +44 -15
  39. package/dist/openapi/schemas.js +145 -40
  40. package/dist/openapi/unfolded-document.d.ts +2 -1
  41. package/dist/openapi/unfolded-document.js +3 -3
  42. package/dist/openapi/unfolded-paths.js +86 -50
  43. package/dist/openapi/unfolding.d.ts +2 -1
  44. package/dist/rate-limit/agent-path.d.ts +2 -0
  45. package/dist/rate-limit/agent-path.js +7 -0
  46. package/dist/rate-limit/rate-limit-middleware.d.ts +9 -0
  47. package/dist/rate-limit/rate-limit-middleware.js +61 -0
  48. package/dist/read-model/capabilities-cache.d.ts +1 -11
  49. package/dist/read-model/capabilities-cache.js +1 -1
  50. package/dist/read-model/field-type.d.ts +17 -0
  51. package/dist/read-model/field-type.js +42 -0
  52. package/dist/validation/validation-errors.d.ts +6 -0
  53. package/dist/validation/validation-errors.js +14 -1
  54. package/package.json +4 -4
@@ -44,6 +44,7 @@ const component_pool_1 = __importDefault(require("./component-pool"));
44
44
  const schemas_1 = require("./schemas");
45
45
  const unfolded_paths_1 = __importDefault(require("./unfolded-paths"));
46
46
  const zod_openapi_1 = require("./zod-openapi");
47
+ const bff_local_errors_1 = require("../http/bff-local-errors");
47
48
  const body_limit_1 = __importStar(require("../http/body-limit"));
48
49
  exports.OPENAPI_VERSION = '3.1.0';
49
50
  exports.ROUTE_PREFIX = '/agent/v1';
@@ -51,31 +52,38 @@ const SESSION_SCHEME = 'bffSession';
51
52
  const API_KEY_SCHEME = 'bffApiKey';
52
53
  const SECURITY = [{ [SESSION_SCHEME]: [] }, { [API_KEY_SCHEME]: [] }];
53
54
  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)',
55
+ 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
56
  401: 'Missing, invalid, or expired credentials',
56
57
  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
58
  404: 'Unknown collection, relation, or action',
58
59
  413: `The request body exceeds the BFF limit of ${body_limit_1.default}`,
59
60
  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',
61
- 429: 'The agent rate-limited the request',
61
+ 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',
62
+ 429: `The BFF rate-limited the request, for one of two reasons: the caller identity exceeded its per-window budget, or the limiter is saturated and cannot open a window for a new identity. The \`details.cause\` field of the error body distinguishes them (\`${bff_local_errors_1.RATE_LIMIT_CAUSES.limitExceeded}\` or \`${bff_local_errors_1.RATE_LIMIT_CAUSES.limiterSaturated}\`), and Retry-After carries the seconds to wait. On data and action routes the agent may also rate-limit the request itself; that 429 is relayed with the agent's own payload as \`details\`, so it carries neither \`cause\` nor Retry-After — read them only when they are present rather than branching on their value`,
62
63
  500: 'The agent payload could not be mapped to the BFF contract, or the BFF hit an unexpected error',
63
64
  501: 'The BFF is running without an agent configured, so the proxy is not implemented',
64
- 502: 'The agent could not be reached',
65
+ 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
66
  503: 'The agent schema is unavailable, the agent returned a 5xx, or the API key could not be resolved',
67
+ 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
68
  };
67
69
  const UNSUPPORTED_RESULT_DESCRIPTION = 'Either the BFF runs without an agent configured, or the action returned a result shape the ' +
68
70
  'BFF cannot normalize. The second case carries no message field.';
69
71
  const ERROR_RESPONSE_REF = '#/components/schemas/ErrorResponse';
70
72
  const MESSAGELESS_ERROR_RESPONSE_REF = '#/components/schemas/MessagelessErrorResponse';
71
73
  const UNSUPPORTED_ACTION_RESULT_COMPONENT = 'UnsupportedActionResult';
72
- const RETRY_AFTER_HEADER = {
74
+ const retryAfterHeader = (description) => ({
73
75
  'Retry-After': {
74
- description: 'Seconds to wait before retrying. Set when the API key could not be resolved.',
76
+ description,
75
77
  required: false,
76
78
  schema: { type: 'integer' },
77
79
  },
78
- };
80
+ });
81
+ const RETRY_AFTER_HEADER = retryAfterHeader('Seconds to wait before retrying. Set when the API key could not be resolved.');
82
+ const RETRY_AFTER_RATE_LIMIT_HEADER = retryAfterHeader('Seconds until the BFF rate-limit window of the caller resets. When the limiter is ' +
83
+ 'saturated the caller has no window yet, so the value is a lower bound instead: the ' +
84
+ 'earliest reset among the identities currently holding one, after which a slot may free ' +
85
+ 'up. Present when the BFF itself emitted this 429; an agent 429 relayed from upstream ' +
86
+ 'carries no header.');
79
87
  function registerErrorComponent(registry, name, { description, schema, headers }) {
80
88
  return registry.registerComponent('responses', name, {
81
89
  description,
@@ -86,6 +94,13 @@ function registerErrorComponent(registry, name, { description, schema, headers }
86
94
  // Every error body is identical across paths, and their descriptions are long: inlining them costs
87
95
  // ~2.8kB per path, which the unfolded document multiplies by every collection, relation and action.
88
96
  // Registering them once as components keeps a path's error block to a dozen refs.
97
+ function retryAfterHeaders(status) {
98
+ if (status === '503')
99
+ return { headers: RETRY_AFTER_HEADER };
100
+ if (status === '429')
101
+ return { headers: RETRY_AFTER_RATE_LIMIT_HEADER };
102
+ return {};
103
+ }
89
104
  function registerErrorResponses(registry, statuses, withActionResults) {
90
105
  registry.register('ErrorResponse', schemas_1.ErrorResponseSchema);
91
106
  const byStatus = {};
@@ -96,7 +111,7 @@ function registerErrorResponses(registry, statuses, withActionResults) {
96
111
  byStatus[status] = registerErrorComponent(registry, `Error${status}`, {
97
112
  description,
98
113
  schema: { $ref: ERROR_RESPONSE_REF },
99
- ...(status === '503' ? { headers: RETRY_AFTER_HEADER } : {}),
114
+ ...retryAfterHeaders(status),
100
115
  });
101
116
  });
102
117
  // A document with no action path must not carry this response, nor the messageless body it
@@ -130,6 +145,7 @@ const DATA_ERRORS = [
130
145
  '501',
131
146
  '502',
132
147
  '503',
148
+ '504',
133
149
  ];
134
150
  const AI_RELAYED_OR_ENVELOPE = 'Below 500 the BFF relays whatever JSON the Forest AI proxy answered, unchanged, so the authority ' +
135
151
  'on this body is the upstream contract and not the BFF one. When the upstream answer carried no ' +
@@ -141,7 +157,7 @@ const AI_DUAL_SHAPED_ERRORS = {
141
157
  403: `The request presented an API key instead of a session (type oauth_required), or the Forest server refused the query. ${AI_RELAYED_OR_ENVELOPE}`,
142
158
  413: `The request body exceeds the AI query limit of ${body_limit_1.AI_BODY_LIMIT}, or the Forest AI proxy refused it as too large. ${AI_RELAYED_OR_ENVELOPE}`,
143
159
  415: `The request Content-Type is neither application/json nor an application/*+json type, or the request carries a body with no Content-Type at all, or it declares a character set the BFF cannot decode. ${AI_RELAYED_OR_ENVELOPE}`,
144
- 429: `The Forest AI proxy rate-limited the query. ${AI_RELAYED_OR_ENVELOPE}`,
160
+ 429: `The BFF rate-limited the request (its own envelope, with Retry-After), or the Forest AI proxy rate-limited the query. ${AI_RELAYED_OR_ENVELOPE}`,
145
161
  };
146
162
  const AI_ENVELOPE_ERRORS = {
147
163
  500: 'The BFF hit an unexpected error, or the Forest server answered a 500 whose body is withheld',
@@ -161,6 +177,7 @@ function registerAiQueryErrorResponses(registry) {
161
177
  registerErrorComponent(registry, `Error${status}${AI_COMPONENT_SUFFIX}`, {
162
178
  description,
163
179
  schema: {},
180
+ headers: status === '429' ? RETRY_AFTER_RATE_LIMIT_HEADER : undefined,
164
181
  }),
165
182
  ]);
166
183
  const envelope = Object.entries(AI_ENVELOPE_ERRORS).map(([status, description]) => [
@@ -222,7 +239,7 @@ const ROUTES = [
222
239
  operationId: 'getActionForm',
223
240
  summary: 'Load the form of a custom action',
224
241
  request: schemas_1.ActionRequestSchema,
225
- response: zod_openapi_1.z.unknown(),
242
+ response: schemas_1.ActionFormResponseSchema,
226
243
  responseDescription: 'The action form fields; htmlBlock layout content is sanitized server-side against an allowlist before relaying',
227
244
  params: ['collection', 'action'],
228
245
  bodyRequired: true,
@@ -232,7 +249,7 @@ const ROUTES = [
232
249
  operationId: 'executeAction',
233
250
  summary: 'Execute a custom action',
234
251
  request: schemas_1.ActionRequestSchema,
235
- response: zod_openapi_1.z.unknown(),
252
+ response: schemas_1.ActionResultSchema,
236
253
  responseDescription: 'The normalized action result; a success result html field is sanitized server-side against an allowlist before relaying',
237
254
  params: ['collection', 'action'],
238
255
  bodyRequired: true,
@@ -305,7 +322,15 @@ function registerAiQueryPath(registry, aiErrorRefs) {
305
322
  },
306
323
  });
307
324
  }
308
- function generateOpenApiDocument(version, { unfolding, hasAiQueryRoute = false } = {}) {
325
+ const CONFIGURED_SERVER_DESCRIPTION = 'The public base URL of this BFF deployment.';
326
+ // A self-hosted BFF cannot know its own external URL, and this document is also exported offline by
327
+ // the CLI, so the absolute form has to be configured. Not a server variable in the meantime: a
328
+ // generator that meets a templated url drops the base URL entirely instead of substituting the
329
+ // default, which leaves a client worse off than the root-relative form.
330
+ const RELATIVE_SERVER_DESCRIPTION = 'Resolved against the URL this document was fetched from. Set BFF_PUBLIC_URL on the deployment ' +
331
+ 'to publish its absolute base URL here instead, which a client generated from an offline export ' +
332
+ 'needs.';
333
+ function generateOpenApiDocument(version, { unfolding, hasAiQueryRoute = false, publicUrl } = {}) {
309
334
  const registry = new zod_to_openapi_1.OpenAPIRegistry();
310
335
  const hasActions = unfolding === undefined ||
311
336
  unfolding.collections.some(collection => collection.actions.length > 0);
@@ -324,7 +349,12 @@ function generateOpenApiDocument(version, { unfolding, hasAiQueryRoute = false }
324
349
  type: 'apiKey',
325
350
  in: 'header',
326
351
  name: 'X-Forest-Bff-Key',
327
- description: 'Mode 2: a BFF API key. Never send both this and an Authorization header.',
352
+ description: 'Mode 2: a BFF API key. Never send both this and an Authorization header. A key created ' +
353
+ 'with allowedOrigins restricts browser callers only: an Origin the client sends must be in ' +
354
+ 'that list, else 403 origin_not_allowed, while a request with no Origin at all — curl, a ' +
355
+ 'server-side client, CI, an empty Origin header counting as none — passes, because there ' +
356
+ 'the key is the boundary rather than the origin. The opaque Origin null is a present origin ' +
357
+ 'and is rejected.',
328
358
  });
329
359
  registry.registerPath({
330
360
  method: 'get',
@@ -341,6 +371,7 @@ function generateOpenApiDocument(version, { unfolding, hasAiQueryRoute = false }
341
371
  400: errorRefs.byStatus['400'],
342
372
  401: errorRefs.byStatus['401'],
343
373
  403: errorRefs.byStatus['403'],
374
+ 429: errorRefs.byStatus['429'],
344
375
  500: errorRefs.byStatus['500'],
345
376
  501: errorRefs.byStatus['501'],
346
377
  503: errorRefs.byStatus['503'],
@@ -399,10 +430,14 @@ function generateOpenApiDocument(version, { unfolding, hasAiQueryRoute = false }
399
430
  license: { name: 'GPL-3.0', url: 'https://www.gnu.org/licenses/gpl-3.0.html' },
400
431
  description: `${unfolding ? UNFOLDED_DESCRIPTION : GENERIC_DESCRIPTION} ${SHARED_DESCRIPTION}`,
401
432
  },
402
- servers: [{ url: '/' }],
433
+ servers: [
434
+ publicUrl
435
+ ? { url: publicUrl, description: CONFIGURED_SERVER_DESCRIPTION }
436
+ : { url: '/', description: RELATIVE_SERVER_DESCRIPTION },
437
+ ],
403
438
  });
404
439
  }
405
440
  function serializeOpenApi(document) {
406
441
  return JSON.stringify(document, null, 2);
407
442
  }
408
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS1kb2N1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL29wZW5hcGktZG9jdW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNFhBLDBEQStHQztBQUVELDRDQUVDO0FBNWVELG1FQUFzRjtBQUV0RixzRUFBNkM7QUFDN0MsdUNBWW1CO0FBQ25CLHNFQUFxRDtBQUNyRCwrQ0FBa0M7QUFDbEMsaUVBQStEO0FBRWxELFFBQUEsZUFBZSxHQUFHLE9BQU8sQ0FBQztBQUMxQixRQUFBLFlBQVksR0FBRyxXQUFXLENBQUM7QUFFeEMsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDO0FBQ3BDLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQztBQUVuQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUV0RSxNQUFNLGNBQWMsR0FBMkI7SUFDN0MsR0FBRyxFQUFFLHlRQUF5UTtJQUM5USxHQUFHLEVBQUUsMENBQTBDO0lBQy9DLEdBQUcsRUFBRSwwT0FBME87SUFDL08sR0FBRyxFQUFFLHlDQUF5QztJQUM5QyxHQUFHLEVBQUUsNkNBQTZDLG9CQUFVLEVBQUU7SUFDOUQsR0FBRyxFQUFFLDZTQUE2UztJQUNsVCxHQUFHLEVBQUUsa0VBQWtFO0lBQ3ZFLEdBQUcsRUFBRSxvQ0FBb0M7SUFDekMsR0FBRyxFQUFFLCtGQUErRjtJQUNwRyxHQUFHLEVBQUUsaUZBQWlGO0lBQ3RGLEdBQUcsRUFBRSxnQ0FBZ0M7SUFDckMsR0FBRyxFQUFFLGlHQUFpRztDQUN2RyxDQUFDO0FBRUYsTUFBTSw4QkFBOEIsR0FDbEMsNkZBQTZGO0lBQzdGLGlFQUFpRSxDQUFDO0FBRXBFLE1BQU0sa0JBQWtCLEdBQUcsb0NBQW9DLENBQUM7QUFDaEUsTUFBTSw4QkFBOEIsR0FBRywrQ0FBK0MsQ0FBQztBQUV2RixNQUFNLG1DQUFtQyxHQUFHLHlCQUF5QixDQUFDO0FBRXRFLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsYUFBYSxFQUFFO1FBQ2IsV0FBVyxFQUFFLDhFQUE4RTtRQUMzRixRQUFRLEVBQUUsS0FBSztRQUNmLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFrQixFQUFFO0tBQ3JDO0NBQ0YsQ0FBQztBQWVGLFNBQVMsc0JBQXNCLENBQzdCLFFBQXlCLEVBQ3pCLElBQVksRUFDWixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFrQjtJQUVoRCxPQUFPLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFO1FBQ25ELFdBQVc7UUFDWCxPQUFPLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzNDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNoQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ1QsQ0FBQztBQUVELG1HQUFtRztBQUNuRyxvR0FBb0c7QUFDcEcsa0ZBQWtGO0FBQ2xGLFNBQVMsc0JBQXNCLENBQzdCLFFBQXlCLEVBQ3pCLFFBQWtCLEVBQ2xCLGlCQUEwQjtJQUUxQixRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSw2QkFBbUIsQ0FBQyxDQUFDO0lBRXhELE1BQU0sUUFBUSxHQUFnQyxFQUFFLENBQUM7SUFFakQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN4QixNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLFdBQVc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXZGLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxNQUFNLEVBQUUsRUFBRTtZQUNwRSxXQUFXO1lBQ1gsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3BDLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDN0QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCwyRkFBMkY7SUFDM0YsK0VBQStFO0lBQy9FLElBQUksQ0FBQyxpQkFBaUI7UUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBRXRGLFFBQVEsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLEVBQUUsd0NBQThCLENBQUMsQ0FBQztJQUU5RSxNQUFNLHVCQUF1QixHQUFHLHNCQUFzQixDQUNwRCxRQUFRLEVBQ1IsbUNBQW1DLEVBQ25DO1FBQ0UsV0FBVyxFQUFFLDhCQUE4QjtRQUMzQyxNQUFNLEVBQUU7WUFDTixLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFLENBQUM7U0FDaEY7S0FDRixDQUNGLENBQUM7SUFFRixPQUFPLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixFQUFFLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixJQUF1QixFQUN2QixjQUF1QjtJQUV2QixPQUFPLGNBQWM7UUFDbkIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7UUFDekQsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQUVELE1BQU0sV0FBVyxHQUFHO0lBQ2xCLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztDQUNOLENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUMxQixtR0FBbUc7SUFDbkcsaUdBQWlHO0lBQ2pHLGdHQUFnRztJQUNoRyxtREFBbUQsQ0FBQztBQUV0RCxNQUFNLHFCQUFxQixHQUEyQjtJQUNwRCxHQUFHLEVBQUUsd0ZBQXdGLHNCQUFzQixFQUFFO0lBQ3JILEdBQUcsRUFBRSxzSEFBc0gsc0JBQXNCLEVBQUU7SUFDbkosR0FBRyxFQUFFLHdIQUF3SCxzQkFBc0IsRUFBRTtJQUNySixHQUFHLEVBQUUsa0RBQWtELDBCQUFhLHFEQUFxRCxzQkFBc0IsRUFBRTtJQUNqSixHQUFHLEVBQUUseU1BQXlNLHNCQUFzQixFQUFFO0lBQ3RPLEdBQUcsRUFBRSwrQ0FBK0Msc0JBQXNCLEVBQUU7Q0FDN0UsQ0FBQztBQUVGLE1BQU0sa0JBQWtCLEdBQTJCO0lBQ2pELEdBQUcsRUFBRSw2RkFBNkY7SUFDbEcsR0FBRyxFQUFFLHFGQUFxRjtJQUMxRixHQUFHLEVBQUUsK0NBQStDO0lBQ3BELEdBQUcsRUFBRSxzRUFBc0U7Q0FDNUUsQ0FBQztBQUVGLE1BQU0sc0JBQXNCLEdBQzFCLDRGQUE0RjtJQUM1Riw2REFBNkQ7SUFDN0QsZ0dBQWdHO0lBQ2hHLDZGQUE2RjtJQUM3RixpR0FBaUcsQ0FBQztBQUVwRyxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQUV0QyxTQUFTLDZCQUE2QixDQUFDLFFBQXlCO0lBQzlELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdEYsTUFBTTtRQUNOLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxRQUFRLE1BQU0sR0FBRyxtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZFLFdBQVc7WUFDWCxNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUM7S0FDSCxDQUFDLENBQUM7SUFFSCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pGLE1BQU07UUFDTixzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxNQUFNLEdBQUcsbUJBQW1CLEVBQUUsRUFBRTtZQUN2RSxXQUFXO1lBQ1gsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1NBQ3JDLENBQUM7S0FDSCxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNuRCxPQUFPLEVBQUUsc0JBQXNCLENBQUMsUUFBUSxFQUFFLGVBQWUsbUJBQW1CLEVBQUUsRUFBRTtZQUM5RSxXQUFXLEVBQUUsc0JBQXNCO1lBQ25DLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQztLQUNILENBQUM7QUFDSixDQUFDO0FBY0QsTUFBTSxNQUFNLEdBQXNCO0lBQ2hDO1FBQ0UsSUFBSSxFQUFFLG9CQUFvQjtRQUMxQixXQUFXLEVBQUUsYUFBYTtRQUMxQixPQUFPLEVBQUUsOEJBQThCO1FBQ3ZDLE9BQU8sRUFBRSwyQkFBaUI7UUFDMUIsUUFBUSxFQUFFLDRCQUFrQjtRQUM1QixtQkFBbUIsRUFBRSxtQkFBbUI7UUFDeEMsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDO0tBQ3ZCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUscUJBQXFCO1FBQzNCLFdBQVcsRUFBRSxjQUFjO1FBQzNCLE9BQU8sRUFBRSwrQkFBK0I7UUFDeEMsT0FBTyxFQUFFLDRCQUFrQjtRQUMzQixRQUFRLEVBQUUsNkJBQW1CO1FBQzdCLG1CQUFtQixFQUFFLDJCQUEyQjtRQUNoRCxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUM7S0FDdkI7SUFDRDtRQUNFLElBQUksRUFBRSx5Q0FBeUM7UUFDL0MsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxPQUFPLEVBQUUsb0NBQW9DO1FBQzdDLE9BQU8sRUFBRSxtQ0FBeUI7UUFDbEMsUUFBUSxFQUFFLDRCQUFrQjtRQUM1QixtQkFBbUIsRUFBRSwyQkFBMkI7UUFDaEQsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQztRQUNsQyxZQUFZLEVBQUUsSUFBSTtLQUNuQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLDBDQUEwQztRQUNoRCxXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLE9BQU8sRUFBRSxxQ0FBcUM7UUFDOUMsT0FBTyxFQUFFLG9DQUEwQjtRQUNuQyxRQUFRLEVBQUUsNkJBQW1CO1FBQzdCLG1CQUFtQixFQUFFLG1DQUFtQztRQUN4RCxNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDO1FBQ2xDLFlBQVksRUFBRSxJQUFJO0tBQ25CO0lBQ0Q7UUFDRSxJQUFJLEVBQUUscUNBQXFDO1FBQzNDLFdBQVcsRUFBRSxlQUFlO1FBQzVCLE9BQU8sRUFBRSxrQ0FBa0M7UUFDM0MsT0FBTyxFQUFFLDZCQUFtQjtRQUM1QixRQUFRLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRTtRQUNyQixtQkFBbUIsRUFDakIsZ0hBQWdIO1FBQ2xILE1BQU0sRUFBRSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUM7UUFDaEMsWUFBWSxFQUFFLElBQUk7S0FDbkI7SUFDRDtRQUNFLElBQUksRUFBRSx3Q0FBd0M7UUFDOUMsV0FBVyxFQUFFLGVBQWU7UUFDNUIsT0FBTyxFQUFFLHlCQUF5QjtRQUNsQyxPQUFPLEVBQUUsNkJBQW1CO1FBQzVCLFFBQVEsRUFBRSxlQUFDLENBQUMsT0FBTyxFQUFFO1FBQ3JCLG1CQUFtQixFQUNqQix5SEFBeUg7UUFDM0gsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQztRQUNoQyxZQUFZLEVBQUUsSUFBSTtRQUNsQixjQUFjLEVBQUUsSUFBSTtLQUNyQjtDQUNGLENBQUM7QUFFRixNQUFNLGtCQUFrQixHQUEyQjtJQUNqRCxVQUFVLEVBQUUsa0RBQWtEO0lBQzlELFFBQVEsRUFBRSx3RUFBd0U7SUFDbEYsTUFBTSxFQUFFLHFGQUFxRjtDQUM5RixDQUFDO0FBRUYsU0FBUyxXQUFXLENBQUMsS0FBZTtJQUNsQyxPQUFPLGVBQUMsQ0FBQyxNQUFNLENBQ2IsTUFBTSxDQUFDLFdBQVcsQ0FDaEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLGVBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDekYsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELG9HQUFvRztBQUNwRywrRUFBK0U7QUFDL0UsTUFBTSx5QkFBeUIsR0FBRyxpQkFBaUIsQ0FBQztBQUVwRCxNQUFNLGVBQWUsR0FBRyxlQUFDO0tBQ3RCLE1BQU0sRUFBRTtLQUNSLFFBQVEsRUFBRTtLQUNWLE9BQU8sQ0FBQztJQUNQLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFO0lBQ2xELFdBQVcsRUFDVCxxRkFBcUY7UUFDckYsK0JBQStCO0NBQ2xDLENBQUMsQ0FBQztBQUVMLE1BQU0sa0JBQWtCLEdBQ3RCLDZGQUE2RjtJQUM3RiwrRkFBK0Y7SUFDL0YsK0ZBQStGO0lBQy9GLDZGQUE2RjtJQUM3Riw4RkFBOEY7SUFDOUYsdUZBQXVGLENBQUM7QUFFMUYsTUFBTSxtQkFBbUIsR0FDdkIsZ0dBQWdHO0lBQ2hHLDRGQUE0RjtJQUM1RiwyRkFBMkY7SUFDM0Ysa0RBQWtELENBQUM7QUFFckQsTUFBTSxvQkFBb0IsR0FDeEIsaUdBQWlHO0lBQ2pHLDRGQUE0RjtJQUM1RixpR0FBaUc7SUFDakcsMEZBQTBGO0lBQzFGLCtGQUErRjtJQUMvRix5RkFBeUY7SUFDekYsaUdBQWlHO0lBQ2pHLDZGQUE2RjtJQUM3RixzRUFBc0UsQ0FBQztBQUV6RSxTQUFTLG1CQUFtQixDQUMxQixRQUF5QixFQUN6QixXQUF3QztJQUV4QyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsSUFBSSxFQUFFLEdBQUcsb0JBQVksV0FBVztRQUNoQyxXQUFXLEVBQUUsU0FBUztRQUN0QixPQUFPLEVBQUUsd0NBQXdDO1FBQ2pELFdBQVcsRUFDVCx5RkFBeUY7WUFDekYsdUZBQXVGO1lBQ3ZGLHNGQUFzRjtZQUN0Rix3RkFBd0Y7WUFDeEYsNkJBQTZCLDBCQUFhLHlCQUF5QixvQkFBVSxZQUFZO1lBQ3pGLG9GQUFvRjtZQUNwRix5RkFBeUY7WUFDekYscUZBQXFGO1lBQ3JGLGtDQUFrQztRQUNwQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDcEMsT0FBTyxFQUFFO1lBQ1AsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSw4QkFBb0IsRUFBRSxFQUFFLEVBQUU7U0FDNUY7UUFDRCxTQUFTLEVBQUU7WUFDVCxHQUFHLEVBQUU7Z0JBQ0gsV0FBVyxFQUFFLG9EQUFvRDtnQkFDakUsT0FBTyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUU7YUFDekQ7WUFDRCxHQUFHLFdBQVc7U0FDZjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFPRCxTQUFnQix1QkFBdUIsQ0FDckMsT0FBZSxFQUNmLEVBQUUsU0FBUyxFQUFFLGVBQWUsR0FBRyxLQUFLLEtBQXFDLEVBQUU7SUFFM0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQ0FBZSxFQUFFLENBQUM7SUFDdkMsTUFBTSxVQUFVLEdBQ2QsU0FBUyxLQUFLLFNBQVM7UUFDdkIsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMxRixNQUFNLGNBQWMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBRWhHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLEVBQUU7UUFDNUQsSUFBSSxFQUFFLE1BQU07UUFDWixNQUFNLEVBQUUsUUFBUTtRQUNoQixXQUFXLEVBQ1Qsc0ZBQXNGO1lBQ3RGLDRGQUE0RjtZQUM1Rix3RkFBd0Y7WUFDeEYsV0FBVztLQUNkLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLEVBQUU7UUFDNUQsSUFBSSxFQUFFLFFBQVE7UUFDZCxFQUFFLEVBQUUsUUFBUTtRQUNaLElBQUksRUFBRSxrQkFBa0I7UUFDeEIsV0FBVyxFQUFFLDBFQUEwRTtLQUN4RixDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLEdBQUcsb0JBQVksVUFBVTtRQUMvQixXQUFXLEVBQUUsWUFBWTtRQUN6QixPQUFPLEVBQUUsa0NBQWtDO1FBQzNDLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLE9BQU8sRUFBRSxFQUFFO1FBQ1gsU0FBUyxFQUFFO1lBQ1QsR0FBRyxFQUFFO2dCQUNILFdBQVcsRUFBRSxzRUFBc0U7Z0JBQ25GLE9BQU8sRUFBRSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLCtCQUFxQixFQUFFLEVBQUU7YUFDbkU7WUFDRCxHQUFHLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDOUIsR0FBRyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQzlCLEdBQUcsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUM5QixHQUFHLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDOUIsR0FBRyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQzlCLEdBQUcsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUMvQjtLQUNGLENBQUMsQ0FBQztJQUVILElBQUksV0FBVztRQUFFLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUU1RCxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsSUFBQSx3QkFBcUIsRUFDbkI7WUFDRSxRQUFRO1lBQ1IsSUFBSSxFQUFFLElBQUksd0JBQWEsQ0FBQyxRQUFRLENBQUM7WUFDakMsTUFBTSxFQUFFLG9CQUFZO1lBQ3BCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLGNBQWM7WUFDZCxjQUFjLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQztTQUM1RSxFQUNELFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLFFBQVEsQ0FBQyxZQUFZLENBQUM7Z0JBQ3BCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLElBQUksRUFBRSxHQUFHLG9CQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDcEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3RCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixPQUFPLEVBQUU7b0JBQ1AsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO29CQUNqQyxPQUFPLEVBQUUsY0FBYztvQkFDdkIsSUFBSSxFQUFFO3dCQUNKLFFBQVEsRUFBRSxLQUFLLENBQUMsWUFBWSxLQUFLLElBQUk7d0JBQ3JDLE9BQU8sRUFBRSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRTtxQkFDM0Q7aUJBQ0Y7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULEdBQUcsRUFBRTt3QkFDSCxXQUFXLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjt3QkFDdEMsT0FBTyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFO3FCQUM1RDtvQkFDRCxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUM7aUJBQzVEO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxJQUFJLG9DQUFtQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNwRSxPQUFPLEVBQUUsdUJBQWU7UUFDeEIsa0dBQWtHO1FBQ2xHLGlHQUFpRztRQUNqRyxvREFBb0Q7UUFDcEQsSUFBSSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDckIsV0FBVyxFQUFFLHlDQUF5QyxJQUFJLENBQUMsU0FBUyxDQUNsRSxVQUFVLENBQUMsSUFBSSxDQUNoQixjQUFjO1NBQ2hCLENBQUMsQ0FBQztRQUNILElBQUksRUFBRTtZQUNKLEtBQUssRUFBRSxZQUFZO1lBQ25CLE9BQU87WUFDUCxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSwyQ0FBMkMsRUFBRTtZQUM5RSxXQUFXLEVBQUUsR0FDWCxTQUFTLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxtQkFDckMsSUFBSSxrQkFBa0IsRUFBRTtTQUN6QjtRQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQ3hCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxRQUF1QjtJQUN0RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDIn0=
443
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS1kb2N1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL29wZW5hcGktZG9jdW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa2FBLDBEQTBIQztBQUVELDRDQUVDO0FBN2hCRCxtRUFBc0Y7QUFFdEYsc0VBQTZDO0FBQzdDLHVDQWNtQjtBQUNuQixzRUFBcUQ7QUFDckQsK0NBQWtDO0FBQ2xDLCtEQUE2RDtBQUM3RCxpRUFBK0Q7QUFFbEQsUUFBQSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQzFCLFFBQUEsWUFBWSxHQUFHLFdBQVcsQ0FBQztBQUV4QyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFDcEMsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBRW5DLE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRXRFLE1BQU0sY0FBYyxHQUEyQjtJQUM3QyxHQUFHLEVBQUUsa1ZBQWtWO0lBQ3ZWLEdBQUcsRUFBRSwwQ0FBMEM7SUFDL0MsR0FBRyxFQUFFLDBPQUEwTztJQUMvTyxHQUFHLEVBQUUseUNBQXlDO0lBQzlDLEdBQUcsRUFBRSw2Q0FBNkMsb0JBQVUsRUFBRTtJQUM5RCxHQUFHLEVBQUUsNlNBQTZTO0lBQ2xULEdBQUcsRUFBRSx1SUFBdUk7SUFDNUksR0FBRyxFQUFFLDhQQUE4UCxvQ0FBaUIsQ0FBQyxhQUFhLFdBQVcsb0NBQWlCLENBQUMsZ0JBQWdCLDRUQUE0VDtJQUMzb0IsR0FBRyxFQUFFLCtGQUErRjtJQUNwRyxHQUFHLEVBQUUsaUZBQWlGO0lBQ3RGLEdBQUcsRUFBRSw2TkFBNk47SUFDbE8sR0FBRyxFQUFFLGlHQUFpRztJQUN0RyxHQUFHLEVBQUUsa1RB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
@@ -5,8 +5,9 @@ export interface OpenApiRoutesOptions {
5
5
  version: string;
6
6
  enabled: boolean;
7
7
  hasAiQueryRoute: boolean;
8
+ publicUrl?: string;
8
9
  /** Absent (no agent or no read-model configuration) serves the generic document. */
9
10
  source?: UnfoldSource;
10
11
  }
11
- export default function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, }: OpenApiRoutesOptions): Middleware;
12
+ export default function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, publicUrl, }: OpenApiRoutesOptions): Middleware;
12
13
  //# sourceMappingURL=openapi-routes.d.ts.map
@@ -13,9 +13,9 @@ const bff_local_errors_1 = require("../http/bff-local-errors");
13
13
  exports.OPENAPI_PATH = '/agent/openapi.json';
14
14
  const READ_METHODS = new Set(['GET', 'HEAD']);
15
15
  const MAX_GENERATION_RETRIES = 3;
16
- function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, }) {
16
+ function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, publicUrl, }) {
17
17
  const generic = enabled && !source
18
- ? (0, openapi_document_1.serializeOpenApi)((0, openapi_document_1.generateOpenApiDocument)(version, { hasAiQueryRoute }))
18
+ ? (0, openapi_document_1.serializeOpenApi)((0, openapi_document_1.generateOpenApiDocument)(version, { hasAiQueryRoute, publicUrl }))
19
19
  : undefined;
20
20
  // Memoized on the read-model identity: the store builds a new one per schema generation, so the
21
21
  // document is rebuilt exactly when the schema it describes changed.
@@ -35,6 +35,7 @@ function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, }) {
35
35
  const { document, unfolding } = await (0, unfolded_document_1.default)(source, readModel, token, {
36
36
  version,
37
37
  hasAiQueryRoute,
38
+ publicUrl,
38
39
  });
39
40
  // A schema refresh landing during the capabilities fan-out mixes the new generation's field sets
40
41
  // into this generation's collections, relations and actions. Such a document must not be served
@@ -68,4 +69,4 @@ function createOpenApiRoutes({ version, enabled, source, hasAiQueryRoute, }) {
68
69
  ctx.body = document;
69
70
  };
70
71
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS1yb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFwaS9vcGVuYXBpLXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF3QkEsc0NBMkVDO0FBL0ZELHlEQUErRTtBQUMvRSw0RUFBd0Q7QUFDeEQsMkNBQW9EO0FBQ3BELHFFQUFrRjtBQUNsRiwrREFBMkQ7QUFFOUMsUUFBQSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFFbEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUU5QyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQVVqQyxTQUF3QixtQkFBbUIsQ0FBQyxFQUMxQyxPQUFPLEVBQ1AsT0FBTyxFQUNQLE1BQU0sRUFDTixlQUFlLEdBQ007SUFDckIsTUFBTSxPQUFPLEdBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTTtRQUNoQixDQUFDLENBQUMsSUFBQSxtQ0FBZ0IsRUFBQyxJQUFBLDBDQUF1QixFQUFDLE9BQU8sRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVoQixnR0FBZ0c7SUFDaEcsb0VBQW9FO0lBQ3BFLElBQUksUUFBZ0UsQ0FBQztJQUVyRSxLQUFLLFVBQVUsZUFBZSxDQUM1QixHQUE4QixFQUM5QixZQUFZLEdBQUcsc0JBQXNCO1FBRXJDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxPQUFpQixDQUFDO1FBRXRDLElBQUksWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztRQUN6RixDQUFDO1FBRUQsNEZBQTRGO1FBQzVGLHlGQUF5RjtRQUN6RixNQUFNLEtBQUssR0FBRyxJQUFBLHVDQUFpQixFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBQSxzQ0FBZ0IsRUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkQsSUFBSSxRQUFRLEVBQUUsU0FBUyxLQUFLLFNBQVM7WUFBRSxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFFaEUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUEsMkJBQXFCLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7WUFDcEYsT0FBTztZQUNQLGVBQWU7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsaUdBQWlHO1FBQ2pHLGdHQUFnRztRQUNoRyxpR0FBaUc7UUFDakcsaUdBQWlHO1FBQ2pHLElBQUksQ0FBQyxNQUFNLElBQUEsc0NBQWdCLEVBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekQsT0FBTyxlQUFlLENBQUMsR0FBRyxFQUFFLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsZ0dBQWdHO1FBQ2hHLDZGQUE2RjtRQUM3RiwrRkFBK0Y7UUFDL0YsNkZBQTZGO1FBQzdGLG1GQUFtRjtRQUNuRixJQUFJLENBQUMsSUFBQSxpQ0FBcUIsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3RDLFFBQVEsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELE9BQU8sS0FBSyxVQUFVLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSTtRQUMzQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssb0JBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDL0QsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUViLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFBLGtDQUFlLEdBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDakIsR0FBRyxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztRQUM5QixHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNyQyxHQUFHLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztJQUN0QixDQUFDLENBQUM7QUFDSixDQUFDIn0=
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS1yb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFwaS9vcGVuYXBpLXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF5QkEsc0NBNkVDO0FBbEdELHlEQUErRTtBQUMvRSw0RUFBd0Q7QUFDeEQsMkNBQW9EO0FBQ3BELHFFQUFrRjtBQUNsRiwrREFBMkQ7QUFFOUMsUUFBQSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFFbEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUU5QyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQVdqQyxTQUF3QixtQkFBbUIsQ0FBQyxFQUMxQyxPQUFPLEVBQ1AsT0FBTyxFQUNQLE1BQU0sRUFDTixlQUFlLEVBQ2YsU0FBUyxHQUNZO0lBQ3JCLE1BQU0sT0FBTyxHQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU07UUFDaEIsQ0FBQyxDQUFDLElBQUEsbUNBQWdCLEVBQUMsSUFBQSwwQ0FBdUIsRUFBQyxPQUFPLEVBQUUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRixDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWhCLGdHQUFnRztJQUNoRyxvRUFBb0U7SUFDcEUsSUFBSSxRQUFnRSxDQUFDO0lBRXJFLEtBQUssVUFBVSxlQUFlLENBQzVCLEdBQThCLEVBQzlCLFlBQVksR0FBRyxzQkFBc0I7UUFFckMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLE9BQWlCLENBQUM7UUFFdEMsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFFRCw0RkFBNEY7UUFDNUYseUZBQXlGO1FBQ3pGLE1BQU0sS0FBSyxHQUFHLElBQUEsdUNBQWlCLEVBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFBLHNDQUFnQixFQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2RCxJQUFJLFFBQVEsRUFBRSxTQUFTLEtBQUssU0FBUztZQUFFLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUVoRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sSUFBQSwyQkFBcUIsRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtZQUNwRixPQUFPO1lBQ1AsZUFBZTtZQUNmLFNBQVM7U0FDVixDQUFDLENBQUM7UUFFSCxpR0FBaUc7UUFDakcsZ0dBQWdHO1FBQ2hHLGlHQUFpRztRQUNqRyxpR0FBaUc7UUFDakcsSUFBSSxDQUFDLE1BQU0sSUFBQSxzQ0FBZ0IsRUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN6RCxPQUFPLGVBQWUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxnR0FBZ0c7UUFDaEcsNkZBQTZGO1FBQzdGLCtGQUErRjtRQUMvRiw2RkFBNkY7UUFDN0YsbUZBQW1GO1FBQ25GLElBQUksQ0FBQyxJQUFBLGlDQUFxQixFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdEMsUUFBUSxHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsT0FBTyxLQUFLLFVBQVUsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJO1FBQzNDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxvQkFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvRCxNQUFNLElBQUksRUFBRSxDQUFDO1lBRWIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUEsa0NBQWUsR0FBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU1QyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNqQixHQUFHLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1FBQzlCLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBQ3RCLENBQUMsQ0FBQztBQUNKLENBQUMifQ==
@@ -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<{