@sourcey/catalog-verifier 1.1.7 → 1.1.9

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.
@@ -0,0 +1,217 @@
1
+ import { DIGEST_PATTERN, digest } from "provenry/primitives";
2
+ import { z } from "zod";
3
+ import { companyAdmissionBindingSchema, standingCriterionSchema, } from "../../company-standing/src/index.js";
4
+ import { EVIDENCE_READINGS_PER_EVALUATION_LIMIT, evidenceLocatorSchema, } from "../../evidence/src/index.js";
5
+ const digestSchema = z.string().regex(DIGEST_PATTERN);
6
+ const gitObjectSchema = z.string().regex(/^[a-f0-9]{40,64}$/u);
7
+ const instantSchema = z.iso.datetime({ offset: true });
8
+ const identifierSchema = z.string().min(1).max(160);
9
+ const REPORT_SUBJECTS_LIMIT = 8;
10
+ const REPORT_SOURCES_LIMIT = 32;
11
+ const subjectSchema = z
12
+ .object({
13
+ kind: z.enum(["entity", "program", "offer"]),
14
+ entity_id: identifierSchema,
15
+ program_id: identifierSchema.nullable(),
16
+ offer_id: identifierSchema.nullable(),
17
+ label: z.string().min(1).max(300),
18
+ revision_digest: digestSchema.nullable(),
19
+ })
20
+ .strict();
21
+ const sourceSchema = z
22
+ .object({
23
+ subject_revision_digest: digestSchema,
24
+ source_id: identifierSchema,
25
+ requested_url: z.url({ protocol: /^https$/u }),
26
+ final_url: z.url({ protocol: /^https$/u }).nullable(),
27
+ final_host: z.string().min(1).max(253).nullable(),
28
+ authority: z.enum(["canonical", "inert", "ambiguous"]),
29
+ capture_status: z.enum([
30
+ "captured",
31
+ "not_attempted",
32
+ "retryable_failure",
33
+ "terminal_failure",
34
+ "anomaly",
35
+ ]),
36
+ response_status_code: z.number().int().min(100).max(599).nullable(),
37
+ capture_digest: digestSchema.nullable(),
38
+ normalized_object_digest: digestSchema.nullable(),
39
+ })
40
+ .strict();
41
+ const claimSchema = z
42
+ .object({
43
+ subject_revision_digest: digestSchema,
44
+ path: z.string().min(1).max(500),
45
+ status: z.enum(["supported", "unsupported", "contradicted", "unresolved"]),
46
+ guidance: z.string().min(1).max(500),
47
+ result_digest: digestSchema,
48
+ bindings: z.array(z
49
+ .object({
50
+ source_id: identifierSchema,
51
+ binding_digest: digestSchema,
52
+ locators: z.array(evidenceLocatorSchema).min(1).max(16),
53
+ })
54
+ .strict()),
55
+ residue_codes: z.array(identifierSchema),
56
+ })
57
+ .strict();
58
+ const conflictSchema = z
59
+ .object({
60
+ kind: identifierSchema,
61
+ strength: z.enum(["exact", "ambiguous"]),
62
+ key_digest: digestSchema,
63
+ target_references: z.array(z.string().min(1).max(240)),
64
+ source_references: z.array(z.string().min(1).max(400)),
65
+ })
66
+ .strict();
67
+ const startupCreditsAdmissionReportCoreSchema = z
68
+ .object({
69
+ report_contract: z.literal("sourcey.startup-credits-admission-report/v1alpha1"),
70
+ repository: z.string().regex(/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/u),
71
+ pull_request_number: z.number().int().positive(),
72
+ base_sha: gitObjectSchema,
73
+ head_sha: gitObjectSchema,
74
+ source_tree: gitObjectSchema,
75
+ change_tree: gitObjectSchema,
76
+ live_source_commit: gitObjectSchema,
77
+ live_parent_release_id: digestSchema,
78
+ evaluated_at: instantSchema,
79
+ changed_files: z.array(z.string().min(1).max(512)).min(1).max(32),
80
+ subjects: z.array(subjectSchema).max(REPORT_SUBJECTS_LIMIT),
81
+ candidate_domains: z.array(z.string().min(1).max(253)).max(32),
82
+ sources: z.array(sourceSchema).max(REPORT_SOURCES_LIMIT),
83
+ claims: z.array(claimSchema).max(4096),
84
+ conflicts: z.array(conflictSchema).max(64),
85
+ /** The standing binding a new company was admitted on, from Sourcey's company gate. */
86
+ company_admission: companyAdmissionBindingSchema.optional(),
87
+ outcome: z.enum([
88
+ "auto_admissible",
89
+ "needs_revision",
90
+ "temporarily_unavailable",
91
+ "human_review_required",
92
+ "rejected",
93
+ ]),
94
+ reason_codes: z.array(identifierSchema),
95
+ retryable: z.boolean(),
96
+ next_action: z.enum(["merge", "revise", "retry", "review", "stop"]),
97
+ /**
98
+ * Each model reading behind the verdicts, once, with its spend and every
99
+ * subject and source whose claims were decided from it.
100
+ */
101
+ model_effects: z
102
+ .array(z
103
+ .object({
104
+ provider: identifierSchema,
105
+ model: z.string().min(1).max(120),
106
+ receipt_digest: digestSchema,
107
+ spend_microusd: z.number().int().nonnegative(),
108
+ cached: z.boolean(),
109
+ uses: z
110
+ .array(z
111
+ .object({ subject_revision_digest: digestSchema, source_id: identifierSchema })
112
+ .strict())
113
+ .min(1)
114
+ .max(REPORT_SUBJECTS_LIMIT * REPORT_SOURCES_LIMIT),
115
+ })
116
+ .strict())
117
+ .max(REPORT_SUBJECTS_LIMIT * EVIDENCE_READINGS_PER_EVALUATION_LIMIT),
118
+ authority: z
119
+ .object({
120
+ machine_policy_digest: digestSchema,
121
+ coverage_policy_digest: digestSchema,
122
+ evaluator_digest: digestSchema,
123
+ input_digest: digestSchema.nullable(),
124
+ result_digest: digestSchema.nullable(),
125
+ execution_receipt_digest: digestSchema.nullable(),
126
+ admission_artifact_digest: digestSchema.nullable(),
127
+ admission_candidate_url: z.url({ protocol: /^https$/u }).nullable(),
128
+ evidence_authority_set_digest: digestSchema.nullable(),
129
+ asset_authority_bundle_digest: digestSchema.nullable(),
130
+ })
131
+ .strict(),
132
+ })
133
+ .strict();
134
+ const startupCreditsAdmissionReportSchema = startupCreditsAdmissionReportCoreSchema
135
+ .extend({ report_digest: digestSchema })
136
+ .strict();
137
+ export function createStartupCreditsAdmissionReport(input) {
138
+ const core = startupCreditsAdmissionReportCoreSchema.parse(input);
139
+ return startupCreditsAdmissionReportSchema.parse({ ...core, report_digest: digest(core) });
140
+ }
141
+ /** One thing Sourcey checked on a pull request head, worded for its contributor. */
142
+ export const admissionSummaryCheckSchema = z
143
+ .object({
144
+ key: z.enum([
145
+ "admission",
146
+ "files",
147
+ "company",
148
+ "standing",
149
+ "conflicts",
150
+ "sources",
151
+ "facts",
152
+ "logo",
153
+ "verification",
154
+ "review",
155
+ ]),
156
+ status: z.enum(["passed", "failed", "attention", "pending"]),
157
+ title: z.string().min(1).max(240),
158
+ /** Each finding on its own line, with the field or file and the link it is about. */
159
+ details: z
160
+ .array(z
161
+ .object({
162
+ text: z.string().min(1).max(600),
163
+ path: z.string().min(1).max(300).nullable(),
164
+ url: z.url({ protocol: /^https$/u }).nullable(),
165
+ })
166
+ .strict())
167
+ .max(24),
168
+ })
169
+ .strict();
170
+ /**
171
+ * What Sourcey's admission concluded for one exact pull request head, as its contributor reads it
172
+ * on the `sourcey/admission` check and on Sourcey's page for the pull request: one state, what
173
+ * happens next, and every check with what passed and exactly what did not.
174
+ */
175
+ export const admissionSummarySchema = z
176
+ .object({
177
+ summary_contract: z.literal("sourcey.pull-request-admission-summary/v1alpha1"),
178
+ repository: z.string().regex(/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/u),
179
+ pull_request_number: z.number().int().positive(),
180
+ head_sha: gitObjectSchema,
181
+ state: z.enum([
182
+ "passed",
183
+ "needs_change",
184
+ "needs_person",
185
+ "refused",
186
+ "verification_offered",
187
+ "verifying",
188
+ "verification_refused",
189
+ ]),
190
+ title: z.string().min(1).max(120),
191
+ /** What this means for the pull request and what its contributor does next. */
192
+ lead: z.string().min(1).max(600),
193
+ company: z.string().min(1).max(240).nullable(),
194
+ checks: z.array(admissionSummaryCheckSchema).min(1).max(10),
195
+ /** The standing a new company was routed by, rule by rule, when it is part of the result. */
196
+ standing: z
197
+ .object({
198
+ evaluated_at: instantSchema,
199
+ /** The rule in one sentence, so every surface states it the same way. */
200
+ rule: z.string().min(1).max(400),
201
+ criteria: z.array(standingCriterionSchema).min(1).max(8),
202
+ })
203
+ .strict()
204
+ .nullable(),
205
+ /** The full machine report, for whoever wants every digest. */
206
+ report_url: z.url({ protocol: /^https$/u }).nullable(),
207
+ })
208
+ .strict();
209
+ export function verifyStartupCreditsAdmissionReport(input) {
210
+ const report = startupCreditsAdmissionReportSchema.parse(input);
211
+ const { report_digest: reportDigest, ...core } = report;
212
+ if (digest(startupCreditsAdmissionReportCoreSchema.parse(core)) !== reportDigest) {
213
+ throw new Error("Startup Credits admission report digest does not match its content.");
214
+ }
215
+ return report;
216
+ }
217
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../contracts/admission-results/src/index.ts"],"names":[],"mappings":"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"}