@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,95 @@
1
+ import { ContractABI, Utils } from '../../utils'
2
+ import { Web3Manager } from '../web3Manager'
3
+ import { ProviderSelection } from '../contracts/ProviderSelection'
4
+ import type { HttpProvider } from 'web3-core'
5
+ import type { Contract } from 'web3-eth-contract'
6
+
7
+ export class RegistryClient {
8
+ web3Manager: Web3Manager
9
+ contractABI: ContractABI['abi']
10
+ contractAddress: string
11
+ Registry: Contract
12
+ providerSelector: ProviderSelection | null
13
+
14
+ constructor(
15
+ web3Manager: Web3Manager,
16
+ contractABI: ContractABI['abi'],
17
+ contractAddress: string
18
+ ) {
19
+ this.web3Manager = web3Manager
20
+ this.contractABI = contractABI
21
+ this.contractAddress = contractAddress
22
+
23
+ const web3 = this.web3Manager.getWeb3()
24
+ this.Registry = new web3.eth.Contract(contractABI, contractAddress)
25
+
26
+ if (
27
+ this.web3Manager instanceof Web3Manager &&
28
+ !this.web3Manager.web3Config.useExternalWeb3
29
+ ) {
30
+ const providerEndpoints =
31
+ this.web3Manager.web3Config.internalWeb3Config.web3ProviderEndpoints
32
+ this.providerSelector = new ProviderSelection(providerEndpoints)
33
+ } else {
34
+ this.providerSelector = null
35
+ }
36
+ }
37
+
38
+ async getContract(contractRegistryKey: string): Promise<string | undefined> {
39
+ try {
40
+ Utils.checkStrLen(contractRegistryKey, 32)
41
+ const contract = await this.Registry.methods
42
+ .getContract(Utils.utf8ToHex(contractRegistryKey))
43
+ .call()
44
+ return contract
45
+ } catch (e) {
46
+ // If using ethWeb3Manager or useExternalWeb3 is true, do not do reselect provider logic and fail
47
+ if (!this.providerSelector) {
48
+ console.error(
49
+ `Failed to initialize contract ${JSON.stringify(this.contractABI)}`,
50
+ e
51
+ )
52
+ return
53
+ }
54
+
55
+ return await this.retryInit(contractRegistryKey)
56
+ }
57
+ }
58
+
59
+ async retryInit(contractRegistryKey: string) {
60
+ try {
61
+ await this.selectNewEndpoint()
62
+ const web3 = this.web3Manager.getWeb3()
63
+ this.Registry = new web3.eth.Contract(
64
+ this.contractABI,
65
+ this.contractAddress
66
+ )
67
+ return await this.getContract(contractRegistryKey)
68
+ } catch (e) {
69
+ console.error((e as Error).message)
70
+ return undefined
71
+ }
72
+ }
73
+
74
+ async selectNewEndpoint() {
75
+ const currentHost = (
76
+ this.web3Manager.getWeb3().currentProvider as HttpProvider
77
+ ).host
78
+ if (this.providerSelector) {
79
+ this.providerSelector.addUnhealthy(currentHost)
80
+
81
+ if (
82
+ this.providerSelector.getUnhealthySize() ===
83
+ this.providerSelector.getServicesSize()
84
+ ) {
85
+ throw new Error(
86
+ `No available, healthy providers to get contract ${JSON.stringify(
87
+ this.contractABI
88
+ )}`
89
+ )
90
+ }
91
+
92
+ await this.providerSelector.select(this)
93
+ }
94
+ }
95
+ }
@@ -0,0 +1,196 @@
1
+ import { ContractClient } from '../contracts/ContractClient'
2
+ import * as signatureSchemas from '../../../data-contracts/signatureSchemas'
3
+ import type { Web3Manager } from '../web3Manager'
4
+
5
+ export class SocialFeatureFactoryClient extends ContractClient {
6
+ override web3Manager!: Web3Manager
7
+
8
+ async addTrackRepost(userId: number, trackId: number) {
9
+ // generate new track repost request
10
+ const nonce = signatureSchemas.getNonce()
11
+ const chainId = await this.getEthNetId()
12
+ const contractAddress = await this.getAddress()
13
+ const signatureData =
14
+ signatureSchemas.generators.getAddTrackRepostRequestData(
15
+ chainId,
16
+ contractAddress,
17
+ userId,
18
+ trackId,
19
+ nonce
20
+ )
21
+ const sig = await this.web3Manager.signTypedData(signatureData)
22
+
23
+ // add new trackRepost to chain
24
+ const method = await this.getMethod(
25
+ 'addTrackRepost',
26
+ userId,
27
+ trackId,
28
+ nonce,
29
+ sig
30
+ )
31
+ return await this.web3Manager.sendTransaction(
32
+ method,
33
+ this.contractRegistryKey,
34
+ contractAddress
35
+ )
36
+ }
37
+
38
+ async deleteTrackRepost(userId: number, trackId: number) {
39
+ // generate new delete track repost request
40
+ const nonce = signatureSchemas.getNonce()
41
+ const chainId = await this.getEthNetId()
42
+ const contractAddress = await this.getAddress()
43
+ const signatureData =
44
+ signatureSchemas.generators.getDeleteTrackRepostRequestData(
45
+ chainId,
46
+ contractAddress,
47
+ userId,
48
+ trackId,
49
+ nonce
50
+ )
51
+ const sig = await this.web3Manager.signTypedData(signatureData)
52
+
53
+ // delete trackRepost from chain
54
+ const method = await this.getMethod(
55
+ 'deleteTrackRepost',
56
+ userId,
57
+ trackId,
58
+ nonce,
59
+ sig
60
+ )
61
+ return await this.web3Manager.sendTransaction(
62
+ method,
63
+ this.contractRegistryKey,
64
+ contractAddress
65
+ )
66
+ }
67
+
68
+ async addPlaylistRepost(userId: number, playlistId: number) {
69
+ // generate new playlist repost request
70
+ const nonce = signatureSchemas.getNonce()
71
+ const chainId = await this.getEthNetId()
72
+ const contractAddress = await this.getAddress()
73
+ const signatureData =
74
+ signatureSchemas.generators.getAddPlaylistRepostRequestData(
75
+ chainId,
76
+ contractAddress,
77
+ userId,
78
+ playlistId,
79
+ nonce
80
+ )
81
+ const sig = await this.web3Manager.signTypedData(signatureData)
82
+
83
+ // add new playlistRepost to chain
84
+ const method = await this.getMethod(
85
+ 'addPlaylistRepost',
86
+ userId,
87
+ playlistId,
88
+ nonce,
89
+ sig
90
+ )
91
+ return await this.web3Manager.sendTransaction(
92
+ method,
93
+ this.contractRegistryKey,
94
+ contractAddress
95
+ )
96
+ }
97
+
98
+ async deletePlaylistRepost(userId: number, playlistId: number) {
99
+ // generate new delete playlist repost request
100
+ const nonce = signatureSchemas.getNonce()
101
+ const chainId = await this.getEthNetId()
102
+ const contractAddress = await this.getAddress()
103
+ const signatureData =
104
+ signatureSchemas.generators.getDeletePlaylistRepostRequestData(
105
+ chainId,
106
+ contractAddress,
107
+ userId,
108
+ playlistId,
109
+ nonce
110
+ )
111
+ const sig = await this.web3Manager.signTypedData(signatureData)
112
+
113
+ // delete playlistRepost from chain
114
+ const method = await this.getMethod(
115
+ 'deletePlaylistRepost',
116
+ userId,
117
+ playlistId,
118
+ nonce,
119
+ sig
120
+ )
121
+ return await this.web3Manager.sendTransaction(
122
+ method,
123
+ this.contractRegistryKey,
124
+ contractAddress
125
+ )
126
+ }
127
+
128
+ async addUserFollow(followerUserId: number, followeeUserId: number) {
129
+ if (followerUserId === followeeUserId) {
130
+ throw new Error(
131
+ `addUserFollow - identical value provided for follower and followee ${followerUserId}`
132
+ )
133
+ }
134
+ // generate new UserFollow request
135
+ const nonce = signatureSchemas.getNonce()
136
+ const chainId = await this.getEthNetId()
137
+ const contractAddress = await this.getAddress()
138
+ const signatureData = signatureSchemas.generators.getUserFollowRequestData(
139
+ chainId,
140
+ contractAddress,
141
+ followerUserId,
142
+ followeeUserId,
143
+ nonce
144
+ )
145
+ const sig = await this.web3Manager.signTypedData(signatureData)
146
+
147
+ // add new UserFollow to chain
148
+ const method = await this.getMethod(
149
+ 'addUserFollow',
150
+ followerUserId,
151
+ followeeUserId,
152
+ nonce,
153
+ sig
154
+ )
155
+ return await this.web3Manager.sendTransaction(
156
+ method,
157
+ this.contractRegistryKey,
158
+ contractAddress
159
+ )
160
+ }
161
+
162
+ async deleteUserFollow(followerUserId: number, followeeUserId: number) {
163
+ if (followerUserId === followeeUserId) {
164
+ throw new Error(
165
+ `deleteUserFollow - Invalid identical value provided for follower and followee ${followerUserId}`
166
+ )
167
+ }
168
+ // generate new deleteUserFollow request
169
+ const nonce = signatureSchemas.getNonce()
170
+ const chainId = await this.getEthNetId()
171
+ const contractAddress = await this.getAddress()
172
+ const signatureData =
173
+ signatureSchemas.generators.getDeleteUserFollowRequestData(
174
+ chainId,
175
+ contractAddress,
176
+ followerUserId,
177
+ followeeUserId,
178
+ nonce
179
+ )
180
+ const sig = await this.web3Manager.signTypedData(signatureData)
181
+
182
+ // delete UserFollow from chain
183
+ const method = await this.getMethod(
184
+ 'deleteUserFollow',
185
+ followerUserId,
186
+ followeeUserId,
187
+ nonce,
188
+ sig
189
+ )
190
+ return await this.web3Manager.sendTransaction(
191
+ method,
192
+ this.contractRegistryKey,
193
+ contractAddress
194
+ )
195
+ }
196
+ }
@@ -0,0 +1,131 @@
1
+ import { ContractClient } from '../contracts/ContractClient'
2
+ import * as signatureSchemas from '../../../data-contracts/signatureSchemas'
3
+ import type { Web3Manager } from '../web3Manager'
4
+
5
+ export class TrackFactoryClient extends ContractClient {
6
+ override web3Manager!: Web3Manager
7
+ /* ------- GETTERS ------- */
8
+
9
+ async getTrack(trackId: string) {
10
+ const method = await this.getMethod('getTrack', trackId)
11
+ return method.call()
12
+ }
13
+
14
+ /* ------- SETTERS ------- */
15
+
16
+ /** uint _userId, bytes32 _multihashDigest, uint8 _multihashHashFn, uint8 _multihashSize */
17
+ async addTrack(
18
+ userId: number,
19
+ multihashDigest: string,
20
+ multihashHashFn: number,
21
+ multihashSize: number
22
+ ) {
23
+ const nonce = signatureSchemas.getNonce()
24
+ const chainId = await this.getEthNetId()
25
+ const contractAddress = await this.getAddress()
26
+ const signatureData = signatureSchemas.generators.getAddTrackRequestData(
27
+ chainId,
28
+ contractAddress,
29
+ userId,
30
+ multihashDigest,
31
+ multihashHashFn,
32
+ multihashSize,
33
+ nonce
34
+ )
35
+
36
+ const sig = await this.web3Manager.signTypedData(signatureData)
37
+ const method = await this.getMethod(
38
+ 'addTrack',
39
+ userId,
40
+ multihashDigest,
41
+ multihashHashFn,
42
+ multihashSize,
43
+ nonce,
44
+ sig
45
+ )
46
+
47
+ const tx = await this.web3Manager.sendTransaction(
48
+ method,
49
+ this.contractRegistryKey,
50
+ contractAddress
51
+ )
52
+ return {
53
+ trackId: parseInt(tx.events?.['NewTrack']?.returnValues._id, 10),
54
+ txReceipt: tx
55
+ }
56
+ }
57
+
58
+ /** uint _trackId, uint _trackOwnerId, bytes32 _multihashDigest, uint8 _multihashHashFn, uint8 _multihashSize */
59
+ async updateTrack(
60
+ trackId: number,
61
+ trackOwnerId: number,
62
+ multihashDigest: string,
63
+ multihashHashFn: number,
64
+ multihashSize: number
65
+ ) {
66
+ const nonce = signatureSchemas.getNonce()
67
+ const chainId = await this.getEthNetId()
68
+ const contractAddress = await this.getAddress()
69
+ const signatureData = signatureSchemas.generators.getUpdateTrackRequestData(
70
+ chainId,
71
+ contractAddress,
72
+ trackId,
73
+ trackOwnerId,
74
+ multihashDigest,
75
+ multihashHashFn,
76
+ multihashSize,
77
+ nonce
78
+ )
79
+
80
+ const sig = await this.web3Manager.signTypedData(signatureData)
81
+ const method = await this.getMethod(
82
+ 'updateTrack',
83
+ trackId,
84
+ trackOwnerId,
85
+ multihashDigest,
86
+ multihashHashFn,
87
+ multihashSize,
88
+ nonce,
89
+ sig
90
+ )
91
+
92
+ const tx = await this.web3Manager.sendTransaction(
93
+ method,
94
+ this.contractRegistryKey,
95
+ contractAddress
96
+ )
97
+
98
+ return {
99
+ trackId: parseInt(tx.events?.['UpdateTrack']?.returnValues._trackId, 10),
100
+ txReceipt: tx
101
+ }
102
+ }
103
+
104
+ /**
105
+ * @return deleted trackId from on-chain event log
106
+ */
107
+ async deleteTrack(trackId: number) {
108
+ const nonce = signatureSchemas.getNonce()
109
+ const chainId = await this.getEthNetId()
110
+ const contractAddress = await this.getAddress()
111
+ const signatureData = signatureSchemas.generators.getDeleteTrackRequestData(
112
+ chainId,
113
+ contractAddress,
114
+ trackId,
115
+ nonce
116
+ )
117
+
118
+ const sig = await this.web3Manager.signTypedData(signatureData)
119
+ const method = await this.getMethod('deleteTrack', trackId, nonce, sig)
120
+
121
+ const tx = await this.web3Manager.sendTransaction(
122
+ method,
123
+ this.contractRegistryKey,
124
+ contractAddress
125
+ )
126
+ return {
127
+ trackId: parseInt(tx.events?.['TrackDeleted']?.returnValues._trackId, 10),
128
+ txReceipt: tx
129
+ }
130
+ }
131
+ }