using ScadaLink.Commons.Messages.Integration; namespace ScadaLink.Commons.Interfaces.Services; /// /// Site-side fan-out abstraction for cached-call lifecycle telemetry /// (Audit Log #23 / M3). One packet carries /// both an audit row and an operational SiteCalls upsert; the /// implementation routes the audit half through /// and the operational half through the site-local tracking SQLite store. /// /// /// /// Defined in Commons so the script runtime (and the StoreAndForward retry /// loop, Bundle E4) can take a dependency on the abstraction rather than on /// the concrete forwarder living inside ScadaLink.AuditLog — the /// existing dependency arrow runs from SiteRuntime to Commons, not to /// AuditLog. /// /// /// Best-effort contract (alog.md §7): implementations MUST swallow /// internal failures rather than propagating to the calling script. /// /// public interface ICachedCallTelemetryForwarder { /// /// Fan one combined-telemetry packet out to the audit writer and the /// tracking store. Best-effort — failures on either half are logged and /// swallowed; the returned Task completes when both halves have been /// attempted. /// Task ForwardAsync(CachedCallTelemetry telemetry, CancellationToken ct = default); }