@audius/sdk 0.0.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 (278) hide show
  1. package/.eslintrc +38 -0
  2. package/.prettierrc.js +1 -0
  3. package/.python-version +1 -0
  4. package/Dockerfile +15 -0
  5. package/README.md +3 -0
  6. package/babel.config.js +3 -0
  7. package/data-contracts/ABIs/AdminUpgradeabilityProxy.json +132 -0
  8. package/data-contracts/ABIs/BaseAdminUpgradeabilityProxy.json +113 -0
  9. package/data-contracts/ABIs/BaseUpgradeabilityProxy.json +22 -0
  10. package/data-contracts/ABIs/DiscoveryProviderFactory.json +189 -0
  11. package/data-contracts/ABIs/DiscoveryProviderFactoryInterface.json +61 -0
  12. package/data-contracts/ABIs/DiscoveryProviderStorage.json +205 -0
  13. package/data-contracts/ABIs/DiscoveryProviderStorageInterface.json +65 -0
  14. package/data-contracts/ABIs/ECDSA.json +4 -0
  15. package/data-contracts/ABIs/IPLDBlacklistFactory.json +168 -0
  16. package/data-contracts/ABIs/Initializable.json +4 -0
  17. package/data-contracts/ABIs/Migrations.json +67 -0
  18. package/data-contracts/ABIs/OpenZeppelinUpgradesAddress.json +4 -0
  19. package/data-contracts/ABIs/Ownable.json +79 -0
  20. package/data-contracts/ABIs/PlaylistFactory.json +669 -0
  21. package/data-contracts/ABIs/PlaylistFactoryInterface.json +42 -0
  22. package/data-contracts/ABIs/PlaylistStorage.json +250 -0
  23. package/data-contracts/ABIs/PlaylistStorageInterface.json +129 -0
  24. package/data-contracts/ABIs/Proxy.json +10 -0
  25. package/data-contracts/ABIs/Registry.json +240 -0
  26. package/data-contracts/ABIs/RegistryContract.json +102 -0
  27. package/data-contracts/ABIs/RegistryContractInterface.json +28 -0
  28. package/data-contracts/ABIs/RegistryInterface.json +66 -0
  29. package/data-contracts/ABIs/SigningLogic.json +43 -0
  30. package/data-contracts/ABIs/SigningLogicInitializable.json +46 -0
  31. package/data-contracts/ABIs/SocialFeatureFactory.json +460 -0
  32. package/data-contracts/ABIs/SocialFeatureStorage.json +225 -0
  33. package/data-contracts/ABIs/SocialFeatureStorageInterface.json +123 -0
  34. package/data-contracts/ABIs/TestContract.json +135 -0
  35. package/data-contracts/ABIs/TestContractInterface.json +19 -0
  36. package/data-contracts/ABIs/TestContractWithStorage.json +165 -0
  37. package/data-contracts/ABIs/TestContractWithStorageInterface.json +24 -0
  38. package/data-contracts/ABIs/TestStorage.json +144 -0
  39. package/data-contracts/ABIs/TestStorageInterface.json +42 -0
  40. package/data-contracts/ABIs/TestUserReplicaSetManager.json +432 -0
  41. package/data-contracts/ABIs/TrackFactory.json +391 -0
  42. package/data-contracts/ABIs/TrackFactoryInterface.json +73 -0
  43. package/data-contracts/ABIs/TrackStorage.json +223 -0
  44. package/data-contracts/ABIs/TrackStorageInterface.json +121 -0
  45. package/data-contracts/ABIs/UpgradeabilityProxy.json +37 -0
  46. package/data-contracts/ABIs/UserFactory.json +657 -0
  47. package/data-contracts/ABIs/UserFactoryInterface.json +65 -0
  48. package/data-contracts/ABIs/UserLibraryFactory.json +334 -0
  49. package/data-contracts/ABIs/UserReplicaSetManager.json +418 -0
  50. package/data-contracts/ABIs/UserStorage.json +233 -0
  51. package/data-contracts/ABIs/UserStorageInterface.json +93 -0
  52. package/data-contracts/signatureSchemas.ts +1236 -0
  53. package/dist/core.d.ts +446 -0
  54. package/dist/core.js +769 -0
  55. package/dist/core.js.map +1 -0
  56. package/dist/index.d.ts +689 -0
  57. package/dist/index.js +72850 -0
  58. package/dist/index.js.map +1 -0
  59. package/eth-contracts/ABIs/Address.json +4 -0
  60. package/eth-contracts/ABIs/AudiusAdminUpgradeabilityProxy.json +105 -0
  61. package/eth-contracts/ABIs/AudiusClaimDistributor.json +4968 -0
  62. package/eth-contracts/ABIs/AudiusToken.json +724 -0
  63. package/eth-contracts/ABIs/BaseUpgradeabilityProxy.json +23 -0
  64. package/eth-contracts/ABIs/Checkpointing.json +4 -0
  65. package/eth-contracts/ABIs/ClaimsManager.json +539 -0
  66. package/eth-contracts/ABIs/Context.json +11 -0
  67. package/eth-contracts/ABIs/DelegateManager.json +989 -0
  68. package/eth-contracts/ABIs/DelegateManagerV2.json +1049 -0
  69. package/eth-contracts/ABIs/DelegateManagerV2Bad.json +1049 -0
  70. package/eth-contracts/ABIs/ERC20.json +252 -0
  71. package/eth-contracts/ABIs/ERC20Burnable.json +287 -0
  72. package/eth-contracts/ABIs/ERC20Detailed.json +270 -0
  73. package/eth-contracts/ABIs/ERC20Mintable.json +364 -0
  74. package/eth-contracts/ABIs/ERC20Pausable.json +397 -0
  75. package/eth-contracts/ABIs/EthRewardsManager.json +174 -0
  76. package/eth-contracts/ABIs/Governance.json +938 -0
  77. package/eth-contracts/ABIs/GovernanceUpgraded.json +953 -0
  78. package/eth-contracts/ABIs/GovernanceV2.json +938 -0
  79. package/eth-contracts/ABIs/IERC20.json +200 -0
  80. package/eth-contracts/ABIs/Initializable.json +4 -0
  81. package/eth-contracts/ABIs/InitializableV2.json +14 -0
  82. package/eth-contracts/ABIs/Migrations.json +71 -0
  83. package/eth-contracts/ABIs/MinterRole.json +91 -0
  84. package/eth-contracts/ABIs/MockAccount.json +62 -0
  85. package/eth-contracts/ABIs/MockDelegateManager.json +55 -0
  86. package/eth-contracts/ABIs/MockStakingCaller.json +259 -0
  87. package/eth-contracts/ABIs/MockWormhole.json +106 -0
  88. package/eth-contracts/ABIs/OpenZeppelinUpgradesAddress.json +4 -0
  89. package/eth-contracts/ABIs/Ownable.json +93 -0
  90. package/eth-contracts/ABIs/Pausable.json +150 -0
  91. package/eth-contracts/ABIs/PauserRole.json +91 -0
  92. package/eth-contracts/ABIs/Proxy.json +10 -0
  93. package/eth-contracts/ABIs/Registry.json +288 -0
  94. package/eth-contracts/ABIs/Roles.json +4 -0
  95. package/eth-contracts/ABIs/SafeERC20.json +4 -0
  96. package/eth-contracts/ABIs/SafeMath.json +4 -0
  97. package/eth-contracts/ABIs/ServiceProviderFactory.json +1153 -0
  98. package/eth-contracts/ABIs/ServiceTypeManager.json +337 -0
  99. package/eth-contracts/ABIs/Staking.json +555 -0
  100. package/eth-contracts/ABIs/StakingUpgraded.json +570 -0
  101. package/eth-contracts/ABIs/TestContract.json +44 -0
  102. package/eth-contracts/ABIs/TrustedNotifierManager.json +265 -0
  103. package/eth-contracts/ABIs/Uint256Helpers.json +4 -0
  104. package/eth-contracts/ABIs/UpgradeabilityProxy.json +40 -0
  105. package/eth-contracts/ABIs/Wormhole.json +45 -0
  106. package/eth-contracts/ABIs/WormholeClient.json +155 -0
  107. package/examples/file.mp3 +0 -0
  108. package/examples/initAudiusLibs.js +86 -0
  109. package/examples/initializeVersions.js +95 -0
  110. package/examples/pic.jpg +0 -0
  111. package/initScripts/configureLocalDiscProv.js +167 -0
  112. package/initScripts/helpers/claim.js +43 -0
  113. package/initScripts/helpers/distributeTokens.js +24 -0
  114. package/initScripts/helpers/spRegistration.js +138 -0
  115. package/initScripts/helpers/utils.js +34 -0
  116. package/initScripts/helpers/version.js +93 -0
  117. package/initScripts/local.js +617 -0
  118. package/initScripts/mainnet.js +131 -0
  119. package/initScripts/manageProdRelayerWallets.js +191 -0
  120. package/package.json +125 -0
  121. package/rollup.config.js +164 -0
  122. package/scripts/AudiusClaimDistributor.json +4968 -0
  123. package/scripts/Wormhole.json +155 -0
  124. package/scripts/addCIDToIpldBlacklist.js +124 -0
  125. package/scripts/circleci-test.sh +53 -0
  126. package/scripts/communityRewards/transferCommunityRewardsToSolana.js +222 -0
  127. package/scripts/ipfs.sh +58 -0
  128. package/scripts/migrate_contracts.sh +25 -0
  129. package/scripts/reset.sh +65 -0
  130. package/scripts/test.sh +77 -0
  131. package/src/api/account.js +670 -0
  132. package/src/api/base.js +122 -0
  133. package/src/api/file.js +168 -0
  134. package/src/api/playlist.js +328 -0
  135. package/src/api/rewards.d.ts +4 -0
  136. package/src/api/rewards.js +682 -0
  137. package/src/api/serviceProvider.js +154 -0
  138. package/src/api/track.js +604 -0
  139. package/src/api/user.js +888 -0
  140. package/src/api/user.test.js +172 -0
  141. package/src/constants.ts +7 -0
  142. package/src/core.ts +3 -0
  143. package/src/index.js +6 -0
  144. package/src/libs.d.ts +3 -0
  145. package/src/libs.js +619 -0
  146. package/src/sanityChecks/addSecondaries.js +40 -0
  147. package/src/sanityChecks/assignReplicaSetIfNecessary.js +10 -0
  148. package/src/sanityChecks/index.d.ts +9 -0
  149. package/src/sanityChecks/index.js +31 -0
  150. package/src/sanityChecks/isCreator.js +73 -0
  151. package/src/sanityChecks/needsRecoveryEmail.js +20 -0
  152. package/src/sanityChecks/rolloverNodes.js +74 -0
  153. package/src/sanityChecks/sanitizeNodes.js +24 -0
  154. package/src/sanityChecks/syncNodes.js +28 -0
  155. package/src/sdk/constants.ts +10 -0
  156. package/src/sdk/index.ts +1 -0
  157. package/src/sdk/oauth/Oauth.ts +265 -0
  158. package/src/sdk/oauth/index.ts +1 -0
  159. package/src/sdk/sdk.ts +102 -0
  160. package/src/service-selection/ServiceSelection.test.ts +320 -0
  161. package/src/service-selection/ServiceSelection.ts +460 -0
  162. package/src/service-selection/constants.ts +14 -0
  163. package/src/service-selection/index.ts +1 -0
  164. package/src/services/ABIDecoder/AudiusABIDecoder.ts +71 -0
  165. package/src/services/ABIDecoder/index.ts +1 -0
  166. package/src/services/comstock/Comstock.ts +39 -0
  167. package/src/services/comstock/index.ts +1 -0
  168. package/src/services/contracts/ContractClient.ts +227 -0
  169. package/src/services/contracts/GovernedContractClient.ts +53 -0
  170. package/src/services/contracts/ProviderSelection.ts +42 -0
  171. package/src/services/creatorNode/CreatorNode.ts +1065 -0
  172. package/src/services/creatorNode/CreatorNodeSelection.test.ts +997 -0
  173. package/src/services/creatorNode/CreatorNodeSelection.ts +488 -0
  174. package/src/services/creatorNode/constants.ts +10 -0
  175. package/src/services/creatorNode/index.ts +2 -0
  176. package/src/services/dataContracts/AudiusContracts.ts +234 -0
  177. package/src/services/dataContracts/IPLDBlacklistFactoryClient.ts +73 -0
  178. package/src/services/dataContracts/PlaylistFactoryClient.ts +370 -0
  179. package/src/services/dataContracts/RegistryClient.ts +95 -0
  180. package/src/services/dataContracts/SocialFeatureFactoryClient.ts +196 -0
  181. package/src/services/dataContracts/TrackFactoryClient.ts +131 -0
  182. package/src/services/dataContracts/UserFactoryClient.ts +351 -0
  183. package/src/services/dataContracts/UserLibraryFactoryClient.ts +115 -0
  184. package/src/services/dataContracts/UserReplicaSetManagerClient.ts +206 -0
  185. package/src/services/dataContracts/index.ts +1 -0
  186. package/src/services/discoveryProvider/DiscoveryProvider.ts +1168 -0
  187. package/src/services/discoveryProvider/DiscoveryProviderSelection.test.ts +536 -0
  188. package/src/services/discoveryProvider/DiscoveryProviderSelection.ts +383 -0
  189. package/src/services/discoveryProvider/constants.ts +13 -0
  190. package/src/services/discoveryProvider/index.ts +1 -0
  191. package/src/services/discoveryProvider/requests.ts +629 -0
  192. package/src/services/ethContracts/AudiusTokenClient.ts +163 -0
  193. package/src/services/ethContracts/ClaimDistributionClient.ts +45 -0
  194. package/src/services/ethContracts/ClaimsManagerClient.ts +102 -0
  195. package/src/services/ethContracts/DelegateManagerClient.ts +480 -0
  196. package/src/services/ethContracts/EthContracts.ts +359 -0
  197. package/src/services/ethContracts/EthRewardsManagerClient.ts +33 -0
  198. package/src/services/ethContracts/GovernanceClient.ts +451 -0
  199. package/src/services/ethContracts/RegistryClient.ts +33 -0
  200. package/src/services/ethContracts/ServiceProviderFactoryClient.ts +691 -0
  201. package/src/services/ethContracts/ServiceTypeManagerClient.ts +112 -0
  202. package/src/services/ethContracts/StakingProxyClient.ts +97 -0
  203. package/src/services/ethContracts/TrustedNotifierManagerClient.ts +101 -0
  204. package/src/services/ethContracts/WormholeClient.ts +97 -0
  205. package/src/services/ethContracts/index.ts +1 -0
  206. package/src/services/ethWeb3Manager/EthWeb3Manager.ts +239 -0
  207. package/src/services/ethWeb3Manager/index.ts +1 -0
  208. package/src/services/hedgehog/Hedgehog.ts +96 -0
  209. package/src/services/hedgehog/index.ts +1 -0
  210. package/src/services/identity/IdentityService.ts +551 -0
  211. package/src/services/identity/index.ts +1 -0
  212. package/src/services/identity/requests.ts +65 -0
  213. package/src/services/schemaValidator/SchemaValidator.ts +105 -0
  214. package/src/services/schemaValidator/index.ts +1 -0
  215. package/src/services/schemaValidator/schemas/trackSchema.json +267 -0
  216. package/src/services/schemaValidator/schemas/userSchema.json +230 -0
  217. package/src/services/solanaAudiusData/errors.ts +20 -0
  218. package/src/services/solanaAudiusData/index.ts +1189 -0
  219. package/src/services/solanaWeb3Manager/errors.js +101 -0
  220. package/src/services/solanaWeb3Manager/index.d.ts +46 -0
  221. package/src/services/solanaWeb3Manager/index.js +655 -0
  222. package/src/services/solanaWeb3Manager/padBNToUint8Array.ts +7 -0
  223. package/src/services/solanaWeb3Manager/rewards.js +941 -0
  224. package/src/services/solanaWeb3Manager/rewardsAttester.ts +1093 -0
  225. package/src/services/solanaWeb3Manager/tokenAccount.js +149 -0
  226. package/src/services/solanaWeb3Manager/transactionHandler.js +345 -0
  227. package/src/services/solanaWeb3Manager/transfer.js +272 -0
  228. package/src/services/solanaWeb3Manager/userBank.js +160 -0
  229. package/src/services/solanaWeb3Manager/utils.d.ts +31 -0
  230. package/src/services/solanaWeb3Manager/utils.js +163 -0
  231. package/src/services/solanaWeb3Manager/wAudio.js +28 -0
  232. package/src/services/solanaWeb3Manager/wAudio.test.js +30 -0
  233. package/src/services/web3Manager/Web3Config.ts +14 -0
  234. package/src/services/web3Manager/Web3Manager.ts +360 -0
  235. package/src/services/web3Manager/XMLHttpRequest.ts +11 -0
  236. package/src/services/web3Manager/index.ts +2 -0
  237. package/src/services/wormhole/index.js +424 -0
  238. package/src/types.ts +8 -0
  239. package/src/userStateManager.ts +53 -0
  240. package/src/utils/apiSigning.ts +51 -0
  241. package/src/utils/captcha.ts +97 -0
  242. package/src/utils/estimateGas.ts +64 -0
  243. package/src/utils/fileHasher.ts +278 -0
  244. package/src/utils/importContractABI.d.ts +9 -0
  245. package/src/utils/importContractABI.js +19 -0
  246. package/src/utils/index.ts +11 -0
  247. package/src/utils/multiProvider.ts +72 -0
  248. package/src/utils/network.test.ts +127 -0
  249. package/src/utils/network.ts +308 -0
  250. package/src/utils/promiseFight.test.ts +87 -0
  251. package/src/utils/promiseFight.ts +36 -0
  252. package/src/utils/signatures.ts +139 -0
  253. package/src/utils/types.ts +34 -0
  254. package/src/utils/utils.test.ts +36 -0
  255. package/src/utils/utils.ts +235 -0
  256. package/src/utils/uuid.ts +14 -0
  257. package/src/web3.d.ts +9 -0
  258. package/src/web3.js +8 -0
  259. package/tests/assets/static_image.png +0 -0
  260. package/tests/assets/static_text.txt +1 -0
  261. package/tests/audiusTokenClientTest.js +37 -0
  262. package/tests/creatorNodeTest.js +19 -0
  263. package/tests/fileHasherTest.js +125 -0
  264. package/tests/governanceTest.js +382 -0
  265. package/tests/helpers.js +105 -0
  266. package/tests/index.js +14 -0
  267. package/tests/playlistClientTest.js +157 -0
  268. package/tests/providerSelectionTest.js +241 -0
  269. package/tests/registryClientTest.js +19 -0
  270. package/tests/rewardsAttesterTest.js +373 -0
  271. package/tests/serviceTypeManagerClientTest.js +33 -0
  272. package/tests/socialFeatureClientTest.js +79 -0
  273. package/tests/stakingTest.js +302 -0
  274. package/tests/trackClientTest.js +86 -0
  275. package/tests/userClientTest.js +121 -0
  276. package/tsconfig.json +10 -0
  277. package/types/@audius-hedgehog/index.d.ts +39 -0
  278. package/types/abi-decoder/index.d.ts +41 -0
@@ -0,0 +1,629 @@
1
+ /* eslint-disable @typescript-eslint/restrict-plus-operands */
2
+
3
+ export const getUsers = (
4
+ limit = 100,
5
+ offset = 0,
6
+ idsArray?: string[],
7
+ walletAddress?: string,
8
+ handle?: string,
9
+ isCreator: boolean | null = null,
10
+ minBlockNumber?: number
11
+ ) => {
12
+ type QueryParams = {
13
+ limit: number
14
+ offset: number
15
+ is_creator?: boolean
16
+ handle?: string
17
+ wallet?: string
18
+ min_block_number?: number
19
+ id?: string[]
20
+ }
21
+
22
+ const queryParams: QueryParams = { limit: limit, offset: offset }
23
+ if (isCreator !== null) {
24
+ queryParams.is_creator = isCreator
25
+ }
26
+ if (handle) {
27
+ queryParams.handle = handle
28
+ }
29
+ if (walletAddress) {
30
+ queryParams.wallet = walletAddress
31
+ }
32
+ if (minBlockNumber) {
33
+ queryParams.min_block_number = minBlockNumber
34
+ }
35
+ if (idsArray != null) {
36
+ if (!Array.isArray(idsArray)) {
37
+ throw new Error('Expected integer array of user ids')
38
+ }
39
+ queryParams.id = idsArray
40
+ }
41
+
42
+ const req = { endpoint: 'users', queryParams }
43
+
44
+ return req
45
+ }
46
+
47
+ export const getTracks = (
48
+ limit = 100,
49
+ offset = 0,
50
+ idsArray?: string[],
51
+ targetUserId?: string,
52
+ sort?: boolean,
53
+ minBlockNumber?: number,
54
+ filterDeleted?: boolean,
55
+ withUsers = false
56
+ ) => {
57
+ type QueryParams = {
58
+ limit: number
59
+ offset: number
60
+ id?: string[]
61
+ min_block_number?: number
62
+ user_id?: string
63
+ sort?: boolean
64
+ filter_deleted?: boolean
65
+ with_users?: boolean
66
+ }
67
+
68
+ const queryParams: QueryParams = { limit: limit, offset: offset }
69
+
70
+ if (idsArray) {
71
+ if (!Array.isArray(idsArray)) {
72
+ throw new Error('Expected array of track ids')
73
+ }
74
+ queryParams.id = idsArray
75
+ }
76
+ if (minBlockNumber) {
77
+ queryParams.min_block_number = minBlockNumber
78
+ }
79
+ if (targetUserId) {
80
+ queryParams.user_id = targetUserId
81
+ }
82
+ if (sort) {
83
+ queryParams.sort = sort
84
+ }
85
+ if (typeof filterDeleted === 'boolean') {
86
+ queryParams.filter_deleted = filterDeleted
87
+ }
88
+ if (withUsers) {
89
+ queryParams.with_users = true
90
+ }
91
+
92
+ const req = { endpoint: 'tracks', queryParams }
93
+ return req
94
+ }
95
+
96
+ export const getTracksByHandleAndSlug = (handle: string, slug: string) => {
97
+ return {
98
+ endpoint: 'v1/tracks',
99
+ method: 'get',
100
+ queryParams: { handle, slug }
101
+ }
102
+ }
103
+
104
+ export const getTracksIncludingUnlisted = (
105
+ identifiers: string[],
106
+ withUsers = false
107
+ ) => {
108
+ const queryParams: { with_users?: boolean } = {}
109
+
110
+ if (withUsers) {
111
+ queryParams.with_users = true
112
+ }
113
+
114
+ const req = {
115
+ endpoint: 'tracks_including_unlisted',
116
+ method: 'post',
117
+ data: {
118
+ tracks: identifiers
119
+ },
120
+ queryParams
121
+ }
122
+
123
+ return req
124
+ }
125
+
126
+ export const getRandomTracks = (
127
+ genre: string,
128
+ limit: number,
129
+ exclusionList: number[],
130
+ time: string
131
+ ) => {
132
+ const req = {
133
+ endpoint: 'tracks/random',
134
+ queryParams: {
135
+ genre,
136
+ limit,
137
+ exclusionList,
138
+ time
139
+ }
140
+ }
141
+ return req
142
+ }
143
+
144
+ export const getStemsForTrack = (trackId: number) => {
145
+ const req = {
146
+ endpoint: `stems/${trackId}`,
147
+ queryParams: {
148
+ with_users: true
149
+ }
150
+ }
151
+ return req
152
+ }
153
+
154
+ export const getRemixesOfTrack = (
155
+ trackId: number,
156
+ limit: number | null = null,
157
+ offset: number | null = null
158
+ ) => {
159
+ const req = {
160
+ endpoint: `remixes/${trackId}/children`,
161
+ queryParams: {
162
+ with_users: true,
163
+ limit,
164
+ offset
165
+ }
166
+ }
167
+ return req
168
+ }
169
+
170
+ export const getRemixTrackParents = (
171
+ trackId: number,
172
+ limit: number | null = null,
173
+ offset: number | null = null
174
+ ) => {
175
+ const req = {
176
+ endpoint: `remixes/${trackId}/parents`,
177
+ queryParams: {
178
+ with_users: true,
179
+ limit,
180
+ offset
181
+ }
182
+ }
183
+ return req
184
+ }
185
+
186
+ export const getTrendingTracks = (
187
+ genre: string | null = null,
188
+ timeFrame: string | null = null,
189
+ idsArray: number[] | null = null,
190
+ limit: number | null = null,
191
+ offset: number | null = null,
192
+ withUsers = false
193
+ ) => {
194
+ let endpoint = '/trending/'
195
+
196
+ if (timeFrame != null) {
197
+ switch (timeFrame) {
198
+ case 'day':
199
+ case 'week':
200
+ case 'month':
201
+ case 'year':
202
+ break
203
+ default:
204
+ throw new Error('Invalid timeFrame value provided')
205
+ }
206
+ endpoint += `${endpoint}${timeFrame}`
207
+ }
208
+
209
+ const req = {
210
+ endpoint,
211
+ method: 'get',
212
+ queryParams: {
213
+ ...(idsArray !== null ? { id: idsArray } : {}),
214
+ ...(limit !== null ? { limit } : {}),
215
+ ...(offset !== null ? { offset } : {}),
216
+ ...(genre !== null ? { genre } : {}),
217
+ ...(withUsers ? { with_users: withUsers } : {})
218
+ }
219
+ }
220
+ return req
221
+ }
222
+
223
+ export const getPlaylists = (
224
+ limit = 100,
225
+ offset = 0,
226
+ idsArray = null,
227
+ targetUserId = null,
228
+ withUsers = false
229
+ ) => {
230
+ if (idsArray != null) {
231
+ if (!Array.isArray(idsArray)) {
232
+ throw new Error('Expected integer array of user ids')
233
+ }
234
+ }
235
+ return {
236
+ endpoint: 'playlists',
237
+ queryParams: {
238
+ limit,
239
+ offset,
240
+ ...(idsArray != null ? { playlist_id: idsArray } : {}),
241
+ ...(targetUserId ? { user_id: targetUserId } : {}),
242
+ ...(withUsers ? { with_users: true } : {})
243
+ }
244
+ }
245
+ }
246
+
247
+ export const getSocialFeed = (
248
+ filter: string,
249
+ limit = 100,
250
+ offset = 0,
251
+ withUsers = false,
252
+ tracksOnly = false
253
+ ) => {
254
+ return {
255
+ endpoint: 'feed',
256
+ queryParams: {
257
+ filter,
258
+ limit,
259
+ offset,
260
+ with_users: withUsers,
261
+ tracks_only: tracksOnly
262
+ }
263
+ }
264
+ }
265
+
266
+ export const getUserRepostFeed = (
267
+ userId: number,
268
+ limit = 100,
269
+ offset = 0,
270
+ withUsers = false
271
+ ) => {
272
+ return {
273
+ endpoint: 'feed',
274
+ urlParams: '/reposts/' + userId,
275
+ queryParams: { limit, offset, with_users: withUsers }
276
+ }
277
+ }
278
+
279
+ export const getFollowIntersectionUsers = (
280
+ limit = 100,
281
+ offset = 0,
282
+ followeeUserId: number,
283
+ followerUserId: number
284
+ ) => {
285
+ return {
286
+ endpoint: 'users',
287
+ urlParams: '/intersection/follow/' + followeeUserId + '/' + followerUserId,
288
+ queryParams: { limit, offset }
289
+ }
290
+ }
291
+
292
+ export const getTrackRepostIntersectionUsers = (
293
+ limit = 100,
294
+ offset = 0,
295
+ repostTrackId: number,
296
+ followerUserId: number
297
+ ) => {
298
+ return {
299
+ endpoint: 'users',
300
+ urlParams:
301
+ '/intersection/repost/track/' + repostTrackId + '/' + followerUserId,
302
+ queryParams: { limit: limit, offset: offset }
303
+ }
304
+ }
305
+
306
+ export const getPlaylistRepostIntersectionUsers = (
307
+ limit = 100,
308
+ offset = 0,
309
+ repostPlaylistId: number,
310
+ followerUserId: number
311
+ ) => {
312
+ return {
313
+ endpoint: 'users',
314
+ urlParams:
315
+ '/intersection/repost/playlist/' +
316
+ repostPlaylistId +
317
+ '/' +
318
+ followerUserId,
319
+ queryParams: { limit: limit, offset: offset }
320
+ }
321
+ }
322
+
323
+ export const getFollowersForUser = (
324
+ limit = 100,
325
+ offset = 0,
326
+ followeeUserId: number
327
+ ) => {
328
+ return {
329
+ endpoint: 'users',
330
+ urlParams: '/followers/' + followeeUserId,
331
+ queryParams: { limit: limit, offset: offset }
332
+ }
333
+ }
334
+
335
+ export const getFolloweesForUser = (
336
+ limit = 100,
337
+ offset = 0,
338
+ followerUserId: number
339
+ ) => {
340
+ return {
341
+ endpoint: 'users',
342
+ urlParams: '/followees/' + followerUserId,
343
+ queryParams: { limit: limit, offset: offset }
344
+ }
345
+ }
346
+
347
+ export const getRepostersForTrack = (
348
+ limit = 100,
349
+ offset = 0,
350
+ repostTrackId: number
351
+ ) => {
352
+ return {
353
+ endpoint: 'users',
354
+ urlParams: '/reposts/track/' + repostTrackId,
355
+ queryParams: { limit: limit, offset: offset }
356
+ }
357
+ }
358
+
359
+ export const getRepostersForPlaylist = (
360
+ limit = 100,
361
+ offset = 0,
362
+ repostPlaylistId: number
363
+ ) => {
364
+ return {
365
+ endpoint: 'users',
366
+ urlParams: '/reposts/playlist/' + repostPlaylistId,
367
+ queryParams: { limit: limit, offset: offset }
368
+ }
369
+ }
370
+
371
+ export const getSaversForTrack = (
372
+ limit = 100,
373
+ offset = 0,
374
+ saveTrackId: number
375
+ ) => {
376
+ return {
377
+ endpoint: 'users',
378
+ urlParams: '/saves/track/' + saveTrackId,
379
+ queryParams: { limit: limit, offset: offset }
380
+ }
381
+ }
382
+
383
+ export const getSaversForPlaylist = (
384
+ limit = 100,
385
+ offset = 0,
386
+ savePlaylistId: number
387
+ ) => {
388
+ return {
389
+ endpoint: 'users',
390
+ urlParams: '/saves/playlist/' + savePlaylistId,
391
+ queryParams: { limit: limit, offset: offset }
392
+ }
393
+ }
394
+
395
+ export const searchFull = (
396
+ text: string,
397
+ kind: string,
398
+ limit = 100,
399
+ offset = 0
400
+ ) => {
401
+ return {
402
+ endpoint: 'search/full',
403
+ queryParams: { query: text, kind, limit, offset }
404
+ }
405
+ }
406
+
407
+ export const searchAutocomplete = (text: string, limit = 100, offset = 0) => {
408
+ return {
409
+ endpoint: 'search/autocomplete',
410
+ queryParams: { query: text, limit: limit, offset: offset }
411
+ }
412
+ }
413
+
414
+ export const searchTags = (
415
+ text: string,
416
+ userTagCount = 2,
417
+ kind = 'all',
418
+ limit = 100,
419
+ offset = 0
420
+ ) => {
421
+ return {
422
+ endpoint: 'search/tags',
423
+ queryParams: {
424
+ query: text,
425
+ user_tag_count: userTagCount,
426
+ kind,
427
+ limit,
428
+ offset
429
+ }
430
+ }
431
+ }
432
+
433
+ export const getSavedPlaylists = (
434
+ limit = 100,
435
+ offset = 0,
436
+ withUsers = false
437
+ ) => {
438
+ return {
439
+ endpoint: 'saves/playlists',
440
+ queryParams: { limit: limit, offset: offset, with_users: withUsers }
441
+ }
442
+ }
443
+
444
+ export const getSavedAlbums = (limit = 100, offset = 0, withUsers = false) => {
445
+ return {
446
+ endpoint: 'saves/albums',
447
+ queryParams: { limit: limit, offset: offset, with_users: withUsers }
448
+ }
449
+ }
450
+
451
+ export const getSavedTracks = (limit = 100, offset = 0, withUsers = false) => {
452
+ return {
453
+ endpoint: 'saves/tracks',
454
+ queryParams: { limit: limit, offset: offset, with_users: withUsers }
455
+ }
456
+ }
457
+
458
+ /**
459
+ * Return user collections (saved & uploaded) along w/ users for those collections
460
+ */
461
+ export const getUserAccount = (wallet: string) => {
462
+ if (wallet === undefined) {
463
+ throw new Error('Expected wallet to get user account')
464
+ }
465
+ return {
466
+ endpoint: 'users/account',
467
+ queryParams: { wallet }
468
+ }
469
+ }
470
+
471
+ export const getTopPlaylists = (
472
+ type: string,
473
+ limit: number,
474
+ mood: string,
475
+ filter: string,
476
+ withUsers = false
477
+ ) => {
478
+ return {
479
+ endpoint: `/top/${type}`,
480
+ queryParams: {
481
+ limit,
482
+ mood,
483
+ filter,
484
+ with_users: withUsers
485
+ }
486
+ }
487
+ }
488
+
489
+ export const getTopFolloweeWindowed = (
490
+ type: string,
491
+ window: string,
492
+ limit: string,
493
+ withUsers = false
494
+ ) => {
495
+ return {
496
+ endpoint: `/top_followee_windowed/${type}/${window}`,
497
+ queryParams: {
498
+ limit,
499
+ with_users: withUsers
500
+ }
501
+ }
502
+ }
503
+
504
+ export const getTopFolloweeSaves = (
505
+ type: string,
506
+ limit: string,
507
+ withUsers = false
508
+ ) => {
509
+ return {
510
+ endpoint: `/top_followee_saves/${type}`,
511
+ queryParams: {
512
+ limit,
513
+ with_users: withUsers
514
+ }
515
+ }
516
+ }
517
+
518
+ export const getLatest = (type: string) => {
519
+ return {
520
+ endpoint: `/latest/${type}`
521
+ }
522
+ }
523
+
524
+ export const getTopCreatorsByGenres = (
525
+ genres: string[],
526
+ limit = 30,
527
+ offset = 0,
528
+ withUsers = false
529
+ ) => {
530
+ return {
531
+ endpoint: 'users/genre/top',
532
+ queryParams: { genre: genres, limit, offset, with_users: withUsers }
533
+ }
534
+ }
535
+
536
+ export const getURSMContentNodes = (ownerWallet: string | null) => {
537
+ return {
538
+ endpoint: 'ursm_content_nodes',
539
+ queryParams: {
540
+ owner_wallet: ownerWallet
541
+ }
542
+ }
543
+ }
544
+
545
+ export const getNotifications = (
546
+ minBlockNumber: string,
547
+ trackIds: string[],
548
+ timeout: number
549
+ ) => {
550
+ return {
551
+ endpoint: 'notifications',
552
+ queryParams: {
553
+ min_block_number: minBlockNumber,
554
+ track_id: trackIds
555
+ },
556
+ timeout
557
+ }
558
+ }
559
+
560
+ export const getSolanaNotifications = (
561
+ minSlotNumber: number,
562
+ timeout: number
563
+ ) => {
564
+ return {
565
+ endpoint: 'solana_notifications',
566
+ queryParams: {
567
+ min_slot_number: minSlotNumber
568
+ },
569
+ timeout
570
+ }
571
+ }
572
+
573
+ export const getTrackListenMilestones = (timeout: number) => {
574
+ return {
575
+ endpoint: 'track_listen_milestones',
576
+ timeout
577
+ }
578
+ }
579
+
580
+ export const getChallengeAttestation = (
581
+ challengeId: string,
582
+ encodedUserId: string,
583
+ specifier: string,
584
+ oracleAddress: string
585
+ ) => {
586
+ return {
587
+ endpoint: `/v1/challenges/${challengeId}/attest`,
588
+ queryParams: {
589
+ user_id: encodedUserId,
590
+ specifier,
591
+ oracle: oracleAddress
592
+ }
593
+ }
594
+ }
595
+
596
+ export const getCreateSenderAttestation = (senderEthAddress: string) => {
597
+ return {
598
+ endpoint: '/v1/challenges/attest_sender',
599
+ queryParams: {
600
+ sender_eth_address: senderEthAddress
601
+ }
602
+ }
603
+ }
604
+
605
+ export const getUndisbursedChallenges = (
606
+ limit: number | null,
607
+ offset: number | null,
608
+ completedBlockNumber: string | null,
609
+ encodedUserId: number | null
610
+ ) => {
611
+ return {
612
+ endpoint: '/v1/challenges/undisbursed',
613
+ queryParams: {
614
+ limit,
615
+ offset,
616
+ completed_blocknumber: completedBlockNumber,
617
+ user_id: encodedUserId
618
+ }
619
+ }
620
+ }
621
+
622
+ export const verifyToken = (token: string) => {
623
+ return {
624
+ endpoint: '/v1/users/verify_token',
625
+ queryParams: {
626
+ token: token
627
+ }
628
+ }
629
+ }