NOTE: The subscription API behaves in a non-intuitive way. We expect the following responses: 1. SubscriptionStatus::Active: - The user *has* a subscription, but it is set to *not auto-renew* (i.e., cancelled). - We return ActualSubscriptionStatus::Expiring to indicate they are eligible to re-subscribe 2. SubscriptionStatus::Inactive: - The user has no subscription at all (no Pro access). - We r
(os: &mut Os)
| 3885 | // |
| 3886 | // Also, it is currently not possible to subscribe or re-subscribe via console, only IDE/CLI. |
| 3887 | async fn get_subscription_status(os: &mut Os) -> Result<ActualSubscriptionStatus> { |
| 3888 | if is_idc_user(&os.database).await? { |
| 3889 | return Ok(ActualSubscriptionStatus::Active); |
| 3890 | } |
| 3891 | |
| 3892 | match os.client.create_subscription_token().await { |
| 3893 | Ok(response) => match response.status() { |
| 3894 | SubscriptionStatus::Active => Ok(ActualSubscriptionStatus::Expiring), |
| 3895 | SubscriptionStatus::Inactive => Ok(ActualSubscriptionStatus::None), |
| 3896 | _ => Ok(ActualSubscriptionStatus::None), |
| 3897 | }, |
| 3898 | Err(ApiClientError::CreateSubscriptionToken(e)) => { |
| 3899 | let sdk_error_code = e.as_service_error().and_then(|err| err.meta().code()); |
| 3900 | |
| 3901 | if sdk_error_code.is_some_and(|c| c.contains("ConflictException")) { |
| 3902 | Ok(ActualSubscriptionStatus::Active) |
| 3903 | } else { |
| 3904 | Err(e.into()) |
| 3905 | } |
| 3906 | }, |
| 3907 | Err(e) => Err(e.into()), |
| 3908 | } |
| 3909 | } |
| 3910 | |
| 3911 | async fn get_subscription_status_with_spinner( |
| 3912 | os: &mut Os, |
no test coverage detected