syntax = "proto2";

import "steammessages_base.proto";
import "steammessages_unified_base.steamclient.proto";

option cc_generic_services = true;

message CInventory_GetInventory_Request {
  optional uint32 appid = 1;
  optional uint64 steamid = 2;
}

message CInventory_Response {
  optional string etag = 1;
  repeated uint64 removeditemids = 2;
  optional string item_json = 3;
  optional string itemdef_json = 4;
  optional bytes ticket = 5;
  optional bool replayed = 6;
}

message CInventory_ExchangeItem_Request {
  optional uint32 appid = 1;
  optional uint64 steamid = 2;
  repeated uint64 materialsitemid = 3;
  repeated uint32 materialsquantity = 4;
  optional uint64 outputitemdefid = 5;
}

message CInventory_GetEligiblePromoItemDefIDs_Request {
  optional uint32 appid = 1;
  optional uint64 steamid = 2;
}

message CInventory_GetEligiblePromoItemDefIDs_Response {
  repeated uint64 itemdefids = 1;
}

message CInventory_AddItem_Request {
  optional uint32 appid = 1;
  repeated uint64 itemdefid = 2;
  repeated string itempropsjson = 3;
  repeated uint32 itemquantity = 9;
  optional uint64 steamid = 4;
  optional bool notify = 5;
  optional uint64 requestid = 6;
  optional bool trade_restriction = 7;
  optional bool is_purchase = 8 [default = false];
}

message CInventory_ModifyItems_Request {
  message ItemPropertyUpdate {
    optional uint64 itemid = 1;
    optional bool remove_property = 2;
    optional string property_name = 3;
    optional bool property_value_bool = 4;
    optional int64 property_value_int = 5;
    optional string property_value_string = 6;
    optional float property_value_float = 7;
  }
  optional uint32 appid = 1;
  optional uint64 steamid = 2;
  repeated CInventory_ModifyItems_Request.ItemPropertyUpdate updates = 3;
  optional uint32 timestamp = 4;
}

message CInventory_ConsumePlaytime_Request {
  optional uint32 appid = 1;
  optional uint64 itemdefid = 2;
}

message CInventory_ConsumeItem_Request {
  optional uint32 appid = 1;
  optional uint64 itemid = 2;
  optional uint32 quantity = 3;
  optional string timestamp = 4;
  optional uint64 steamid = 5;
  optional uint64 requestid = 6;
}

message CInventory_DevSetNextDrop_Request {
  optional uint32 appid = 1;
  optional uint64 itemdefid = 2;
  optional string droptime = 3;
}

message CInventory_SplitItemStack_Request {
  optional uint32 appid = 1;
  optional uint64 itemid = 2;
  optional uint32 quantity = 3;
  optional uint64 steamid = 5;
}

message CInventory_CombineItemStacks_Request {
  optional uint32 appid = 1;
  optional uint64 fromitemid = 2;
  optional uint64 destitemid = 3;
  optional uint32 quantity = 4;
  optional fixed64 steamid = 7;
}

message CInventory_GetItemDefMeta_Request {
  optional uint32 appid = 1;
}

message CInventory_GetItemDefMeta_Response {
  optional uint32 modified = 1;
  optional string digest = 2;
}

message CInventory_GetUserPurchaseInfo_Request {
}

message CInventory_GetUserPurchaseInfo_Response {
  optional int32 ecurrency = 1;
}

message CInventory_PurchaseInit_Request {
  message LineItem {
    optional uint64 itemdefid = 1;
    optional uint32 quantity = 2;
  }
  optional uint32 appid = 1;
  optional int32 language = 2;
  repeated CInventory_PurchaseInit_Request.LineItem line_items = 3;
}

message CInventory_PurchaseInit_Response {
  optional uint64 orderid = 1;
  optional uint64 transid = 2;
}

message CInventory_PurchaseFinalize_Request {
  optional uint32 appid = 1;
  optional int32 language = 2;
  optional uint64 orderid = 3;
}

message CInventory_InspectItem_Request {
  optional uint64 itemdefid = 1;
  optional fixed64 itemid = 2;
  optional string tags = 3;
}

message CInventoryClient_NewItems_Notification {
  optional uint32 appid = 1;
  optional CInventory_Response inventory_response = 2;
}

service Inventory {
  rpc GetInventory (.CInventory_GetInventory_Request) returns (.CInventory_Response) {
  }
  rpc ExchangeItem (.CInventory_ExchangeItem_Request) returns (.CInventory_Response) {
  }
  rpc GetEligiblePromoItemDefIDs (.CInventory_GetEligiblePromoItemDefIDs_Request) returns (.CInventory_GetEligiblePromoItemDefIDs_Response) {
  }
  rpc AddPromoItem (.CInventory_AddItem_Request) returns (.CInventory_Response) {
  }
  rpc SafeModifyItems (.CInventory_ModifyItems_Request) returns (.CInventory_Response) {
  }
  rpc ConsumePlaytime (.CInventory_ConsumePlaytime_Request) returns (.CInventory_Response) {
  }
  rpc ConsumeItem (.CInventory_ConsumeItem_Request) returns (.CInventory_Response) {
  }
  rpc DevGenerateItem (.CInventory_AddItem_Request) returns (.CInventory_Response) {
  }
  rpc DevSetNextDrop (.CInventory_DevSetNextDrop_Request) returns (.CInventory_Response) {
  }
  rpc SplitItemStack (.CInventory_SplitItemStack_Request) returns (.CInventory_Response) {
  }
  rpc CombineItemStacks (.CInventory_CombineItemStacks_Request) returns (.CInventory_Response) {
  }
  rpc GetItemDefMeta (.CInventory_GetItemDefMeta_Request) returns (.CInventory_GetItemDefMeta_Response) {
  }
  rpc GetUserPurchaseInfo (.CInventory_GetUserPurchaseInfo_Request) returns (.CInventory_GetUserPurchaseInfo_Response) {
  }
  rpc PurchaseInit (.CInventory_PurchaseInit_Request) returns (.CInventory_PurchaseInit_Response) {
  }
  rpc PurchaseFinalize (.CInventory_PurchaseFinalize_Request) returns (.CInventory_Response) {
  }
  rpc InspectItem (.CInventory_InspectItem_Request) returns (.CInventory_Response) {
  }
}

service InventoryClient {
  rpc NotifyNewItems (.CInventoryClient_NewItems_Notification) returns (.NoResponse);
}

