systemprompt_models/api/cloud/
tenant.rs1use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
8#[serde(rename_all = "snake_case")]
9pub enum SubscriptionStatus {
10 Active,
11 Trialing,
12 PastDue,
13 Paused,
14 Canceled,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct CloudPlanInfo {
19 #[serde(default, skip_serializing_if = "Option::is_none")]
20 pub id: Option<String>,
21 pub name: String,
22 pub memory_mb: i32,
23 pub volume_gb: i32,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
27pub struct CloudPlan {
28 pub id: String,
29 pub name: String,
30 pub paddle_price_id: systemprompt_identifiers::PriceId,
31 #[serde(default)]
32 pub memory_mb_default: i32,
33 #[serde(default)]
34 pub volume_gb: i32,
35 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub max_tenants: Option<i32>,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
40#[serde(rename_all = "snake_case")]
41pub enum CloudTenantStatus {
42 Pending,
43 Active,
44 Suspended,
45 Deleted,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct CloudTenantInfo {
50 pub id: String,
51 pub name: String,
52 #[serde(default, skip_serializing_if = "Option::is_none")]
53 pub subscription_id: Option<String>,
54 #[serde(default, skip_serializing_if = "Option::is_none")]
55 pub subscription_status: Option<SubscriptionStatus>,
56 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub app_id: Option<String>,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
59 pub hostname: Option<String>,
60 #[serde(default, skip_serializing_if = "Option::is_none")]
61 pub region: Option<String>,
62 #[serde(default, skip_serializing_if = "Option::is_none")]
63 pub status: Option<CloudTenantStatus>,
64 #[serde(default, skip_serializing_if = "Option::is_none")]
65 pub plan: Option<CloudPlanInfo>,
66 #[serde(default)]
67 pub external_db_access: bool,
68 pub database_url: String,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
72pub struct CloudTenant {
73 pub id: String,
74 pub name: String,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub fly_app_name: Option<String>,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub fly_hostname: Option<String>,
79 #[serde(default, skip_serializing_if = "Option::is_none")]
80 pub hostname: Option<String>,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
84pub struct CloudTenantStatusResponse {
85 pub status: String,
86 #[serde(default, skip_serializing_if = "Option::is_none")]
87 pub message: Option<String>,
88 #[serde(default, skip_serializing_if = "Option::is_none")]
89 pub app_url: Option<String>,
90 #[serde(default, skip_serializing_if = "Option::is_none")]
91 pub secrets_url: Option<String>,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
95pub struct CloudTenantSecrets {
96 pub jwt_secret: String,
97 pub database_url: String,
98 pub internal_database_url: String,
99 pub app_url: String,
100 #[serde(default, skip_serializing_if = "Option::is_none")]
101 pub sync_token: Option<String>,
102 #[serde(default, skip_serializing_if = "Option::is_none")]
103 pub anthropic_api_key: Option<String>,
104 #[serde(default, skip_serializing_if = "Option::is_none")]
105 pub openai_api_key: Option<String>,
106 #[serde(default, skip_serializing_if = "Option::is_none")]
107 pub gemini_api_key: Option<String>,
108}
109
110#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
111pub struct SetExternalDbAccessRequest {
112 pub enabled: bool,
113}
114
115#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct ExternalDbAccessResponse {
117 pub tenant_id: systemprompt_identifiers::TenantId,
118 pub external_db_access: bool,
119 pub database_url: String,
120}
121
122#[derive(Debug, Clone, Serialize, Deserialize)]
123pub struct RotateCredentialsResponse {
124 pub status: String,
125 pub message: String,
126 pub internal_database_url: String,
127 pub external_database_url: String,
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize)]
131pub struct RotateSyncTokenResponse {
132 pub sync_token: String,
133}
134
135#[derive(Debug, Clone, Serialize, Deserialize)]
136pub struct CloudEnterpriseLicenseInfo {
137 pub id: String,
138 pub name: String,
139 pub domain: String,
140 #[serde(default, skip_serializing_if = "Option::is_none")]
141 pub plan: Option<CloudPlanInfo>,
142}