Skip to main content

systemprompt_cli/session/
api.rs

1//! Local session and JWT minting for CLI commands.
2//!
3//! Copyright (c) systemprompt.io — Business Source License 1.1.
4//! See <https://systemprompt.io> for licensing details.
5
6use anyhow::{Context, Result};
7use chrono::Duration;
8use std::sync::Arc;
9use systemprompt_database::DbPool;
10use systemprompt_identifiers::{SessionId, SessionSource, UserId};
11use systemprompt_oauth::services::SessionCreationService;
12use systemprompt_traits::{SessionAnalytics, SessionProvider, UserProvider};
13use systemprompt_users::{UserRepository, UserService};
14
15pub const DEFAULT_CLI_SESSION_HOURS: i64 = 24;
16
17pub async fn create_local_session_row(
18    db_pool: &DbPool,
19    user: &UserId,
20    ttl: Duration,
21) -> Result<SessionId> {
22    let sessions: Arc<dyn SessionProvider> =
23        Arc::new(systemprompt_users::SessionRepository::new(db_pool));
24    let user_repository = Arc::new(UserRepository::new(db_pool));
25    let users: Arc<dyn UserProvider> = Arc::new(UserService::new(user_repository));
26
27    SessionCreationService::new(sessions, users)
28        .create_authenticated_session_with_ttl(
29            user,
30            &SessionAnalytics::default(),
31            SessionSource::Cli,
32            ttl,
33        )
34        .await
35        .context("Failed to insert CLI session row")
36}