@bli-cockpit/telemetry-core 0.1.6 → 0.1.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/dist/evidence-completeness.d.ts +17 -0
- package/dist/evidence-completeness.js +33 -1
- package/dist/ingest-dto.d.ts +16 -0
- package/dist/ingest-dto.js +28 -0
- package/dist/secret-guards.js +7 -0
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ export declare const EvidenceCompletenessStatusSchema: z.ZodEnum<{
|
|
|
5
5
|
complete: "complete";
|
|
6
6
|
partial: "partial";
|
|
7
7
|
empty: "empty";
|
|
8
|
+
unavailable: "unavailable";
|
|
8
9
|
}>;
|
|
9
10
|
export type EvidenceCompletenessStatus = z.infer<typeof EvidenceCompletenessStatusSchema>;
|
|
10
11
|
export declare const EvidenceCompletenessSourceCountSchema: z.ZodObject<{
|
|
@@ -15,6 +16,7 @@ export declare const EvidenceCompletenessSourceCountSchema: z.ZodObject<{
|
|
|
15
16
|
truncated_count: z.ZodNumber;
|
|
16
17
|
deferred_count: z.ZodNumber;
|
|
17
18
|
reused_count: z.ZodNumber;
|
|
19
|
+
failed_count: z.ZodDefault<z.ZodNumber>;
|
|
18
20
|
}, z.core.$strict>;
|
|
19
21
|
export type EvidenceCompletenessSourceCount = z.infer<typeof EvidenceCompletenessSourceCountSchema>;
|
|
20
22
|
export declare const EvidenceCompletenessTotalsSchema: z.ZodObject<{
|
|
@@ -24,6 +26,7 @@ export declare const EvidenceCompletenessTotalsSchema: z.ZodObject<{
|
|
|
24
26
|
truncated_count: z.ZodNumber;
|
|
25
27
|
deferred_count: z.ZodNumber;
|
|
26
28
|
reused_count: z.ZodNumber;
|
|
29
|
+
failed_count: z.ZodDefault<z.ZodNumber>;
|
|
27
30
|
}, z.core.$strict>;
|
|
28
31
|
export type EvidenceCompletenessTotals = z.infer<typeof EvidenceCompletenessTotalsSchema>;
|
|
29
32
|
export declare const EvidenceCompletenessCapSchema: z.ZodObject<{
|
|
@@ -40,6 +43,12 @@ export declare const EvidenceCompletenessSkipReasonSchema: z.ZodObject<{
|
|
|
40
43
|
count: z.ZodNumber;
|
|
41
44
|
}, z.core.$strict>;
|
|
42
45
|
export type EvidenceCompletenessSkipReason = z.infer<typeof EvidenceCompletenessSkipReasonSchema>;
|
|
46
|
+
export declare const EvidenceCompletenessFailureReasonSchema: z.ZodObject<{
|
|
47
|
+
source: z.ZodString;
|
|
48
|
+
reason: z.ZodString;
|
|
49
|
+
count: z.ZodNumber;
|
|
50
|
+
}, z.core.$strict>;
|
|
51
|
+
export type EvidenceCompletenessFailureReason = z.infer<typeof EvidenceCompletenessFailureReasonSchema>;
|
|
43
52
|
export declare const EvidenceCompletenessTruncationMarkerSchema: z.ZodObject<{
|
|
44
53
|
source: z.ZodString;
|
|
45
54
|
reason: z.ZodString;
|
|
@@ -57,6 +66,7 @@ export declare const EvidenceCompletenessPayloadSchema: z.ZodObject<{
|
|
|
57
66
|
complete: "complete";
|
|
58
67
|
partial: "partial";
|
|
59
68
|
empty: "empty";
|
|
69
|
+
unavailable: "unavailable";
|
|
60
70
|
}>;
|
|
61
71
|
generated_at: z.ZodString;
|
|
62
72
|
scan_window: z.ZodObject<{
|
|
@@ -72,6 +82,7 @@ export declare const EvidenceCompletenessPayloadSchema: z.ZodObject<{
|
|
|
72
82
|
truncated_count: z.ZodNumber;
|
|
73
83
|
deferred_count: z.ZodNumber;
|
|
74
84
|
reused_count: z.ZodNumber;
|
|
85
|
+
failed_count: z.ZodDefault<z.ZodNumber>;
|
|
75
86
|
}, z.core.$strict>>>;
|
|
76
87
|
totals: z.ZodObject<{
|
|
77
88
|
scanned_count: z.ZodNumber;
|
|
@@ -80,6 +91,7 @@ export declare const EvidenceCompletenessPayloadSchema: z.ZodObject<{
|
|
|
80
91
|
truncated_count: z.ZodNumber;
|
|
81
92
|
deferred_count: z.ZodNumber;
|
|
82
93
|
reused_count: z.ZodNumber;
|
|
94
|
+
failed_count: z.ZodDefault<z.ZodNumber>;
|
|
83
95
|
}, z.core.$strict>;
|
|
84
96
|
caps: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
85
97
|
source: z.ZodString;
|
|
@@ -93,6 +105,11 @@ export declare const EvidenceCompletenessPayloadSchema: z.ZodObject<{
|
|
|
93
105
|
reason: z.ZodString;
|
|
94
106
|
count: z.ZodNumber;
|
|
95
107
|
}, z.core.$strict>>>;
|
|
108
|
+
failure_reasons: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
109
|
+
source: z.ZodString;
|
|
110
|
+
reason: z.ZodString;
|
|
111
|
+
count: z.ZodNumber;
|
|
112
|
+
}, z.core.$strict>>>;
|
|
96
113
|
truncation_markers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
97
114
|
source: z.ZodString;
|
|
98
115
|
reason: z.ZodString;
|
|
@@ -6,6 +6,7 @@ export const EvidenceCompletenessStatusSchema = z.enum([
|
|
|
6
6
|
"partial",
|
|
7
7
|
"empty",
|
|
8
8
|
"failed",
|
|
9
|
+
"unavailable",
|
|
9
10
|
"unknown",
|
|
10
11
|
]);
|
|
11
12
|
export const EvidenceCompletenessSourceCountSchema = z
|
|
@@ -17,6 +18,7 @@ export const EvidenceCompletenessSourceCountSchema = z
|
|
|
17
18
|
truncated_count: EvidenceCountSchema,
|
|
18
19
|
deferred_count: EvidenceCountSchema,
|
|
19
20
|
reused_count: EvidenceCountSchema,
|
|
21
|
+
failed_count: EvidenceCountSchema.default(0),
|
|
20
22
|
})
|
|
21
23
|
.strict();
|
|
22
24
|
export const EvidenceCompletenessTotalsSchema = EvidenceCompletenessSourceCountSchema.omit({ source: true }).strict();
|
|
@@ -36,6 +38,7 @@ export const EvidenceCompletenessSkipReasonSchema = z
|
|
|
36
38
|
count: EvidenceCountSchema,
|
|
37
39
|
})
|
|
38
40
|
.strict();
|
|
41
|
+
export const EvidenceCompletenessFailureReasonSchema = EvidenceCompletenessSkipReasonSchema;
|
|
39
42
|
export const EvidenceCompletenessTruncationMarkerSchema = z
|
|
40
43
|
.object({
|
|
41
44
|
source: NonEmptyStringSchema,
|
|
@@ -62,9 +65,38 @@ export const EvidenceCompletenessPayloadSchema = z
|
|
|
62
65
|
totals: EvidenceCompletenessTotalsSchema,
|
|
63
66
|
caps: z.array(EvidenceCompletenessCapSchema).default([]),
|
|
64
67
|
skip_reasons: z.array(EvidenceCompletenessSkipReasonSchema).default([]),
|
|
68
|
+
failure_reasons: z
|
|
69
|
+
.array(EvidenceCompletenessFailureReasonSchema)
|
|
70
|
+
.default([]),
|
|
65
71
|
truncation_markers: z
|
|
66
72
|
.array(EvidenceCompletenessTruncationMarkerSchema)
|
|
67
73
|
.default([]),
|
|
68
74
|
notes: z.array(NonEmptyStringSchema.max(160)).default([]),
|
|
69
75
|
})
|
|
70
|
-
.strict()
|
|
76
|
+
.strict()
|
|
77
|
+
.superRefine((payload, context) => {
|
|
78
|
+
const hasGap = payload.totals.skipped_count > 0 ||
|
|
79
|
+
payload.totals.truncated_count > 0 ||
|
|
80
|
+
payload.totals.deferred_count > 0 ||
|
|
81
|
+
payload.totals.failed_count > 0 ||
|
|
82
|
+
payload.caps.some((cap) => cap.applied) ||
|
|
83
|
+
payload.skip_reasons.length > 0 ||
|
|
84
|
+
payload.failure_reasons.length > 0 ||
|
|
85
|
+
payload.truncation_markers.length > 0;
|
|
86
|
+
if (payload.status === "complete" && hasGap) {
|
|
87
|
+
context.addIssue({
|
|
88
|
+
code: "custom",
|
|
89
|
+
message: "complete evidence completeness cannot include skips, caps, truncations, deferrals, or failures",
|
|
90
|
+
path: ["status"],
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (payload.status === "failed" &&
|
|
94
|
+
payload.totals.failed_count === 0 &&
|
|
95
|
+
payload.failure_reasons.length === 0) {
|
|
96
|
+
context.addIssue({
|
|
97
|
+
code: "custom",
|
|
98
|
+
message: "failed evidence completeness must include a failed count or failure reason",
|
|
99
|
+
path: ["failure_reasons"],
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
});
|
package/dist/ingest-dto.d.ts
CHANGED
|
@@ -96,6 +96,7 @@ export declare const TelemetryIngestEventDtoSchema: z.ZodObject<{
|
|
|
96
96
|
complete: "complete";
|
|
97
97
|
partial: "partial";
|
|
98
98
|
empty: "empty";
|
|
99
|
+
unavailable: "unavailable";
|
|
99
100
|
}>;
|
|
100
101
|
generated_at: z.ZodString;
|
|
101
102
|
scan_window: z.ZodObject<{
|
|
@@ -111,6 +112,7 @@ export declare const TelemetryIngestEventDtoSchema: z.ZodObject<{
|
|
|
111
112
|
truncated_count: z.ZodNumber;
|
|
112
113
|
deferred_count: z.ZodNumber;
|
|
113
114
|
reused_count: z.ZodNumber;
|
|
115
|
+
failed_count: z.ZodDefault<z.ZodNumber>;
|
|
114
116
|
}, z.core.$strict>>>;
|
|
115
117
|
totals: z.ZodObject<{
|
|
116
118
|
scanned_count: z.ZodNumber;
|
|
@@ -119,6 +121,7 @@ export declare const TelemetryIngestEventDtoSchema: z.ZodObject<{
|
|
|
119
121
|
truncated_count: z.ZodNumber;
|
|
120
122
|
deferred_count: z.ZodNumber;
|
|
121
123
|
reused_count: z.ZodNumber;
|
|
124
|
+
failed_count: z.ZodDefault<z.ZodNumber>;
|
|
122
125
|
}, z.core.$strict>;
|
|
123
126
|
caps: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
124
127
|
source: z.ZodString;
|
|
@@ -132,6 +135,11 @@ export declare const TelemetryIngestEventDtoSchema: z.ZodObject<{
|
|
|
132
135
|
reason: z.ZodString;
|
|
133
136
|
count: z.ZodNumber;
|
|
134
137
|
}, z.core.$strict>>>;
|
|
138
|
+
failure_reasons: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
139
|
+
source: z.ZodString;
|
|
140
|
+
reason: z.ZodString;
|
|
141
|
+
count: z.ZodNumber;
|
|
142
|
+
}, z.core.$strict>>>;
|
|
135
143
|
truncation_markers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
136
144
|
source: z.ZodString;
|
|
137
145
|
reason: z.ZodString;
|
|
@@ -517,6 +525,7 @@ export declare const TelemetryIngestEnvelopeSchema: z.ZodObject<{
|
|
|
517
525
|
complete: "complete";
|
|
518
526
|
partial: "partial";
|
|
519
527
|
empty: "empty";
|
|
528
|
+
unavailable: "unavailable";
|
|
520
529
|
}>;
|
|
521
530
|
generated_at: z.ZodString;
|
|
522
531
|
scan_window: z.ZodObject<{
|
|
@@ -532,6 +541,7 @@ export declare const TelemetryIngestEnvelopeSchema: z.ZodObject<{
|
|
|
532
541
|
truncated_count: z.ZodNumber;
|
|
533
542
|
deferred_count: z.ZodNumber;
|
|
534
543
|
reused_count: z.ZodNumber;
|
|
544
|
+
failed_count: z.ZodDefault<z.ZodNumber>;
|
|
535
545
|
}, z.core.$strict>>>;
|
|
536
546
|
totals: z.ZodObject<{
|
|
537
547
|
scanned_count: z.ZodNumber;
|
|
@@ -540,6 +550,7 @@ export declare const TelemetryIngestEnvelopeSchema: z.ZodObject<{
|
|
|
540
550
|
truncated_count: z.ZodNumber;
|
|
541
551
|
deferred_count: z.ZodNumber;
|
|
542
552
|
reused_count: z.ZodNumber;
|
|
553
|
+
failed_count: z.ZodDefault<z.ZodNumber>;
|
|
543
554
|
}, z.core.$strict>;
|
|
544
555
|
caps: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
545
556
|
source: z.ZodString;
|
|
@@ -553,6 +564,11 @@ export declare const TelemetryIngestEnvelopeSchema: z.ZodObject<{
|
|
|
553
564
|
reason: z.ZodString;
|
|
554
565
|
count: z.ZodNumber;
|
|
555
566
|
}, z.core.$strict>>>;
|
|
567
|
+
failure_reasons: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
568
|
+
source: z.ZodString;
|
|
569
|
+
reason: z.ZodString;
|
|
570
|
+
count: z.ZodNumber;
|
|
571
|
+
}, z.core.$strict>>>;
|
|
556
572
|
truncation_markers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
557
573
|
source: z.ZodString;
|
|
558
574
|
reason: z.ZodString;
|
package/dist/ingest-dto.js
CHANGED
|
@@ -47,6 +47,34 @@ export const TelemetryIngestEventDtoSchema = z
|
|
|
47
47
|
path: ["redaction", "privacy_classification"],
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
|
+
const summaryStatus = event.attributes["evidence_completeness_status"];
|
|
51
|
+
const summarySchemaVersion = event.attributes["evidence_completeness_schema_version"];
|
|
52
|
+
if (event.evidence_completeness) {
|
|
53
|
+
if (summaryStatus !== undefined &&
|
|
54
|
+
summaryStatus !== event.evidence_completeness.status) {
|
|
55
|
+
context.addIssue({
|
|
56
|
+
code: "custom",
|
|
57
|
+
message: "evidence completeness status attribute must match payload",
|
|
58
|
+
path: ["attributes", "evidence_completeness_status"],
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
if (summarySchemaVersion !== undefined &&
|
|
62
|
+
summarySchemaVersion !== event.evidence_completeness.schema_version) {
|
|
63
|
+
context.addIssue({
|
|
64
|
+
code: "custom",
|
|
65
|
+
message: "evidence completeness schema version attribute must match payload",
|
|
66
|
+
path: ["attributes", "evidence_completeness_schema_version"],
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (typeof summaryStatus === "string" &&
|
|
71
|
+
summaryStatus !== "unknown") {
|
|
72
|
+
context.addIssue({
|
|
73
|
+
code: "custom",
|
|
74
|
+
message: "typed evidence completeness payload is required when status is known",
|
|
75
|
+
path: ["evidence_completeness"],
|
|
76
|
+
});
|
|
77
|
+
}
|
|
50
78
|
});
|
|
51
79
|
export const TelemetryIngestEnvelopeSchema = z
|
|
52
80
|
.object({
|
package/dist/secret-guards.js
CHANGED
|
@@ -29,6 +29,9 @@ export function isSecretLikePathSegment(value) {
|
|
|
29
29
|
// this source file (the public-package pack scanner bans it as a content
|
|
30
30
|
// pattern, just as the original guard did).
|
|
31
31
|
const PRIVILEGED_SUPABASE_KEY_NAME = ["SUPABASE", "SERVICE", "ROLE", "KEY"].join("_");
|
|
32
|
+
const SUPABASE_SERVICE_ROLE_NAME = ["SUPABASE", "SERVICE", "ROLE"].join("_");
|
|
33
|
+
const OPENAI_KEY_NAME = ["OPENAI", "API", "KEY"].join("_");
|
|
34
|
+
const MEM0_KEY_NAME = ["MEM0", "API", "KEY"].join("_");
|
|
32
35
|
/**
|
|
33
36
|
* Credential names that are only a leak when assigned a value (D13). The value
|
|
34
37
|
* shape mirrors the long-standing generic pattern: an assignment operator
|
|
@@ -39,6 +42,9 @@ const PRIVILEGED_SUPABASE_KEY_NAME = ["SUPABASE", "SERVICE", "ROLE", "KEY"].join
|
|
|
39
42
|
const SECRET_NAME_WITH_VALUE_PATTERN = new RegExp(`\\b(?:${[
|
|
40
43
|
"(?:NEXT_PUBLIC_)?SUPABASE_ANON_KEY",
|
|
41
44
|
PRIVILEGED_SUPABASE_KEY_NAME,
|
|
45
|
+
SUPABASE_SERVICE_ROLE_NAME,
|
|
46
|
+
OPENAI_KEY_NAME,
|
|
47
|
+
MEM0_KEY_NAME,
|
|
42
48
|
"SERVICE[_\\s-]?ROLE(?:[_\\s-]?KEY)?",
|
|
43
49
|
"LANGFUSE_(?:PUBLIC|SECRET)_KEY",
|
|
44
50
|
"api[_-]?key",
|
|
@@ -65,6 +71,7 @@ const SECRET_VALUE_PATTERNS = [
|
|
|
65
71
|
/\bxox[baprs]-[A-Za-z0-9-]{16,}/,
|
|
66
72
|
/\b(?:AKIA|ASIA)[A-Z0-9]{16}\b/,
|
|
67
73
|
/\b(?:pk|sk)-lf-[A-Za-z0-9_-]{16,}\b/i,
|
|
74
|
+
/\bm0[-_][A-Za-z0-9_-]{16,}\b/i,
|
|
68
75
|
];
|
|
69
76
|
const SECRET_LIKE_CONTENT_PATTERNS = [
|
|
70
77
|
SECRET_NAME_WITH_VALUE_PATTERN,
|