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,65 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const getGeneralToken = require('../util/getGeneralToken.js').func
4
+
5
+ // Args
6
+ exports.required = ['group']
7
+ exports.optional = ['message', 'jar']
8
+
9
+ // Docs
10
+ /**
11
+ * 🔐 Change a group's shout.
12
+ * @category Group
13
+ * @alias shout
14
+ * @param {number} group - The id of the group.
15
+ * @param {string=} [message=""] - The message to shout
16
+ * @returns {Promise<GroupShout>}
17
+ * @example const noblox = require("noblox.js")
18
+ * // Login using your cookie
19
+ * noblox.shout(1, "Hello world!")
20
+ **/
21
+
22
+ function shoutOnGroup (group, message = '', jar, xcsrf) {
23
+ return new Promise((resolve, reject) => {
24
+ const httpOpt = {
25
+ url: `https://groups.roblox.com/v1/groups/${group}/status`,
26
+ options: {
27
+ method: 'PATCH',
28
+ resolveWithFullResponse: true,
29
+ json: {
30
+ message
31
+ },
32
+ jar: jar,
33
+ headers: {
34
+ 'X-CSRF-TOKEN': xcsrf
35
+ }
36
+ }
37
+ }
38
+
39
+ return http(httpOpt)
40
+ .then(function (res) {
41
+ if (res.statusCode === 200) {
42
+ resolve(res.body)
43
+ } else {
44
+ const body = res.body || {}
45
+ if (body.errors && body.errors.length > 0) {
46
+ const errors = body.errors.map((e) => {
47
+ return e.message
48
+ })
49
+ reject(new Error(`${res.statusCode} ${errors.join(', ')}`))
50
+ } else {
51
+ reject(new Error(`${res.statusCode} ${res.body}`))
52
+ }
53
+ }
54
+ }).catch(error => reject(error))
55
+ })
56
+ }
57
+
58
+ // Define
59
+ exports.func = function (args) {
60
+ const jar = args.jar
61
+ return getGeneralToken({ jar: jar })
62
+ .then(function (xcsrf) {
63
+ return shoutOnGroup(args.group, args.message, args.jar, xcsrf)
64
+ })
65
+ }
package/lib/index.js ADDED
@@ -0,0 +1,30 @@
1
+ const path = require('path')
2
+ const fs = require('fs')
3
+ const include = ['cache']
4
+
5
+ const noblox = {}
6
+
7
+ function search (dir) {
8
+ require('fs').readdirSync(dir).forEach(function (file) {
9
+ const stat = fs.statSync(path.join(dir, file))
10
+ if (stat.isFile() || include.indexOf(file) !== -1) {
11
+ noblox[file.replace('.js', '')] = require(dir + '/' + file)
12
+ } else if (stat.isDirectory()) {
13
+ search(path.join(dir, file))
14
+ }
15
+ })
16
+ }
17
+
18
+ search(__dirname)
19
+
20
+ for (const name in noblox) {
21
+ const exporter = noblox[name]
22
+ if (Object.prototype.hasOwnProperty.call(exporter, 'func')) {
23
+ module.exports[name] = noblox.wrap.wrapExport(exporter.func, exporter.required || [], exporter.optional || [])
24
+ } else {
25
+ module.exports[name] = noblox[name]
26
+ }
27
+ }
28
+
29
+ exports.options = require('./options.js')
30
+ exports.settings = require('../settings.json')
@@ -0,0 +1,16 @@
1
+ // Define
2
+ function shallowCopy (obj) {
3
+ return Object.assign(obj instanceof Array ? [] : {}, obj)
4
+ }
5
+
6
+ module.exports = function (obj) {
7
+ const newObj = shallowCopy(obj)
8
+ for (const index in obj) {
9
+ let value = obj[index]
10
+ if (value instanceof Object) {
11
+ value = shallowCopy(value)
12
+ }
13
+ newObj[index] = value
14
+ }
15
+ return newObj
16
+ }
@@ -0,0 +1,61 @@
1
+ // Includes
2
+ const options = require('../options.js')
3
+
4
+ // Define
5
+ module.exports = function (type, index, func, handler) {
6
+ const group = options.queue[type]
7
+ if (!group[index]) {
8
+ group[index] = {
9
+ jobs: []
10
+ }
11
+ }
12
+ const home = group[index]
13
+ function run (time) {
14
+ return function (resolve, reject) {
15
+ setTimeout(function () {
16
+ func().then(resolve).catch(reject)
17
+ }, time)
18
+ }
19
+ }
20
+ const jobs = home.jobs
21
+ function deactivate (err) {
22
+ jobs.shift()
23
+ if (!handler(err)) {
24
+ home.last = Date.now()
25
+ }
26
+ }
27
+ function next () {
28
+ jobs.shift()
29
+ home.last = Date.now()
30
+ }
31
+ if (group.delay > 0) {
32
+ const delay = group.delay
33
+ const last = home.last
34
+ if (jobs.length === 0) {
35
+ let item
36
+ const diff = Date.now() - last
37
+ if (!last || diff > delay) {
38
+ item = func()
39
+ } else {
40
+ item = new Promise(run(delay - diff))
41
+ }
42
+ jobs.push(item)
43
+ item.then(next).catch(deactivate)
44
+ return item
45
+ } else {
46
+ const job = jobs[jobs.length - 1].then(function () {
47
+ const item = new Promise(run(delay))
48
+ item.then(next).catch(deactivate)
49
+ return item
50
+ }).catch(function (err) {
51
+ const item = handler && handler(err) ? func() : new Promise(run(delay))
52
+ item.then(next).catch(deactivate)
53
+ return item
54
+ })
55
+ jobs.push(job)
56
+ return job
57
+ }
58
+ } else {
59
+ return func()
60
+ }
61
+ }
@@ -0,0 +1,30 @@
1
+ class TimeoutError extends Error {
2
+ }
3
+
4
+ /**
5
+ * A basic replacement for the Bluebird 'timeout' method. Returns a Promise which will resolve or reject with the result of the given
6
+ * promise once it resolves, or reject if the promise should fail to resolve within the supplied timeout. An optional reason
7
+ * can also be supplied.
8
+ * @param promise - The Promise to apply a timeout to.
9
+ * @param timeoutTime - The timeout to apply to the Promise.
10
+ * @param reason - Optional String reason for the timeout.
11
+ * @returns {Promise<unknown>}
12
+ */
13
+ function timeout (promise, timeoutTime, reason = 'operation timed out') {
14
+ let timer
15
+
16
+ const timeoutPromise = new Promise(function (resolve, reject) {
17
+ timer = setTimeout(function () {
18
+ return reject(new TimeoutError(reason))
19
+ }, timeoutTime)
20
+ })
21
+
22
+ // We return the first promise to complete. If it resolves normally, the normal promise completed - so we cancel the timer
23
+ // to prevent any unnecessary hanging waiting for timeout timers.
24
+ return Promise.race([promise, timeoutPromise])
25
+ .finally(function () {
26
+ clearTimeout(timer)
27
+ })
28
+ }
29
+
30
+ module.exports = timeout
@@ -0,0 +1,78 @@
1
+ /*
2
+ const args = ['jar', 'username', 'password']
3
+
4
+ raw function login (jar, username, password)
5
+
6
+ exported function login ()
7
+ check number of arguments if necessary
8
+ options object: login(arguments[0])
9
+ individual arguments:
10
+ for each argument add to an options array corresponding with argument order
11
+ login(options)
12
+ */
13
+ // Define
14
+ exports.wrapExport = function (wrapFunction, required, optional) {
15
+ const reqLength = required.length
16
+ if ((reqLength + optional.length) > 0) {
17
+ return function () {
18
+ let options = {}
19
+ const length = arguments.length
20
+ let assume = false
21
+ if (length > 0) {
22
+ const first = arguments[0]
23
+ let collectOptions = true
24
+ if (length === 1 && (first instanceof Object)) {
25
+ assume = true
26
+ const firstArg = required[0] || optional
27
+ if (firstArg && firstArg instanceof Object) {
28
+ for (let i = 0; i < firstArg.length; i++) {
29
+ if (first[firstArg[i]]) {
30
+ options = first
31
+ collectOptions = false
32
+ break
33
+ }
34
+ }
35
+ } else if (firstArg && first[firstArg]) {
36
+ options = first
37
+ collectOptions = false
38
+ }
39
+ }
40
+ if (collectOptions) {
41
+ for (let i = 0; i <= length; i++) {
42
+ const list = (i >= reqLength ? optional : required)
43
+ const index = list[(i >= reqLength ? (i - reqLength) : i)]
44
+ if (index instanceof Object) {
45
+ options[index[0]] = arguments[i]
46
+ } else {
47
+ options[index] = arguments[i]
48
+ }
49
+ }
50
+ }
51
+ }
52
+ for (let i = 0; i < reqLength; i++) {
53
+ const arg = required[i]
54
+ let found = false
55
+ if (arg instanceof Object) {
56
+ for (let k = 0; k <= arg.length; k++) {
57
+ if (options[arg[k]] != null) {
58
+ found = true
59
+ break
60
+ }
61
+ }
62
+ } else if (options[arg] != null) {
63
+ found = true
64
+ }
65
+ if (!found) {
66
+ if (assume) {
67
+ throw new Error('A required argument is missing')
68
+ } else {
69
+ throw new Error('Required argument "' + (arg instanceof Object ? arg.join('/') : arg) + '" is missing')
70
+ }
71
+ }
72
+ }
73
+ return wrapFunction(options)
74
+ }
75
+ } else {
76
+ return wrapFunction
77
+ }
78
+ }
@@ -0,0 +1,31 @@
1
+ // Includes
2
+ const getPageResults = require('../util/getPageResults.js').func
3
+
4
+ // Args
5
+ exports.required = ['userId']
6
+ exports.optional = ['assetType', 'sortOrder', 'limit', 'jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔓 Get a user's collectibles.
11
+ * @category User
12
+ * @alias getCollectibles
13
+ * @param {number} userId - The id of the user whose collectibles are being retrieved.
14
+ * @param {SortOrder=} [sortOrder=Asc] - The order that the collectibles will bee sorted by (Asc or Desc)
15
+ * @param {string=} assetType - The asset type for the collectibles you're trying to get.
16
+ * @param {number} [limit=10] - The amount of results per request.
17
+ * @returns {Promise<CollectibleEntry[]>}
18
+ * @example const noblox = require("noblox.js")
19
+ * let collectibles = await noblox.getCollectibles({userId: 123456, sortOrder: "Asc", limit: 100})
20
+ **/
21
+
22
+ // Define
23
+ exports.func = function (args) {
24
+ return getPageResults({
25
+ jar: args.jar,
26
+ url: `//inventory.roblox.com/v1/users/${args.userId}/assets/collectibles`,
27
+ query: { assetType: args.assetType },
28
+ sortOrder: args.sortOrder,
29
+ limit: args.limit
30
+ })
31
+ }
@@ -0,0 +1,32 @@
1
+ // Includes
2
+ const getPageResults = require('../util/getPageResults.js').func
3
+
4
+ // Args
5
+ exports.required = ['userId', 'assetTypes']
6
+ exports.optional = ['sortOrder', 'limit', 'jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔓 Get a user's inventory.
11
+ * NOTE: Badges must use [getPlayerBadges()]{@link https://noblox.js.org/global.html#getPlayerBadges} due to an issue with Roblox's API.
12
+ * @category User
13
+ * @alias getInventory
14
+ * @param {number} userId - The id of user whose inventory is being returned.
15
+ * @param {Array<string>} assetTypes - The types of assets being retrieved: [("Shirt", "Pants")]{@link https://developer.roblox.com/en-us/api-reference/enum/AssetType}.
16
+ * @param {SortOrder=} [sortOrder=Asc] - The order that the data will be returned in (Asc or Desc)
17
+ * @param {Limit=} [limit=10] - The number of assets returned in each request (10, 25, 50, or 100)
18
+ * @returns {Promise<InventoryEntry[]>}
19
+ * @example const noblox = require("noblox.js")
20
+ * let inventory = await noblox.getInventory({userId: 123456, assetTypes: ["Shirt"], sortOrder: "Asc", limit: 100})
21
+ **/
22
+
23
+ // Define
24
+ exports.func = function (args) {
25
+ return getPageResults({
26
+ jar: args.jar,
27
+ url: `//inventory.roblox.com/v2/users/${args.userId}/inventory`,
28
+ query: { assetTypes: args.assetTypes.join(',') },
29
+ sortOrder: args.sortOrder,
30
+ limit: args.limit
31
+ })
32
+ }
@@ -0,0 +1,31 @@
1
+ // Includes
2
+ const getPageResults = require('../util/getPageResults.js').func
3
+
4
+ // Args
5
+ exports.required = ['userId', 'assetTypeId']
6
+ exports.optional = ['sortOrder', 'limit', 'jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔓 Get a user's inventory.
11
+ * @category User
12
+ * @alias getInventoryById
13
+ * @param {number} userId - The id of user whose inventory is being returned.
14
+ * @param {Array<number>} assetTypeId - The types of assets being retrieved: [(11, 12)]{@link https://developer.roblox.com/en-us/api-reference/enum/AssetType}.
15
+ * @param {SortOrder=} [sortOrder=Asc] - The order that the data will be returned in (Asc or Desc)
16
+ * @param {Limit=} [limit=10] - The number of assets returned in each request (10, 25, 50, or 100)
17
+ * @returns {Promise<InventoryEntry[]>}
18
+ * @example const noblox = require("noblox.js")
19
+ * let inventory = await noblox.getInventoryById({userId: 123456, assetTypeId: 2, sortOrder: "Asc", limit: 100})
20
+ **/
21
+
22
+ // Define
23
+ exports.func = function (args) {
24
+ return getPageResults({
25
+ jar: args.jar,
26
+ url: `//inventory.roblox.com/v2/users/${args.userId}/inventory/${args.assetTypeId}`,
27
+ query: {},
28
+ sortOrder: args.sortOrder,
29
+ limit: args.limit
30
+ })
31
+ }
@@ -0,0 +1,54 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+
4
+ // Args
5
+ exports.required = ['userId', 'itemTargetId']
6
+ exports.optional = ['itemType']
7
+
8
+ // Docs
9
+ /**
10
+ * ✅ Check if the user owns the asset.
11
+ * @category User
12
+ * @alias getOwnership
13
+ * @param {number} userId - The id of the user whose ownership is being checked.
14
+ * @param {number} itemTargetId - The id of the item.
15
+ * @param {("Asset" | "GamePass" | "Badge" | "Bundle")=} [itemType=Asset] - The type of item in question (Asset, GamePass, Badge, Bundle)
16
+ * @returns {Promise<boolean>}
17
+ * @example const noblox = require("noblox.js")
18
+ * let ownership = await noblox.getOwnership(123456, 234567, "GamePass")
19
+ **/
20
+
21
+ // Define
22
+ function getOwnership (userId, itemTargetId, itemType) {
23
+ return new Promise((resolve, reject) => {
24
+ const httpOpt = {
25
+ url: `//inventory.roblox.com/v1/users/${userId}/items/${itemType}/${itemTargetId}`,
26
+ options: {
27
+ method: 'GET',
28
+ resolveWithFullResponse: true
29
+ }
30
+ }
31
+ return http(httpOpt)
32
+ .then(function (res) {
33
+ if (res.statusCode === 200) {
34
+ const body = JSON.parse(res.body)
35
+ resolve(body.data.length > 0)
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
+ } else {
44
+ reject(new Error(`${res.statusCode} ${res.body}`))
45
+ }
46
+ }
47
+ })
48
+ })
49
+ }
50
+
51
+ exports.func = function (args) {
52
+ const itemType = args.itemType || 'Asset'
53
+ return getOwnership(args.userId, args.itemTargetId, itemType)
54
+ }
@@ -0,0 +1,47 @@
1
+ // Includes
2
+ const getCollectibles = require('./getCollectibles.js').func
3
+
4
+ // Args
5
+ exports.required = ['userId', 'assetIds']
6
+ exports.optional = ['exclusionList', 'jar']
7
+
8
+ // Docs
9
+ /**
10
+ * ✅ Get a UserAssetID for a specific asset.
11
+ * @category User
12
+ * @alias getUAIDs
13
+ * @param {number} userId - The id of the user to search.
14
+ * @param {Array<number>} assetIds - The ids of the assets to retrieve.
15
+ * @param {Array<number>=} exclusionList - The UAIDs to exclude from the search.
16
+ * @returns {Promise<UAIDResponse>}
17
+ * @example const noblox = require("noblox.js")
18
+ * const UAIDInfo = await noblox.getUAIDs(80231025, [1974901902, 4255053867, 2705893733, 1532395])
19
+ **/
20
+
21
+ // Define
22
+ function getUAIDs (userId, requestedIds, excludedIds) {
23
+ return new Promise((resolve) => {
24
+ getCollectibles({ userId: userId }).then(function (collectibles) {
25
+ const retrievedIds = []
26
+
27
+ for (let index = 0; index < collectibles.length; index++) {
28
+ const collectible = collectibles[index]
29
+ const requestIndex = requestedIds.indexOf(collectible.assetId)
30
+
31
+ if (requestIndex > -1 && excludedIds.indexOf(collectible.userAssetId) === -1) {
32
+ requestedIds.splice(requestIndex, 1)
33
+ retrievedIds.push(collectible.userAssetId)
34
+ }
35
+ }
36
+
37
+ resolve({
38
+ uaids: retrievedIds,
39
+ failedIds: requestedIds
40
+ })
41
+ })
42
+ })
43
+ }
44
+
45
+ exports.func = function (args) {
46
+ return getUAIDs(args.userId, args.assetIds, args.exclusionList || [])
47
+ }
@@ -0,0 +1,32 @@
1
+ // Includes
2
+ const getPageResults = require('../util/getPageResults.js').func
3
+
4
+ // Args
5
+ exports.required = ['groupId', 'assetType']
6
+ exports.optional = ['sortOrder', 'limit', 'jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔐 Get assets for a group.
11
+ * @category Group
12
+ * @alias getGroupAssets
13
+ * @param {number} groupId - The id of the group.
14
+ * @param {String} assetType - The type of asset being retrieved: [("Shirt", "Pants")]{@link https://developer.roblox.com/en-us/api-reference/enum/AssetType}.
15
+ * @param {SortOrder=} [sortOrder=Asc] - The order results are sorted in.
16
+ * @param {Limit=} [limit=∞] - The maximum number of assets to return
17
+ * @returns {Promise<GroupAssetInfo[]>}
18
+ * @example const noblox = require("noblox.js")
19
+ * // Login using your cookie
20
+ * const groupModels = await noblox.getGroupAssets({groupId: 1, assetType: 'Model', sortOrder: 'Asc', limit: '100'})
21
+ **/
22
+
23
+ // Define
24
+ exports.func = function (args) {
25
+ return getPageResults({
26
+ jar: args.jar,
27
+ url: '//itemconfiguration.roblox.com/v1/creations/get-assets',
28
+ query: { assetType: args.assetType, groupId: args.groupId },
29
+ sortOrder: args.sortOrder || 'Asc',
30
+ limit: args.limit
31
+ })
32
+ }
package/lib/options.js ADDED
@@ -0,0 +1,26 @@
1
+ // Includes
2
+ const settings = require('../settings.json')
3
+ const jar = require('./util/jar.js').func
4
+ const newCache = require('./cache/new.js')
5
+
6
+ // Define
7
+ exports.init = function () {
8
+ exports.jar = jar()
9
+
10
+ const cacheList = []
11
+ const cache = settings.cache
12
+ for (const name of Object.keys(cache)) {
13
+ const item = cache[name]
14
+ const cacheObj = {
15
+ name: name,
16
+ refresh: item.refresh,
17
+ expire: item.expire
18
+ }
19
+ cacheList.push(cacheObj)
20
+ }
21
+ exports.cache = newCache(cacheList)
22
+
23
+ exports.queue = settings.queue
24
+ }
25
+
26
+ exports.init()
@@ -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 is deleted.
10
+ * @category Party
11
+ * @alias onPartyDeleted
12
+ * @returns An EventEmitter that emits when a party is deleted.
13
+ * @example const noblox = require("noblox.js")
14
+ * // Login using your cookie
15
+ * const partyDeleted = noblox.onPartyDeleted()
16
+ * partyDeleted.on("data", function(data) {
17
+ * console.log("Party deleted! ", data)
18
+ * })
19
+ * partyDeleted.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 === 'PartyDeleted') {
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're invited to a party.
10
+ * @category Party
11
+ * @alias onPartyInvite
12
+ * @returns An EventEmitter that emits when you're invited to a party.
13
+ * @example const noblox = require("noblox.js")
14
+ * // Login using your cookie
15
+ * const partyInvite = noblox.onPartyInvite()
16
+ * partyInvite.on("data", function(data) {
17
+ * console.log("Invited to party! ", data)
18
+ * })
19
+ * partyInvite.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 === 'InvitedToParty') {
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
+ }