noblox.js-secure 4.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of noblox.js-secure might be problematic. Click here for more details.

Files changed (257) hide show
  1. package/.eslintrc.js +21 -0
  2. package/.github/FUNDING.yml +2 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  5. package/.github/dependabot.yml +12 -0
  6. package/.github/workflows/doc-publish.yml +33 -0
  7. package/.github/workflows/npmpublish.yml +70 -0
  8. package/.travis.yml +13 -0
  9. package/CODE_OF_CONDUCT.md +76 -0
  10. package/LICENSE +21 -0
  11. package/README.md +168 -0
  12. package/examples/cleanPlayers.js +130 -0
  13. package/examples/cleanWall.js +110 -0
  14. package/examples/revertRanks.js +100 -0
  15. package/examples/savePlayers.js +119 -0
  16. package/examples/saveWall.js +96 -0
  17. package/img/moderatedThumbnails/moderatedThumbnail_100x100.png +0 -0
  18. package/img/moderatedThumbnails/moderatedThumbnail_110x110.png +0 -0
  19. package/img/moderatedThumbnails/moderatedThumbnail_140x140.png +0 -0
  20. package/img/moderatedThumbnails/moderatedThumbnail_150x150.png +0 -0
  21. package/img/moderatedThumbnails/moderatedThumbnail_150x200.png +0 -0
  22. package/img/moderatedThumbnails/moderatedThumbnail_180x180.png +0 -0
  23. package/img/moderatedThumbnails/moderatedThumbnail_250x250.png +0 -0
  24. package/img/moderatedThumbnails/moderatedThumbnail_30x30.png +0 -0
  25. package/img/moderatedThumbnails/moderatedThumbnail_352x352.png +0 -0
  26. package/img/moderatedThumbnails/moderatedThumbnail_420x420.png +0 -0
  27. package/img/moderatedThumbnails/moderatedThumbnail_48x48.png +0 -0
  28. package/img/moderatedThumbnails/moderatedThumbnail_50x50.png +0 -0
  29. package/img/moderatedThumbnails/moderatedThumbnail_60x60.png +0 -0
  30. package/img/moderatedThumbnails/moderatedThumbnail_720x720.png +0 -0
  31. package/img/moderatedThumbnails/moderatedThumbnail_75x75.png +0 -0
  32. package/img/noblox-js-small.png +0 -0
  33. package/img/noblox-js.png +0 -0
  34. package/img/thumbnailSizes.png +0 -0
  35. package/jsDocsConfig.json +55 -0
  36. package/lib/accountinformation/getUserSocialLinks.js +42 -0
  37. package/lib/accountsettings/block.js +58 -0
  38. package/lib/accountsettings/unblock.js +58 -0
  39. package/lib/asset/deleteFromInventory.js +69 -0
  40. package/lib/asset/getProductInfo.js +56 -0
  41. package/lib/asset/uploadAnimation.js +103 -0
  42. package/lib/asset/uploadItem.js +83 -0
  43. package/lib/asset/uploadModel.js +90 -0
  44. package/lib/avatar/avatarRules.js +38 -0
  45. package/lib/avatar/currentlyWearing.js +32 -0
  46. package/lib/avatar/getAvatar.js +35 -0
  47. package/lib/avatar/getCurrentAvatar.js +37 -0
  48. package/lib/avatar/getRecentItems.js +37 -0
  49. package/lib/avatar/outfitDetails.js +32 -0
  50. package/lib/avatar/outfits.js +37 -0
  51. package/lib/avatar/redrawAvatar.js +48 -0
  52. package/lib/avatar/removeAssetId.js +55 -0
  53. package/lib/avatar/setAvatarBodyColors.js +60 -0
  54. package/lib/avatar/setAvatarScales.js +60 -0
  55. package/lib/avatar/setPlayerAvatarType.js +50 -0
  56. package/lib/avatar/setWearingAssets.js +50 -0
  57. package/lib/avatar/wearAssetId.js +55 -0
  58. package/lib/badges/getAwardedTimestamps.js +52 -0
  59. package/lib/badges/getBadgeInfo.js +43 -0
  60. package/lib/badges/getGameBadges.js +62 -0
  61. package/lib/badges/getPlayerBadges.js +28 -0
  62. package/lib/badges/updateBadgeInfo.js +80 -0
  63. package/lib/cache/add.js +14 -0
  64. package/lib/cache/addIf.js +26 -0
  65. package/lib/cache/clear.js +8 -0
  66. package/lib/cache/get.js +28 -0
  67. package/lib/cache/index.js +17 -0
  68. package/lib/cache/new.js +12 -0
  69. package/lib/cache/wrap.js +25 -0
  70. package/lib/chat/addUsersToConversation.js +61 -0
  71. package/lib/chat/chatSettings.js +33 -0
  72. package/lib/chat/getChatMessages.js +40 -0
  73. package/lib/chat/getConversations.js +43 -0
  74. package/lib/chat/getRolloutSettings.js +35 -0
  75. package/lib/chat/getUnreadConversationCount.js +33 -0
  76. package/lib/chat/getUnreadMessages.js +38 -0
  77. package/lib/chat/getUserConversations.js +37 -0
  78. package/lib/chat/markChatAsRead.js +52 -0
  79. package/lib/chat/markChatAsSeen.js +50 -0
  80. package/lib/chat/multiGetLatestMessages.js +37 -0
  81. package/lib/chat/onNewConversation.js +50 -0
  82. package/lib/chat/onNewMessage.js +53 -0
  83. package/lib/chat/onNewMessageBySelf.js +50 -0
  84. package/lib/chat/onUserOnline.js +50 -0
  85. package/lib/chat/onUserTyping.js +54 -0
  86. package/lib/chat/removeFromGroupConversation.js +62 -0
  87. package/lib/chat/renameGroupConversation.js +57 -0
  88. package/lib/chat/sendChatMessage.js +57 -0
  89. package/lib/chat/setChatUserTyping.js +61 -0
  90. package/lib/chat/start121Conversation.js +50 -0
  91. package/lib/chat/startCloudEditConversation.js +50 -0
  92. package/lib/chat/startGroupConversation.js +62 -0
  93. package/lib/client/onNotification.js +70 -0
  94. package/lib/client/setAPIKey.js +18 -0
  95. package/lib/client/setCookie.js +38 -0
  96. package/lib/datastores/deleteDatastoreEntry.js +66 -0
  97. package/lib/datastores/getDatastoreEntry.js +98 -0
  98. package/lib/datastores/getDatastoreEntryVersions.js +83 -0
  99. package/lib/datastores/getDatastoreKeys.js +73 -0
  100. package/lib/datastores/getDatastores.js +72 -0
  101. package/lib/datastores/incrementDatastoreEntry.js +93 -0
  102. package/lib/datastores/setDatastoreEntry.js +90 -0
  103. package/lib/develop/canManage.js +44 -0
  104. package/lib/develop/configureItem.js +142 -0
  105. package/lib/develop/updateUniverse.js +53 -0
  106. package/lib/develop/updateUniverseAccess.js +55 -0
  107. package/lib/economy/buy.js +99 -0
  108. package/lib/economy/getGroupFunds.js +43 -0
  109. package/lib/economy/getGroupRevenueSummary.js +48 -0
  110. package/lib/economy/getGroupTransactions.js +32 -0
  111. package/lib/economy/getResaleData.js +54 -0
  112. package/lib/economy/getResellers.js +35 -0
  113. package/lib/economy/getUserTransactions.js +34 -0
  114. package/lib/economy/onGroupTransaction.js +74 -0
  115. package/lib/friends/acceptFriendRequest.js +59 -0
  116. package/lib/friends/declineAllFriendRequests.js +57 -0
  117. package/lib/friends/declineFriendRequest.js +59 -0
  118. package/lib/friends/getFollowers.js +61 -0
  119. package/lib/friends/getFollowings.js +61 -0
  120. package/lib/friends/getFriendRequests.js +56 -0
  121. package/lib/friends/getFriends.js +53 -0
  122. package/lib/friends/onFriendRequest.js +58 -0
  123. package/lib/friends/removeFriend.js +58 -0
  124. package/lib/friends/sendFriendRequest.js +59 -0
  125. package/lib/friends/unfollow.js +58 -0
  126. package/lib/games/addDeveloperProduct.js +64 -0
  127. package/lib/games/checkDeveloperProductName.js +39 -0
  128. package/lib/games/configureGamePass.js +146 -0
  129. package/lib/games/getDeveloperProducts.js +51 -0
  130. package/lib/games/getGameInstances.js +31 -0
  131. package/lib/games/getGamePasses.js +39 -0
  132. package/lib/games/getGameSocialLinks.js +45 -0
  133. package/lib/games/getGroupGames.js +30 -0
  134. package/lib/games/getUniverseInfo.js +51 -0
  135. package/lib/games/updateDeveloperProduct.js +69 -0
  136. package/lib/groups/changeRank.js +59 -0
  137. package/lib/groups/deleteWallPost.js +64 -0
  138. package/lib/groups/deleteWallPostsByUser.js +59 -0
  139. package/lib/groups/demote.js +25 -0
  140. package/lib/groups/exile.js +59 -0
  141. package/lib/groups/getAuditLog.js +64 -0
  142. package/lib/groups/getGroup.js +55 -0
  143. package/lib/groups/getGroupSocialLinks.js +44 -0
  144. package/lib/groups/getGroups.js +88 -0
  145. package/lib/groups/getJoinRequest.js +52 -0
  146. package/lib/groups/getJoinRequests.js +58 -0
  147. package/lib/groups/getPlayers.js +108 -0
  148. package/lib/groups/getRankInGroup.js +52 -0
  149. package/lib/groups/getRankNameInGroup.js +52 -0
  150. package/lib/groups/getRole.js +64 -0
  151. package/lib/groups/getRolePermissions.js +51 -0
  152. package/lib/groups/getRoles.js +56 -0
  153. package/lib/groups/getShout.js +49 -0
  154. package/lib/groups/getWall.js +59 -0
  155. package/lib/groups/groupPayout.js +103 -0
  156. package/lib/groups/handleJoinRequest.js +60 -0
  157. package/lib/groups/leaveGroup.js +60 -0
  158. package/lib/groups/onAuditLog.js +61 -0
  159. package/lib/groups/onJoinRequest.js +63 -0
  160. package/lib/groups/onJoinRequestHandle.js +105 -0
  161. package/lib/groups/onShout.js +57 -0
  162. package/lib/groups/onWallPost.js +58 -0
  163. package/lib/groups/promote.js +25 -0
  164. package/lib/groups/searchGroups.js +32 -0
  165. package/lib/groups/setGroupDescription.js +65 -0
  166. package/lib/groups/setGroupName.js +66 -0
  167. package/lib/groups/setRank.js +79 -0
  168. package/lib/groups/shout.js +65 -0
  169. package/lib/index.js +30 -0
  170. package/lib/internal/levelOneCopy.js +16 -0
  171. package/lib/internal/queue.js +61 -0
  172. package/lib/internal/timeout.js +30 -0
  173. package/lib/internal/wrap.js +78 -0
  174. package/lib/inventory/getCollectibles.js +31 -0
  175. package/lib/inventory/getInventory.js +32 -0
  176. package/lib/inventory/getInventoryById.js +31 -0
  177. package/lib/inventory/getOwnership.js +54 -0
  178. package/lib/inventory/getUAIDs.js +47 -0
  179. package/lib/itemconfiguration/getGroupAssets.js +32 -0
  180. package/lib/options.js +26 -0
  181. package/lib/party/onPartyDeleted.js +53 -0
  182. package/lib/party/onPartyInvite.js +53 -0
  183. package/lib/party/onPartyJoinedGame.js +53 -0
  184. package/lib/party/onPartyLeftGame.js +53 -0
  185. package/lib/party/onPartySelfJoined.js +53 -0
  186. package/lib/party/onPartySelfLeft.js +53 -0
  187. package/lib/party/onPartyUserJoined.js +53 -0
  188. package/lib/party/onPartyUserLeft.js +53 -0
  189. package/lib/premiumfeatures/getPremium.js +51 -0
  190. package/lib/presence/getPresences.js +63 -0
  191. package/lib/privatemessages/getMessages.js +60 -0
  192. package/lib/privatemessages/message.js +80 -0
  193. package/lib/privatemessages/onMessage.js +88 -0
  194. package/lib/thumbnails/getLogo.js +60 -0
  195. package/lib/thumbnails/getPlayerThumbnail.js +121 -0
  196. package/lib/thumbnails/getThumbnails.js +93 -0
  197. package/lib/trades/acceptTrade.js +58 -0
  198. package/lib/trades/canTradeWith.js +48 -0
  199. package/lib/trades/counterTrade.js +84 -0
  200. package/lib/trades/declineTrade.js +58 -0
  201. package/lib/trades/getTradeInfo.js +52 -0
  202. package/lib/trades/getTrades.js +37 -0
  203. package/lib/trades/sendTrade.js +82 -0
  204. package/lib/users/getBlurb.js +36 -0
  205. package/lib/users/getIdFromUsername.js +53 -0
  206. package/lib/users/getPlayerInfo.js +100 -0
  207. package/lib/users/getUsernameFromId.js +44 -0
  208. package/lib/users/onBlurbChange.js +46 -0
  209. package/lib/util/clearSession.js +32 -0
  210. package/lib/util/generalRequest.js +61 -0
  211. package/lib/util/getAction.js +45 -0
  212. package/lib/util/getCurrentUser.js +44 -0
  213. package/lib/util/getGeneralToken.js +52 -0
  214. package/lib/util/getHash.js +29 -0
  215. package/lib/util/getInputs.js +37 -0
  216. package/lib/util/getPageResults.js +89 -0
  217. package/lib/util/getSenderUserId.js +30 -0
  218. package/lib/util/getSession.js +38 -0
  219. package/lib/util/getVerification.js +60 -0
  220. package/lib/util/getVerificationInputs.js +31 -0
  221. package/lib/util/http.js +110 -0
  222. package/lib/util/jar.js +24 -0
  223. package/lib/util/refreshCookie.js +52 -0
  224. package/lib/util/relog.js +81 -0
  225. package/lib/util/setOptions.js +54 -0
  226. package/lib/util/shortPoll.js +102 -0
  227. package/lib/util/threaded.js +80 -0
  228. package/package.json +91 -0
  229. package/postinstall.js +1 -0
  230. package/settings.json +101 -0
  231. package/test/accountinformation.test.js +27 -0
  232. package/test/accountsettings.test.js +27 -0
  233. package/test/asset.test.js +66 -0
  234. package/test/assets/Great-White-Shark-Fin.rbxm +0 -0
  235. package/test/assets/KeyframeSequence.rbxm +0 -0
  236. package/test/avatar.test.js +164 -0
  237. package/test/badges.test.js +96 -0
  238. package/test/chat.test.js +104 -0
  239. package/test/datastore.test.js +105 -0
  240. package/test/develop.test.js +53 -0
  241. package/test/economy.test.js +137 -0
  242. package/test/friends.test.js +128 -0
  243. package/test/games.test.js +187 -0
  244. package/test/groups.test.js +311 -0
  245. package/test/inventory.test.js +98 -0
  246. package/test/itemconfiguration.test.js +24 -0
  247. package/test/premiumfeatures.test.js +17 -0
  248. package/test/presence.test.js +25 -0
  249. package/test/privatemessages.test.js +33 -0
  250. package/test/thumbnails.test.js +53 -0
  251. package/test/users.test.js +68 -0
  252. package/tutorials/Authentication.md +75 -0
  253. package/tutorials/Event Emitters.md +26 -0
  254. package/tutorials/Promises.md +86 -0
  255. package/tutorials/VPS Authentication.md +72 -0
  256. package/typings/index.d.ts +2493 -0
  257. package/typings/jsDocs.ts +1883 -0
@@ -0,0 +1,1883 @@
1
+ // types/Types
2
+ import * as events from "events";
3
+ import * as stream from "stream";
4
+
5
+ /**
6
+ * @typedef
7
+ */
8
+ type CookieJar = {
9
+ session?: string;
10
+ }
11
+
12
+ /**
13
+ * @typedef
14
+ * NobloxOptions for setOptions, based from settings.json
15
+ */
16
+ type NobloxOptions = {
17
+ /** Minimizes data usage and speed up requests by only saving session cookies, disable if you need other cookies to be saved as well. (Default: true) */
18
+ session_only: boolean;
19
+
20
+ /** This is usually used for functions that have to receive a lot of pages at once. Only this amount will be queued up as to preserve memory, make this as high as possible for fastest responses (although it will be somewhat limited by maxSockets). (Default: 50) */
21
+ max_threads: number;
22
+
23
+ /** Timeout for http requests. This is necessary for functions that make a very large number of requests, where it is possible some simply won't connect. (Default: 10000) */
24
+ timeout: number;
25
+
26
+ event: {
27
+ /** Maximum number of consecutive retries after an event times out or fails in some other way. (Default: 5) */
28
+ maxRetries: number;
29
+ /** Maximum time (in milliseconds) a request can take. If your server has extremely high latency you may have to raise this. (Default: 10000) */
30
+ timeout: number;
31
+ /** The poll time in milliseconds by default. A lower number will detect changes much quicker but will stress the network, a higher one does the opposite. (Default: 10000) */
32
+ defaultDelay: number;
33
+ /** The poll time in milliseconds to check for new audit log entries. A lower number will detect changes much quicker but will stress the network, a higher one does the opposite. (Default: 10000) */
34
+ onAuditLog: number;
35
+ /** The poll time in milliseconds to check for new wall posts. A lower number will detect changes much quicker but will stress the network, a higher one does the opposite. (Default: 10000) */
36
+ onWallPost: number;
37
+ /** The poll time in milliseconds to check for new join requests. A lower number will detect changes much quicker but will stress the network, a higher one does the opposite. (Default: 10000) */
38
+ onJoinRequestHandle: number;
39
+ /** The poll time in milliseconds to check for new join requests. A lower number will detect changes much quicker but will stress the network, a higher one does the opposite. (Default: 10000) */
40
+ onJoinRequest: number;
41
+ /** The poll time in milliseconds to check for a new shout message. A lower number will detect changes much quicker but will stress the network, a higher one does the opposite. (Default: 10000) */
42
+ onShout: number;
43
+ /** The poll time in milliseconds to check for a new blurb message. A lower number will detect changes much quicker but will stress the network, a higher one does the opposite. (Default: 10000) */
44
+ onBlurbChange: number;
45
+ /** The poll time in milliseconds to check for new transaction log entries. A lower number will detect changes much quicker but will stress the network, a higher one does the opposite. This endpoint has a low rate limit. (Default: 30000) */
46
+ onGroupTransaction: number;
47
+ }
48
+
49
+ thumbnail: {
50
+ /** Maximum number of retries to retrieve a pending thumbnail, rare, but occurs with uncached users (Roblox's cache) (Default: 2) */
51
+ maxRetries: number;
52
+ /** The time to wait between consecutive retries of retrieving pending thumbnails. (Default: 500) */
53
+ retryDelay: number;
54
+
55
+ failedUrl: {
56
+ /** The image URL to provide when an asset thumbnail is still pending; defaults to Roblox moderation icon via noblox.js's GitHub repo at https://noblox.js.org/moderatedThumbnails/moderatedThumbnail_{size}.png */
57
+ pending: string;
58
+ /** The image URL to provide when an asset thumbnail has been moderated by Roblox; defaults to Roblox moderation icon via noblox.js's GitHub repo at https://noblox.js.org/moderatedThumbnails/moderatedThumbnail_{size}.png */
59
+ blocked: string;
60
+ }
61
+ }
62
+
63
+ queue: {
64
+ Message: {
65
+ /** Although messages do have a floodcheck, it is not instituted immediately so this is disabled by default. If you are sending a lot of messages set a delay around 10-15 seconds (10000-15000). (Default: 0) */
66
+ delay: number
67
+ }
68
+ }
69
+
70
+ cache: {
71
+ /** XCSRF tokens expire 30 minutes after being created. Until they expire, however, no new tokens can be made. Sometimes an XCSRF token has already been created for the user so the server doesn't know when to collect a new one. During transitions some requests may use invalid tokens. For now, new XCSRF tokens are automatically retrieved when cached ones get rejected. */
72
+ XCSRF: {
73
+ /** Default: 1800 */
74
+ expire: number | boolean;
75
+ /** Default: false */
76
+ refresh: number | boolean;
77
+ },
78
+
79
+ /** Verification tokens seem to last extremely long times. */
80
+ Verify: {
81
+ /** Default: 7200 */
82
+ expire: number | boolean;
83
+ /** Default: 3600 */
84
+ refresh: number | boolean;
85
+ },
86
+
87
+ /** This should be fine unless your group changes its ranks often. */
88
+ Roles: {
89
+ /** Default: 600 */
90
+ expire: number | boolean;
91
+ /** Default: true */
92
+ refresh: number | boolean;
93
+ },
94
+
95
+ /** Disable this completely if you don't plan on ever changing your exile bot's rank. */
96
+ RolesetId: {
97
+ /** Default: 86400 */
98
+ expire: number | boolean;
99
+ /** Default: false */
100
+ refresh: number | boolean;
101
+ },
102
+
103
+ /** Disabled by default for security (price checks). If you are only working with ROBLOX assets, however, you can set this to something high (since ROBLOX product info rarely changes). */
104
+ Product: {
105
+ /** Default: false */
106
+ expire: number | boolean;
107
+ /** Default: false */
108
+ refresh: number | boolean;
109
+ },
110
+
111
+ /** Caches a user's username based on their ID. It is not on by default because it is an uncontrollable change but the option is there to cache it if you would like. */
112
+ NameFromID: {
113
+ /** Default: false */
114
+ expire: number | boolean;
115
+ /** Default: false */
116
+ refresh: number | boolean;
117
+ },
118
+
119
+ /** Permanent cache for a user's ID based on their name. There is no reason this would ever change (changing names would re-match it and old names cannot be reused by other accounts). Only disable if you want this to match current names only. */
120
+ IDFromName: {
121
+ /** Default: true */
122
+ expire: number | boolean;
123
+ /** Default: false */
124
+ refresh: number | boolean;
125
+ },
126
+
127
+ /** Permanent cache for the sender's user ID. This should literally never change. */
128
+ SenderId: {
129
+ /** Default: true */
130
+ expire: number | boolean;
131
+ /** Default: false */
132
+ refresh: number | boolean;
133
+ },
134
+
135
+ /** Caches rank by user ID. Changes cannot be anticipated so this is not enabled by default. */
136
+ Rank: {
137
+ /** Default: false */
138
+ expire: number | boolean;
139
+ /** Default: false */
140
+ refresh: number | boolean;
141
+ }
142
+ }
143
+ }
144
+
145
+ /// Asset
146
+
147
+ /**
148
+ * @typedef
149
+ */
150
+ type UploadItemAssetType = 11 | 12 | 13;
151
+
152
+ /**
153
+ * @typedef
154
+ */
155
+ type ProductInfoCreator = {
156
+ Id: number;
157
+ Name: string;
158
+ HasVerifiedBadge: boolean;
159
+ }
160
+
161
+ /**
162
+ * @typedef
163
+ */
164
+ type ProductInfo = {
165
+ TargetId: number;
166
+ ProductType?: string;
167
+ AssetId: number;
168
+ ProductId: number;
169
+ Name: string
170
+ Description: string;
171
+ AssetTypeId: number;
172
+ Creator: ProductInfoCreator;
173
+ IconImageAssetId: number;
174
+ Created: Date;
175
+ Updated: Date;
176
+ PriceInRobux?: number;
177
+ PriceInTickets?: number;
178
+ Sales: number;
179
+ IsNew: boolean;
180
+ IsForSale: boolean;
181
+ IsPublicDomain: boolean;
182
+ IsLimited: boolean;
183
+ IsLimitedUnique: boolean;
184
+ Remaining?: number;
185
+ MinimumMembershipLevel: number;
186
+ ContentRatingTypeId: number;
187
+ SaleAvailabilityLocations?: string[];
188
+ SaleLocation?: string;
189
+ CollectibleItemId?: number;
190
+ }
191
+
192
+ /**
193
+ * @typedef
194
+ */
195
+ type BuyProductInfo = {
196
+ ProductId: number;
197
+ Creator: { Id: number };
198
+ PriceInRobux: number;
199
+ UserAssetId: number;
200
+ }
201
+
202
+ /**
203
+ * @typedef
204
+ */
205
+ type PriceRange = {
206
+ high: number;
207
+ low: number;
208
+ }
209
+
210
+ /**
211
+ * @typedef
212
+ */
213
+ type BuyAssetResponse = {
214
+ productId: number;
215
+ price: number;
216
+ }
217
+
218
+ /**
219
+ * @typedef
220
+ */
221
+ type ChartDataPointResponse = {
222
+ value?: number;
223
+ date?: Date;
224
+ }
225
+
226
+ /**
227
+ * @typedef
228
+ */
229
+ type ResaleDataResponse = {
230
+ assetStock?: number;
231
+ sales?: number;
232
+ numberRemaining?: number;
233
+ recentAveragePrice?: number;
234
+ originalPrice?: number;
235
+ priceDataPoints?: ChartDataPointResponse[];
236
+ volumeDataPoints?: ChartDataPointResponse[];
237
+ }
238
+
239
+ /**
240
+ * @typedef
241
+ */
242
+ type ResellerAgent = {
243
+ id: number;
244
+ type: "User" | "Group";
245
+ name: string;
246
+ }
247
+
248
+ /**
249
+ * @typedef
250
+ */
251
+ type ResellerData = {
252
+ userAssetId: number;
253
+ seller: ResellerAgent;
254
+ price: number;
255
+ serialNumber?: number;
256
+ }
257
+
258
+ /**
259
+ * @typedef
260
+ */
261
+ type ThumbnailRequest = {
262
+ requestId?: string;
263
+ targetId?: number;
264
+ token?: string;
265
+ alias?: string;
266
+ type: 'Avatar' | 'AvatarHeadShot' | 'GameIcon' | 'BadgeIcon' | 'GameThumbnail' | 'GamePass' | 'Asset' | 'BundleThumbnail' | 'Outfit' | 'GroupIcon' | 'DeveloperProduct' | 'AutoGeneratedAsset' | 'AvatarBust' | 'PlaceIcon' | 'AutoGeneratedGameIcon' | 'ForceAutoGeneratedGameIcon';
267
+ size: string;
268
+ format?: 'png' | 'jpeg';
269
+ isCircular?: boolean;
270
+ }
271
+
272
+ /**
273
+ * @typedef
274
+ */
275
+ type ThumbnailData = {
276
+ requestId?: string;
277
+ errorCode: number;
278
+ errorMessage: string;
279
+ targetId: number;
280
+ state: "Completed" | "Pending" | "Blocked";
281
+ imageUrl?: string;
282
+ }
283
+
284
+ /**
285
+ * @typedef
286
+ */
287
+ type UploadItemResponse = {
288
+ id: number;
289
+ }
290
+
291
+ /**
292
+ * @typedef
293
+ */
294
+ type UploadModelResponse = {
295
+ AssetId: number;
296
+ AssetVersionId : number;
297
+ }
298
+
299
+ /**
300
+ * @typedef
301
+ */
302
+ type UploadModelItemOptions = {
303
+ name: string;
304
+ description?: string;
305
+ copyLocked?: boolean;
306
+ allowComments?: boolean;
307
+ groupId?: number;
308
+ }
309
+
310
+ /**
311
+ * @typedef
312
+ */
313
+ type ConfigureItemResponse = {
314
+ name: string;
315
+ assetId: number;
316
+ description?: string;
317
+ price?: number;
318
+ isCopyingAllowed?: boolean;
319
+ }
320
+
321
+ /// Avatar
322
+
323
+ /**
324
+ * @typedef
325
+ */
326
+ type AssetTypeRulesModel = {
327
+ min: number;
328
+ max: number;
329
+ increment: number;
330
+ }
331
+
332
+ /**
333
+ * @typedef
334
+ */
335
+ type AvatarRulesScales = {
336
+ [scalename: string]: AssetTypeRulesModel;
337
+ }
338
+
339
+ /**
340
+ * @typedef
341
+ */
342
+ type WearableAssetType = {
343
+ maxNumber: number;
344
+ id: number;
345
+ name: string;
346
+ }
347
+
348
+ /**
349
+ * @typedef
350
+ */
351
+ type BodyColorModel = {
352
+ brickColorId: number;
353
+ hexColor: string;
354
+ name: string;
355
+ }
356
+
357
+ /**
358
+ * @typedef
359
+ */
360
+ type DefaultClothingAssetLists = {
361
+ defaultShirtAssetIds: Array<number>;
362
+ defaultPantAssetIds: Array<number>;
363
+ }
364
+
365
+ /**
366
+ * @typedef
367
+ */
368
+ type AvatarRules = {
369
+ playerAvatarTypes: Array<string>;
370
+ scales: AvatarRulesScales;
371
+ wearableAssetTypes: Array<WearableAssetType>;
372
+ bodyColorsPalette: Array<BodyColorModel>;
373
+ basicBodyColorsPalette: Array<BodyColorModel>;
374
+ minimumDeltaEBodyColorDifference: number;
375
+ proportionsAndBodyTypeEnabledForUser: boolean;
376
+ defaultClothingAssetLists: DefaultClothingAssetLists;
377
+ bundlesEnabledForUser: boolean;
378
+ emotesEnabledForUser: boolean;
379
+ }
380
+
381
+ /**
382
+ * @typedef
383
+ */
384
+ type AssetIdList = {
385
+ assetIds: Array<number>;
386
+ }
387
+
388
+ /**
389
+ * @typedef
390
+ */
391
+ type AvatarScale = {
392
+ height: number;
393
+ width: number;
394
+ head: number;
395
+ depth: number;
396
+ proportion: number;
397
+ bodyType: number;
398
+ }
399
+
400
+ /**
401
+ * @typedef
402
+ */
403
+ type AvatarBodyColors = {
404
+ headColorId: number;
405
+ torsoColorId: number;
406
+ rightArmColorId: number;
407
+ leftArmColorId: number;
408
+ rightLegColorId: number;
409
+ leftLegColorId: number;
410
+ }
411
+
412
+ /**
413
+ * @typedef
414
+ */
415
+ type AvatarAssetType = {
416
+ id: number;
417
+ name: string;
418
+ }
419
+
420
+ /**
421
+ * @typedef
422
+ */
423
+ type AvatarAsset = {
424
+ id: number;
425
+ name: string;
426
+ assetType: AvatarAssetType;
427
+ }
428
+
429
+ /**
430
+ * @typedef
431
+ */
432
+ type PlayerAvatarType = "R6" | "R15";
433
+
434
+ /**
435
+ * @typedef
436
+ */
437
+ type AvatarInfo = {
438
+ scales: AvatarScale;
439
+ playerAvatarType: PlayerAvatarType;
440
+ bodyColors: AvatarBodyColors;
441
+ assets: Array<AvatarAsset>;
442
+ defaultShirtApplied: boolean;
443
+ defaultPantsApplied: boolean;
444
+ }
445
+
446
+ /**
447
+ * @typedef
448
+ */
449
+ type RecentItemListType = "All" | "Clothing" | "BodyParts" | "AvatarAnimations" | "Accessories" | "Outfits" | "Gear";
450
+
451
+ /**
452
+ * @typedef
453
+ */
454
+ type RecentItemType = "Asset" | "Outfit";
455
+
456
+ /**
457
+ * @typedef
458
+ */
459
+ type AssetRecentItem = {
460
+ id: number;
461
+ name: string;
462
+ type: RecentItemType;
463
+ assetType: AvatarAssetType;
464
+ isEditable?: boolean;
465
+ }
466
+
467
+ /**
468
+ * @typedef
469
+ */
470
+ type AssetRecentItemsResult = {
471
+ data: Array<AssetRecentItem>;
472
+ total: number;
473
+ }
474
+
475
+ /**
476
+ * @typedef
477
+ */
478
+ type AvatarOutfitDetails = {
479
+ id: number;
480
+ name: string;
481
+ assets: Array<AvatarAsset>;
482
+ bodyColors: Array<AvatarBodyColors>;
483
+ scale: AvatarScale;
484
+ playerAvatarType: PlayerAvatarType;
485
+ isEditable: boolean;
486
+ }
487
+
488
+ /**
489
+ * @typedef
490
+ */
491
+ type AvatarOutfit = {
492
+ id: number;
493
+ name: string;
494
+ isEditable: boolean;
495
+ }
496
+
497
+ /**
498
+ * @typedef
499
+ */
500
+ type GetOutfitsResult = {
501
+ data: Array<AvatarOutfit>;
502
+ total: number;
503
+ }
504
+
505
+ /// Chat
506
+
507
+ /**
508
+ * @typedef
509
+ */
510
+ type RejectedParticipant = {
511
+ rejectedReason: string;
512
+ type: string;
513
+ targetId: number;
514
+ name: string;
515
+ displayName: string;
516
+ }
517
+
518
+ /**
519
+ * @typedef
520
+ */
521
+ type ConversationAddResponse = {
522
+ conversationId: number;
523
+ rejectedParticipants: Array<RejectedParticipant>;
524
+ resultType: string;
525
+ statusMessage: string;
526
+ }
527
+
528
+ /**
529
+ * @typedef
530
+ */
531
+ type ConversationRemoveResponse = {
532
+ conversationId: number;
533
+ resultType: string;
534
+ statusMessage: string;
535
+ }
536
+
537
+ /**
538
+ * @typedef
539
+ */
540
+ type ConversationRenameResponse = {
541
+ conversationTitle: string;
542
+ resultType: string;
543
+ title: ChatConversationTitle;
544
+ statusMessage: string;
545
+ }
546
+
547
+ /**
548
+ * @typedef
549
+ */
550
+ type SendChatResponse = {
551
+ content: string;
552
+ filteredForReceivers: boolean;
553
+ messageId: string;
554
+ sent: string;
555
+ messageType: string;
556
+ resultType: string;
557
+ statusMessage: string;
558
+ }
559
+
560
+ /**
561
+ * @typedef
562
+ */
563
+ type UpdateTypingResponse = {
564
+ statusMessage: string;
565
+ }
566
+
567
+ /**
568
+ * @typedef
569
+ */
570
+ type StartGroupConversationResponse = {
571
+ conversation: ChatConversation;
572
+ rejectedParticipants: Array<RejectedParticipant>;
573
+ resultType: string;
574
+ statusMessage: string;
575
+ }
576
+
577
+ /**
578
+ * @typedef
579
+ */
580
+ type ChatSettings = {
581
+ /**
582
+ * Is chat enabled for the user.
583
+ */
584
+ chatEnabled: boolean;
585
+ /**
586
+ * Was the Last ChatMessage Sent within the last x days or the account was created in the last x days? Note: user is active by default unless he does not chat for more than x days after account creation
587
+ */
588
+ isActiveChatUser: boolean;
589
+ }
590
+
591
+ /**
592
+ * @typedef
593
+ */
594
+ type ChatMessage = {
595
+ id: string;
596
+ senderType: "User" | "System";
597
+ sent: string;
598
+ read: boolean;
599
+ messageType: "PlainText" | "Link" | "EventBased";
600
+ decorators: Array<string>;
601
+ senderTargetId: number;
602
+ content: string;
603
+ link: ChatMessageLink;
604
+ eventBased: ChatMessageEventBased;
605
+ }
606
+
607
+ /**
608
+ * @typedef
609
+ */
610
+ type ChatMessageLink = {
611
+ type: "Game";
612
+ game: ChatMessageGameLink;
613
+ }
614
+
615
+ /**
616
+ * @typedef
617
+ */
618
+ type ChatMessageGameLink = {
619
+ universeId: number;
620
+ }
621
+
622
+ /**
623
+ * @typedef
624
+ */
625
+ type ChatMessageEventBased = {
626
+ type: "SetConversationUniverse";
627
+ setConversationUniverse: ChatMessageSetConversationUniverseEventBased;
628
+ }
629
+
630
+ /**
631
+ * @typedef
632
+ */
633
+ type ChatMessageSetConversationUniverseEventBased = {
634
+ actorUserId: number;
635
+ universeId: number;
636
+ }
637
+
638
+ /**
639
+ * @typedef
640
+ */
641
+ type ChatConversation = {
642
+ id: number;
643
+ title: string;
644
+ initiator: ChatParticipant;
645
+ hasUnreadMessages: boolean;
646
+ participants: Array<ChatParticipant>;
647
+ conversationType: "OneToOneConversation" | "MultiUserConversation" | "CloudEditConversation";
648
+ conversationTitle: ChatConversationTitle;
649
+ lastUpdated: Date;
650
+ conversationUniverse: ChatConversationUniverse;
651
+ }
652
+
653
+ /**
654
+ * @typedef
655
+ */
656
+ type ChatParticipant = {
657
+ type: "User" | "System";
658
+ targetId: number;
659
+ name: string;
660
+ displayName: string;
661
+ }
662
+
663
+ /**
664
+ * @typedef
665
+ */
666
+ type ChatConversationTitle = {
667
+ titleForViewer: string;
668
+ isDefaultTitle: boolean;
669
+ }
670
+
671
+ /**
672
+ * @typedef
673
+ */
674
+ type ChatConversationUniverse = {
675
+ universeId: number;
676
+ rootPlaceId: number;
677
+ }
678
+
679
+ /**
680
+ * @typedef
681
+ */
682
+ type ChatFeatureNames = "LuaChat" | "ConversationUniverse" | "PlayTogether" | "Party" | "GameLink" | "OldPlayTogether";
683
+
684
+ /**
685
+ * @typedef
686
+ */
687
+ type GetRolloutSettingsResult = {
688
+ rolloutFeatures: Array<ChatRolloutFeature>;
689
+ }
690
+
691
+ /**
692
+ * @typedef
693
+ */
694
+ type ChatRolloutFeature = {
695
+ featureName: ChatFeatureNames;
696
+ isRolloutEnabled: boolean;
697
+ }
698
+
699
+ /**
700
+ * @typedef
701
+ */
702
+ type GetUnreadConversationCountResult = {
703
+ count: number;
704
+ }
705
+
706
+ /**
707
+ * @typedef
708
+ */
709
+ type ChatConversationWithMessages = {
710
+ conversationId: number;
711
+ chatMessages: Array<ChatMessage>;
712
+ }
713
+
714
+ /**
715
+ * @typedef
716
+ */
717
+ type OnUserTypingChatEvent = {
718
+ UserId: number;
719
+ ConversationId: number;
720
+ IsTyping: boolean;
721
+ }
722
+
723
+ /// Game
724
+ /**
725
+ * @typedef
726
+ */
727
+ type GameInstance = {
728
+ id: string;
729
+ maxPlayers: number;
730
+ playing: number;
731
+ playerTokens: Array<string>;
732
+ fps: number;
733
+ ping: number;
734
+ }
735
+
736
+ /**
737
+ * @typedef
738
+ */
739
+ type GamePassResponse = {
740
+ gamePassId: number,
741
+ name?: string,
742
+ description?: string,
743
+ price?: number,
744
+ isForSale?: boolean,
745
+ iconChanged?: boolean
746
+ }
747
+
748
+ /**
749
+ * @typedef
750
+ */
751
+ type UniverseCreator = {
752
+ id: number;
753
+ name: string;
754
+ type: string;
755
+ isRNVAccount: boolean;
756
+ }
757
+
758
+ /**
759
+ * @typedef
760
+ */
761
+ type UniverseInformation = {
762
+ id: number;
763
+ rootPlaceId: number;
764
+ name: string;
765
+ description: string;
766
+ creator: UniverseCreator;
767
+ price: number;
768
+ allowedGearGenres: Array<string>;
769
+ allowedGearCategories: Array<string>;
770
+ isGenreEnforced: boolean;
771
+ copyingAllowed: boolean;
772
+ playing: number;
773
+ visits: number;
774
+ maxPlayers: number;
775
+ created: Date;
776
+ updated: Date;
777
+ studioAccessToApisAllowed: boolean;
778
+ createVipServersAllowed: boolean;
779
+ universeAvatarType: "MorphToR6" | "PlayerChoice" | "MorphToR15";
780
+ genre: "All" | "Tutorial" | "Scary" | "TownAndCity" | "War" | "Funny" | "Fantasy" | "Adventure" | "SciFi" | "Pirate" | "FPS" | "RPG" | "Sports" | "Ninja" | "WildWest";
781
+ isAllGenre: boolean;
782
+ isFavoritedByUser: boolean;
783
+ favoritedCount: number;
784
+ }
785
+
786
+ /**
787
+ * @typedef
788
+ */
789
+ type DeveloperProduct = {
790
+ ProductId: number,
791
+ DeveloperProductId: number,
792
+ Name: string,
793
+ Description: string,
794
+ IconImageAssetId: number,
795
+ displayName: string,
796
+ displayDescription: string,
797
+ displayIcon: number,
798
+ PriceInRobux: number
799
+ }
800
+
801
+ /**
802
+ * @typedef
803
+ */
804
+ type SocialLinkResponse = {
805
+ id: number;
806
+ type: 'Facebook' | 'Twitter' | 'YouTube' | 'Twitch' | 'GooglePlus' | 'Discord' | 'RobloxGroup' | 'Amazon';
807
+ url: string;
808
+ title: string;
809
+ }
810
+
811
+ /**
812
+ * @typedef
813
+ */
814
+ type DeveloperProductsResult = {
815
+ DeveloperProducts: Array<DeveloperProduct>,
816
+ FinalPage: boolean,
817
+ PageSize: number
818
+ }
819
+
820
+ /**
821
+ * @typedef
822
+ */
823
+ type DeveloperProductAddResult = {
824
+ universeId: number,
825
+ name: string,
826
+ priceInRobux: number,
827
+ description?: string,
828
+ productId: string
829
+ }
830
+
831
+ /**
832
+ * @typedef
833
+ */
834
+ type CheckDeveloperProductNameResult = {
835
+ Success: boolean;
836
+ /**
837
+ * When success is true: "Name available"
838
+ * When success is false, you can get: "Product name already exists"
839
+ */
840
+ Message: string;
841
+ }
842
+
843
+ /**
844
+ * @typedef
845
+ */
846
+ type GamePassData = {
847
+ id: number;
848
+ name: string;
849
+ displayName: string;
850
+ productId?: number;
851
+ price?: number;
852
+ }
853
+
854
+ /**
855
+ * @typedef
856
+ */
857
+ type UniversePermissions = {
858
+ IsThirdPartyTeleportAllowed?: boolean;
859
+ IsThirdPartyAssetAllowed?: boolean;
860
+ IsThirdPartyPurchaseAllowed?: boolean;
861
+ }
862
+
863
+ /**
864
+ * @typedef
865
+ */
866
+ type UniverseAsset = {
867
+ assetID: number,
868
+ assetTypeID: number,
869
+ isPlayerChoice: boolean
870
+ }
871
+
872
+ /**
873
+ * @typedef
874
+ */
875
+ type PlayableDevices = "Computer" | "Phone" | "Tablet" | "Console"
876
+
877
+ /**
878
+ * @typedef
879
+ */
880
+ type Regions = "Unknown" | "China"
881
+
882
+ /**
883
+ * @typedef
884
+ */
885
+ type UniverseSettings = {
886
+ allowPrivateServers?: boolean;
887
+ privateServerPrice?: number;
888
+
889
+ name?: string;
890
+ description?: string;
891
+
892
+ universeAvatarType?: "MorphToR6" | "MorphToR15" | "PlayerChoice";
893
+ universeAnimationType?: "Standard" | "PlayerChoice";
894
+ universeCollisionType?: "InnerBox" | "OuterBox";
895
+ universeJointPositioningType?: "Standard" | "ArtistIntent";
896
+
897
+ isArchived?: boolean;
898
+ isFriendsOnly?: boolean;
899
+
900
+ genre?: "All" | "Tutorial" | "Scary" | "TownAndCity" | "War" | "Funny" | "Fantasy" | "Adventure" | "SciFi" | "Pirate" | "FPS" | "RPG" | "Sports" | "Ninja" | "WildWest";
901
+
902
+ /**
903
+ * Computer, Phone, Tablet, Console
904
+ */
905
+ playableDevices?: Array<PlayableDevices>;
906
+ universeAvatarAssetOverrides?: Array<UniverseAsset>;
907
+
908
+ isForSale?: boolean;
909
+ price?: number;
910
+
911
+ universeAvatarMinScales?: AvatarScale;
912
+ universeAvatarMaxScales?: AvatarScale;
913
+
914
+ studioAccessToApisAllowed?: boolean;
915
+ permissions?: UniversePermissions;
916
+
917
+ /**
918
+ * Unknown, China
919
+ */
920
+ optInRegions?: Array<Regions>;
921
+ }
922
+
923
+ /**
924
+ * @typedef
925
+ */
926
+ type UpdateUniverseResponse = {
927
+ allowPrivateServers?: boolean;
928
+ privateServerPrice?: number;
929
+
930
+ id: number;
931
+ name?: string;
932
+ description?: string;
933
+
934
+ universeAvatarType?: "MorphToR6" | "MorphToR15" | "PlayerChoice";
935
+ universeAnimationType?: "Standard" | "PlayerChoice";
936
+ universeCollisionType?: "InnerBox" | "OuterBox";
937
+ universeJointPositioningType?: "Standard" | "ArtistIntent";
938
+
939
+ isArchived?: boolean;
940
+ isFriendsOnly?: boolean;
941
+
942
+ genre?: "All" | "Tutorial" | "Scary" | "TownAndCity" | "War" | "Funny" | "Fantasy" | "Adventure" | "SciFi" | "Pirate" | "FPS" | "RPG" | "Sports" | "Ninja" | "WildWest";
943
+
944
+ /**
945
+ * Computer, Phone, Tablet, Console
946
+ */
947
+ playableDevices?: Array<PlayableDevices>;
948
+ universeAvatarAssetOverrides?: Array<UniverseAsset>;
949
+
950
+ isForSale?: boolean;
951
+ price?: number;
952
+
953
+ universeAvatarMinScales?: AvatarScale;
954
+ universeAvatarMaxScales?: AvatarScale;
955
+
956
+ studioAccessToApisAllowed?: boolean;
957
+ permissions?: UniversePermissions;
958
+
959
+ /**
960
+ * Unknown, China
961
+ */
962
+ optInRegions?: Array<Regions>;
963
+ }
964
+
965
+ /// Group
966
+
967
+ /**
968
+ * @typedef
969
+ */
970
+ type GroupIconSize = "150x150" | "420x420"
971
+ type GroupIconFormat = "Png"
972
+
973
+ /**
974
+ * @typedef
975
+ */
976
+ type Role = {
977
+ name: string;
978
+ memberCount?: number;
979
+ rank: number;
980
+ id: number;
981
+ }
982
+
983
+ /**
984
+ * @typedef
985
+ */
986
+ type RoleWithDescription = {
987
+ name: string;
988
+ memberCount?: number;
989
+ rank: number;
990
+ id: number;
991
+ description: string;
992
+ }
993
+
994
+ /**
995
+ * @typedef
996
+ */
997
+ type GroupPostsPermissions = {
998
+ viewWall: boolean;
999
+ postToWall: boolean;
1000
+ deleteFromWall: boolean;
1001
+ viewStatus: boolean;
1002
+ postToStatus: boolean;
1003
+ }
1004
+
1005
+ /**
1006
+ * @typedef
1007
+ */
1008
+ type GroupMembershipPermissions = {
1009
+ changeRank: boolean;
1010
+ inviteMembers: boolean;
1011
+ removeMembers: boolean;
1012
+ }
1013
+
1014
+ /**
1015
+ * @typedef
1016
+ */
1017
+ type GroupManagementPermissions = {
1018
+ manageRelationships: boolean;
1019
+ manageClan: boolean;
1020
+ viewAuditLogs: boolean;
1021
+ }
1022
+
1023
+ /**
1024
+ * @typedef
1025
+ */
1026
+ type GroupEconomyPermissions = {
1027
+ spendGroupFunds: boolean;
1028
+ advertiseGroup: boolean;
1029
+ createItems: boolean;
1030
+ manageItems: boolean;
1031
+ addGroupPlaces: boolean;
1032
+ manageGroupGames: boolean;
1033
+ viewGroupPayouts: boolean;
1034
+ }
1035
+
1036
+ /**
1037
+ * @typedef
1038
+ */
1039
+ type RolePermissionsBody = {
1040
+ groupPostsPermissions: GroupPostsPermissions;
1041
+ groupMembershipPermissions: GroupMembershipPermissions;
1042
+ groupManagementPermissions: GroupManagementPermissions;
1043
+ groupEconomyPermissions: GroupEconomyPermissions;
1044
+ }
1045
+
1046
+ /**
1047
+ * @typedef
1048
+ */
1049
+ type RolePermissions = {
1050
+ groupId: number;
1051
+ role: RoleWithDescription;
1052
+ permissions: RolePermissionsBody
1053
+ }
1054
+
1055
+ /**
1056
+ * @typedef
1057
+ */
1058
+ type ChangeRankResult = {
1059
+ newRole: Role;
1060
+ oldRole: Role;
1061
+ }
1062
+
1063
+ /**
1064
+ * @typedef
1065
+ */
1066
+ type Group = {
1067
+ id: number;
1068
+ name: string;
1069
+ description: string;
1070
+ owner: GroupUser;
1071
+ shout: GroupShout;
1072
+ memberCount: number;
1073
+ isBuildersClubOnly: boolean;
1074
+ publicEntryAllowed: boolean;
1075
+ isLocked: boolean;
1076
+ }
1077
+
1078
+ /**
1079
+ * @typedef
1080
+ */
1081
+ type GroupSearchItem = {
1082
+ id: number;
1083
+ name: string;
1084
+ description: string;
1085
+ memberCount: number;
1086
+ publicEntryAllowed: boolean;
1087
+ created: Date;
1088
+ updated: Date;
1089
+ }
1090
+
1091
+ /**
1092
+ * @typedef
1093
+ */
1094
+ type GroupGameInfo = {
1095
+ id: number;
1096
+ name: string;
1097
+ description: string;
1098
+ creator: { id: number; type: string; };
1099
+ rootPlace: { id: number; type: string; };
1100
+ created: Date;
1101
+ updated: Date;
1102
+ placeVisits: number;
1103
+ }
1104
+
1105
+ /**
1106
+ * @typedef
1107
+ */
1108
+ type GroupAssetInfo = {
1109
+ assetId: number;
1110
+ name: string;
1111
+ }
1112
+
1113
+ /**
1114
+ * @typedef
1115
+ */
1116
+ type IGroupPartial = {
1117
+ Name: string;
1118
+ Id: number;
1119
+ EmblemUrl: string;
1120
+ MemberCount: number;
1121
+ Rank: number;
1122
+ Role: string;
1123
+ RoleId: number;
1124
+ IsPrimary: boolean;
1125
+ }
1126
+
1127
+ /**
1128
+ * @typedef
1129
+ */
1130
+ type GroupView = {
1131
+ __VIEWSTATE: string;
1132
+ __VIEWSTATEGENERATOR: string;
1133
+ __EVENTVALIDATION: string;
1134
+ __RequestVerificationToken: string;
1135
+ }
1136
+
1137
+ /**
1138
+ * @typedef
1139
+ */
1140
+ type GroupUser = {
1141
+ userId: number;
1142
+ username: string;
1143
+ displayName: string;
1144
+ hasVerifiedBadge?: boolean;
1145
+ }
1146
+
1147
+ /**
1148
+ * @typedef
1149
+ */
1150
+ type GroupShout = {
1151
+ body: string;
1152
+ poster: GroupUser;
1153
+ created: Date;
1154
+ updated: Date;
1155
+ }
1156
+
1157
+ /**
1158
+ * @typedef
1159
+ */
1160
+ type GroupDescriptionResult = {
1161
+ newDescription: string
1162
+ }
1163
+
1164
+ /**
1165
+ * @typedef
1166
+ */
1167
+ type GroupNameResult = {
1168
+ newName: string
1169
+ }
1170
+
1171
+ /**
1172
+ * @typedef
1173
+ */
1174
+ type AuditItemActor = {
1175
+ user: GroupUser;
1176
+ role: Role;
1177
+ }
1178
+
1179
+ /**
1180
+ * @typedef
1181
+ */
1182
+ type AuditItem = {
1183
+ actor: AuditItemActor;
1184
+ actionType: string;
1185
+ description: object;
1186
+ created: Date;
1187
+ }
1188
+
1189
+ /**
1190
+ * @typedef
1191
+ */
1192
+ type AuditPage = {
1193
+ data: Array<AuditItem>;
1194
+ nextPageCursor?: string;
1195
+ previousPageCursor?: string;
1196
+ }
1197
+
1198
+ /**
1199
+ * @typedef
1200
+ */
1201
+ type TransactionAgent = {
1202
+ id: number;
1203
+ type: string;
1204
+ name: string;
1205
+ }
1206
+
1207
+ /**
1208
+ * @typedef
1209
+ */
1210
+ type TransactionDetails = {
1211
+ id: number;
1212
+ name: string;
1213
+ type: string;
1214
+ }
1215
+
1216
+ /**
1217
+ * @typedef
1218
+ */
1219
+ type TransactionCurrency = {
1220
+ amount: number;
1221
+ type: string;
1222
+ }
1223
+
1224
+ /**
1225
+ * @typedef
1226
+ */
1227
+ type TransactionItem = {
1228
+ id: number;
1229
+ transactionType?: string;
1230
+ created: Date;
1231
+ isPending: boolean;
1232
+ agent: TransactionAgent;
1233
+ details?: TransactionDetails;
1234
+ currency: TransactionCurrency;
1235
+ }
1236
+
1237
+ /**
1238
+ * @typedef
1239
+ */
1240
+ type GroupJoinRequester = {
1241
+ userId: number;
1242
+ username: string;
1243
+ displayName: string;
1244
+ }
1245
+
1246
+ /**
1247
+ * @typedef
1248
+ */
1249
+ type GroupJoinRequest = {
1250
+ requester: GroupJoinRequester;
1251
+ created: Date;
1252
+ }
1253
+
1254
+ /**
1255
+ * @typedef
1256
+ */
1257
+ type GroupJoinRequestsPage = {
1258
+ previousPageCursor?: string;
1259
+ nextPageCursor?: string;
1260
+ data: Array<GroupJoinRequest>;
1261
+ }
1262
+
1263
+ /**
1264
+ * @typedef
1265
+ */
1266
+ type RevenueSummaryResponse = {
1267
+ recurringRobuxStipend?: number;
1268
+ itemSaleRobux?: number;
1269
+ purchasedRobux?: number;
1270
+ tradeSystemRobux?: number;
1271
+ pendingRobux?: number;
1272
+ groupPayoutRobux?: number;
1273
+ individualToGroupRobux?: number;
1274
+ premiumPayouts?: number;
1275
+ groupPremiumPayouts?: number;
1276
+ adjustmentRobux?: number;
1277
+ }
1278
+
1279
+ /**
1280
+ * @typedef
1281
+ */
1282
+ type WallPost = {
1283
+ id: number;
1284
+ poster: GroupUser;
1285
+ body: string;
1286
+ created: Date;
1287
+ updated: Date;
1288
+ }
1289
+
1290
+ /**
1291
+ * @typedef
1292
+ */
1293
+ type WallPostPage = {
1294
+ previousPageCursor?: string;
1295
+ nextPageCursor?: string;
1296
+ data: Array<WallPost>;
1297
+ }
1298
+
1299
+ /// Party
1300
+
1301
+ /**
1302
+ * @typedef
1303
+ */
1304
+ type PartyData = {
1305
+ PartyId: number;
1306
+ PartyType: string;
1307
+ }
1308
+
1309
+ /// User
1310
+
1311
+ /**
1312
+ * 0 = Inbox
1313
+ * 1 = Sent Messages
1314
+ * 3 = Archived Messages
1315
+ */
1316
+ type PrivateMessageTab = 0 | 1 | 3;
1317
+
1318
+ /**
1319
+ * 0 = Offline
1320
+ * 1 = Online
1321
+ * 2 = InGame
1322
+ * 3 = Studio
1323
+ */
1324
+ type UserPresenceType = 0 | 1 | 2 | 3
1325
+
1326
+ /**
1327
+ * @typedef
1328
+ */
1329
+ type LoggedInUserData = {
1330
+ UserID: number,
1331
+ UserName: string,
1332
+ RobuxBalance: number,
1333
+ TicketsBalance: number,
1334
+ ThumbnailUrl: string,
1335
+ IsAnyBuildersClubMember: boolean,
1336
+ IsPremium: boolean
1337
+ }
1338
+
1339
+ /**
1340
+ * @typedef
1341
+ */
1342
+ type UserLoginApiData = {
1343
+ userId: number;
1344
+ }
1345
+
1346
+ /**
1347
+ * @typedef
1348
+ */
1349
+ type AvatarEntry = {
1350
+ url: string;
1351
+ final: boolean;
1352
+ }
1353
+
1354
+ /**
1355
+ * @typedef
1356
+ */
1357
+ type UserStatus = {
1358
+ online: boolean;
1359
+ lastSeen: Date;
1360
+ }
1361
+
1362
+ /**
1363
+ * @typedef
1364
+ */
1365
+ type FriendRequestEntry = {
1366
+ description: string;
1367
+ created: Date;
1368
+ isBanned: boolean;
1369
+ id: number;
1370
+ name: string;
1371
+ displayName: string;
1372
+ }
1373
+
1374
+ /**
1375
+ * @typedef
1376
+ */
1377
+ type FriendRequestsPage = {
1378
+ previousPageCursor?: string;
1379
+ nextPageCursor?: string;
1380
+ data: Array<FriendRequestEntry>;
1381
+ }
1382
+
1383
+ /**
1384
+ * @typedef
1385
+ */
1386
+ type FriendEntry = {
1387
+ created: Date;
1388
+ id: number;
1389
+ isBanned: boolean;
1390
+ isDeleted: boolean;
1391
+ isOnline?: boolean;
1392
+ name: string;
1393
+ description?: string;
1394
+ displayName: string;
1395
+ externalAppDisplayName?: string;
1396
+ friendFrequentRank: number;
1397
+ friendFrequentScore: number;
1398
+ presenceType?: UserPresenceType;
1399
+ }
1400
+
1401
+ /**
1402
+ * @typedef
1403
+ */
1404
+ type Friends = {
1405
+ friends: Array<FriendEntry>;
1406
+ }
1407
+
1408
+ /**
1409
+ * @typedef
1410
+ */
1411
+ type FollowEntry = {
1412
+ isDeleted: false;
1413
+ id: number;
1414
+ name: string;
1415
+ description: string;
1416
+ created: Date;
1417
+ displayName: string;
1418
+ }
1419
+
1420
+ /**
1421
+ * @typedef
1422
+ */
1423
+ type FollowingsPage = {
1424
+ previousPageCursor?: string;
1425
+ nextPageCursor?: string;
1426
+ data: Array<FollowEntry>;
1427
+ }
1428
+
1429
+ /**
1430
+ * @typedef
1431
+ */
1432
+ type FollowersPage = {
1433
+ previousPageCursor?: string;
1434
+ nextPageCursor?: string;
1435
+ data: Array<FollowEntry>;
1436
+ }
1437
+
1438
+ /**
1439
+ * @typedef
1440
+ */
1441
+ type PrivateMessagesPage = {
1442
+ collection: Array<PrivateMessage>;
1443
+ totalPages: number;
1444
+ totalCollectionSize: number;
1445
+ pageNumber: number;
1446
+ }
1447
+
1448
+ /**
1449
+ * @typedef
1450
+ */
1451
+ type UserEntry = {
1452
+ userId: number;
1453
+ name: string;
1454
+ displayName: string;
1455
+ }
1456
+
1457
+ /**
1458
+ * @typedef
1459
+ */
1460
+ type PrivateMessageParent = {
1461
+ page: number;
1462
+ }
1463
+
1464
+ /**
1465
+ * @typedef
1466
+ */
1467
+ type PrivateMessage = {
1468
+ id: number;
1469
+ sender: UserEntry;
1470
+ recipient: UserEntry;
1471
+ subject: string;
1472
+ body: string;
1473
+ created: Date;
1474
+ updated: Date;
1475
+ isRead: boolean;
1476
+ isSystemMessage: boolean;
1477
+ isReportAbuseDisplayed: boolean;
1478
+ parent: PrivateMessageParent;
1479
+ }
1480
+
1481
+ /**
1482
+ * @typedef
1483
+ */
1484
+ type NotificationMessage = {
1485
+ type: string;
1486
+ [key: string]: any;
1487
+ }
1488
+
1489
+ /**
1490
+ * @typedef
1491
+ */
1492
+ type FriendRequest = number;
1493
+
1494
+ /**
1495
+ * @typedef
1496
+ */
1497
+ type UserPresence = {
1498
+ userPresenceType?: UserPresenceType;
1499
+ lastLocation?: string;
1500
+ placeId?: number;
1501
+ rootPlaceId?: number;
1502
+ gameId?: string;
1503
+ universeId?: number;
1504
+ userId?: number;
1505
+ lastOnline?: string;
1506
+ }
1507
+
1508
+ /**
1509
+ * @typedef
1510
+ */
1511
+ type PlayerInfo = {
1512
+ username: string;
1513
+ displayName: string;
1514
+ blurb: string;
1515
+ joinDate: Date;
1516
+ age?: number;
1517
+ friendCount?: number;
1518
+ followerCount?: number;
1519
+ followingCount?: number;
1520
+ oldNames?: Array<string>;
1521
+ isBanned: boolean;
1522
+ }
1523
+
1524
+ /**
1525
+ * @typedef
1526
+ */
1527
+ type Presences = {
1528
+ userPresences: Array<UserPresence>;
1529
+ }
1530
+
1531
+ /**
1532
+ * @typedef
1533
+ */
1534
+ type PlayerThumbnailData = {
1535
+ targetId: number;
1536
+ state: string;
1537
+ imageUrl: string;
1538
+ }
1539
+
1540
+ /**
1541
+ * @typedef
1542
+ */
1543
+ type PromotionChannelsResponse = {
1544
+ facebook?: string;
1545
+ twitter?: string;
1546
+ youtube?: string;
1547
+ twitch?: string;
1548
+ guilded?: string;
1549
+ }
1550
+
1551
+ /// Badges
1552
+
1553
+ /**
1554
+ * @typedef
1555
+ */
1556
+ type BadgeAwarder = {
1557
+ id: number;
1558
+ type: string;
1559
+ }
1560
+
1561
+ /**
1562
+ * @typedef
1563
+ */
1564
+ type UserBadgeStats = {
1565
+ badgeId: number;
1566
+ awardedDate: Date;
1567
+ }
1568
+
1569
+ /**
1570
+ * @typedef
1571
+ */
1572
+ type BadgeStatistics = {
1573
+ pastDayAwardedCount: number;
1574
+ awardedCount: number;
1575
+ winRatePercentage: number;
1576
+ }
1577
+
1578
+ /**
1579
+ * @typedef
1580
+ */
1581
+ type BadgeUniverse = {
1582
+ id: number;
1583
+ name: string;
1584
+ rootPlaceId: number;
1585
+ }
1586
+
1587
+ /**
1588
+ * @typedef
1589
+ */
1590
+ type PlayerBadges = {
1591
+ id: number;
1592
+ name: string;
1593
+ description?: string;
1594
+ displayName: string;
1595
+ displayDescription?: string;
1596
+ enabled: boolean;
1597
+ iconImageId: number;
1598
+ displayIconImageId: number;
1599
+ awarder: BadgeAwarder;
1600
+ statistics: BadgeStatistics;
1601
+ created: Date;
1602
+ updated: Date;
1603
+ }
1604
+
1605
+ /**
1606
+ * @typedef
1607
+ */
1608
+ type BadgeInfo = {
1609
+ id: number;
1610
+ name: string;
1611
+ description?: string;
1612
+ displayName: string;
1613
+ displayDescription?: string;
1614
+ enabled: boolean;
1615
+ iconImageId: number;
1616
+ displayIconImageId: number;
1617
+ created: Date;
1618
+ updated: Date;
1619
+ statistics: BadgeStatistics
1620
+ awardingUniverse: BadgeUniverse
1621
+ }
1622
+
1623
+ //Inventory
1624
+
1625
+ /**
1626
+ * @typedef
1627
+ */
1628
+ type AssetOwner = {
1629
+ userId: number;
1630
+ username: string;
1631
+ buildersClubMembershipType: number;
1632
+ }
1633
+
1634
+ /**
1635
+ * @typedef
1636
+ */
1637
+ type CollectibleEntry = {
1638
+ userAssetId: number;
1639
+ serialNumber?: number;
1640
+ assetId: number;
1641
+ name: string;
1642
+ recentAveragePrice: number;
1643
+ originalPrice?: number;
1644
+ assetStock?: number;
1645
+ buildersClubMembershipType: number;
1646
+ }
1647
+
1648
+ /**
1649
+ * @typedef
1650
+ */
1651
+ type Collectibles = {
1652
+ collectibles: Array<CollectibleEntry>;
1653
+ }
1654
+
1655
+ /**
1656
+ * @typedef
1657
+ */
1658
+ type InventoryEntry = {
1659
+ assetId: number;
1660
+ name: string;
1661
+ assetType: string;
1662
+ created: Date;
1663
+ updated?: Date;
1664
+ assetName?: string;
1665
+ userAssetId?: number;
1666
+ owner?: AssetOwner;
1667
+ }
1668
+
1669
+ /**
1670
+ * @typedef
1671
+ */
1672
+ type Inventory = {
1673
+ items: Array<InventoryEntry>;
1674
+ }
1675
+
1676
+ ///Trading
1677
+
1678
+ /**
1679
+ * @typedef
1680
+ */
1681
+ type UAIDResponse = {
1682
+ uaids: Array<number>,
1683
+ failedIds: Array<number>
1684
+ }
1685
+
1686
+ /**
1687
+ * @typedef
1688
+ */
1689
+ type CanTradeResponse = {
1690
+ canTrade: boolean,
1691
+ status: string
1692
+ }
1693
+
1694
+ /**
1695
+ * @typedef
1696
+ */
1697
+ type TradeUser = {
1698
+ userId: number;
1699
+ username: string;
1700
+ displayName: string;
1701
+ }
1702
+
1703
+ /**
1704
+ * @typedef
1705
+ */
1706
+ type TradeAsset = {
1707
+ id: number,
1708
+ user: TradeUser,
1709
+ created: Date,
1710
+ expiration?: Date,
1711
+ isActive: boolean,
1712
+ status: string
1713
+ }
1714
+
1715
+ /**
1716
+ * @typedef
1717
+ */
1718
+ type DetailedTradeAsset = {
1719
+ id: number,
1720
+ serialNumber: number,
1721
+ assetId: number,
1722
+ name: string,
1723
+ recentAveragePrice: number,
1724
+ originalPrice: number,
1725
+ assetStock: number,
1726
+ membershipType: string
1727
+ }
1728
+
1729
+ /**
1730
+ * @typedef
1731
+ */
1732
+ type DetailedTradeOffer = {
1733
+ user: TradeUser,
1734
+ userAssets: Array<DetailedTradeAsset>,
1735
+ robux: number
1736
+ }
1737
+
1738
+ /**
1739
+ * @typedef
1740
+ */
1741
+ type TradeOffer = {
1742
+ userAssetIds: Array<number>,
1743
+ robux: number
1744
+ }
1745
+
1746
+ /**
1747
+ * @typedef
1748
+ */
1749
+ type TradeInfo = {
1750
+ offers: Array<DetailedTradeOffer>,
1751
+ id: number,
1752
+ user: TradeUser,
1753
+ created: Date,
1754
+ expiration?: Date,
1755
+ isActive: boolean,
1756
+ status: string
1757
+ }
1758
+
1759
+ /**
1760
+ * @typedef
1761
+ */
1762
+ type SendTradeResponse = {
1763
+ id: number
1764
+ }
1765
+
1766
+ /// Utility
1767
+
1768
+ /**
1769
+ * @typedef
1770
+ */
1771
+ type SelectorFunction = (selector: string) => {val(): any};
1772
+ type SortOrder = 'Asc' | 'Desc';
1773
+ type Limit = 10 | 25 | 50 | 100;
1774
+
1775
+ /**
1776
+ * @typedef
1777
+ */
1778
+ type Inputs = {
1779
+ /**
1780
+ * With a provided name, this returns the input's value.
1781
+ */
1782
+ [name: string]: string;
1783
+ }
1784
+
1785
+ /**
1786
+ * @typedef
1787
+ */
1788
+ type GetVerificationResponse = {
1789
+ body?: string;
1790
+ inputs: Inputs;
1791
+ header: string;
1792
+ }
1793
+
1794
+ /**
1795
+ * @typedef
1796
+ */
1797
+ type HttpOptions = {
1798
+ verification?: string;
1799
+ jar?: CookieJar;
1800
+ }
1801
+
1802
+ /**
1803
+ * @typedef
1804
+ */
1805
+ type GetLatestResponse = {
1806
+ latest: number;
1807
+ data: object;
1808
+ repeat?: boolean;
1809
+ }
1810
+
1811
+ /// Datastores
1812
+
1813
+ /**
1814
+ * @typedef
1815
+ */
1816
+ type Datastore = {
1817
+ name: string;
1818
+ createdTime: Date;
1819
+ }
1820
+
1821
+ /**
1822
+ * @typedef
1823
+ */
1824
+ type DatastoresResult = {
1825
+ datastores: Datastore[];
1826
+ nextPageCursor?: string;
1827
+ }
1828
+
1829
+ /**
1830
+ * @typedef
1831
+ */
1832
+ type EntryKey = {
1833
+ scope: string;
1834
+ key: string;
1835
+ }
1836
+
1837
+ /**
1838
+ * @typedef
1839
+ */
1840
+ type DatastoreKeysResult = {
1841
+ keys: EntryKey[];
1842
+ nextPageCursor?: string;
1843
+ }
1844
+
1845
+ /**
1846
+ * @typedef
1847
+ */
1848
+ type DatastoreEntry = {
1849
+ data: any;
1850
+ metadata: {
1851
+ /** (ISO datetime, UTC): the time at which the entry was created */
1852
+ robloxEntryCreatedTime: Date;
1853
+ /** (ISO datetime, UTC): the time at which the entry was updated */
1854
+ lastModified: Date;
1855
+ /** version of the entry being read */
1856
+ robloxEntryVersion: string;
1857
+ robloxEntryAttributes?: string;
1858
+ robloxEntryUserIDs?: string;
1859
+ /** the base-64 encoded MD5 checksum of the content */
1860
+ contentMD5: string;
1861
+ /** the content length in bytes */
1862
+ contentLength: number;
1863
+ }
1864
+ }
1865
+
1866
+ /**
1867
+ * @typedef
1868
+ */
1869
+ type EntryVersion = {
1870
+ version: string;
1871
+ deleted: boolean;
1872
+ contentLength: number;
1873
+ createdTime: Date;
1874
+ objectCreatedTime: Date;
1875
+ }
1876
+
1877
+ /**
1878
+ * @typedef
1879
+ */
1880
+ type EntryVersionsResult = {
1881
+ versions: EntryVersion[];
1882
+ nextPageCursor: string;
1883
+ }