noblox-asset.js 7.4.0

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.
Files changed (272) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  3. package/.github/workflows/doc-publish.yml +33 -0
  4. package/.github/workflows/npmpublish.yml +72 -0
  5. package/.github/workflows/run-tests.yml +49 -0
  6. package/CODE_OF_CONDUCT.md +76 -0
  7. package/LICENSE +21 -0
  8. package/README.md +182 -0
  9. package/eslint.config.mjs +34 -0
  10. package/examples/cleanPlayers.js +130 -0
  11. package/examples/cleanWall.js +110 -0
  12. package/examples/revertRanks.js +100 -0
  13. package/examples/savePlayers.js +119 -0
  14. package/examples/saveWall.js +96 -0
  15. package/img/moderatedThumbnails/moderatedThumbnail_100x100.png +0 -0
  16. package/img/moderatedThumbnails/moderatedThumbnail_110x110.png +0 -0
  17. package/img/moderatedThumbnails/moderatedThumbnail_140x140.png +0 -0
  18. package/img/moderatedThumbnails/moderatedThumbnail_150x150.png +0 -0
  19. package/img/moderatedThumbnails/moderatedThumbnail_150x200.png +0 -0
  20. package/img/moderatedThumbnails/moderatedThumbnail_180x180.png +0 -0
  21. package/img/moderatedThumbnails/moderatedThumbnail_250x250.png +0 -0
  22. package/img/moderatedThumbnails/moderatedThumbnail_30x30.png +0 -0
  23. package/img/moderatedThumbnails/moderatedThumbnail_352x352.png +0 -0
  24. package/img/moderatedThumbnails/moderatedThumbnail_420x420.png +0 -0
  25. package/img/moderatedThumbnails/moderatedThumbnail_48x48.png +0 -0
  26. package/img/moderatedThumbnails/moderatedThumbnail_50x50.png +0 -0
  27. package/img/moderatedThumbnails/moderatedThumbnail_60x60.png +0 -0
  28. package/img/moderatedThumbnails/moderatedThumbnail_720x720.png +0 -0
  29. package/img/moderatedThumbnails/moderatedThumbnail_75x75.png +0 -0
  30. package/img/noblox-js-small.png +0 -0
  31. package/img/noblox-js.png +0 -0
  32. package/img/thumbnailSizes.png +0 -0
  33. package/jsDocsConfig.json +55 -0
  34. package/lib/accountinformation/getUserSocialLinks.js +40 -0
  35. package/lib/accountsettings/block.js +53 -0
  36. package/lib/accountsettings/unblock.js +53 -0
  37. package/lib/asset/deleteFromInventory.js +56 -0
  38. package/lib/asset/getGamePassProductInfo.js +50 -0
  39. package/lib/asset/getProductInfo.js +46 -0
  40. package/lib/asset/uploadAnimation.js +103 -0
  41. package/lib/asset/uploadItem.js +83 -0
  42. package/lib/asset/uploadModel.js +90 -0
  43. package/lib/avatar/avatarRules.js +39 -0
  44. package/lib/avatar/currentlyWearing.js +33 -0
  45. package/lib/avatar/getAvatar.js +36 -0
  46. package/lib/avatar/getCurrentAvatar.js +38 -0
  47. package/lib/avatar/getRecentItems.js +36 -0
  48. package/lib/avatar/outfitDetails.js +33 -0
  49. package/lib/avatar/outfits.js +38 -0
  50. package/lib/avatar/redrawAvatar.js +47 -0
  51. package/lib/avatar/removeAssetId.js +51 -0
  52. package/lib/avatar/setAvatarBodyColors.js +61 -0
  53. package/lib/avatar/setAvatarScales.js +61 -0
  54. package/lib/avatar/setPlayerAvatarType.js +51 -0
  55. package/lib/avatar/setWearingAssets.js +51 -0
  56. package/lib/avatar/wearAssetId.js +51 -0
  57. package/lib/badges/getAwardedTimestamps.js +49 -0
  58. package/lib/badges/getBadgeInfo.js +44 -0
  59. package/lib/badges/getGameBadges.js +63 -0
  60. package/lib/badges/getPlayerBadges.js +28 -0
  61. package/lib/badges/updateBadgeInfo.js +75 -0
  62. package/lib/cache/add.js +14 -0
  63. package/lib/cache/addIf.js +26 -0
  64. package/lib/cache/clear.js +8 -0
  65. package/lib/cache/get.js +28 -0
  66. package/lib/cache/index.js +17 -0
  67. package/lib/cache/new.js +12 -0
  68. package/lib/cache/wrap.js +25 -0
  69. package/lib/chat/addUsersToConversation.js +58 -0
  70. package/lib/chat/chatSettings.js +34 -0
  71. package/lib/chat/getChatMessages.js +41 -0
  72. package/lib/chat/getConversations.js +44 -0
  73. package/lib/chat/getRolloutSettings.js +36 -0
  74. package/lib/chat/getUnreadConversationCount.js +34 -0
  75. package/lib/chat/getUnreadMessages.js +39 -0
  76. package/lib/chat/getUserConversations.js +38 -0
  77. package/lib/chat/markChatAsRead.js +53 -0
  78. package/lib/chat/markChatAsSeen.js +51 -0
  79. package/lib/chat/multiGetLatestMessages.js +38 -0
  80. package/lib/chat/onNewConversation.js +50 -0
  81. package/lib/chat/onNewMessage.js +53 -0
  82. package/lib/chat/onNewMessageBySelf.js +50 -0
  83. package/lib/chat/onUserOnline.js +50 -0
  84. package/lib/chat/onUserTyping.js +54 -0
  85. package/lib/chat/removeFromGroupConversation.js +59 -0
  86. package/lib/chat/renameGroupConversation.js +58 -0
  87. package/lib/chat/sendChatMessage.js +58 -0
  88. package/lib/chat/setChatUserTyping.js +58 -0
  89. package/lib/chat/start121Conversation.js +51 -0
  90. package/lib/chat/startCloudEditConversation.js +51 -0
  91. package/lib/chat/startGroupConversation.js +59 -0
  92. package/lib/client/onNotification.js +86 -0
  93. package/lib/client/setAPIKey.js +18 -0
  94. package/lib/client/setCookie.js +38 -0
  95. package/lib/datastores/deleteDatastoreEntry.js +56 -0
  96. package/lib/datastores/getDatastoreEntry.js +88 -0
  97. package/lib/datastores/getDatastoreEntryVersions.js +73 -0
  98. package/lib/datastores/getDatastoreKeys.js +63 -0
  99. package/lib/datastores/getDatastores.js +62 -0
  100. package/lib/datastores/incrementDatastoreEntry.js +83 -0
  101. package/lib/datastores/setDatastoreEntry.js +80 -0
  102. package/lib/develop/canManage.js +42 -0
  103. package/lib/develop/configureItem.js +210 -0
  104. package/lib/develop/updateUniverse.js +52 -0
  105. package/lib/develop/updateUniverseAccess.js +54 -0
  106. package/lib/economy/getGroupFunds.js +42 -0
  107. package/lib/economy/getGroupPayoutEligibility.js +55 -0
  108. package/lib/economy/getGroupRevenueSummary.js +42 -0
  109. package/lib/economy/getGroupTransactions.js +32 -0
  110. package/lib/economy/getResaleData.js +48 -0
  111. package/lib/economy/getResellers.js +35 -0
  112. package/lib/economy/getUserFunds.js +43 -0
  113. package/lib/economy/getUserTransactions.js +34 -0
  114. package/lib/economy/onGroupTransaction.js +74 -0
  115. package/lib/friends/acceptFriendRequest.js +54 -0
  116. package/lib/friends/declineAllFriendRequests.js +52 -0
  117. package/lib/friends/declineFriendRequest.js +54 -0
  118. package/lib/friends/getFollowerCount.js +35 -0
  119. package/lib/friends/getFollowers.js +56 -0
  120. package/lib/friends/getFollowingCount.js +35 -0
  121. package/lib/friends/getFollowings.js +56 -0
  122. package/lib/friends/getFriendCount.js +35 -0
  123. package/lib/friends/getFriendRequests.js +51 -0
  124. package/lib/friends/getFriends.js +48 -0
  125. package/lib/friends/onFriendRequest.js +58 -0
  126. package/lib/friends/removeFriend.js +53 -0
  127. package/lib/friends/sendFriendRequest.js +54 -0
  128. package/lib/friends/unfollow.js +53 -0
  129. package/lib/games/addDeveloperProduct.js +53 -0
  130. package/lib/games/configureGamePass.js +126 -0
  131. package/lib/games/getDeveloperProducts.js +44 -0
  132. package/lib/games/getGameInstances.js +31 -0
  133. package/lib/games/getGamePasses.js +39 -0
  134. package/lib/games/getGameRevenue.js +48 -0
  135. package/lib/games/getGameSocialLinks.js +42 -0
  136. package/lib/games/getGroupGames.js +30 -0
  137. package/lib/games/getPlaceInfo.js +47 -0
  138. package/lib/games/getUniverseInfo.js +50 -0
  139. package/lib/games/publishToTopic.js +52 -0
  140. package/lib/games/sendUserNotification.js +65 -0
  141. package/lib/games/updateDeveloperProduct.js +56 -0
  142. package/lib/groups/banFromGroup.js +47 -0
  143. package/lib/groups/changeRank.js +59 -0
  144. package/lib/groups/deleteWallPost.js +59 -0
  145. package/lib/groups/deleteWallPostsByUser.js +55 -0
  146. package/lib/groups/demote.js +25 -0
  147. package/lib/groups/exile.js +55 -0
  148. package/lib/groups/getAuditLog.js +64 -0
  149. package/lib/groups/getGroup.js +50 -0
  150. package/lib/groups/getGroupBans.js +37 -0
  151. package/lib/groups/getGroupSocialLinks.js +41 -0
  152. package/lib/groups/getGroups.js +82 -0
  153. package/lib/groups/getJoinRequest.js +47 -0
  154. package/lib/groups/getJoinRequests.js +53 -0
  155. package/lib/groups/getPlayers.js +103 -0
  156. package/lib/groups/getRankInGroup.js +45 -0
  157. package/lib/groups/getRankNameInGroup.js +44 -0
  158. package/lib/groups/getRole.js +64 -0
  159. package/lib/groups/getRolePermissions.js +48 -0
  160. package/lib/groups/getRoles.js +53 -0
  161. package/lib/groups/getShout.js +47 -0
  162. package/lib/groups/getWall.js +56 -0
  163. package/lib/groups/groupPayout.js +103 -0
  164. package/lib/groups/handleJoinRequest.js +57 -0
  165. package/lib/groups/handleJoinRequests.js +61 -0
  166. package/lib/groups/leaveGroup.js +56 -0
  167. package/lib/groups/onAuditLog.js +62 -0
  168. package/lib/groups/onJoinRequest.js +63 -0
  169. package/lib/groups/onJoinRequestHandle.js +105 -0
  170. package/lib/groups/onShout.js +57 -0
  171. package/lib/groups/onWallPost.js +58 -0
  172. package/lib/groups/promote.js +25 -0
  173. package/lib/groups/searchGroups.js +32 -0
  174. package/lib/groups/setGroupDescription.js +58 -0
  175. package/lib/groups/setGroupName.js +59 -0
  176. package/lib/groups/setRank.js +74 -0
  177. package/lib/groups/setRoleInfo.js +84 -0
  178. package/lib/groups/shout.js +58 -0
  179. package/lib/groups/unbanFromGroup.js +41 -0
  180. package/lib/index.js +212 -0
  181. package/lib/internal/levelOneCopy.js +16 -0
  182. package/lib/internal/queue.js +61 -0
  183. package/lib/internal/timeout.js +30 -0
  184. package/lib/internal/wrap.js +78 -0
  185. package/lib/inventory/getCollectibles.js +31 -0
  186. package/lib/inventory/getInventory.js +32 -0
  187. package/lib/inventory/getInventoryById.js +31 -0
  188. package/lib/inventory/getOwnership.js +47 -0
  189. package/lib/inventory/getUAIDs.js +47 -0
  190. package/lib/itemconfiguration/getGroupAssets.js +32 -0
  191. package/lib/options.js +26 -0
  192. package/lib/party/onPartyDeleted.js +53 -0
  193. package/lib/party/onPartyInvite.js +53 -0
  194. package/lib/party/onPartyJoinedGame.js +53 -0
  195. package/lib/party/onPartyLeftGame.js +53 -0
  196. package/lib/party/onPartySelfJoined.js +53 -0
  197. package/lib/party/onPartySelfLeft.js +53 -0
  198. package/lib/party/onPartyUserJoined.js +53 -0
  199. package/lib/party/onPartyUserLeft.js +53 -0
  200. package/lib/premiumfeatures/getPremium.js +46 -0
  201. package/lib/presence/getPresences.js +60 -0
  202. package/lib/privatemessages/getMessages.js +55 -0
  203. package/lib/privatemessages/message.js +75 -0
  204. package/lib/privatemessages/onMessage.js +89 -0
  205. package/lib/thumbnails/getLogo.js +56 -0
  206. package/lib/thumbnails/getPlayerThumbnail.js +120 -0
  207. package/lib/thumbnails/getThumbnails.js +92 -0
  208. package/lib/trades/acceptTrade.js +52 -0
  209. package/lib/trades/canTradeWith.js +43 -0
  210. package/lib/trades/counterTrade.js +78 -0
  211. package/lib/trades/declineTrade.js +52 -0
  212. package/lib/trades/getTradeInfo.js +47 -0
  213. package/lib/trades/getTrades.js +37 -0
  214. package/lib/trades/sendTrade.js +76 -0
  215. package/lib/users/getBlurb.js +37 -0
  216. package/lib/users/getIdFromUsername.js +56 -0
  217. package/lib/users/getPlayerInfo.js +128 -0
  218. package/lib/users/getUserInfo.js +35 -0
  219. package/lib/users/getUsernameFromId.js +45 -0
  220. package/lib/users/getUsernameHistory.js +42 -0
  221. package/lib/users/onBlurbChange.js +46 -0
  222. package/lib/users/searchUsers.js +41 -0
  223. package/lib/util/apiError.js +50 -0
  224. package/lib/util/clearSession.js +32 -0
  225. package/lib/util/generalRequest.js +61 -0
  226. package/lib/util/getAction.js +45 -0
  227. package/lib/util/getAuthenticatedUser.js +41 -0
  228. package/lib/util/getCurrentUser.js +58 -0
  229. package/lib/util/getGeneralToken.js +52 -0
  230. package/lib/util/getHash.js +29 -0
  231. package/lib/util/getInputs.js +37 -0
  232. package/lib/util/getPageResults.js +86 -0
  233. package/lib/util/getSenderUserId.js +30 -0
  234. package/lib/util/getSession.js +38 -0
  235. package/lib/util/getVerification.js +60 -0
  236. package/lib/util/getVerificationInputs.js +31 -0
  237. package/lib/util/http.js +138 -0
  238. package/lib/util/jar.js +25 -0
  239. package/lib/util/refreshCookie.js +52 -0
  240. package/lib/util/relog.js +81 -0
  241. package/lib/util/setOptions.js +54 -0
  242. package/lib/util/shortPoll.js +102 -0
  243. package/package.json +76 -0
  244. package/postinstall.mjs +1 -0
  245. package/settings.json +115 -0
  246. package/test/accountinformation.test.js +27 -0
  247. package/test/accountsettings.test.js +27 -0
  248. package/test/asset.test.js +81 -0
  249. package/test/assets/Great-White-Shark-Fin.rbxm +0 -0
  250. package/test/assets/KeyframeSequence.rbxm +0 -0
  251. package/test/avatar.test.js +164 -0
  252. package/test/badges.test.js +96 -0
  253. package/test/chat.test.js +104 -0
  254. package/test/datastore.test.js +105 -0
  255. package/test/develop.test.js +53 -0
  256. package/test/economy.test.js +143 -0
  257. package/test/friends.test.js +146 -0
  258. package/test/games.test.js +229 -0
  259. package/test/groups.test.js +405 -0
  260. package/test/inventory.test.js +98 -0
  261. package/test/itemconfiguration.test.js +24 -0
  262. package/test/premiumfeatures.test.js +17 -0
  263. package/test/presence.test.js +25 -0
  264. package/test/privatemessages.test.js +33 -0
  265. package/test/thumbnails.test.js +53 -0
  266. package/test/users.test.js +110 -0
  267. package/tutorials/Authentication.md +75 -0
  268. package/tutorials/Event Emitters.md +26 -0
  269. package/tutorials/Promises.md +86 -0
  270. package/tutorials/VPS Authentication.md +72 -0
  271. package/typings/index.d.ts +2639 -0
  272. package/typings/jsDocs.ts +1987 -0
@@ -0,0 +1,47 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 Redraw your avatar.
10
+ * @category Avatar
11
+ * @alias redrawAvatar
12
+ * @returns {Promise<void>}
13
+ * @example const noblox = require("noblox.js")
14
+ * // Login using your cookie
15
+ * noblox.redrawAvatar()
16
+ **/
17
+
18
+ function redrawAvatar (jar, token) {
19
+ return new Promise((resolve, reject) => {
20
+ const httpOpt = {
21
+ url: '//avatar.roblox.com/v1/avatar/redraw-thumbnail',
22
+ options: {
23
+ method: 'POST',
24
+ jar,
25
+ headers: {
26
+ 'X-CSRF-TOKEN': token
27
+ },
28
+ resolveWithFullResponse: true
29
+ }
30
+ }
31
+ return http(httpOpt).then((res) => {
32
+ if (res.statusCode === 200) {
33
+ resolve()
34
+ } else {
35
+ reject(new RobloxAPIError(res))
36
+ }
37
+ }).catch(error => reject(error))
38
+ })
39
+ }
40
+
41
+ exports.func = (args) => {
42
+ const jar = args.jar
43
+
44
+ return getGeneralToken({ jar }).then((xcsrf) => {
45
+ return redrawAvatar(jar, xcsrf)
46
+ })
47
+ }
@@ -0,0 +1,51 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ exports.required = ['assetId']
6
+ exports.optional = ['jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔐 Removes an asset from your avatar.
11
+ * @category Avatar
12
+ * @alias removeAssetId
13
+ * @param {number} assetId - The assetId to remove.
14
+ * @returns {Promise<void>}
15
+ * @example const noblox = require("noblox.js")
16
+ * // Login using your cookie
17
+ * noblox.removeAssetId(1)
18
+ **/
19
+
20
+ function removeAssetId (assetId, jar, xcsrf) {
21
+ return new Promise((resolve, reject) => {
22
+ const httpOpt = {
23
+ url: 'https://avatar.roblox.com/v1/avatar/assets/' + assetId + '/remove',
24
+ options: {
25
+ method: 'POST',
26
+ jar,
27
+ headers: {
28
+ 'X-CSRF-TOKEN': xcsrf
29
+ },
30
+ resolveWithFullResponse: true
31
+ }
32
+ }
33
+
34
+ return http(httpOpt)
35
+ .then(function (res) {
36
+ if (res.statusCode !== 200) {
37
+ reject(new RobloxAPIError(res))
38
+ } else {
39
+ resolve()
40
+ }
41
+ }).catch(error => reject(error))
42
+ })
43
+ }
44
+
45
+ exports.func = (args) => {
46
+ const jar = args.jar
47
+
48
+ return getGeneralToken({ jar }).then((xcsrf) => {
49
+ return removeAssetId(args.assetId, jar, xcsrf)
50
+ })
51
+ }
@@ -0,0 +1,61 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ exports.required = ['headColorId', 'torsoColorId', 'rightArmColorId', 'leftArmColorId', 'rightLegColorId', 'leftLegColorId']
6
+ exports.optional = ['jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔐 Set the colors of your avatar.
11
+ * @category Avatar
12
+ * @alias setAvatarBodyColors
13
+ * @param {number} headColorId - The [BrickColor Code]{@link https://developer.roblox.com/en-us/articles/BrickColor-Codes} of the head.
14
+ * @param {number} torsoColorId - The [BrickColor Code]{@link https://developer.roblox.com/en-us/articles/BrickColor-Codes} of the torso.
15
+ * @param {number} rightArmColorId - The [BrickColor Code]{@link https://developer.roblox.com/en-us/articles/BrickColor-Codes} of the right arm.
16
+ * @param {number} leftArmColorId - The [BrickColor Code]{@link https://developer.roblox.com/en-us/articles/BrickColor-Codes} of the left arm.
17
+ * @param {number} rightLegColorId - The [BrickColor Code]{@link https://developer.roblox.com/en-us/articles/BrickColor-Codes} of the right leg.
18
+ * @param {number} leftLegColorId - The [BrickColor Code]{@link https://developer.roblox.com/en-us/articles/BrickColor-Codes} of the left leg.
19
+ * @returns {Promise<void>}
20
+ * @example const noblox = require("noblox.js")
21
+ * // Login using your cookie
22
+ * noblox.setAvatarBodyColors(125, 125, 125, 125, 125, 125)
23
+ **/
24
+
25
+ const nextFunction = (jar, token, headColorId, torsoColorId, rightArmColorId, leftArmColorId, rightLegColorId, leftLegColorId) => {
26
+ return http({
27
+ url: '//avatar.roblox.com/v1/avatar/set-body-colors',
28
+ options: {
29
+ method: 'POST',
30
+ jar,
31
+ headers: {
32
+ 'X-CSRF-TOKEN': token
33
+ },
34
+ json: {
35
+ headColorId,
36
+ torsoColorId,
37
+ rightArmColorId,
38
+ leftArmColorId,
39
+ rightLegColorId,
40
+ leftLegColorId
41
+ },
42
+ resolveWithFullResponse: true
43
+ }
44
+ }).then((res) => {
45
+ if (res.statusCode === 200) {
46
+ if (!res.body.success) {
47
+ throw new RobloxAPIError(res)
48
+ }
49
+ } else {
50
+ throw new RobloxAPIError(res)
51
+ }
52
+ })
53
+ }
54
+
55
+ exports.func = (args) => {
56
+ const jar = args.jar
57
+
58
+ return getGeneralToken({ jar }).then((xcsrf) => {
59
+ return nextFunction(jar, xcsrf, args.headColorId, args.torsoColorId, args.rightArmColorId, args.leftArmColorId, args.rightLegColorId, args.leftLegColorId)
60
+ })
61
+ }
@@ -0,0 +1,61 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ exports.required = ['height', 'width', 'head']
6
+ exports.optional = ['depth', 'proportion', 'bodyType', 'jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔐 Set the scale of your avatar.
11
+ * @category Avatar
12
+ * @alias setAvatarScales
13
+ * @param {number} height - The height scale of the avatar.
14
+ * @param {number} width - The width scale of the avatar.
15
+ * @param {number} head - The head scale of the avatar.
16
+ * @param {number=} depth - The depth scale of the avatar.
17
+ * @param {number=} proportion - The proportion scale of the avatar.
18
+ * @param {number=} bodyType - The body type scale of the avatar.
19
+ * @returns {Promise<void>}
20
+ * @example const noblox = require("noblox.js")
21
+ * // Login using your cookie
22
+ * noblox.setAvatarScales(1, 1, 1, 1, 1, 1)
23
+ **/
24
+
25
+ const nextFunction = (jar, token, height, width, head, depth, proportion, bodyType) => {
26
+ return http({
27
+ url: '//avatar.roblox.com/v1/avatar/set-scales',
28
+ options: {
29
+ method: 'POST',
30
+ jar,
31
+ headers: {
32
+ 'X-CSRF-TOKEN': token
33
+ },
34
+ json: {
35
+ height,
36
+ width,
37
+ head,
38
+ depth,
39
+ proportion,
40
+ bodyType
41
+ },
42
+ resolveWithFullResponse: true
43
+ }
44
+ }).then((res) => {
45
+ if (res.statusCode === 200) {
46
+ if (!res.body.success) {
47
+ throw new RobloxAPIError(res)
48
+ }
49
+ } else {
50
+ throw new RobloxAPIError(res)
51
+ }
52
+ })
53
+ }
54
+
55
+ exports.func = (args) => {
56
+ const jar = args.jar
57
+
58
+ return getGeneralToken({ jar }).then((xcsrf) => {
59
+ return nextFunction(jar, xcsrf, args.height, args.width, args.head, args.depth, args.proportion, args.bodyType)
60
+ })
61
+ }
@@ -0,0 +1,51 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ exports.required = ['avatarType']
6
+ exports.optional = ['jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔐 Set the type of your avatar.
11
+ * @category Avatar
12
+ * @alias setPlayerAvatarType
13
+ * @param {PlayerAvatarType} avatarType - The type of your avatar. (R6 or R15)
14
+ * @returns {Promise<void>}
15
+ * @example const noblox = require("noblox.js")
16
+ * // Login using your cookie
17
+ * noblox.setPlayerAvatarType("R6")
18
+ **/
19
+
20
+ const nextFunction = (jar, token, avatarType) => {
21
+ return http({
22
+ url: '//avatar.roblox.com/v1/avatar/set-player-avatar-type',
23
+ options: {
24
+ method: 'POST',
25
+ jar,
26
+ headers: {
27
+ 'X-CSRF-TOKEN': token
28
+ },
29
+ json: {
30
+ playerAvatarType: avatarType
31
+ },
32
+ resolveWithFullResponse: true
33
+ }
34
+ }).then((res) => {
35
+ if (res.statusCode === 200) {
36
+ if (!res.body.success) {
37
+ throw new RobloxAPIError(res)
38
+ }
39
+ } else {
40
+ throw new RobloxAPIError(res)
41
+ }
42
+ })
43
+ }
44
+
45
+ exports.func = (args) => {
46
+ const jar = args.jar
47
+
48
+ return getGeneralToken({ jar }).then((xcsrf) => {
49
+ return nextFunction(jar, xcsrf, args.avatarType)
50
+ })
51
+ }
@@ -0,0 +1,51 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ exports.required = ['assetIds']
6
+ exports.optional = ['jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔐 Set the assets your avatar is wearing.
11
+ * @category Avatar
12
+ * @alias setWearingAssets
13
+ * @param {Array<number>} assetIds - An array of asset IDs to wear.
14
+ * @returns {Promise<void>}
15
+ * @example const noblox = require("noblox.js")
16
+ * // Login using your cookie
17
+ * noblox.setWearingAssets([1, 2, 3])
18
+ **/
19
+
20
+ const nextFunction = (jar, token, assetIds) => {
21
+ return http({
22
+ url: '//avatar.roblox.com/v1/avatar/set-wearing-assets',
23
+ options: {
24
+ method: 'POST',
25
+ jar,
26
+ headers: {
27
+ 'X-CSRF-TOKEN': token
28
+ },
29
+ json: {
30
+ assetIds
31
+ },
32
+ resolveWithFullResponse: true
33
+ }
34
+ }).then((res) => {
35
+ if (res.statusCode === 200) {
36
+ if (!res.body.success) {
37
+ throw new RobloxAPIError(res)
38
+ }
39
+ } else {
40
+ throw new RobloxAPIError(res)
41
+ }
42
+ })
43
+ }
44
+
45
+ exports.func = (args) => {
46
+ const jar = args.jar
47
+
48
+ return getGeneralToken({ jar }).then((xcsrf) => {
49
+ return nextFunction(jar, xcsrf, args.assetIds)
50
+ })
51
+ }
@@ -0,0 +1,51 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ exports.required = ['assetId']
6
+ exports.optional = ['jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔐 Wear a specific asset.
11
+ * @category Avatar
12
+ * @alias wearAssetId
13
+ * @param {number} assetId - The assetId to wear.
14
+ * @returns {Promise<void>}
15
+ * @example const noblox = require("noblox.js")
16
+ * // Login using your cookie
17
+ * noblox.wearAssetId(1117747196)
18
+ **/
19
+
20
+ function wearAssetId (assetId, jar, xcsrf) {
21
+ return new Promise((resolve, reject) => {
22
+ const httpOpt = {
23
+ url: 'https://avatar.roblox.com/v1/avatar/assets/' + assetId + '/wear',
24
+ options: {
25
+ method: 'POST',
26
+ jar,
27
+ headers: {
28
+ 'X-CSRF-TOKEN': xcsrf
29
+ },
30
+ resolveWithFullResponse: true
31
+ }
32
+ }
33
+
34
+ return http(httpOpt)
35
+ .then(function (res) {
36
+ if (res.statusCode !== 200) {
37
+ reject(new RobloxAPIError(res))
38
+ } else {
39
+ resolve()
40
+ }
41
+ }).catch(error => reject(error))
42
+ })
43
+ }
44
+
45
+ exports.func = (args) => {
46
+ const jar = args.jar
47
+
48
+ return getGeneralToken({ jar }).then((xcsrf) => {
49
+ return wearAssetId(args.assetId, jar, xcsrf)
50
+ })
51
+ }
@@ -0,0 +1,49 @@
1
+ // Includes
2
+ const http = require('../util/http').func
3
+ const RobloxAPIError = require('../util/apiError')
4
+
5
+ // Args
6
+ exports.required = ['userId', 'badgeId']
7
+
8
+ // Docs
9
+ /**
10
+ * ✅ Get the time the badge was awarded to a user.
11
+ * @category Badges
12
+ * @alias getAwardedTimestamps
13
+ * @param {number} userId - The userId of the user.
14
+ * @param {Array<number>} badgeId - The ids of the badges.
15
+ * @returns {Promise<UserBadgeStats>}
16
+ * @example const noblox = require("noblox.js")
17
+ * const badges = await noblox.getAwardedTimestamps(1, [1, 2, 3])
18
+ **/
19
+
20
+ // Define
21
+ const getAwardedTimestamps = (userId, badgeId) => {
22
+ return new Promise((resolve, reject) => {
23
+ const httpOpt = {
24
+ url: `https://badges.roblox.com/v1/users/${userId}/badges/awarded-dates?badgeIds=${badgeId.join(',')}`,
25
+ options: {
26
+ method: 'GET',
27
+ resolveWithFullResponse: true
28
+ }
29
+ }
30
+
31
+ return http(httpOpt)
32
+ .then(function (res) {
33
+ const responseData = JSON.parse(res.body)
34
+ if (res.statusCode !== 200) {
35
+ reject(new RobloxAPIError(res))
36
+ } else {
37
+ resolve(responseData)
38
+ }
39
+ })
40
+ })
41
+ }
42
+
43
+ exports.func = async (args) => {
44
+ if (isNaN(args.userId)) {
45
+ throw new Error('The provided User ID is not a number.')
46
+ }
47
+
48
+ return getAwardedTimestamps(args.userId, args.badgeId)
49
+ }
@@ -0,0 +1,44 @@
1
+ // Includes
2
+ const http = require('../util/http').func
3
+ const RobloxAPIError = require('../util/apiError')
4
+
5
+ // Args
6
+ exports.required = ['badgeId']
7
+
8
+ // Docs
9
+ /**
10
+ * ✅ Get the info of a badge.
11
+ * @category Badges
12
+ * @alias getBadgeInfo
13
+ * @param {number} badgeId - The badge's id.
14
+ * @returns {Promise<BadgeInfo>}
15
+ * @example const noblox = require("noblox.js")
16
+ * const badgeInfo = await noblox.getBadgeInfo(1)
17
+ **/
18
+
19
+ // Define
20
+ const badgeInfo = async (id) => {
21
+ return http({
22
+ url: `https://badges.roblox.com/v1/badges/${id}`,
23
+ options: {
24
+ resolveWithFullResponse: true,
25
+ method: 'GET'
26
+ }
27
+ }).then(res => {
28
+ if (res.statusCode === 200) {
29
+ const json = JSON.parse(res.body)
30
+ json.created = new Date(json.created)
31
+ json.updated = new Date(json.updated)
32
+ return json
33
+ } else {
34
+ throw new RobloxAPIError(res)
35
+ }
36
+ })
37
+ }
38
+
39
+ exports.func = async (args) => {
40
+ if (isNaN(args.badgeId)) {
41
+ throw new Error('The provided Badge ID is not a number.')
42
+ }
43
+ return badgeInfo(args.badgeId)
44
+ }
@@ -0,0 +1,63 @@
1
+ // Includes
2
+ const http = require('../util/http').func
3
+ const RobloxAPIError = require('../util/apiError')
4
+
5
+ // Args
6
+ exports.required = ['universeId']
7
+ exports.optional = ['limit', 'cursor', 'sortOrder']
8
+
9
+ // Docs
10
+ /**
11
+ * ✅ Get the badges in a specific game.
12
+ * @category Game
13
+ * @alias getGameBadges
14
+ * @param {number} universeId - The id of the universe.
15
+ * @param {Limit=} limit - The max number of badges to return.
16
+ * @param {string=} cursor - The page cursor.
17
+ * @param {SortOrder=} sortOrder - The order to sort badges in. (Asc/Desc)
18
+ * @returns {Promise<BadgeInfo>}
19
+ * @example const noblox = require("noblox.js")
20
+ * const badges = await noblox.getGameBadges(1)
21
+ **/
22
+
23
+ // Define
24
+ const gameBadges = async (id, limit, cursor, order) => {
25
+ return http({
26
+ url: `https://badges.roblox.com/v1/universes/${id}/badges?limit=${limit}&cursor=${cursor}&sortOrder=${order}`,
27
+ options: {
28
+ resolveWithFullResponse: true,
29
+ method: 'GET'
30
+ }
31
+ }).then(res => {
32
+ if (res.statusCode === 200) {
33
+ const json = JSON.parse(res.body)
34
+ json.data.map(badge => {
35
+ badge.created = new Date(badge.created)
36
+ badge.updated = new Date(badge.updated)
37
+ return badge
38
+ })
39
+ return json.data
40
+ } else {
41
+ throw new RobloxAPIError(res)
42
+ }
43
+ })
44
+ }
45
+ exports.func = async (args) => {
46
+ if (isNaN(args.universeId)) {
47
+ throw new Error('The provided Universe ID is not a number.')
48
+ };
49
+ if (args.limit) {
50
+ if (![10, 25, 50, 100].includes(args.limit)) {
51
+ throw new Error('The allowed values are: 10, 25, 50 and 100.')
52
+ };
53
+ };
54
+ if (args.sortOrder) {
55
+ if (args.sortOrder.toLowerCase() !== 'asc' && args.sortOrder.toLowerCase() !== 'desc') {
56
+ throw new Error('Invalid sort order type.')
57
+ }
58
+ }
59
+ const limit = args.limit || 10
60
+ const sortOrder = args.sortOrder || 'Asc'
61
+ const cursor = args.cursor || ''
62
+ return gameBadges(args.universeId, limit, cursor, sortOrder)
63
+ }
@@ -0,0 +1,28 @@
1
+ // Includes
2
+ const getPageResults = require('../util/getPageResults.js').func
3
+
4
+ // Args
5
+ exports.required = ['userId']
6
+ exports.optional = ['limit', 'sortOrder', 'jar']
7
+
8
+ // Docs
9
+ /**
10
+ * ✅ Get the badges that a user has.
11
+ * @category User
12
+ * @alias getPlayerBadges
13
+ * @param {number} userId - The id of the user whose badges are being fetched.
14
+ * @param {number} [limit=10] - The amount of badges being returned each request.
15
+ * @param {SortOrder=} [sortOrder=Asc] - The order that the data will be returned in (Asc or Desc)
16
+ * @returns {Promise<Array<PlayerBadges>>}
17
+ * @example const noblox = require("noblox.js")
18
+ * let badges = noblox.getPlayerBadges(123456, 10, "Asc")
19
+ **/
20
+
21
+ exports.func = async (args) => {
22
+ return getPageResults({
23
+ jar: args.jar,
24
+ url: `//badges.roblox.com/v1/users/${args.userId}/badges`,
25
+ sortOrder: args.sortOrder,
26
+ limit: args.limit
27
+ })
28
+ }
@@ -0,0 +1,75 @@
1
+ // Includes
2
+ const http = require('../util/http').func
3
+ const getGeneralToken = require('../util/getGeneralToken.js').func
4
+ const RobloxAPIError = require('../util/apiError.js')
5
+
6
+ // Args
7
+ exports.required = ['badgeId']
8
+ exports.optional = ['name', 'description', 'enabled', 'jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Configure a badge.
13
+ * @category Badges
14
+ * @alias updateBadgeInfo
15
+ * @param {number} badgeId - The badge's id.
16
+ * @param {string=} name - The new name of the badge.
17
+ * @param {string=} description - The new description of the badge.
18
+ * @param {boolean=} enabled - If the badge is enabled.
19
+ * @returns {Promise<void>}
20
+ * @example const noblox = require("noblox.js")
21
+ * // Login using your cookie
22
+ * noblox.updateBadgeInfo(1, "Badge", "A cool badge.", true)
23
+ **/
24
+
25
+ // Define
26
+ const updateInfo = (id, name, desc, enabled, xcrsf, jar) => {
27
+ return http({
28
+ url: `https://badges.roblox.com/v1/badges/${id}`,
29
+ options: {
30
+ resolveWithFullResponse: true,
31
+ method: 'PATCH',
32
+ jar,
33
+ headers: {
34
+ 'Content-Type': 'application/json',
35
+ 'X-CSRF-TOKEN': xcrsf
36
+ },
37
+ body: JSON.stringify({
38
+ name,
39
+ description: desc,
40
+ enabled
41
+ })
42
+ }
43
+ }).then(res => {
44
+ if (res.statusCode === 200) {
45
+ return JSON.parse(res.body)
46
+ } else {
47
+ throw new RobloxAPIError(res)
48
+ }
49
+ })
50
+ }
51
+
52
+ exports.func = async (args) => {
53
+ if (isNaN(args.badgeId)) {
54
+ throw new Error('The provided Badge ID is not a number.')
55
+ }
56
+ if (args.name) {
57
+ if (typeof args.name !== 'string') throw new Error('The name must be a string.')
58
+ } else if (args.description) {
59
+ if (typeof args.description !== 'string') throw new Error('The description must be a string.')
60
+ }
61
+
62
+ if (args.enabled) {
63
+ if (typeof args.enabled !== 'boolean') {
64
+ throw new Error('Enabled must be a boolean.')
65
+ }
66
+ }
67
+
68
+ const name = args.name || ''
69
+ const description = args.description || ''
70
+ const enabled = args.enabled || true
71
+ const jar = args.jar
72
+
73
+ const xcsrf = await getGeneralToken({ jar })
74
+ return updateInfo(args.badgeId, name, description, enabled, xcsrf, jar)
75
+ }
@@ -0,0 +1,14 @@
1
+ // Includes
2
+ const levelOneCopy = require('../internal/levelOneCopy.js')
3
+
4
+ // Define
5
+ module.exports = function (cache, type, index, element) {
6
+ if (cache[type]) {
7
+ if (element instanceof Object) {
8
+ element = levelOneCopy(element)
9
+ }
10
+ cache[type].items[index] = { item: element, time: Date.now() / 1000 }
11
+ } else {
12
+ return 'Invalid type'
13
+ }
14
+ }
@@ -0,0 +1,26 @@
1
+ // Includes
2
+ const add = require('./add.js')
3
+ const get = require('./get.js')
4
+
5
+ // Define
6
+ module.exports = function (cache, type, index, callbacks) {
7
+ const got = get(cache, type, index)
8
+ const item = got[0]
9
+ const refresh = got[1]
10
+ if (item != null) {
11
+ callbacks.done(item)
12
+ if (refresh) {
13
+ const group = cache[type]
14
+ group.refresh = false
15
+ callbacks.add(function (element) {
16
+ group.refresh = true
17
+ add(cache, type, index, element)
18
+ })
19
+ }
20
+ } else {
21
+ callbacks.add(function (element) {
22
+ add(cache, type, index, element)
23
+ callbacks.done(element)
24
+ })
25
+ }
26
+ }
@@ -0,0 +1,8 @@
1
+ // Define
2
+ module.exports = function (cache, type, index) {
3
+ if (cache[type]) {
4
+ cache[type].items[index].time = null
5
+ } else {
6
+ return 'Invalid type'
7
+ }
8
+ }