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,56 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = ['universeId', 'datastoreName', 'entryKey']
7
+ exports.optional = ['scope', 'jar']
8
+
9
+ // Docs
10
+ /**
11
+ * <p> ☁️ Marks the entry as deleted by creating a tombstone version. Entries are deleted permanently after 30 days. </p>
12
+ * API Key Permissions:
13
+ * <ul>
14
+ * <li> Delete entry </li>
15
+ * </ul>
16
+ * @category Datastores
17
+ * @param {number} universeId - The ID of the universe
18
+ * @param {string} datastoreName - Name of the data store
19
+ * @param {string} entryKey - The key which identifies the entry.
20
+ * @param {string=} [scope=global] - Defaults to global, similar to Lua API.
21
+ * @returns {Promise<void>}
22
+ * @example const noblox = require("noblox.js")
23
+ * await noblox.deleteDatastoreEntry({ universeId: 127407415, datastoreName: 'LevelStore', entryKey: 'Level_User' })
24
+ **/
25
+
26
+ // Define
27
+ function deleteDatastoreEntry (universeId, datastoreName, entryKey, scope = 'global', jar) {
28
+ return new Promise((resolve, reject) => {
29
+ const httpOpt = {
30
+ url: `//apis.roblox.com/datastores/v1/universes/${universeId}/standard-datastores/datastore/entries/entry`,
31
+ options: {
32
+ resolveWithFullResponse: true,
33
+ method: 'DELETE',
34
+ jar,
35
+ qs: {
36
+ datastoreName,
37
+ scope,
38
+ entryKey
39
+ }
40
+ }
41
+ }
42
+ return http(httpOpt)
43
+ .then(function (res) {
44
+ if (res.statusCode === 204) {
45
+ resolve()
46
+ } else {
47
+ reject(new RobloxAPIError(res))
48
+ }
49
+ })
50
+ .catch(error => reject(error))
51
+ })
52
+ }
53
+
54
+ exports.func = function (args) {
55
+ return deleteDatastoreEntry(args.universeId, args.datastoreName, args.entryKey, args.scope, args.jar)
56
+ }
@@ -0,0 +1,88 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = ['universeId', 'datastoreName', 'entryKey']
7
+ exports.optional = ['scope', 'versionId', 'jar']
8
+
9
+ // Docs
10
+ /**
11
+ * <p> ☁️ Returns the latest value and metadata associated with an entry, or a specific version if versionId is provided. </p>
12
+ * API Key Permissions:
13
+ * <ul>
14
+ * <li> Read entries </li>
15
+ * <li> Read version </li>
16
+ * </ul>
17
+ * @category Datastores
18
+ * @param {number} universeId - The ID of the universe
19
+ * @param {string} datastoreName - Name of the data store
20
+ * @param {string} entryKey - The key which identifies the entry.
21
+ * @param {string=} [scope=global] - Defaults to global, similar to Lua API.
22
+ * @param {string=} versionId - The version to inspect
23
+ * @returns {Promise<DatastoreEntry>}
24
+ * @example const noblox = require("noblox.js")
25
+ * const entry = await noblox.getDatastoreEntry({ universeId: 127407415, datastoreName: 'LevelStore', entryKey: 'Level_User' })
26
+ **/
27
+
28
+ // Define
29
+ function getDatastoreEntry (universeId, datastoreName, entryKey, scope = 'global', versionId, jar) {
30
+ return new Promise((resolve, reject) => {
31
+ const httpOpt = {
32
+ url: versionId ? `//apis.roblox.com/datastores/v1/universes/${universeId}/standard-datastores/datastore/entries/entry/versions/version` : `//apis.roblox.com/datastores/v1/universes/${universeId}/standard-datastores/datastore/entries/entry`,
33
+ options: {
34
+ resolveWithFullResponse: true,
35
+ method: 'GET',
36
+ jar,
37
+ qs: {
38
+ datastoreName,
39
+ scope,
40
+ entryKey,
41
+ versionId
42
+ }
43
+ }
44
+ }
45
+ return http(httpOpt)
46
+ .then(function (res) {
47
+ if (res.statusCode === 200) {
48
+ const response = JSON.parse(res.body)
49
+ const headers = res.headers
50
+
51
+ resolve({
52
+ data: response,
53
+ metadata: {
54
+ robloxEntryCreatedTime: new Date(headers['roblox-entry-created-time']),
55
+ lastModified: headers['last-modified'] ? new Date(headers['last-modified']) : new Date(headers['roblox-entry-created-time']),
56
+ robloxEntryVersion: headers['roblox-entry-version'],
57
+ robloxEntryAttributes: headers['roblox-entry-attributes'],
58
+ robloxEntryUserIDs: headers['roblox-entry-userids'],
59
+ contentMD5: headers['content-md5'],
60
+ contentLength: parseInt(headers['content-length'])
61
+ }
62
+ })
63
+ } else if (res.statusCode === 204) {
64
+ const headers = res.headers
65
+
66
+ resolve({
67
+ data: null,
68
+ metadata: {
69
+ robloxEntryCreatedTime: new Date(headers['roblox-entry-created-time']),
70
+ lastModified: headers['last-modified'] ? new Date(headers['last-modified']) : new Date(headers['roblox-entry-created-time']),
71
+ robloxEntryVersion: headers['roblox-entry-version'],
72
+ robloxEntryAttributes: headers['roblox-entry-attributes'],
73
+ robloxEntryUserIDs: headers['roblox-entry-userids'],
74
+ contentMD5: headers['content-md5'],
75
+ contentLength: headers['content-length']
76
+ }
77
+ })
78
+ } else {
79
+ reject(new RobloxAPIError(res))
80
+ }
81
+ })
82
+ .catch(error => reject(error))
83
+ })
84
+ }
85
+
86
+ exports.func = function (args) {
87
+ return getDatastoreEntry(args.universeId, args.datastoreName, args.entryKey, args.scope, args.versionId, args.jar)
88
+ }
@@ -0,0 +1,73 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = ['universeId', 'datastoreName', 'entryKey']
7
+ exports.optional = ['scope', 'startTime', 'endTime', 'sortOrder', 'limit', 'cursor', 'jar']
8
+
9
+ // Docs
10
+ /**
11
+ * <p> ☁️ Returns a list of entry versions of an entry. </p>
12
+ * API Key Permissions:
13
+ * <ul>
14
+ * <li> List versions </li>
15
+ * </ul>
16
+ * @category Datastores
17
+ * @param {number} universeId - The ID of the universe
18
+ * @param {string} datastoreName - Name of the data store
19
+ * @param {string} entryKey - The key which identifies the entry.
20
+ * @param {(string | boolean)=} [scope=global] - Defaults to global, similar to Lua API.
21
+ * @param {Date=} startTime - Don't consider versions older than this
22
+ * @param {Date=} endTime - Don't consider versions younger than this
23
+ * @param {("Ascending" | "Descending")=} [sortOrder=Ascending] - Older first (Ascending) or younger first (Descending)
24
+ * @param {number=} limit - Maximum number of items to return
25
+ * @param {string=} cursor - Provide to request the next set of data
26
+ * @returns {Promise<EntryVersionsResult>}
27
+ * @example const noblox = require("noblox.js")
28
+ * const versions = await noblox.getDatastoreEntryVersions({ universeId: 127407415, datastoreName: 'LevelStore', entryKey: 'Level_User' })
29
+ **/
30
+
31
+ // Define
32
+ function getDatastoreEntryVersions (universeId, datastoreName, entryKey, scope = 'global', startTime, endTime, sortOrder, limit, cursor, jar) {
33
+ return new Promise((resolve, reject) => {
34
+ const httpOpt = {
35
+ url: `//apis.roblox.com/datastores/v1/universes/${universeId}/standard-datastores/datastore/entries/entry/versions`,
36
+ options: {
37
+ resolveWithFullResponse: true,
38
+ method: 'GET',
39
+ jar,
40
+ qs: {
41
+ datastoreName,
42
+ scope,
43
+ entryKey,
44
+ startTime,
45
+ endTime,
46
+ sortOrder,
47
+ limit,
48
+ cursor
49
+ }
50
+ }
51
+ }
52
+ return http(httpOpt)
53
+ .then(function (res) {
54
+ if (res.statusCode === 200) {
55
+ const response = JSON.parse(res.body)
56
+ response.versions = response.versions.map(version => {
57
+ version.createdTime = new Date(version.createdTime)
58
+ version.objectCreatedTime = new Date(version.objectCreatedTime)
59
+ return version
60
+ })
61
+
62
+ resolve(response)
63
+ } else {
64
+ reject(new RobloxAPIError(res))
65
+ }
66
+ })
67
+ .catch(error => reject(error))
68
+ })
69
+ }
70
+
71
+ exports.func = function (args) {
72
+ return getDatastoreEntryVersions(args.universeId, args.datastoreName, args.entryKey, args.scope, args.startTime, args.endTime, args.sortOrder, args.limit, args.cursor, args.jar)
73
+ }
@@ -0,0 +1,63 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = ['universeId', 'datastoreName']
7
+ exports.optional = ['scope', 'prefix', 'limit', 'cursor', 'jar']
8
+
9
+ // Docs
10
+ /**
11
+ * <p> ☁️ Returns a list of entry keys within a data store. </p>
12
+ * API Key Permissions:
13
+ * <ul>
14
+ * <li> List keys </li>
15
+ * </ul>
16
+ * @category Datastores
17
+ * @param {number} universeId - The ID of the universe
18
+ * @param {string} datastoreName - Name of the data store
19
+ * @param {(string | boolean)=} [scope=global] - Defaults to global, similar to Lua API. If set to true, returns keys from all scopes.
20
+ * @param {string=} prefix - Return only data stores with this prefix
21
+ * @param {number=} limit - Maximum number of items to return
22
+ * @param {string=} cursor - Provide to request the next set of data
23
+ * @returns {Promise<DatastoreKeysResult>}
24
+ * @example const noblox = require("noblox.js")
25
+ * const keys = await noblox.getDatastoreKeys({ universeId: 127407415, datastoreName: 'LevelStore' })
26
+ **/
27
+
28
+ // Define
29
+ function getDatastoreKeys (universeId, datastoreName, scope = 'global', prefix, limit, cursor, jar) {
30
+ return new Promise((resolve, reject) => {
31
+ const httpOpt = {
32
+ url: `//apis.roblox.com/datastores/v1/universes/${universeId}/standard-datastores/datastore/entries`,
33
+ options: {
34
+ resolveWithFullResponse: true,
35
+ method: 'GET',
36
+ jar,
37
+ qs: {
38
+ datastoreName,
39
+ scope,
40
+ AllScopes: scope === true,
41
+ prefix,
42
+ limit,
43
+ cursor
44
+ }
45
+ }
46
+ }
47
+ return http(httpOpt)
48
+ .then(function (res) {
49
+ if (res.statusCode === 200) {
50
+ const response = JSON.parse(res.body)
51
+
52
+ resolve(response)
53
+ } else {
54
+ reject(new RobloxAPIError(res))
55
+ }
56
+ })
57
+ .catch(error => reject(error))
58
+ })
59
+ }
60
+
61
+ exports.func = function (args) {
62
+ return getDatastoreKeys(args.universeId, args.datastoreName, args.scope, args.prefix, args.limit, args.cursor, args.jar)
63
+ }
@@ -0,0 +1,62 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = ['universeId']
7
+ exports.optional = ['prefix', 'limit', 'cursor', 'jar']
8
+
9
+ // Docs
10
+ /**
11
+ * <p> ☁️ Returns a list of data stores belonging to a universe. </p>
12
+ * API Key Permissions:
13
+ * <ul>
14
+ * <li> List DataStores </li>
15
+ * </ul>
16
+ * @category Datastores
17
+ * @param {number} universeId - The ID of the universe whose data stores are being retrieved.
18
+ * @param {string=} prefix - Return only data stores with this prefix
19
+ * @param {number=} limit - Maximum number of items to return
20
+ * @param {string=} cursor - Provide to request the next set of data
21
+ * @returns {Promise<DatastoresResult>}
22
+ * @example const noblox = require("noblox.js")
23
+ * const datastores = await noblox.getDatastores(1117747196)
24
+ **/
25
+
26
+ // Define
27
+ function getDatastores (universeId, prefix, limit, cursor, jar) {
28
+ return new Promise((resolve, reject) => {
29
+ const httpOpt = {
30
+ url: `//apis.roblox.com/datastores/v1/universes/${universeId}/standard-datastores`,
31
+ options: {
32
+ resolveWithFullResponse: true,
33
+ method: 'GET',
34
+ jar,
35
+ qs: {
36
+ prefix,
37
+ limit,
38
+ cursor
39
+ }
40
+ }
41
+ }
42
+ return http(httpOpt)
43
+ .then(function (res) {
44
+ if (res.statusCode === 200) {
45
+ const response = JSON.parse(res.body)
46
+ response.datastores = response.datastores.map(datastore => {
47
+ datastore.createdTime = new Date(datastore.createdTime)
48
+ return datastore
49
+ })
50
+
51
+ resolve(response)
52
+ } else {
53
+ reject(new RobloxAPIError(res))
54
+ }
55
+ })
56
+ .catch(error => reject(error))
57
+ })
58
+ }
59
+
60
+ exports.func = function (args) {
61
+ return getDatastores(args.universeId, args.prefix, args.limit, args.cursor, args.jar)
62
+ }
@@ -0,0 +1,83 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const crypto = require('crypto')
4
+ const RobloxAPIError = require('../util/apiError.js')
5
+
6
+ // Args
7
+ exports.required = ['universeId', 'datastoreName', 'entryKey', 'incrementBy']
8
+ exports.optional = ['scope', 'robloxEntryUserIDs', 'robloxEntryAttributes', 'jar']
9
+
10
+ // Docs
11
+ /**
12
+ * <p> ☁️ Increments the value for an entry by a given amount, or create a new entry with that amount. </p>
13
+ * API Key Permissions:
14
+ * <ul>
15
+ * <li> Create entry </li>
16
+ * <li> Update entry </li>
17
+ * </ul>
18
+ * @category Datastores
19
+ * @param {number} universeId - The ID of the universe
20
+ * @param {string} datastoreName - Name of the data store
21
+ * @param {string} entryKey - The key which identifies the entry.
22
+ * @param {number} incrementBy - The amount by which the entry should be incremented, or the starting value if it does not exist
23
+ * @param {string=} [scope=global] - Defaults to global, similar to Lua API.
24
+ * @param {Array<number>=} robloxEntryUserIDs - Comma-separated list of Roblox user IDs the entry is tagged with. If not provided, existing user IDs are cleared.
25
+ * @param {object=} robloxEntryAttributes - If not provided, existing attributes are cleared.
26
+ * @returns {Promise<DatastoreEntry>}
27
+ * @example const noblox = require("noblox.js")
28
+ * const entry = await noblox.incrementDatastoreEntry({ universeId: 127407415, datastoreName: 'LevelStore', entryKey: 'Level_User', incrementBy: 2 })
29
+ **/
30
+
31
+ // Define
32
+ function incrementDatastoreEntry (universeId, datastoreName, entryKey, incrementBy, scope = 'global', robloxEntryUserIDs = [], robloxEntryAttributes, jar) {
33
+ return new Promise((resolve, reject) => {
34
+ const httpOpt = {
35
+ url: `//apis.roblox.com/datastores/v1/universes/${universeId}/standard-datastores/datastore/entries/entry/increment`,
36
+ options: {
37
+ resolveWithFullResponse: true,
38
+ method: 'POST',
39
+ jar,
40
+ qs: {
41
+ datastoreName,
42
+ scope,
43
+ entryKey,
44
+ incrementBy
45
+ },
46
+ headers: {
47
+ 'Content-Type': 'application/json',
48
+ 'content-md5': crypto.createHash('md5').update(JSON.stringify(incrementBy)).digest('base64'),
49
+ 'roblox-entry-userids': JSON.stringify(robloxEntryUserIDs),
50
+ 'roblox-entry-attributes': JSON.stringify(robloxEntryAttributes),
51
+ 'content-length': '0'
52
+ }
53
+ }
54
+ }
55
+ return http(httpOpt)
56
+ .then(function (res) {
57
+ if (res.statusCode === 200) {
58
+ const response = JSON.parse(res.body)
59
+ const headers = res.headers
60
+
61
+ resolve({
62
+ data: response,
63
+ metadata: {
64
+ robloxEntryCreatedTime: new Date(headers['roblox-entry-created-time']),
65
+ lastModified: headers['last-modified'] ? new Date(headers['last-modified']) : new Date(headers['roblox-entry-created-time']),
66
+ robloxEntryVersion: headers['roblox-entry-version'],
67
+ robloxEntryAttributes: headers['roblox-entry-attributes'],
68
+ robloxEntryUserIDs: headers['roblox-entry-userids'],
69
+ contentMD5: headers['content-md5'],
70
+ contentLength: parseInt(headers['content-length'])
71
+ }
72
+ })
73
+ } else {
74
+ reject(new RobloxAPIError(res))
75
+ }
76
+ })
77
+ .catch(error => reject(error))
78
+ })
79
+ }
80
+
81
+ exports.func = function (args) {
82
+ return incrementDatastoreEntry(args.universeId, args.datastoreName, args.entryKey, args.incrementBy, args.scope, args.robloxEntryUserIDs, args.robloxEntryAttributes, args.jar)
83
+ }
@@ -0,0 +1,80 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const crypto = require('crypto')
4
+ const RobloxAPIError = require('../util/apiError.js')
5
+
6
+ // Args
7
+ exports.required = ['universeId', 'datastoreName', 'entryKey', 'body']
8
+ exports.optional = ['scope', 'matchVersion', 'exclusiveCreate', 'robloxEntryUserIDs', 'robloxEntryAttributes', 'jar']
9
+
10
+ // Docs
11
+ /**
12
+ * <p> ☁️ Sets the value, metadata and user IDs associated with an entry. </p>
13
+ * <p>
14
+ * Note: You cannot use both matchVersion and exclusiveCreate. MD5 checksum is automatically generated.
15
+ * </p>
16
+ * API Key Permissions:
17
+ * <ul>
18
+ * <li> Create entry </li>
19
+ * <li> Update entry </li>
20
+ * </ul>
21
+ * @category Datastores
22
+ * @param {number} universeId - The ID of the universe
23
+ * @param {string} datastoreName - Name of the data store
24
+ * @param {string} entryKey - The key which identifies the entry.
25
+ * @param {any} body - The value the key should be set to.
26
+ * @param {string=} [scope=global] - Defaults to global, similar to Lua API.
27
+ * @param {string=} matchVersion - Only update if current version matches this.
28
+ * @param {boolean} [exclusiveCreate=false] - Only create the entry if it does not exist.
29
+ * @param {Array<number>=} robloxEntryUserIDs - Comma-separated list of Roblox user IDs the entry is tagged with. If not provided, existing user IDs are cleared.
30
+ * @param {object=} robloxEntryAttributes - If not provided, existing attributes are cleared.
31
+ * @returns {Promise<EntryVersion>}
32
+ * @example const noblox = require("noblox.js")
33
+ * const response = await noblox.setDatastoreEntry({ universeId: 127407415, datastoreName: 'LevelStore', entryKey: 'Level_Random', body: 230, robloxEntryUserIDs: [55549140], robloxEntryAttributes: { node: true } }))
34
+ **/
35
+
36
+ // Define
37
+ function setDatastoreEntry (universeId, datastoreName, entryKey, body, scope = 'global', matchVersion, exclusiveCreate = false, robloxEntryUserIDs = [], robloxEntryAttributes, jar) {
38
+ return new Promise((resolve, reject) => {
39
+ const httpOpt = {
40
+ url: `//apis.roblox.com/datastores/v1/universes/${universeId}/standard-datastores/datastore/entries/entry`,
41
+ options: {
42
+ resolveWithFullResponse: true,
43
+ method: 'POST',
44
+ jar,
45
+ qs: {
46
+ datastoreName,
47
+ scope,
48
+ entryKey,
49
+ matchVersion,
50
+ exclusiveCreate
51
+ },
52
+ headers: {
53
+ 'Content-Type': 'application/json',
54
+ 'content-md5': crypto.createHash('md5').update(JSON.stringify(body)).digest('base64'),
55
+ 'roblox-entry-userids': JSON.stringify(robloxEntryUserIDs),
56
+ 'roblox-entry-attributes': JSON.stringify(robloxEntryAttributes)
57
+ },
58
+ body: JSON.stringify(body)
59
+ }
60
+ }
61
+ return http(httpOpt)
62
+ .then(function (res) {
63
+ if (res.statusCode === 200) {
64
+ const response = JSON.parse(res.body)
65
+
66
+ response.createdTime = new Date(response.createdTime)
67
+ response.objectCreatedTime = new Date(response.objectCreatedTime)
68
+
69
+ resolve(response)
70
+ } else {
71
+ reject(new RobloxAPIError(res))
72
+ }
73
+ })
74
+ .catch(error => reject(error))
75
+ })
76
+ }
77
+
78
+ exports.func = function (args) {
79
+ return setDatastoreEntry(args.universeId, args.datastoreName, args.entryKey, args.body, args.scope, args.matchVersion, args.exclusiveCreate, args.robloxEntryUserIDs, args.robloxEntryAttributes, args.jar)
80
+ }
@@ -0,0 +1,42 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = ['userId', 'assetId']
7
+
8
+ // Docs
9
+ /**
10
+ * ✅ Returns whether the user can manage a given asset.
11
+ * @category Develop
12
+ * @alias canManage
13
+ * @param {number} userId - The id of the user.
14
+ * @param {number} assetId - The id of the asset.
15
+ * @returns {Promise<boolean>}
16
+ * @example const noblox = require("noblox.js")
17
+ * let canManage = await noblox.canManage(123456, 234567)
18
+ **/
19
+
20
+ // Define
21
+ function canManage (userId, assetId) {
22
+ return http({
23
+ url: `//develop.roblox.com/v1/user/${userId}/canmanage/${assetId}`,
24
+ options: {
25
+ method: 'GET',
26
+ resolveWithFullResponse: true
27
+ }
28
+ })
29
+ .then(function (res) {
30
+ const { body } = res
31
+ const { Success: success, CanManage: canManage } = JSON.parse(body)
32
+ if (success) {
33
+ return canManage
34
+ } else {
35
+ throw new RobloxAPIError(res)
36
+ }
37
+ })
38
+ }
39
+
40
+ exports.func = function ({ userId, assetId }) {
41
+ return canManage(userId, assetId)
42
+ }