@forestadmin/agent-bff 1.23.5 → 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.
- package/README.md +13 -2
- package/dist/action/action-execute-mapper.d.ts +3 -3
- package/dist/action/action-form-mapper.d.ts +2 -1
- package/dist/action/action-form-mapper.js +12 -8
- package/dist/action/action-routes-middleware.js +15 -4
- package/dist/action/action-values-validator.d.ts +4 -0
- package/dist/action/action-values-validator.js +79 -0
- package/dist/action/agent-action-client.d.ts +1 -0
- package/dist/action/agent-action-client.js +1 -1
- package/dist/agent/create-agent-http-requester.d.ts +3 -0
- package/dist/agent/create-agent-http-requester.js +25 -12
- package/dist/cli-core.js +25 -4
- package/dist/context/build-context.d.ts +1 -1
- package/dist/data/agent-query.d.ts +15 -28
- package/dist/data/agent-query.js +66 -35
- package/dist/data/data-routes-middleware.js +5 -5
- package/dist/data/request-schemas.d.ts +37 -16
- package/dist/data/request-schemas.js +24 -18
- package/dist/http/agent-error-mapper.d.ts +2 -1
- package/dist/http/agent-error-mapper.js +8 -1
- package/dist/http/bff-http-error.d.ts +1 -0
- package/dist/http/bff-http-error.js +5 -1
- package/dist/openapi/collect-unfolding.js +12 -7
- package/dist/openapi/field-schemas.d.ts +5 -4
- package/dist/openapi/field-schemas.js +24 -22
- package/dist/openapi/openapi-document.js +18 -16
- package/dist/openapi/schemas.d.ts +44 -15
- package/dist/openapi/schemas.js +155 -41
- package/dist/openapi/unfolded-paths.js +86 -50
- package/dist/openapi/unfolding.d.ts +2 -1
- package/dist/read-model/capabilities-cache.d.ts +1 -11
- package/dist/read-model/capabilities-cache.js +1 -1
- package/dist/read-model/field-type.d.ts +17 -0
- package/dist/read-model/field-type.js +42 -0
- package/dist/validation/validation-errors.d.ts +6 -0
- package/dist/validation/validation-errors.js +14 -1
- package/package.json +4 -4
package/dist/openapi/schemas.js
CHANGED
|
@@ -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
|
-
.
|
|
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.
|
|
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
|
|
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 ` +
|
|
@@ -39,12 +41,20 @@ exports.SortClauseSchema = request_schemas_1.SortClauseInput.openapi('SortClause
|
|
|
39
41
|
});
|
|
40
42
|
exports.PageSchema = request_schemas_1.PageInput.openapi('Page', {
|
|
41
43
|
description: 'The agent paginates by page number, so `offset` must be a whole multiple of `limit`. ' +
|
|
42
|
-
'Any other offset is rejected with 400 invalid_request.'
|
|
44
|
+
'Any other offset is rejected with 400 invalid_request. `limit` and `offset` are both ' +
|
|
45
|
+
'required once `page` is sent, but the object itself is optional on every list — and ' +
|
|
46
|
+
'omitting it is not a request for the whole collection. The BFF then forwards no ' +
|
|
47
|
+
'pagination, so the agent applies its own default: the first page (offset 0), a limit ' +
|
|
48
|
+
'of 15 records on the Node agent. Anything past that page is silently missing. Send ' +
|
|
49
|
+
'`page` and walk it to read a collection in full.',
|
|
43
50
|
});
|
|
44
51
|
exports.TimezoneSchema = request_schemas_1.TimezoneInput.openapi('Timezone', {
|
|
45
|
-
description: 'Used when the X-Forest-Timezone header is absent. The header wins when both are sent
|
|
46
|
-
'
|
|
47
|
-
'
|
|
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.',
|
|
48
58
|
});
|
|
49
59
|
exports.SearchSchema = request_schemas_1.SearchInput.openapi('Search', {
|
|
50
60
|
description: "The agent's native full-text search, applied on top of `filter` rather than instead of it. " +
|
|
@@ -64,51 +74,141 @@ exports.SearchExtendedSchema = request_schemas_1.SearchExtendedInput.openapi('Se
|
|
|
64
74
|
'changes nothing. It is not the only way a search reaches a relation — see `Search` for the ' +
|
|
65
75
|
'`relation.column:value` syntax, which does so without this flag.',
|
|
66
76
|
});
|
|
67
|
-
|
|
68
|
-
.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
.openapi('ListRequest');
|
|
78
|
-
exports.CountRequestSchema = zod_openapi_1.z
|
|
79
|
-
.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 = {
|
|
80
87
|
filter: ConditionTreeSchema.optional(),
|
|
81
88
|
search: exports.SearchSchema.optional(),
|
|
82
89
|
searchExtended: exports.SearchExtendedSchema.optional(),
|
|
83
90
|
timezone: exports.TimezoneSchema.optional(),
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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,
|
|
88
99
|
});
|
|
89
|
-
|
|
90
|
-
description: '
|
|
91
|
-
|
|
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}`,
|
|
92
103
|
});
|
|
93
|
-
|
|
94
|
-
|
|
104
|
+
const relationListOverrides = {
|
|
105
|
+
...listOverrides,
|
|
95
106
|
parentId: ParentIdSchema,
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
});
|
|
100
|
-
exports.RelationCountRequestSchema = exports.CountRequestSchema.extend({
|
|
107
|
+
};
|
|
108
|
+
const relationCountOverrides = {
|
|
109
|
+
...countOverrides,
|
|
101
110
|
parentId: ParentIdSchema,
|
|
102
|
-
}
|
|
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 });
|
|
103
117
|
exports.ActionRequestSchema = zod_openapi_1.z
|
|
104
|
-
.
|
|
118
|
+
.strictObject({
|
|
105
119
|
recordIds: zod_openapi_1.z.array(zod_openapi_1.z.union([zod_openapi_1.z.string(), zod_openapi_1.z.number()])),
|
|
106
120
|
values: zod_openapi_1.z.record(zod_openapi_1.z.string(), zod_openapi_1.z.unknown()).optional(),
|
|
107
121
|
timezone: exports.TimezoneSchema.optional(),
|
|
108
122
|
})
|
|
109
123
|
.openapi('ActionRequest', {
|
|
110
124
|
description: '`recordIds` is required, even on a global action: send an empty array when the action ' +
|
|
111
|
-
'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.',
|
|
112
212
|
});
|
|
113
213
|
const ForestRecordMetaSchema = zod_openapi_1.z
|
|
114
214
|
.object({
|
|
@@ -126,7 +226,12 @@ exports.ListResponseSchema = zod_openapi_1.z
|
|
|
126
226
|
})
|
|
127
227
|
.openapi('ListResponse', {
|
|
128
228
|
description: 'Records are flat, each carrying a `__forest` envelope. The list never carries a total: ' +
|
|
129
|
-
'call the count endpoint for that, which is why `countStatus` is always `not_requested`.'
|
|
229
|
+
'call the count endpoint for that, which is why `countStatus` is always `not_requested`. ' +
|
|
230
|
+
'It is always one page, not guaranteed to be the whole collection: a request that omitted ' +
|
|
231
|
+
"`page` still gets a page, the agent's default (up to 15 records from the start on the " +
|
|
232
|
+
'Node agent), so a response of exactly that default length is probably truncated, and ' +
|
|
233
|
+
'nothing in the body says so. Send `page` and walk it. Count gives the total unless the ' +
|
|
234
|
+
'collection disables it.',
|
|
130
235
|
});
|
|
131
236
|
exports.CountResponseSchema = zod_openapi_1.z
|
|
132
237
|
.union([
|
|
@@ -243,7 +348,16 @@ exports.ErrorResponseSchema = zod_openapi_1.z
|
|
|
243
348
|
details: zod_openapi_1.z.unknown().optional(),
|
|
244
349
|
}),
|
|
245
350
|
})
|
|
246
|
-
.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
|
+
});
|
|
247
361
|
exports.MessagelessErrorResponseSchema = zod_openapi_1.z
|
|
248
362
|
.object({
|
|
249
363
|
error: zod_openapi_1.z.object({
|
|
@@ -255,4 +369,4 @@ exports.MessagelessErrorResponseSchema = zod_openapi_1.z
|
|
|
255
369
|
.openapi('MessagelessErrorResponse', {
|
|
256
370
|
description: 'The unsupported-action-result body, which carries no message field unlike every other error.',
|
|
257
371
|
});
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL3NjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0VBQStEO0FBRS9ELCtDQUFrQztBQUNsQyw2REFRaUM7QUFDakMseURBQThEO0FBQzlELGlGQUF3RTtBQUV4RSxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsaUNBQVksQ0FBMEIsQ0FBQztBQTZTZiw4QkFBUztBQTNTdkQsTUFBTSx1QkFBdUIsR0FBRyxlQUFDO0tBQzlCLE1BQU0sQ0FBQztJQUNOLEtBQUssRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2pCLFFBQVEsRUFBRSxlQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMzQixLQUFLLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUM5QixDQUFDO0tBQ0QsT0FBTyxDQUFDLG1CQUFtQixFQUFFO0lBQzVCLFdBQVcsRUFDVCwwRkFBMEY7UUFDMUYscUZBQXFGO0NBQ3hGLENBQUMsQ0FBQztBQUVMLE1BQU0sbUJBQW1CLEdBQWMsZUFBQztLQUNyQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQ1QsZUFBQyxDQUFDLEtBQUssQ0FBQztJQUNOLHVCQUF1QjtJQUN2QixlQUFDLENBQUMsTUFBTSxDQUFDO1FBQ1AsVUFBVSxFQUFFLGVBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsVUFBVSxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUM7S0FDekMsQ0FBQztDQUNILENBQUMsQ0FDSDtLQUNBLE9BQU8sQ0FBQyxlQUFlLEVBQUU7SUFDeEIsV0FBVyxFQUNULHVGQUF1RjtRQUN2Rix1RkFBdUY7UUFDdkYsdUZBQXVGO1FBQ3ZGLFFBQVEseUNBQWdCLDREQUE0RDtRQUNwRiwyRkFBMkY7Q0FDOUYsQ0FBQyxDQUFDO0FBOFFJLGtE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
|
|
372
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYXBpL3NjaGVtYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0VBQStEO0FBRS9ELCtDQUFrQztBQUNsQyw2REFXaUM7QUFDakMseURBQThEO0FBQzlELGlGQUF3RTtBQUV4RSxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsaUNBQVksQ0FBMEIsQ0FBQztBQTBiZiw4QkFBUztBQXhidkQsTUFBTSx1QkFBdUIsR0FBRyxlQUFDO0tBQzlCLFlBQVksQ0FBQztJQUNaLEtBQUssRUFBRSxlQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2pCLFFBQVEsRUFBRSxlQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMzQixLQUFLLEVBQUUsZUFBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUM5QixDQUFDO0tBQ0QsT0FBTyxDQUFDLG1CQUFtQixFQUFFO0lBQzVCLFdBQVcsRUFDVCwwRkFBMEY7UUFDMUYscUZBQXFGO0NBQ3hGLENBQUMsQ0FBQztBQUVMLE1BQU0sbUJBQW1CLEdBQWMsZUFBQztLQUNyQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQ1QsZUFBQyxDQUFDLEtBQUssQ0FBQztJQUNOLHVCQUF1QjtJQUN2QixlQUFDLENBQUMsWUFBWSxDQUFDO1FBQ2IsVUFBVSxFQUFFLGVBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsVUFBVSxFQUFFLGVBQUMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUM7S0FDekMsQ0FBQztJQUNGLGVBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO0NBQ25CLENBQUMsQ0FDSDtLQUNBLE9BQU8sQ0FBQyxlQUFlLEVBQUU7SUFDeEIsV0FBVyxFQUNULDJGQUEyRjtRQUMzRiwyREFBMkQ7UUFDM0QsdUZBQXVGO1FBQ3ZGLHVGQUF1RjtRQUN2RixRQUFRLHlD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
|