Skip to main content

super_types/
login.rs

1//! Browser sign-in contracts for the Schematic CLI.
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Serialize, Deserialize)]
5#[serde(deny_unknown_fields)]
6pub struct StartRequest {
7    pub redirect_uri: String,
8    pub code_challenge: String,
9    pub state: String,
10    pub device_name: String,
11}
12
13#[derive(Serialize, Deserialize)]
14pub struct StartResponse {
15    pub authorization_url: String,
16}
17
18pub const CLIENT_ID: &str = "schematic-cli";
19
20#[derive(Serialize, Deserialize)]
21pub struct OAuthStartRequest {
22    pub client_id: String,
23    pub response_type: String,
24    pub code_challenge_method: String,
25    #[serde(flatten)]
26    pub request: StartRequest,
27}
28
29// OAuth token endpoint requests use application/x-www-form-urlencoded.
30#[derive(Serialize, Deserialize)]
31#[serde(tag = "grant_type")]
32pub enum TokenRequest {
33    #[serde(rename = "authorization_code")]
34    AuthorizationCode {
35        client_id: String,
36        code: String,
37        code_verifier: String,
38        redirect_uri: String,
39    },
40    #[serde(rename = "refresh_token")]
41    RefreshToken { client_id: String, refresh_token: String },
42}
43
44#[derive(Clone, Serialize, Deserialize)]
45pub struct TokenResponse {
46    pub access_token: String,
47    pub token_type: String,
48    pub expires_in: u64,
49    pub refresh_token: String,
50    pub session_id: uuid::Uuid,
51    pub email: String,
52}
53
54#[derive(Serialize, Deserialize)]
55pub struct RevokeRequest {
56    pub client_id: String,
57    pub token: String,
58}