use crate::client::OpenAI;
use crate::error::OpenAIError;
use crate::types::realtime::{ClientSecretCreateParams, ClientSecretCreateResponse};
pub struct Realtime<'a> {
client: &'a OpenAI,
}
impl<'a> Realtime<'a> {
pub(crate) fn new(client: &'a OpenAI) -> Self {
Self { client }
}
pub fn client_secrets(&self) -> ClientSecrets<'_> {
ClientSecrets {
client: self.client,
}
}
}
pub struct ClientSecrets<'a> {
client: &'a OpenAI,
}
impl<'a> ClientSecrets<'a> {
pub async fn create(
&self,
params: &ClientSecretCreateParams,
) -> Result<ClientSecretCreateResponse, OpenAIError> {
self.client.post("/realtime/client_secrets", params).await
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::OpenAI;
use crate::config::ClientConfig;
use serde_json::json;
#[tokio::test]
async fn client_secret_create_transcription() {
let mut server = mockito::Server::new_async().await;
let mock = server
.mock("POST", "/realtime/client_secrets")
.match_header("authorization", "Bearer sk-test")
.with_status(200)
.with_header("content-type", "application/json")
.with_body(
r#"{
"value": "ek_abc123",
"expires_at": 1779000000,
"session": {
"type": "transcription",
"object": "realtime.transcription_session",
"id": "sess_xyz"
}
}"#,
)
.create_async()
.await;
let client = OpenAI::with_config(ClientConfig::new("sk-test").base_url(server.url()));
let session = json!({
"type": "transcription",
"audio": {
"input": {
"format": { "type": "audio/pcm", "rate": 24000 },
"transcription": { "model": "gpt-4o-transcribe", "language": "en" }
}
}
});
let params = ClientSecretCreateParams {
session: Some(session),
expires_after: None,
};
let response = client
.realtime()
.client_secrets()
.create(¶ms)
.await
.unwrap();
assert_eq!(response.value, "ek_abc123");
assert_eq!(response.expires_at, 1779000000);
mock.assert_async().await;
}
}