syntax = "proto3"; package proto; option csharp_namespace = "DysonNetwork.Shared.Proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; import "account.proto"; import "file.proto"; message CustomAppOauthConfig { string client_uri = 1; repeated string redirect_uris = 2; repeated string post_logout_redirect_uris = 3; repeated string allowed_scopes = 4; repeated string allowed_grant_types = 5; bool require_pkce = 6; bool allow_offline_access = 7; } enum CustomAppStatus { CUSTOM_APP_STATUS_UNSPECIFIED = 0; DEVELOPING = 1; STAGING = 2; PRODUCTION = 3; SUSPENDED = 4; } message CustomApp { string id = 1; string slug = 2; string name = 3; string description = 4; CustomAppStatus status = 5; // jsonb columns represented as bytes bytes picture = 6; bytes background = 7; bytes verification = 8; bytes links = 9; CustomAppOauthConfig oauth_config = 13; string project_id = 10; google.protobuf.Timestamp created_at = 11; google.protobuf.Timestamp updated_at = 12; } message CustomAppSecret { string id = 1; string secret = 2; string description = 3; google.protobuf.Timestamp expired_at = 4; bool is_oidc = 5; string app_id = 6; google.protobuf.Timestamp created_at = 7; google.protobuf.Timestamp updated_at = 8; } message GetCustomAppRequest { oneof Query { string id = 1; string slug = 2; } } message GetCustomAppResponse { CustomApp app = 1; } message CheckCustomAppSecretRequest { oneof SecretIdentifier { string secret_id = 1; string app_id = 2; } string secret = 3; optional bool is_oidc = 4; } message CheckCustomAppSecretResponse { bool valid = 1; } service CustomAppService { rpc GetCustomApp(GetCustomAppRequest) returns (GetCustomAppResponse); rpc CheckCustomAppSecret(CheckCustomAppSecretRequest) returns (CheckCustomAppSecretResponse); } // BotAccount represents a bot account in the system // It extends the base Account with bot-specific fields message BotAccount { // Base account information Account account = 1; // Bot-specific information string slug = 2; // Unique identifier for the bot bool is_active = 3; // Whether the bot is currently active string automated_id = 5; // The bot ID // Timestamps google.protobuf.Timestamp created_at = 6; google.protobuf.Timestamp updated_at = 7; } // Request/Response messages for BotAccount operations message CreateBotAccountRequest { Account account = 1; string automated_id = 2; optional string picture_id = 8; optional string background_id = 9; } message CreateBotAccountResponse { BotAccount bot = 1; // The created bot account } message UpdateBotAccountRequest { string automated_id = 1; // ID of the bot account to update Account account = 2; // Updated account information optional string picture_id = 8; optional string background_id = 9; } message UpdateBotAccountResponse { BotAccount bot = 1; // The updated bot account } message DeleteBotAccountRequest { string automated_id = 1; // ID of the bot account to delete bool force = 2; // Whether to force delete (bypass soft delete) } message DeleteBotAccountResponse { bool success = 1; // Whether the deletion was successful } message ApiKey { string id = 1; string label = 2; string account_id = 3; string session_id = 4; google.protobuf.StringValue key = 5; google.protobuf.Timestamp created_at = 6; google.protobuf.Timestamp updated_at = 7; } message GetApiKeyRequest { string id = 1; } message ListApiKeyRequest { string automated_id = 1; } message GetApiKeyBatchResponse { repeated ApiKey data = 1; } message DeleteApiKeyResponse { bool success = 1; } // This service should be implemented by the Pass service to handle the creation, update, and deletion of bot accounts service BotAccountReceiverService { rpc CreateBotAccount(CreateBotAccountRequest) returns (CreateBotAccountResponse); rpc UpdateBotAccount(UpdateBotAccountRequest) returns (UpdateBotAccountResponse); rpc DeleteBotAccount(DeleteBotAccountRequest) returns (DeleteBotAccountResponse); rpc GetApiKey(GetApiKeyRequest) returns (ApiKey); rpc ListApiKey(ListApiKeyRequest) returns (GetApiKeyBatchResponse); rpc CreateApiKey(ApiKey) returns (ApiKey); rpc UpdateApiKey(ApiKey) returns (ApiKey); rpc RotateApiKey(GetApiKeyRequest) returns (ApiKey); rpc DeleteApiKey(GetApiKeyRequest) returns (DeleteApiKeyResponse); }