package audit import ( "time" packagev1 "buf.build/gen/go/safedep/api/protocolbuffers/go/safedep/messages/package/v1" ) // SessionData carries aggregate session statistics for session-complete events. type SessionData struct { PackageManager string FlowType FlowType Outcome Outcome TotalAnalyzed uint32 AllowedCount uint32 BlockedCount uint32 ConfirmedCount uint32 TrustedSkipped uint32 InsecureBypassed uint32 CooldownBlockedCount uint32 Duration time.Duration SandboxEnabled bool ParanoidMode bool TransitiveEnabled bool } // FlowType identifies how PMG intercepted the package installation. type FlowType string const ( FlowTypeGuard FlowType = "guard" FlowTypeProxy FlowType = "proxy" ) // Outcome describes the final result of a PMG invocation. type Outcome string const ( OutcomeSuccess Outcome = "success" OutcomeBlocked Outcome = "blocked" OutcomeUserCancelled Outcome = "user_cancelled" OutcomeDryRun Outcome = "dry_run" OutcomeError Outcome = "error" OutcomeInsecureBypass Outcome = "insecure_bypass" ) type EventType string const ( EventTypeMalwareBlocked EventType = "malware_blocked" EventTypeMalwareConfirmed EventType = "malware_confirmed" EventTypeInstallAllowed EventType = "install_allowed" EventTypeInstallTrustedAllowed EventType = "install_trusted_allowed" EventTypeInstallStarted EventType = "install_started" EventTypeDependencyResolved EventType = "dependency_resolved" EventTypeInstallInsecureBypass EventType = "install_insecure_bypass" EventTypeProxyHostObserved EventType = "proxy_host_observed" EventTypeDependencyCooldown EventType = "dependency_cooldown" EventTypeCooldownSkipped EventType = "dependency_cooldown_skipped" EventTypeSandboxOverride EventType = "sandbox_override" EventTypeError EventType = "error" EventTypeSessionComplete EventType = "session_complete" ) // AuditEvent is the canonical audit event for PMG. It carries all data any // sink might need. Fields are zero-valued when not applicable to the event type. type AuditEvent struct { Type EventType Timestamp time.Time Message string // Typed package version — populated for package-level events. PackageVersion *packagev1.PackageVersion // Analysis context AnalysisID string IsMalware bool IsVerified bool // Freeform details for backward-compatible eventlog output. Details map[string]interface{} // Install context PackageManager string Args []string PackageCount int // Sandbox context ProfileName string Overrides []map[string]string // Proxy context Hostname string Method string Reason string // Cooldown context PublishDate time.Time CooldownDays int DaysAgo int DaysLeft int // Error context Error error // Session summary data — populated only for EventTypeSessionComplete SessionData *SessionData }