syntax = "proto3";

package bilibili.gaia.gw;

option java_multiple_files = true;

import "google/protobuf/empty.proto";

// 应用列表上报
service Gaia {
  // 应用列表上报
  rpc ExUploadAppList(GaiaEncryptMsgReq) returns (UploadAppListReply);
  // 拉取rsa公钥
  rpc ExFetchPublicKey(google.protobuf.Empty) returns (FetchPublicKeyReply);
}

// 待加密的pb对象
message DeviceAppList {
  // 上报类型
  // first_installation:首次安装上报 first_open:每日启动上报
  string source = 1;
  // 安装的系统程序列表
  repeated string system_app_list = 2;
  //安装的用户程序列表
  repeated string user_app_list = 3;
}

// 加密方式
enum EncryptType {
  INVALID_ENCRYPT_TYPE = 0; // 非法值
  CLIENT_AES = 1;           // 同客户端人工约定AES加密私钥，存储在客户端
  SERVER_RSA_AES = 2;       // 客户端随机生成一个用于AES加密的私钥，并用服务端下发的RSA公钥来加密
}

//
message FetchPublicKeyReply {
  // 版本号
  string version = 1;
  // RSA公钥
  string public_key = 2;
  // 公钥过期时间
  int64 deadline = 3;
}

//
message GaiaDeviceBasicInfo {
  //平台&应用信息
  string platform = 1;        //android/ios/web/h5;
  string device = 2;          //运行设备, 用于区分不同的app, 见客户端传入的对应参数。对于苹果系统，device有效值为phone, pad；安卓无法区分phone和pad，留空即可。
  string mobi_app = 3;        //包类型，用于区分不同的app, 见客户端传入的对应参数（mobi_app ）；对于web端请求，请传空
  string origin = 4;           //客户端appkey, 用以区分不同的客户端，对应客户端请求参数中的appkey,如果无法获取可传空“”
  string app_id = 5;          //app产品编号 //产品编号，由数据平台分配，粉=1，白=2，蓝=3，直播姬=4，HD=5，海外=6，OTT=7，漫画=8，TV野版=9，小视频=10，网易漫画=11，网易漫画lite=12，网易漫画HD=13,国际版=14

  //应用的版本信息
  string sdkver = 6;            // SDK版本号   "sdkver": "2.6.6"
  string app_version = 7;       // app版本  "app_version":"5.36.0"
  string app_version_code = 8;  // app版本号 "app_version_code":"5360000"
  string build = 9;             // app版本号，见客户端传入的对应参数；对于web端请求，请传空

  //渠道信息
  string channel = 10;   //渠道标识，见客户端传入的对应参数；对于web端请求，请传空；对应chid

  //机器硬件信息
  string brand = 11;   //手机品牌，见客户端传入的对应参数；
  string model = 12;    //手机型号，见客户端传入的对应参数
  string osver = 13;   //系统版本，见客户端传入的对应参数
  string user_agent = 14;

  //设备标识信息
  string buvid_local = 15;  //本地设备唯一标识
  string buvid = 16;        //设备唯一标识

  //登陆用户信息
  string mid = 17;         //最后一次登陆用户的mid，如果无登陆信息，传0即可

  //本次启动信息
  int64  fts = 18; // app首次启动时间 "fts":1530447775661
  int32  first = 19; // 是否首次启动 是：0 否：1

  //网络相关的信息
  string network = 20; // 网络连接方式, WIFI/CELLULAR/OFFLINE/OTHERNET/ETHERNET "network":"WIFI", ESS_NETWORK_STATE、ACCESS_WIFI_STATE
}

// 应用列表上报-请求
message GaiaEncryptMsgReq {
  // 上报头部
  GaiaMsgHeader header = 1;
  // 加密数据
  bytes encrypt_payload = 2;
}

// 风控通用消息头
message GaiaMsgHeader {
  //加密类型
  EncryptType encode_type = 1;
  //类型
  PayloadType payload_type = 2;
  //RAS加密后的aes_key
  bytes encoded_aes_key = 3;
  //当前时间戳(ms)
  int64 ts = 4;
}

// 负载类型
enum PayloadType {
  INVALID_PAYLOAD = 0; //非法值
  DEVICE_APP_LIST = 1; //设备app列表，对应DeviceAppList
}

// 应用列表上报-响应
message UploadAppListReply {
  // 上报响应id
  string trace_id = 1;
}
