syntax = "proto3";

package exa.seat_management_pb;

import "buf/validate/validate.proto";
import "exa/codeium_common_pb/codeium_common.proto";
import "google/protobuf/timestamp.proto";

option go_package = "github.com/Exafunction/Exafunction/exa/seat_management_pb";

service SeatManagementService {
    rpc GetUserStatus(GetUserStatusRequest) returns (GetUserStatusResponse);
    rpc GetUsers(GetUsersRequest) returns (GetUsersResponse);
    rpc GetRolesForUser(GetRolesForUserRequest) returns (GetRolesForUserResponse);
    rpc AddUserRole(AddUserRoleRequest) returns (AddUserRoleResponse);
    rpc RemoveUserRole(RemoveUserRoleRequest) returns (RemoveUserRoleResponse);
    rpc RegisterUser(RegisterUserRequest) returns (RegisterUserResponse);
    rpc MigrateApiKey(MigrateApiKeyRequest) returns (MigrateApiKeyResponse);
    rpc CreateFbUser(CreateFbUserRequest) returns (CreateFbUserResponse);
    rpc GetOneTimeAuthToken(GetOneTimeAuthTokenRequest) returns (GetOneTimeAuthTokenResponse);
    rpc CreatePKCEAuthorizationCode(CreatePKCEAuthorizationCodeRequest) returns (CreatePKCEAuthorizationCodeResponse);
    rpc ExchangePKCEAuthorizationCode(ExchangePKCEAuthorizationCodeRequest) returns (ExchangePKCEAuthorizationCodeResponse);
    rpc UpdateName(UpdateNameRequest) returns (UpdateNameResponse);
    rpc UpdateInboundSource(UpdateInboundSourceRequest) returns (UpdateInboundSourceResponse);
    rpc GetProfilePicturePresignedUploadUrl(GetProfilePicturePresignedUploadUrlRequest) returns (GetProfilePicturePresignedUploadUrlResponse);
    rpc ProfilePictureUploadComplete(ProfilePictureUploadCompleteRequest) returns (ProfilePictureUploadCompleteResponse);
    rpc GetProfileData(GetProfileDataRequest) returns (GetProfileDataResponse);
    rpc DeleteProfilePicture(DeleteProfilePictureRequest) returns (DeleteProfilePictureResponse);
    rpc DeleteUser(DeleteUserRequest) returns (DeleteUserResponse);
    rpc UpdateCodeiumAccess(UpdateCodeiumAccessRequest) returns (UpdateCodeiumAccessResponse);
    rpc GetCurrentUser(GetCurrentUserRequest) returns (GetCurrentUserResponse);
    rpc GetLicense(GetLicenseRequest) returns (GetLicenseResponse);
    rpc RequestTeamAccess(RequestTeamAccessRequest) returns (RequestTeamAccessResponse);
    rpc UpdateUserTeamStatus(UpdateUserTeamStatusRequest) returns (UpdateUserTeamStatusResponse);
    rpc GetTeamMetadata(GetTeamMetadataRequest) returns (GetTeamMetadataResponse);
    rpc RemoveUserFromTeam(RemoveUserFromTeamRequest) returns (RemoveUserFromTeamResponse);
    rpc RefreshTeamInviteId(RefreshTeamInviteIdRequest) returns (RefreshTeamInviteIdResponse);
    rpc GrantPreapproval(GrantPreapprovalRequest) returns (GrantPreapprovalResponse);
    rpc RevokePreapproval(RevokePreapprovalRequest) returns (RevokePreapprovalResponse);
    rpc GetPreapprovals(GetPreapprovalsRequest) returns (GetPreapprovalsResponse);
    rpc GetPreapprovalMetadata(GetPreapprovalMetadataRequest) returns (GetPreapprovalMetadataResponse);
    rpc AcceptPreapproval(AcceptPreapprovalRequest) returns (AcceptPreapprovalResponse);
    rpc RejectPreapproval(RejectPreapprovalRequest) returns (RejectPreapprovalResponse);
    rpc GetPreapprovalForUser(GetPreapprovalForUserRequest) returns (GetPreapprovalForUserResponse);
    rpc UpdateSeats(UpdateSeatsRequest) returns (UpdateSeatsResponse);
    rpc SubscribeToPlan(SubscribeToPlanRequest) returns (SubscribeToPlanResponse);
    rpc PurchaseCascadeCredits(PurchaseCascadeCreditsRequest) returns (PurchaseCascadeCreditsResponse);
    rpc GetTeamBilling(GetTeamBillingRequest) returns (GetTeamBillingResponse);
    rpc UpdatePlan(UpdatePlanRequest) returns (UpdatePlanResponse);
    rpc CancelPlan(CancelPlanRequest) returns (CancelPlanResponse);
    rpc UpdateBilling(UpdateBillingRequest) returns (UpdateBillingResponse);
    rpc GetCustomerPortal(GetCustomerPortalRequest) returns (GetCustomerPortalResponse);
    rpc GetUserSubscription(GetUserSubscriptionRequest) returns (GetUserSubscriptionResponse);
    rpc IsUsernameAvailable(IsUsernameAvailableRequest) returns (IsUsernameAvailableResponse);
    rpc UpdateUsername(UpdateUsernameRequest) returns (UpdateUsernameResponse);
    rpc UpdateOccupation(UpdateOccupationRequest) returns (UpdateOccupationResponse);
    rpc UpdateProfile(UpdateProfileRequest) returns (UpdateProfileResponse);
    rpc UpdateProfileVisibility(UpdateProfileVisibilityRequest) returns (UpdateProfileVisibilityResponse);
    rpc GetPublicProfile(GetPublicProfileRequest) returns (GetPublicProfileResponse);
    rpc GetSSOProvider(GetSSOProviderRequest) returns (GetSSOProviderResponse);
    rpc SaveSSOProvider(SaveSSOProviderRequest) returns (SaveSSOProviderResponse);
    rpc JoinTeamWithSSOLogin(JoinTeamWithSSOLoginRequest) returns (JoinTeamWithSSOLoginResponse);
    rpc UserSSOLoginRedirect(UserSSOLoginRedirectRequest) returns (UserSSOLoginRedirectResponse);
    rpc CheckEmailForSSO(CheckEmailForSSORequest) returns (CheckEmailForSSOResponse);
    rpc SendPhoneVerification(SendPhoneVerificationRequest) returns (SendPhoneVerificationResponse);
    rpc SendEmailVerification(SendEmailVerificationRequest) returns (SendEmailVerificationResponse);
    rpc GetTeamActivity(GetTeamActivityRequest) returns (GetTeamActivityResponse);
    rpc DeleteTeam(DeleteTeamRequest) returns (DeleteTeamResponse);
    rpc GetTeamsFeatures(GetTeamsFeaturesRequest) returns (GetTeamsFeaturesResponse);
    rpc GrantSuperAdminAccess(GrantSuperAdminAccessRequest) returns (GrantSuperAdminAccessResponse);
    rpc GrantTeamAdminAccess(GrantTeamAdminAccessRequest) returns (GrantTeamAdminAccessResponse);
    rpc AddFlexCreditsToMultiTenantTeam(AddFlexCreditsToMultiTenantTeamRequest) returns (AddFlexCreditsToMultiTenantTeamResponse);
    rpc GetGroups(GetGroupsRequest) returns (GetGroupsResponse);
    rpc GetUserNotifications(GetUserNotificationsRequest) returns (GetUserNotificationsResponse);
    rpc GetCascadeAnalytics(GetCascadeAnalyticsRequest) returns (GetCascadeAnalyticsResponse);
    rpc GetTeamCreditEntries(GetTeamCreditEntriesRequest) returns (GetTeamCreditEntriesResponse);
    rpc UpdateCreditTopUpSettings(UpdateCreditTopUpSettingsRequest) returns (UpdateCreditTopUpSettingsResponse);
    rpc GetPrimaryApiKeyForDevsOnly(GetPrimaryApiKeyForDevsOnlyRequest) returns (GetPrimaryApiKeyForDevsOnlyResponse);
    rpc ConnectGithubAccount(ConnectGithubAccountRequest) returns (ConnectGithubAccountResponse);
    rpc DisconnectGithubAccount(DisconnectGithubAccountRequest) returns (DisconnectGithubAccountResponse);
    rpc GetGitHubAccountStatus(GetGitHubAccountStatusRequest) returns (GetGitHubAccountStatusResponse);
    rpc GetGitHubAccessToken(GetGitHubAccessTokenRequest) returns (GetGitHubAccessTokenResponse);
    rpc ConnectNetlifyAccount(ConnectNetlifyAccountRequest) returns (ConnectNetlifyAccountResponse);
    rpc DisconnectNetlifyAccount(DisconnectNetlifyAccountRequest) returns (DisconnectNetlifyAccountResponse);
    rpc GetNetlifyAccountStatus(GetNetlifyAccountStatusRequest) returns (GetNetlifyAccountStatusResponse);
    rpc CreateTeamApiSecret(CreateTeamApiSecretRequest) returns (CreateTeamApiSecretResponse);
    rpc UpdateTeamApiSecret(UpdateTeamApiSecretRequest) returns (UpdateTeamApiSecretResponse);
    rpc GetAllTeamApiSecrets(GetAllTeamApiSecretsRequest) returns (GetAllTeamApiSecretsResponse);
    rpc DeleteTeamApiSecret(DeleteTeamApiSecretRequest) returns (DeleteTeamApiSecretResponse);
    rpc GetPlanStatus(GetPlanStatusRequest) returns (GetPlanStatusResponse);
    rpc CreateRole(CreateRoleRequest) returns (CreateRoleResponse);
    rpc DeleteRole(DeleteRoleRequest) returns (DeleteRoleResponse);
    rpc UpdateRole(UpdateRoleRequest) returns (UpdateRoleResponse);
    rpc GetRoles(GetRolesRequest) returns (GetRolesResponse);
    rpc ProvisionTeam(ProvisionTeamRequest) returns (ProvisionTeamResponse);
    rpc ProvisionCascadeSeats(ProvisionCascadeSeatsRequest) returns (ProvisionCascadeSeatsResponse);
    rpc AddUsersToTeam(AddUsersToTeamRequest) returns (AddUsersToTeamResponse);
    rpc UpdateUserRoles(UpdateUserRolesRequest) returns (UpdateUserRolesResponse);
    rpc BulkUpdateUserRoles(BulkUpdateUserRolesRequest) returns (BulkUpdateUserRolesResponse);
    rpc GetTeamsFeaturesInternal(GetTeamsFeaturesInternalRequest) returns (GetTeamsFeaturesInternalResponse);
    rpc UpdateTeamsFeaturesInternal(UpdateTeamsFeaturesInternalRequest) returns (UpdateTeamsFeaturesInternalResponse);
    rpc SetTeamsFeatures(SetTeamsFeaturesRequest) returns (SetTeamsFeaturesResponse);
    rpc UpdateUserFeaturesInternal(UpdateUserFeaturesInternalRequest) returns (UpdateUserFeaturesInternalResponse);
    rpc BulkEditUserApprovals(BulkEditUserApprovalsRequest) returns (BulkEditUserApprovalsResponse);
    rpc BulkEditUserApprovalsInternal(BulkEditUserApprovalsInternalRequest) returns (BulkEditUserApprovalsInternalResponse);
    rpc CreateEnterprise(CreateEnterpriseRequest) returns (CreateEnterpriseResponse);
    rpc UpdateEnterprise(UpdateEnterpriseRequest) returns (UpdateEnterpriseResponse);
    rpc UpdateTeamConfig(UpdateTeamConfigRequest) returns (UpdateTeamConfigResponse);
    rpc GetTeamInfo(GetTeamInfoRequest) returns (GetTeamInfoResponse);
    rpc UpdatePlanDetailsInternal(UpdatePlanDetailsInternalRequest) returns (UpdatePlanDetailsInternalResponse);
    rpc InitiateTopUp(InitiateTopUpRequest) returns (InitiateTopUpResponse);
    rpc UpdateTeamConfigExternal(UpdateTeamConfigExternalRequest) returns (UpdateTeamConfigExternalResponse);
    rpc GetTeamConfigRecord(GetTeamConfigRecordRequest) returns (GetTeamConfigRecordResponse);
    rpc UsageConfig(UsageConfigRequest) returns (UsageConfigResponse);
    rpc GetUsageConfig(GetUsageConfigRequest) returns (GetUsageConfigResponse);
    rpc GetTeamSettings(GetTeamSettingsRequest) returns (GetTeamSettingsResponse);
    rpc UpdateCascadeWebSearchEnabled(UpdateCascadeWebSearchEnabledRequest) returns (UpdateCascadeWebSearchEnabledResponse);
    rpc CreateMultiTenantTeam(CreateMultiTenantTeamRequest) returns (CreateMultiTenantTeamResponse);
    rpc GetMultiTenantTeams(GetMultiTenantTeamsRequest) returns (GetMultiTenantTeamsResponse);
    rpc DeleteMultiTenantTeam(DeleteMultiTenantTeamRequest) returns (DeleteMultiTenantTeamResponse);
    rpc GetTeamOrgId(GetTeamOrgIdRequest) returns (GetTeamOrgIdResponse);
    rpc GetMucsInfo(GetMucsInfoRequest) returns (GetMucsInfoResponse);
    rpc GetWrapped2024(GetWrapped2024Request) returns (GetWrapped2024Response);
    rpc SetTeamLicense(SetTeamLicenseRequest) returns (SetTeamLicenseResponse);
    rpc IsValidReferralCode(IsValidReferralCodeRequest) returns (IsValidReferralCodeResponse);
    rpc ProcessReferralCode(ProcessReferralCodeRequest) returns (ProcessReferralCodeResponse);
    rpc RemoveUsersFromTeamInternal(RemoveUsersFromTeamInternalRequest) returns (RemoveUsersFromTeamInternalResponse);
    rpc BulkDeleteUsersInternal(BulkDeleteUsersInternalRequest) returns (BulkDeleteUsersInternalResponse);
    rpc ExportUserDataInternal(ExportUserDataInternalRequest) returns (ExportUserDataInternalResponse);
    rpc InitiateAccountOwnershipVerificationInternal(InitiateAccountOwnershipVerificationInternalRequest) returns (InitiateAccountOwnershipVerificationInternalResponse);
    rpc VerifyAccountOwnershipInternal(VerifyAccountOwnershipInternalRequest) returns (VerifyAccountOwnershipInternalResponse);
    rpc AddExtraFlexCreditsInternal(AddExtraFlexCreditsInternalRequest) returns (AddExtraFlexCreditsInternalResponse);
    rpc AddTeamAddOnFeature(AddTeamAddOnFeatureRequest) returns (AddTeamAddOnFeatureResponse);
    rpc ShowSSOAddOn(ShowSSOAddOnRequest) returns (ShowSSOAddOnResponse);
    rpc CheckProTrialEligibility(CheckProTrialEligibilityRequest) returns (CheckProTrialEligibilityResponse);
    rpc GetSetUserApiProviderKeys(GetSetUserApiProviderKeysRequest) returns (GetSetUserApiProviderKeysResponse);
    rpc SetUserApiProviderKey(SetUserApiProviderKeyRequest) returns (SetUserApiProviderKeyResponse);
    rpc DeleteUserApiProviderKey(DeleteUserApiProviderKeyRequest) returns (DeleteUserApiProviderKeyResponse);
    rpc GetApiKeySummary(GetApiKeySummaryRequest) returns (GetApiKeySummaryResponse);
    rpc DeleteApiKey(DeleteApiKeyRequest) returns (DeleteApiKeyResponse);
    rpc LogOutUser(LogOutUserRequest) returns (LogOutUserResponse);
    rpc AddTeamDomain(AddTeamDomainRequest) returns (AddTeamDomainResponse);
    rpc ListTeamDomains(ListTeamDomainsRequest) returns (ListTeamDomainsResponse);
    rpc VerifyTeamDomain(VerifyTeamDomainRequest) returns (VerifyTeamDomainResponse);
    rpc DeleteTeamDomain(DeleteTeamDomainRequest) returns (DeleteTeamDomainResponse);
    rpc AddTeamDomainInternal(AddTeamDomainInternalRequest) returns (AddTeamDomainInternalResponse);
    rpc DeleteTeamDomainInternal(DeleteTeamDomainInternalRequest) returns (DeleteTeamDomainInternalResponse);
    rpc ListTeamDomainsInternal(ListTeamDomainsInternalRequest) returns (ListTeamDomainsInternalResponse);
    rpc UpdateTeamNameInternal(UpdateTeamNameInternalRequest) returns (UpdateTeamNameInternalResponse);
    rpc VerifySSOLoginInternal(VerifySSOLoginInternalRequest) returns (VerifySSOLoginInternalResponse);
    rpc ExchangeDevinCode(ExchangeDevinCodeRequest) returns (ExchangeDevinCodeResponse);
    rpc GetStripeSubscriptionState(GetStripeSubscriptionStateRequest) returns (GetStripeSubscriptionStateResponse);
}

message User {
    string api_key = 1;
    string name = 2;
    string email = 3;
    google.protobuf.Timestamp signup_time = 4;
    google.protobuf.Timestamp last_update_time = 5;
    string id = 6;
    string team_id = 7;
    codeium_common_pb.UserTeamStatus team_status = 8;
    string username = 9;
    string preferred_time_zone = 10;
    bool public_profile_enabled = 11;
    string bio = 12;
    bool pro = 13;
    string profile_picture_uri = 14;
    bool disable_codeium = 16;
    string profile_picture_presigned_url = 15;
    string occupation_company = 17;
    string occupation_role = 18;
    uint32 years_of_experience_min = 23;
    uint32 years_of_experience_max = 24;
    bool newsletter = 19;
    bool disabled_telemetry = 20;
    string inbound_source = 21;
    string signup_stage = 22;
    bool used_trial = 25;
    google.protobuf.Timestamp first_windsurf_use_time = 26;
    google.protobuf.Timestamp windsurf_pro_trial_end_time = 27;
    int64 used_prompt_credits = 28 [deprecated = true];
    int64 used_flow_credits = 29 [deprecated = true];
    string referral_code = 30;
}

message Team {
    string id = 1;
    string name = 2;
    google.protobuf.Timestamp signup_time = 3;
    string invite_id = 4;
    bool used_trial = 5;
    string stripe_subscription_id = 6;
    bool subscription_active = 7;
    string stripe_customer_id = 8;
    google.protobuf.Timestamp current_billing_period_start = 9;
    google.protobuf.Timestamp current_billing_period_end = 18;
    int64 num_seats_current_billing_period = 10;
    bool attribution_enabled = 11;
    string sso_provider_id = 12;
    bool offers_enabled = 13;
    codeium_common_pb.TeamsTier teams_tier = 14;
    int64 flex_credit_quota = 15;
    int64 used_flow_credits = 16;
    int64 used_prompt_credits = 17;
    int64 num_cascade_seats = 19;
    google.protobuf.Timestamp cascade_usage_month_start = 20;
    google.protobuf.Timestamp cascade_usage_month_end = 21;
    CascadeSeatType cascade_seat_type = 22;
    bool top_up_enabled = 23;
    int64 monthly_top_up_amount = 24;
    int64 top_up_spent = 25;
    int64 top_up_increment = 26;
    int64 used_flex_credits = 27;
    bool is_pooled = 29;
    int64 prepurchased_credits = 28;
    int64 orphaned_credit_usage = 31;
    
    reserved 30;
    
    reserved "allowed_ip_ranges";
}

message PreapprovedUser {
    string id = 1;
    string name = 2;
    string email = 3;
    string team_id = 4;
    string issued_by_api_key = 5;
    google.protobuf.Timestamp created_at = 6;
    google.protobuf.Timestamp updated_at = 7;
}

message UserSettings {
    bool exists = 1;
    bool newsletter = 2;
    bool disabled_telemetry = 3;
    string inbound_source = 4;
    string signup_stage = 5;
}

message UserRole {
    string api_key = 1;
    repeated string roles = 2;
    string role_id = 3;
    string role_name = 4;
}

message GetUserStatusRequest {
    codeium_common_pb.Metadata metadata = 1;
}

message GetUserStatusResponse {
    codeium_common_pb.UserStatus user_status = 1;
    codeium_common_pb.PlanInfo plan_info = 2;
}

message GetCurrentUserRequest {
    string auth_token = 1;
    bool generate_profile_picture_url = 2;
    bool create_if_not_exist = 3;
    bool include_subscription = 4;
    string sso_token = 5 [deprecated = true];
    string saml_provider_id = 6 [deprecated = true];
}

message ReferralInfo {
    string referrer_name = 1;
    string referrer_email = 2;
    google.protobuf.Timestamp referral_accepted_time = 3;
    google.protobuf.Timestamp granted_time = 4;
}

message GetCurrentUserResponse {
    User user = 1;
    repeated string roles = 2;
    Team team = 4;
    UserSettings subscription = 5;
    repeated codeium_common_pb.Permission permissions = 8;
    UserRole role = 7;
    codeium_common_pb.PlanInfo plan_info = 6;
    UserTeamDetails user_team_details = 9;
    ReferralInfo referral = 10;
    map<int32, codeium_common_pb.TeamsFeaturesMetadata> team_features = 11;
    repeated string group_ids = 12;
    string redirect_url = 13 [deprecated = true];
    repeated SSOTeamOption team_options = 14;
    
    reserved 3;
    
    reserved "license";
}

message GetUsersRequest {
    string auth_token = 1;
    string group_id = 2;
}

message GetUsersResponse {
    repeated User users = 1;
    repeated UserRole user_roles = 2;
    repeated UserTeamDetails user_team_details = 3;
    repeated UserCascadeDetails user_cascade_details = 4;
}

message GetRolesForUserRequest {
    string auth_token = 1;
    string api_key = 2;
}

message GetRolesForUserResponse {
    repeated string roles = 1;
}

message GetPrimaryApiKeyForDevsOnlyRequest {
    string session_token = 1;
}

message GetPrimaryApiKeyForDevsOnlyResponse {
    string api_key = 1;
}

message AddUserRoleRequest {
    string auth_token = 1;
    string api_key_to_add = 2;
    string role = 3;
    string group_id = 4;
    string service_key = 5;
}

message AddUserRoleResponse {
    
}

message RemoveUserRoleRequest {
    string auth_token = 1;
    string api_key_to_remove = 2;
    string role = 3;
    string group_id = 4;
}

message RemoveUserRoleResponse {
    
}

message RegisterUserRequest {
    string firebase_id_token = 1;
}

message RegisterUserResponse {
    string api_key = 1;
    string name = 2;
    string api_server_url = 3;
    string redirect_url = 4 [deprecated = true];
    repeated SSOTeamOption team_options = 5;
}

message MigrateApiKeyRequest {
    string api_key = 1;
}

message MigrateApiKeyResponse {
    string session_token = 1;
}

message CreateFbUserRequest {
    string email = 1;
    string password = 2;
    string turnstile_token = 3;
    string phone_number = 4;
    string otp_code = 5;
    string first_name = 6;
    string last_name = 7;
}

message CreateFbUserResponse {
    string uid = 1;
}

message UpdateNameRequest {
    string auth_token = 1;
    string full_name = 2;
}

message UpdateNameResponse {
    
}

message GetProfilePicturePresignedUploadUrlRequest {
    string auth_token = 1;
}

message GetProfilePicturePresignedUploadUrlResponse {
    string url = 1;
}

message ProfilePictureUploadCompleteRequest {
    string auth_token = 1;
}

message ProfilePictureUploadCompleteResponse {
    
}

message GetProfileDataRequest {
    string api_key = 1;
}

message GetProfileDataResponse {
    string profile_picture_url = 1;
}

message DeleteProfilePictureRequest {
    string auth_token = 1;
}

message DeleteProfilePictureResponse {
    
}

message UpdateInboundSourceRequest {
    string auth_token = 1;
    string inbound_source = 2;
}

message UpdateInboundSourceResponse {
    
}

message DeleteUserRequest {
    string auth_token = 1;
    string api_key_to_delete = 3;
}

message DeleteUserResponse {
    
}

message GetLicenseRequest {
    reserved 1;
    
    reserved "auth_token";
}

message GetLicenseResponse {
    EnterpriseLicenseConfig license = 1;
}

message RequestTeamAccessRequest {
    string invite_id = 2;
    
    reserved 1;
    
    reserved "api_key";
}

message RequestTeamAccessResponse {
    
}

message UpdateUserTeamStatusRequest {
    string auth_token = 1;
    
    repeated UserTeamStatusUpdateItem updates = 2;
    message UserTeamStatusUpdateItem {
        string api_key = 1;
        codeium_common_pb.UserTeamStatus status = 2;
    }
}

message UpdateUserTeamStatusResponse {
    repeated User users = 1;
}

message GetTeamMetadataRequest {
    string invite_id = 1;
}

message GetTeamMetadataResponse {
    Team team = 1;
}

message RemoveUserFromTeamRequest {
    string auth_token = 1;
    string api_key_to_remove = 2;
}

message RemoveUserFromTeamResponse {
    
}

message RefreshTeamInviteIdRequest {
    string auth_token = 1;
}

message RefreshTeamInviteIdResponse {
    Team team = 1;
}

message GrantPreapprovalRequest {
    string auth_token = 1;
    
    repeated PreapprovalUserItem preapprovals = 2;
    message PreapprovalUserItem {
        string name = 1;
        string email = 2;
    }
}

message GrantPreapprovalResponse {
    repeated PreapprovedUser preapprovals = 1;
}

message GetPreapprovalsRequest {
    string auth_token = 1;
}

message GetPreapprovalsResponse {
    repeated PreapprovedUser preapprovals = 1;
}

message GetPreapprovalMetadataRequest {
    string approval_id = 1;
}

message GetPreapprovalMetadataResponse {
    string name = 1;
    string email = 2;
    string team_name = 3;
}

message AcceptPreapprovalRequest {
    string auth_token = 1;
    string approval_id = 2;
}

message AcceptPreapprovalResponse {
    
}

message RejectPreapprovalRequest {
    string auth_token = 1;
    string approval_id = 2;
}

message RejectPreapprovalResponse {
    
}

message GetPreapprovalForUserRequest {
    string auth_token = 1;
}

message GetPreapprovalForUserResponse {
    PreapprovedUser preapproval = 1;
    string admin_name = 2;
    string team_name = 3;
}

message RevokePreapprovalRequest {
    string auth_token = 1;
    string approval_id = 2;
}

message RevokePreapprovalResponse {
    
}

message SubscribeToPlanRequest {
    string auth_token = 1;
    string stripe_price_id = 2 [deprecated = true];
    bool start_trial = 3;
    string success_url = 4;
    string cancel_url = 5;
    codeium_common_pb.TeamsTier teams_tier = 8;
    PaymentPeriod payment_period = 9;
    string team_name = 7;
    int64 seats = 6;
    string turnstile_token = 10;
}

message SubscribeToPlanResponse {
    string checkout_url = 1;
}

message PurchaseCascadeCreditsRequest {
    string auth_token = 1;
    string success_url = 4;
    string cancel_url = 5;
}

message PurchaseCascadeCreditsResponse {
    string checkout_url = 1;
}

message UpdateCreditTopUpSettingsRequest {
    string auth_token = 1;
    bool enabled = 2;
    int32 monthly_top_up_amount = 3;
    int32 top_up_increment = 4;
}

message UpdateCreditTopUpSettingsResponse {
    
}

message GetTeamBillingRequest {
    string auth_token = 1;
}

message GetTeamBillingResponse {
    bool subscription_active = 1;
    bool on_trial = 2;
    google.protobuf.Timestamp subscription_renewal_time = 3;
    int64 num_seats = 5;
    float plan_unit_amount = 6;
    SubInterval sub_interval = 7;
    bool cancel_at_period_end = 8;
    
    repeated Invoice invoices = 9 [deprecated = true];
    message Invoice {
        float amount = 1;
        string currency = 2;
        bool paid = 3;
        google.protobuf.Timestamp created = 4;
        string invoice_pdf_url = 5;
    }
    
    PaymentMethod payment_method = 10;
    message PaymentMethod {
        string type = 1;
        
        oneof payment_type {
            CardType card = 2;
        }
        
        message CardType {
            string brand = 1;
            int64 exp_month = 2;
            int64 exp_year = 3;
            string last4 = 4;
        }
    }
    
    bool trial_only = 11;
    codeium_common_pb.PlanStatus plan_status = 12;
    int64 num_users = 14;
    int64 num_seats_current_billing_period = 15;
    int64 num_cascade_users = 16;
    int64 num_cascade_seats = 17;
    int64 num_core_users = 18;
    int64 num_core_seats = 19;
    
    FailedSubscriptionPayment failed_subscription_payment = 20;
    message FailedSubscriptionPayment {
        string invoice_link = 1;
        string decline_code = 2;
        google.protobuf.Timestamp pay_by_date = 3;
    }
    
    string top_up_error_string = 21;
    bool team_top_up_criteria_reached = 22;
    
    reserved 13;
}

message UpdateSeatsRequest {
    string auth_token = 1;
    int64 num_seats = 2;
    bool preview = 3;
}

message UpdateSeatsResponse {
    BillingUpdate billing_update = 1;
}

message UpdatePlanRequest {
    string auth_token = 1;
    StripePrice price = 2;
    bool preview = 3;
    PaymentPeriod payment_period = 4;
    codeium_common_pb.TeamsTier teams_tier = 5;
}

message UpdatePlanResponse {
    BillingUpdate billing_update = 1;
    bool applied_changes = 2;
    string next_action_client_secret = 3;
    string payment_failure_reason = 4;
    bool requires_password_reset = 5;
}

message BillingUpdate {
    float amount_due_immediately = 1;
    float price_per_seat = 3;
    int64 num_seats = 4;
    SubInterval sub_interval = 5;
    float amount_per_interval = 6;
    google.protobuf.Timestamp billing_start = 7;
    google.protobuf.Timestamp billing_end = 8;
    bool unused_plan_refunded = 9;
    bool has_sso_add_on = 10;
}

message CancelPlanRequest {
    string auth_token = 1;
    bool cancel_plan = 2;
    bool resume_plan = 3;
    string cancel_comment = 4;
    string cancel_reason = 5;
}

message CancelPlanResponse {
    
}

message UpdateBillingRequest {
    string auth_token = 1 [deprecated = true];
    string success_url = 2 [deprecated = true];
    string cancel_url = 3 [deprecated = true];
}

message UpdateBillingResponse {
    string checkout_url = 1 [deprecated = true];
}

message GetCustomerPortalRequest {
    string auth_token = 1;
    string return_url = 2;
}

message GetCustomerPortalResponse {
    string portal_url = 1;
}

message AddTeamAddOnFeatureRequest {
    string auth_token = 1;
    codeium_common_pb.TeamsFeatures feature_type = 2;
    bool preview = 3;
}

message AddTeamAddOnFeatureResponse {
    BillingUpdate billing_update = 1;
    bool applied_changes = 2;
    string next_action_client_secret = 3;
    string payment_failure_reason = 4;
}

message ShowSSOAddOnRequest {
    string auth_token = 1;
}

message ShowSSOAddOnResponse {
    bool show_sso_add_on = 1;
}

message GetUserSubscriptionRequest {
    string auth_token = 1;
}

message GetUserSubscriptionResponse {
    bool exists = 1;
    bool newsletter = 2;
    bool disabled_telemetry = 3;
    string inbound_source = 4;
    string signup_stage = 5;
    UserSettings subscription = 6;
}

message IsUsernameAvailableRequest {
    string auth_token = 1;
    string username = 2;
}

message IsUsernameAvailableResponse {
    bool available = 1;
}

message UpdateUsernameRequest {
    string auth_token = 1;
    string username = 2;
}

message UpdateUsernameResponse {
    
}

message ProvisionTeamRequest {
    string secret = 1;
    string admin_email = 2;
    string team_name = 3;
    int64 num_seats = 4;
    codeium_common_pb.TeamsTier teams_tier = 5;
}

message ProvisionTeamResponse {
    string team_id = 1;
    string invite_id = 2;
}

message ProvisionCascadeSeatsRequest {
    string secret = 1;
    string team_name = 2;
    int64 num_seats = 3;
}

message ProvisionCascadeSeatsResponse {
    
}

message UpdateOccupationRequest {
    string auth_token = 1;
    string occupation_company = 2;
    string occupation_role = 3;
    uint32 years_of_experience_min = 4;
    uint32 years_of_experience_max = 5;
}

message UpdateOccupationResponse {
    
}

message UpdateProfileRequest {
    string auth_token = 1;
    string new_name = 2;
    string new_email = 3;
    string new_bio = 4;
    string otp_code = 5;
}

message UpdateProfileResponse {
    
}

message UpdateProfileVisibilityRequest {
    string auth_token = 1;
    bool public_profile_enabled = 2;
}

message UpdateProfileVisibilityResponse {
    
}

message AddUsersToTeamRequest {
    string secret = 1;
    string team_id = 2;
    repeated string emails = 3;
    bool create_if_not_exists = 4;
    bool send_email = 5;
}

message AddUsersToTeamResponse {
    
}

message GetPublicProfileRequest {
    string username = 1;
}

message GetPublicProfileResponse {
    string name = 1;
    string username = 2;
    string preferred_time_zone = 3;
    google.protobuf.Timestamp signup_time = 4;
    string bio = 5;
    string profile_picture_presigned_url = 6;
}

message UpdateUserRolesRequest {
    string secret = 1;
    string email = 2;
    repeated string roles = 3;
}

message UpdateUserRolesResponse {
    
}

message BulkUpdateUserRolesRequest {
    string service_key = 1;
    repeated string emails = 2;
    string role = 3;
    string group_name = 4;
}

message BulkUpdateUserRolesResponse {
    repeated string successful_emails = 1;
    repeated string failed_emails = 2;
}

message GetTeamActivityRequest {
    string api_key = 1;
    google.protobuf.Timestamp start_timestamp = 2;
    google.protobuf.Timestamp end_timestamp = 3;
}

message GetTeamActivityResponse {
    repeated UserActivity user_activity = 1;
    message UserActivity {
        User user = 1;
        codeium_common_pb.CompletionStatistics completion_statistics = 2;
    }
}

message GetSSOProviderRequest {
    string auth_token = 1;
}

message GetSSOProviderResponse {
    SAMLAuthProvider saml_auth_provider = 1;
}

message SaveSSOProviderRequest {
    string auth_token = 1;
    SAMLAuthProvider saml_auth_provider = 2;
    bool is_test = 3;
}

message SaveSSOProviderResponse {
    
}

message SAMLAuthProvider {
    string sso_provider_id = 1;
    string idp_entity_id = 2;
    string sso_url = 3;
    string x509_certificate = 4;
    bool enabled = 5;
}

message JoinTeamWithSSOLoginRequest {
    string auth_token = 1;
    string saml_provider_id = 2;
    string saml_auth_token = 3;
}

message JoinTeamWithSSOLoginResponse {
    
}

message UserSSOLoginRedirectRequest {
    string email = 1;
}

message UserSSOLoginRedirectResponse {
    bool should_redirect = 1;
    string sso_provider_id = 2;
    bool disallow_enterprise_user_login = 3;
    string redirect_url = 4;
}

message CheckEmailForSSORequest {
    string email = 1;
}

message CheckEmailForSSOResponse {
    string redirect_url = 1;
    bool show_sso_requirement_message = 2;
}

message SSOTeamOption {
    string team_name = 1;
    string redirect_url = 2;
}

message EnterpriseLicenseConfig {
    google.protobuf.Timestamp expiration_timestamp = 1;
    uint32 seat_limit = 2;
    bool attribution_enabled = 3;
    bool audit_logs_enabled = 4;
    google.protobuf.Timestamp start_timestamp = 5;
    uint32 mucs_total = 6;
    bool mucs_enabled = 7;
    uint32 license_length_months = 8;
    bool enable_individual_user_analytics = 9;
}

message DeleteTeamRequest {
    string auth_token = 1;
}

message DeleteTeamResponse {
    
}

message GetTeamsFeaturesRequest {
    string auth_token = 1;
}

message GetTeamsFeaturesResponse {
    repeated codeium_common_pb.TeamsFeatures features = 1;
}

message GrantSuperAdminAccessRequest {
    string auth_token = 1;
    string user_email = 2;
}

message GrantSuperAdminAccessResponse {
    User user = 1;
}

message GrantTeamAdminAccessRequest {
    string auth_token = 1;
    string user_email = 2;
}

message GrantTeamAdminAccessResponse {
    User user = 1;
}

message AddFlexCreditsToMultiTenantTeamRequest {
    string auth_token = 1;
    string team_id = 2;
    int64 flex_credits_to_add = 3;
}

message AddFlexCreditsToMultiTenantTeamResponse {
    Team team = 1;
}

message GetTeamsFeaturesInternalRequest {
    string secret = 1;
    string team_id = 2;
}

message GetTeamsFeaturesInternalResponse {
    repeated codeium_common_pb.TeamsFeatures features = 1;
}

message UpdateTeamsFeaturesInternalRequest {
    string secret = 1;
    string team_id = 2;
    repeated codeium_common_pb.TeamsFeatures add_features = 3;
    repeated codeium_common_pb.TeamsFeatures remove_features = 4;
}

message SetTeamsFeaturesRequest {
    string secret = 1;
    string team_id = 2;
    repeated codeium_common_pb.TeamsFeatures features = 3;
}

message UpdateTeamsFeaturesInternalResponse {
    
}

message SetTeamsFeaturesResponse {
    
}

message UpdateUserFeaturesInternalRequest {
    string secret = 1;
    repeated string api_keys = 2;
    repeated codeium_common_pb.UserFeatures features = 3;
}

message UpdateUserFeaturesInternalResponse {
    
}

message BulkEditUserApprovalsRequest {
    string auth_token = 1;
    repeated string emails = 2;
    UserTeamDetailsType approval_type = 3;
    bool approve = 4;
}

message UserTeamDetails {
    string auth_uid = 1;
    string team_id = 2;
    bool has_cascade_seat = 3;
}

message BulkEditUserApprovalsResponse {
    
}

message BulkEditUserApprovalsInternalRequest {
    string secret = 1;
    string team_name = 2;
    repeated string emails = 3;
    UserTeamDetailsType approval_type = 4;
    bool approve = 5;
}

message BulkEditUserApprovalsInternalResponse {
    
}

message GetTeamSettingsRequest {
    string auth_token = 1;
}

message GetTeamSettingsResponse {
    bool cascade_web_search_enabled = 1;
    bool can_update_cascade_web_search_enabled = 2;
}

message UpdateCascadeWebSearchEnabledRequest {
    string auth_token = 1;
    bool cascade_web_search_enabled = 2;
}

message UpdateCascadeWebSearchEnabledResponse {
    
}

message GetGroupsRequest {
    string auth_token = 1;
    codeium_common_pb.Permission permission = 2;
}

message Group {
    string id = 1;
    string name = 2;
}

message GetGroupsResponse {
    repeated Group groups = 1;
}

message CreateTeamApiSecretRequest {
    string auth_token = 1;
    string name = 2;
    string role = 3;
    string group_id = 4;
    google.protobuf.Timestamp expiration_date = 5;
}

message CreateTeamApiSecretResponse {
    string secret = 1;
}

message UpdateTeamApiSecretRequest {
    string auth_token = 1;
    string service_key_id = 2;
    string name = 3;
    string role = 4;
    string group_id = 5;
}

message UpdateTeamApiSecretResponse {
    
}

message GetAllTeamApiSecretsRequest {
    string auth_token = 1;
}

message TeamApiSecret {
    string id = 1;
    string name = 2;
    google.protobuf.Timestamp created_at = 3;
    string role_id = 4;
    string group_id = 5;
    google.protobuf.Timestamp expiration_date = 6;
}

message GetAllTeamApiSecretsResponse {
    repeated TeamApiSecret secrets = 1;
}

message DeleteTeamApiSecretRequest {
    string auth_token = 1;
    string secret_id = 2;
}

message DeleteTeamApiSecretResponse {
    
}

message GetUserNotificationsRequest {
    string api_key = 1;
}

message GetUserNotificationsResponse {
    TeamPreapprovalMetadata team_preapproval_metadata = 1;
    message TeamPreapprovalMetadata {
        string admin_name = 1;
        string team_name = 2;
        google.protobuf.Timestamp created_at = 3;
    }
}

message ConnectGithubAccountRequest {
    string auth_token = 1;
    string github_refresh_token = 2;
    google.protobuf.Timestamp github_refresh_token_expires_at = 3;
}

message ConnectGithubAccountResponse {
    string github_access_token = 1;
    google.protobuf.Timestamp github_access_token_expires_at = 2;
}

message DisconnectGithubAccountRequest {
    string auth_token = 1;
}

message DisconnectGithubAccountResponse {
    
}

message GetGitHubAccountStatusRequest {
    string auth_token = 1;
}

message GetGitHubAccountStatusResponse {
    bool connected = 1;
    string username = 2;
    google.protobuf.Timestamp expires_at = 3;
}

message GetGitHubAccessTokenRequest {
    string auth_token = 1;
}

message GetGitHubAccessTokenResponse {
    string access_token = 1;
    google.protobuf.Timestamp expires_at = 2;
}

message ConnectNetlifyAccountRequest {
    string auth_token = 1;
    string netlify_access_token = 2;
    google.protobuf.Timestamp expires_at = 3;
    string netlify_user_id = 4;
}

message ConnectNetlifyAccountResponse {
    
}

message DisconnectNetlifyAccountRequest {
    string auth_token = 1;
}

message DisconnectNetlifyAccountResponse {
    
}

message GetNetlifyAccountStatusRequest {
    string auth_token = 1;
}

message GetNetlifyAccountStatusResponse {
    bool connected = 1;
    string netlify_user_id = 2;
    google.protobuf.Timestamp expires_at = 3;
}

message UpdateCodeiumAccessRequest {
    string auth_token = 1;
    string api_key_to_update = 2;
    bool disable_codeium_access = 3;
}

message UpdateCodeiumAccessResponse {
    
}

message CreateRoleRequest {
    string auth_token = 1;
    string name = 2;
    repeated codeium_common_pb.Permission permissions = 3;
}

message CreateRoleResponse {
    
}

message DeleteRoleRequest {
    string auth_token = 1;
    string role_id = 2;
}

message DeleteRoleResponse {
    
}

message UpdateRoleRequest {
    string auth_token = 1;
    string role_id = 2;
    repeated codeium_common_pb.Permission permissions = 3;
}

message UpdateRoleResponse {
    
}

message GetRolesRequest {
    string auth_token = 1;
}

message Role {
    string role_id = 1;
    string name = 2;
    repeated codeium_common_pb.Permission permissions = 3;
    bool mutable = 4;
}

message GetRolesResponse {
    repeated Role roles = 1;
}

message GetMucsInfoRequest {
    
}

message MonthlyMucsMessage {
    int32 billing_months = 1;
    int32 billing_years = 2;
    int32 mucs_charged = 3;
    int32 mucs_deducted = 4;
}

message GetMucsInfoResponse {
    int32 mucs_left = 1;
    int32 mucs_used = 2;
    bool is_mucs_enabled = 3;
    google.protobuf.Timestamp start_date = 4;
    int32 current_registered_users = 5;
    int32 current_high_watermark = 6;
    repeated MonthlyMucsMessage mucs_table = 7;
}

message GetCascadeAnalyticsRequest {
    string auth_token = 1;
    google.protobuf.Timestamp start_timestamp = 2;
    google.protobuf.Timestamp end_timestamp = 3;
}

message GetCascadeAnalyticsResponse {
    int32 used_prompt_credits = 1;
    int32 used_flow_credits = 2;
    int32 estimated_monthly_prompts = 3;
    int32 estimated_monthly_flows = 4;
    int64 purchased_credits = 5;
}

message GetPlanStatusRequest {
    string auth_token = 1;
    bool include_top_up_status = 2;
}

message GetPlanStatusResponse {
    codeium_common_pb.PlanStatus plan_status = 1;
}

message Wrapped2024 {
    string api_key = 1;
    string email = 2;
    string name = 3;
    int32 total_minutes_coded = 4;
    double coding_percentile = 5;
    google.protobuf.Timestamp biggest_coding_day = 6;
    int32 minutes_coding_biggest_day = 7;
    int32 autocompletes_accepted = 8;
    int32 cascade_messages_sent = 9;
    int32 cascade_lines_written = 10;
    int32 longest_streak = 11;
    int32 most_productive_day = 12;
}

message GetWrapped2024Request {
    string auth_token = 1;
}

message GetWrapped2024Response {
    Wrapped2024 wrapped_data = 1;
}

message FlexCreditChronicleEntry {
    string team_id = 1;
    google.protobuf.Timestamp grant_date = 2;
    int32 num_credits = 3;
    FlexCreditChronicleType type = 4;
    uint32 referral_id = 5;
    string invoice_id = 6;
    
    oneof reason {
        ReferrerReason referrer = 7;
        AveryReason avery = 8;
        PurchaseReason purchase = 9;
    }
}

message ReferrerReason {
    string user_email = 1;
    string avery_email = 2;
}

message AveryReason {
    string user_email = 1;
    string referrer_email = 2;
}

message PurchaseReason {
    PurchaseReasonType type = 1;
}

message GetTeamCreditEntriesRequest {
    string auth_token = 1;
}

message GetTeamCreditEntriesResponse {
    repeated FlexCreditChronicleEntry entries = 1;
}

message SendPhoneVerificationRequest {
    string phone_number = 1;
    string turnstile_token = 2;
}

message SendPhoneVerificationResponse {
    
}

message SendEmailVerificationRequest {
    string first_name = 1;
    string email = 2;
    string turnstile_token = 3;
}

message SendEmailVerificationResponse {
    
}

message CreateEnterpriseRequest {
    string secret = 1;
    string team_name = 2;
    string admin_email = 3;
    repeated string tags = 4;
    string organization = 5;
    string source = 6;
    string creation_reason = 7;
    bool trial = 8;
    google.protobuf.Timestamp end_date = 9;
    bool hybrid = 10;
    int32 flow_seats = 11;
    int32 core_seats = 12;
    repeated string users_to_add = 13;
    string created_by = 14;
    bool paid_out_of_band = 15;
    bool enable_auto_cascade_seat_provisioning = 16;
    int32 user_prompt_credit_cap = 17;
    int32 user_flow_credit_cap = 18;
    bool send_email = 19;
    bool is_pooled = 20;
    int64 prepurchased_credits = 21;
}

message CreateEnterpriseResponse {
    
}

message UpdateEnterpriseRequest {
    string secret = 1;
    string team_name = 2;
    string team_id = 3;
    repeated string tags = 4;
    string organization = 5;
    string source = 6;
    string creation_reason = 7;
    bool trial = 8;
    google.protobuf.Timestamp end_date = 9;
    bool hybrid = 10;
    int32 flow_seats = 11;
    int32 core_seats = 12;
    repeated string users_to_add = 13;
    string created_by = 14;
    bool paid_out_of_band = 15;
    bool enable_auto_cascade_seat_provisioning = 16;
    int32 user_prompt_credit_cap = 17;
    int32 user_flow_credit_cap = 18;
    bool is_pooled = 19;
    int64 prepurchased_credits = 20;
}

message UpdateEnterpriseResponse {
    
}

message UpdateTeamConfigRequest {
    string secret = 1;
    string team_name = 2;
    int32 user_prompt_credit_cap = 3;
    int32 user_flow_credit_cap = 4;
    bool disable_prompt_limit = 5;
    bool disable_flow_limit = 6;
}

message UpdateTeamConfigResponse {
    
}

message UpdateTeamConfigExternalRequest {
    string auth_token = 1;
    repeated string allowed_ip_ranges = 24 [deprecated = true];
    codeium_common_pb.CascadeCommandsAutoExecution max_cascade_auto_execution_level = 25;
    
    oneof _allow_auto_run_commands {
        bool allow_auto_run_commands = 2;
    }
    
    oneof _allow_mcp_servers {
        bool allow_mcp_servers = 3;
    }
    
    oneof _allow_app_deployments {
        bool allow_app_deployments = 4;
    }
    
    oneof _allow_github_reviews {
        bool allow_github_reviews = 5;
    }
    
    oneof _allow_github_description_edits {
        bool allow_github_description_edits = 6;
    }
    
    oneof _pull_request_review_guidelines {
        string pull_request_review_guidelines = 7;
    }
    
    oneof _pull_request_description_guidelines {
        string pull_request_description_guidelines = 8;
    }
    
    oneof _allow_individual_level_analytics {
        bool allow_individual_level_analytics = 9;
    }
    
    oneof _allow_conversation_sharing {
        bool allow_conversation_sharing = 10;
    }
    
    oneof _allow_sandbox_app_deployments {
        bool allow_sandbox_app_deployments = 11;
    }
    
    oneof _allow_teams_app_deployments {
        bool allow_teams_app_deployments = 12;
    }
    
    oneof _allow_attribution {
        bool allow_attribution = 13;
    }
    
    oneof _allowed_mcp_servers {
        string allowed_mcp_servers = 14;
    }
    
    oneof _allow_github_auto_reviews {
        bool allow_github_auto_reviews = 15;
    }
    
    oneof _allow_browser_experimental_features {
        bool allow_browser_experimental_features = 16;
    }
    
    oneof _allow_vibe_and_replace {
        bool allow_vibe_and_replace = 17;
    }
    
    oneof _disable_deepwiki {
        bool disable_deepwiki = 18;
    }
    
    oneof _disable_codemaps {
        bool disable_codemaps = 19;
    }
    
    oneof _allow_codemap_sharing {
        string allow_codemap_sharing = 20;
    }
    
    oneof _disable_fast_context {
        bool disable_fast_context = 21;
    }
    
    oneof _disable_lifeguard {
        bool disable_lifeguard = 22;
    }
    
    oneof _disable_tool_call_execution_outside_workspace {
        bool disable_tool_call_execution_outside_workspace = 23;
    }
    
    oneof _ip_allowlist {
        IpAllowlist ip_allowlist = 26;
    }
    
    oneof _terminal_allow_list {
        TerminalAllowList terminal_allow_list = 27;
    }
    
    oneof _terminal_deny_list {
        TerminalDenyList terminal_deny_list = 28;
    }
}

message UpdateTeamConfigExternalResponse {
    
}

message TerminalAllowList {
    repeated string allowed = 1;
}

message TerminalDenyList {
    repeated string deny = 1;
}

message IpAllowlist {
    repeated string ranges = 1;
}

message GetTeamConfigRecordRequest {
    string auth_token = 1;
}

message GetTeamConfigRecordResponse {
    codeium_common_pb.TeamConfig team_config = 1;
}

message UsageConfigRequest {
    string service_key = 1;
    
    oneof user_add_on_credit_cap_update {
        bool clear_add_on_credit_cap = 2;
        uint32 set_add_on_credit_cap = 3;
    }
    
    oneof scope {
        bool team_level = 4;
        string group_id = 5;
        string user_email = 6;
    }
}

message UsageConfigResponse {
    
}

message GetUsageConfigRequest {
    string service_key = 1;
    
    oneof scope {
        bool team_level = 2;
        string group_id = 3;
        string user_email = 4;
    }
}

message GetUsageConfigResponse {
    oneof _add_on_credit_cap {
        uint32 add_on_credit_cap = 1;
    }
}

message GetTeamInfoRequest {
    string secret = 1;
    string team_name = 2;
}

message UserInfo {
    string api_key = 1;
    string name = 2;
    string email = 3;
    google.protobuf.Timestamp signup_time = 4;
    int32 flows_used = 5;
    int32 prompts_used = 6;
    int32 num_acceptances = 7;
    int32 num_lines_accepted = 8;
    google.protobuf.Timestamp last_update_time = 9;
    google.protobuf.Timestamp first_windsurf_use_time = 10;
    codeium_common_pb.UserTeamStatus team_status = 11;
    bool has_cascade_seat = 12;
}

message GetTeamInfoResponse {
    Team team = 1;
    repeated string users_with_cascade = 2 [deprecated = true];
    repeated string users_on_team = 3 [deprecated = true];
    repeated UserInfo user_infos = 4;
    codeium_common_pb.TeamConfig team_config = 5;
}

message IsValidReferralCodeRequest {
    string referral_code = 1;
}

message IsValidReferralCodeResponse {
    string referrer_name = 1;
}

message ProcessReferralCodeRequest {
    string auth_token = 1;
    string referral_code = 2;
}

message ProcessReferralCodeResponse {
    
}

message CreateMultiTenantTeamRequest {
    string auth_token = 1;
    string name = 2;
    string org_id = 3;
}

message CreateMultiTenantTeamResponse {
    Team team = 1;
}

message GetMultiTenantTeamsRequest {
    string auth_token = 1;
}

message GetMultiTenantTeamsResponse {
    repeated Team teams = 1;
}

message GetTeamOrgIdRequest {
    string auth_token = 1;
    string team_id = 2;
}

message GetTeamOrgIdResponse {
    string org_id = 1;
}

message DeleteMultiTenantTeamRequest {
    string auth_token = 1;
    string team_name = 2;
    bool soft_delete = 3;
}

message DeleteMultiTenantTeamResponse {
    
}

message SetTeamLicenseRequest {
    string auth_token = 1;
    string team_name = 2;
    google.protobuf.Timestamp billing_start_date = 3;
    google.protobuf.Timestamp billing_end_date = 4;
    int64 num_seats = 5;
}

message SetTeamLicenseResponse {
    Team team = 1;
}

message UpdatePlanDetailsInternalRequest {
    string secret = 1;
    string email = 2;
    codeium_common_pb.TeamsTier teams_tier = 3;
    int64 num_flex_credits = 4;
    int64 used_flex_credits = 5;
    int64 used_flow_credits = 6;
    int64 used_prompt_credits = 7;
    int64 num_teams_seats = 8;
    int64 user_used_prompt_credits = 9;
    int64 user_used_flow_credits = 10;
    bool for_credit_update = 11;
}

message UpdatePlanDetailsInternalResponse {
    
}

message RemoveUsersFromTeamInternalRequest {
    string secret = 1;
    repeated string emails = 2;
    bool override_subscription_active_check = 3;
}

message RemoveUsersFromTeamInternalResponse {
    
}

message BulkDeleteUsersInternalRequest {
    string secret = 1;
    repeated string emails = 2;
    bool delete_from_bigquery = 3;
}

message BulkDeleteUsersInternalResponse {
    
}

message ExportUserDataInternalRequest {
    string secret = 1;
    string email = 2;
}

message ExportUserDataInternalResponse {
    User user = 1;
    Team team = 2;
    codeium_common_pb.UserTeamStatus user_team_status = 3;
    
    StripeData stripe_data = 4;
    message StripeData {
        string customer_id = 1;
        string subscription_id = 2;
        bool subscription_active = 3;
        string subscription_status = 4;
        google.protobuf.Timestamp current_period_start = 5;
        google.protobuf.Timestamp current_period_end = 6;
        bool cancel_at_period_end = 7;
        string payment_method_type = 8;
        string payment_method_last4 = 9;
        repeated Invoice invoices = 10;
    }
    
    BrevoData brevo_data = 5;
    message BrevoData {
        string email = 1;
        map<string, string> attributes = 2;
        repeated int64 list_ids = 3;
        google.protobuf.Timestamp created_at = 4;
        google.protobuf.Timestamp modified_at = 5;
    }
    
    BigQueryData bigquery_data = 6;
    message BigQueryData {
        repeated PreapprovedUserRow preapproved_users = 1;
        message PreapprovedUserRow {
            string id = 1;
            string name = 2;
            string email = 3;
            string team_id = 4;
            string issued_by_api_key = 5;
            google.protobuf.Timestamp created_at = 6;
            google.protobuf.Timestamp updated_at = 7;
        }
        
        repeated WaitlistRow waitlist = 2;
        message WaitlistRow {
            string email = 1;
            string feature_name = 2;
            google.protobuf.Timestamp signup_time = 3;
            google.protobuf.Timestamp accepted_at = 4;
        }
        
        repeated BlogSubscriptionRow blog_subscriptions = 3;
        message BlogSubscriptionRow {
            string id = 1;
            string email = 2;
            google.protobuf.Timestamp created_at = 3;
        }
        
        repeated Wrapped2024Row wrapped_2024 = 4;
        message Wrapped2024Row {
            string api_key = 1;
            string email = 2;
            string name = 3;
            int32 total_minutes_coded = 4;
            float coding_percentile = 5;
            google.protobuf.Timestamp biggest_coding_day = 6;
            int32 minutes_coding_biggest_day = 7;
            int32 autocompletes_accepted = 8;
            int32 cascade_messages_sent = 9;
            int32 cascade_lines_written = 10;
        }
        
        repeated EmailTrackingRow email_tracking = 5;
        message EmailTrackingRow {
            string auth_uid = 1;
            string email_id = 2;
            google.protobuf.Timestamp sent_at = 3;
        }
        
        repeated CascadeCostRow cascade_costs = 6;
        message CascadeCostRow {
            string api_key = 1;
            string user_email = 2;
            google.protobuf.Timestamp date = 3;
            float cascade_cost = 4;
            int64 prompt_credits = 5;
            int64 flow_credits = 6;
            int64 num_product_events = 7;
        }
    }
    
    FirebaseAuthData firebase_auth_data = 7;
    message FirebaseAuthData {
        string uid = 1;
        google.protobuf.Timestamp creation_time = 2;
        google.protobuf.Timestamp last_sign_in_time = 3;
        bool email_verified = 4;
        repeated ProviderData providers = 5;
    }
    
    GitHubAuthData github_auth_data = 8;
    message GitHubAuthData {
        string auth_uid = 1;
        string github_username = 2;
        google.protobuf.Timestamp created_at = 3;
        google.protobuf.Timestamp updated_at = 4;
    }
    
    NetlifyAuthData netlify_auth_data = 9;
    message NetlifyAuthData {
        string auth_uid = 1;
        string netlify_user_id = 2;
        google.protobuf.Timestamp created_at = 3;
        google.protobuf.Timestamp updated_at = 4;
    }
    
    repeated OfferTrackingRow offer_tracking = 10;
    message OfferTrackingRow {
        string auth_uid = 1;
        string offer_id = 2;
        google.protobuf.Timestamp created_at = 3;
    }
    
    repeated UserFeaturesRow user_features = 11;
    message UserFeaturesRow {
        string id = 1;
        string api_key = 2;
        int32 feature = 3;
        google.protobuf.Timestamp created_at = 4;
    }
    
    repeated CompletionExampleRow completion_examples = 12;
    message CompletionExampleRow {
        string auth_uid = 1;
        string completion_id = 2;
        string file_path = 3;
        string short_prefix = 4;
        string completion_text = 5;
        string short_suffix = 6;
        google.protobuf.Timestamp timestamp = 7;
    }
    
    repeated WindsurfProjectRow windsurf_projects = 13;
    message WindsurfProjectRow {
        string windsurf_project_id = 1;
        string auth_uid = 2;
        string deployment_provider = 3;
        string provider_project_id = 4;
        string project_name = 5;
        string domain = 6;
        string subdomain_name = 7;
        google.protobuf.Timestamp expires_at = 8;
        google.protobuf.Timestamp claimed_at = 9;
        google.protobuf.Timestamp deprovisioned_at = 10;
        google.protobuf.Timestamp created_at = 11;
        google.protobuf.Timestamp updated_at = 12;
    }
    
    repeated WindsurfDeploymentRow windsurf_deployments = 14;
    message WindsurfDeploymentRow {
        string windsurf_deployment_id = 1;
        string windsurf_project_id = 2;
        string provider_deployment_id = 3;
        string workspace_path = 4;
        string deployment_url = 5;
        google.protobuf.Timestamp created_at = 6;
        google.protobuf.Timestamp updated_at = 7;
    }
    
    repeated UserReferralRow user_referrals = 15;
    message UserReferralRow {
        uint32 id = 1;
        string auth_uid = 2;
        string referred_email = 3;
        string details = 4;
        google.protobuf.Timestamp created_at = 5;
        google.protobuf.Timestamp granted_at = 6;
    }
    
    repeated UserRoleRow user_roles = 16;
    message UserRoleRow {
        string api_key = 1;
        string role = 2;
        string group_id = 3;
    }
    
    repeated GroupMemberRow group_members = 17;
    message GroupMemberRow {
        string id = 1;
        string group_id = 2;
        string user_id = 3;
        google.protobuf.Timestamp created_at = 4;
        google.protobuf.Timestamp updated_at = 5;
    }
    
    repeated AuditLogRow audit_logs = 18;
    message AuditLogRow {
        string event_id = 1;
        google.protobuf.Timestamp timestamp = 2;
        string team_id = 3;
        string user_email = 4;
        string user_name = 5;
        string api_key = 6;
        string event = 7;
        string status_code = 8;
        string status_reason = 9;
        string description = 10;
    }
    
    repeated RegistrationActivityRow registration_activity = 19;
    message RegistrationActivityRow {
        string email_id = 1;
        int32 action_value = 2;
        string action_description = 3;
        google.protobuf.Timestamp time_of_action = 4;
        bool successful_action = 5;
    }
    
    message Invoice {
        string id = 1;
        int64 amount_paid = 2;
        string currency = 3;
        google.protobuf.Timestamp created = 4;
        bool paid = 5;
        string invoice_pdf = 6;
        string status = 7;
    }
    
    message ProviderData {
        string provider_id = 1;
        string uid = 2;
        string email = 3;
    }
}

message InitiateAccountOwnershipVerificationInternalRequest {
    string secret = 1;
    string email = 2;
}

message InitiateAccountOwnershipVerificationInternalResponse {
    bool success = 1;
    string message = 2;
}

message VerifyAccountOwnershipInternalRequest {
    string secret = 1;
    string email = 2;
    string verification_code = 3;
}

message VerifyAccountOwnershipInternalResponse {
    bool verified = 1;
    string message = 2;
}

message InitiateTopUpRequest {
    string auth_token = 1;
}

message InitiateTopUpResponse {
    codeium_common_pb.TransactionStatus status = 1;
}

message UserCascadeDetails {
    string auth_uid = 1;
    int64 used_prompt_credits = 2;
    int64 used_flow_credits = 3;
    google.protobuf.Timestamp free_cascade_usage_month_start = 4;
}

message AddExtraFlexCreditsInternalRequest {
    string secret = 1;
    string team_id = 2;
    int64 amount = 3;
    FlexCreditChronicleType type = 4;
    string email = 5;
}

message AddExtraFlexCreditsInternalResponse {
    int64 previous_flex_credits = 1;
    int64 new_flex_credits = 2;
}

message GetOneTimeAuthTokenRequest {
    string firebase_id_token = 1;
}

message GetOneTimeAuthTokenResponse {
    string auth_token = 1;
}

message CreatePKCEAuthorizationCodeRequest {
    string firebase_id_token = 1;
    string code_challenge = 2;
    string code_challenge_method = 3;
}

message CreatePKCEAuthorizationCodeResponse {
    string authorization_code = 1;
}

message ExchangePKCEAuthorizationCodeRequest {
    string authorization_code = 1;
    string code_verifier = 2;
}

message ExchangePKCEAuthorizationCodeResponse {
    string api_key = 1;
    string name = 2;
    string api_server_url = 3;
}

message GetSetUserApiProviderKeysRequest {
    string auth_token = 1;
}

message GetSetUserApiProviderKeysResponse {
    repeated codeium_common_pb.APIProvider providers = 1;
}

message SetUserApiProviderKeyRequest {
    string auth_token = 1;
    codeium_common_pb.APIProvider provider = 2;
    string provider_api_key = 3;
}

message SetUserApiProviderKeyResponse {
    
}

message DeleteUserApiProviderKeyRequest {
    string auth_token = 1;
    codeium_common_pb.APIProvider provider = 2;
}

message DeleteUserApiProviderKeyResponse {
    
}

message DeleteApiKeyRequest {
    oneof auth {
        string auth_token = 1;
        string service_key = 3;
    }
    
    oneof target {
        string key_id = 2;
        string api_key = 4;
        string group_id = 5;
    }
}

message DeleteApiKeyResponse {
    int64 num_deleted = 1;
}

message GetApiKeySummaryRequest {
    string auth_token = 1;
}

message ApiKeyForDisplay {
    string key_id = 1;
    string key_for_display = 2;
    google.protobuf.Timestamp created_at = 3;
    google.protobuf.Timestamp last_used_at = 4;
}

message GetApiKeySummaryResponse {
    repeated ApiKeyForDisplay api_keys = 1;
}

message LogOutUserRequest {
    string uid = 1;
}

message LogOutUserResponse {
    
}

message TeamDomain {
    string domain = 1;
    bool verified = 2;
}

message AddTeamDomainRequest {
    string auth_token = 1;
    string domain = 2;
}

message AddTeamDomainResponse {
    string verification_token = 1;
}

message ListTeamDomainsRequest {
    string auth_token = 1;
}

message ListTeamDomainsResponse {
    repeated TeamDomain team_domains = 1;
}

message VerifyTeamDomainRequest {
    string auth_token = 1;
    string domain = 2;
}

message VerifyTeamDomainResponse {
    
}

message DeleteTeamDomainRequest {
    string auth_token = 1;
    string domain = 2;
}

message DeleteTeamDomainResponse {
    
}

message AddTeamDomainInternalRequest {
    string secret = 1;
    string team_id = 2;
    string domain = 3;
}

message AddTeamDomainInternalResponse {
    
}

message DeleteTeamDomainInternalRequest {
    string secret = 1;
    string team_id = 2;
    string domain = 3;
}

message DeleteTeamDomainInternalResponse {
    
}

message ListTeamDomainsInternalRequest {
    string secret = 1;
    string team_id = 2;
}

message ListTeamDomainsInternalResponse {
    repeated TeamDomain team_domains = 1;
}

message UpdateTeamNameInternalRequest {
    string secret = 1;
    string team_id = 2;
    string new_name = 3;
}

message UpdateTeamNameInternalResponse {
    
}

message VerifySSOLoginInternalRequest {
    string secret = 1;
    string saml_provider_id = 2;
    string user_email = 3;
}

message VerifySSOLoginInternalResponse {
    bool is_allowed = 1;
    string error_message = 2;
}

message CheckProTrialEligibilityRequest {
    string auth_token = 1;
}

message CheckProTrialEligibilityResponse {
    bool is_eligible = 1;
}

message ExchangeDevinCodeRequest {
    string code = 1;
}

message ExchangeDevinCodeResponse {
    string session_token = 1;
}

message GetStripeSubscriptionStateRequest {
    string auth_token = 1;
}

message GetStripeSubscriptionStateResponse {
    string email = 1;
    string subscription_id = 2;
    string subscription_status = 3;
    bool cancel_at_period_end = 4;
    google.protobuf.Timestamp current_period_start = 5;
    google.protobuf.Timestamp current_period_end = 6;
    string customer_id = 7;
    codeium_common_pb.TeamsTier teams_tier = 8;
    bool on_trial = 9;
}

enum PaymentPeriod {
    PAYMENT_PERIOD_UNSPECIFIED = 0;
    PAYMENT_PERIOD_MONTH = 1;
    PAYMENT_PERIOD_YEAR = 2;
}

enum SubInterval {
    SUB_INTERVAL_UNSPECIFIED = 0;
    SUB_INTERVAL_MONTH = 1;
    SUB_INTERVAL_YEAR = 2;
}

enum StripePrice {
    STRIPE_PRICE_UNSPECIFIED = 0;
    STRIPE_PRICE_TEAMS_MONTHLY = 1;
    STRIPE_PRICE_TEAMS_YEARLY = 2;
}

enum CascadeSeatType {
    CASCADE_SEAT_TYPE_UNSPECIFIED = 0;
    CASCADE_SEAT_TYPE_ENTRY = 1;
    CASCADE_SEAT_TYPE_STANDARD = 2;
}

enum UserTeamDetailsType {
    USER_TEAM_DETAILS_TYPE_UNSPECIFIED = 0;
    USER_TEAM_DETAILS_TYPE_CASCADE_SEAT = 1;
}

enum PendingTransactionType {
    PENDING_TRANSACTION_TYPE_UNSPECIFIED = 0;
    PENDING_TRANSACTION_TYPE_TOP_UP = 1;
}

enum FlexCreditChronicleType {
    FLEX_CREDIT_CHRONICLE_TYPE_UNSPECIFIED = 0;
    FLEX_CREDIT_CHRONICLE_TYPE_PURCHASE = 1;
    FLEX_CREDIT_CHRONICLE_TYPE_REFERRER = 2;
    FLEX_CREDIT_CHRONICLE_TYPE_AVERY = 3;
    FLEX_CREDIT_CHRONICLE_TYPE_TOP_UP = 4;
    FLEX_CREDIT_CHRONICLE_TYPE_SUPPORT = 5;
    FLEX_CREDIT_CHRONICLE_TYPE_GTM = 6;
}

enum PurchaseReasonType {
    PURCHASE_REASON_TYPE_UNSPECIFIED = 0;
    PURCHASE_REASON_TYPE_MANUAL = 1;
    PURCHASE_REASON_TYPE_TOP_UP = 2;
}
