noblox.ts 4.10.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of noblox.ts might be problematic. Click here for more details.

Files changed (259) hide show
  1. package/.eslintrc.js +21 -0
  2. package/.github/FUNDING.yml +3 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  5. package/.github/workflows/doc-publish.yml +33 -0
  6. package/.github/workflows/npmpublish.yml +70 -0
  7. package/.travis.yml +13 -0
  8. package/CODE_OF_CONDUCT.md +76 -0
  9. package/LICENSE +21 -0
  10. package/README.md +168 -0
  11. package/examples/cleanPlayers.js +130 -0
  12. package/examples/cleanWall.js +110 -0
  13. package/examples/revertRanks.js +100 -0
  14. package/examples/savePlayers.js +119 -0
  15. package/examples/saveWall.js +96 -0
  16. package/img/moderatedThumbnails/moderatedThumbnail_100x100.png +0 -0
  17. package/img/moderatedThumbnails/moderatedThumbnail_110x110.png +0 -0
  18. package/img/moderatedThumbnails/moderatedThumbnail_140x140.png +0 -0
  19. package/img/moderatedThumbnails/moderatedThumbnail_150x150.png +0 -0
  20. package/img/moderatedThumbnails/moderatedThumbnail_150x200.png +0 -0
  21. package/img/moderatedThumbnails/moderatedThumbnail_180x180.png +0 -0
  22. package/img/moderatedThumbnails/moderatedThumbnail_250x250.png +0 -0
  23. package/img/moderatedThumbnails/moderatedThumbnail_30x30.png +0 -0
  24. package/img/moderatedThumbnails/moderatedThumbnail_352x352.png +0 -0
  25. package/img/moderatedThumbnails/moderatedThumbnail_420x420.png +0 -0
  26. package/img/moderatedThumbnails/moderatedThumbnail_48x48.png +0 -0
  27. package/img/moderatedThumbnails/moderatedThumbnail_50x50.png +0 -0
  28. package/img/moderatedThumbnails/moderatedThumbnail_60x60.png +0 -0
  29. package/img/moderatedThumbnails/moderatedThumbnail_720x720.png +0 -0
  30. package/img/moderatedThumbnails/moderatedThumbnail_75x75.png +0 -0
  31. package/img/noblox-js-small.png +0 -0
  32. package/img/noblox-js.png +0 -0
  33. package/img/thumbnailSizes.png +0 -0
  34. package/jsDocsConfig.json +55 -0
  35. package/lib/accountinformation/getUserSocialLinks.js +42 -0
  36. package/lib/accountsettings/block.js +58 -0
  37. package/lib/accountsettings/unblock.js +58 -0
  38. package/lib/asset/deleteFromInventory.js +69 -0
  39. package/lib/asset/getGamePassProductInfo.js +51 -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 +65 -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/getGameRevenue.js +49 -0
  133. package/lib/games/getGameSocialLinks.js +45 -0
  134. package/lib/games/getGroupGames.js +30 -0
  135. package/lib/games/getPlaceInfo.js +48 -0
  136. package/lib/games/getUniverseInfo.js +51 -0
  137. package/lib/games/updateDeveloperProduct.js +69 -0
  138. package/lib/groups/changeRank.js +59 -0
  139. package/lib/groups/deleteWallPost.js +64 -0
  140. package/lib/groups/deleteWallPostsByUser.js +59 -0
  141. package/lib/groups/demote.js +25 -0
  142. package/lib/groups/exile.js +59 -0
  143. package/lib/groups/getAuditLog.js +67 -0
  144. package/lib/groups/getGroup.js +57 -0
  145. package/lib/groups/getGroupSocialLinks.js +44 -0
  146. package/lib/groups/getGroups.js +88 -0
  147. package/lib/groups/getJoinRequest.js +52 -0
  148. package/lib/groups/getJoinRequests.js +58 -0
  149. package/lib/groups/getPlayers.js +108 -0
  150. package/lib/groups/getRankInGroup.js +52 -0
  151. package/lib/groups/getRankNameInGroup.js +52 -0
  152. package/lib/groups/getRole.js +64 -0
  153. package/lib/groups/getRolePermissions.js +51 -0
  154. package/lib/groups/getRoles.js +56 -0
  155. package/lib/groups/getShout.js +49 -0
  156. package/lib/groups/getWall.js +59 -0
  157. package/lib/groups/groupPayout.js +103 -0
  158. package/lib/groups/handleJoinRequest.js +60 -0
  159. package/lib/groups/leaveGroup.js +60 -0
  160. package/lib/groups/onAuditLog.js +62 -0
  161. package/lib/groups/onJoinRequest.js +63 -0
  162. package/lib/groups/onJoinRequestHandle.js +105 -0
  163. package/lib/groups/onShout.js +57 -0
  164. package/lib/groups/onWallPost.js +58 -0
  165. package/lib/groups/promote.js +25 -0
  166. package/lib/groups/searchGroups.js +32 -0
  167. package/lib/groups/setGroupDescription.js +65 -0
  168. package/lib/groups/setGroupName.js +66 -0
  169. package/lib/groups/setRank.js +79 -0
  170. package/lib/groups/shout.js +65 -0
  171. package/lib/index.js +30 -0
  172. package/lib/internal/levelOneCopy.js +16 -0
  173. package/lib/internal/queue.js +61 -0
  174. package/lib/internal/timeout.js +30 -0
  175. package/lib/internal/wrap.js +78 -0
  176. package/lib/inventory/getCollectibles.js +31 -0
  177. package/lib/inventory/getInventory.js +32 -0
  178. package/lib/inventory/getInventoryById.js +31 -0
  179. package/lib/inventory/getOwnership.js +54 -0
  180. package/lib/inventory/getUAIDs.js +47 -0
  181. package/lib/itemconfiguration/getGroupAssets.js +32 -0
  182. package/lib/options.js +26 -0
  183. package/lib/party/onPartyDeleted.js +53 -0
  184. package/lib/party/onPartyInvite.js +53 -0
  185. package/lib/party/onPartyJoinedGame.js +53 -0
  186. package/lib/party/onPartyLeftGame.js +53 -0
  187. package/lib/party/onPartySelfJoined.js +53 -0
  188. package/lib/party/onPartySelfLeft.js +53 -0
  189. package/lib/party/onPartyUserJoined.js +53 -0
  190. package/lib/party/onPartyUserLeft.js +53 -0
  191. package/lib/premiumfeatures/getPremium.js +51 -0
  192. package/lib/presence/getPresences.js +63 -0
  193. package/lib/privatemessages/getMessages.js +60 -0
  194. package/lib/privatemessages/message.js +80 -0
  195. package/lib/privatemessages/onMessage.js +88 -0
  196. package/lib/thumbnails/getLogo.js +60 -0
  197. package/lib/thumbnails/getPlayerThumbnail.js +121 -0
  198. package/lib/thumbnails/getThumbnails.js +93 -0
  199. package/lib/trades/acceptTrade.js +58 -0
  200. package/lib/trades/canTradeWith.js +48 -0
  201. package/lib/trades/counterTrade.js +84 -0
  202. package/lib/trades/declineTrade.js +58 -0
  203. package/lib/trades/getTradeInfo.js +52 -0
  204. package/lib/trades/getTrades.js +37 -0
  205. package/lib/trades/sendTrade.js +82 -0
  206. package/lib/users/getBlurb.js +36 -0
  207. package/lib/users/getIdFromUsername.js +53 -0
  208. package/lib/users/getPlayerInfo.js +100 -0
  209. package/lib/users/getUsernameFromId.js +44 -0
  210. package/lib/users/onBlurbChange.js +46 -0
  211. package/lib/util/clearSession.js +32 -0
  212. package/lib/util/generalRequest.js +61 -0
  213. package/lib/util/getAction.js +45 -0
  214. package/lib/util/getCurrentUser.js +44 -0
  215. package/lib/util/getGeneralToken.js +52 -0
  216. package/lib/util/getHash.js +29 -0
  217. package/lib/util/getInputs.js +37 -0
  218. package/lib/util/getPageResults.js +89 -0
  219. package/lib/util/getSenderUserId.js +30 -0
  220. package/lib/util/getSession.js +38 -0
  221. package/lib/util/getVerification.js +60 -0
  222. package/lib/util/getVerificationInputs.js +31 -0
  223. package/lib/util/http.js +110 -0
  224. package/lib/util/jar.js +24 -0
  225. package/lib/util/refreshCookie.js +52 -0
  226. package/lib/util/relog.js +81 -0
  227. package/lib/util/setOptions.js +54 -0
  228. package/lib/util/shortPoll.js +102 -0
  229. package/lib/util/threaded.js +80 -0
  230. package/package.json +94 -0
  231. package/postinstall.js +1 -0
  232. package/settings.json +107 -0
  233. package/test/accountinformation.test.js +27 -0
  234. package/test/accountsettings.test.js +27 -0
  235. package/test/asset.test.js +81 -0
  236. package/test/assets/Great-White-Shark-Fin.rbxm +0 -0
  237. package/test/assets/KeyframeSequence.rbxm +0 -0
  238. package/test/avatar.test.js +164 -0
  239. package/test/badges.test.js +96 -0
  240. package/test/chat.test.js +104 -0
  241. package/test/datastore.test.js +105 -0
  242. package/test/develop.test.js +53 -0
  243. package/test/economy.test.js +137 -0
  244. package/test/friends.test.js +128 -0
  245. package/test/games.test.js +212 -0
  246. package/test/groups.test.js +311 -0
  247. package/test/inventory.test.js +98 -0
  248. package/test/itemconfiguration.test.js +24 -0
  249. package/test/premiumfeatures.test.js +17 -0
  250. package/test/presence.test.js +25 -0
  251. package/test/privatemessages.test.js +33 -0
  252. package/test/thumbnails.test.js +53 -0
  253. package/test/users.test.js +68 -0
  254. package/tutorials/Authentication.md +75 -0
  255. package/tutorials/Event Emitters.md +26 -0
  256. package/tutorials/Promises.md +86 -0
  257. package/tutorials/VPS Authentication.md +72 -0
  258. package/typings/index.d.ts +2525 -0
  259. package/typings/jsDocs.ts +1927 -0
@@ -0,0 +1,53 @@
1
+ const events = require('events')
2
+
3
+ const onNotification = require('../client/onNotification.js').func
4
+
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 An event for when a party joins a game.
10
+ * @category Party
11
+ * @alias onPartyJoinedGame
12
+ * @returns An EventEmitter that emits when a party joins a game.
13
+ * @example const noblox = require("noblox.js")
14
+ * // Login using your cookie
15
+ * const partyJoinedGame = noblox.onPartyJoinedGame()
16
+ * partyJoinedGame.on("data", function(data) {
17
+ * console.log("Party joined game! ", data)
18
+ * })
19
+ * partyJoinedGame.on("error", function(err) {
20
+ * console.error("Something went wrong: ", err)
21
+ * // Handle error as needed
22
+ * })
23
+ **/
24
+
25
+ exports.func = (args) => {
26
+ const jar = args.jar
27
+ const newEvent = new events.EventEmitter()
28
+ const notifications = onNotification({ jar: jar })
29
+
30
+ notifications.on('data', (name, message) => {
31
+ if (name === 'PartyNotifications' && message.Type === 'PartyJoinedGame') {
32
+ newEvent.emit('data', {
33
+ PartyId: message.PartyId,
34
+ PartyType: message.PartyType
35
+ })
36
+ }
37
+ })
38
+
39
+ notifications.on('error', (err) => {
40
+ newEvent.emit('error', err)
41
+ })
42
+
43
+ notifications.on('connect', () => {
44
+ newEvent.emit('connect')
45
+ })
46
+
47
+ notifications.on('close', (internal) => {
48
+ if (internal) return
49
+ notifications.emit('close', true)
50
+ })
51
+
52
+ return newEvent
53
+ }
@@ -0,0 +1,53 @@
1
+ const events = require('events')
2
+
3
+ const onNotification = require('../client/onNotification.js').func
4
+
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 An event for when a party leaves a game.
10
+ * @category Party
11
+ * @alias onPartyLeftGame
12
+ * @returns An EventEmitter that emits when a party leaves a game.
13
+ * @example const noblox = require("noblox.js")
14
+ * // Login using your cookie
15
+ * const partyLeftGame = noblox.onPartyLeftGame()
16
+ * partyLeftGame.on("data", function(data) {
17
+ * console.log("Party left game! ", data)
18
+ * })
19
+ * partyLeftGame.on("error", function(err) {
20
+ * console.error("Something went wrong: ", err)
21
+ * // Handle error as needed
22
+ * })
23
+ **/
24
+
25
+ exports.func = (args) => {
26
+ const jar = args.jar
27
+ const newEvent = new events.EventEmitter()
28
+ const notifications = onNotification({ jar: jar })
29
+
30
+ notifications.on('data', (name, message) => {
31
+ if (name === 'PartyNotifications' && message.Type === 'PartyLeftGame') {
32
+ newEvent.emit('data', {
33
+ PartyId: message.PartyId,
34
+ PartyType: message.PartyType
35
+ })
36
+ }
37
+ })
38
+
39
+ notifications.on('error', (err) => {
40
+ newEvent.emit('error', err)
41
+ })
42
+
43
+ notifications.on('connect', () => {
44
+ newEvent.emit('connect')
45
+ })
46
+
47
+ notifications.on('close', (internal) => {
48
+ if (internal) return
49
+ notifications.emit('close', true)
50
+ })
51
+
52
+ return newEvent
53
+ }
@@ -0,0 +1,53 @@
1
+ const events = require('events')
2
+
3
+ const onNotification = require('../client/onNotification.js').func
4
+
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 An event for when you join a party.
10
+ * @category Party
11
+ * @alias onPartySelfJoined
12
+ * @returns An EventEmitter that emits when you join a party.
13
+ * @example const noblox = require("noblox.js")
14
+ * // Login using your cookie
15
+ * const joinedParty = noblox.onPartySelfJoined()
16
+ * joinedParty.on("data", function(data) {
17
+ * console.log("You joined a party! ", data)
18
+ * })
19
+ * joinedParty.on("error", function(err) {
20
+ * console.error("Something went wrong: ", err)
21
+ * // Handle error as needed
22
+ * })
23
+ **/
24
+
25
+ exports.func = (args) => {
26
+ const jar = args.jar
27
+ const newEvent = new events.EventEmitter()
28
+ const notifications = onNotification({ jar: jar })
29
+
30
+ notifications.on('data', (name, message) => {
31
+ if (name === 'PartyNotifications' && message.Type === 'IJoinedParty') {
32
+ newEvent.emit('data', {
33
+ PartyId: message.PartyId,
34
+ PartyType: message.PartyType
35
+ })
36
+ }
37
+ })
38
+
39
+ notifications.on('error', (err) => {
40
+ newEvent.emit('error', err)
41
+ })
42
+
43
+ notifications.on('connect', () => {
44
+ newEvent.emit('connect')
45
+ })
46
+
47
+ notifications.on('close', (internal) => {
48
+ if (internal) return
49
+ notifications.emit('close', true)
50
+ })
51
+
52
+ return newEvent
53
+ }
@@ -0,0 +1,53 @@
1
+ const events = require('events')
2
+
3
+ const onNotification = require('../client/onNotification.js').func
4
+
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 An event for when you leave a party.
10
+ * @category Party
11
+ * @alias onPartySelfLeft
12
+ * @returns An EventEmitter that emits when you leave a party.
13
+ * @example const noblox = require("noblox.js")
14
+ * // Login using your cookie
15
+ * const leftParty = noblox.onPartySelfLeft()
16
+ * leftParty.on("data", function(data) {
17
+ * console.log("You left a party! ", data)
18
+ * })
19
+ * leftParty.on("error", function(err) {
20
+ * console.error("Something went wrong: ", err)
21
+ * // Handle error as needed
22
+ * })
23
+ **/
24
+
25
+ exports.func = (args) => {
26
+ const jar = args.jar
27
+ const newEvent = new events.EventEmitter()
28
+ const notifications = onNotification({ jar: jar })
29
+
30
+ notifications.on('data', (name, message) => {
31
+ if (name === 'PartyNotifications' && message.Type === 'ILeftParty') {
32
+ newEvent.emit('data', {
33
+ PartyId: message.PartyId,
34
+ PartyType: message.PartyType
35
+ })
36
+ }
37
+ })
38
+
39
+ notifications.on('error', (err) => {
40
+ newEvent.emit('error', err)
41
+ })
42
+
43
+ notifications.on('connect', () => {
44
+ newEvent.emit('connect')
45
+ })
46
+
47
+ notifications.on('close', (internal) => {
48
+ if (internal) return
49
+ notifications.emit('close', true)
50
+ })
51
+
52
+ return newEvent
53
+ }
@@ -0,0 +1,53 @@
1
+ const events = require('events')
2
+
3
+ const onNotification = require('../client/onNotification.js').func
4
+
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 An event for when someone joins a party.
10
+ * @category Party
11
+ * @alias onPartyUserJoined
12
+ * @returns An EventEmitter that emits when someone joins a party.
13
+ * @example const noblox = require("noblox.js")
14
+ * // Login using your cookie
15
+ * const partyJoined = noblox.onPartyUserJoined()
16
+ * partyJoined.on("data", function(data) {
17
+ * console.log("Someone joined a party! ", data)
18
+ * })
19
+ * partyJoined.on("error", function(err) {
20
+ * console.error("Something went wrong: ", err)
21
+ * // Handle error as needed
22
+ * })
23
+ **/
24
+
25
+ exports.func = (args) => {
26
+ const jar = args.jar
27
+ const newEvent = new events.EventEmitter()
28
+ const notifications = onNotification({ jar: jar })
29
+
30
+ notifications.on('data', (name, message) => {
31
+ if (name === 'PartyNotifications' && message.Type === 'PartyUserJoined') {
32
+ newEvent.emit('data', {
33
+ PartyId: message.PartyId,
34
+ PartyType: message.PartyType
35
+ })
36
+ }
37
+ })
38
+
39
+ notifications.on('error', (err) => {
40
+ newEvent.emit('error', err)
41
+ })
42
+
43
+ notifications.on('connect', () => {
44
+ newEvent.emit('connect')
45
+ })
46
+
47
+ notifications.on('close', (internal) => {
48
+ if (internal) return
49
+ notifications.emit('close', true)
50
+ })
51
+
52
+ return newEvent
53
+ }
@@ -0,0 +1,53 @@
1
+ const events = require('events')
2
+
3
+ const onNotification = require('../client/onNotification.js').func
4
+
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 An event for when someone leaves a party.
10
+ * @category Party
11
+ * @alias onPartyUserLeft
12
+ * @returns An EventEmitter that emits when someone leaves a party.
13
+ * @example const noblox = require("noblox.js")
14
+ * // Login using your cookie
15
+ * const partyLeft = noblox.onPartyUserLeft()
16
+ * partyLeft.on("data", function(data) {
17
+ * console.log("Someone left party! ", data)
18
+ * })
19
+ * partyLeft.on("error", function(err) {
20
+ * console.error("Something went wrong: ", err)
21
+ * // Handle error as needed
22
+ * })
23
+ **/
24
+
25
+ exports.func = (args) => {
26
+ const jar = args.jar
27
+ const newEvent = new events.EventEmitter()
28
+ const notifications = onNotification({ jar: jar })
29
+
30
+ notifications.on('data', (name, message) => {
31
+ if (name === 'PartyNotifications' && message.Type === 'PartyUserLeft') {
32
+ newEvent.emit('data', {
33
+ PartyId: message.PartyId,
34
+ PartyType: message.PartyType
35
+ })
36
+ }
37
+ })
38
+
39
+ notifications.on('error', (err) => {
40
+ newEvent.emit('error', err)
41
+ })
42
+
43
+ notifications.on('connect', () => {
44
+ newEvent.emit('connect')
45
+ })
46
+
47
+ notifications.on('close', (internal) => {
48
+ if (internal) return
49
+ notifications.emit('close', true)
50
+ })
51
+
52
+ return newEvent
53
+ }
@@ -0,0 +1,51 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+
4
+ // Args
5
+ exports.required = ['userId']
6
+ exports.optional = ['jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔐 Gets whether or not a user has premium.
11
+ * @category User
12
+ * @alias getPremium
13
+ * @param {number} userId - The id of the user.
14
+ * @returns {Promise<boolean>}
15
+ * @example const noblox = require("noblox.js")
16
+ * // Login using your cookie
17
+ * const hasPremium = await noblox.getPremium(123456)
18
+ **/
19
+
20
+ // Define
21
+ function getPremium (jar, userId) {
22
+ return new Promise((resolve, reject) => {
23
+ const httpOpt = {
24
+ url: `https://premiumfeatures.roblox.com/v1/users/${userId}/validate-membership`,
25
+ options: {
26
+ method: 'GET',
27
+ jar: jar,
28
+ resolveWithFullResponse: true
29
+ }
30
+ }
31
+ return http(httpOpt)
32
+ .then(function (res) {
33
+ if (res.statusCode === 200) {
34
+ resolve(res.body === 'true')
35
+ } else {
36
+ const body = JSON.parse(res.body) || {}
37
+ if (body.errors && body.errors.length > 0) {
38
+ const errors = body.errors.map((e) => {
39
+ return e.message
40
+ })
41
+ reject(new Error(`${res.statusCode} ${errors.join(', ')}`))
42
+ }
43
+ }
44
+ })
45
+ })
46
+ }
47
+
48
+ exports.func = function (args) {
49
+ const jar = args.jar
50
+ return getPremium(jar, args.userId)
51
+ }
@@ -0,0 +1,63 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const getGeneralToken = require('../util/getGeneralToken.js').func
4
+
5
+ // Args
6
+ exports.required = ['userIds']
7
+ exports.optional = []
8
+
9
+ // Docs
10
+ /**
11
+ * 🔐 Get the presence status of users.
12
+ * @category Presence
13
+ * @alias getPresences
14
+ * @param {Array<number>} userIds - An array of userIds.
15
+ * @returns {Promise<Presences>}
16
+ * @example const noblox = require("noblox.js")
17
+ * // Login using your cookie
18
+ * const presences = await noblox.getPresences([1, 2, 3])
19
+ **/
20
+
21
+ // Define
22
+ function getPresences (userIds, jar, xcsrf) {
23
+ return new Promise((resolve, reject) => {
24
+ const httpOpt = {
25
+ url: '//presence.roblox.com/v1/presence/users',
26
+ options: {
27
+ method: 'POST',
28
+ resolveWithFullResponse: true,
29
+ jar: jar,
30
+ headers: {
31
+ 'X-CSRF-TOKEN': xcsrf,
32
+ 'Content-Type': 'application/json'
33
+ },
34
+ body: JSON.stringify({
35
+ userIds
36
+ })
37
+ }
38
+ }
39
+
40
+ return http(httpOpt)
41
+ .then(function (res) {
42
+ const responseData = JSON.parse(res.body)
43
+ if (res.statusCode !== 200) {
44
+ let error = 'An unknown error has occurred.'
45
+ if (responseData && responseData.errors) {
46
+ error = responseData.errors.map((e) => e.message).join('\n')
47
+ }
48
+ reject(new Error(error))
49
+ } else {
50
+ resolve(responseData)
51
+ }
52
+ })
53
+ .catch(error => reject(error))
54
+ })
55
+ }
56
+
57
+ exports.func = function (args) {
58
+ const jar = args.jar
59
+ return getGeneralToken({ jar: jar })
60
+ .then(function (xcsrf) {
61
+ return getPresences(args.userIds, args.jar, xcsrf)
62
+ })
63
+ }
@@ -0,0 +1,60 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ // Args
4
+ exports.required = []
5
+ exports.optional = ['pageNumber', 'pageSize', 'messageTab', 'jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 Get the messages of the authenticated user.
10
+ * @category User
11
+ * @alias getMessages
12
+ * @param {number=} [pageNumber=0] - The number of the current page.
13
+ * @param {number=} [pageSize=25] - The size of the current page.
14
+ * @param {("Inbox" | "Sent" | "Archive")=} [messageTab=Inbox] - The tab of the messages being fetched (Inbox, Sent, Archive)
15
+ * @returns {Promise<PrivateMessagesPage>}
16
+ * @example const noblox = require("noblox.js")
17
+ * // Login using your cookie
18
+ * let messages = await noblox.getMessages(1, 10, "Inbox"))
19
+ **/
20
+
21
+ // Define
22
+ function getMessages (jar, token, pageNumber, pageSize, messageTab) {
23
+ return new Promise((resolve, reject) => {
24
+ const httpOpt = {
25
+ url: `//privatemessages.roblox.com/v1/messages?pageNumber=${pageNumber}&pageSize=${pageSize}&messageTab=${messageTab}`,
26
+ options: {
27
+ method: 'GET',
28
+ jar: jar,
29
+ resolveWithFullResponse: true
30
+ }
31
+ }
32
+ return http(httpOpt)
33
+ .then(function (res) {
34
+ if (res.statusCode === 200) {
35
+ resolve(JSON.parse(res.body))
36
+ } else {
37
+ const body = JSON.parse(res.body) || {}
38
+ if (body.errors && body.errors.length > 0) {
39
+ const errors = body.errors.map((e) => {
40
+ return e.message
41
+ })
42
+ reject(new Error(`${res.statusCode} ${errors.join(', ')}`))
43
+ }
44
+ }
45
+ })
46
+ })
47
+ }
48
+
49
+ exports.func = function (args) {
50
+ const jar = args.jar
51
+ const pageNumber = (args.pageNumber && args.pageNumber.toString()) || '0'
52
+ const pageSize = (args.pageSize && args.pageSize.toString()) || '25'
53
+ const messageTab = args.messageTab || 'Inbox'
54
+ if (!['Inbox', 'Sent', 'Archive'].includes(messageTab)) {
55
+ return new Promise((resolve, reject) => {
56
+ reject(new Error('messageTab must be Inbox, Sent, or Archive'))
57
+ })
58
+ }
59
+ return getMessages(jar, pageNumber, pageSize, messageTab)
60
+ }
@@ -0,0 +1,80 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const queue = require('../internal/queue.js')
4
+ const getGeneralToken = require('../util/getGeneralToken.js').func
5
+ const getHash = require('../util/getHash.js').func
6
+ const getSenderId = require('../util/getSenderUserId.js').func
7
+
8
+ // Args
9
+ exports.required = ['recipient', 'subject', 'body']
10
+ exports.optional = ['replyMessageId', 'includePreviousMessage', 'jar']
11
+
12
+ // Docs
13
+ /**
14
+ * 🔐 Send a message. NOTE: Roblox blocks web servers and proxies from sending messages.
15
+ * @category User
16
+ * @alias message
17
+ * @param {number} recipient - The id of the user.
18
+ * @param {string} subject - The subject of the message.
19
+ * @param {string} body - The body of the message.
20
+ * @param {number=} replyMessageId - The messageId to reply to.
21
+ * @param {boolean=} [includePreviousMessage=false] - The previous or next page cursor.
22
+ * @returns {Promise<void>}
23
+ * @example const noblox = require("noblox.js")
24
+ * // Login using your cookie
25
+ * noblox.message(1, "A subject", "A body", 1234, true)
26
+ **/
27
+
28
+ // Define
29
+ function message (jar, token, senderId, recipient, subject, body, replyMessageId, includePreviousMessage) {
30
+ return new Promise((resolve, reject) => {
31
+ const httpOpt = {
32
+ url: '//privatemessages.roblox.com/v1/messages/send',
33
+ options: {
34
+ method: 'POST',
35
+ jar: jar,
36
+ headers: {
37
+ 'X-CSRF-TOKEN': token,
38
+ 'Content-Type': 'application/json'
39
+ },
40
+ body: JSON.stringify({
41
+ userId: senderId,
42
+ recipientId: recipient,
43
+ subject,
44
+ body,
45
+ replyMessageId,
46
+ includePreviousMessage
47
+ }),
48
+ resolveWithFullResponse: true
49
+ }
50
+ }
51
+ return http(httpOpt)
52
+ .then(function (res) {
53
+ if (res.statusCode === 200) {
54
+ resolve(JSON.parse(res.body))
55
+ } else {
56
+ const body = JSON.parse(res.body) || {}
57
+ if (body.errors && body.errors.length > 0) {
58
+ const errors = body.errors.map((e) => {
59
+ return e.message
60
+ })
61
+ reject(new Error(`${res.statusCode} ${errors.join(', ')}`))
62
+ }
63
+ }
64
+ })
65
+ })
66
+ }
67
+
68
+ exports.func = function (args) {
69
+ const jar = args.jar
70
+ return queue('Message', getHash({ jar: jar }), function () {
71
+ return getGeneralToken({ jar: jar })
72
+ .then(function (xcsrf) {
73
+ return getSenderId({ jar: jar }).then((senderId) => {
74
+ return message(jar, xcsrf, senderId, args.recipient, args.subject, args.body, args.replyMessageId, args.includePreviousMessage)
75
+ })
76
+ })
77
+ }, function () {
78
+ return true
79
+ })
80
+ }
@@ -0,0 +1,88 @@
1
+ // Dependencies
2
+ const events = require('events')
3
+
4
+ // Includes
5
+ const onNotification = require('../client/onNotification.js').func
6
+ const getMessages = require('./getMessages.js').func
7
+
8
+ // Args
9
+ exports.optional = ['jar']
10
+
11
+ // Docs
12
+ /**
13
+ * 🔐 An event for when a user sends you a message via. the older 'email-like' message system. To receive chat messages,
14
+ * see the `onNewMessage` method.
15
+ * @see [onNewMessage()](global.html#onNewMessage).
16
+ * @category User
17
+ * @alias onMessage
18
+ * @returns An EventEmitter that emits when a user sends you a message.
19
+ * @example const noblox = require("noblox.js")
20
+ * // Login using your cookie
21
+ * const messageEvent = noblox.onMessage()
22
+ * messageEvent.on("data", function(data) {
23
+ * console.log("New message! ", data)
24
+ * })
25
+ * messageEvent.on("error", function(err) {
26
+ * console.error("Something went wrong: ", err)
27
+ * // Handle error as needed
28
+ * })
29
+ **/
30
+
31
+ // Define
32
+ exports.func = function (args) {
33
+ const jar = args.jar
34
+ const onMessage = new events.EventEmitter()
35
+ let waitingForRequest = false
36
+ let latest
37
+ getMessages({ jar: jar, messageTab: 'Inbox', pageNumber: 0 })
38
+ .then(function (initial) {
39
+ latest = initial.collection[0] ? initial.collection[0].id : 0
40
+ const notifications = onNotification({ jar: jar })
41
+ notifications.on('data', function (name, message) {
42
+ if (name === 'NotificationStream' && message.Type === 'NewNotification') {
43
+ if (waitingForRequest) {
44
+ waitingForRequest = false
45
+ } else {
46
+ getMessages({
47
+ jar: jar,
48
+ messageTab: 'Inbox',
49
+ pageNumber: 0
50
+ })
51
+ .then(function (inbox) {
52
+ const messages = inbox.collection
53
+ for (let i = messages.length - 1; i >= 0; i--) {
54
+ const message = messages[i]
55
+ const id = message.id
56
+ if (id > latest) {
57
+ latest = id
58
+ onMessage.emit('data', message)
59
+ }
60
+ }
61
+ })
62
+ }
63
+ } else if (name === 'FriendshipNotifications' && message.Type === 'FriendshipRequested') {
64
+ waitingForRequest = true
65
+ }
66
+ })
67
+ notifications.on('error', function (err) {
68
+ onMessage.emit('error', err)
69
+ })
70
+ notifications.on('connect', function () {
71
+ onMessage.emit('connect')
72
+ })
73
+ notifications.on('close', function (internal) {
74
+ if (internal) {
75
+ return
76
+ }
77
+ onMessage.emit('close', true)
78
+ })
79
+ onMessage.on('close', function (internal) {
80
+ if (internal) {
81
+ return
82
+ }
83
+ notifications.emit('close', true)
84
+ })
85
+ })
86
+
87
+ return onMessage
88
+ }