@trigger.dev/core 4.5.10 → 4.5.11
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/dist/commonjs/v3/apiClient/index.d.ts +15 -3
- package/dist/commonjs/v3/apiClient/index.js +3 -4
- package/dist/commonjs/v3/apiClient/index.js.map +1 -1
- package/dist/commonjs/v3/apiClient/runStream.d.ts +6 -0
- package/dist/commonjs/v3/apiClient/runStream.js +7 -0
- package/dist/commonjs/v3/apiClient/runStream.js.map +1 -1
- package/dist/commonjs/v3/schemas/api.d.ts +45 -0
- package/dist/commonjs/v3/schemas/api.js +10 -0
- package/dist/commonjs/v3/schemas/api.js.map +1 -1
- package/dist/commonjs/v3/schemas/build.d.ts +18 -0
- package/dist/commonjs/v3/schemas/index.d.ts +1 -0
- package/dist/commonjs/v3/schemas/index.js +1 -0
- package/dist/commonjs/v3/schemas/index.js.map +1 -1
- package/dist/commonjs/v3/schemas/messages.d.ts +9 -0
- package/dist/commonjs/v3/schemas/reports.d.ts +833 -0
- package/dist/commonjs/v3/schemas/reports.js +134 -0
- package/dist/commonjs/v3/schemas/reports.js.map +1 -0
- package/dist/commonjs/v3/schemas/resources.d.ts +12 -0
- package/dist/commonjs/v3/schemas/schemas.d.ts +20 -0
- package/dist/commonjs/v3/schemas/schemas.js +8 -1
- package/dist/commonjs/v3/schemas/schemas.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/v3/apiClient/index.d.ts +15 -3
- package/dist/esm/v3/apiClient/index.js +4 -5
- package/dist/esm/v3/apiClient/index.js.map +1 -1
- package/dist/esm/v3/apiClient/runStream.d.ts +6 -0
- package/dist/esm/v3/apiClient/runStream.js +7 -0
- package/dist/esm/v3/apiClient/runStream.js.map +1 -1
- package/dist/esm/v3/runEngineWorker/workload/schemas.d.ts +54 -54
- package/dist/esm/v3/schemas/api.d.ts +45 -0
- package/dist/esm/v3/schemas/api.js +10 -0
- package/dist/esm/v3/schemas/api.js.map +1 -1
- package/dist/esm/v3/schemas/build.d.ts +18 -0
- package/dist/esm/v3/schemas/index.d.ts +1 -0
- package/dist/esm/v3/schemas/index.js +1 -0
- package/dist/esm/v3/schemas/index.js.map +1 -1
- package/dist/esm/v3/schemas/messages.d.ts +9 -0
- package/dist/esm/v3/schemas/reports.d.ts +833 -0
- package/dist/esm/v3/schemas/reports.js +131 -0
- package/dist/esm/v3/schemas/reports.js.map +1 -0
- package/dist/esm/v3/schemas/resources.d.ts +12 -0
- package/dist/esm/v3/schemas/schemas.d.ts +20 -0
- package/dist/esm/v3/schemas/schemas.js +7 -0
- package/dist/esm/v3/schemas/schemas.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,833 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** A positive integer plus `m`, `h`, `d` or `w`, capped at 90d. Reports bucket by whole minutes. */
|
|
3
|
+
export declare const ReportPeriodSchema: z.ZodEffects<z.ZodString, string, string>;
|
|
4
|
+
export type ReportPeriod = z.infer<typeof ReportPeriodSchema>;
|
|
5
|
+
/** The response encodings the endpoint can render. `json` returns a `ReportViewModel`. */
|
|
6
|
+
export declare const ReportFormatSchema: z.ZodEnum<["markdown", "json", "ansi"]>;
|
|
7
|
+
export type ReportFormat = z.infer<typeof ReportFormatSchema>;
|
|
8
|
+
export declare const ReportSeveritySchema: z.ZodEnum<["ok", "warn", "crit"]>;
|
|
9
|
+
export type ReportSeverity = z.infer<typeof ReportSeveritySchema>;
|
|
10
|
+
export declare const ReportUnitSchema: z.ZodEnum<["ms", "count", "ratio", "perMin"]>;
|
|
11
|
+
export type ReportUnit = z.infer<typeof ReportUnitSchema>;
|
|
12
|
+
/** A code resolved to a human string by the renderer's message table. */
|
|
13
|
+
export declare const ReportReasonCodeSchema: z.ZodString;
|
|
14
|
+
export type ReportReasonCode = z.infer<typeof ReportReasonCodeSchema>;
|
|
15
|
+
/** A key into `ReportViewModel.links`, so a recommendation can point at a URL. */
|
|
16
|
+
export declare const ReportLinkKeySchema: z.ZodString;
|
|
17
|
+
export type ReportLinkKey = z.infer<typeof ReportLinkKeySchema>;
|
|
18
|
+
export declare const ReportDeltaSchema: z.ZodObject<{
|
|
19
|
+
dir: z.ZodEnum<["up", "down", "flat"]>;
|
|
20
|
+
/** rounded value/normal multiplier; renderer decides whether to print "6×". */
|
|
21
|
+
mult: z.ZodOptional<z.ZodNumber>;
|
|
22
|
+
}, "strip", z.ZodTypeAny, {
|
|
23
|
+
dir: "down" | "flat" | "up";
|
|
24
|
+
mult?: number | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
dir: "down" | "flat" | "up";
|
|
27
|
+
mult?: number | undefined;
|
|
28
|
+
}>;
|
|
29
|
+
export type ReportDelta = z.infer<typeof ReportDeltaSchema>;
|
|
30
|
+
export declare const ReportMetricSeriesSchema: z.ZodObject<{
|
|
31
|
+
points: z.ZodArray<z.ZodNumber, "many">;
|
|
32
|
+
/** "estimated" = a proxy (e.g. pending backlog), shown informational-only. */
|
|
33
|
+
kind: z.ZodEnum<["measured", "estimated"]>;
|
|
34
|
+
}, "strip", z.ZodTypeAny, {
|
|
35
|
+
points: number[];
|
|
36
|
+
kind: "estimated" | "measured";
|
|
37
|
+
}, {
|
|
38
|
+
points: number[];
|
|
39
|
+
kind: "estimated" | "measured";
|
|
40
|
+
}>;
|
|
41
|
+
export type ReportMetricSeries = z.infer<typeof ReportMetricSeriesSchema>;
|
|
42
|
+
export declare const ReportMetricSchema: z.ZodObject<{
|
|
43
|
+
/** A code, e.g. "start_latency_p95"; the messages map turns it into the label. */
|
|
44
|
+
id: z.ZodString;
|
|
45
|
+
value: z.ZodNumber;
|
|
46
|
+
unit: z.ZodEnum<["ms", "count", "ratio", "perMin"]>;
|
|
47
|
+
aggregation: z.ZodOptional<z.ZodEnum<["p95", "rate", "ratio", "count"]>>;
|
|
48
|
+
/** baseline; renderer formats "(normal ~7s)". */
|
|
49
|
+
normal: z.ZodOptional<z.ZodNumber>;
|
|
50
|
+
delta: z.ZodOptional<z.ZodObject<{
|
|
51
|
+
dir: z.ZodEnum<["up", "down", "flat"]>;
|
|
52
|
+
/** rounded value/normal multiplier; renderer decides whether to print "6×". */
|
|
53
|
+
mult: z.ZodOptional<z.ZodNumber>;
|
|
54
|
+
}, "strip", z.ZodTypeAny, {
|
|
55
|
+
dir: "down" | "flat" | "up";
|
|
56
|
+
mult?: number | undefined;
|
|
57
|
+
}, {
|
|
58
|
+
dir: "down" | "flat" | "up";
|
|
59
|
+
mult?: number | undefined;
|
|
60
|
+
}>>;
|
|
61
|
+
series: z.ZodOptional<z.ZodObject<{
|
|
62
|
+
points: z.ZodArray<z.ZodNumber, "many">;
|
|
63
|
+
/** "estimated" = a proxy (e.g. pending backlog), shown informational-only. */
|
|
64
|
+
kind: z.ZodEnum<["measured", "estimated"]>;
|
|
65
|
+
}, "strip", z.ZodTypeAny, {
|
|
66
|
+
points: number[];
|
|
67
|
+
kind: "estimated" | "measured";
|
|
68
|
+
}, {
|
|
69
|
+
points: number[];
|
|
70
|
+
kind: "estimated" | "measured";
|
|
71
|
+
}>>;
|
|
72
|
+
/** named sub-values for composite metrics (e.g. throughput { done, triggered }). */
|
|
73
|
+
breakdown: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
74
|
+
/** shown on a cause line INSTEAD of "(normal ~x)", e.g. "pinned 40 of last 60 min". */
|
|
75
|
+
annotation: z.ZodOptional<z.ZodObject<{
|
|
76
|
+
code: z.ZodString;
|
|
77
|
+
value: z.ZodOptional<z.ZodNumber>;
|
|
78
|
+
}, "strip", z.ZodTypeAny, {
|
|
79
|
+
code: string;
|
|
80
|
+
value?: number | undefined;
|
|
81
|
+
}, {
|
|
82
|
+
code: string;
|
|
83
|
+
value?: number | undefined;
|
|
84
|
+
}>>;
|
|
85
|
+
/** "unknown" means `value` is a placeholder a consumer must not read as real. Absent = measured. */
|
|
86
|
+
availability: z.ZodOptional<z.ZodEnum<["measured", "unknown"]>>;
|
|
87
|
+
severity: z.ZodEnum<["ok", "warn", "crit"]>;
|
|
88
|
+
}, "strip", z.ZodTypeAny, {
|
|
89
|
+
id: string;
|
|
90
|
+
value: number;
|
|
91
|
+
unit: "count" | "ms" | "perMin" | "ratio";
|
|
92
|
+
aggregation?: "count" | "p95" | "rate" | "ratio" | undefined;
|
|
93
|
+
normal?: number | undefined;
|
|
94
|
+
delta?: {
|
|
95
|
+
dir: "down" | "flat" | "up";
|
|
96
|
+
mult?: number | undefined;
|
|
97
|
+
} | undefined;
|
|
98
|
+
series?: {
|
|
99
|
+
points: number[];
|
|
100
|
+
kind: "estimated" | "measured";
|
|
101
|
+
} | undefined;
|
|
102
|
+
breakdown?: Record<string, number> | undefined;
|
|
103
|
+
annotation?: {
|
|
104
|
+
code: string;
|
|
105
|
+
value?: number | undefined;
|
|
106
|
+
} | undefined;
|
|
107
|
+
availability?: "measured" | "unknown" | undefined;
|
|
108
|
+
severity: "crit" | "ok" | "warn";
|
|
109
|
+
}, {
|
|
110
|
+
id: string;
|
|
111
|
+
value: number;
|
|
112
|
+
unit: "count" | "ms" | "perMin" | "ratio";
|
|
113
|
+
aggregation?: "count" | "p95" | "rate" | "ratio" | undefined;
|
|
114
|
+
normal?: number | undefined;
|
|
115
|
+
delta?: {
|
|
116
|
+
dir: "down" | "flat" | "up";
|
|
117
|
+
mult?: number | undefined;
|
|
118
|
+
} | undefined;
|
|
119
|
+
series?: {
|
|
120
|
+
points: number[];
|
|
121
|
+
kind: "estimated" | "measured";
|
|
122
|
+
} | undefined;
|
|
123
|
+
breakdown?: Record<string, number> | undefined;
|
|
124
|
+
annotation?: {
|
|
125
|
+
code: string;
|
|
126
|
+
value?: number | undefined;
|
|
127
|
+
} | undefined;
|
|
128
|
+
availability?: "measured" | "unknown" | undefined;
|
|
129
|
+
severity: "crit" | "ok" | "warn";
|
|
130
|
+
}>;
|
|
131
|
+
export type ReportMetric = z.infer<typeof ReportMetricSchema>;
|
|
132
|
+
export declare const ReportRecommendationSchema: z.ZodObject<{
|
|
133
|
+
code: z.ZodString;
|
|
134
|
+
link: z.ZodOptional<z.ZodString>;
|
|
135
|
+
}, "strip", z.ZodTypeAny, {
|
|
136
|
+
code: string;
|
|
137
|
+
link?: string | undefined;
|
|
138
|
+
}, {
|
|
139
|
+
code: string;
|
|
140
|
+
link?: string | undefined;
|
|
141
|
+
}>;
|
|
142
|
+
export type ReportRecommendation = z.infer<typeof ReportRecommendationSchema>;
|
|
143
|
+
/** A footer line: an action, or the "do nothing" option (carries value). */
|
|
144
|
+
export declare const ReportFooterEntrySchema: z.ZodObject<{
|
|
145
|
+
code: z.ZodString;
|
|
146
|
+
link: z.ZodOptional<z.ZodString>;
|
|
147
|
+
/** a computed fact (e.g. drainMinutes), never invented. */
|
|
148
|
+
value: z.ZodOptional<z.ZodNumber>;
|
|
149
|
+
}, "strip", z.ZodTypeAny, {
|
|
150
|
+
code: string;
|
|
151
|
+
link?: string | undefined;
|
|
152
|
+
value?: number | undefined;
|
|
153
|
+
}, {
|
|
154
|
+
code: string;
|
|
155
|
+
link?: string | undefined;
|
|
156
|
+
value?: number | undefined;
|
|
157
|
+
}>;
|
|
158
|
+
export type ReportFooterEntry = z.infer<typeof ReportFooterEntrySchema>;
|
|
159
|
+
/** A ruled-out cause + its evidence, e.g. "not your code" (never emitted without evidence). */
|
|
160
|
+
export declare const ReportExclusionSchema: z.ZodObject<{
|
|
161
|
+
code: z.ZodString;
|
|
162
|
+
evidence: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
163
|
+
}, "strip", z.ZodTypeAny, {
|
|
164
|
+
code: string;
|
|
165
|
+
evidence?: Record<string, number> | undefined;
|
|
166
|
+
}, {
|
|
167
|
+
code: string;
|
|
168
|
+
evidence?: Record<string, number> | undefined;
|
|
169
|
+
}>;
|
|
170
|
+
export type ReportExclusion = z.infer<typeof ReportExclusionSchema>;
|
|
171
|
+
/** A measured fact backing the verdict. `ReportExclusion` states what the problem isn't. */
|
|
172
|
+
export declare const ReportObservationSchema: z.ZodObject<{
|
|
173
|
+
code: z.ZodString;
|
|
174
|
+
evidence: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
175
|
+
}, "strip", z.ZodTypeAny, {
|
|
176
|
+
code: string;
|
|
177
|
+
evidence?: Record<string, number> | undefined;
|
|
178
|
+
}, {
|
|
179
|
+
code: string;
|
|
180
|
+
evidence?: Record<string, number> | undefined;
|
|
181
|
+
}>;
|
|
182
|
+
export type ReportObservation = z.infer<typeof ReportObservationSchema>;
|
|
183
|
+
export declare const ReportFindingSchema: z.ZodObject<{
|
|
184
|
+
/** "flow" | "execution" | "liveness" | future "infrastructure" | "billing" */
|
|
185
|
+
type: z.ZodString;
|
|
186
|
+
severity: z.ZodEnum<["ok", "warn", "crit"]>;
|
|
187
|
+
/** Code for the state or cause, e.g. "env_limit_saturation" | "healthy". */
|
|
188
|
+
reason: z.ZodString;
|
|
189
|
+
/** Code for the "read:" line. Built last, may span findings. */
|
|
190
|
+
read: z.ZodOptional<z.ZodString>;
|
|
191
|
+
/** metric ids this finding covers, in causal order when degraded. */
|
|
192
|
+
metricIds: z.ZodArray<z.ZodString, "many">;
|
|
193
|
+
/** A single primary action. */
|
|
194
|
+
recommendation: z.ZodOptional<z.ZodObject<{
|
|
195
|
+
code: z.ZodString;
|
|
196
|
+
link: z.ZodOptional<z.ZodString>;
|
|
197
|
+
}, "strip", z.ZodTypeAny, {
|
|
198
|
+
code: string;
|
|
199
|
+
link?: string | undefined;
|
|
200
|
+
}, {
|
|
201
|
+
code: string;
|
|
202
|
+
link?: string | undefined;
|
|
203
|
+
}>>;
|
|
204
|
+
/** optional parenthetical — same shape as recommendation. */
|
|
205
|
+
hedge: z.ZodOptional<z.ZodObject<{
|
|
206
|
+
code: z.ZodString;
|
|
207
|
+
link: z.ZodOptional<z.ZodString>;
|
|
208
|
+
}, "strip", z.ZodTypeAny, {
|
|
209
|
+
code: string;
|
|
210
|
+
link?: string | undefined;
|
|
211
|
+
}, {
|
|
212
|
+
code: string;
|
|
213
|
+
link?: string | undefined;
|
|
214
|
+
}>>;
|
|
215
|
+
/** contiguous breach window of the driving metric -> "(last 40 min)". */
|
|
216
|
+
anomalyWindow: z.ZodOptional<z.ZodObject<{
|
|
217
|
+
minutes: z.ZodNumber;
|
|
218
|
+
touchesEnd: z.ZodBoolean;
|
|
219
|
+
}, "strip", z.ZodTypeAny, {
|
|
220
|
+
minutes: number;
|
|
221
|
+
touchesEnd: boolean;
|
|
222
|
+
}, {
|
|
223
|
+
minutes: number;
|
|
224
|
+
touchesEnd: boolean;
|
|
225
|
+
}>>;
|
|
226
|
+
/** Which dimension and key own the problem. `of` is the denominator label the renderer prints. */
|
|
227
|
+
attribution: z.ZodOptional<z.ZodObject<{
|
|
228
|
+
dim: z.ZodString;
|
|
229
|
+
key: z.ZodString;
|
|
230
|
+
share: z.ZodNumber;
|
|
231
|
+
of: z.ZodString;
|
|
232
|
+
}, "strip", z.ZodTypeAny, {
|
|
233
|
+
dim: string;
|
|
234
|
+
key: string;
|
|
235
|
+
share: number;
|
|
236
|
+
of: string;
|
|
237
|
+
}, {
|
|
238
|
+
dim: string;
|
|
239
|
+
key: string;
|
|
240
|
+
share: number;
|
|
241
|
+
of: string;
|
|
242
|
+
}>>;
|
|
243
|
+
/** Ruled-out causes and evidence, rendered under the `read:` line. */
|
|
244
|
+
exclusions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
245
|
+
code: z.ZodString;
|
|
246
|
+
evidence: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
247
|
+
}, "strip", z.ZodTypeAny, {
|
|
248
|
+
code: string;
|
|
249
|
+
evidence?: Record<string, number> | undefined;
|
|
250
|
+
}, {
|
|
251
|
+
code: string;
|
|
252
|
+
evidence?: Record<string, number> | undefined;
|
|
253
|
+
}>, "many">>;
|
|
254
|
+
/** Supporting facts, rendered under the `read:` line after the exclusions. */
|
|
255
|
+
observations: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
256
|
+
code: z.ZodString;
|
|
257
|
+
evidence: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
258
|
+
}, "strip", z.ZodTypeAny, {
|
|
259
|
+
code: string;
|
|
260
|
+
evidence?: Record<string, number> | undefined;
|
|
261
|
+
}, {
|
|
262
|
+
code: string;
|
|
263
|
+
evidence?: Record<string, number> | undefined;
|
|
264
|
+
}>, "many">>;
|
|
265
|
+
}, "strip", z.ZodTypeAny, {
|
|
266
|
+
type: string;
|
|
267
|
+
severity: "crit" | "ok" | "warn";
|
|
268
|
+
reason: string;
|
|
269
|
+
read?: string | undefined;
|
|
270
|
+
metricIds: string[];
|
|
271
|
+
recommendation?: {
|
|
272
|
+
code: string;
|
|
273
|
+
link?: string | undefined;
|
|
274
|
+
} | undefined;
|
|
275
|
+
hedge?: {
|
|
276
|
+
code: string;
|
|
277
|
+
link?: string | undefined;
|
|
278
|
+
} | undefined;
|
|
279
|
+
anomalyWindow?: {
|
|
280
|
+
minutes: number;
|
|
281
|
+
touchesEnd: boolean;
|
|
282
|
+
} | undefined;
|
|
283
|
+
attribution?: {
|
|
284
|
+
dim: string;
|
|
285
|
+
key: string;
|
|
286
|
+
share: number;
|
|
287
|
+
of: string;
|
|
288
|
+
} | undefined;
|
|
289
|
+
exclusions?: {
|
|
290
|
+
code: string;
|
|
291
|
+
evidence?: Record<string, number> | undefined;
|
|
292
|
+
}[] | undefined;
|
|
293
|
+
observations?: {
|
|
294
|
+
code: string;
|
|
295
|
+
evidence?: Record<string, number> | undefined;
|
|
296
|
+
}[] | undefined;
|
|
297
|
+
}, {
|
|
298
|
+
type: string;
|
|
299
|
+
severity: "crit" | "ok" | "warn";
|
|
300
|
+
reason: string;
|
|
301
|
+
read?: string | undefined;
|
|
302
|
+
metricIds: string[];
|
|
303
|
+
recommendation?: {
|
|
304
|
+
code: string;
|
|
305
|
+
link?: string | undefined;
|
|
306
|
+
} | undefined;
|
|
307
|
+
hedge?: {
|
|
308
|
+
code: string;
|
|
309
|
+
link?: string | undefined;
|
|
310
|
+
} | undefined;
|
|
311
|
+
anomalyWindow?: {
|
|
312
|
+
minutes: number;
|
|
313
|
+
touchesEnd: boolean;
|
|
314
|
+
} | undefined;
|
|
315
|
+
attribution?: {
|
|
316
|
+
dim: string;
|
|
317
|
+
key: string;
|
|
318
|
+
share: number;
|
|
319
|
+
of: string;
|
|
320
|
+
} | undefined;
|
|
321
|
+
exclusions?: {
|
|
322
|
+
code: string;
|
|
323
|
+
evidence?: Record<string, number> | undefined;
|
|
324
|
+
}[] | undefined;
|
|
325
|
+
observations?: {
|
|
326
|
+
code: string;
|
|
327
|
+
evidence?: Record<string, number> | undefined;
|
|
328
|
+
}[] | undefined;
|
|
329
|
+
}>;
|
|
330
|
+
export type ReportFinding = z.infer<typeof ReportFindingSchema>;
|
|
331
|
+
export declare const ReportSummaryStatementSchema: z.ZodObject<{
|
|
332
|
+
findingType: z.ZodString;
|
|
333
|
+
severity: z.ZodEnum<["ok", "warn", "crit"]>;
|
|
334
|
+
/** Renders from (findingType, severity) unless a reason is present. */
|
|
335
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
336
|
+
}, "strip", z.ZodTypeAny, {
|
|
337
|
+
findingType: string;
|
|
338
|
+
severity: "crit" | "ok" | "warn";
|
|
339
|
+
reason?: string | undefined;
|
|
340
|
+
}, {
|
|
341
|
+
findingType: string;
|
|
342
|
+
severity: "crit" | "ok" | "warn";
|
|
343
|
+
reason?: string | undefined;
|
|
344
|
+
}>;
|
|
345
|
+
export type ReportSummaryStatement = z.infer<typeof ReportSummaryStatementSchema>;
|
|
346
|
+
export declare const ReportLinkSchema: z.ZodObject<{
|
|
347
|
+
key: z.ZodString;
|
|
348
|
+
label: z.ZodString;
|
|
349
|
+
url: z.ZodString;
|
|
350
|
+
}, "strip", z.ZodTypeAny, {
|
|
351
|
+
key: string;
|
|
352
|
+
label: string;
|
|
353
|
+
url: string;
|
|
354
|
+
}, {
|
|
355
|
+
key: string;
|
|
356
|
+
label: string;
|
|
357
|
+
url: string;
|
|
358
|
+
}>;
|
|
359
|
+
export type ReportLink = z.infer<typeof ReportLinkSchema>;
|
|
360
|
+
export declare const ReportViewModelSchema: z.ZodObject<{
|
|
361
|
+
/** "health" | "cost" | … */
|
|
362
|
+
title: z.ZodString;
|
|
363
|
+
/** "prod" */
|
|
364
|
+
scope: z.ZodString;
|
|
365
|
+
/** "last 1h" */
|
|
366
|
+
period: z.ZodString;
|
|
367
|
+
/** "vs your 7d normal" */
|
|
368
|
+
baselineLabel: z.ZodOptional<z.ZodString>;
|
|
369
|
+
/** ISO string. Passed in, never read from the clock inside interpret. */
|
|
370
|
+
generatedAt: z.ZodString;
|
|
371
|
+
/** live window length in minutes — lets the renderer say "of last 60 min". */
|
|
372
|
+
windowMinutes: z.ZodNumber;
|
|
373
|
+
summary: z.ZodObject<{
|
|
374
|
+
severity: z.ZodEnum<["ok", "warn", "crit"]>;
|
|
375
|
+
statements: z.ZodArray<z.ZodObject<{
|
|
376
|
+
findingType: z.ZodString;
|
|
377
|
+
severity: z.ZodEnum<["ok", "warn", "crit"]>;
|
|
378
|
+
/** Renders from (findingType, severity) unless a reason is present. */
|
|
379
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
380
|
+
}, "strip", z.ZodTypeAny, {
|
|
381
|
+
findingType: string;
|
|
382
|
+
severity: "crit" | "ok" | "warn";
|
|
383
|
+
reason?: string | undefined;
|
|
384
|
+
}, {
|
|
385
|
+
findingType: string;
|
|
386
|
+
severity: "crit" | "ok" | "warn";
|
|
387
|
+
reason?: string | undefined;
|
|
388
|
+
}>, "many">;
|
|
389
|
+
}, "strip", z.ZodTypeAny, {
|
|
390
|
+
severity: "crit" | "ok" | "warn";
|
|
391
|
+
statements: {
|
|
392
|
+
findingType: string;
|
|
393
|
+
severity: "crit" | "ok" | "warn";
|
|
394
|
+
reason?: string | undefined;
|
|
395
|
+
}[];
|
|
396
|
+
}, {
|
|
397
|
+
severity: "crit" | "ok" | "warn";
|
|
398
|
+
statements: {
|
|
399
|
+
findingType: string;
|
|
400
|
+
severity: "crit" | "ok" | "warn";
|
|
401
|
+
reason?: string | undefined;
|
|
402
|
+
}[];
|
|
403
|
+
}>;
|
|
404
|
+
findings: z.ZodArray<z.ZodObject<{
|
|
405
|
+
/** "flow" | "execution" | "liveness" | future "infrastructure" | "billing" */
|
|
406
|
+
type: z.ZodString;
|
|
407
|
+
severity: z.ZodEnum<["ok", "warn", "crit"]>;
|
|
408
|
+
/** Code for the state or cause, e.g. "env_limit_saturation" | "healthy". */
|
|
409
|
+
reason: z.ZodString;
|
|
410
|
+
/** Code for the "read:" line. Built last, may span findings. */
|
|
411
|
+
read: z.ZodOptional<z.ZodString>;
|
|
412
|
+
/** metric ids this finding covers, in causal order when degraded. */
|
|
413
|
+
metricIds: z.ZodArray<z.ZodString, "many">;
|
|
414
|
+
/** A single primary action. */
|
|
415
|
+
recommendation: z.ZodOptional<z.ZodObject<{
|
|
416
|
+
code: z.ZodString;
|
|
417
|
+
link: z.ZodOptional<z.ZodString>;
|
|
418
|
+
}, "strip", z.ZodTypeAny, {
|
|
419
|
+
code: string;
|
|
420
|
+
link?: string | undefined;
|
|
421
|
+
}, {
|
|
422
|
+
code: string;
|
|
423
|
+
link?: string | undefined;
|
|
424
|
+
}>>;
|
|
425
|
+
/** optional parenthetical — same shape as recommendation. */
|
|
426
|
+
hedge: z.ZodOptional<z.ZodObject<{
|
|
427
|
+
code: z.ZodString;
|
|
428
|
+
link: z.ZodOptional<z.ZodString>;
|
|
429
|
+
}, "strip", z.ZodTypeAny, {
|
|
430
|
+
code: string;
|
|
431
|
+
link?: string | undefined;
|
|
432
|
+
}, {
|
|
433
|
+
code: string;
|
|
434
|
+
link?: string | undefined;
|
|
435
|
+
}>>;
|
|
436
|
+
/** contiguous breach window of the driving metric -> "(last 40 min)". */
|
|
437
|
+
anomalyWindow: z.ZodOptional<z.ZodObject<{
|
|
438
|
+
minutes: z.ZodNumber;
|
|
439
|
+
touchesEnd: z.ZodBoolean;
|
|
440
|
+
}, "strip", z.ZodTypeAny, {
|
|
441
|
+
minutes: number;
|
|
442
|
+
touchesEnd: boolean;
|
|
443
|
+
}, {
|
|
444
|
+
minutes: number;
|
|
445
|
+
touchesEnd: boolean;
|
|
446
|
+
}>>;
|
|
447
|
+
/** Which dimension and key own the problem. `of` is the denominator label the renderer prints. */
|
|
448
|
+
attribution: z.ZodOptional<z.ZodObject<{
|
|
449
|
+
dim: z.ZodString;
|
|
450
|
+
key: z.ZodString;
|
|
451
|
+
share: z.ZodNumber;
|
|
452
|
+
of: z.ZodString;
|
|
453
|
+
}, "strip", z.ZodTypeAny, {
|
|
454
|
+
dim: string;
|
|
455
|
+
key: string;
|
|
456
|
+
share: number;
|
|
457
|
+
of: string;
|
|
458
|
+
}, {
|
|
459
|
+
dim: string;
|
|
460
|
+
key: string;
|
|
461
|
+
share: number;
|
|
462
|
+
of: string;
|
|
463
|
+
}>>;
|
|
464
|
+
/** Ruled-out causes and evidence, rendered under the `read:` line. */
|
|
465
|
+
exclusions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
466
|
+
code: z.ZodString;
|
|
467
|
+
evidence: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
468
|
+
}, "strip", z.ZodTypeAny, {
|
|
469
|
+
code: string;
|
|
470
|
+
evidence?: Record<string, number> | undefined;
|
|
471
|
+
}, {
|
|
472
|
+
code: string;
|
|
473
|
+
evidence?: Record<string, number> | undefined;
|
|
474
|
+
}>, "many">>;
|
|
475
|
+
/** Supporting facts, rendered under the `read:` line after the exclusions. */
|
|
476
|
+
observations: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
477
|
+
code: z.ZodString;
|
|
478
|
+
evidence: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
479
|
+
}, "strip", z.ZodTypeAny, {
|
|
480
|
+
code: string;
|
|
481
|
+
evidence?: Record<string, number> | undefined;
|
|
482
|
+
}, {
|
|
483
|
+
code: string;
|
|
484
|
+
evidence?: Record<string, number> | undefined;
|
|
485
|
+
}>, "many">>;
|
|
486
|
+
}, "strip", z.ZodTypeAny, {
|
|
487
|
+
type: string;
|
|
488
|
+
severity: "crit" | "ok" | "warn";
|
|
489
|
+
reason: string;
|
|
490
|
+
read?: string | undefined;
|
|
491
|
+
metricIds: string[];
|
|
492
|
+
recommendation?: {
|
|
493
|
+
code: string;
|
|
494
|
+
link?: string | undefined;
|
|
495
|
+
} | undefined;
|
|
496
|
+
hedge?: {
|
|
497
|
+
code: string;
|
|
498
|
+
link?: string | undefined;
|
|
499
|
+
} | undefined;
|
|
500
|
+
anomalyWindow?: {
|
|
501
|
+
minutes: number;
|
|
502
|
+
touchesEnd: boolean;
|
|
503
|
+
} | undefined;
|
|
504
|
+
attribution?: {
|
|
505
|
+
dim: string;
|
|
506
|
+
key: string;
|
|
507
|
+
share: number;
|
|
508
|
+
of: string;
|
|
509
|
+
} | undefined;
|
|
510
|
+
exclusions?: {
|
|
511
|
+
code: string;
|
|
512
|
+
evidence?: Record<string, number> | undefined;
|
|
513
|
+
}[] | undefined;
|
|
514
|
+
observations?: {
|
|
515
|
+
code: string;
|
|
516
|
+
evidence?: Record<string, number> | undefined;
|
|
517
|
+
}[] | undefined;
|
|
518
|
+
}, {
|
|
519
|
+
type: string;
|
|
520
|
+
severity: "crit" | "ok" | "warn";
|
|
521
|
+
reason: string;
|
|
522
|
+
read?: string | undefined;
|
|
523
|
+
metricIds: string[];
|
|
524
|
+
recommendation?: {
|
|
525
|
+
code: string;
|
|
526
|
+
link?: string | undefined;
|
|
527
|
+
} | undefined;
|
|
528
|
+
hedge?: {
|
|
529
|
+
code: string;
|
|
530
|
+
link?: string | undefined;
|
|
531
|
+
} | undefined;
|
|
532
|
+
anomalyWindow?: {
|
|
533
|
+
minutes: number;
|
|
534
|
+
touchesEnd: boolean;
|
|
535
|
+
} | undefined;
|
|
536
|
+
attribution?: {
|
|
537
|
+
dim: string;
|
|
538
|
+
key: string;
|
|
539
|
+
share: number;
|
|
540
|
+
of: string;
|
|
541
|
+
} | undefined;
|
|
542
|
+
exclusions?: {
|
|
543
|
+
code: string;
|
|
544
|
+
evidence?: Record<string, number> | undefined;
|
|
545
|
+
}[] | undefined;
|
|
546
|
+
observations?: {
|
|
547
|
+
code: string;
|
|
548
|
+
evidence?: Record<string, number> | undefined;
|
|
549
|
+
}[] | undefined;
|
|
550
|
+
}>, "many">;
|
|
551
|
+
metrics: z.ZodArray<z.ZodObject<{
|
|
552
|
+
/** A code, e.g. "start_latency_p95"; the messages map turns it into the label. */
|
|
553
|
+
id: z.ZodString;
|
|
554
|
+
value: z.ZodNumber;
|
|
555
|
+
unit: z.ZodEnum<["ms", "count", "ratio", "perMin"]>;
|
|
556
|
+
aggregation: z.ZodOptional<z.ZodEnum<["p95", "rate", "ratio", "count"]>>;
|
|
557
|
+
/** baseline; renderer formats "(normal ~7s)". */
|
|
558
|
+
normal: z.ZodOptional<z.ZodNumber>;
|
|
559
|
+
delta: z.ZodOptional<z.ZodObject<{
|
|
560
|
+
dir: z.ZodEnum<["up", "down", "flat"]>;
|
|
561
|
+
/** rounded value/normal multiplier; renderer decides whether to print "6×". */
|
|
562
|
+
mult: z.ZodOptional<z.ZodNumber>;
|
|
563
|
+
}, "strip", z.ZodTypeAny, {
|
|
564
|
+
dir: "down" | "flat" | "up";
|
|
565
|
+
mult?: number | undefined;
|
|
566
|
+
}, {
|
|
567
|
+
dir: "down" | "flat" | "up";
|
|
568
|
+
mult?: number | undefined;
|
|
569
|
+
}>>;
|
|
570
|
+
series: z.ZodOptional<z.ZodObject<{
|
|
571
|
+
points: z.ZodArray<z.ZodNumber, "many">;
|
|
572
|
+
/** "estimated" = a proxy (e.g. pending backlog), shown informational-only. */
|
|
573
|
+
kind: z.ZodEnum<["measured", "estimated"]>;
|
|
574
|
+
}, "strip", z.ZodTypeAny, {
|
|
575
|
+
points: number[];
|
|
576
|
+
kind: "estimated" | "measured";
|
|
577
|
+
}, {
|
|
578
|
+
points: number[];
|
|
579
|
+
kind: "estimated" | "measured";
|
|
580
|
+
}>>;
|
|
581
|
+
/** named sub-values for composite metrics (e.g. throughput { done, triggered }). */
|
|
582
|
+
breakdown: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
583
|
+
/** shown on a cause line INSTEAD of "(normal ~x)", e.g. "pinned 40 of last 60 min". */
|
|
584
|
+
annotation: z.ZodOptional<z.ZodObject<{
|
|
585
|
+
code: z.ZodString;
|
|
586
|
+
value: z.ZodOptional<z.ZodNumber>;
|
|
587
|
+
}, "strip", z.ZodTypeAny, {
|
|
588
|
+
code: string;
|
|
589
|
+
value?: number | undefined;
|
|
590
|
+
}, {
|
|
591
|
+
code: string;
|
|
592
|
+
value?: number | undefined;
|
|
593
|
+
}>>;
|
|
594
|
+
/** "unknown" means `value` is a placeholder a consumer must not read as real. Absent = measured. */
|
|
595
|
+
availability: z.ZodOptional<z.ZodEnum<["measured", "unknown"]>>;
|
|
596
|
+
severity: z.ZodEnum<["ok", "warn", "crit"]>;
|
|
597
|
+
}, "strip", z.ZodTypeAny, {
|
|
598
|
+
id: string;
|
|
599
|
+
value: number;
|
|
600
|
+
unit: "count" | "ms" | "perMin" | "ratio";
|
|
601
|
+
aggregation?: "count" | "p95" | "rate" | "ratio" | undefined;
|
|
602
|
+
normal?: number | undefined;
|
|
603
|
+
delta?: {
|
|
604
|
+
dir: "down" | "flat" | "up";
|
|
605
|
+
mult?: number | undefined;
|
|
606
|
+
} | undefined;
|
|
607
|
+
series?: {
|
|
608
|
+
points: number[];
|
|
609
|
+
kind: "estimated" | "measured";
|
|
610
|
+
} | undefined;
|
|
611
|
+
breakdown?: Record<string, number> | undefined;
|
|
612
|
+
annotation?: {
|
|
613
|
+
code: string;
|
|
614
|
+
value?: number | undefined;
|
|
615
|
+
} | undefined;
|
|
616
|
+
availability?: "measured" | "unknown" | undefined;
|
|
617
|
+
severity: "crit" | "ok" | "warn";
|
|
618
|
+
}, {
|
|
619
|
+
id: string;
|
|
620
|
+
value: number;
|
|
621
|
+
unit: "count" | "ms" | "perMin" | "ratio";
|
|
622
|
+
aggregation?: "count" | "p95" | "rate" | "ratio" | undefined;
|
|
623
|
+
normal?: number | undefined;
|
|
624
|
+
delta?: {
|
|
625
|
+
dir: "down" | "flat" | "up";
|
|
626
|
+
mult?: number | undefined;
|
|
627
|
+
} | undefined;
|
|
628
|
+
series?: {
|
|
629
|
+
points: number[];
|
|
630
|
+
kind: "estimated" | "measured";
|
|
631
|
+
} | undefined;
|
|
632
|
+
breakdown?: Record<string, number> | undefined;
|
|
633
|
+
annotation?: {
|
|
634
|
+
code: string;
|
|
635
|
+
value?: number | undefined;
|
|
636
|
+
} | undefined;
|
|
637
|
+
availability?: "measured" | "unknown" | undefined;
|
|
638
|
+
severity: "crit" | "ok" | "warn";
|
|
639
|
+
}>, "many">;
|
|
640
|
+
/** dense structured payload for agents. */
|
|
641
|
+
facts: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
642
|
+
links: z.ZodArray<z.ZodObject<{
|
|
643
|
+
key: z.ZodString;
|
|
644
|
+
label: z.ZodString;
|
|
645
|
+
url: z.ZodString;
|
|
646
|
+
}, "strip", z.ZodTypeAny, {
|
|
647
|
+
key: string;
|
|
648
|
+
label: string;
|
|
649
|
+
url: string;
|
|
650
|
+
}, {
|
|
651
|
+
key: string;
|
|
652
|
+
label: string;
|
|
653
|
+
url: string;
|
|
654
|
+
}>, "many">;
|
|
655
|
+
/** dominant finding's action + optional "do nothing" option. Max two entries. */
|
|
656
|
+
footer: z.ZodArray<z.ZodObject<{
|
|
657
|
+
code: z.ZodString;
|
|
658
|
+
link: z.ZodOptional<z.ZodString>;
|
|
659
|
+
/** a computed fact (e.g. drainMinutes), never invented. */
|
|
660
|
+
value: z.ZodOptional<z.ZodNumber>;
|
|
661
|
+
}, "strip", z.ZodTypeAny, {
|
|
662
|
+
code: string;
|
|
663
|
+
link?: string | undefined;
|
|
664
|
+
value?: number | undefined;
|
|
665
|
+
}, {
|
|
666
|
+
code: string;
|
|
667
|
+
link?: string | undefined;
|
|
668
|
+
value?: number | undefined;
|
|
669
|
+
}>, "many">;
|
|
670
|
+
}, "strip", z.ZodTypeAny, {
|
|
671
|
+
title: string;
|
|
672
|
+
scope: string;
|
|
673
|
+
period: string;
|
|
674
|
+
baselineLabel?: string | undefined;
|
|
675
|
+
generatedAt: string;
|
|
676
|
+
windowMinutes: number;
|
|
677
|
+
summary: {
|
|
678
|
+
severity: "crit" | "ok" | "warn";
|
|
679
|
+
statements: {
|
|
680
|
+
findingType: string;
|
|
681
|
+
severity: "crit" | "ok" | "warn";
|
|
682
|
+
reason?: string | undefined;
|
|
683
|
+
}[];
|
|
684
|
+
};
|
|
685
|
+
findings: {
|
|
686
|
+
type: string;
|
|
687
|
+
severity: "crit" | "ok" | "warn";
|
|
688
|
+
reason: string;
|
|
689
|
+
read?: string | undefined;
|
|
690
|
+
metricIds: string[];
|
|
691
|
+
recommendation?: {
|
|
692
|
+
code: string;
|
|
693
|
+
link?: string | undefined;
|
|
694
|
+
} | undefined;
|
|
695
|
+
hedge?: {
|
|
696
|
+
code: string;
|
|
697
|
+
link?: string | undefined;
|
|
698
|
+
} | undefined;
|
|
699
|
+
anomalyWindow?: {
|
|
700
|
+
minutes: number;
|
|
701
|
+
touchesEnd: boolean;
|
|
702
|
+
} | undefined;
|
|
703
|
+
attribution?: {
|
|
704
|
+
dim: string;
|
|
705
|
+
key: string;
|
|
706
|
+
share: number;
|
|
707
|
+
of: string;
|
|
708
|
+
} | undefined;
|
|
709
|
+
exclusions?: {
|
|
710
|
+
code: string;
|
|
711
|
+
evidence?: Record<string, number> | undefined;
|
|
712
|
+
}[] | undefined;
|
|
713
|
+
observations?: {
|
|
714
|
+
code: string;
|
|
715
|
+
evidence?: Record<string, number> | undefined;
|
|
716
|
+
}[] | undefined;
|
|
717
|
+
}[];
|
|
718
|
+
metrics: {
|
|
719
|
+
id: string;
|
|
720
|
+
value: number;
|
|
721
|
+
unit: "count" | "ms" | "perMin" | "ratio";
|
|
722
|
+
aggregation?: "count" | "p95" | "rate" | "ratio" | undefined;
|
|
723
|
+
normal?: number | undefined;
|
|
724
|
+
delta?: {
|
|
725
|
+
dir: "down" | "flat" | "up";
|
|
726
|
+
mult?: number | undefined;
|
|
727
|
+
} | undefined;
|
|
728
|
+
series?: {
|
|
729
|
+
points: number[];
|
|
730
|
+
kind: "estimated" | "measured";
|
|
731
|
+
} | undefined;
|
|
732
|
+
breakdown?: Record<string, number> | undefined;
|
|
733
|
+
annotation?: {
|
|
734
|
+
code: string;
|
|
735
|
+
value?: number | undefined;
|
|
736
|
+
} | undefined;
|
|
737
|
+
availability?: "measured" | "unknown" | undefined;
|
|
738
|
+
severity: "crit" | "ok" | "warn";
|
|
739
|
+
}[];
|
|
740
|
+
facts: Record<string, unknown>;
|
|
741
|
+
links: {
|
|
742
|
+
key: string;
|
|
743
|
+
label: string;
|
|
744
|
+
url: string;
|
|
745
|
+
}[];
|
|
746
|
+
footer: {
|
|
747
|
+
code: string;
|
|
748
|
+
link?: string | undefined;
|
|
749
|
+
value?: number | undefined;
|
|
750
|
+
}[];
|
|
751
|
+
}, {
|
|
752
|
+
title: string;
|
|
753
|
+
scope: string;
|
|
754
|
+
period: string;
|
|
755
|
+
baselineLabel?: string | undefined;
|
|
756
|
+
generatedAt: string;
|
|
757
|
+
windowMinutes: number;
|
|
758
|
+
summary: {
|
|
759
|
+
severity: "crit" | "ok" | "warn";
|
|
760
|
+
statements: {
|
|
761
|
+
findingType: string;
|
|
762
|
+
severity: "crit" | "ok" | "warn";
|
|
763
|
+
reason?: string | undefined;
|
|
764
|
+
}[];
|
|
765
|
+
};
|
|
766
|
+
findings: {
|
|
767
|
+
type: string;
|
|
768
|
+
severity: "crit" | "ok" | "warn";
|
|
769
|
+
reason: string;
|
|
770
|
+
read?: string | undefined;
|
|
771
|
+
metricIds: string[];
|
|
772
|
+
recommendation?: {
|
|
773
|
+
code: string;
|
|
774
|
+
link?: string | undefined;
|
|
775
|
+
} | undefined;
|
|
776
|
+
hedge?: {
|
|
777
|
+
code: string;
|
|
778
|
+
link?: string | undefined;
|
|
779
|
+
} | undefined;
|
|
780
|
+
anomalyWindow?: {
|
|
781
|
+
minutes: number;
|
|
782
|
+
touchesEnd: boolean;
|
|
783
|
+
} | undefined;
|
|
784
|
+
attribution?: {
|
|
785
|
+
dim: string;
|
|
786
|
+
key: string;
|
|
787
|
+
share: number;
|
|
788
|
+
of: string;
|
|
789
|
+
} | undefined;
|
|
790
|
+
exclusions?: {
|
|
791
|
+
code: string;
|
|
792
|
+
evidence?: Record<string, number> | undefined;
|
|
793
|
+
}[] | undefined;
|
|
794
|
+
observations?: {
|
|
795
|
+
code: string;
|
|
796
|
+
evidence?: Record<string, number> | undefined;
|
|
797
|
+
}[] | undefined;
|
|
798
|
+
}[];
|
|
799
|
+
metrics: {
|
|
800
|
+
id: string;
|
|
801
|
+
value: number;
|
|
802
|
+
unit: "count" | "ms" | "perMin" | "ratio";
|
|
803
|
+
aggregation?: "count" | "p95" | "rate" | "ratio" | undefined;
|
|
804
|
+
normal?: number | undefined;
|
|
805
|
+
delta?: {
|
|
806
|
+
dir: "down" | "flat" | "up";
|
|
807
|
+
mult?: number | undefined;
|
|
808
|
+
} | undefined;
|
|
809
|
+
series?: {
|
|
810
|
+
points: number[];
|
|
811
|
+
kind: "estimated" | "measured";
|
|
812
|
+
} | undefined;
|
|
813
|
+
breakdown?: Record<string, number> | undefined;
|
|
814
|
+
annotation?: {
|
|
815
|
+
code: string;
|
|
816
|
+
value?: number | undefined;
|
|
817
|
+
} | undefined;
|
|
818
|
+
availability?: "measured" | "unknown" | undefined;
|
|
819
|
+
severity: "crit" | "ok" | "warn";
|
|
820
|
+
}[];
|
|
821
|
+
facts: Record<string, unknown>;
|
|
822
|
+
links: {
|
|
823
|
+
key: string;
|
|
824
|
+
label: string;
|
|
825
|
+
url: string;
|
|
826
|
+
}[];
|
|
827
|
+
footer: {
|
|
828
|
+
code: string;
|
|
829
|
+
link?: string | undefined;
|
|
830
|
+
value?: number | undefined;
|
|
831
|
+
}[];
|
|
832
|
+
}>;
|
|
833
|
+
export type ReportViewModel = z.infer<typeof ReportViewModelSchema>;
|