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.
- package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- package/.github/workflows/doc-publish.yml +33 -0
- package/.github/workflows/npmpublish.yml +72 -0
- package/.github/workflows/run-tests.yml +49 -0
- package/CODE_OF_CONDUCT.md +76 -0
- package/LICENSE +21 -0
- package/README.md +182 -0
- package/eslint.config.mjs +34 -0
- package/examples/cleanPlayers.js +130 -0
- package/examples/cleanWall.js +110 -0
- package/examples/revertRanks.js +100 -0
- package/examples/savePlayers.js +119 -0
- package/examples/saveWall.js +96 -0
- package/img/moderatedThumbnails/moderatedThumbnail_100x100.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_110x110.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_140x140.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_150x150.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_150x200.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_180x180.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_250x250.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_30x30.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_352x352.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_420x420.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_48x48.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_50x50.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_60x60.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_720x720.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_75x75.png +0 -0
- package/img/noblox-js-small.png +0 -0
- package/img/noblox-js.png +0 -0
- package/img/thumbnailSizes.png +0 -0
- package/jsDocsConfig.json +55 -0
- package/lib/accountinformation/getUserSocialLinks.js +40 -0
- package/lib/accountsettings/block.js +53 -0
- package/lib/accountsettings/unblock.js +53 -0
- package/lib/asset/deleteFromInventory.js +56 -0
- package/lib/asset/getGamePassProductInfo.js +50 -0
- package/lib/asset/getProductInfo.js +46 -0
- package/lib/asset/uploadAnimation.js +103 -0
- package/lib/asset/uploadItem.js +83 -0
- package/lib/asset/uploadModel.js +90 -0
- package/lib/avatar/avatarRules.js +39 -0
- package/lib/avatar/currentlyWearing.js +33 -0
- package/lib/avatar/getAvatar.js +36 -0
- package/lib/avatar/getCurrentAvatar.js +38 -0
- package/lib/avatar/getRecentItems.js +36 -0
- package/lib/avatar/outfitDetails.js +33 -0
- package/lib/avatar/outfits.js +38 -0
- package/lib/avatar/redrawAvatar.js +47 -0
- package/lib/avatar/removeAssetId.js +51 -0
- package/lib/avatar/setAvatarBodyColors.js +61 -0
- package/lib/avatar/setAvatarScales.js +61 -0
- package/lib/avatar/setPlayerAvatarType.js +51 -0
- package/lib/avatar/setWearingAssets.js +51 -0
- package/lib/avatar/wearAssetId.js +51 -0
- package/lib/badges/getAwardedTimestamps.js +49 -0
- package/lib/badges/getBadgeInfo.js +44 -0
- package/lib/badges/getGameBadges.js +63 -0
- package/lib/badges/getPlayerBadges.js +28 -0
- package/lib/badges/updateBadgeInfo.js +75 -0
- package/lib/cache/add.js +14 -0
- package/lib/cache/addIf.js +26 -0
- package/lib/cache/clear.js +8 -0
- package/lib/cache/get.js +28 -0
- package/lib/cache/index.js +17 -0
- package/lib/cache/new.js +12 -0
- package/lib/cache/wrap.js +25 -0
- package/lib/chat/addUsersToConversation.js +58 -0
- package/lib/chat/chatSettings.js +34 -0
- package/lib/chat/getChatMessages.js +41 -0
- package/lib/chat/getConversations.js +44 -0
- package/lib/chat/getRolloutSettings.js +36 -0
- package/lib/chat/getUnreadConversationCount.js +34 -0
- package/lib/chat/getUnreadMessages.js +39 -0
- package/lib/chat/getUserConversations.js +38 -0
- package/lib/chat/markChatAsRead.js +53 -0
- package/lib/chat/markChatAsSeen.js +51 -0
- package/lib/chat/multiGetLatestMessages.js +38 -0
- package/lib/chat/onNewConversation.js +50 -0
- package/lib/chat/onNewMessage.js +53 -0
- package/lib/chat/onNewMessageBySelf.js +50 -0
- package/lib/chat/onUserOnline.js +50 -0
- package/lib/chat/onUserTyping.js +54 -0
- package/lib/chat/removeFromGroupConversation.js +59 -0
- package/lib/chat/renameGroupConversation.js +58 -0
- package/lib/chat/sendChatMessage.js +58 -0
- package/lib/chat/setChatUserTyping.js +58 -0
- package/lib/chat/start121Conversation.js +51 -0
- package/lib/chat/startCloudEditConversation.js +51 -0
- package/lib/chat/startGroupConversation.js +59 -0
- package/lib/client/onNotification.js +86 -0
- package/lib/client/setAPIKey.js +18 -0
- package/lib/client/setCookie.js +38 -0
- package/lib/datastores/deleteDatastoreEntry.js +56 -0
- package/lib/datastores/getDatastoreEntry.js +88 -0
- package/lib/datastores/getDatastoreEntryVersions.js +73 -0
- package/lib/datastores/getDatastoreKeys.js +63 -0
- package/lib/datastores/getDatastores.js +62 -0
- package/lib/datastores/incrementDatastoreEntry.js +83 -0
- package/lib/datastores/setDatastoreEntry.js +80 -0
- package/lib/develop/canManage.js +42 -0
- package/lib/develop/configureItem.js +210 -0
- package/lib/develop/updateUniverse.js +52 -0
- package/lib/develop/updateUniverseAccess.js +54 -0
- package/lib/economy/getGroupFunds.js +42 -0
- package/lib/economy/getGroupPayoutEligibility.js +55 -0
- package/lib/economy/getGroupRevenueSummary.js +42 -0
- package/lib/economy/getGroupTransactions.js +32 -0
- package/lib/economy/getResaleData.js +48 -0
- package/lib/economy/getResellers.js +35 -0
- package/lib/economy/getUserFunds.js +43 -0
- package/lib/economy/getUserTransactions.js +34 -0
- package/lib/economy/onGroupTransaction.js +74 -0
- package/lib/friends/acceptFriendRequest.js +54 -0
- package/lib/friends/declineAllFriendRequests.js +52 -0
- package/lib/friends/declineFriendRequest.js +54 -0
- package/lib/friends/getFollowerCount.js +35 -0
- package/lib/friends/getFollowers.js +56 -0
- package/lib/friends/getFollowingCount.js +35 -0
- package/lib/friends/getFollowings.js +56 -0
- package/lib/friends/getFriendCount.js +35 -0
- package/lib/friends/getFriendRequests.js +51 -0
- package/lib/friends/getFriends.js +48 -0
- package/lib/friends/onFriendRequest.js +58 -0
- package/lib/friends/removeFriend.js +53 -0
- package/lib/friends/sendFriendRequest.js +54 -0
- package/lib/friends/unfollow.js +53 -0
- package/lib/games/addDeveloperProduct.js +53 -0
- package/lib/games/configureGamePass.js +126 -0
- package/lib/games/getDeveloperProducts.js +44 -0
- package/lib/games/getGameInstances.js +31 -0
- package/lib/games/getGamePasses.js +39 -0
- package/lib/games/getGameRevenue.js +48 -0
- package/lib/games/getGameSocialLinks.js +42 -0
- package/lib/games/getGroupGames.js +30 -0
- package/lib/games/getPlaceInfo.js +47 -0
- package/lib/games/getUniverseInfo.js +50 -0
- package/lib/games/publishToTopic.js +52 -0
- package/lib/games/sendUserNotification.js +65 -0
- package/lib/games/updateDeveloperProduct.js +56 -0
- package/lib/groups/banFromGroup.js +47 -0
- package/lib/groups/changeRank.js +59 -0
- package/lib/groups/deleteWallPost.js +59 -0
- package/lib/groups/deleteWallPostsByUser.js +55 -0
- package/lib/groups/demote.js +25 -0
- package/lib/groups/exile.js +55 -0
- package/lib/groups/getAuditLog.js +64 -0
- package/lib/groups/getGroup.js +50 -0
- package/lib/groups/getGroupBans.js +37 -0
- package/lib/groups/getGroupSocialLinks.js +41 -0
- package/lib/groups/getGroups.js +82 -0
- package/lib/groups/getJoinRequest.js +47 -0
- package/lib/groups/getJoinRequests.js +53 -0
- package/lib/groups/getPlayers.js +103 -0
- package/lib/groups/getRankInGroup.js +45 -0
- package/lib/groups/getRankNameInGroup.js +44 -0
- package/lib/groups/getRole.js +64 -0
- package/lib/groups/getRolePermissions.js +48 -0
- package/lib/groups/getRoles.js +53 -0
- package/lib/groups/getShout.js +47 -0
- package/lib/groups/getWall.js +56 -0
- package/lib/groups/groupPayout.js +103 -0
- package/lib/groups/handleJoinRequest.js +57 -0
- package/lib/groups/handleJoinRequests.js +61 -0
- package/lib/groups/leaveGroup.js +56 -0
- package/lib/groups/onAuditLog.js +62 -0
- package/lib/groups/onJoinRequest.js +63 -0
- package/lib/groups/onJoinRequestHandle.js +105 -0
- package/lib/groups/onShout.js +57 -0
- package/lib/groups/onWallPost.js +58 -0
- package/lib/groups/promote.js +25 -0
- package/lib/groups/searchGroups.js +32 -0
- package/lib/groups/setGroupDescription.js +58 -0
- package/lib/groups/setGroupName.js +59 -0
- package/lib/groups/setRank.js +74 -0
- package/lib/groups/setRoleInfo.js +84 -0
- package/lib/groups/shout.js +58 -0
- package/lib/groups/unbanFromGroup.js +41 -0
- package/lib/index.js +212 -0
- package/lib/internal/levelOneCopy.js +16 -0
- package/lib/internal/queue.js +61 -0
- package/lib/internal/timeout.js +30 -0
- package/lib/internal/wrap.js +78 -0
- package/lib/inventory/getCollectibles.js +31 -0
- package/lib/inventory/getInventory.js +32 -0
- package/lib/inventory/getInventoryById.js +31 -0
- package/lib/inventory/getOwnership.js +47 -0
- package/lib/inventory/getUAIDs.js +47 -0
- package/lib/itemconfiguration/getGroupAssets.js +32 -0
- package/lib/options.js +26 -0
- package/lib/party/onPartyDeleted.js +53 -0
- package/lib/party/onPartyInvite.js +53 -0
- package/lib/party/onPartyJoinedGame.js +53 -0
- package/lib/party/onPartyLeftGame.js +53 -0
- package/lib/party/onPartySelfJoined.js +53 -0
- package/lib/party/onPartySelfLeft.js +53 -0
- package/lib/party/onPartyUserJoined.js +53 -0
- package/lib/party/onPartyUserLeft.js +53 -0
- package/lib/premiumfeatures/getPremium.js +46 -0
- package/lib/presence/getPresences.js +60 -0
- package/lib/privatemessages/getMessages.js +55 -0
- package/lib/privatemessages/message.js +75 -0
- package/lib/privatemessages/onMessage.js +89 -0
- package/lib/thumbnails/getLogo.js +56 -0
- package/lib/thumbnails/getPlayerThumbnail.js +120 -0
- package/lib/thumbnails/getThumbnails.js +92 -0
- package/lib/trades/acceptTrade.js +52 -0
- package/lib/trades/canTradeWith.js +43 -0
- package/lib/trades/counterTrade.js +78 -0
- package/lib/trades/declineTrade.js +52 -0
- package/lib/trades/getTradeInfo.js +47 -0
- package/lib/trades/getTrades.js +37 -0
- package/lib/trades/sendTrade.js +76 -0
- package/lib/users/getBlurb.js +37 -0
- package/lib/users/getIdFromUsername.js +56 -0
- package/lib/users/getPlayerInfo.js +128 -0
- package/lib/users/getUserInfo.js +35 -0
- package/lib/users/getUsernameFromId.js +45 -0
- package/lib/users/getUsernameHistory.js +42 -0
- package/lib/users/onBlurbChange.js +46 -0
- package/lib/users/searchUsers.js +41 -0
- package/lib/util/apiError.js +50 -0
- package/lib/util/clearSession.js +32 -0
- package/lib/util/generalRequest.js +61 -0
- package/lib/util/getAction.js +45 -0
- package/lib/util/getAuthenticatedUser.js +41 -0
- package/lib/util/getCurrentUser.js +58 -0
- package/lib/util/getGeneralToken.js +52 -0
- package/lib/util/getHash.js +29 -0
- package/lib/util/getInputs.js +37 -0
- package/lib/util/getPageResults.js +86 -0
- package/lib/util/getSenderUserId.js +30 -0
- package/lib/util/getSession.js +38 -0
- package/lib/util/getVerification.js +60 -0
- package/lib/util/getVerificationInputs.js +31 -0
- package/lib/util/http.js +138 -0
- package/lib/util/jar.js +25 -0
- package/lib/util/refreshCookie.js +52 -0
- package/lib/util/relog.js +81 -0
- package/lib/util/setOptions.js +54 -0
- package/lib/util/shortPoll.js +102 -0
- package/package.json +76 -0
- package/postinstall.mjs +1 -0
- package/settings.json +115 -0
- package/test/accountinformation.test.js +27 -0
- package/test/accountsettings.test.js +27 -0
- package/test/asset.test.js +81 -0
- package/test/assets/Great-White-Shark-Fin.rbxm +0 -0
- package/test/assets/KeyframeSequence.rbxm +0 -0
- package/test/avatar.test.js +164 -0
- package/test/badges.test.js +96 -0
- package/test/chat.test.js +104 -0
- package/test/datastore.test.js +105 -0
- package/test/develop.test.js +53 -0
- package/test/economy.test.js +143 -0
- package/test/friends.test.js +146 -0
- package/test/games.test.js +229 -0
- package/test/groups.test.js +405 -0
- package/test/inventory.test.js +98 -0
- package/test/itemconfiguration.test.js +24 -0
- package/test/premiumfeatures.test.js +17 -0
- package/test/presence.test.js +25 -0
- package/test/privatemessages.test.js +33 -0
- package/test/thumbnails.test.js +53 -0
- package/test/users.test.js +110 -0
- package/tutorials/Authentication.md +75 -0
- package/tutorials/Event Emitters.md +26 -0
- package/tutorials/Promises.md +86 -0
- package/tutorials/VPS Authentication.md +72 -0
- package/typings/index.d.ts +2639 -0
- package/typings/jsDocs.ts +1987 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
|
4
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
5
|
+
|
|
6
|
+
// Args
|
|
7
|
+
exports.required = ['id', 'name', 'description']
|
|
8
|
+
exports.optional = ['enableComments', 'sellForRobux', 'genreSelection', 'jar']
|
|
9
|
+
|
|
10
|
+
// Docs
|
|
11
|
+
/**
|
|
12
|
+
* 🔐 Configure an asset.
|
|
13
|
+
* @category Develop
|
|
14
|
+
* @alias configureItem
|
|
15
|
+
* @param {number} assetId - The id of the asset.
|
|
16
|
+
* @param {string} name - The new name of the asset.
|
|
17
|
+
* @param {string} description - The new description of the asset.
|
|
18
|
+
* @param {boolean=} enableComments - Enable comments on your asset.
|
|
19
|
+
* @param {number|boolean=} [sellForRobux=false] - The amount of robux to sell for; use a number for sellable assets, boolean for copyable assets
|
|
20
|
+
* @param {string=} [genreSelection="All"] - The genre of your asset.
|
|
21
|
+
* @returns {Promise<ConfigureItemResponse>}
|
|
22
|
+
* @example const noblox = require("noblox.js")
|
|
23
|
+
* // Login using your cookie
|
|
24
|
+
* noblox.configureItem(1117747196, "Item", "A cool item.", false, 100)
|
|
25
|
+
**/
|
|
26
|
+
|
|
27
|
+
// Define
|
|
28
|
+
function configure (jar, token, id, name, description, enableComments, sellForRobux, genreSelection, sellingPrice) {
|
|
29
|
+
return http({
|
|
30
|
+
url: '//develop.roblox.com/v1/assets/' + id,
|
|
31
|
+
options: {
|
|
32
|
+
method: 'PATCH',
|
|
33
|
+
jar,
|
|
34
|
+
headers: {
|
|
35
|
+
'X-CSRF-TOKEN': token
|
|
36
|
+
},
|
|
37
|
+
json: {
|
|
38
|
+
name,
|
|
39
|
+
description,
|
|
40
|
+
enableComments,
|
|
41
|
+
genres: genreSelection || ['All'],
|
|
42
|
+
isCopyingAllowed: typeof (sellForRobux) === 'boolean' ? sellForRobux : null
|
|
43
|
+
},
|
|
44
|
+
resolveWithFullResponse: true
|
|
45
|
+
}
|
|
46
|
+
}).then(function (res) {
|
|
47
|
+
const json = JSON.parse(res.body)
|
|
48
|
+
|
|
49
|
+
if (!json.errors) {
|
|
50
|
+
const response = {
|
|
51
|
+
name,
|
|
52
|
+
description,
|
|
53
|
+
assetId: id
|
|
54
|
+
}
|
|
55
|
+
if (typeof sellForRobux === 'boolean') {
|
|
56
|
+
response.isCopyingAllowed = sellForRobux
|
|
57
|
+
} else {
|
|
58
|
+
response.price = sellingPrice || 0
|
|
59
|
+
}
|
|
60
|
+
return response
|
|
61
|
+
} else {
|
|
62
|
+
if (json.errors[0].code === 13) { // "Only a marketplace asset can be updated with IsCopyingAllowed."
|
|
63
|
+
throw new Error('Attempting to make a sellable asset copyable; it must be sold for robux. (Use a number for sellForRobux.)')
|
|
64
|
+
}
|
|
65
|
+
throw new RobloxAPIError(res)
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function configureRobux (args) {
|
|
71
|
+
return http({
|
|
72
|
+
url: '//itemconfiguration.roblox.com/v1/assets/' + args.id + '/release',
|
|
73
|
+
options: {
|
|
74
|
+
method: 'POST',
|
|
75
|
+
jar: args.jar,
|
|
76
|
+
headers: {
|
|
77
|
+
'X-CSRF-TOKEN': args.token
|
|
78
|
+
},
|
|
79
|
+
json: {
|
|
80
|
+
saleStatus: args.sellForRobux ? 'OnSale' : 'OffSale',
|
|
81
|
+
priceConfiguration: {
|
|
82
|
+
priceInRobux: args.sellForRobux || 0
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
resolveWithFullResponse: true
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
.then(function (res) {
|
|
89
|
+
const json = res.body
|
|
90
|
+
|
|
91
|
+
if (!json.errors) {
|
|
92
|
+
return configure(args.jar, args.token, args.id, args.name, args.description, args.enableComments, args.sellForRobux, args.genreSelection, args.sellForRobux)
|
|
93
|
+
} else {
|
|
94
|
+
// Code 6: "Asset is released"; caused when changing the price of an on-sale asset from non-zero to non-zero
|
|
95
|
+
if (json.errors[0].code === 6) {
|
|
96
|
+
return http({
|
|
97
|
+
url: '//itemconfiguration.roblox.com/v1/assets/' + args.id + '/update-price',
|
|
98
|
+
options: {
|
|
99
|
+
method: 'POST',
|
|
100
|
+
jar: args.jar,
|
|
101
|
+
headers: {
|
|
102
|
+
'X-CSRF-TOKEN': args.token
|
|
103
|
+
},
|
|
104
|
+
json: {
|
|
105
|
+
priceConfiguration: {
|
|
106
|
+
priceInRobux: args.sellForRobux
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
resolveWithFullResponse: true
|
|
110
|
+
}
|
|
111
|
+
}).then((res) => {
|
|
112
|
+
const err = res.body
|
|
113
|
+
if (!err.errors) {
|
|
114
|
+
return configure(args.jar, args.token, args.id, args.name, args.description, args.enableComments, args.sellForRobux, args.genreSelection, args.sellForRobux)
|
|
115
|
+
} else {
|
|
116
|
+
throw new Error(json.errors[0].message)
|
|
117
|
+
}
|
|
118
|
+
})
|
|
119
|
+
} else if (json.errors[0].code === 3) { // "Cannot release the associated asset type" - caused by copyable asset using sellForRobux: 2 or greater
|
|
120
|
+
// Throw an error as the developer may have intended to sell the asset for robux instead of making it free.
|
|
121
|
+
throw new Error('Attempting to sell a copyable asset for robux; it can only be made free. (Use true for sellForRobux.)')
|
|
122
|
+
} else if (json.errors[0].code === 20) { // "Cannot set the associated asset type to remove-from-release" - caused by copyable asset using sellForRobux: 0
|
|
123
|
+
// Continue and ignore the error as the intended outcome makes the asset private; set sellForRobux from 0 to false
|
|
124
|
+
return configure(args.jar, args.token, args.id, args.name, args.description, args.enableComments, args.sellForRobux, args.genreSelection, !!args.sellForRobux)
|
|
125
|
+
} else if (json.errors[0].code === 37) { // "AssetIsLimited" - Use the newer endpoint to update price and sale status
|
|
126
|
+
return http({
|
|
127
|
+
url: '//catalog.roblox.com/v1/catalog/items/details',
|
|
128
|
+
options: {
|
|
129
|
+
method: 'POST',
|
|
130
|
+
jar: args.jar,
|
|
131
|
+
json: {
|
|
132
|
+
items: [
|
|
133
|
+
{
|
|
134
|
+
id: args.id,
|
|
135
|
+
itemType: 1
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
resolveWithFullResponse: true
|
|
140
|
+
}
|
|
141
|
+
}).then((response) => {
|
|
142
|
+
if (!response.ok) throw new Error(response.body)
|
|
143
|
+
|
|
144
|
+
const { collectibleItemId, price } = JSON.parse(response.body)
|
|
145
|
+
|
|
146
|
+
if (!collectibleItemId) throw new Error(`The publishing fee for asset ${args.id} has not been paid, you must do this in order to change or set the price.`)
|
|
147
|
+
|
|
148
|
+
return http({
|
|
149
|
+
url: `//itemconfiguration.roblox.com/v1/collectibles/${collectibleItemId}`,
|
|
150
|
+
options: {
|
|
151
|
+
method: 'PATCH',
|
|
152
|
+
jar: args.jar,
|
|
153
|
+
headers: {
|
|
154
|
+
'X-CSRF-Token': args.token
|
|
155
|
+
},
|
|
156
|
+
json: {
|
|
157
|
+
isFree: false,
|
|
158
|
+
priceInRobux: args.sellForRobux || price,
|
|
159
|
+
priceOffset: 0,
|
|
160
|
+
quantityLimitPerUser: 0,
|
|
161
|
+
resaleRestriction: 2,
|
|
162
|
+
saleLocationConfiguration: {
|
|
163
|
+
places: [],
|
|
164
|
+
saleLocationType: 1
|
|
165
|
+
},
|
|
166
|
+
saleStatus: args.sellForRobux > 0 ? 0 : 1
|
|
167
|
+
},
|
|
168
|
+
resolveWithFullResponse: true
|
|
169
|
+
}
|
|
170
|
+
}).then((response) => {
|
|
171
|
+
if (!response.ok) throw new RobloxAPIError(response)
|
|
172
|
+
|
|
173
|
+
return {
|
|
174
|
+
name: args.name,
|
|
175
|
+
assetId: args.id,
|
|
176
|
+
description: args.description,
|
|
177
|
+
price: args.sellForRobux,
|
|
178
|
+
isCopyingAllowed: null
|
|
179
|
+
}
|
|
180
|
+
})
|
|
181
|
+
})
|
|
182
|
+
} else if (json.errors[0].code === 40) { // "Use collecibles publishing endpoint." - Publishing fee has not been paid for this asset
|
|
183
|
+
throw new Error(`The publishing fee for asset ${args.id} has not been paid, you must pay the fee before setting or updating the price.`)
|
|
184
|
+
}
|
|
185
|
+
throw new RobloxAPIError(res)
|
|
186
|
+
}
|
|
187
|
+
})
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function runWithToken (args) {
|
|
191
|
+
const jar = args.jar
|
|
192
|
+
return getGeneralToken({
|
|
193
|
+
jar
|
|
194
|
+
})
|
|
195
|
+
.then(function (token) {
|
|
196
|
+
if (typeof (args.sellForRobux) === 'number') {
|
|
197
|
+
if (args.sellForRobux < 2 && args.sellForRobux !== 0) {
|
|
198
|
+
throw new Error('Assets cannot be sold for less than 2R.')
|
|
199
|
+
}
|
|
200
|
+
args.token = token
|
|
201
|
+
return configureRobux(args)
|
|
202
|
+
} else {
|
|
203
|
+
return configure(args.jar, token, args.id, args.name, args.description, args.enableComments, args.sellForRobux, args.genreSelection)
|
|
204
|
+
}
|
|
205
|
+
})
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
exports.func = function (args) {
|
|
209
|
+
return runWithToken(args)
|
|
210
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
|
4
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
5
|
+
|
|
6
|
+
// Args
|
|
7
|
+
exports.required = ['universeId', 'settings']
|
|
8
|
+
exports.optional = ['jar']
|
|
9
|
+
|
|
10
|
+
// Docs
|
|
11
|
+
/**
|
|
12
|
+
* 🔐 Modifies a universe's settings
|
|
13
|
+
* @category Develop
|
|
14
|
+
* @alias updateUniverse
|
|
15
|
+
* @param {number} universeId - The universeId of the experience
|
|
16
|
+
* @param {UniverseSettings} settings - The settings to update
|
|
17
|
+
* @returns {Promise<UpdateUniverseResponse>}
|
|
18
|
+
* @example const noblox = require("noblox.js")
|
|
19
|
+
* // Login using your cookie
|
|
20
|
+
* noblox.updateUniverse(2421261122, { name: "The best game ever!" })
|
|
21
|
+
**/
|
|
22
|
+
|
|
23
|
+
// Define
|
|
24
|
+
function updateUniverse (universeId, settings, jar, token) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
return http({
|
|
27
|
+
url: `//develop.roblox.com/v1/universes/${universeId}/configuration`,
|
|
28
|
+
options: {
|
|
29
|
+
method: 'PATCH',
|
|
30
|
+
jar,
|
|
31
|
+
headers: {
|
|
32
|
+
'X-CSRF-TOKEN': token
|
|
33
|
+
},
|
|
34
|
+
json: settings,
|
|
35
|
+
resolveWithFullResponse: true
|
|
36
|
+
}
|
|
37
|
+
}).then((res) => {
|
|
38
|
+
if (res.statusCode === 200) {
|
|
39
|
+
resolve(res.body)
|
|
40
|
+
} else {
|
|
41
|
+
reject(new RobloxAPIError(res))
|
|
42
|
+
}
|
|
43
|
+
}).catch(reject)
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
exports.func = function ({ universeId, settings, jar }) {
|
|
48
|
+
return getGeneralToken({ jar })
|
|
49
|
+
.then((token) => {
|
|
50
|
+
return updateUniverse(universeId, settings, jar, token)
|
|
51
|
+
})
|
|
52
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
|
4
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
5
|
+
|
|
6
|
+
// Args
|
|
7
|
+
exports.required = ['universeId', 'isPublic']
|
|
8
|
+
exports.optional = ['jar']
|
|
9
|
+
|
|
10
|
+
// Docs
|
|
11
|
+
/**
|
|
12
|
+
* 🔐 Modifies a universe's public access setting
|
|
13
|
+
* @category Develop
|
|
14
|
+
* @alias updateUniverseAccess
|
|
15
|
+
* @param {number} universeId - The universeId of the experience
|
|
16
|
+
* @param {boolean=} isPublic - The visibility and access of the universe; shuts down all running instances if set to false
|
|
17
|
+
* @returns {Promise<void>}
|
|
18
|
+
* @example const noblox = require("noblox.js")
|
|
19
|
+
* // Login using your cookie
|
|
20
|
+
* noblox.updateUniverseAccess(2421261122, true)
|
|
21
|
+
**/
|
|
22
|
+
|
|
23
|
+
// Define
|
|
24
|
+
function updateUniverseAccess (universeId, isPublic, jar, token) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
return http({
|
|
27
|
+
url: `//develop.roblox.com/v1/universes/${universeId}/${isPublic ? 'activate' : 'deactivate'}`,
|
|
28
|
+
options: {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
jar,
|
|
31
|
+
headers: {
|
|
32
|
+
'X-CSRF-TOKEN': token
|
|
33
|
+
},
|
|
34
|
+
json: {
|
|
35
|
+
universeId
|
|
36
|
+
},
|
|
37
|
+
resolveWithFullResponse: true
|
|
38
|
+
}
|
|
39
|
+
}).then((res) => {
|
|
40
|
+
if (res.statusCode === 200) {
|
|
41
|
+
resolve()
|
|
42
|
+
} else {
|
|
43
|
+
reject(new RobloxAPIError(res))
|
|
44
|
+
}
|
|
45
|
+
}).catch(error => reject(error))
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
exports.func = function ({ universeId, isPublic, jar }) {
|
|
50
|
+
return getGeneralToken({ jar })
|
|
51
|
+
.then((token) => {
|
|
52
|
+
return updateUniverseAccess(universeId, isPublic, jar, token)
|
|
53
|
+
})
|
|
54
|
+
}
|
|
@@ -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 = ['group']
|
|
7
|
+
exports.optional = ['jar']
|
|
8
|
+
|
|
9
|
+
// Docs
|
|
10
|
+
/**
|
|
11
|
+
* 🔓 Gets the amount of robux in a group.
|
|
12
|
+
* @category Group
|
|
13
|
+
* @alias getGroupFunds
|
|
14
|
+
* @param {number} group - The id of the group
|
|
15
|
+
* @returns {Promise<number>}
|
|
16
|
+
* @example const noblox = require("noblox.js")
|
|
17
|
+
* // Login using your cookie (optional if group funds are public)
|
|
18
|
+
* let robux = await noblox.getGroupFunds(9997719)
|
|
19
|
+
**/
|
|
20
|
+
|
|
21
|
+
// Define
|
|
22
|
+
function getGroupFunds (group, jar) {
|
|
23
|
+
return http({
|
|
24
|
+
url: `//economy.roblox.com/v1/groups/${group}/currency`,
|
|
25
|
+
options: {
|
|
26
|
+
jar,
|
|
27
|
+
resolveWithFullResponse: true
|
|
28
|
+
}
|
|
29
|
+
})
|
|
30
|
+
.then((res) => {
|
|
31
|
+
const { robux } = JSON.parse(res.body)
|
|
32
|
+
if (res.statusCode === 200) {
|
|
33
|
+
return robux
|
|
34
|
+
} else {
|
|
35
|
+
throw new RobloxAPIError(res)
|
|
36
|
+
}
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
exports.func = function ({ group, jar }) {
|
|
41
|
+
return getGroupFunds(group, jar)
|
|
42
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = ['group', 'members']
|
|
7
|
+
exports.optional = ['jar']
|
|
8
|
+
|
|
9
|
+
// Docs
|
|
10
|
+
/**
|
|
11
|
+
* 🔐 Get if a user can be paid from group funds.
|
|
12
|
+
* @category Group
|
|
13
|
+
* @alias getGroupPayoutEligibility
|
|
14
|
+
* @param {number} group - The id of the group.
|
|
15
|
+
* @param {number[]} members - The members to check payout status for.
|
|
16
|
+
* @returns {Promise<PayoutAllowedList>}
|
|
17
|
+
* @example const noblox = require("noblox.js")
|
|
18
|
+
* // Log in with cookie
|
|
19
|
+
* const payoutStatus = await noblox.getGroupPayoutEligibility(1, [2])
|
|
20
|
+
**/
|
|
21
|
+
|
|
22
|
+
// Define
|
|
23
|
+
function getGroupPayoutEligibility (group, members, jar) {
|
|
24
|
+
const memberList = []
|
|
25
|
+
|
|
26
|
+
for (const member of members) {
|
|
27
|
+
memberList.push(`userIds=${member}`)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
const httpOpt = {
|
|
32
|
+
url: `https://economy.roblox.com/v1/groups/${group}/users-payout-eligibility?${memberList.join('&')}`,
|
|
33
|
+
options: {
|
|
34
|
+
method: 'GET',
|
|
35
|
+
resolveWithFullResponse: true,
|
|
36
|
+
jar
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return http(httpOpt)
|
|
41
|
+
.then(function (res) {
|
|
42
|
+
const responseData = JSON.parse(res.body)
|
|
43
|
+
if (res.statusCode !== 200) {
|
|
44
|
+
reject(new RobloxAPIError(res))
|
|
45
|
+
} else {
|
|
46
|
+
resolve(responseData)
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
.catch(error => reject(error))
|
|
50
|
+
})
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
exports.func = function (args) {
|
|
54
|
+
return getGroupPayoutEligibility(args.group, args.members, args.jar)
|
|
55
|
+
}
|
|
@@ -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 = ['groupId']
|
|
7
|
+
exports.optional = ['timeFrame', 'jar']
|
|
8
|
+
|
|
9
|
+
// Docs
|
|
10
|
+
/**
|
|
11
|
+
* 🔐 Gets recent Robux revenue summary for a group; shows pending Robux. | Requires "Spend group funds" permissions.
|
|
12
|
+
* @category Group
|
|
13
|
+
* @alias getGroupRevenueSummary
|
|
14
|
+
* @param {number} groupId - The group id to get Robux summary for.
|
|
15
|
+
* @param {("Day" | "Week" | "Month" | "Year")=} [timeFrame="Month"] - The time frame to get for.
|
|
16
|
+
* @returns {Promise<RevenueSummaryResponse>}
|
|
17
|
+
* @example const noblox = require("noblox.js")
|
|
18
|
+
* // Login using your cookie
|
|
19
|
+
* let revenueSummary = await noblox.getGroupRevenueSummary(9997719, "Year")
|
|
20
|
+
**/
|
|
21
|
+
|
|
22
|
+
// Define
|
|
23
|
+
function getGroupRevenueSummary (group, timeFrame, jar) {
|
|
24
|
+
return http({
|
|
25
|
+
url: `//economy.roblox.com/v1/groups/${group}/revenue/summary/${timeFrame}`,
|
|
26
|
+
options: {
|
|
27
|
+
jar,
|
|
28
|
+
resolveWithFullResponse: true
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
.then((res) => {
|
|
32
|
+
if (res.statusCode === 200) {
|
|
33
|
+
return JSON.parse(res.body)
|
|
34
|
+
} else {
|
|
35
|
+
throw new RobloxAPIError(res)
|
|
36
|
+
}
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
exports.func = function ({ groupId, timeFrame = 'Month', jar }) {
|
|
41
|
+
return getGroupRevenueSummary(groupId, timeFrame, jar)
|
|
42
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const getPageResults = require('../util/getPageResults.js').func
|
|
2
|
+
|
|
3
|
+
exports.required = ['group']
|
|
4
|
+
exports.optional = ['transactionType', 'limit', 'sortOrder', 'jar']
|
|
5
|
+
|
|
6
|
+
// Docs
|
|
7
|
+
/**
|
|
8
|
+
* 🔐 Get a group's transactions.
|
|
9
|
+
* @category Group
|
|
10
|
+
* @alias getGroupTransactions
|
|
11
|
+
* @param {number} group - The id of the group.
|
|
12
|
+
* @param {("Sale" | "Purchase" | "AffiliateSale" | "DevEx" | "GroupPayout" | "AdImpressionPayout")} [transactionType=Sale] - The transaction type.
|
|
13
|
+
* @param {number} limit - The number of transactions being fetched in total.
|
|
14
|
+
* @param {SortOrder=} [sortOrder=Asc] - The cursor for the next page.
|
|
15
|
+
* @returns {Promise<TransactionItem[]>}
|
|
16
|
+
* @example const noblox = require("noblox.js")
|
|
17
|
+
* // Login using your cookie
|
|
18
|
+
* const transactions = await noblox.getGroupTransactions(1, "Sale")
|
|
19
|
+
**/
|
|
20
|
+
|
|
21
|
+
// Define
|
|
22
|
+
exports.func = function (args) {
|
|
23
|
+
return getPageResults({
|
|
24
|
+
jar: args.jar,
|
|
25
|
+
url: `//economy.roblox.com/v2/groups/${args.group}/transactions`,
|
|
26
|
+
query: {
|
|
27
|
+
transactionType: args.transactionType || 'Sale'
|
|
28
|
+
},
|
|
29
|
+
sortOrder: args.sortOrder || 'Asc',
|
|
30
|
+
limit: args.limit
|
|
31
|
+
})
|
|
32
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http').func
|
|
3
|
+
const RobloxAPIError = require('../util/apiError')
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = ['assetId']
|
|
7
|
+
exports.optional = ['jar']
|
|
8
|
+
|
|
9
|
+
// Docs
|
|
10
|
+
/**
|
|
11
|
+
* ✅ Get the recent sale history (price and volume per day for 180 days) of a limited asset.
|
|
12
|
+
* @category Assets
|
|
13
|
+
* @alias getResaleData
|
|
14
|
+
* @param {number} assetId - The id of the asset.
|
|
15
|
+
* @returns {Promise<ResaleDataResponse>}
|
|
16
|
+
* @example const noblox = require("noblox.js")
|
|
17
|
+
* const resaleData = await noblox.getResaleData(20573078)
|
|
18
|
+
**/
|
|
19
|
+
|
|
20
|
+
// Define
|
|
21
|
+
const getResaleData = async (assetId) => {
|
|
22
|
+
return http({
|
|
23
|
+
url: `//economy.roblox.com/v1/assets/${assetId}/resale-data`,
|
|
24
|
+
options: {
|
|
25
|
+
resolveWithFullResponse: true
|
|
26
|
+
}
|
|
27
|
+
}).then((res) => {
|
|
28
|
+
if (res.statusCode === 200) {
|
|
29
|
+
const resaleData = JSON.parse(res.body)
|
|
30
|
+
for (const priceDataPoint of resaleData.priceDataPoints) {
|
|
31
|
+
priceDataPoint.date = new Date(priceDataPoint.date)
|
|
32
|
+
}
|
|
33
|
+
for (const volumeDataPoint of resaleData.volumeDataPoints) {
|
|
34
|
+
volumeDataPoint.date = new Date(volumeDataPoint.date)
|
|
35
|
+
}
|
|
36
|
+
return resaleData
|
|
37
|
+
} else {
|
|
38
|
+
throw new RobloxAPIError(res)
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
exports.func = function ({ assetId }) {
|
|
44
|
+
if (isNaN(assetId)) {
|
|
45
|
+
throw new Error('The provided assetId is not a number.')
|
|
46
|
+
}
|
|
47
|
+
return getResaleData(assetId)
|
|
48
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const getPageResults = require('../util/getPageResults.js').func
|
|
3
|
+
|
|
4
|
+
// Args
|
|
5
|
+
exports.required = ['assetId']
|
|
6
|
+
exports.optional = ['limit', 'jar']
|
|
7
|
+
|
|
8
|
+
// Docs
|
|
9
|
+
/**
|
|
10
|
+
* 🔐 Gets available resale copies of a limited asset.
|
|
11
|
+
* @category Assets
|
|
12
|
+
* @alias getResellers
|
|
13
|
+
* @param {number} assetId - The id of the asset.
|
|
14
|
+
* @param {Limit=} limit - The max number of resellers to return.
|
|
15
|
+
* @returns {Promise<ResellerData[]>}
|
|
16
|
+
* @example const noblox = require("noblox.js")
|
|
17
|
+
* // Login using your cookie
|
|
18
|
+
* const resellers = await noblox.getResellers(20573078)
|
|
19
|
+
**/
|
|
20
|
+
|
|
21
|
+
// Define
|
|
22
|
+
const getResellers = async (assetId, limit, jar) => {
|
|
23
|
+
return getPageResults({
|
|
24
|
+
url: `//economy.roblox.com/v1/assets/${assetId}/resellers`,
|
|
25
|
+
limit,
|
|
26
|
+
jar
|
|
27
|
+
})
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
exports.func = function ({ assetId, limit, jar }) {
|
|
31
|
+
if (isNaN(assetId)) {
|
|
32
|
+
throw new Error('The provided assetId ID is not a number.')
|
|
33
|
+
}
|
|
34
|
+
return getResellers(assetId, limit, jar)
|
|
35
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = ['userId']
|
|
7
|
+
exports.optional = ['jar']
|
|
8
|
+
|
|
9
|
+
// Docs
|
|
10
|
+
/**
|
|
11
|
+
* 🔓 Gets the amount of robux for the authenticated user.
|
|
12
|
+
* @category User
|
|
13
|
+
* @param {number} userId - Must match the userId of the authenticated user
|
|
14
|
+
* @alias getUserFunds
|
|
15
|
+
* @returns {Promise<number>}
|
|
16
|
+
* @example const noblox = require("noblox.js")
|
|
17
|
+
* // Login using your cookie
|
|
18
|
+
* const currentUser = await noblox.setCookie(process.env.ROBLOXCOOKIE)
|
|
19
|
+
* const robux = await noblox.getUserFunds(currentUser.id)
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
// Define
|
|
23
|
+
function getUserFunds (userId, jar) {
|
|
24
|
+
return http({
|
|
25
|
+
url: `//economy.roblox.com/v1/users/${userId}/currency`,
|
|
26
|
+
options: {
|
|
27
|
+
jar,
|
|
28
|
+
resolveWithFullResponse: true
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
.then((res) => {
|
|
32
|
+
const { robux } = JSON.parse(res.body)
|
|
33
|
+
if (res.statusCode === 200) {
|
|
34
|
+
return robux
|
|
35
|
+
} else {
|
|
36
|
+
throw new RobloxAPIError(res)
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
exports.func = function ({ userId, jar }) {
|
|
42
|
+
return getUserFunds(userId, jar)
|
|
43
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const getPageResults = require('../util/getPageResults.js').func
|
|
2
|
+
const getCurrentUser = require('../util/getCurrentUser.js').func
|
|
3
|
+
|
|
4
|
+
exports.required = []
|
|
5
|
+
exports.optional = ['transactionType', 'limit', 'sortOrder', 'jar']
|
|
6
|
+
|
|
7
|
+
// Docs
|
|
8
|
+
/**
|
|
9
|
+
* 🔐 Get a user's transactions.
|
|
10
|
+
* @category User
|
|
11
|
+
* @alias getUserTransactions
|
|
12
|
+
* @param {("Sale" | "Purchase" | "AffiliateSale" | "DevEx" | "GroupPayout" | "AdImpressionPayout")} [transactionType=Sale] - The type of transactions being fetched.
|
|
13
|
+
* @param {number} limit - The number of transactions being fetched in total.
|
|
14
|
+
* @param {SortOrder=} [sortOrder=Asc] - The cursor for the next page.
|
|
15
|
+
* @returns {Promise<TransactionItem[]>}
|
|
16
|
+
* @example const noblox = require("noblox.js")
|
|
17
|
+
* // Login using your cookie
|
|
18
|
+
* let transactions = await noblox.getUserTransactions("Sale", 10)
|
|
19
|
+
**/
|
|
20
|
+
|
|
21
|
+
exports.func = async function (args) {
|
|
22
|
+
const jar = args.jar
|
|
23
|
+
const currentUser = await getCurrentUser({ jar })
|
|
24
|
+
// return getTransactions(currentUser.UserID, transactionType, limit, cursor)
|
|
25
|
+
return getPageResults({
|
|
26
|
+
jar: args.jar,
|
|
27
|
+
url: `//economy.roblox.com/v2/users/${currentUser.UserID}/transactions`,
|
|
28
|
+
query: {
|
|
29
|
+
transactionType: args.transactionType || 'Sale'
|
|
30
|
+
},
|
|
31
|
+
sortOrder: args.sortOrder || 'Asc',
|
|
32
|
+
limit: args.limit
|
|
33
|
+
})
|
|
34
|
+
}
|