using System; using System.Collections.Generic; using System.Text.Json.Serialization; namespace StellaOps.Excititor.WebService.Contracts; /// /// Response for /attestations/vex/{attestationId} endpoint. /// public sealed record VexAttestationDetailResponse( [property: JsonPropertyName("attestationId")] string AttestationId, [property: JsonPropertyName("tenant")] string Tenant, [property: JsonPropertyName("createdAt")] DateTimeOffset CreatedAt, [property: JsonPropertyName("predicateType")] string PredicateType, [property: JsonPropertyName("subject")] VexAttestationSubject Subject, [property: JsonPropertyName("builder")] VexAttestationBuilderIdentity Builder, [property: JsonPropertyName("verification")] VexAttestationVerificationState Verification, [property: JsonPropertyName("chainOfCustody")] IReadOnlyList ChainOfCustody, [property: JsonPropertyName("metadata")] IReadOnlyDictionary Metadata); /// /// Subject of the attestation (what was signed). /// public sealed record VexAttestationSubject( [property: JsonPropertyName("digest")] string Digest, [property: JsonPropertyName("digestAlgorithm")] string DigestAlgorithm, [property: JsonPropertyName("name")] string? Name, [property: JsonPropertyName("uri")] string? Uri); /// /// Builder identity for the attestation. /// public sealed record VexAttestationBuilderIdentity( [property: JsonPropertyName("id")] string Id, [property: JsonPropertyName("version")] string? Version, [property: JsonPropertyName("builderId")] string? BuilderId, [property: JsonPropertyName("invocationId")] string? InvocationId); /// /// DSSE verification state. /// public sealed record VexAttestationVerificationState( [property: JsonPropertyName("valid")] bool Valid, [property: JsonPropertyName("verifiedAt")] DateTimeOffset? VerifiedAt, [property: JsonPropertyName("signatureType")] string? SignatureType, [property: JsonPropertyName("keyId")] string? KeyId, [property: JsonPropertyName("issuer")] string? Issuer, [property: JsonPropertyName("envelopeDigest")] string? EnvelopeDigest, [property: JsonPropertyName("diagnostics")] IReadOnlyDictionary Diagnostics); /// /// Chain-of-custody link in the attestation provenance. /// public sealed record VexAttestationCustodyLink( [property: JsonPropertyName("step")] int Step, [property: JsonPropertyName("actor")] string Actor, [property: JsonPropertyName("action")] string Action, [property: JsonPropertyName("timestamp")] DateTimeOffset Timestamp, [property: JsonPropertyName("reference")] string? Reference); /// /// Response for /attestations/vex/list endpoint. /// public sealed record VexAttestationListResponse( [property: JsonPropertyName("items")] IReadOnlyList Items, [property: JsonPropertyName("cursor")] string? Cursor, [property: JsonPropertyName("hasMore")] bool HasMore, [property: JsonPropertyName("total")] int Total); /// /// Summary item for attestation list. /// public sealed record VexAttestationListItem( [property: JsonPropertyName("attestationId")] string AttestationId, [property: JsonPropertyName("tenant")] string Tenant, [property: JsonPropertyName("createdAt")] DateTimeOffset CreatedAt, [property: JsonPropertyName("predicateType")] string PredicateType, [property: JsonPropertyName("subjectDigest")] string SubjectDigest, [property: JsonPropertyName("valid")] bool Valid, [property: JsonPropertyName("builderId")] string? BuilderId); /// /// Response for /attestations/vex/lookup endpoint. /// public sealed record VexAttestationLookupResponse( [property: JsonPropertyName("subjectDigest")] string SubjectDigest, [property: JsonPropertyName("attestations")] IReadOnlyList Attestations, [property: JsonPropertyName("queriedAt")] DateTimeOffset QueriedAt);