mirror of
https://github.com/matter-labs/teepot.git
synced 2025-07-21 07:03:56 +02:00

- Add `max_retries` field to ApiClient with default of 3 retries - Implement `execute_with_retry()` helper method in helpers.rs - Update all HTTP requests to use retry wrapper for automatic 429 handling - Add `TooManyRequests` error variant with request_id and retry_after fields - Respect Retry-After header duration before retrying requests - Add `set_max_retries()` method to configure retry behavior (0 disables) - Update documentation and add handle_rate_limit example - Enhanced error handling in check_status() for 429 responses The client now transparently handles Intel API rate limiting while remaining configurable for users who need different retry behavior or manual handling. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Harald Hoyer <harald@matterlabs.dev>
61 lines
2.1 KiB
Rust
61 lines
2.1 KiB
Rust
// SPDX-License-Identifier: Apache-2.0
|
|
// Copyright (c) 2025 Matter Labs
|
|
|
|
//! Intel API Client
|
|
//!
|
|
//! This module provides an API client for interacting with the Intel API for Trusted Services.
|
|
//! The API follows the documentation found at [Intel API Documentation](https://api.portal.trustedservices.intel.com/content/documentation.html).
|
|
//!
|
|
//! Create an [`ApiClient`] to interface with the Intel API.
|
|
//!
|
|
//! # Rate Limiting
|
|
//!
|
|
//! The Intel API implements rate limiting and may return HTTP 429 (Too Many Requests) responses.
|
|
//! This client automatically handles rate limiting by retrying requests up to 3 times by default,
|
|
//! waiting for the duration specified in the `Retry-After` header. You can configure the retry
|
|
//! behavior using [`ApiClient::set_max_retries`]. If all retries are exhausted, the client
|
|
//! returns an [`IntelApiError::TooManyRequests`] error.
|
|
//!
|
|
//! Example
|
|
//! ```rust,no_run
|
|
//! use intel_dcap_api::{ApiClient, IntelApiError, TcbInfoResponse};
|
|
//!
|
|
//! #[tokio::main]
|
|
//! async fn main() -> Result<(), IntelApiError> {
|
|
//! let client = ApiClient::new()?;
|
|
//!
|
|
//! // Example: Get SGX TCB Info
|
|
//! let fmspc_example = "00606A000000"; // Example FMSPC from docs
|
|
//! match client.get_sgx_tcb_info(fmspc_example, None, None).await {
|
|
//! Ok(TcbInfoResponse {
|
|
//! tcb_info_json,
|
|
//! issuer_chain,
|
|
//! }) => println!(
|
|
//! "SGX TCB Info for {}:\n{}\nIssuer Chain: {}",
|
|
//! fmspc_example, tcb_info_json, issuer_chain
|
|
//! ),
|
|
//! Err(e) => eprintln!("Error getting SGX TCB info: {}", e),
|
|
//! }
|
|
//!
|
|
//! Ok(())
|
|
//! }
|
|
//! ```
|
|
|
|
#![deny(missing_docs)]
|
|
#![deny(clippy::all)]
|
|
|
|
mod client;
|
|
mod error;
|
|
mod requests;
|
|
mod responses;
|
|
mod types;
|
|
|
|
// Re-export public items
|
|
pub use client::ApiClient;
|
|
pub use error::IntelApiError;
|
|
pub use responses::{
|
|
AddPackageResponse, EnclaveIdentityJson, EnclaveIdentityResponse, FmspcJsonResponse,
|
|
PckCertificateResponse, PckCertificatesResponse, PckCrlResponse, TcbEvaluationDataNumbersJson,
|
|
TcbEvaluationDataNumbersResponse, TcbInfoJson, TcbInfoResponse,
|
|
};
|
|
pub use types::{ApiVersion, CaType, CrlEncoding, PlatformFilter, UpdateType};
|