using System; using System.Collections.Generic; using System.Text.Json.Serialization; namespace StellaOps.Cli.Services.Models; internal sealed record AdvisoryObservationsQuery( string Tenant, IReadOnlyList ObservationIds, IReadOnlyList Aliases, IReadOnlyList Purls, IReadOnlyList Cpes, int? Limit, string? Cursor); internal sealed class AdvisoryObservationsResponse { [JsonPropertyName("observations")] public IReadOnlyList Observations { get; init; } = Array.Empty(); [JsonPropertyName("linkset")] public AdvisoryObservationLinksetAggregate Linkset { get; init; } = new(); [JsonPropertyName("nextCursor")] public string? NextCursor { get; init; } [JsonPropertyName("hasMore")] public bool HasMore { get; init; } } internal sealed class AdvisoryObservationDocument { [JsonPropertyName("observationId")] public string ObservationId { get; init; } = string.Empty; [JsonPropertyName("tenant")] public string Tenant { get; init; } = string.Empty; [JsonPropertyName("source")] public AdvisoryObservationSource Source { get; init; } = new(); [JsonPropertyName("upstream")] public AdvisoryObservationUpstream Upstream { get; init; } = new(); [JsonPropertyName("linkset")] public AdvisoryObservationLinkset Linkset { get; init; } = new(); [JsonPropertyName("createdAt")] public DateTimeOffset CreatedAt { get; init; } } internal sealed class AdvisoryObservationSource { [JsonPropertyName("vendor")] public string Vendor { get; init; } = string.Empty; [JsonPropertyName("stream")] public string Stream { get; init; } = string.Empty; [JsonPropertyName("api")] public string Api { get; init; } = string.Empty; [JsonPropertyName("collectorVersion")] public string? CollectorVersion { get; init; } } internal sealed class AdvisoryObservationUpstream { [JsonPropertyName("upstreamId")] public string UpstreamId { get; init; } = string.Empty; [JsonPropertyName("documentVersion")] public string? DocumentVersion { get; init; } } internal sealed class AdvisoryObservationLinkset { [JsonPropertyName("aliases")] public IReadOnlyList Aliases { get; init; } = Array.Empty(); [JsonPropertyName("purls")] public IReadOnlyList Purls { get; init; } = Array.Empty(); [JsonPropertyName("cpes")] public IReadOnlyList Cpes { get; init; } = Array.Empty(); [JsonPropertyName("references")] public IReadOnlyList References { get; init; } = Array.Empty(); } internal sealed class AdvisoryObservationReference { [JsonPropertyName("type")] public string Type { get; init; } = string.Empty; [JsonPropertyName("url")] public string Url { get; init; } = string.Empty; } internal sealed class AdvisoryObservationLinksetAggregate { [JsonPropertyName("aliases")] public IReadOnlyList Aliases { get; init; } = Array.Empty(); [JsonPropertyName("purls")] public IReadOnlyList Purls { get; init; } = Array.Empty(); [JsonPropertyName("cpes")] public IReadOnlyList Cpes { get; init; } = Array.Empty(); [JsonPropertyName("references")] public IReadOnlyList References { get; init; } = Array.Empty(); }