// -----------------------------------------------------------------------------
// SecretSignalContextExtensions.cs
// Sprint: SPRINT_20260104_004_POLICY (Secret DSL Integration)
// Task: PSD-008 - Register predicates in PolicyDslRegistry (via signal context)
// -----------------------------------------------------------------------------
using StellaOps.Policy.Secrets;
namespace StellaOps.PolicyDsl;
///
/// Extension methods for integrating secret evidence with PolicyDsl SignalContext.
///
public static class SecretSignalContextExtensions
{
///
/// Adds secret evidence signals to the signal context.
///
/// The signal context.
/// The secret evidence context.
/// The signal context for chaining.
public static SignalContext WithSecretEvidence(
this SignalContext context,
SecretEvidenceContext evidenceContext)
{
ArgumentNullException.ThrowIfNull(context);
ArgumentNullException.ThrowIfNull(evidenceContext);
// Add flat signals
var signals = SecretSignalBinder.BindToSignals(evidenceContext);
foreach (var (name, value) in signals)
{
context.SetSignal(name, value);
}
// Add nested object for member access (secret.severity.high, etc.)
var nested = SecretSignalBinder.BindToNestedObject(evidenceContext);
context.SetSignal("secret", nested);
return context;
}
///
/// Adds secret evidence signals to the signal context builder.
///
/// The signal context builder.
/// The secret evidence context.
/// The builder for chaining.
public static SignalContextBuilder WithSecretEvidence(
this SignalContextBuilder builder,
SecretEvidenceContext evidenceContext)
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(evidenceContext);
// Add flat signals
var signals = SecretSignalBinder.BindToSignals(evidenceContext);
foreach (var (name, value) in signals)
{
builder.WithSignal(name, value);
}
// Add nested object for member access
var nested = SecretSignalBinder.BindToNestedObject(evidenceContext);
builder.WithSignal("secret", nested);
return builder;
}
///
/// Adds secret evidence signals from a provider.
///
/// The signal context builder.
/// The secret evidence provider.
/// The builder for chaining.
public static SignalContextBuilder WithSecretEvidence(
this SignalContextBuilder builder,
ISecretEvidenceProvider provider)
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(provider);
var context = new SecretEvidenceContext(provider);
return builder.WithSecretEvidence(context);
}
///
/// Creates a signal context builder with secret evidence.
///
/// The secret evidence context.
/// A new builder with secret signals.
public static SignalContextBuilder CreateBuilderWithSecrets(SecretEvidenceContext evidenceContext)
{
return SignalContext.Builder().WithSecretEvidence(evidenceContext);
}
///
/// Creates a signal context with secret evidence.
///
/// The secret evidence context.
/// A new signal context with secret signals.
public static SignalContext CreateContextWithSecrets(SecretEvidenceContext evidenceContext)
{
return CreateBuilderWithSecrets(evidenceContext).Build();
}
}