-
Notifications
You must be signed in to change notification settings - Fork 156
/
Copy pathsteammessages_storebrowse.proto
326 lines (288 loc) · 16.9 KB
/
steammessages_storebrowse.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
syntax = "proto2";
import "steammessages_base.proto";
import "steammessages_unified_base.proto";
import "enums_productinfo.proto";
import "enums.proto";
option py_generic_services = true;
enum EStoreItemType {
k_EStoreItemType_Invalid = -1;
k_EStoreItemType_App = 0;
k_EStoreItemType_Package = 1;
k_EStoreItemType_Bundle = 2;
k_EStoreItemType_Mtx = 3;
}
enum EStoreAppType {
k_EStoreAppType_Game = 0;
k_EStoreAppType_Demo = 1;
k_EStoreAppType_Mod = 2;
k_EStoreAppType_Movie = 3;
k_EStoreAppType_DLC = 4;
k_EStoreAppType_Guide = 5;
k_EStoreAppType_Software = 6;
k_EStoreAppType_Video = 7;
k_EStoreAppType_Series = 8;
k_EStoreAppType_Episode = 9;
k_EStoreAppType_Hardware = 10;
k_EStoreAppType_Music = 11;
k_EStoreAppType_Beta = 12;
k_EStoreAppType_Tool = 13;
k_EStoreAppType_Advertising = 14;
}
enum EUserReviewScore {
k_EUserReviewScore_None = 0;
k_EUserReviewScore_OverwhelminglyNegative = 1;
k_EUserReviewScore_VeryNegative = 2;
k_EUserReviewScore_Negative = 3;
k_EUserReviewScore_MostlyNegative = 4;
k_EUserReviewScore_Mixed = 5;
k_EUserReviewScore_MostlyPositive = 6;
k_EUserReviewScore_Positive = 7;
k_EUserReviewScore_VeryPositive = 8;
k_EUserReviewScore_OverwhelminglyPositive = 9;
}
enum EStoreCategoryType {
k_EStoreCategoryType_Category = 0;
k_EStoreCategoryType_SupportedPlayers = 1;
k_EStoreCategoryType_Feature = 2;
k_EStoreCategoryType_ControllerSupport = 3;
k_EStoreCategoryType_CloudGaming = 4;
k_EStoreCategoryType_MAX = 5;
}
message StoreItemID {
optional uint32 appid = 1;
optional uint32 packageid = 2;
optional uint32 bundleid = 3;
}
message StoreBrowseContext {
optional string language = 1;
optional int32 elanguage = 2 [(description) = "ELanguage"];
optional string country_code = 3 [(description) = "2-character country code; required"];
optional int32 steam_realm = 4 [(description) = "ESteamRealm"];
}
message StoreBrowseItemDataRequest {
optional bool include_assets = 1;
optional bool include_release = 2;
optional bool include_platforms = 3;
optional bool include_all_purchase_options = 4;
optional bool include_screenshots = 5;
optional bool include_trailers = 6;
optional bool include_ratings = 7;
optional int32 include_tag_count = 8 [(description) = "Count of tags to return, as tagids. Maximum 20."];
optional bool include_reviews = 9;
optional bool include_basic_info = 10 [(description) = "Include short description, publisher, developers"];
optional bool include_supported_languages = 11 [(description) = "includes the games support for languages: supported, full_audio, subtitles"];
}
message CStoreBrowse_GetItems_Request {
repeated .StoreItemID ids = 1;
optional .StoreBrowseContext context = 2;
optional .StoreBrowseItemDataRequest data_request = 3;
}
message StoreGameRating {
optional string type = 1 [(description) = "'esrb', 'pegi', ..."];
optional string rating = 2 [(description) = "'t' for teen, 'm' for mature, ..."];
repeated string descriptors = 3 [(description) = "Additional descriptors like 'Intense Violence', 'Strong Language',..."];
optional string interactive_elements = 4 [(description) = "ESRB-specific"];
optional int32 required_age = 10 [(description) = "Age in years. Store pages will prompt with an age gate"];
optional bool use_age_gate = 11;
optional string image_url = 20 [(description) = "An image corresponding to the rating."];
optional string image_target = 21 [(description) = "URL where the image should link for more information."];
}
message StoreItem {
message RelatedItems {
optional uint32 parent_appid = 1 [(description) = "For DLC, Demos, etc, this is the main app."];
}
message Categories {
repeated uint32 supported_player_categoryids = 2 [(description) = "Categories like Single Player, Multiplayer, MMO"];
repeated uint32 feature_categoryids = 3 [(description) = "Categories indicating supported features like Steam Cloud, VAC, Achievements, etc"];
repeated uint32 controller_categoryids = 4 [(description) = "Categories indicating controller support and full controller support."];
}
message Reviews {
message StoreReviewSummary {
optional uint32 review_count = 1;
optional int32 percent_positive = 2 [(description) = "0-100"];
optional .EUserReviewScore review_score = 3 [default = k_EUserReviewScore_None];
optional string review_score_label = 4 [(description) = "A string like 'Mixed', 'Negative', 'Overwhelmingly Positive'"];
}
optional .StoreItem.Reviews.StoreReviewSummary summary_filtered = 1 [(description) = "Review summary with review bombs removed (if any). Always present (if include_reviews set in request)"];
optional .StoreItem.Reviews.StoreReviewSummary summary_unfiltered = 2 [(description) = "Review summary with review bombs included. Only present if there are review bombs."];
}
message BasicInfo {
message CreatorHomeLink {
optional string name = 1;
optional uint32 creator_clan_account_id = 2 [(description) = "Optioanl field indicating this name is associated this the creator home via the clan account id"];
}
optional string short_description = 1;
repeated .StoreItem.BasicInfo.CreatorHomeLink publishers = 2;
repeated .StoreItem.BasicInfo.CreatorHomeLink developers = 3;
repeated .StoreItem.BasicInfo.CreatorHomeLink franchises = 4;
optional string capsule_headline = 5 [(description) = "A custom string specified by the partner for display on or around a capsule on the store, e.g. 'Just Updated!'"];
}
message Tag {
optional uint32 tagid = 1;
optional uint32 weight = 2;
}
message Assets {
optional string asset_url_format = 1 [(description) = "Format for URLs, should substitute the capsule name for ${FILENAME} in the URL."];
optional string main_capsule = 2;
optional string small_capsule = 3;
optional string header = 4 [(description) = "Equivalent to GetConstantRatioHeaderImage in PHP; apps will always have this, packages and bundles may not."];
optional string package_header = 5 [(description) = "A wider header used on package/bundle pages. Not set for apps."];
optional string page_background = 6;
optional string hero_capsule = 7 [(description) = "374x448"];
optional string hero_capsule_2x = 8 [(description) = "748x896 version of hero capsule."];
optional string library_capsule = 9 [(description) = "300x450 - tall library asset"];
optional string library_capsule_2x = 10 [(description) = "600x900 - tall library asset"];
optional string library_hero = 11 [(description) = "960x310 or 1920x620 - library detail background asset"];
optional string library_hero_2x = 12 [(description) = "1920x620 or 3840x1240 - library detail background asset"];
optional string community_icon = 13 [(description) = "32x32 jpg uploading via steamworks under community assets"];
}
message ReleaseInfo {
optional uint32 steam_release_date = 1 [(description) = "The date this item first released on the Steam store. For Early Access graduates, this is their graduation day."];
optional uint32 original_release_date = 2 [(description) = "Optional; the date this item first released elsewhere, typically back catalog items."];
optional uint32 original_steam_release_date = 3 [(description) = "For Early Access graduates, the date the game first appeared on Steam."];
optional bool is_coming_soon = 4 [(description) = "Is the app coming soon? This flag should be preferred to doing time comparisons against steam_release_date."];
optional bool is_preload = 5 [(description) = "Can the app be preloaded? Only applies to Coming Soon titles."];
optional string custom_release_date_message = 6 [(description) = "Custom release date string. steam_release_date will be unset if this is set."];
optional bool is_abridged_release_date = 7 [(description) = "Release date should be displayed as month-year only. steam_release_date is the last day of the month."];
optional string coming_soon_display = 8 [(description) = "One of 'date_full', 'date_month', 'date_quarter', 'date_year', 'text_comingsoon', 'text_tba'"];
optional bool is_early_access = 10;
optional uint32 mac_release_date = 20;
optional uint32 linux_release_date = 21;
}
message Platforms {
message VRSupport {
optional bool vrhmd = 1;
optional bool vrhmd_only = 2;
optional bool htc_vive = 40;
optional bool oculus_rift = 41;
optional bool windows_mr = 42;
optional bool valve_index = 43;
}
optional bool windows = 1;
optional bool mac = 2;
optional bool steamos_linux = 3;
optional .StoreItem.Platforms.VRSupport vr_support = 10;
optional .ESteamDeckCompatibilityCategory steam_deck_compat_category = 11 [default = k_ESteamDeckCompatibilityCategory_Unknown];
}
message PurchaseOption {
message Discount {
optional int64 discount_amount = 1;
optional string discount_description = 2;
optional uint32 discount_end_date = 3;
}
optional int32 packageid = 1;
optional int32 bundleid = 2;
optional string purchase_option_name = 3 [(description) = "The name of the package or bundle"];
optional int64 final_price_in_cents = 5 [(description) = "Always set. Includes any applicable non user-specific discounts."];
optional int64 original_price_in_cents = 6 [(description) = "If discounted, this is the price the item would normally cost."];
optional int64 user_final_price_in_cents = 7;
optional string formatted_final_price = 8 [(description) = "Always set. Formatted with currency symbol and decimal, like '$10.00'."];
optional string formatted_original_price = 9;
optional int32 discount_pct = 10 [(description) = "If discounted, calculated from final price and original price."];
optional int32 user_discount_pct = 11;
optional int32 bundle_discount_pct = 12 [(description) = "If this is a bundle, the savings from buying the bundle. If no bundle items are on active discount, this will be the same as discount_pct."];
repeated .StoreItem.PurchaseOption.Discount active_discounts = 20 [(description) = "Discounts included in discounted_price_in_cents."];
repeated .StoreItem.PurchaseOption.Discount user_active_discounts = 21 [(description) = "Additional discounts included in user_discounted_price_in_cents."];
repeated .StoreItem.PurchaseOption.Discount inactive_discounts = 22 [(description) = "Additional user-specific discounts that do not apply to the current user."];
optional bool user_can_purchase = 30;
optional bool user_can_purchase_as_gift = 31;
optional bool is_commercial_license = 40 [(description) = "This is a commercial license"];
optional bool should_suppress_discount_pct = 41 [(description) = "Don't show the discount percentage on a store capsule for this item."];
}
message Screenshots {
message Screenshot {
optional string filename = 1 [(description) = "Path to file on media CDN. Can access sized version by appending to SHA: '.1920x1080', '.600x338', '.116x65'"];
optional int32 ordinal = 2 [(description) = "Screenshots should be displayed in order of ascending ordinal; they are returned in-order but client may need to merge all_ages and mature_content_screenshots."];
}
repeated .StoreItem.Screenshots.Screenshot all_ages_screenshots = 2 [(description) = "Screenshots suitable for all ages."];
repeated .StoreItem.Screenshots.Screenshot mature_content_screenshots = 3 [(description) = "Screenshots that may contain mature content; these should only be shown after verifying age (age gate)."];
}
message Trailers {
message VideoSource {
optional string filename = 1 [(description) = "Substitute into trailer_url_format"];
optional string type = 2 [(description) = "'video/webm' or 'video/mp4'; can just put this directly in to a <source> tag."];
}
message Trailer {
optional string trailer_name = 1;
optional string trailer_url_format = 2 [(description) = "Format for URLs, should substitute filename for ${FILENAME} in the URL."];
repeated .StoreItem.Trailers.VideoSource trailer_480p = 3;
repeated .StoreItem.Trailers.VideoSource trailer_max = 4;
repeated .StoreItem.Trailers.VideoSource microtrailer = 5;
optional string screenshot_medium = 10 [(description) = "293x165px. Use trailer_url_format."];
optional string screenshot_full = 11 [(description) = "Same size as trailer_max. Use trailer_url_format."];
optional int32 trailer_base_id = 12 [(description) = "Trailer ID. For localized trailers, this will be the original trailer's ID"];
}
repeated .StoreItem.Trailers.Trailer highlights = 1 [(description) = "Primary trailers for this app"];
repeated .StoreItem.Trailers.Trailer other_trailers = 2 [(description) = "Additional trailers; on the app page, these are shown after screenshots (highlights shown before)"];
}
message SupportedLanguage {
optional int32 elanguage = 1 [(description) = "ELanguage"];
optional bool supported = 2;
optional bool full_audio = 3;
optional bool subtitles = 4;
}
message FreeWeekend {
optional uint32 start_time = 1 [(description) = "When the free weekend starts."];
optional uint32 end_time = 2 [(description) = "When the free weekend ends."];
optional string text = 3 [(description) = "Text to show as a description of the free weekend."];
}
optional .EStoreItemType item_type = 1 [default = k_EStoreItemType_Invalid];
optional uint32 id = 2;
optional uint32 success = 3 [(description) = "EResult of this lookup action"];
optional bool visible = 4;
optional bool unvailable_for_country_restriction = 5 [(description) = "Indicates this app is visible in other regions, but not the requested reagion"];
optional string name = 6;
optional string store_url_path = 7 [(description) = "The URL of this item's store page, to be appended to STORE_BASE_URL."];
optional uint32 appid = 9 [(description) = "If this is an app, or a single-app package, the steamworks appid."];
optional .EStoreAppType type = 10 [default = k_EStoreAppType_Game, (description) = "Type of app (Game, Software, Music). For packages/bundles, this will be the most interesting type (eg Game + Soundtrack bundle will have type Game)"];
repeated .EStoreAppType included_types = 11 [(description) = "For packages/bundles, all types of included items"];
repeated uint32 included_appids = 12 [(description) = "For packages/bundles, all included appids"];
optional bool is_free = 13;
optional bool is_early_access = 14;
optional .StoreItem.RelatedItems related_items = 15;
repeated .EContentDescriptorID content_descriptorids = 20;
repeated uint32 tagids = 21;
optional .StoreItem.Categories categories = 22;
optional .StoreItem.Reviews reviews = 23;
optional .StoreItem.BasicInfo basic_info = 24;
repeated .StoreItem.Tag tags = 25;
optional .StoreItem.Assets assets = 30;
optional .StoreItem.ReleaseInfo release = 31;
optional .StoreItem.Platforms platforms = 32;
optional .StoreGameRating game_rating = 33 [(description) = "Local ratings agency information, like ESRB or PEGI"];
optional .StoreItem.PurchaseOption best_purchase_option = 40 [(description) = "The cheapest way for the user to acquire this app or package (may be a bundle)."];
repeated .StoreItem.PurchaseOption purchase_options = 41 [(description) = "Different ways to buy this app or packages (packages can be purchased directly, but may also be included in bundles)."];
repeated .StoreItem.PurchaseOption accessories = 42 [(description) = "Additional packages or bundles associated with an app, but that do not contain the app."];
optional .StoreItem.Screenshots screenshots = 50;
optional .StoreItem.Trailers trailers = 51;
repeated .StoreItem.SupportedLanguage supported_languages = 52;
optional string store_url_path_override = 53 [(description) = "Navigate to this URL (relative to store home) when the store capsule for this item is clicked, instead of the default /app/... URL. Used by advertising apps that point to a sale page."];
optional .StoreItem.FreeWeekend free_weekend = 54 [(description) = "Information about a free weekend offer."];
}
message CStoreBrowse_GetItems_Response {
repeated .StoreItem store_items = 1;
}
message CStoreBrowse_GetStoreCategories_Request {
optional string language = 1;
optional int32 elanguage = 2 [default = -1, (description) = "ELanguage"];
}
message CStoreBrowse_GetStoreCategories_Response {
message Category {
optional uint32 categoryid = 1;
optional .EStoreCategoryType type = 2 [default = k_EStoreCategoryType_Category];
optional string internal_name = 3;
optional string display_name = 4;
optional string image_url = 5 [(description) = "Append to STORE_CDN_URL"];
optional bool show_in_search = 6 [(description) = "Indicates this category can link to search results showing all items in category."];
}
repeated .CStoreBrowse_GetStoreCategories_Response.Category categories = 1;
}
service StoreBrowse {
option (service_description) = "APIs for accessing store item data";
rpc GetItems (.CStoreBrowse_GetItems_Request) returns (.CStoreBrowse_GetItems_Response) {
option (method_description) = "Get information about items on the store";
}
rpc GetStoreCategories (.CStoreBrowse_GetStoreCategories_Request) returns (.CStoreBrowse_GetStoreCategories_Response) {
option (method_description) = "Get category definitions for store. This is a public-facing API (as compared to StoreCatalog.GetCategories, which is intended for PHP)";
}
}