using StellaOps.Scanner.Core.Contracts; using System; using System.Threading; namespace StellaOps.Scanner.Worker.Processing; public sealed class ScanJobContext { private const string ImageDigestMetadataKey = "image.digest"; public ScanJobContext(IScanJobLease lease, TimeProvider timeProvider, DateTimeOffset startUtc, CancellationToken cancellationToken) { Lease = lease ?? throw new ArgumentNullException(nameof(lease)); TimeProvider = timeProvider ?? throw new ArgumentNullException(nameof(timeProvider)); StartUtc = startUtc; CancellationToken = cancellationToken; Analysis = new ScanAnalysisStore(); } public IScanJobLease Lease { get; } public TimeProvider TimeProvider { get; } public DateTimeOffset StartUtc { get; } public CancellationToken CancellationToken { get; } public string JobId => Lease.JobId; public string ScanId => Lease.ScanId; /// /// Gets the OCI image digest from job metadata, if available. /// public string? ImageDigest => Lease.Metadata.TryGetValue(ImageDigestMetadataKey, out var digest) ? digest : null; public string? ReplayBundlePath { get; set; } public ScanAnalysisStore Analysis { get; } }