@plumile/backoffice-core 0.1.168 → 0.1.170

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.
@@ -1,4 +1,4 @@
1
- import { defineBackofficeConnectionList, defineBackofficeDashboardConfig, defineBackofficeDashboardQueryWidget, defineBackofficeDashboardStaticWidget, defineBackofficeFilters, defineBackofficePicker, defineBackofficeRelationFilter, defineBackofficeSorts, datetimeFilter, entityIdFilter, enumFilter, numberFilter, } from '../builders.js';
1
+ import { defineBackofficeConnectionList, defineBackofficeDashboardConfig, defineBackofficeDashboardHrefTarget, defineBackofficeDashboardListTarget, defineBackofficeDashboardQueryWidget, defineBackofficeDashboardStaticWidget, defineBackofficeFilters, defineBackofficePicker, defineBackofficeRelationFilter, defineBackofficeSorts, datetimeFilter, entityIdFilter, enumFilter, numberFilter, } from '../builders.js';
2
2
  const label = (t) => {
3
3
  return t('common.label');
4
4
  };
@@ -108,6 +108,177 @@ defineBackofficeDashboardConfig({
108
108
  id: 'users',
109
109
  label,
110
110
  value: data.users.totalCount,
111
+ target: defineBackofficeDashboardListTarget()({
112
+ entityId: 'tasks',
113
+ state: {
114
+ where: { kind: 'A' },
115
+ sort: 'CREATED_AT_DESC',
116
+ },
117
+ }),
118
+ },
119
+ ];
120
+ },
121
+ }),
122
+ defineBackofficeDashboardStaticWidget({
123
+ id: 'window',
124
+ kind: 'windowControl',
125
+ title: label,
126
+ }),
127
+ defineBackofficeDashboardQueryWidget()({
128
+ id: 'throughput',
129
+ kind: 'trendMetric',
130
+ query: {},
131
+ variables: ({ window }) => {
132
+ return {
133
+ from: window.from,
134
+ to: window.to,
135
+ severity: 'A',
136
+ };
137
+ },
138
+ resolve: (data, context) => {
139
+ return {
140
+ label,
141
+ value: data.throughputCount,
142
+ delta: {
143
+ value: 12,
144
+ direction: 'up',
145
+ tone: 'success',
146
+ label,
147
+ },
148
+ sparkline: [{ x: '2026-01-01T00:00:00.000Z', y: 1 }],
149
+ target: defineBackofficeDashboardListTarget()({
150
+ entityId: 'tasks',
151
+ state: {
152
+ where: { kind: 'A' },
153
+ sort: 'CREATED_AT_DESC',
154
+ filters: [
155
+ { id: 'createdFrom', value: context.window.from },
156
+ { id: 'createdTo', value: context.window.to },
157
+ ],
158
+ },
159
+ }),
160
+ };
161
+ },
162
+ }),
163
+ defineBackofficeDashboardQueryWidget()({
164
+ id: 'failure-rate',
165
+ kind: 'slaGauge',
166
+ query: {},
167
+ variables: ({ window }) => {
168
+ return { from: window.from, to: window.to };
169
+ },
170
+ resolve: (data) => {
171
+ return {
172
+ label,
173
+ value: data.failureRate,
174
+ max: 1,
175
+ threshold: 0.05,
176
+ unit: '%',
177
+ tone: 'warning',
178
+ };
179
+ },
180
+ }),
181
+ defineBackofficeDashboardQueryWidget()({
182
+ id: 'top-failures',
183
+ kind: 'breakdownList',
184
+ query: {},
185
+ variables: ({ window }) => {
186
+ return { from: window.from, to: window.to };
187
+ },
188
+ resolve: (data) => {
189
+ return data.topFailures.map((failure) => {
190
+ return {
191
+ id: failure.id,
192
+ label: () => {
193
+ return failure.label;
194
+ },
195
+ value: failure.count,
196
+ tone: 'danger',
197
+ };
198
+ });
199
+ },
200
+ }),
201
+ defineBackofficeDashboardQueryWidget()({
202
+ id: 'timeline',
203
+ kind: 'timelineChart',
204
+ query: {},
205
+ variables: ({ window }) => {
206
+ return { from: window.from, to: window.to };
207
+ },
208
+ ariaLabel: label,
209
+ chart: 'bar',
210
+ resolve: (data) => {
211
+ return {
212
+ series: [
213
+ {
214
+ id: 'throughput',
215
+ label,
216
+ color: '#2563eb',
217
+ data: data.buckets.map((bucket) => {
218
+ return {
219
+ x: bucket.bucket,
220
+ y: bucket.count,
221
+ };
222
+ }),
223
+ },
224
+ ],
225
+ };
226
+ },
227
+ }),
228
+ defineBackofficeDashboardQueryWidget()({
229
+ id: 'risk-queue',
230
+ kind: 'riskQueue',
231
+ query: {},
232
+ variables: ({ window }) => {
233
+ return { from: window.from, to: window.to };
234
+ },
235
+ resolve: () => {
236
+ return [
237
+ {
238
+ id: 'dead-outbox',
239
+ label,
240
+ severity: 'danger',
241
+ value: 4,
242
+ },
243
+ ];
244
+ },
245
+ }),
246
+ defineBackofficeDashboardQueryWidget()({
247
+ id: 'spotlight',
248
+ kind: 'entitySpotlight',
249
+ query: {},
250
+ variables: ({ window }) => {
251
+ return { from: window.from, to: window.to };
252
+ },
253
+ resolve: () => {
254
+ return {
255
+ label,
256
+ title: label,
257
+ tone: 'info',
258
+ meta: [{ id: 'age', label, value: '45 min' }],
259
+ };
260
+ },
261
+ }),
262
+ defineBackofficeDashboardQueryWidget()({
263
+ id: 'health',
264
+ kind: 'healthMatrix',
265
+ query: {},
266
+ variables: ({ window }) => {
267
+ return { from: window.from, to: window.to };
268
+ },
269
+ resolve: () => {
270
+ return [
271
+ {
272
+ id: 'work',
273
+ label,
274
+ cells: [
275
+ {
276
+ id: 'tasks',
277
+ label,
278
+ value: 2,
279
+ tone: 'warning',
280
+ },
281
+ ],
111
282
  },
112
283
  ];
113
284
  },
@@ -119,7 +290,7 @@ defineBackofficeDashboardConfig({
119
290
  {
120
291
  id: 'users',
121
292
  label,
122
- href: '/users',
293
+ target: defineBackofficeDashboardHrefTarget('/users'),
123
294
  },
124
295
  ],
125
296
  }),
@@ -140,6 +311,34 @@ defineBackofficeDashboardQueryWidget()({
140
311
  ];
141
312
  },
142
313
  });
314
+ defineBackofficeDashboardQueryWidget()({
315
+ id: 'invalid-window-variables',
316
+ kind: 'trendMetric',
317
+ query: {},
318
+ variables: ({ window }) => {
319
+ return {
320
+ from: window.from,
321
+ };
322
+ },
323
+ resolve: (data) => {
324
+ return {
325
+ label,
326
+ value: data.throughputCount,
327
+ };
328
+ },
329
+ });
330
+ defineBackofficeDashboardListTarget()({
331
+ entityId: 'tasks',
332
+ state: {
333
+ where: { organizationId: 'org-1' },
334
+ },
335
+ });
336
+ defineBackofficeDashboardListTarget()({
337
+ entityId: 'tasks',
338
+ state: {
339
+ sort: 'UPDATED_AT_DESC',
340
+ },
341
+ });
143
342
  export const invalidDashboardConfig = {
144
343
  title: label,
145
344
  query: {},
@@ -249,4 +448,4 @@ defineBackofficePicker()({
249
448
  };
250
449
  },
251
450
  });
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLWJvdW5kLWNvbmZpZy50ZXN0LWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZS10ZXN0cy9vcGVyYXRpb24tYm91bmQtY29uZmlnLnRlc3QtZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLCtCQUErQixFQUMvQixvQ0FBb0MsRUFDcEMscUNBQXFDLEVBQ3JDLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsOEJBQThCLEVBQzlCLHFCQUFxQixFQUNyQixjQUFjLEVBQ2QsY0FBYyxFQUNkLFVBQVUsRUFDVixZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQTREeEIsTUFBTSxLQUFLLEdBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMzQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQXFDO0lBQzlELEVBQUUsRUFBRSxPQUFPO0lBQ1gsS0FBSztJQUNMLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFxQztJQUNyRSxFQUFFLEVBQUUsT0FBTztJQUVYLEtBQUssRUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFrQztJQUN0RCxFQUFFLEVBQUUsT0FBTztJQUNYLEtBQUs7SUFDTCxLQUFLLEVBQUUsT0FBTztDQUNmLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBa0M7SUFDN0QsRUFBRSxFQUFFLE9BQU87SUFFWCxLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQztBQUVGLE1BQU0sT0FBTyxHQUFHLHVCQUF1QixFQUFxQixDQUFDO0lBQzNELGNBQWMsQ0FDWixXQUFXLEVBQ1g7UUFDRSxNQUFN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LENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT3BlcmF0aW9uVHlwZSB9IGZyb20gJ3JlbGF5LXJ1bnRpbWUnO1xuaW1wb3J0IHtcbiAgZGVmaW5lQmFja29mZmljZUNvbm5lY3Rpb25MaXN0LFxuICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkQ29uZmlnLFxuICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkUXVlcnlXaWRnZXQsXG4gIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRTdGF0aWNXaWRnZXQsXG4gIGRlZmluZUJhY2tvZmZpY2VGaWx0ZXJzLFxuICBkZWZpbmVCYWNrb2ZmaWNlUGlja2VyLFxuICBkZWZpbmVCYWNrb2ZmaWNlUmVsYXRpb25GaWx0ZXIsXG4gIGRlZmluZUJhY2tvZmZpY2VTb3J0cyxcbiAgZGF0ZXRpbWVGaWx0ZXIsXG4gIGVudGl0eUlkRmlsdGVyLFxuICBlbnVtRmlsdGVyLFxuICBudW1iZXJGaWx0ZXIsXG59IGZyb20gJy4uL2J1aWxkZXJzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQmFja29mZmljZURhc2hib2FyZENvbmZpZyxcbiAgQmFja29mZmljZURldGFpbFRpdGxlTWV0YUl0ZW0sXG4gIEJhY2tvZmZpY2VMaXN0UmVzcG9uc2l2ZU1ldGFJdGVtLFxuICBCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmUsXG4gIEkxOG5MYWJlbCxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG50eXBlIFRlc3RTb3J0ID0gJ0NSRUFURURfQVRfQVNDJyB8ICdDUkVBVEVEX0FUX0RFU0MnO1xudHlwZSBUZXN0S2luZCA9ICdBJyB8ICdCJztcblxuaW50ZXJmYWNlIFRlc3RMaXN0T3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uVHlwZSB7XG4gIHZhcmlhYmxlczoge1xuICAgIHdoZXJlPzoge1xuICAgICAgcHJvamVjdElkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgIGtpbmQ/OiBUZXN0S2luZCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICBhdHRlbXB0PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgIGNyZWF0ZWRGcm9tPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICB9IHwgbnVsbDtcbiAgICBzb3J0PzogVGVzdFNvcnQgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgY3Vyc29yPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfTtcbiAgcmVzcG9uc2U6IHtcbiAgICByZWFkb25seSByb3dzOiByZWFkb25seSB1bmtub3duW107XG4gIH07XG59XG5cbmludGVyZmFjZSBUZXN0UGlja2VyT3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uVHlwZSB7XG4gIHZhcmlhYmxlczoge1xuICAgIHdoZXJlPzoge1xuICAgICAgb3JnYW5pemF0aW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIH0gfCBudWxsO1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgY3Vyc29yPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfTtcbiAgcmVzcG9uc2U6IHtcbiAgICByZWFkb25seSByb3dzOiByZWFkb25seSB1bmtub3duW107XG4gIH07XG59XG5cbmludGVyZmFjZSBUZXN0Q291bnRPcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb25UeXBlIHtcbiAgdmFyaWFibGVzOiB7XG4gICAgd2hlcmU/OiBCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmU8VGVzdExpc3RPcGVyYXRpb24+IHwgbnVsbDtcbiAgfTtcbiAgcmVzcG9uc2U6IHtcbiAgICByZWFkb25seSByb3dzQ291bnQ6IG51bWJlcjtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFRlc3REYXNoYm9hcmRPcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb25UeXBlIHtcbiAgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG4gIHJlc3BvbnNlOiB7XG4gICAgcmVhZG9ubHkgdXNlcnM6IHtcbiAgICAgIHJlYWRvbmx5IHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufVxuXG5jb25zdCBsYWJlbDogSTE4bkxhYmVsID0gKHQpID0+IHtcbiAgcmV0dXJuIHQoJ2NvbW1vbi5sYWJlbCcpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc3BvbnNpdmVNZXRhOiBCYWNrb2ZmaWNlTGlzdFJlc3BvbnNpdmVNZXRhSXRlbSA9IHtcbiAgaWQ6ICdzdGF0ZScsXG4gIGxhYmVsLFxuICB2YWx1ZTogJ3JlYWR5Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkUmVzcG9uc2l2ZU1ldGE6IEJhY2tvZmZpY2VMaXN0UmVzcG9uc2l2ZU1ldGFJdGVtID0ge1xuICBpZDogJ3N0YXRlJyxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciByZXNwb25zaXZlIG1ldGEgbGFiZWxzIG11c3QgYmUgaTE4biBsYWJlbCBmdW5jdGlvbnMsIG5vdCByYXcgc3RyaW5ncy5cbiAgbGFiZWw6ICdTdGF0ZScsXG4gIHZhbHVlOiAncmVhZHknLFxufTtcblxuZXhwb3J0IGNvbnN0IHRpdGxlTWV0YTogQmFja29mZmljZURldGFpbFRpdGxlTWV0YUl0ZW0gPSB7XG4gIGlkOiAnc3RhdGUnLFxuICBsYWJlbCxcbiAgdmFsdWU6ICdyZWFkeScsXG59O1xuXG5leHBvcnQgY29uc3QgaW52YWxpZFRpdGxlTWV0YTogQmFja29mZmljZURldGFpbFRpdGxlTWV0YUl0ZW0gPSB7XG4gIGlkOiAnc3RhdGUnLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIHRpdGxlIG1ldGEgbGFiZWxzIG11c3QgYmUgaTE4biBsYWJlbCBmdW5jdGlvbnMsIG5vdCByYXcgc3RyaW5ncy5cbiAgbGFiZWw6ICdTdGF0ZScsXG4gIHZhbHVlOiAncmVhZHknLFxufTtcblxuY29uc3QgZmlsdGVycyA9IGRlZmluZUJhY2tvZmZpY2VGaWx0ZXJzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFtcbiAgZW50aXR5SWRGaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ3Byb2plY3RJZCc+KFxuICAgICdwcm9qZWN0SWQnLFxuICAgIHtcbiAgICAgIGVudGl0eTogJ3Byb2plY3RzJyxcbiAgICAgIGxhYmVsLFxuICAgIH0sXG4gICksXG4gIGVudW1GaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ2tpbmQnPigna2luZCcsIHtcbiAgICBsYWJlbCxcbiAgICBvcHRpb25zOiBbJ0EnLCAnQiddLFxuICB9KSxcbiAgbnVtYmVyRmlsdGVyPEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZTxUZXN0TGlzdE9wZXJhdGlvbj4sICdhdHRlbXB0Jz4oXG4gICAgJ2F0dGVtcHQnLFxuICAgIHtcbiAgICAgIGxhYmVsLFxuICAgIH0sXG4gICksXG4gIGRhdGV0aW1lRmlsdGVyPEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZTxUZXN0TGlzdE9wZXJhdGlvbj4sICdjcmVhdGVkRnJvbSc+KFxuICAgICdjcmVhdGVkRnJvbScsXG4gICAge1xuICAgICAgbGFiZWwsXG4gICAgICBtb2RlOiAnZnJvbScsXG4gICAgfSxcbiAgKSxcbl0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlU29ydHM8VGVzdExpc3RPcGVyYXRpb24+KCkoW3sgaWQ6ICdDUkVBVEVEX0FUX0RFU0MnLCBsYWJlbCB9XSk7XG5cbmRlZmluZUJhY2tvZmZpY2VDb25uZWN0aW9uTGlzdDxUZXN0TGlzdE9wZXJhdGlvbiwgVGVzdENvdW50T3BlcmF0aW9uPigpKHtcbiAgdGl0bGU6IGxhYmVsLFxuICBxdWVyeToge30gYXMgbmV2ZXIsXG4gIGZyYWdtZW50OiB7fSBhcyBuZXZlcixcbiAgY291bnQ6IHtcbiAgICBxdWVyeToge30gYXMgbmV2ZXIsXG4gICAgYnVpbGRWYXJpYWJsZXM6ICh7IHdoZXJlIH0pID0+IHtcbiAgICAgIHJldHVybiB7IHdoZXJlIH07XG4gICAgfSxcbiAgICBnZXRDb3VudDogKGRhdGEpID0+IHtcbiAgICAgIHJldHVybiAoZGF0YSBhcyBUZXN0Q291bnRPcGVyYXRpb25bJ3Jlc3BvbnNlJ10pLnJvd3NDb3VudDtcbiAgICB9LFxuICB9LFxuICBmaWx0ZXJzLFxuICBzb3J0czogZGVmaW5lQmFja29mZmljZVNvcnRzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFtcbiAgICB7IGlkOiAnQ1JFQVRFRF9BVF9BU0MnLCBsYWJlbCB9LFxuICBdKSxcbiAgZGVmYXVsdFN0YXRlOiB7XG4gICAgd2hlcmU6IHsgcHJvamVjdElkOiAncHJvamVjdC0xJyB9LFxuICAgIHNvcnQ6ICdDUkVBVEVEX0FUX0RFU0MnLFxuICB9LFxuICBnZXRDb25uZWN0aW9uOiAoKSA9PiB7XG4gICAgcmV0dXJuIHsgZWRnZXM6IFtdIH07XG4gIH0sXG4gIHRvUm93OiAocm93KSA9PiB7XG4gICAgcmV0dXJuIHJvdztcbiAgfSxcbiAgZ2V0Um93SWQ6ICgpID0+IHtcbiAgICByZXR1cm4gJ3Jvdyc7XG4gIH0sXG4gIGNvbHVtbnM6IFtdLFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VQaWNrZXI8VGVzdFBpY2tlck9wZXJhdGlvbj4oKSh7XG4gIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgZnJhZ21lbnQ6IHt9IGFzIG5ldmVyLFxuICBnZXRDb25uZWN0aW9uOiAoKSA9PiB7XG4gICAgcmV0dXJuIHsgZWRnZXM6IFtdIH07XG4gIH0sXG4gIHRvUm93OiAoKSA9PiB7XG4gICAgcmV0dXJuIHsgaWQ6ICdyb3cnLCB0aXRsZTogJ1JvdycgfTtcbiAgfSxcbiAgZ2V0Um93SWQ6IChyb3cpID0+IHtcbiAgICByZXR1cm4gcm93LmlkO1xuICB9LFxuICBidWlsZFF1ZXJ5VmFyaWFibGVzOiAoeyBzY29wZSB9KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdoZXJlOiB7XG4gICAgICAgIG9yZ2FuaXphdGlvbklkOiBzY29wZT8ub3JnYW5pemF0aW9uSWQsXG4gICAgICB9LFxuICAgICAgY291bnQ6IDIwLFxuICAgICAgY3Vyc29yOiBudWxsLFxuICAgIH07XG4gIH0sXG59KTtcblxuZGVmaW5lQmFja29mZmljZURhc2hib2FyZENvbmZpZyh7XG4gIHRpdGxlOiBsYWJlbCxcbiAgd2lkZ2V0czogW1xuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkT3BlcmF0aW9uPigpKHtcbiAgICAgIGlkOiAndXNlcnMnLFxuICAgICAga2luZDogJ21ldHJpY0dyb3VwJyxcbiAgICAgIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgICAgIHZhcmlhYmxlczoge30sXG4gICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAndXNlcnMnLFxuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTogZGF0YS51c2Vycy50b3RhbENvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRTdGF0aWNXaWRnZXQoe1xuICAgICAgaWQ6ICdhY3Rpb25zJyxcbiAgICAgIGtpbmQ6ICdxdWlja0FjdGlvbnMnLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICd1c2VycycsXG4gICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgaHJlZjogJy91c2VycycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pLFxuICBdLFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkT3BlcmF0aW9uPigpKHtcbiAgaWQ6ICdpbnZhbGlkLXVzZXJzJyxcbiAga2luZDogJ21ldHJpY0dyb3VwJyxcbiAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICB2YXJpYWJsZXM6IHt9LFxuICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAndXNlcnMnLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBkYXNoYm9hcmQgd2lkZ2V0IHJlc29sdmUgZGF0YSBpcyB0eXBlZCBmcm9tIHRoZSBvcGVyYXRpb24gcmVzcG9uc2UuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgdmFsdWU6IGRhdGEucHJvamVjdHMudG90YWxDb3VudCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgaW52YWxpZERhc2hib2FyZENvbmZpZzogQmFja29mZmljZURhc2hib2FyZENvbmZpZyA9IHtcbiAgdGl0bGU6IGxhYmVsLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGRhc2hib2FyZCBjb25maWdzIGRvIG5vdCBzdXBwb3J0IGdsb2JhbCBxdWVyaWVzLlxuICBxdWVyeToge30gYXMgbmV2ZXIsXG4gIHdpZGdldHM6IFtdLFxufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciBkYXRhLWRyaXZlbiBkYXNoYm9hcmQgd2lkZ2V0cyBtdXN0IGRlY2xhcmUgYSBxdWVyeS5cbmRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkT3BlcmF0aW9uPigpKHtcbiAgaWQ6ICdtaXNzaW5nLXF1ZXJ5JyxcbiAga2luZDogJ21ldHJpY0dyb3VwJyxcbiAgdmFyaWFibGVzOiB7fSxcbiAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpZDogJ3VzZXJzJyxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHZhbHVlOiBkYXRhLnVzZXJzLnRvdGFsQ291bnQsXG4gICAgICB9LFxuICAgIF07XG4gIH0sXG59KTtcblxuZGVmaW5lQmFja29mZmljZVJlbGF0aW9uRmlsdGVyPFRlc3RMaXN0T3BlcmF0aW9uPigpKHtcbiAgdGFyZ2V0OiAncHJvamVjdHMnLFxuICB3aGVyZUtleTogJ3Byb2plY3RJZCcsXG59KTtcblxuZGVmaW5lQmFja29mZmljZVJlbGF0aW9uRmlsdGVyPFRlc3RMaXN0T3BlcmF0aW9uPigpKHtcbiAgdGFyZ2V0OiAncHJvamVjdHMnLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIG9yZ2FuaXphdGlvbklkIGlzIG5vdCBkZWNsYXJlZCBieSB0aGUgdGFyZ2V0IGxpc3Qgd2hlcmUgaW5wdXQuXG4gIHdoZXJlS2V5OiAnb3JnYW5pemF0aW9uSWQnLFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VGaWx0ZXJzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBtaXNzaW5nRmllbGQgaXMgbm90IGRlY2xhcmVkIGJ5IHRoZSBvcGVyYXRpb24gd2hlcmUgaW5wdXQuXG4gIGVudGl0eUlkRmlsdGVyPEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZTxUZXN0TGlzdE9wZXJhdGlvbj4sICdtaXNzaW5nRmllbGQnPihcbiAgICAnbWlzc2luZ0ZpZWxkJyxcbiAgICB7XG4gICAgICBlbnRpdHk6ICdwcm9qZWN0cycsXG4gICAgICBsYWJlbCxcbiAgICB9LFxuICApLFxuXSk7XG5cbmRlZmluZUJhY2tvZmZpY2VGaWx0ZXJzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFtcbiAgZW51bUZpbHRlcjxCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmU8VGVzdExpc3RPcGVyYXRpb24+LCAna2luZCc+KCdraW5kJywge1xuICAgIGxhYmVsLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgICdBJyxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgQyBpcyBub3QgYSB2YWxpZCBUZXN0S2luZCB2YWx1ZS5cbiAgICAgICdDJyxcbiAgICBdLFxuICB9KSxcbl0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRmlsdGVyczxUZXN0TGlzdE9wZXJhdGlvbj4oKShbXG4gIC8vIEB0cy1leHBlY3QtZXJyb3Iga2luZCBpcyBhbiBlbnVtIHN0cmluZyBmaWVsZCwgbm90IGEgbnVtYmVyIGZpZWxkLlxuICBudW1iZXJGaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ2tpbmQnPigna2luZCcsIHtcbiAgICBsYWJlbCxcbiAgfSksXG5dKTtcblxuZGVmaW5lQmFja29mZmljZUZpbHRlcnM8VGVzdExpc3RPcGVyYXRpb24+KCkoW1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIGF0dGVtcHQgaXMgYSBudW1iZXIgZmllbGQsIG5vdCBhIGRhdGV0aW1lIHN0cmluZyBmaWVsZC5cbiAgZGF0ZXRpbWVGaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ2F0dGVtcHQnPihcbiAgICAnYXR0ZW1wdCcsXG4gICAge1xuICAgICAgbGFiZWwsXG4gICAgfSxcbiAgKSxcbl0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlU29ydHM8VGVzdExpc3RPcGVyYXRpb24+KCkoW1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIFVQREFURURfQVRfREVTQyBpcyBub3QgZGVjbGFyZWQgYnkgdGhlIG9wZXJhdGlvbiBzb3J0LlxuICB7IGlkOiAnVVBEQVRFRF9BVF9ERVNDJywgbGFiZWwgfSxcbl0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlQ29ubmVjdGlvbkxpc3Q8VGVzdExpc3RPcGVyYXRpb24sIFRlc3RDb3VudE9wZXJhdGlvbj4oKSh7XG4gIHRpdGxlOiBsYWJlbCxcbiAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICBmcmFnbWVudDoge30gYXMgbmV2ZXIsXG4gIGNvdW50OiB7XG4gICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgIGJ1aWxkVmFyaWFibGVzOiAoeyB3aGVyZSB9KSA9PiB7XG4gICAgICByZXR1cm4geyB3aGVyZSB9O1xuICAgIH0sXG4gICAgZ2V0Q291bnQ6IChkYXRhKSA9PiB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgVGVzdENvdW50T3BlcmF0aW9uWydyZXNwb25zZSddKS5yb3dzQ291bnQ7XG4gICAgfSxcbiAgfSxcbiAgZmlsdGVycyxcbiAgc29ydHM6IGRlZmluZUJhY2tvZmZpY2VTb3J0czxUZXN0TGlzdE9wZXJhdGlvbj4oKShbXG4gICAgeyBpZDogJ0NSRUFURURfQVRfQVNDJywgbGFiZWwgfSxcbiAgXSksXG4gIGRlZmF1bHRTdGF0ZToge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igb3JnYW5pemF0aW9uSWQgaXMgbm90IGRlY2xhcmVkIGJ5IHRoZSBsaXN0IHdoZXJlIGlucHV0LlxuICAgIHdoZXJlOiB7IG9yZ2FuaXphdGlvbklkOiAnb3JnLTEnIH0sXG4gICAgc29ydDogJ0NSRUFURURfQVRfQVNDJyxcbiAgfSxcbiAgZ2V0Q29ubmVjdGlvbjogKCkgPT4ge1xuICAgIHJldHVybiB7IGVkZ2VzOiBbXSB9O1xuICB9LFxuICB0b1JvdzogKHJvdykgPT4ge1xuICAgIHJldHVybiByb3c7XG4gIH0sXG4gIGdldFJvd0lkOiAoKSA9PiB7XG4gICAgcmV0dXJuICdyb3cnO1xuICB9LFxuICBjb2x1bW5zOiBbXSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlUGlja2VyPFRlc3RQaWNrZXJPcGVyYXRpb24+KCkoe1xuICBxdWVyeToge30gYXMgbmV2ZXIsXG4gIGZyYWdtZW50OiB7fSBhcyBuZXZlcixcbiAgZ2V0Q29ubmVjdGlvbjogKCkgPT4ge1xuICAgIHJldHVybiB7IGVkZ2VzOiBbXSB9O1xuICB9LFxuICB0b1JvdzogKCkgPT4ge1xuICAgIHJldHVybiB7IGlkOiAncm93JywgdGl0bGU6ICdSb3cnIH07XG4gIH0sXG4gIGdldFJvd0lkOiAocm93KSA9PiB7XG4gICAgcmV0dXJuIHJvdy5pZDtcbiAgfSxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciByZXR1cm5lZCB3aGVyZSBzaGFwZSBpcyBub3QgZGVjbGFyZWQgYnkgdGhlIHBpY2tlciBvcGVyYXRpb24uXG4gIGJ1aWxkUXVlcnlWYXJpYWJsZXM6ICh7IHNjb3BlIH0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgcHJvamVjdElkOiAoc2NvcGUgYXMgeyBwcm9qZWN0SWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCk/LnByb2plY3RJZCxcbiAgICAgIH0sXG4gICAgICBjb3VudDogMjAsXG4gICAgICBjdXJzb3I6IG51bGwsXG4gICAgfTtcbiAgfSxcbn0pO1xuIl19
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLWJvdW5kLWNvbmZpZy50ZXN0LWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZS10ZXN0cy9vcGVyYXRpb24tYm91bmQtY29uZmlnLnRlc3QtZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLCtCQUErQixFQUMvQixtQ0FBbUMsRUFDbkMsbUNBQW1DLEVBQ25DLG9DQUFvQyxFQUNwQyxxQ0FBcUMsRUFDckMsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0Qiw4QkFBOEIsRUFDOUIscUJBQXFCLEVBQ3JCLGNBQWMsRUFDZCxjQUFjLEVBQ2QsVUFBVSxFQUNWLFlBQVksR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBaUZ4QixNQUFNLEtBQUssR0FBYyxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQzdCLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzNCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBcUM7SUFDOUQsRUFBRSxFQUFFLE9BQU87SUFDWCxLQUFLO0lBQ0wsS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQXFDO0lBQ3JFLEVBQUUsRUFBRSxPQUFPO0lBRVgsS0FBSyxFQUFFLE9BQU87SUFDZCxLQUFLLEVBQUUsT0FBTztDQUNmLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWtDO0lBQ3RELEVBQUUsRUFBRSxPQUFPO0lBQ1gsS0FBSztJQUNMLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFrQztJQUM3RCxFQUFFLEVBQUUsT0FBTztJQUVYLEtBQUssRUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFDO0FBRUYsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLEVBQXFCLENBQUM7SUFDM0QsY0FB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STtTQUNiLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBPcGVyYXRpb25UeXBlIH0gZnJvbSAncmVsYXktcnVudGltZSc7XG5pbXBvcnQge1xuICBkZWZpbmVCYWNrb2ZmaWNlQ29ubmVjdGlvbkxpc3QsXG4gIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRDb25maWcsXG4gIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRIcmVmVGFyZ2V0LFxuICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkTGlzdFRhcmdldCxcbiAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZFF1ZXJ5V2lkZ2V0LFxuICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkU3RhdGljV2lkZ2V0LFxuICBkZWZpbmVCYWNrb2ZmaWNlRmlsdGVycyxcbiAgZGVmaW5lQmFja29mZmljZVBpY2tlcixcbiAgZGVmaW5lQmFja29mZmljZVJlbGF0aW9uRmlsdGVyLFxuICBkZWZpbmVCYWNrb2ZmaWNlU29ydHMsXG4gIGRhdGV0aW1lRmlsdGVyLFxuICBlbnRpdHlJZEZpbHRlcixcbiAgZW51bUZpbHRlcixcbiAgbnVtYmVyRmlsdGVyLFxufSBmcm9tICcuLi9idWlsZGVycy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEJhY2tvZmZpY2VEYXNoYm9hcmRDb25maWcsXG4gIEJhY2tvZmZpY2VEZXRhaWxUaXRsZU1ldGFJdGVtLFxuICBCYWNrb2ZmaWNlTGlzdFJlc3BvbnNpdmVNZXRhSXRlbSxcbiAgQmFja29mZmljZU9wZXJhdGlvbldoZXJlLFxuICBJMThuTGFiZWwsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcblxudHlwZSBUZXN0U29ydCA9ICdDUkVBVEVEX0FUX0FTQycgfCAnQ1JFQVRFRF9BVF9ERVNDJztcbnR5cGUgVGVzdEtpbmQgPSAnQScgfCAnQic7XG5cbmludGVyZmFjZSBUZXN0TGlzdE9wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvblR5cGUge1xuICB2YXJpYWJsZXM6IHtcbiAgICB3aGVyZT86IHtcbiAgICAgIHByb2plY3RJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICBraW5kPzogVGVzdEtpbmQgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgICAgYXR0ZW1wdD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICBjcmVhdGVkRnJvbT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgfSB8IG51bGw7XG4gICAgc29ydD86IFRlc3RTb3J0IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIGN1cnNvcj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH07XG4gIHJlc3BvbnNlOiB7XG4gICAgcmVhZG9ubHkgcm93czogcmVhZG9ubHkgdW5rbm93bltdO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgVGVzdFBpY2tlck9wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvblR5cGUge1xuICB2YXJpYWJsZXM6IHtcbiAgICB3aGVyZT86IHtcbiAgICAgIG9yZ2FuaXphdGlvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICB9IHwgbnVsbDtcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIGN1cnNvcj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH07XG4gIHJlc3BvbnNlOiB7XG4gICAgcmVhZG9ubHkgcm93czogcmVhZG9ubHkgdW5rbm93bltdO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgVGVzdENvdW50T3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uVHlwZSB7XG4gIHZhcmlhYmxlczoge1xuICAgIHdoZXJlPzogQmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiB8IG51bGw7XG4gIH07XG4gIHJlc3BvbnNlOiB7XG4gICAgcmVhZG9ubHkgcm93c0NvdW50OiBudW1iZXI7XG4gIH07XG59XG5cbmludGVyZmFjZSBUZXN0RGFzaGJvYXJkT3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uVHlwZSB7XG4gIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuICByZXNwb25zZToge1xuICAgIHJlYWRvbmx5IHVzZXJzOiB7XG4gICAgICByZWFkb25seSB0b3RhbENvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFRlc3REYXNoYm9hcmRXaW5kb3dPcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb25UeXBlIHtcbiAgdmFyaWFibGVzOiB7XG4gICAgZnJvbTogc3RyaW5nO1xuICAgIHRvOiBzdHJpbmc7XG4gICAgc2V2ZXJpdHk/OiBUZXN0S2luZCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH07XG4gIHJlc3BvbnNlOiB7XG4gICAgcmVhZG9ubHkgdGhyb3VnaHB1dENvdW50OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgZmFpbHVyZVJhdGU6IG51bWJlcjtcbiAgICByZWFkb25seSB0b3BGYWlsdXJlczogcmVhZG9ubHkge1xuICAgICAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG4gICAgICByZWFkb25seSBjb3VudDogbnVtYmVyO1xuICAgIH1bXTtcbiAgICByZWFkb25seSBidWNrZXRzOiByZWFkb25seSB7XG4gICAgICByZWFkb25seSBidWNrZXQ6IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IGNvdW50OiBudW1iZXI7XG4gICAgfVtdO1xuICB9O1xufVxuXG5jb25zdCBsYWJlbDogSTE4bkxhYmVsID0gKHQpID0+IHtcbiAgcmV0dXJuIHQoJ2NvbW1vbi5sYWJlbCcpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc3BvbnNpdmVNZXRhOiBCYWNrb2ZmaWNlTGlzdFJlc3BvbnNpdmVNZXRhSXRlbSA9IHtcbiAgaWQ6ICdzdGF0ZScsXG4gIGxhYmVsLFxuICB2YWx1ZTogJ3JlYWR5Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkUmVzcG9uc2l2ZU1ldGE6IEJhY2tvZmZpY2VMaXN0UmVzcG9uc2l2ZU1ldGFJdGVtID0ge1xuICBpZDogJ3N0YXRlJyxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciByZXNwb25zaXZlIG1ldGEgbGFiZWxzIG11c3QgYmUgaTE4biBsYWJlbCBmdW5jdGlvbnMsIG5vdCByYXcgc3RyaW5ncy5cbiAgbGFiZWw6ICdTdGF0ZScsXG4gIHZhbHVlOiAncmVhZHknLFxufTtcblxuZXhwb3J0IGNvbnN0IHRpdGxlTWV0YTogQmFja29mZmljZURldGFpbFRpdGxlTWV0YUl0ZW0gPSB7XG4gIGlkOiAnc3RhdGUnLFxuICBsYWJlbCxcbiAgdmFsdWU6ICdyZWFkeScsXG59O1xuXG5leHBvcnQgY29uc3QgaW52YWxpZFRpdGxlTWV0YTogQmFja29mZmljZURldGFpbFRpdGxlTWV0YUl0ZW0gPSB7XG4gIGlkOiAnc3RhdGUnLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIHRpdGxlIG1ldGEgbGFiZWxzIG11c3QgYmUgaTE4biBsYWJlbCBmdW5jdGlvbnMsIG5vdCByYXcgc3RyaW5ncy5cbiAgbGFiZWw6ICdTdGF0ZScsXG4gIHZhbHVlOiAncmVhZHknLFxufTtcblxuY29uc3QgZmlsdGVycyA9IGRlZmluZUJhY2tvZmZpY2VGaWx0ZXJzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFtcbiAgZW50aXR5SWRGaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ3Byb2plY3RJZCc+KFxuICAgICdwcm9qZWN0SWQnLFxuICAgIHtcbiAgICAgIGVudGl0eTogJ3Byb2plY3RzJyxcbiAgICAgIGxhYmVsLFxuICAgIH0sXG4gICksXG4gIGVudW1GaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ2tpbmQnPigna2luZCcsIHtcbiAgICBsYWJlbCxcbiAgICBvcHRpb25zOiBbJ0EnLCAnQiddLFxuICB9KSxcbiAgbnVtYmVyRmlsdGVyPEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZTxUZXN0TGlzdE9wZXJhdGlvbj4sICdhdHRlbXB0Jz4oXG4gICAgJ2F0dGVtcHQnLFxuICAgIHtcbiAgICAgIGxhYmVsLFxuICAgIH0sXG4gICksXG4gIGRhdGV0aW1lRmlsdGVyPEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZTxUZXN0TGlzdE9wZXJhdGlvbj4sICdjcmVhdGVkRnJvbSc+KFxuICAgICdjcmVhdGVkRnJvbScsXG4gICAge1xuICAgICAgbGFiZWwsXG4gICAgICBtb2RlOiAnZnJvbScsXG4gICAgfSxcbiAgKSxcbl0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlU29ydHM8VGVzdExpc3RPcGVyYXRpb24+KCkoW3sgaWQ6ICdDUkVBVEVEX0FUX0RFU0MnLCBsYWJlbCB9XSk7XG5cbmRlZmluZUJhY2tvZmZpY2VDb25uZWN0aW9uTGlzdDxUZXN0TGlzdE9wZXJhdGlvbiwgVGVzdENvdW50T3BlcmF0aW9uPigpKHtcbiAgdGl0bGU6IGxhYmVsLFxuICBxdWVyeToge30gYXMgbmV2ZXIsXG4gIGZyYWdtZW50OiB7fSBhcyBuZXZlcixcbiAgY291bnQ6IHtcbiAgICBxdWVyeToge30gYXMgbmV2ZXIsXG4gICAgYnVpbGRWYXJpYWJsZXM6ICh7IHdoZXJlIH0pID0+IHtcbiAgICAgIHJldHVybiB7IHdoZXJlIH07XG4gICAgfSxcbiAgICBnZXRDb3VudDogKGRhdGEpID0+IHtcbiAgICAgIHJldHVybiAoZGF0YSBhcyBUZXN0Q291bnRPcGVyYXRpb25bJ3Jlc3BvbnNlJ10pLnJvd3NDb3VudDtcbiAgICB9LFxuICB9LFxuICBmaWx0ZXJzLFxuICBzb3J0czogZGVmaW5lQmFja29mZmljZVNvcnRzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFtcbiAgICB7IGlkOiAnQ1JFQVRFRF9BVF9BU0MnLCBsYWJlbCB9LFxuICBdKSxcbiAgZGVmYXVsdFN0YXRlOiB7XG4gICAgd2hlcmU6IHsgcHJvamVjdElkOiAncHJvamVjdC0xJyB9LFxuICAgIHNvcnQ6ICdDUkVBVEVEX0FUX0RFU0MnLFxuICB9LFxuICBnZXRDb25uZWN0aW9uOiAoKSA9PiB7XG4gICAgcmV0dXJuIHsgZWRnZXM6IFtdIH07XG4gIH0sXG4gIHRvUm93OiAocm93KSA9PiB7XG4gICAgcmV0dXJuIHJvdztcbiAgfSxcbiAgZ2V0Um93SWQ6ICgpID0+IHtcbiAgICByZXR1cm4gJ3Jvdyc7XG4gIH0sXG4gIGNvbHVtbnM6IFtdLFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VQaWNrZXI8VGVzdFBpY2tlck9wZXJhdGlvbj4oKSh7XG4gIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgZnJhZ21lbnQ6IHt9IGFzIG5ldmVyLFxuICBnZXRDb25uZWN0aW9uOiAoKSA9PiB7XG4gICAgcmV0dXJuIHsgZWRnZXM6IFtdIH07XG4gIH0sXG4gIHRvUm93OiAoKSA9PiB7XG4gICAgcmV0dXJuIHsgaWQ6ICdyb3cnLCB0aXRsZTogJ1JvdycgfTtcbiAgfSxcbiAgZ2V0Um93SWQ6IChyb3cpID0+IHtcbiAgICByZXR1cm4gcm93LmlkO1xuICB9LFxuICBidWlsZFF1ZXJ5VmFyaWFibGVzOiAoeyBzY29wZSB9KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdoZXJlOiB7XG4gICAgICAgIG9yZ2FuaXphdGlvbklkOiBzY29wZT8ub3JnYW5pemF0aW9uSWQsXG4gICAgICB9LFxuICAgICAgY291bnQ6IDIwLFxuICAgICAgY3Vyc29yOiBudWxsLFxuICAgIH07XG4gIH0sXG59KTtcblxuZGVmaW5lQmFja29mZmljZURhc2hib2FyZENvbmZpZyh7XG4gIHRpdGxlOiBsYWJlbCxcbiAgd2lkZ2V0czogW1xuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkT3BlcmF0aW9uPigpKHtcbiAgICAgIGlkOiAndXNlcnMnLFxuICAgICAga2luZDogJ21ldHJpY0dyb3VwJyxcbiAgICAgIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgICAgIHZhcmlhYmxlczoge30sXG4gICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAndXNlcnMnLFxuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTogZGF0YS51c2Vycy50b3RhbENvdW50LFxuICAgICAgICAgICAgdGFyZ2V0OiBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkTGlzdFRhcmdldDxUZXN0TGlzdE9wZXJhdGlvbj4oKSh7XG4gICAgICAgICAgICAgIGVudGl0eUlkOiAndGFza3MnLFxuICAgICAgICAgICAgICBzdGF0ZToge1xuICAgICAgICAgICAgICAgIHdoZXJlOiB7IGtpbmQ6ICdBJyB9LFxuICAgICAgICAgICAgICAgIHNvcnQ6ICdDUkVBVEVEX0FUX0RFU0MnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZFN0YXRpY1dpZGdldCh7XG4gICAgICBpZDogJ3dpbmRvdycsXG4gICAgICBraW5kOiAnd2luZG93Q29udHJvbCcsXG4gICAgICB0aXRsZTogbGFiZWwsXG4gICAgfSksXG4gICAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZFF1ZXJ5V2lkZ2V0PFRlc3REYXNoYm9hcmRXaW5kb3dPcGVyYXRpb24+KCkoe1xuICAgICAgaWQ6ICd0aHJvdWdocHV0JyxcbiAgICAgIGtpbmQ6ICd0cmVuZE1ldHJpYycsXG4gICAgICBxdWVyeToge30gYXMgbmV2ZXIsXG4gICAgICB2YXJpYWJsZXM6ICh7IHdpbmRvdyB9KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZnJvbTogd2luZG93LmZyb20sXG4gICAgICAgICAgdG86IHdpbmRvdy50byxcbiAgICAgICAgICBzZXZlcml0eTogJ0EnLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IChkYXRhLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgdmFsdWU6IGRhdGEudGhyb3VnaHB1dENvdW50LFxuICAgICAgICAgIGRlbHRhOiB7XG4gICAgICAgICAgICB2YWx1ZTogMTIsXG4gICAgICAgICAgICBkaXJlY3Rpb246ICd1cCcsXG4gICAgICAgICAgICB0b25lOiAnc3VjY2VzcycsXG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNwYXJrbGluZTogW3sgeDogJzIwMjYtMDEtMDFUMDA6MDA6MDAuMDAwWicsIHk6IDEgfV0sXG4gICAgICAgICAgdGFyZ2V0OiBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkTGlzdFRhcmdldDxUZXN0TGlzdE9wZXJhdGlvbj4oKSh7XG4gICAgICAgICAgICBlbnRpdHlJZDogJ3Rhc2tzJyxcbiAgICAgICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgICAgIHdoZXJlOiB7IGtpbmQ6ICdBJyB9LFxuICAgICAgICAgICAgICBzb3J0OiAnQ1JFQVRFRF9BVF9ERVNDJyxcbiAgICAgICAgICAgICAgZmlsdGVyczogW1xuICAgICAgICAgICAgICAgIHsgaWQ6ICdjcmVhdGVkRnJvbScsIHZhbHVlOiBjb250ZXh0LndpbmRvdy5mcm9tIH0sXG4gICAgICAgICAgICAgICAgeyBpZDogJ2NyZWF0ZWRUbycsIHZhbHVlOiBjb250ZXh0LndpbmRvdy50byB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZFF1ZXJ5V2lkZ2V0PFRlc3REYXNoYm9hcmRXaW5kb3dPcGVyYXRpb24+KCkoe1xuICAgICAgaWQ6ICdmYWlsdXJlLXJhdGUnLFxuICAgICAga2luZDogJ3NsYUdhdWdlJyxcbiAgICAgIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgICAgIHZhcmlhYmxlczogKHsgd2luZG93IH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHsgZnJvbTogd2luZG93LmZyb20sIHRvOiB3aW5kb3cudG8gfTtcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIHZhbHVlOiBkYXRhLmZhaWx1cmVSYXRlLFxuICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDAuMDUsXG4gICAgICAgICAgdW5pdDogJyUnLFxuICAgICAgICAgIHRvbmU6ICd3YXJuaW5nJyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZFF1ZXJ5V2lkZ2V0PFRlc3REYXNoYm9hcmRXaW5kb3dPcGVyYXRpb24+KCkoe1xuICAgICAgaWQ6ICd0b3AtZmFpbHVyZXMnLFxuICAgICAga2luZDogJ2JyZWFrZG93bkxpc3QnLFxuICAgICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgICAgdmFyaWFibGVzOiAoeyB3aW5kb3cgfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBmcm9tOiB3aW5kb3cuZnJvbSwgdG86IHdpbmRvdy50byB9O1xuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBkYXRhLnRvcEZhaWx1cmVzLm1hcCgoZmFpbHVyZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogZmFpbHVyZS5pZCxcbiAgICAgICAgICAgIGxhYmVsOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlLmxhYmVsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiBmYWlsdXJlLmNvdW50LFxuICAgICAgICAgICAgdG9uZTogJ2RhbmdlcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkV2luZG93T3BlcmF0aW9uPigpKHtcbiAgICAgIGlkOiAndGltZWxpbmUnLFxuICAgICAga2luZDogJ3RpbWVsaW5lQ2hhcnQnLFxuICAgICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgICAgdmFyaWFibGVzOiAoeyB3aW5kb3cgfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBmcm9tOiB3aW5kb3cuZnJvbSwgdG86IHdpbmRvdy50byB9O1xuICAgICAgfSxcbiAgICAgIGFyaWFMYWJlbDogbGFiZWwsXG4gICAgICBjaGFydDogJ2JhcicsXG4gICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlcmllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ3Rocm91Z2hwdXQnLFxuICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgY29sb3I6ICcjMjU2M2ViJyxcbiAgICAgICAgICAgICAgZGF0YTogZGF0YS5idWNrZXRzLm1hcCgoYnVja2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIHg6IGJ1Y2tldC5idWNrZXQsXG4gICAgICAgICAgICAgICAgICB5OiBidWNrZXQuY291bnQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkV2luZG93T3BlcmF0aW9uPigpKHtcbiAgICAgIGlkOiAncmlzay1xdWV1ZScsXG4gICAgICBraW5kOiAncmlza1F1ZXVlJyxcbiAgICAgIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgICAgIHZhcmlhYmxlczogKHsgd2luZG93IH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHsgZnJvbTogd2luZG93LmZyb20sIHRvOiB3aW5kb3cudG8gfTtcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdkZWFkLW91dGJveCcsXG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnZGFuZ2VyJyxcbiAgICAgICAgICAgIHZhbHVlOiA0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkV2luZG93T3BlcmF0aW9uPigpKHtcbiAgICAgIGlkOiAnc3BvdGxpZ2h0JyxcbiAgICAgIGtpbmQ6ICdlbnRpdHlTcG90bGlnaHQnLFxuICAgICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgICAgdmFyaWFibGVzOiAoeyB3aW5kb3cgfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBmcm9tOiB3aW5kb3cuZnJvbSwgdG86IHdpbmRvdy50byB9O1xuICAgICAgfSxcbiAgICAgIHJlc29sdmU6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICB0aXRsZTogbGFiZWwsXG4gICAgICAgICAgdG9uZTogJ2luZm8nLFxuICAgICAgICAgIG1ldGE6IFt7IGlkOiAnYWdlJywgbGFiZWwsIHZhbHVlOiAnNDUgbWluJyB9XSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZFF1ZXJ5V2lkZ2V0PFRlc3REYXNoYm9hcmRXaW5kb3dPcGVyYXRpb24+KCkoe1xuICAgICAgaWQ6ICdoZWFsdGgnLFxuICAgICAga2luZDogJ2hlYWx0aE1hdHJpeCcsXG4gICAgICBxdWVyeToge30gYXMgbmV2ZXIsXG4gICAgICB2YXJpYWJsZXM6ICh7IHdpbmRvdyB9KSA9PiB7XG4gICAgICAgIHJldHVybiB7IGZyb206IHdpbmRvdy5mcm9tLCB0bzogd2luZG93LnRvIH07XG4gICAgICB9LFxuICAgICAgcmVzb2x2ZTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnd29yaycsXG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIGNlbGxzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogJ3Rhc2tzJyxcbiAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICAgICAgICB0b25lOiAnd2FybmluZycsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRTdGF0aWNXaWRnZXQoe1xuICAgICAgaWQ6ICdhY3Rpb25zJyxcbiAgICAgIGtpbmQ6ICdxdWlja0FjdGlvbnMnLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICd1c2VycycsXG4gICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgdGFyZ2V0OiBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkSHJlZlRhcmdldCgnL3VzZXJzJyksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pLFxuICBdLFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkT3BlcmF0aW9uPigpKHtcbiAgaWQ6ICdpbnZhbGlkLXVzZXJzJyxcbiAga2luZDogJ21ldHJpY0dyb3VwJyxcbiAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICB2YXJpYWJsZXM6IHt9LFxuICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAndXNlcnMnLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBkYXNoYm9hcmQgd2lkZ2V0IHJlc29sdmUgZGF0YSBpcyB0eXBlZCBmcm9tIHRoZSBvcGVyYXRpb24gcmVzcG9uc2UuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgdmFsdWU6IGRhdGEucHJvamVjdHMudG90YWxDb3VudCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkUXVlcnlXaWRnZXQ8VGVzdERhc2hib2FyZFdpbmRvd09wZXJhdGlvbj4oKSh7XG4gIGlkOiAnaW52YWxpZC13aW5kb3ctdmFyaWFibGVzJyxcbiAga2luZDogJ3RyZW5kTWV0cmljJyxcbiAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGRhc2hib2FyZCB3aWRnZXQgdmFyaWFibGVzIG11c3QgbWF0Y2ggdGhlIG9wZXJhdGlvbiB2YXJpYWJsZXMuXG4gIHZhcmlhYmxlczogKHsgd2luZG93IH0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogd2luZG93LmZyb20sXG4gICAgfTtcbiAgfSxcbiAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWwsXG4gICAgICB2YWx1ZTogZGF0YS50aHJvdWdocHV0Q291bnQsXG4gICAgfTtcbiAgfSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkTGlzdFRhcmdldDxUZXN0TGlzdE9wZXJhdGlvbj4oKSh7XG4gIGVudGl0eUlkOiAndGFza3MnLFxuICBzdGF0ZToge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZGFzaGJvYXJkIGxpc3QgdGFyZ2V0IHdoZXJlIG11c3QgbWF0Y2ggdGhlIHRhcmdldCBsaXN0IG9wZXJhdGlvbiB3aGVyZSBpbnB1dC5cbiAgICB3aGVyZTogeyBvcmdhbml6YXRpb25JZDogJ29yZy0xJyB9LFxuICB9LFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRMaXN0VGFyZ2V0PFRlc3RMaXN0T3BlcmF0aW9uPigpKHtcbiAgZW50aXR5SWQ6ICd0YXNrcycsXG4gIHN0YXRlOiB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBkYXNoYm9hcmQgbGlzdCB0YXJnZXQgc29ydCBtdXN0IG1hdGNoIHRoZSB0YXJnZXQgbGlzdCBvcGVyYXRpb24gc29ydCBpbnB1dC5cbiAgICBzb3J0OiAnVVBEQVRFRF9BVF9ERVNDJyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgaW52YWxpZERhc2hib2FyZENvbmZpZzogQmFja29mZmljZURhc2hib2FyZENvbmZpZyA9IHtcbiAgdGl0bGU6IGxhYmVsLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGRhc2hib2FyZCBjb25maWdzIGRvIG5vdCBzdXBwb3J0IGdsb2JhbCBxdWVyaWVzLlxuICBxdWVyeToge30gYXMgbmV2ZXIsXG4gIHdpZGdldHM6IFtdLFxufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciBkYXRhLWRyaXZlbiBkYXNoYm9hcmQgd2lkZ2V0cyBtdXN0IGRlY2xhcmUgYSBxdWVyeS5cbmRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkT3BlcmF0aW9uPigpKHtcbiAgaWQ6ICdtaXNzaW5nLXF1ZXJ5JyxcbiAga2luZDogJ21ldHJpY0dyb3VwJyxcbiAgdmFyaWFibGVzOiB7fSxcbiAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpZDogJ3VzZXJzJyxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHZhbHVlOiBkYXRhLnVzZXJzLnRvdGFsQ291bnQsXG4gICAgICB9LFxuICAgIF07XG4gIH0sXG59KTtcblxuZGVmaW5lQmFja29mZmljZVJlbGF0aW9uRmlsdGVyPFRlc3RMaXN0T3BlcmF0aW9uPigpKHtcbiAgdGFyZ2V0OiAncHJvamVjdHMnLFxuICB3aGVyZUtleTogJ3Byb2plY3RJZCcsXG59KTtcblxuZGVmaW5lQmFja29mZmljZVJlbGF0aW9uRmlsdGVyPFRlc3RMaXN0T3BlcmF0aW9uPigpKHtcbiAgdGFyZ2V0OiAncHJvamVjdHMnLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIG9yZ2FuaXphdGlvbklkIGlzIG5vdCBkZWNsYXJlZCBieSB0aGUgdGFyZ2V0IGxpc3Qgd2hlcmUgaW5wdXQuXG4gIHdoZXJlS2V5OiAnb3JnYW5pemF0aW9uSWQnLFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VGaWx0ZXJzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBtaXNzaW5nRmllbGQgaXMgbm90IGRlY2xhcmVkIGJ5IHRoZSBvcGVyYXRpb24gd2hlcmUgaW5wdXQuXG4gIGVudGl0eUlkRmlsdGVyPEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZTxUZXN0TGlzdE9wZXJhdGlvbj4sICdtaXNzaW5nRmllbGQnPihcbiAgICAnbWlzc2luZ0ZpZWxkJyxcbiAgICB7XG4gICAgICBlbnRpdHk6ICdwcm9qZWN0cycsXG4gICAgICBsYWJlbCxcbiAgICB9LFxuICApLFxuXSk7XG5cbmRlZmluZUJhY2tvZmZpY2VGaWx0ZXJzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFtcbiAgZW51bUZpbHRlcjxCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmU8VGVzdExpc3RPcGVyYXRpb24+LCAna2luZCc+KCdraW5kJywge1xuICAgIGxhYmVsLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgICdBJyxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgQyBpcyBub3QgYSB2YWxpZCBUZXN0S2luZCB2YWx1ZS5cbiAgICAgICdDJyxcbiAgICBdLFxuICB9KSxcbl0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRmlsdGVyczxUZXN0TGlzdE9wZXJhdGlvbj4oKShbXG4gIC8vIEB0cy1leHBlY3QtZXJyb3Iga2luZCBpcyBhbiBlbnVtIHN0cmluZyBmaWVsZCwgbm90IGEgbnVtYmVyIGZpZWxkLlxuICBudW1iZXJGaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ2tpbmQnPigna2luZCcsIHtcbiAgICBsYWJlbCxcbiAgfSksXG5dKTtcblxuZGVmaW5lQmFja29mZmljZUZpbHRlcnM8VGVzdExpc3RPcGVyYXRpb24+KCkoW1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIGF0dGVtcHQgaXMgYSBudW1iZXIgZmllbGQsIG5vdCBhIGRhdGV0aW1lIHN0cmluZyBmaWVsZC5cbiAgZGF0ZXRpbWVGaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ2F0dGVtcHQnPihcbiAgICAnYXR0ZW1wdCcsXG4gICAge1xuICAgICAgbGFiZWwsXG4gICAgfSxcbiAgKSxcbl0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlU29ydHM8VGVzdExpc3RPcGVyYXRpb24+KCkoW1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIFVQREFURURfQVRfREVTQyBpcyBub3QgZGVjbGFyZWQgYnkgdGhlIG9wZXJhdGlvbiBzb3J0LlxuICB7IGlkOiAnVVBEQVRFRF9BVF9ERVNDJywgbGFiZWwgfSxcbl0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlQ29ubmVjdGlvbkxpc3Q8VGVzdExpc3RPcGVyYXRpb24sIFRlc3RDb3VudE9wZXJhdGlvbj4oKSh7XG4gIHRpdGxlOiBsYWJlbCxcbiAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICBmcmFnbWVudDoge30gYXMgbmV2ZXIsXG4gIGNvdW50OiB7XG4gICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgIGJ1aWxkVmFyaWFibGVzOiAoeyB3aGVyZSB9KSA9PiB7XG4gICAgICByZXR1cm4geyB3aGVyZSB9O1xuICAgIH0sXG4gICAgZ2V0Q291bnQ6IChkYXRhKSA9PiB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgVGVzdENvdW50T3BlcmF0aW9uWydyZXNwb25zZSddKS5yb3dzQ291bnQ7XG4gICAgfSxcbiAgfSxcbiAgZmlsdGVycyxcbiAgc29ydHM6IGRlZmluZUJhY2tvZmZpY2VTb3J0czxUZXN0TGlzdE9wZXJhdGlvbj4oKShbXG4gICAgeyBpZDogJ0NSRUFURURfQVRfQVNDJywgbGFiZWwgfSxcbiAgXSksXG4gIGRlZmF1bHRTdGF0ZToge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igb3JnYW5pemF0aW9uSWQgaXMgbm90IGRlY2xhcmVkIGJ5IHRoZSBsaXN0IHdoZXJlIGlucHV0LlxuICAgIHdoZXJlOiB7IG9yZ2FuaXphdGlvbklkOiAnb3JnLTEnIH0sXG4gICAgc29ydDogJ0NSRUFURURfQVRfQVNDJyxcbiAgfSxcbiAgZ2V0Q29ubmVjdGlvbjogKCkgPT4ge1xuICAgIHJldHVybiB7IGVkZ2VzOiBbXSB9O1xuICB9LFxuICB0b1JvdzogKHJvdykgPT4ge1xuICAgIHJldHVybiByb3c7XG4gIH0sXG4gIGdldFJvd0lkOiAoKSA9PiB7XG4gICAgcmV0dXJuICdyb3cnO1xuICB9LFxuICBjb2x1bW5zOiBbXSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlUGlja2VyPFRlc3RQaWNrZXJPcGVyYXRpb24+KCkoe1xuICBxdWVyeToge30gYXMgbmV2ZXIsXG4gIGZyYWdtZW50OiB7fSBhcyBuZXZlcixcbiAgZ2V0Q29ubmVjdGlvbjogKCkgPT4ge1xuICAgIHJldHVybiB7IGVkZ2VzOiBbXSB9O1xuICB9LFxuICB0b1JvdzogKCkgPT4ge1xuICAgIHJldHVybiB7IGlkOiAncm93JywgdGl0bGU6ICdSb3cnIH07XG4gIH0sXG4gIGdldFJvd0lkOiAocm93KSA9PiB7XG4gICAgcmV0dXJuIHJvdy5pZDtcbiAgfSxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciByZXR1cm5lZCB3aGVyZSBzaGFwZSBpcyBub3QgZGVjbGFyZWQgYnkgdGhlIHBpY2tlciBvcGVyYXRpb24uXG4gIGJ1aWxkUXVlcnlWYXJpYWJsZXM6ICh7IHNjb3BlIH0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgcHJvamVjdElkOiAoc2NvcGUgYXMgeyBwcm9qZWN0SWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCk/LnByb2plY3RJZCxcbiAgICAgIH0sXG4gICAgICBjb3VudDogMjAsXG4gICAgICBjdXJzb3I6IG51bGwsXG4gICAgfTtcbiAgfSxcbn0pO1xuIl19
@@ -217,6 +217,8 @@ export type BackofficeDetailPageRouteSpec<LayoutView = unknown> = {
217
217
  export type BackofficeDashboardConfig = {
218
218
  title: I18nLabel;
219
219
  subtitle?: I18nLabel;
220
+ windowPresets?: readonly BackofficeDashboardWindowPreset[];
221
+ defaultWindowPresetId?: string;
220
222
  widgets: readonly BackofficeDashboardWidget[];
221
223
  };
222
224
  export type BackofficeQuerySpec<TOperation extends OperationType> = {
@@ -242,6 +244,20 @@ export type BackofficeDashboardWidgetLayout = {
242
244
  order?: number;
243
245
  };
244
246
  export type BackofficeDashboardWidgetPriority = 'critical' | 'high' | 'normal' | 'low' | 'primary' | 'secondary' | 'debug';
247
+ export type BackofficeDashboardWindowPreset = {
248
+ id: string;
249
+ label: I18nLabel;
250
+ durationMs: number;
251
+ };
252
+ export type BackofficeDashboardWindowState = {
253
+ id: string;
254
+ label: I18nLabel;
255
+ from: string;
256
+ to: string;
257
+ };
258
+ export type BackofficeDashboardContext = {
259
+ window: BackofficeDashboardWindowState;
260
+ };
245
261
  export type BackofficeDashboardWidgetBase = {
246
262
  id: string;
247
263
  title?: I18nLabel;
@@ -251,19 +267,41 @@ export type BackofficeDashboardWidgetBase = {
251
267
  priority?: BackofficeDashboardWidgetPriority;
252
268
  minHeight?: 'sm' | 'md' | 'lg';
253
269
  };
270
+ export type BackofficeDashboardWidgetResolver<TResult> = (data: OperationType['response'], context: BackofficeDashboardContext) => TResult;
254
271
  export type BackofficeDashboardEntityCountResult = {
255
272
  count: number | null;
273
+ href?: string;
274
+ target?: BackofficeDashboardLinkTarget;
256
275
  };
257
276
  export type BackofficeDashboardTablePreviewResult = {
258
277
  columns: readonly BackofficeColumnSpec[];
259
278
  rows: readonly unknown[];
260
279
  };
280
+ export type BackofficeDashboardListTargetState<Where extends Record<string, unknown> = Record<string, unknown>, Sort extends string = string> = {
281
+ where?: Where | null;
282
+ sort?: Sort | null;
283
+ filters?: readonly {
284
+ id: string;
285
+ value: unknown;
286
+ }[];
287
+ };
288
+ export type BackofficeDashboardHrefTarget = {
289
+ kind: 'href';
290
+ href: string;
291
+ };
292
+ export type BackofficeDashboardEntityListTarget<Where extends Record<string, unknown> = Record<string, unknown>, Sort extends string = string> = {
293
+ kind: 'entity-list';
294
+ entityId: string;
295
+ state?: BackofficeDashboardListTargetState<Where, Sort>;
296
+ };
297
+ export type BackofficeDashboardLinkTarget<Where extends Record<string, unknown> = Record<string, unknown>, Sort extends string = string> = BackofficeDashboardHrefTarget | BackofficeDashboardEntityListTarget<Where, Sort>;
261
298
  export type BackofficeDashboardStatusSummaryResult = readonly {
262
299
  id: string;
263
300
  label: I18nLabel;
264
301
  value: string | number | null;
265
302
  tone?: BackofficeBadgeTone;
266
303
  href?: string;
304
+ target?: BackofficeDashboardLinkTarget;
267
305
  }[];
268
306
  export type BackofficeDashboardMetricGroupResult = readonly {
269
307
  id: string;
@@ -272,6 +310,90 @@ export type BackofficeDashboardMetricGroupResult = readonly {
272
310
  meta?: I18nLabel;
273
311
  tone?: 'neutral' | 'info' | 'success' | 'warning' | 'danger';
274
312
  href?: string;
313
+ target?: BackofficeDashboardLinkTarget;
314
+ }[];
315
+ export type BackofficeDashboardMetricTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
316
+ export type BackofficeDashboardTrendDirection = 'up' | 'down' | 'flat';
317
+ export type BackofficeDashboardSparklinePoint = {
318
+ x: string;
319
+ y: number;
320
+ };
321
+ export type BackofficeDashboardTrendMetricResult = {
322
+ label: I18nLabel;
323
+ value: string | number | null;
324
+ unit?: string;
325
+ delta?: {
326
+ value: string | number;
327
+ direction: BackofficeDashboardTrendDirection;
328
+ tone?: BackofficeDashboardMetricTone;
329
+ label?: I18nLabel;
330
+ };
331
+ sparkline?: readonly BackofficeDashboardSparklinePoint[];
332
+ href?: string;
333
+ target?: BackofficeDashboardLinkTarget;
334
+ tone?: BackofficeDashboardMetricTone;
335
+ };
336
+ export type BackofficeDashboardSlaGaugeResult = {
337
+ label: I18nLabel;
338
+ value: number | null;
339
+ max: number;
340
+ threshold?: number;
341
+ unit?: string;
342
+ tone?: BackofficeDashboardMetricTone;
343
+ href?: string;
344
+ target?: BackofficeDashboardLinkTarget;
345
+ };
346
+ export type BackofficeDashboardBreakdownListResult = readonly {
347
+ id: string;
348
+ label: I18nLabel;
349
+ value: string | number | null;
350
+ meta?: I18nLabel;
351
+ tone?: BackofficeDashboardMetricTone;
352
+ href?: string;
353
+ target?: BackofficeDashboardLinkTarget;
354
+ }[];
355
+ export type BackofficeDashboardTimelineChartResult = {
356
+ series: readonly {
357
+ id: string;
358
+ label: I18nLabel;
359
+ color: string;
360
+ unit?: string;
361
+ data: readonly BackofficeDashboardSparklinePoint[];
362
+ }[];
363
+ emptyLabel?: I18nLabel;
364
+ };
365
+ export type BackofficeDashboardRiskQueueResult = readonly {
366
+ id: string;
367
+ label: I18nLabel;
368
+ severity: BackofficeDashboardMetricTone;
369
+ value?: string | number | null;
370
+ meta?: I18nLabel;
371
+ href?: string;
372
+ target?: BackofficeDashboardLinkTarget;
373
+ }[];
374
+ export type BackofficeDashboardEntitySpotlightResult = {
375
+ label: I18nLabel;
376
+ title: I18nLabel;
377
+ meta?: readonly {
378
+ id: string;
379
+ label: I18nLabel;
380
+ value: string | number | null;
381
+ }[];
382
+ href?: string;
383
+ target?: BackofficeDashboardLinkTarget;
384
+ tone?: BackofficeDashboardMetricTone;
385
+ } | null;
386
+ export type BackofficeDashboardHealthMatrixResult = readonly {
387
+ id: string;
388
+ label: I18nLabel;
389
+ cells: readonly {
390
+ id: string;
391
+ label: I18nLabel;
392
+ value: string | number | null;
393
+ tone?: BackofficeDashboardMetricTone;
394
+ href?: string;
395
+ target?: BackofficeDashboardLinkTarget;
396
+ }[];
275
397
  }[];
276
398
  export type BackofficeDashboardBillingUsageChartResult = {
277
399
  currency: string;
@@ -287,9 +409,10 @@ export type BackofficeDashboardBillingUsageChartResult = {
287
409
  export type BackofficeDashboardWidgetQuerySource<TOperation extends OperationType, TResult> = {
288
410
  dataSource: 'query';
289
411
  query: GraphQLTaggedNode;
290
- variables: TOperation['variables'];
291
- resolve: (data: TOperation['response']) => TResult;
412
+ variables: TOperation['variables'] | ((context: BackofficeDashboardContext) => TOperation['variables']);
413
+ resolve: (data: TOperation['response'], context: BackofficeDashboardContext) => TResult;
292
414
  };
415
+ export type BackofficeDashboardWidgetVariables<TOperation extends OperationType = OperationType> = TOperation['variables'] | ((context: BackofficeDashboardContext) => TOperation['variables']);
293
416
  export type BackofficeDashboardWidgetStaticSource = {
294
417
  dataSource: 'static';
295
418
  };
@@ -299,8 +422,8 @@ export type BackofficeDashboardWidget = (BackofficeDashboardWidgetBase & {
299
422
  label: I18nLabel;
300
423
  entityId: string;
301
424
  query: GraphQLTaggedNode;
302
- variables: OperationType['variables'];
303
- resolve: (data: OperationType['response']) => BackofficeDashboardEntityCountResult;
425
+ variables: BackofficeDashboardWidgetVariables;
426
+ resolve: BackofficeDashboardWidgetResolver<BackofficeDashboardEntityCountResult>;
304
427
  }) | (BackofficeDashboardWidgetBase & {
305
428
  dataSource: 'static';
306
429
  kind: 'shortcut';
@@ -311,14 +434,14 @@ export type BackofficeDashboardWidget = (BackofficeDashboardWidgetBase & {
311
434
  kind: 'tablePreview';
312
435
  title: I18nLabel;
313
436
  query: GraphQLTaggedNode;
314
- variables: OperationType['variables'];
315
- resolve: (data: OperationType['response']) => BackofficeDashboardTablePreviewResult;
437
+ variables: BackofficeDashboardWidgetVariables;
438
+ resolve: BackofficeDashboardWidgetResolver<BackofficeDashboardTablePreviewResult>;
316
439
  }) | (BackofficeDashboardWidgetBase & {
317
440
  dataSource: 'query';
318
441
  kind: 'statusSummary';
319
442
  query: GraphQLTaggedNode;
320
- variables: OperationType['variables'];
321
- resolve: (data: OperationType['response']) => BackofficeDashboardStatusSummaryResult;
443
+ variables: BackofficeDashboardWidgetVariables;
444
+ resolve: BackofficeDashboardWidgetResolver<BackofficeDashboardStatusSummaryResult>;
322
445
  }) | (BackofficeDashboardWidgetBase & {
323
446
  dataSource: 'static';
324
447
  kind: 'recentItems';
@@ -329,7 +452,8 @@ export type BackofficeDashboardWidget = (BackofficeDashboardWidgetBase & {
329
452
  actions: readonly {
330
453
  id: string;
331
454
  label: I18nLabel;
332
- href: string;
455
+ href?: string;
456
+ target?: BackofficeDashboardLinkTarget;
333
457
  description?: I18nLabel;
334
458
  tone?: 'default' | 'primary' | 'danger';
335
459
  }[];
@@ -337,14 +461,14 @@ export type BackofficeDashboardWidget = (BackofficeDashboardWidgetBase & {
337
461
  dataSource: 'query';
338
462
  kind: 'metricGroup';
339
463
  query: GraphQLTaggedNode;
340
- variables: OperationType['variables'];
341
- resolve: (data: OperationType['response']) => BackofficeDashboardMetricGroupResult;
464
+ variables: BackofficeDashboardWidgetVariables;
465
+ resolve: BackofficeDashboardWidgetResolver<BackofficeDashboardMetricGroupResult>;
342
466
  }) | (BackofficeDashboardWidgetBase & {
343
467
  dataSource: 'query';
344
468
  kind: 'billingUsageChart';
345
469
  title: I18nLabel;
346
470
  query: GraphQLTaggedNode;
347
- variables: OperationType['variables'];
471
+ variables: BackofficeDashboardWidgetVariables;
348
472
  categories: readonly {
349
473
  id: string;
350
474
  label: I18nLabel;
@@ -353,7 +477,55 @@ export type BackofficeDashboardWidget = (BackofficeDashboardWidgetBase & {
353
477
  emptyLabel: I18nLabel;
354
478
  rangePrefix: I18nLabel;
355
479
  ariaLabel: I18nLabel;
356
- resolve: (data: OperationType['response']) => BackofficeDashboardBillingUsageChartResult;
480
+ resolve: BackofficeDashboardWidgetResolver<BackofficeDashboardBillingUsageChartResult>;
481
+ }) | (BackofficeDashboardWidgetBase & {
482
+ dataSource: 'query';
483
+ kind: 'trendMetric';
484
+ query: GraphQLTaggedNode;
485
+ variables: BackofficeDashboardWidgetVariables;
486
+ resolve: BackofficeDashboardWidgetResolver<BackofficeDashboardTrendMetricResult>;
487
+ }) | (BackofficeDashboardWidgetBase & {
488
+ dataSource: 'query';
489
+ kind: 'slaGauge';
490
+ query: GraphQLTaggedNode;
491
+ variables: BackofficeDashboardWidgetVariables;
492
+ resolve: BackofficeDashboardWidgetResolver<BackofficeDashboardSlaGaugeResult>;
493
+ }) | (BackofficeDashboardWidgetBase & {
494
+ dataSource: 'query';
495
+ kind: 'breakdownList';
496
+ query: GraphQLTaggedNode;
497
+ variables: BackofficeDashboardWidgetVariables;
498
+ resolve: BackofficeDashboardWidgetResolver<BackofficeDashboardBreakdownListResult>;
499
+ }) | (BackofficeDashboardWidgetBase & {
500
+ dataSource: 'query';
501
+ kind: 'timelineChart';
502
+ query: GraphQLTaggedNode;
503
+ variables: BackofficeDashboardWidgetVariables;
504
+ chart?: 'line' | 'bar';
505
+ ariaLabel: I18nLabel;
506
+ resolve: BackofficeDashboardWidgetResolver<BackofficeDashboardTimelineChartResult>;
507
+ }) | (BackofficeDashboardWidgetBase & {
508
+ dataSource: 'query';
509
+ kind: 'riskQueue';
510
+ query: GraphQLTaggedNode;
511
+ variables: BackofficeDashboardWidgetVariables;
512
+ resolve: BackofficeDashboardWidgetResolver<BackofficeDashboardRiskQueueResult>;
513
+ }) | (BackofficeDashboardWidgetBase & {
514
+ dataSource: 'query';
515
+ kind: 'entitySpotlight';
516
+ query: GraphQLTaggedNode;
517
+ variables: BackofficeDashboardWidgetVariables;
518
+ resolve: BackofficeDashboardWidgetResolver<BackofficeDashboardEntitySpotlightResult>;
519
+ }) | (BackofficeDashboardWidgetBase & {
520
+ dataSource: 'static';
521
+ kind: 'windowControl';
522
+ title: I18nLabel;
523
+ }) | (BackofficeDashboardWidgetBase & {
524
+ dataSource: 'query';
525
+ kind: 'healthMatrix';
526
+ query: GraphQLTaggedNode;
527
+ variables: BackofficeDashboardWidgetVariables;
528
+ resolve: BackofficeDashboardWidgetResolver<BackofficeDashboardHealthMatrixResult>;
357
529
  }) | (BackofficeDashboardWidgetBase & {
358
530
  dataSource: 'static';
359
531
  kind: 'textBlock';
@@ -1093,7 +1265,7 @@ export type BackofficeRuntimeOperation = OperationType & {
1093
1265
  response: unknown;
1094
1266
  };
1095
1267
  export type BackofficeRuntimeListFacetConfig = BackofficeListFacetConfig<any, any, any, any, Record<string, any>, any>;
1096
- export type BackofficeRuntimePickerFacetConfig = BackofficePickerFacetConfig<any, any, any, any, Record<string, any>>;
1268
+ export type BackofficeRuntimePickerFacetConfig = BackofficePickerFacetConfig<any, any, any, any, Record<string, any>, any>;
1097
1269
  export type BackofficeLoadedEntityFacetModule = BackofficeLoadedListFacetModule | BackofficeLoadedPickerFacetModule | BackofficeLoadedDetailLayoutFacetModule | BackofficeLoadedDetailPageFacetModule | BackofficeLoadedToolFacetModule;
1098
1270
  export type BackofficeListFacetLoader = () => Promise<BackofficeLoadedListFacetModule>;
1099
1271
  export type BackofficePickerFacetLoader = () => Promise<BackofficeLoadedPickerFacetModule>;