Add idempotency policy validation
CI / Rust Checks (push) Successful in 5m48s
Deploy / deploy (push) Successful in 1m37s
CI / UI Checks (push) Successful in 4s
CI / Deployment Manifests (push) Successful in 2s
CI / Frontend E2E (push) Successful in 4m33s

This commit is contained in:
github-ops
2026-06-20 21:16:00 +00:00
parent 7099faad2b
commit 79afb7df70
8 changed files with 166 additions and 7 deletions
+3 -3
View File
@@ -56,9 +56,9 @@ pub use observability::{
InvocationLevel, InvocationLog, InvocationSource, InvocationStatus, UsagePeriod, UsageRollup,
};
pub use operation::{
ConfigExport, ExecutionConfig, GeneratedDraft, GeneratedDraftStatus, Operation,
OperationStatus, ResponseCachePolicy, RestTarget, RetryPolicy, Samples, Target,
ToolDescription, ToolExample, WizardState,
ConfigExport, ExecutionConfig, GeneratedDraft, GeneratedDraftStatus, IdempotencyMode,
IdempotencyPolicy, Operation, OperationStatus, ResponseCachePolicy, RestTarget, RetryPolicy,
Samples, Target, ToolDescription, ToolExample, WizardState,
};
pub use protocol::{AuthKind, ExportMode, HttpMethod, Protocol};
pub use secret::{Secret, SecretKind, SecretStatus, SecretVersion};
+22 -1
View File
@@ -52,7 +52,25 @@ pub struct ResponseCachePolicy {
pub ttl_ms: u64,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum IdempotencyMode {
Disabled,
Optional,
Required,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct IdempotencyPolicy {
pub mode: IdempotencyMode,
pub ttl_ms: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_field: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub header_name: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct ExecutionConfig {
pub timeout_ms: u64,
#[serde(skip_serializing_if = "Option::is_none")]
@@ -60,6 +78,8 @@ pub struct ExecutionConfig {
#[serde(skip_serializing_if = "Option::is_none")]
pub response_cache: Option<ResponseCachePolicy>,
#[serde(skip_serializing_if = "Option::is_none")]
pub idempotency: Option<IdempotencyPolicy>,
#[serde(skip_serializing_if = "Option::is_none")]
pub auth_profile_ref: Option<AuthProfileId>,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub headers: BTreeMap<String, String>,
@@ -352,6 +372,7 @@ updated_at: 2026-03-25T08:10:00Z
timeout_ms: 10_000,
retry_policy: None,
response_cache: None,
idempotency: None,
auth_profile_ref: Some(AuthProfileId::new("auth_01")),
headers: BTreeMap::new(),
},