using System; using System.Collections.Generic; using System.Text.Json.Serialization; namespace StellaOps.Cli.Services.Models; // SYMS-BUNDLE-401-014: Symbol bundle CLI models /// /// Request to build a symbol bundle. /// internal sealed record SymbolBundleBuildRequest( [property: JsonPropertyName("name")] string Name, [property: JsonPropertyName("version")] string Version, [property: JsonPropertyName("sourceDir")] string SourceDir, [property: JsonPropertyName("outputDir")] string OutputDir, [property: JsonPropertyName("platform")] string? Platform = null, [property: JsonPropertyName("tenantId")] string? TenantId = null, [property: JsonPropertyName("sign")] bool Sign = false, [property: JsonPropertyName("signingKeyPath")] string? SigningKeyPath = null, [property: JsonPropertyName("keyId")] string? KeyId = null, [property: JsonPropertyName("signingAlgorithm")] string SigningAlgorithm = "ecdsa-p256", [property: JsonPropertyName("submitRekor")] bool SubmitRekor = false, [property: JsonPropertyName("rekorUrl")] string RekorUrl = "https://rekor.sigstore.dev", [property: JsonPropertyName("format")] string Format = "zip", [property: JsonPropertyName("compressionLevel")] int CompressionLevel = 6); /// /// Result of symbol bundle build operation. /// internal sealed record SymbolBundleBuildResult( [property: JsonPropertyName("success")] bool Success, [property: JsonPropertyName("bundlePath")] string? BundlePath = null, [property: JsonPropertyName("manifestPath")] string? ManifestPath = null, [property: JsonPropertyName("bundleId")] string? BundleId = null, [property: JsonPropertyName("entryCount")] int EntryCount = 0, [property: JsonPropertyName("totalSizeBytes")] long TotalSizeBytes = 0, [property: JsonPropertyName("signed")] bool Signed = false, [property: JsonPropertyName("rekorLogIndex")] long? RekorLogIndex = null, [property: JsonPropertyName("error")] string? Error = null, [property: JsonPropertyName("warnings")] IReadOnlyList? Warnings = null, [property: JsonPropertyName("durationMs")] long DurationMs = 0); /// /// Request to verify a symbol bundle. /// internal sealed record SymbolBundleVerifyRequest( [property: JsonPropertyName("bundlePath")] string BundlePath, [property: JsonPropertyName("publicKeyPath")] string? PublicKeyPath = null, [property: JsonPropertyName("verifyRekorOffline")] bool VerifyRekorOffline = true, [property: JsonPropertyName("rekorPublicKeyPath")] string? RekorPublicKeyPath = null, [property: JsonPropertyName("verifyBlobHashes")] bool VerifyBlobHashes = true); /// /// Result of symbol bundle verification. /// internal sealed record SymbolBundleVerifyResult( [property: JsonPropertyName("valid")] bool Valid, [property: JsonPropertyName("bundleId")] string? BundleId = null, [property: JsonPropertyName("name")] string? Name = null, [property: JsonPropertyName("version")] string? Version = null, [property: JsonPropertyName("signatureStatus")] string SignatureStatus = "unsigned", [property: JsonPropertyName("rekorStatus")] string? RekorStatus = null, [property: JsonPropertyName("hashStatus")] SymbolBundleHashStatus? HashStatus = null, [property: JsonPropertyName("errors")] IReadOnlyList? Errors = null, [property: JsonPropertyName("warnings")] IReadOnlyList? Warnings = null); /// /// Hash verification status for a bundle. /// internal sealed record SymbolBundleHashStatus( [property: JsonPropertyName("bundleHashValid")] bool BundleHashValid, [property: JsonPropertyName("validEntries")] int ValidEntries, [property: JsonPropertyName("invalidEntries")] int InvalidEntries, [property: JsonPropertyName("totalEntries")] int TotalEntries, [property: JsonPropertyName("invalidEntryIds")] IReadOnlyList? InvalidEntryIds = null); /// /// Request to extract a symbol bundle. /// internal sealed record SymbolBundleExtractRequest( [property: JsonPropertyName("bundlePath")] string BundlePath, [property: JsonPropertyName("outputDir")] string OutputDir, [property: JsonPropertyName("verifyFirst")] bool VerifyFirst = true, [property: JsonPropertyName("platform")] string? Platform = null, [property: JsonPropertyName("overwrite")] bool Overwrite = false, [property: JsonPropertyName("manifestsOnly")] bool ManifestsOnly = false); /// /// Result of symbol bundle extraction. /// internal sealed record SymbolBundleExtractResult( [property: JsonPropertyName("success")] bool Success, [property: JsonPropertyName("extractedCount")] int ExtractedCount = 0, [property: JsonPropertyName("skippedCount")] int SkippedCount = 0, [property: JsonPropertyName("totalBytesExtracted")] long TotalBytesExtracted = 0, [property: JsonPropertyName("verificationPassed")] bool? VerificationPassed = null, [property: JsonPropertyName("error")] string? Error = null, [property: JsonPropertyName("durationMs")] long DurationMs = 0); /// /// Symbol bundle manifest info for inspection. /// internal sealed record SymbolBundleInfo( [property: JsonPropertyName("bundleId")] string BundleId, [property: JsonPropertyName("name")] string Name, [property: JsonPropertyName("version")] string Version, [property: JsonPropertyName("createdAt")] DateTimeOffset CreatedAt, [property: JsonPropertyName("platform")] string? Platform = null, [property: JsonPropertyName("tenantId")] string? TenantId = null, [property: JsonPropertyName("entryCount")] int EntryCount = 0, [property: JsonPropertyName("totalSizeBytes")] long TotalSizeBytes = 0, [property: JsonPropertyName("hashAlgorithm")] string HashAlgorithm = "blake3", [property: JsonPropertyName("signed")] bool Signed = false, [property: JsonPropertyName("signatureAlgorithm")] string? SignatureAlgorithm = null, [property: JsonPropertyName("signatureKeyId")] string? SignatureKeyId = null, [property: JsonPropertyName("rekorLogIndex")] long? RekorLogIndex = null, [property: JsonPropertyName("entries")] IReadOnlyList? Entries = null); /// /// Individual entry in a symbol bundle. /// internal sealed record SymbolBundleEntryInfo( [property: JsonPropertyName("debugId")] string DebugId, [property: JsonPropertyName("binaryName")] string BinaryName, [property: JsonPropertyName("platform")] string? Platform = null, [property: JsonPropertyName("format")] string? Format = null, [property: JsonPropertyName("blobHash")] string? BlobHash = null, [property: JsonPropertyName("blobSizeBytes")] long BlobSizeBytes = 0, [property: JsonPropertyName("symbolCount")] int SymbolCount = 0);