mattermost/server/public/pluginapi/grpc/proto/api_file_bot.proto
Nick Misasi 54d0d6cc8b feat(02-01): add PluginAPI proto skeleton and parity verifier
- Create api.proto with PluginAPI service definition covering all 236
  methods from server/public/plugin/api.go
- Create api_user_team.proto with User, Session, and Team request/response
  messages with placeholder fields
- Create api_channel_post.proto with Channel, Post, and Emoji messages
- Create api_kv_config.proto with KV store, config, plugin, and logging
  messages
- Create api_file_bot.proto with File, Upload, and Bot messages
- Create api_remaining.proto with Server, Command, Preference, OAuth,
  Group, SharedChannel, Property, and Audit messages
- Add ViewUsersRestrictions to common.proto
- Add apiverify tool that parses Go API interface and proto service
  to ensure parity
- Update Makefile with new proto file mappings

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 11:24:09 -05:00

266 lines
5.5 KiB
Protocol Buffer

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
syntax = "proto3";
package mattermost.pluginapi.v1;
option go_package = "github.com/mattermost/mattermost/server/public/pluginapi/grpc/generated/go/pluginapiv1";
import "common.proto";
import "file.proto";
// ==============================================================================
// FILE AND BOT API REQUEST/RESPONSE MESSAGES
// ==============================================================================
//
// This file contains request/response message definitions for:
// - File methods (GetFile, UploadFile, etc.)
// - Upload methods (CreateUploadSession, UploadData, etc.)
// - Bot methods (CreateBot, GetBot, etc.)
//
// ==============================================================================
// ===========================================================================
// File Methods
// ===========================================================================
message CopyFileInfosRequest {
string user_id = 1;
repeated string file_ids = 2;
}
message CopyFileInfosResponse {
AppError error = 1;
repeated string file_ids = 2;
}
message GetFileInfoRequest {
string file_id = 1;
}
message GetFileInfoResponse {
AppError error = 1;
FileInfo file_info = 2;
}
message SetFileSearchableContentRequest {
string file_id = 1;
string content = 2;
}
message SetFileSearchableContentResponse {
AppError error = 1;
}
message GetFileInfosRequest {
int32 page = 1;
int32 per_page = 2;
GetFileInfosOptions options = 3;
}
message GetFileInfosResponse {
AppError error = 1;
repeated FileInfo file_infos = 2;
}
message GetFileRequest {
string file_id = 1;
}
message GetFileResponse {
AppError error = 1;
bytes data = 2;
}
message GetFileLinkRequest {
string file_id = 1;
}
message GetFileLinkResponse {
AppError error = 1;
string link = 2;
}
message ReadFileRequest {
string path = 1;
}
message ReadFileResponse {
AppError error = 1;
bytes data = 2;
}
message UploadFileRequest {
bytes data = 1;
string channel_id = 2;
string filename = 3;
}
message UploadFileResponse {
AppError error = 1;
FileInfo file_info = 2;
}
// ===========================================================================
// Upload Session Methods
// ===========================================================================
message CreateUploadSessionRequest {
UploadSession upload_session = 1;
}
message CreateUploadSessionResponse {
AppError error = 1;
UploadSession upload_session = 2;
}
message UploadDataRequest {
UploadSession upload_session = 1;
bytes data = 2; // Note: For large files, streaming should be used
}
message UploadDataResponse {
AppError error = 1;
FileInfo file_info = 2;
}
message GetUploadSessionRequest {
string upload_id = 1;
}
message GetUploadSessionResponse {
AppError error = 1;
UploadSession upload_session = 2;
}
// ===========================================================================
// Bot Methods
// ===========================================================================
message CreateBotRequest {
Bot bot = 1;
}
message CreateBotResponse {
AppError error = 1;
Bot bot = 2;
}
message PatchBotRequest {
string bot_user_id = 1;
BotPatch bot_patch = 2;
}
message PatchBotResponse {
AppError error = 1;
Bot bot = 2;
}
message GetBotRequest {
string bot_user_id = 1;
bool include_deleted = 2;
}
message GetBotResponse {
AppError error = 1;
Bot bot = 2;
}
message GetBotsRequest {
BotGetOptions options = 1;
}
message GetBotsResponse {
AppError error = 1;
repeated Bot bots = 2;
}
message UpdateBotActiveRequest {
string bot_user_id = 1;
bool active = 2;
}
message UpdateBotActiveResponse {
AppError error = 1;
Bot bot = 2;
}
message PermanentDeleteBotRequest {
string bot_user_id = 1;
}
message PermanentDeleteBotResponse {
AppError error = 1;
}
message EnsureBotUserRequest {
Bot bot = 1;
}
message EnsureBotUserResponse {
AppError error = 1;
string bot_user_id = 2;
}
// ===========================================================================
// Supporting Types
// ===========================================================================
// GetFileInfosOptions contains options for GetFileInfos.
// Maps to model.GetFileInfosOptions in Go.
message GetFileInfosOptions {
string user_id = 1;
string channel_id = 2;
bool include_deleted = 3;
string sort_by = 4;
string sort_order = 5;
}
// UploadSession represents an upload session for resumable uploads.
// Maps to model.UploadSession in Go.
message UploadSession {
string id = 1;
string type = 2; // "attachment" or "import"
int64 create_at = 3;
string user_id = 4;
string channel_id = 5;
string filename = 6;
string path = 7;
int64 file_size = 8;
int64 file_offset = 9;
string remote_id = 10;
string req_file_id = 11;
}
// Bot represents a bot account.
// Maps to model.Bot in Go.
message Bot {
string user_id = 1;
string username = 2;
string display_name = 3;
string description = 4;
string owner_id = 5;
int64 create_at = 6;
int64 update_at = 7;
int64 delete_at = 8;
int64 last_icon_update = 9;
}
// BotPatch contains fields to update a bot.
// Maps to model.BotPatch in Go.
message BotPatch {
optional string username = 1;
optional string display_name = 2;
optional string description = 3;
}
// BotGetOptions contains options for GetBots.
// Maps to model.BotGetOptions in Go.
message BotGetOptions {
string owner_id = 1;
bool include_deleted = 2;
bool only_orphaned = 3;
int32 page = 4;
int32 per_page = 5;
}