From d597f23d56d533a32d9bf5886d7a93ba9dc39452 Mon Sep 17 00:00:00 2001 From: Mohamed Rafeek Raja S Date: Thu, 20 Feb 2025 17:36:02 +0530 Subject: [PATCH 1/2] feat(router): add support for azure key vault as secret manager Implement Azure key vault support for secret management and encryption management in external_services. This can be used to securely storing sensitive configuration settings. Fixes #6181 --- crates/external_services/Cargo.toml | 3 + .../external_services/src/azure_key_vault.rs | 5 + .../src/azure_key_vault/core.rs | 253 ++++++++++++++++++ .../src/azure_key_vault/implementers.rs | 41 +++ crates/external_services/src/lib.rs | 19 +- 5 files changed, 319 insertions(+), 2 deletions(-) create mode 100644 crates/external_services/src/azure_key_vault.rs create mode 100644 crates/external_services/src/azure_key_vault/core.rs create mode 100644 crates/external_services/src/azure_key_vault/implementers.rs diff --git a/crates/external_services/Cargo.toml b/crates/external_services/Cargo.toml index e617dbe8351..8a47d9129aa 100644 --- a/crates/external_services/Cargo.toml +++ b/crates/external_services/Cargo.toml @@ -12,6 +12,7 @@ aws_kms = ["dep:aws-config", "dep:aws-sdk-kms"] email = ["dep:aws-config"] aws_s3 = ["dep:aws-config", "dep:aws-sdk-s3"] hashicorp-vault = ["dep:vaultrs"] +azure_key_vault = ["dep:azure_identity", "dep:azure_security_keyvault_keys"] v1 = ["hyperswitch_interfaces/v1", "common_utils/v1"] dynamic_routing = ["dep:prost", "dep:tonic", "dep:tonic-reflection", "dep:tonic-types", "dep:api_models", "tokio/macros", "tokio/rt-multi-thread", "dep:tonic-build", "dep:router_env", "dep:hyper-util", "dep:http-body-util"] @@ -41,6 +42,8 @@ tonic-reflection = { version = "0.12.2", optional = true } tonic-types = { version = "0.12.2", optional = true } hyper-util = { version = "0.1.9", optional = true } http-body-util = { version = "0.1.2", optional = true } +azure_identity = { git = "https://github.com/Azure/azure-sdk-for-rust.git", branch = "main", optional = true} +azure_security_keyvault_keys = { git = "https://github.com/Azure/azure-sdk-for-rust.git", branch = "main", optional = true} # First party crates diff --git a/crates/external_services/src/azure_key_vault.rs b/crates/external_services/src/azure_key_vault.rs new file mode 100644 index 00000000000..4b132b60084 --- /dev/null +++ b/crates/external_services/src/azure_key_vault.rs @@ -0,0 +1,5 @@ +//! Interactions with the AZURE KEY VAULT SDK + +pub mod core; + +pub mod implementers; diff --git a/crates/external_services/src/azure_key_vault/core.rs b/crates/external_services/src/azure_key_vault/core.rs new file mode 100644 index 00000000000..174d81a5aa1 --- /dev/null +++ b/crates/external_services/src/azure_key_vault/core.rs @@ -0,0 +1,253 @@ +//! Interactions with the AZURE KEY VAULT SDK + +use std::sync::Arc; + +use azure_identity::DefaultAzureCredential; +use azure_security_keyvault_keys::{ + KeyClient, + models::{KeyOperationsParameters, JsonWebKeyEncryptionAlgorithm}, +}; +use crate::{consts, metrics}; +use base64::Engine; + +use std::time::Instant; +use common_utils::errors::CustomResult; +use error_stack::{report, ResultExt}; +use router_env::logger; + + +/// Configuration parameters required for constructing a [`AzureKeyVaultClient`]. +#[derive(Clone, Debug, Default, serde::Deserialize)] +#[serde(default)] +pub struct AzureKeyVaultConfig { + /// key name of Azure Key vault used to encrypt or decrypt data + pub key_name: String, + /// The Azure vault url of the Key vault. + pub vault_url: String, + /// version of the key name + pub version: String, +} + +impl AzureKeyVaultConfig { + /// Verifies that the [`AzureKeyVaultClient`] configuration is usable. + pub fn validate(&self) -> Result<(), &'static str> { + use common_utils::{ext_traits::ConfigExt, fp_utils::when}; + + when(self.key_name.is_default_or_empty(), || { + Err("Azure Key Vault key name must not be empty") + })?; + + when(self.vault_url.is_default_or_empty(), || { + Err("Azure Key Vault url must not be empty") + }) + } +} + +/// Client for AZURE KEY VAULT operations. +#[derive(Clone)] +pub struct AzureKeyVaultClient { + inner_client: Arc, + key_name: String, + version: String, +} + +impl AzureKeyVaultClient { + /// Constructs a new Azure Key Vault client. + pub async fn new(config: &AzureKeyVaultConfig) -> Result { + let credential = DefaultAzureCredential::new() + .map_err(|_| AzureKeyVaultError::AzureKeyVaultClientInitializationFailed)?; + + Ok(Self { + inner_client: Arc::new( + KeyClient::new( + &config.vault_url, + credential.clone(), + None + ) + .map_err( + |_| AzureKeyVaultError::AzureKeyVaultClientInitializationFailed)? + ), + key_name: config.key_name.clone(), + version: config.version.clone(), + }) + } + /// Decrypts the provided base64-encoded encrypted data using the AZURE KEY VAULT SDK. We assume that + /// the SDK has the values required to interact with the AZURE KEY VAULT APIs (`AZURE_TENANT_ID`, + /// `AZURE_CLIENT_ID` and `AZURE_CLIENT_SECRET`) either set in environment variables, or that the + /// SDK is running in a machine that is able to assume an Azure AD role. + pub async fn decrypt(&self, data: impl AsRef<[u8]>) -> CustomResult { + let start = Instant::now(); + + let data = consts::BASE64_ENGINE + .decode(data) + .change_context(AzureKeyVaultError::Base64DecodingFailed)?; + + let decrypt_params = KeyOperationsParameters { + algorithm: Some(JsonWebKeyEncryptionAlgorithm::RsaOaep), + value: Some(data), + ..Default::default() + }; + let decrypted_output = self.inner_client + .decrypt(&self.key_name, &self.version , decrypt_params.clone().try_into().unwrap(), None) + .await + .inspect_err(|error| { + logger::error!(azure_key_vault_error=?error, "Failed to Azure Key Vault decrypt data"); + metrics::AZURE_KEY_VAULT_DECRYPTION_FAILURES.add(1, &[]); + }) + .change_context(AzureKeyVaultError::DecryptionFailed)? + .into_body() + .await + .inspect_err(|error| { + logger::error!(azure_key_vault_error=?error, "Failed to Azure Key Vault decrypt data"); + metrics::AZURE_KEY_VAULT_DECRYPTION_FAILURES.add(1, &[]); + }) + .change_context(AzureKeyVaultError::DecryptionFailed)?; + + let output = decrypted_output + .result + .ok_or(report!(AzureKeyVaultError::MissingPlaintextDecryptionOutput)) + .and_then(|bytes| + String::from_utf8(bytes) + .change_context(AzureKeyVaultError::Utf8DecodingFailed) + )?; + + let time_taken = start.elapsed(); + metrics::AZURE_KEY_VAULT_DECRYPT_TIME.record(time_taken.as_secs_f64(), &[]); + + Ok(output) + } + + /// Encrypts the provided String using the AZURE KEY VAULT SDK and returns base64-encoded encrypted data. + /// We assume that the SDK has the values required to interact with the AZURE KEY VAULT APIs (`AZURE_TENANT_ID`, + /// `AZURE_CLIENT_ID` and `AZURE_CLIENT_SECRET`) either set in environment variables, or that the + /// SDK is running in a machine that is able to assume an Azure AD role. + pub async fn encrypt(&self, data: impl AsRef<[u8]>) -> CustomResult { + let start = Instant::now(); + + let encrypt_params = KeyOperationsParameters { + algorithm: Some(JsonWebKeyEncryptionAlgorithm::RsaOaep), + value: Some(data.as_ref().to_vec()), + ..Default::default() + }; + + let encrypted_output = self + .inner_client + .encrypt(&self.key_name, &self.version, encrypt_params.clone().try_into().unwrap(), None) + .await + .inspect_err(|error| { + logger::error!(azure_key_vault_error=?error, "Failed to Azure Key Vault decrypt data"); + metrics::AZURE_KEY_VAULT_ENCRYPTION_FAILURES.add(1, &[]); + }) + .change_context(AzureKeyVaultError::EncryptionFailed)? + .into_body() + .await + .inspect_err(|error| { + logger::error!(azure_key_vault_error=?error, "Failed to Azure Key Vault decrypt data"); + metrics::AZURE_KEY_VAULT_ENCRYPTION_FAILURES.add(1, &[]); + }) + .change_context(AzureKeyVaultError::EncryptionFailed)?; + + let output = encrypted_output + .result + .ok_or(AzureKeyVaultError::MissingCiphertextEncryptionOutput) + .map(|bytes| consts::BASE64_ENGINE.encode(bytes))?; + + let time_taken = start.elapsed(); + metrics::AZURE_KEY_VAULT_ENCRYPT_TIME.record(time_taken.as_secs_f64(), &[]); + + Ok(output) + } + + +} + + +/// Errors that could occur during AZURE KEY VAULT operations. +#[derive(Debug, thiserror::Error)] +pub enum AzureKeyVaultError { + /// An error occurred when base64 encoding input data. + #[error("Failed to base64 encode input data")] + Base64EncodingFailed, + + /// An error occurred when base64 decoding input data. + #[error("Failed to base64 decode input data")] + Base64DecodingFailed, + + /// An error occurred when AZURE KEY VAULT decrypting input data. + #[error("Failed to Azure Key Vault decrypt input data")] + DecryptionFailed, + + /// An error occurred when AZURE KEY VAULT encrypting input data. + #[error("Failed to Azure Key Vault encrypt input data")] + EncryptionFailed, + + /// The AZURE KEY VAULT decrypted output does not include a plaintext output. + #[error("Missing plaintext AZURE KEY VAULT decryption output")] + MissingPlaintextDecryptionOutput, + + /// The AZURE KEY VAULT encrypted output does not include a ciphertext output. + #[error("Missing ciphertext AZURE KEY VAULT encryption output")] + MissingCiphertextEncryptionOutput, + + /// An error occurred UTF-8 decoding AZURE KEY VAULT decrypted output. + #[error("Failed to UTF-8 decode decryption output")] + Utf8DecodingFailed, + + /// The AZURE KEY VAULT client has not been initialized. + #[error("The AZURE KEY VAULT client has not been initialized")] + AzureKeyVaultClientInitializationFailed, +} + + +#[cfg(test)] +mod tests { + #![allow(clippy::expect_used, clippy::print_stdout)] + #[tokio::test] + async fn check_azure_key_vault_encryption() { + std::env::set_var("AZURE_CLIENT_ID", "YOUR-CLIENT-ID"); + std::env::set_var("AZURE_TENANT_ID", "YOUR-TENANT-ID"); + std::env::set_var("AZURE_CLIENT_SECRET", "YOUR-CLIENT-SECRET"); + use super::*; + let config = AzureKeyVaultConfig { + key_name: "YOUR AZURE KEY VAULT KEY NAME".to_string(), + vault_url: "YOUR AZURE KEY VAULT URL".to_string(), + version: "".to_string(), + }; + + let data = "hello".to_string(); + let binding = data.as_bytes(); + let encrypted_fingerprint = AzureKeyVaultClient::new(&config) + .await + .expect("azure key vault client initialization failed") + .encrypt(binding) + .await + .expect("azure key vault encryption failed"); + + println!("{}", encrypted_fingerprint); + } + + #[tokio::test] + async fn check_azure_key_vault_decrypt() { + std::env::set_var("AZURE_CLIENT_ID", "YOUR-CLIENT-ID"); + std::env::set_var("AZURE_TENANT_ID", "YOUR-TENANT-ID"); + std::env::set_var("AZURE_CLIENT_SECRET", "YOUR-CLIENT-SECRET"); + use super::*; + let config = AzureKeyVaultConfig { + key_name: "YOUR AZURE KEY VAULT KEY NAME".to_string(), + vault_url: "YOUR AZURE KEY VAULT URL".to_string(), + version: "".to_string(), + }; + + // Should decrypt to hello + let data = "AZURE KEY VAULT ENCRYPTED CIPHER".to_string(); + let binding = data.as_bytes(); + let decrypted_fingerprint = AzureKeyVaultClient::new(&config) + .await + .expect("azure key vault client initialization failed") + .encrypt(binding) + .await + .expect("azure key vault decryption failed"); + + println!("{}", decrypted_fingerprint); + } +} diff --git a/crates/external_services/src/azure_key_vault/implementers.rs b/crates/external_services/src/azure_key_vault/implementers.rs new file mode 100644 index 00000000000..4b2e6ed4533 --- /dev/null +++ b/crates/external_services/src/azure_key_vault/implementers.rs @@ -0,0 +1,41 @@ +//! Trait implementations for azure key vault + +use common_utils::errors::CustomResult; +use error_stack::ResultExt; +use hyperswitch_interfaces::{ + encryption_interface::{EncryptionError, EncryptionManagementInterface}, + secrets_interface::{SecretManagementInterface, SecretsManagementError}, +}; +use masking::{PeekInterface, Secret}; + +use crate::azure_key_vault::core::AzureKeyVaultClient; + +#[async_trait::async_trait] +impl EncryptionManagementInterface for AzureKeyVaultClient { + async fn encrypt(&self, input: &[u8]) -> CustomResult, EncryptionError> { + self.encrypt(input) + .await + .change_context(EncryptionError::EncryptionFailed) + .map(|val| val.into_bytes()) + } + + async fn decrypt(&self, input: &[u8]) -> CustomResult, EncryptionError> { + self.decrypt(input) + .await + .change_context(EncryptionError::DecryptionFailed) + .map(|val| val.into_bytes()) + } +} + +#[async_trait::async_trait] +impl SecretManagementInterface for AzureKeyVaultClient { + async fn get_secret( + &self, + input: Secret, + ) -> CustomResult, SecretsManagementError> { + self.decrypt(input.peek()) + .await + .change_context(SecretsManagementError::FetchSecretFailed) + .map(Into::into) + } +} diff --git a/crates/external_services/src/lib.rs b/crates/external_services/src/lib.rs index 304ce248317..9a8e526cf90 100644 --- a/crates/external_services/src/lib.rs +++ b/crates/external_services/src/lib.rs @@ -8,6 +8,9 @@ pub mod email; #[cfg(feature = "aws_kms")] pub mod aws_kms; +#[cfg(feature = "azure_key_vault")] +pub mod azure_key_vault; + pub mod file_storage; #[cfg(feature = "hashicorp-vault")] pub mod hashicorp_vault; @@ -20,7 +23,7 @@ pub mod grpc_client; pub mod managers; /// Crate specific constants -#[cfg(feature = "aws_kms")] +#[cfg(feature = "aws_kms", feature = "azure_key_vault")] pub mod consts { /// General purpose base64 engine pub(crate) const BASE64_ENGINE: base64::engine::GeneralPurpose = @@ -28,7 +31,7 @@ pub mod consts { } /// Metrics for interactions with external systems. -#[cfg(feature = "aws_kms")] +#[cfg(feature = "aws_kms", feature = "azure_key_vault")] pub mod metrics { use router_env::{counter_metric, global_meter, histogram_metric_f64}; @@ -43,4 +46,16 @@ pub mod metrics { histogram_metric_f64!(AWS_KMS_DECRYPT_TIME, GLOBAL_METER); // Histogram for AWS KMS decryption time (in sec) #[cfg(feature = "aws_kms")] histogram_metric_f64!(AWS_KMS_ENCRYPT_TIME, GLOBAL_METER); // Histogram for AWS KMS encryption time (in sec) + + + #[cfg(feature = "azure_key_vault")] + counter_metric!(AZURE_KEY_VAULT_DECRYPTION_FAILURES, GLOBAL_METER); // No. of Azure Key Vault Decryption failures + #[cfg(feature = "azure_key_vault")] + counter_metric!(AZURE_KEY_VAULT_ENCRYPTION_FAILURES, GLOBAL_METER); // No. of Azure Key Vault Encryption failures + + #[cfg(feature = "azure_key_vault")] + histogram_metric_f64!(AZURE_KEY_VAULT_DECRYPT_TIME, GLOBAL_METER); // Histogram for Azure Key Vault decryption time (in sec) + + #[cfg(feature = "azure_key_vault")] + histogram_metric_f64!(AZURE_KEY_VAULT_ENCRYPT_TIME, GLOBAL_METER); // Histogram for Azure Key Vault encryption time (in sec) } From 806228555c36a5ef819e4d542556b2094075b457 Mon Sep 17 00:00:00 2001 From: Mohamed Rafeek Raja S Date: Fri, 21 Feb 2025 18:41:10 +0530 Subject: [PATCH 2/2] feat(router): update azure crate deps from git source to crates.io --- Cargo.lock | 649 +++++++++++++++++++++++----- crates/external_services/Cargo.toml | 5 +- crates/external_services/src/lib.rs | 4 +- 3 files changed, 537 insertions(+), 121 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5b4d9767029..12d0101a479 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -65,7 +65,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rand", + "rand 0.8.5", "sha1", "smallvec 1.13.2", "tokio 1.40.0", @@ -81,7 +81,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -102,7 +102,7 @@ dependencies = [ "log", "memchr", "mime", - "rand", + "rand 0.8.5", "serde", "serde_json", "serde_plain", @@ -120,7 +120,7 @@ dependencies = [ "parse-size", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -262,7 +262,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -292,7 +292,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", ] @@ -304,7 +304,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if 1.0.0", - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -532,7 +532,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", "synstructure 0.13.1", ] @@ -544,7 +544,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -570,6 +570,29 @@ dependencies = [ "tracing", ] +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-compression" version = "0.4.12" @@ -583,17 +606,73 @@ dependencies = [ "tokio 1.40.0", ] +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock", + "cfg-if 1.0.0", + "concurrent-queue", + "futures-io", + "futures-lite 2.6.0", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "async-lock" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener", + "event-listener 5.3.1", "event-listener-strategy", "pin-project-lite", ] +[[package]] +name = "async-process" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +dependencies = [ + "async-channel 2.3.1", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if 1.0.0", + "event-listener 5.3.1", + "futures-lite 2.6.0", + "rustix", + "tracing", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if 1.0.0", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + [[package]] name = "async-stream" version = "0.3.5" @@ -613,9 +692,15 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + [[package]] name = "async-trait" version = "0.1.82" @@ -624,7 +709,7 @@ checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -674,7 +759,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rand", + "rand 0.8.5", "rustls 0.20.9", "serde", "serde_json", @@ -1477,6 +1562,63 @@ dependencies = [ "tower-service", ] +[[package]] +name = "azure_core" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c749d6035e8835014fa4897173792d772f0a65fac32e57c3cd9d676c8114e8a" +dependencies = [ + "async-lock", + "async-trait", + "bytes 1.7.1", + "futures 0.3.30", + "once_cell", + "paste", + "pin-project", + "rustc_version 0.4.1", + "serde", + "serde_json", + "tracing", + "typespec", + "typespec_client_core", +] + +[[package]] +name = "azure_identity" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efc50602247671f7c7e59520b6d6ee78cc8c409cfd796d28fd4a084db9c9791b" +dependencies = [ + "async-lock", + "async-process", + "async-trait", + "azure_core", + "futures 0.3.30", + "oauth2 5.0.0", + "pin-project", + "serde", + "time", + "tracing", + "typespec_client_core", + "tz-rs", + "url", +] + +[[package]] +name = "azure_security_keyvault_keys" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fc74b0309e8a5ed68a2d0d588185ae3df3aaec0a166ef72e6bd9d66a0ae158" +dependencies = [ + "azure_core", + "futures 0.3.30", + "rustc_version 0.4.1", + "serde", + "serde_json", + "time", + "typespec_client_core", +] + [[package]] name = "backtrace" version = "0.3.73" @@ -1659,6 +1801,19 @@ dependencies = [ "generic-array", ] +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.6.0", + "piper", +] + [[package]] name = "borsh" version = "1.5.1" @@ -1679,7 +1834,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", "syn_derive", ] @@ -1994,7 +2149,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2071,7 +2226,7 @@ dependencies = [ "phonenumber", "proptest", "quick-xml", - "rand", + "rand 0.8.5", "regex", "reqwest 0.11.27", "ring 0.17.8", @@ -2168,11 +2323,17 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom", + "getrandom 0.2.15", "once_cell", "tiny-keccak", ] +[[package]] +name = "const_fn" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f8a2ca5ac02d09563609681103aada9e1777d54fc57a5acd7a41404f9c93b6e" + [[package]] name = "constant_time_eq" version = "0.2.6" @@ -2434,7 +2595,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -2505,7 +2666,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2553,7 +2714,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2575,7 +2736,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2702,7 +2863,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2737,7 +2898,7 @@ dependencies = [ "dsl_auto_type", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2778,7 +2939,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" dependencies = [ - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2801,7 +2962,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2874,7 +3035,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2945,7 +3106,7 @@ dependencies = [ "hkdf", "pem-rfc7468", "pkcs8", - "rand_core", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -3060,7 +3221,7 @@ dependencies = [ "quote", "rustc-hash", "strum 0.26.3", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -3073,7 +3234,7 @@ dependencies = [ "connector_configs", "currency_conversion", "euclid", - "getrandom", + "getrandom 0.2.15", "hyperswitch_constraint_graph", "kgraph_utils", "once_cell", @@ -3084,6 +3245,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + [[package]] name = "event-listener" version = "5.3.1" @@ -3101,7 +3268,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "event-listener", + "event-listener 5.3.1", "pin-project-lite", ] @@ -3130,6 +3297,8 @@ dependencies = [ "aws-sdk-sesv2", "aws-sdk-sts 0.28.0", "aws-smithy-client", + "azure_identity", + "azure_security_keyvault_keys", "base64 0.22.1", "common_utils", "dyn-clone", @@ -3162,7 +3331,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c25829bde82205da46e1823b2259db6273379f626fc211f126f65654a2669be" dependencies = [ "deunicode", - "rand", + "rand 0.8.5", ] [[package]] @@ -3217,7 +3386,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -3308,7 +3477,7 @@ dependencies = [ "lazy_static", "log", "parking_lot 0.12.3", - "rand", + "rand 0.8.5", "redis-protocol", "semver 1.0.23", "socket2", @@ -3408,6 +3577,34 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +dependencies = [ + "fastrand 2.1.1", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" version = "0.3.30" @@ -3416,7 +3613,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -3470,6 +3667,17 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + [[package]] name = "getrandom" version = "0.2.15" @@ -3479,7 +3687,7 @@ dependencies = [ "cfg-if 1.0.0", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -3555,7 +3763,7 @@ dependencies = [ "into-attr-derive", "pest", "pest_derive", - "rand", + "rand 0.8.5", "tempfile", ] @@ -3566,7 +3774,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -3817,6 +4025,26 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-types" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" +dependencies = [ + "anyhow", + "async-channel 1.9.0", + "base64 0.13.1", + "futures-lite 1.13.0", + "infer 0.2.3", + "pin-project-lite", + "rand 0.7.3", + "serde", + "serde_json", + "serde_qs 0.8.5", + "serde_urlencoded", + "url", +] + [[package]] name = "httparse" version = "1.9.4" @@ -4020,7 +4248,7 @@ dependencies = [ "once_cell", "qrcode", "quick-xml", - "rand", + "rand 0.8.5", "regex", "reqwest 0.11.27", "ring 0.17.8", @@ -4028,7 +4256,7 @@ dependencies = [ "roxmltree", "serde", "serde_json", - "serde_qs", + "serde_qs 0.12.0", "serde_urlencoded", "serde_with", "sha1", @@ -4246,7 +4474,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -4342,6 +4570,12 @@ dependencies = [ "serde", ] +[[package]] +name = "infer" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" + [[package]] name = "infer" version = "0.15.0" @@ -4591,7 +4825,7 @@ dependencies = [ "convert_case 0.6.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -4827,7 +5061,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -4966,7 +5200,7 @@ dependencies = [ "hermit-abi 0.3.9", "libc", "log", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -5004,7 +5238,7 @@ dependencies = [ "crossbeam-channel", "crossbeam-epoch 0.9.18", "crossbeam-utils 0.8.20", - "event-listener", + "event-listener 5.3.1", "futures-util", "once_cell", "parking_lot 0.12.3", @@ -5035,7 +5269,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8" dependencies = [ - "rand", + "rand 0.8.5", ] [[package]] @@ -5117,7 +5351,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand", + "rand 0.8.5", "smallvec 1.13.2", "zeroize", ] @@ -5217,7 +5451,7 @@ dependencies = [ "kinded", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", "urlencoding", ] @@ -5229,9 +5463,9 @@ checksum = "c38841cdd844847e3e7c8d29cef9dcfed8877f8f56f9071f77843ecf3baf937f" dependencies = [ "base64 0.13.1", "chrono", - "getrandom", + "getrandom 0.2.15", "http 0.2.12", - "rand", + "rand 0.8.5", "reqwest 0.11.27", "serde", "serde_json", @@ -5241,6 +5475,25 @@ dependencies = [ "url", ] +[[package]] +name = "oauth2" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51e219e79014df21a225b1860a479e2dcd7cbd9130f4defd4bd0e191ea31d67d" +dependencies = [ + "base64 0.22.1", + "chrono", + "getrandom 0.2.15", + "http 1.1.0", + "rand 0.8.5", + "serde", + "serde_json", + "serde_path_to_error", + "sha2", + "thiserror", + "url", +] + [[package]] name = "object" version = "0.36.4" @@ -5303,10 +5556,10 @@ dependencies = [ "http 0.2.12", "itertools 0.10.5", "log", - "oauth2", + "oauth2 4.4.2", "p256", "p384", - "rand", + "rand 0.8.5", "rsa", "serde", "serde-value", @@ -5368,7 +5621,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -5458,7 +5711,7 @@ dependencies = [ "glob", "opentelemetry", "percent-encoding", - "rand", + "rand 0.8.5", "thiserror", "tokio 1.40.0", "tokio-stream", @@ -5596,7 +5849,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ "base64ct", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -5668,7 +5921,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -5718,7 +5971,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ "phf_shared", - "rand", + "rand 0.8.5", ] [[package]] @@ -5768,7 +6021,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -5783,6 +6036,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.1.1", + "futures-io", +] + [[package]] name = "pkcs1" version = "0.7.5" @@ -5870,6 +6134,21 @@ dependencies = [ "miniz_oxide 0.7.4", ] +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if 1.0.0", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -5901,7 +6180,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -5976,8 +6255,8 @@ dependencies = [ "bitflags 2.6.0", "lazy_static", "num-traits", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rand_xorshift", "regex-syntax 0.8.4", "rusty-fork", @@ -6012,7 +6291,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.77", + "syn 2.0.87", "tempfile", ] @@ -6026,7 +6305,7 @@ dependencies = [ "itertools 0.13.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -6086,7 +6365,7 @@ dependencies = [ "libc", "once_cell", "raw-cpuid", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "web-sys", "winapi 0.3.9", ] @@ -6139,6 +6418,19 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + [[package]] name = "rand" version = "0.8.5" @@ -6146,8 +6438,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] @@ -6157,7 +6459,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", ] [[package]] @@ -6166,7 +6477,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", ] [[package]] @@ -6175,7 +6495,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" dependencies = [ - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -6184,7 +6504,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" dependencies = [ - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -6454,6 +6774,7 @@ dependencies = [ "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", "windows-registry", ] @@ -6491,7 +6812,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if 1.0.0", - "getrandom", + "getrandom 0.2.15", "libc", "spin 0.9.8", "untrusted 0.9.0", @@ -6599,7 +6920,7 @@ dependencies = [ "hyperswitch_constraint_graph", "hyperswitch_domain_models", "hyperswitch_interfaces", - "infer", + "infer 0.15.0", "iso_currency", "isocountry", "josekit", @@ -6617,8 +6938,8 @@ dependencies = [ "openssl", "pm_auth", "quick-xml", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rdkafka", "redis_interface", "regex", @@ -6635,7 +6956,7 @@ dependencies = [ "serde", "serde_json", "serde_path_to_error", - "serde_qs", + "serde_qs 0.12.0", "serde_repr", "serde_urlencoded", "serde_with", @@ -6675,7 +6996,7 @@ dependencies = [ "serde", "serde_json", "strum 0.26.3", - "syn 2.0.77", + "syn 2.0.87", "utoipa", ] @@ -6727,7 +7048,7 @@ dependencies = [ "num-traits", "pkcs1", "pkcs8", - "rand_core", + "rand_core 0.6.4", "signature", "spki", "subtle", @@ -6760,7 +7081,7 @@ dependencies = [ "serde", "serde_json", "serde_yml", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -6805,7 +7126,7 @@ dependencies = [ "borsh", "bytes 1.7.1", "num-traits", - "rand", + "rand 0.8.5", "rkyv", "serde", "serde_json", @@ -7074,7 +7395,7 @@ dependencies = [ "hyperswitch_domain_models", "num_cpus", "once_cell", - "rand", + "rand 0.8.5", "redis_interface", "router_env", "serde", @@ -7120,7 +7441,7 @@ dependencies = [ "itertools 0.13.0", "lazy_static", "lz4_flex", - "rand", + "rand 0.8.5", "rand_pcg", "scylla-cql", "scylla-macros", @@ -7159,7 +7480,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -7284,7 +7605,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -7319,6 +7640,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_qs" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" +dependencies = [ + "percent-encoding", + "serde", + "thiserror", +] + [[package]] name = "serde_qs" version = "0.12.0" @@ -7338,7 +7670,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -7389,7 +7721,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -7431,7 +7763,7 @@ checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -7509,7 +7841,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -7662,7 +7994,7 @@ dependencies = [ "crc", "crossbeam-queue 0.3.11", "either", - "event-listener", + "event-listener 5.3.1", "futures-channel", "futures-core", "futures-intrusive", @@ -7701,7 +8033,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -7724,7 +8056,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.77", + "syn 2.0.87", "tempfile", "tokio 1.40.0", "url", @@ -7760,7 +8092,7 @@ dependencies = [ "memchr", "once_cell", "percent-encoding", - "rand", + "rand 0.8.5", "rsa", "serde", "sha1", @@ -7802,7 +8134,7 @@ dependencies = [ "memchr", "num-bigint", "once_cell", - "rand", + "rand 0.8.5", "serde", "serde_json", "sha2", @@ -7955,7 +8287,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -7968,7 +8300,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -7990,9 +8322,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -8008,7 +8340,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -8046,7 +8378,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -8109,7 +8441,7 @@ dependencies = [ "percent-encoding", "pest", "pest_derive", - "rand", + "rand 0.8.5", "regex", "serde", "serde_json", @@ -8135,7 +8467,7 @@ dependencies = [ "cfg-if 1.0.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -8146,7 +8478,7 @@ checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", "test-case-core", ] @@ -8159,7 +8491,7 @@ dependencies = [ "base64 0.22.1", "clap", "masking", - "rand", + "rand 0.8.5", "regex", "reqwest 0.11.27", "serde", @@ -8206,7 +8538,7 @@ checksum = "b72d056365e368fc57a56d0cec9e41b02fb4a3474a61c8735262b1cfebe67425" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -8226,7 +8558,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -8247,6 +8579,7 @@ checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa", + "js-sys", "libc", "num-conv", "num_threads", @@ -8419,7 +8752,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -8703,7 +9036,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -8739,7 +9072,7 @@ dependencies = [ "base32", "constant_time_eq 0.2.6", "hmac", - "rand", + "rand 0.8.5", "sha1", "sha2", "url", @@ -8757,7 +9090,7 @@ dependencies = [ "indexmap 1.9.3", "pin-project", "pin-project-lite", - "rand", + "rand 0.8.5", "slab", "tokio 1.40.0", "tokio-util", @@ -8825,7 +9158,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -8948,6 +9281,65 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "typespec" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f39c392e9cb463e8f1f9b86d2d5934ef391ee83724095e7f813aa0202e4e8d3b" +dependencies = [ + "base64 0.22.1", + "http-types", + "serde_json", + "url", +] + +[[package]] +name = "typespec_client_core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0839582d301a1ba457905b6940f10879ff16b43b98ff66477cb4a44cbea81a92" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bytes 1.7.1", + "dyn-clone", + "futures 0.3.30", + "getrandom 0.2.15", + "http-types", + "pin-project", + "rand 0.8.5", + "reqwest 0.12.7", + "serde", + "serde_json", + "time", + "tokio 1.40.0", + "tracing", + "typespec", + "typespec_macros", + "url", + "uuid", +] + +[[package]] +name = "typespec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c71455f35c6aa14e033a4dcf79fc5798d97acb8ce583d21ca29e0faaf929411" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "tz-rs" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33851b15c848fad2cf4b105c6bb66eb9512b6f6c44a4b13f57c53c73c707e2b4" +dependencies = [ + "const_fn", +] + [[package]] name = "ucd-trie" version = "0.1.6" @@ -9145,7 +9537,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -9154,7 +9546,7 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] @@ -9247,6 +9639,12 @@ dependencies = [ "libc", ] +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + [[package]] name = "walkdir" version = "2.5.0" @@ -9266,6 +9664,12 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -9299,7 +9703,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", "wasm-bindgen-shared", ] @@ -9333,7 +9737,7 @@ checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -9344,6 +9748,19 @@ version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +[[package]] +name = "wasm-streams" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.70" @@ -9793,7 +10210,7 @@ checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", "synstructure 0.13.1", ] @@ -9815,7 +10232,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -9835,7 +10252,7 @@ checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", "synstructure 0.13.1", ] @@ -9864,7 +10281,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] diff --git a/crates/external_services/Cargo.toml b/crates/external_services/Cargo.toml index 8a47d9129aa..61b71de6558 100644 --- a/crates/external_services/Cargo.toml +++ b/crates/external_services/Cargo.toml @@ -42,9 +42,8 @@ tonic-reflection = { version = "0.12.2", optional = true } tonic-types = { version = "0.12.2", optional = true } hyper-util = { version = "0.1.9", optional = true } http-body-util = { version = "0.1.2", optional = true } -azure_identity = { git = "https://github.com/Azure/azure-sdk-for-rust.git", branch = "main", optional = true} -azure_security_keyvault_keys = { git = "https://github.com/Azure/azure-sdk-for-rust.git", branch = "main", optional = true} - +azure_identity = {version = "0.22.0", optional = true} +azure_security_keyvault_keys = {version = "0.1.0", optional = true} # First party crates common_utils = { version = "0.1.0", path = "../common_utils" } diff --git a/crates/external_services/src/lib.rs b/crates/external_services/src/lib.rs index 9a8e526cf90..7d4531da8f2 100644 --- a/crates/external_services/src/lib.rs +++ b/crates/external_services/src/lib.rs @@ -23,7 +23,7 @@ pub mod grpc_client; pub mod managers; /// Crate specific constants -#[cfg(feature = "aws_kms", feature = "azure_key_vault")] +#[cfg(any(feature = "aws_kms", feature = "azure_key_vault"))] pub mod consts { /// General purpose base64 engine pub(crate) const BASE64_ENGINE: base64::engine::GeneralPurpose = @@ -31,7 +31,7 @@ pub mod consts { } /// Metrics for interactions with external systems. -#[cfg(feature = "aws_kms", feature = "azure_key_vault")] +#[cfg(any(feature = "aws_kms", feature = "azure_key_vault"))] pub mod metrics { use router_env::{counter_metric, global_meter, histogram_metric_f64};