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,74 @@
1
+ // Includes
2
+ const shortPoll = require('../util/shortPoll.js').func
3
+ const getGroupTransactions = require('./getGroupTransactions.js').func
4
+
5
+ // Args
6
+ exports.required = ['groupId', 'transactionType']
7
+ exports.optional = ['jar']
8
+
9
+ // Docs
10
+ /**
11
+ * 🔐 An event for when a group transaction is made, for example a purchase. This event has a rate of one request per 60
12
+ * sec, which is more than the typical 10 seconds. This is due to the unusually low rate limit on the transactions
13
+ * endpoint.
14
+ *
15
+ * Note: The `created` field returned by this event will always have 0 milliseconds. This is due to a quirk on Roblox's side:
16
+ * These millisecond values fluctuate, meaning the event can misfire. Removing them avoids this problem.
17
+ * @category Group
18
+ * @alias onGroupTransaction
19
+ * @param {number} groupId - The id of the group.
20
+ * @param {("Sale" | "Purchase" | "AffiliateSale" | "DevEx" | "GroupPayout" | "AdImpressionPayout")} transactionType - The transaction type.
21
+ * @returns An EventEmitter that emits when a transaction is made.
22
+ * @example const noblox = require("noblox.js")
23
+ * // Login using your cookie
24
+ * const transactionEvent = noblox.onGroupTransaction(1)
25
+ * transactionEvent.on("data", function(data) {
26
+ * console.log("New Transaction!", data)
27
+ * })
28
+ * transactionEvent.on("error", function(err) {
29
+ * console.error("Something went wrong: ", err)
30
+ * // Handle error as needed
31
+ * })
32
+ **/
33
+
34
+ // Define
35
+ exports.func = function (args) {
36
+ let empty = true
37
+ return shortPoll({
38
+ getLatest: function (latest) {
39
+ return getGroupTransactions({ group: args.groupId, jar: args.jar, transactionType: args.transactionType })
40
+ .then(function (transactions) {
41
+ const given = []
42
+ // This method works much in the same way as onAuditLog. We remove some of the precision from transaction dates
43
+ // Because Roblox has a habit of being imprecise and varying the milliseconds of a given transaction/log item
44
+ // across different requests - and this causes duplicate fires.
45
+ if (transactions) {
46
+ for (const key in transactions) {
47
+ if (Object.prototype.hasOwnProperty.call(transactions, key)) {
48
+ const date = transactions[key].created
49
+ date.setMilliseconds(0)
50
+
51
+ if (date > latest) {
52
+ latest = date
53
+ given.push(transactions[key])
54
+ }
55
+ empty = false
56
+ } else if (!empty) {
57
+ const date = new Date()
58
+ date.setMilliseconds(0)
59
+
60
+ given.push({ date })
61
+ latest = date
62
+ empty = true
63
+ }
64
+ }
65
+ return {
66
+ latest,
67
+ data: given
68
+ }
69
+ }
70
+ })
71
+ },
72
+ delay: 'onGroupTransaction'
73
+ })
74
+ }
@@ -0,0 +1,54 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const getGeneralToken = require('../util/getGeneralToken.js').func
4
+ const RobloxAPIError = require('../util/apiError.js')
5
+
6
+ // Args
7
+ exports.required = ['userId']
8
+ exports.optional = ['jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Accept a user's friend request.
13
+ * @category User
14
+ * @alias acceptFriendRequest
15
+ * @param {number} userId - The id of the user.
16
+ * @returns {Promise<void>}
17
+ * @example const noblox = require("noblox.js")
18
+ * // Login using your cookie
19
+ * noblox.acceptFriendRequest(123456)
20
+ **/
21
+
22
+ // Define
23
+ function acceptFriendRequest (jar, token, userId) {
24
+ return new Promise((resolve, reject) => {
25
+ const httpOpt = {
26
+ url: `//friends.roblox.com/v1/users/${userId}/accept-friend-request`,
27
+ options: {
28
+ method: 'POST',
29
+ jar,
30
+ headers: {
31
+ 'X-CSRF-TOKEN': token,
32
+ 'Content-Type': 'application/json'
33
+ },
34
+ resolveWithFullResponse: true
35
+ }
36
+ }
37
+ return http(httpOpt)
38
+ .then(function (res) {
39
+ if (res.statusCode === 200) {
40
+ resolve()
41
+ } else {
42
+ reject(new RobloxAPIError(res))
43
+ }
44
+ })
45
+ })
46
+ }
47
+
48
+ exports.func = function (args) {
49
+ const jar = args.jar
50
+ return getGeneralToken({ jar })
51
+ .then(function (xcsrf) {
52
+ return acceptFriendRequest(jar, xcsrf, args.userId)
53
+ })
54
+ }
@@ -0,0 +1,52 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const getGeneralToken = require('../util/getGeneralToken.js').func
4
+ const RobloxAPIError = require('../util/apiError.js')
5
+
6
+ // Args
7
+ exports.required = []
8
+ exports.optional = ['jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Decline all incoming friend requests.
13
+ * @category User
14
+ * @alias declineAllFriendRequests
15
+ * @returns {Promise<void>}
16
+ * @example const noblox = require("noblox.js")
17
+ * // Login using your cookie
18
+ * noblox.declineAllFriendRequests()
19
+ **/
20
+
21
+ // Define
22
+ function declineAllFriendRequests (jar, token) {
23
+ return new Promise((resolve, reject) => {
24
+ const httpOpt = {
25
+ url: '//friends.roblox.com/v1/user/friend-requests/decline-all',
26
+ options: {
27
+ method: 'POST',
28
+ jar,
29
+ headers: {
30
+ 'X-CSRF-TOKEN': token
31
+ },
32
+ resolveWithFullResponse: true
33
+ }
34
+ }
35
+ return http(httpOpt)
36
+ .then(function (res) {
37
+ if (res.statusCode === 200) {
38
+ resolve()
39
+ } else {
40
+ reject(new RobloxAPIError(res))
41
+ }
42
+ })
43
+ })
44
+ }
45
+
46
+ exports.func = function (args) {
47
+ const jar = args.jar
48
+ return getGeneralToken({ jar })
49
+ .then(function (xcsrf) {
50
+ return declineAllFriendRequests(jar, xcsrf)
51
+ })
52
+ }
@@ -0,0 +1,54 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const getGeneralToken = require('../util/getGeneralToken.js').func
4
+ const RobloxAPIError = require('../util/apiError.js')
5
+
6
+ // Args
7
+ exports.required = ['userId']
8
+ exports.optional = ['jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Decline a user's friend request.
13
+ * @category User
14
+ * @alias declineFriendRequest
15
+ * @param {number} userId - The id of the user that sent the friend request that is being declined.
16
+ * @returns {Promise<void>}
17
+ * @example const noblox = require("noblox.js")
18
+ * // Login using your cookie
19
+ * noblox.declineFriendRequest(123456)
20
+ **/
21
+
22
+ // Define
23
+ function declineFriendRequest (jar, token, userId) {
24
+ return new Promise((resolve, reject) => {
25
+ const httpOpt = {
26
+ url: `//friends.roblox.com/v1/users/${userId}/decline-friend-request`,
27
+ options: {
28
+ method: 'POST',
29
+ jar,
30
+ headers: {
31
+ 'X-CSRF-TOKEN': token,
32
+ 'Content-Type': 'application/json'
33
+ },
34
+ resolveWithFullResponse: true
35
+ }
36
+ }
37
+ return http(httpOpt)
38
+ .then(function (res) {
39
+ if (res.statusCode === 200) {
40
+ resolve()
41
+ } else {
42
+ reject(new RobloxAPIError(res))
43
+ }
44
+ })
45
+ })
46
+ }
47
+
48
+ exports.func = function (args) {
49
+ const jar = args.jar
50
+ return getGeneralToken({ jar })
51
+ .then(function (xcsrf) {
52
+ return declineFriendRequest(jar, xcsrf, args.userId)
53
+ })
54
+ }
@@ -0,0 +1,35 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = ['userId']
7
+
8
+ // Docs
9
+ /**
10
+ * ✅ Gets the number of followers a user has.
11
+ * @category User
12
+ * @alias getFollowerCount
13
+ * @param { number } userId
14
+ * @returns Promise<number>
15
+ * @example const noblox = require("noblox.js")
16
+ * const numberOfFollowers = await noblox.getFollowerCount(55549140)
17
+ **/
18
+
19
+ // Define
20
+ exports.func = function (args) {
21
+ const httpOpt = {
22
+ url: `//friends.roblox.com/v1/users/${args.userId}/followers/count`,
23
+ options: {
24
+ json: true,
25
+ method: 'GET',
26
+ resolveWithFullResponse: true
27
+ }
28
+ }
29
+
30
+ return http(httpOpt).then(function (res) {
31
+ if (res.statusCode === 200) { return res.body.count }
32
+
33
+ throw new RobloxAPIError(res)
34
+ })
35
+ }
@@ -0,0 +1,56 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = ['userId']
7
+ exports.optional = ['sortOrder', 'limit', 'cursor', 'jar']
8
+
9
+ // Docs
10
+ /**
11
+ * ✅ Get a user's followers.
12
+ * @category User
13
+ * @alias getFollowers
14
+ * @param {number} userId - The id of the user whose followers are being returned.
15
+ * @param {Limit=} [limit=10] - The amount of followers being fetched each request.
16
+ * @param {SortOrder=} [sortOrder=Asc] - The order that the data should be sorted by (Asc or Desc)
17
+ * @param {string=} cursor - The cursor for the previous or next page.
18
+ * @returns {Promise<FollowersPage>}
19
+ * @example const noblox = require("noblox.js")
20
+ * let followers = await noblox.getFollowers(123456, "Asc", 10)
21
+ **/
22
+
23
+ // Define
24
+ function getFollowers (jar, userId, sortOrder, limit, cursor) {
25
+ return new Promise((resolve, reject) => {
26
+ const httpOpt = {
27
+ url: `//friends.roblox.com/v1/users/${userId}/followers?limit=${limit}&sortOrder=${sortOrder}&cursor=${cursor}`,
28
+ options: {
29
+ method: 'GET',
30
+ jar,
31
+ resolveWithFullResponse: true
32
+ }
33
+ }
34
+ return http(httpOpt)
35
+ .then(function (res) {
36
+ if (res.statusCode === 200) {
37
+ const response = JSON.parse(res.body)
38
+ response.data = response.data.map((entry) => {
39
+ entry.created = new Date(entry.created)
40
+ return entry
41
+ })
42
+ resolve(response)
43
+ } else {
44
+ reject(new RobloxAPIError(res))
45
+ }
46
+ })
47
+ })
48
+ }
49
+
50
+ exports.func = function (args) {
51
+ const jar = args.jar
52
+ const sortOrder = args.sortOrder || 'Asc'
53
+ const limit = args.limit || (10).toString()
54
+ const cursor = args.cursor || ''
55
+ return getFollowers(jar, args.userId, sortOrder, limit, cursor)
56
+ }
@@ -0,0 +1,35 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = ['userId']
7
+
8
+ // Docs
9
+ /**
10
+ * ✅ Gets the number of users a user is following.
11
+ * @category User
12
+ * @alias getFollowingCount
13
+ * @param { number } userId
14
+ * @returns Promise<number>
15
+ * @example const noblox = require("noblox.js")
16
+ * const numberOfFollowings = await noblox.getFollowingCount(55549140)
17
+ **/
18
+
19
+ // Define
20
+ exports.func = function (args) {
21
+ const httpOpt = {
22
+ url: `//friends.roblox.com/v1/users/${args.userId}/followings/count`,
23
+ options: {
24
+ json: true,
25
+ method: 'GET',
26
+ resolveWithFullResponse: true
27
+ }
28
+ }
29
+
30
+ return http(httpOpt).then(function (res) {
31
+ if (res.statusCode === 200) { return res.body.count }
32
+
33
+ throw new RobloxAPIError(res)
34
+ })
35
+ }
@@ -0,0 +1,56 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = ['userId']
7
+ exports.optional = ['sortOrder', 'limit', 'cursor', 'jar']
8
+
9
+ // Docs
10
+ /**
11
+ * ✅ Get the users followed by the user.
12
+ * @category User
13
+ * @alias getFollowings
14
+ * @param {number} userId - The id of the user.
15
+ * @param {Limit=} [limit=10] - The amount of users fetched by each request (10, 25, 50, 100)
16
+ * @param {SortOrder=} [sortOrder=Asc] - The order that the returned data will be sorted by (Asc or Desc)
17
+ * @param {string=} cursor - The previous or next page's cursor.
18
+ * @returns {Promise<FollowingsPage>}
19
+ * @example const noblox = require("noblox.js")
20
+ * let following = await noblox.getFollowings(123456, "Asc", 50)
21
+ **/
22
+
23
+ // Define
24
+ function getFollowings (jar, userId, sortOrder, limit, cursor) {
25
+ return new Promise((resolve, reject) => {
26
+ const httpOpt = {
27
+ url: `//friends.roblox.com/v1/users/${userId}/followings?limit=${limit}&sortOrder=${sortOrder}&cursor=${cursor}`,
28
+ options: {
29
+ method: 'GET',
30
+ jar,
31
+ resolveWithFullResponse: true
32
+ }
33
+ }
34
+ return http(httpOpt)
35
+ .then(function (res) {
36
+ if (res.statusCode === 200) {
37
+ const response = JSON.parse(res.body)
38
+ response.data = response.data.map((entry) => {
39
+ entry.created = new Date(entry.created)
40
+ return entry
41
+ })
42
+ resolve(response)
43
+ } else {
44
+ reject(new RobloxAPIError(res))
45
+ }
46
+ })
47
+ })
48
+ }
49
+
50
+ exports.func = function (args) {
51
+ const jar = args.jar
52
+ const sortOrder = args.sortOrder || 'Asc'
53
+ const limit = args.limit || (10).toString()
54
+ const cursor = args.cursor || ''
55
+ return getFollowings(jar, args.userId, sortOrder, limit, cursor)
56
+ }
@@ -0,0 +1,35 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = ['userId']
7
+
8
+ // Docs
9
+ /**
10
+ * ✅ Gets the number of friends a user has.
11
+ * @category User
12
+ * @alias getFriendCount
13
+ * @param { number } userId
14
+ * @returns Promise<number>
15
+ * @example const noblox = require("noblox.js")
16
+ * const numberOfFriends = await noblox.getFriendCount(55549140)
17
+ **/
18
+
19
+ // Define
20
+ exports.func = function (args) {
21
+ const httpOpt = {
22
+ url: `//friends.roblox.com/v1/users/${args.userId}/friends/count`,
23
+ options: {
24
+ json: true,
25
+ method: 'GET',
26
+ resolveWithFullResponse: true
27
+ }
28
+ }
29
+
30
+ return http(httpOpt).then(function (res) {
31
+ if (res.statusCode === 200) { return res.body.count }
32
+
33
+ throw new RobloxAPIError(res)
34
+ })
35
+ }
@@ -0,0 +1,51 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = []
7
+ exports.optional = ['sortOrder', 'limit', 'cursor', 'jar']
8
+
9
+ // Docs
10
+ /**
11
+ * 🔐 Get the friend requests of the authenticated user.
12
+ * @category User
13
+ * @alias getFriendRequests
14
+ * @param {SortOrder=} [sortOrder=Asc] - The order of the returned data (Asc or Desc)
15
+ * @param {Limit=} [limit=10] - The number of users returned by each request.
16
+ * @param {string=} cursor - The previous or next page's cursor.
17
+ * @returns {Promise<FriendRequestsPage>}
18
+ * @example const noblox = require("noblox.js")
19
+ * // Login using your cookie
20
+ * let friendRequests = await noblox.getFriendRequests({sortOrder: "Desc", limit: 100})
21
+ **/
22
+
23
+ // Define
24
+ function getFriendsRequests (args) {
25
+ return new Promise((resolve, reject) => {
26
+ const jar = args.jar
27
+ const httpOpt = {
28
+ url: '//friends.roblox.com/v1/my/friends/requests',
29
+ options: {
30
+ method: 'GET',
31
+ jar,
32
+ resolveWithFullResponse: true
33
+ }
34
+ }
35
+ return http(httpOpt)
36
+ .then(function (res) {
37
+ if (res.statusCode === 200) {
38
+ const response = JSON.parse(res.body)
39
+ response.data = response.data.map((entry) => {
40
+ entry.created = new Date(entry.created)
41
+ return entry
42
+ })
43
+ resolve(response)
44
+ } else {
45
+ reject(new RobloxAPIError(res))
46
+ }
47
+ })
48
+ })
49
+ }
50
+
51
+ exports.func = getFriendsRequests
@@ -0,0 +1,48 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+ // Args
5
+ exports.required = ['userId']
6
+ exports.optional = ['jar']
7
+
8
+ // Docs
9
+ /**
10
+ * ✅ Get the friends of a user
11
+ * @category User
12
+ * @alias getFriends
13
+ * @param {number} userId - The id of the user whose friends are being returned.
14
+ * @returns {Promise<Friends>}
15
+ * @example const noblox = require("noblox.js")
16
+ * let friends = await noblox.getFriends(123456)
17
+ **/
18
+
19
+ // Define
20
+ function getFriends (jar, userId) {
21
+ return new Promise((resolve, reject) => {
22
+ const httpOpt = {
23
+ url: `//friends.roblox.com/v1/users/${userId}/friends`,
24
+ options: {
25
+ method: 'GET',
26
+ jar,
27
+ resolveWithFullResponse: true
28
+ }
29
+ }
30
+ return http(httpOpt)
31
+ .then(function (res) {
32
+ if (res.statusCode === 200) {
33
+ const response = JSON.parse(res.body)
34
+ response.data = response.data.map((entry) => {
35
+ entry.created = new Date(entry.created)
36
+ return entry
37
+ })
38
+ resolve(response)
39
+ } else {
40
+ reject(new RobloxAPIError(res))
41
+ }
42
+ })
43
+ })
44
+ }
45
+
46
+ exports.func = function (args) {
47
+ return getFriends(args.jar, args.userId)
48
+ }
@@ -0,0 +1,58 @@
1
+ // Dependencies
2
+ const events = require('events')
3
+
4
+ // Includes
5
+ const onNotification = require('../client/onNotification.js').func
6
+
7
+ // Args
8
+ exports.optional = ['jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 An event for when a user sends you a friend request.
13
+ * @category User
14
+ * @alias onFriendRequest
15
+ * @returns An EventEmitter that emits when a user sends you a friend request.
16
+ * @example const noblox = require("noblox.js")
17
+ * // Login using your cookie
18
+ *
19
+ * const friendRequestEvent = noblox.onFriendRequest()
20
+ * friendRequestEvent.on("data", function(data) {
21
+ * console.log("New friend request! ", data)
22
+ * })
23
+ * friendRequestEvent.on("error", function(err) {
24
+ * console.error("Something went wrong: ", err)
25
+ * // Handle error as needed
26
+ * })
27
+ **/
28
+
29
+ // Define
30
+ exports.func = function (args) {
31
+ const jar = args.jar
32
+ const onFriendRequest = new events.EventEmitter()
33
+ const notifications = onNotification({ jar })
34
+ notifications.on('data', function (name, message) {
35
+ if (name === 'FriendshipNotifications' && message.Type === 'FriendshipRequested') {
36
+ onFriendRequest.emit('data', message.EventArgs.UserId1)
37
+ }
38
+ })
39
+ notifications.on('error', function (err) {
40
+ onFriendRequest.emit('error', err)
41
+ })
42
+ notifications.on('connect', function () {
43
+ onFriendRequest.emit('connect')
44
+ })
45
+ notifications.on('close', function (internal) {
46
+ if (internal) {
47
+ return
48
+ }
49
+ onFriendRequest.emit('close', true)
50
+ })
51
+ onFriendRequest.on('close', function (internal) {
52
+ if (internal) {
53
+ return
54
+ }
55
+ notifications.emit('close', true)
56
+ })
57
+ return onFriendRequest
58
+ }
@@ -0,0 +1,53 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const getGeneralToken = require('../util/getGeneralToken.js').func
4
+ const RobloxAPIError = require('../util/apiError.js')
5
+
6
+ // Args
7
+ exports.required = ['userId']
8
+ exports.optional = ['jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Remove a user from your friends list.
13
+ * @category User
14
+ * @alias removeFriend
15
+ * @param {number} userId - The id of the user.
16
+ * @returns {Promise<void>}
17
+ * @example const noblox = require("noblox.js")
18
+ * // Login using your cookie
19
+ * noblox.removeFriend(123456)
20
+ **/
21
+
22
+ // Define
23
+ function removeFriend (jar, token, userId) {
24
+ return new Promise((resolve, reject) => {
25
+ const httpOpt = {
26
+ url: `//friends.roblox.com/v1/users/${userId}/unfriend`,
27
+ options: {
28
+ method: 'POST',
29
+ jar,
30
+ headers: {
31
+ 'X-CSRF-TOKEN': token
32
+ },
33
+ resolveWithFullResponse: true
34
+ }
35
+ }
36
+ return http(httpOpt)
37
+ .then(function (res) {
38
+ if (res.statusCode === 200) {
39
+ resolve()
40
+ } else {
41
+ reject(new RobloxAPIError(res))
42
+ }
43
+ })
44
+ })
45
+ }
46
+
47
+ exports.func = function (args) {
48
+ const jar = args.jar
49
+ return getGeneralToken({ jar })
50
+ .then(function (xcsrf) {
51
+ return removeFriend(jar, xcsrf, args.userId)
52
+ })
53
+ }