syntax = "proto3";

package bilibili.gaia.gw;

import "google/protobuf/empty.proto";

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

// 待加密的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;
}
