diff --git a/package-lock.json b/package-lock.json index 316cb1776b6..3b7588e0f0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3503,6 +3503,15 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint-community/regexpp": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.4.1", "license": "MIT", @@ -22069,129 +22078,6 @@ "version": "4.0.0", "license": "ISC" }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@typescript-eslint/parser": { "version": "5.48.2", "license": "BSD-2-Clause", @@ -36323,174 +36209,6 @@ "eslint-plugin-react": "^7.28.0" } }, - "node_modules/eslint-config-standard-with-typescript": { - "version": "21.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint-config-standard": "^16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.1", - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1 || ^5.0.0", - "typescript": "^3.9 || ^4.0.0" - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/eslint-config-standard": { - "version": "16.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1 || ^5.0.0" - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/eslint-import-resolver-alias": { "version": "1.1.2", "dev": true, @@ -36980,8 +36698,9 @@ }, "node_modules/eslint-plugin-mocha": { "version": "10.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.0.3.tgz", + "integrity": "sha512-9mM7PZGxfejpjey+MrG0Cu3Lc8MyA5E2s7eUCdHXgS4SY/H9zLuwa7wVAjnEaoDjbBilA+0bPEB+iMO7lBUPcg==", "dev": true, - "license": "MIT", "dependencies": { "eslint-utils": "^3.0.0", "ramda": "^0.27.1" @@ -41909,6 +41628,12 @@ "version": "1.0.4", "license": "MIT" }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/graphql": { "version": "16.8.0", "dev": true, @@ -63551,8 +63276,9 @@ }, "node_modules/ramda": { "version": "0.27.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz", + "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==", + "dev": true }, "node_modules/randomatic": { "version": "3.1.1", @@ -84544,6 +84270,18 @@ "version": "1.0.1", "license": "MIT" }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-dedent": { "version": "2.2.0", "dev": true, @@ -92403,16 +92141,10 @@ "@types/pify": "5.0.1", "@types/proper-url-join": "2.1.1", "@types/semver": "7.3.9", - "@typescript-eslint/eslint-plugin": "4.33.0", + "@typescript-eslint/eslint-plugin": "6.7.2", "commander": "9.2.0", - "eslint": "7.32.0", - "eslint-config-prettier": "8.5.0", - "eslint-config-standard-with-typescript": "21.0.1", - "eslint-plugin-import": "2.25.4", + "eslint": "8.19.0", "eslint-plugin-mocha": "10.0.3", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-promise": "5.2.0", "jest": "29.4.1", "jest-environment-jsdom": "29.4.1", "mocha": "9.2.2", @@ -92441,48 +92173,6 @@ "node": ">=14.0.0" } }, - "packages/libs/node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "packages/libs/node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "packages/libs/node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "packages/libs/node_modules/@ethersproject/abi": { "version": "5.0.7", "license": "MIT", @@ -92499,11 +92189,12 @@ } }, "packages/libs/node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" }, @@ -92536,29 +92227,33 @@ } }, "packages/libs/node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz", + "integrity": "sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.7.2", + "@typescript-eslint/type-utils": "6.7.2", + "@typescript-eslint/utils": "6.7.2", + "@typescript-eslint/visitor-keys": "6.7.2", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -92581,49 +92276,179 @@ } }, "packages/libs/node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz", + "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" + "@typescript-eslint/types": "6.7.2", + "@typescript-eslint/visitor-keys": "6.7.2" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "packages/libs/node_modules/@typescript-eslint/type-utils": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz", + "integrity": "sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.7.2", + "@typescript-eslint/utils": "6.7.2", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "packages/libs/node_modules/@typescript-eslint/types": { - "version": "4.33.0", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz", + "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==", "dev": true, - "license": "MIT", "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "packages/libs/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz", + "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.7.2", + "@typescript-eslint/visitor-keys": "6.7.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/libs/node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/libs/node_modules/@typescript-eslint/utils": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.2.tgz", + "integrity": "sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.7.2", + "@typescript-eslint/types": "6.7.2", + "@typescript-eslint/typescript-estree": "6.7.2", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "packages/libs/node_modules/@typescript-eslint/utils/node_modules/@types/semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", + "dev": true + }, + "packages/libs/node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "packages/libs/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz", + "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "6.7.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "packages/libs/node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "packages/libs/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, @@ -92638,6 +92463,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "packages/libs/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "packages/libs/node_modules/bn.js": { "version": "5.2.1", "license": "MIT" @@ -92663,48 +92494,44 @@ "license": "MIT" }, "packages/libs/node_modules/eslint": { - "version": "7.32.0", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", + "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -92712,7 +92539,7 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -92766,82 +92593,6 @@ "eslint-plugin-react": "^7.21.5" } }, - "packages/libs/node_modules/eslint-plugin-import": { - "version": "2.25.4", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", - "has": "^1.0.3", - "is-core-module": "^2.8.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "packages/libs/node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "packages/libs/node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "packages/libs/node_modules/eslint-plugin-prettier": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "packages/libs/node_modules/eslint-plugin-promise": { - "version": "5.2.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.0.0" - } - }, "packages/libs/node_modules/eslint-plugin-react": { "version": "7.25.3", "dev": true, @@ -92917,36 +92668,114 @@ "node": ">=4" } }, - "packages/libs/node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", + "packages/libs/node_modules/eslint/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "packages/libs/node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", + "packages/libs/node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "MIT", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">= 4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "packages/libs/node_modules/eslint/node_modules/semver": { - "version": "7.5.4", + "packages/libs/node_modules/eslint/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "license": "ISC", "dependencies": { - "lru-cache": "^6.0.0" + "eslint-visitor-keys": "^2.0.0" }, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "packages/libs/node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, "engines": { "node": ">=10" } }, + "packages/libs/node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "packages/libs/node_modules/eslint/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "packages/libs/node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "packages/libs/node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "packages/libs/node_modules/espree": { "version": "7.3.1", "dev": true, @@ -93021,9 +92850,10 @@ } }, "packages/libs/node_modules/globals": { - "version": "13.21.0", + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -93036,8 +92866,9 @@ }, "packages/libs/node_modules/globals/node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, diff --git a/packages/libs/.eslintrc b/packages/libs/.eslintrc index a1510d8129e..a45b958901e 100644 --- a/packages/libs/.eslintrc +++ b/packages/libs/.eslintrc @@ -1,43 +1,9 @@ { - "extends": [ - "standard-with-typescript", - "plugin:mocha/recommended" - ], - "parserOptions": { - "project": "./tsconfig.json" - }, - "plugins": [ - "mocha" - ], + "extends": ["audius", "plugin:mocha/recommended"], + "plugins": ["mocha"], "rules": { - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/restrict-template-expressions": "off", - "@typescript-eslint/strict-boolean-expressions": "off", - "@typescript-eslint/no-floating-promises": "off", - "@typescript-eslint/no-extraneous-class": "off", - // Conflict between ESLint + Prettier, rules disabled for now - "@typescript-eslint/space-before-function-paren": "off", - "@typescript-eslint/indent": "off", - "@typescript-eslint/quotes": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/consistent-type-definitions": "off", - "@typescript-eslint/require-array-sort-compare":"off", - "comma-dangle": "off", "mocha/no-mocha-arrows": "off", "mocha/max-top-level-suites": "off" }, - "ignorePatterns": [ - "jest.config.ts" - ], - "overrides": [ - { - "files": "**/*.ts", - "extends": [ - "plugin:prettier/recommended" - ], - "plugins": [ - "prettier" - ] - } - ] -} \ No newline at end of file + "ignorePatterns": ["jest.config.ts"] +} diff --git a/packages/libs/.prettierrc.js b/packages/libs/.prettierrc.js deleted file mode 100644 index 46695f0ea83..00000000000 --- a/packages/libs/.prettierrc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('prettier-config-standard') \ No newline at end of file diff --git a/packages/libs/package.json b/packages/libs/package.json index fdd778a3a69..a4538836af6 100644 --- a/packages/libs/package.json +++ b/packages/libs/package.json @@ -147,16 +147,10 @@ "@types/pify": "5.0.1", "@types/proper-url-join": "2.1.1", "@types/semver": "7.3.9", - "@typescript-eslint/eslint-plugin": "4.33.0", + "@typescript-eslint/eslint-plugin": "6.7.2", "commander": "9.2.0", - "eslint": "7.32.0", - "eslint-config-prettier": "8.5.0", - "eslint-config-standard-with-typescript": "21.0.1", - "eslint-plugin-import": "2.25.4", "eslint-plugin-mocha": "10.0.3", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-promise": "5.2.0", + "eslint": "8.19.0", "jest": "29.4.1", "jest-environment-jsdom": "29.4.1", "mocha": "9.2.2", diff --git a/packages/libs/src/AudiusLibs.ts b/packages/libs/src/AudiusLibs.ts index ec387fadb11..d6fb1b7bc31 100644 --- a/packages/libs/src/AudiusLibs.ts +++ b/packages/libs/src/AudiusLibs.ts @@ -1,48 +1,45 @@ -import type { provider } from 'web3-core' +import type { Hedgehog as HedgehogBase } from '@audius/hedgehog' +import { Keypair } from '@solana/web3.js' import type { Merge } from 'type-fest' +import type { provider } from 'web3-core' -import { EthWeb3Config, EthWeb3Manager } from './services/ethWeb3Manager' - -import { version } from './version' -import { Web3Config, Web3Manager } from './services/web3Manager' -import { EthContracts } from './services/ethContracts' -import { - SolanaWeb3Manager, - SolanaUtils, - SolanaWeb3Config -} from './services/solana' -import { AudiusContracts } from './services/dataContracts' -import { IdentityService } from './services/identity' +import Web3 from './LibsWeb3' +import { Account } from './api/Account' +import { File } from './api/File' +import { Notifications } from './api/Notifications' +import { Playlists } from './api/Playlist' +import { Reactions } from './api/Reactions' +import { Rewards } from './api/Rewards' +import { ServiceProvider } from './api/ServiceProvider' +import { Track } from './api/Track' +import { Users } from './api/Users' +import type { BaseConstructorArgs } from './api/base' +import { EntityManager } from './api/entityManager' +import { AudiusABIDecoder } from './services/ABIDecoder' import { Comstock } from './services/comstock' -import { Hedgehog, HedgehogConfig } from './services/hedgehog' -import type { Hedgehog as HedgehogBase } from '@audius/hedgehog' import { CreatorNode, CreatorNodeConfig } from './services/creatorNode' +import { AudiusContracts } from './services/dataContracts' import { DiscoveryProvider, DiscoveryProviderConfig } from './services/discoveryProvider' -import { Wormhole, WormholeConfig } from './services/wormhole' -import { AudiusABIDecoder } from './services/ABIDecoder' +import { EthContracts } from './services/ethContracts' +import { EthWeb3Config, EthWeb3Manager } from './services/ethWeb3Manager' +import { Hedgehog, HedgehogConfig } from './services/hedgehog' +import { IdentityService } from './services/identity' import { Schemas, SchemaValidator } from './services/schemaValidator' +import { + SolanaWeb3Manager, + SolanaUtils, + SolanaWeb3Config +} from './services/solana' +import type { MonitoringCallbacks } from './services/types' +import { Web3Config, Web3Manager } from './services/web3Manager' +import { Wormhole, WormholeConfig } from './services/wormhole' import { UserStateManager } from './userStateManager' import { Utils, Nullable, Logger, getNStorageNodes } from './utils' -import { ServiceProvider } from './api/ServiceProvider' - -import { Account } from './api/Account' -import { Users } from './api/Users' -import { Track } from './api/Track' -import { Playlists } from './api/Playlist' -import { File } from './api/File' -import { Rewards } from './api/Rewards' -import { Reactions } from './api/Reactions' -import { Notifications } from './api/Notifications' -import Web3 from './LibsWeb3' - -import { Keypair } from '@solana/web3.js' import { getPlatformLocalStorage, LocalStorage } from './utils/localStorage' -import type { BaseConstructorArgs } from './api/base' -import type { MonitoringCallbacks } from './services/types' -import { EntityManager } from './api/entityManager' +import { version } from './version' type LibsIdentityServiceConfig = { url: string @@ -361,7 +358,7 @@ export class AudiusLibs { preferHigherPatchForPrimary = true, preferHigherPatchForSecondaries = true, localStorage = getPlatformLocalStorage(), - useDiscoveryRelay = false, + useDiscoveryRelay = false }: AudiusLibsConfig) { // set version @@ -545,7 +542,9 @@ export class AudiusLibs { if (this.web3Config && this.useDiscoveryRelay) { const web3Manager = this.web3Manager if (web3Manager === undefined || web3Manager === null) { - console.info("useDiscoveryRelay is set to true but web3Manager is not configured") + console.info( + 'useDiscoveryRelay is set to true but web3Manager is not configured' + ) } else { this.web3Manager?.setDiscoveryProvider(this.discoveryProvider) } diff --git a/packages/libs/src/LibsWeb3.d.ts b/packages/libs/src/LibsWeb3.d.ts index c66c6420e26..5cd1338bdc1 100644 --- a/packages/libs/src/LibsWeb3.d.ts +++ b/packages/libs/src/LibsWeb3.d.ts @@ -1,5 +1,5 @@ -import Web3Type from 'web3' import BN from 'bn.js' +import Web3Type from 'web3' declare const Web3: typeof Web3Type & { utils: { BN: typeof BN diff --git a/packages/libs/src/NativeAudiusLibs.ts b/packages/libs/src/NativeAudiusLibs.ts index f2c4c985fb8..42fd7b0c87d 100644 --- a/packages/libs/src/NativeAudiusLibs.ts +++ b/packages/libs/src/NativeAudiusLibs.ts @@ -1,48 +1,47 @@ +import type { Hedgehog as HedgehogBase } from '@audius/hedgehog' +import { Keypair } from '@solana/web3.js' import type { provider } from 'web3-core' + import Web3 from './LibsWeb3' -import { version } from './version' -import { Hedgehog, HedgehogConfig } from './services/hedgehog' -import type { Hedgehog as HedgehogBase } from '@audius/hedgehog' +import { Account } from './api/Account' +import { File } from './api/File' +import { Notifications } from './api/Notifications' +import { Playlists } from './api/Playlist' +import { Reactions } from './api/Reactions' +import { Rewards } from './api/Rewards' +import { ServiceProvider } from './api/ServiceProvider' +import { Track } from './api/Track' +import { Users } from './api/Users' +import type { BaseConstructorArgs } from './api/base' +import { EntityManager } from './api/entityManager' +import { Comstock } from './services/comstock' import { CreatorNode, CreatorNodeConfig } from './services/creatorNode' +import { AudiusContracts } from './services/dataContracts' import { DiscoveryProvider, DiscoveryProviderConfig } from './services/discoveryProvider' -import { Schemas, SchemaValidator } from './services/schemaValidator' -import { UserStateManager } from './userStateManager' -import type { Logger, Nullable } from './utils' -import { Utils, getNStorageNodes } from './utils' - -import { Keypair } from '@solana/web3.js' - -import { getPlatformLocalStorage, LocalStorage } from './utils/localStorage' -import { Web3Config, Web3Manager } from './services/web3Manager' +import { EthContracts } from './services/ethContracts' import { EthWeb3Config, EthWeb3Manager } from './services/ethWeb3Manager' -import { Comstock } from './services/comstock' +import { Hedgehog, HedgehogConfig } from './services/hedgehog' import { IdentityService } from './services/identity' -import { EthContracts } from './services/ethContracts' +import { Schemas, SchemaValidator } from './services/schemaValidator' import { SolanaWeb3Manager, SolanaUtils, SolanaWeb3Config } from './services/solana' -import { AudiusContracts } from './services/dataContracts' -import { Account } from './api/Account' -import { Users } from './api/Users' -import { Track } from './api/Track' -import { Playlists } from './api/Playlist' -import { Rewards } from './api/Rewards' -import { Reactions } from './api/Reactions' -import { Notifications } from './api/Notifications' -import { File } from './api/File' -import { ServiceProvider } from './api/ServiceProvider' -import type { BaseConstructorArgs } from './api/base' import type { MonitoringCallbacks } from './services/types' -import { EntityManager } from './api/entityManager' +import { Web3Config, Web3Manager } from './services/web3Manager' import { ProxyWormhole, ProxyWormholeConfig } from './services/wormhole/ProxyWormhole' +import { UserStateManager } from './userStateManager' +import { Utils, getNStorageNodes } from './utils' +import type { Logger, Nullable } from './utils' +import { getPlatformLocalStorage, LocalStorage } from './utils/localStorage' +import { version } from './version' type LibsIdentityServiceConfig = { url: string diff --git a/packages/libs/src/WebAudiusLibs.ts b/packages/libs/src/WebAudiusLibs.ts index 6885639828f..05661133912 100644 --- a/packages/libs/src/WebAudiusLibs.ts +++ b/packages/libs/src/WebAudiusLibs.ts @@ -1,51 +1,48 @@ -import type { provider } from 'web3-core' +import type { Hedgehog as HedgehogBase } from '@audius/hedgehog' +import { Keypair } from '@solana/web3.js' import type { Merge } from 'type-fest' +import type { provider } from 'web3-core' -import { EthWeb3Config, EthWeb3Manager } from './services/ethWeb3Manager' - -import { version } from './version' -import { Web3Config, Web3Manager } from './services/web3Manager' -import { EthContracts } from './services/ethContracts' -import { - SolanaWeb3Manager, - SolanaUtils, - SolanaWeb3Config -} from './services/solana' -import { AudiusContracts } from './services/dataContracts' -import { IdentityService } from './services/identity' +import Web3 from './LibsWeb3' +import { Account } from './api/Account' +import { File } from './api/File' +import { Notifications } from './api/Notifications' +import { Playlists } from './api/Playlist' +import { Reactions } from './api/Reactions' +import { Rewards } from './api/Rewards' +import { ServiceProvider } from './api/ServiceProvider' +import { Track } from './api/Track' +import { Users } from './api/Users' +import type { BaseConstructorArgs } from './api/base' +import { EntityManager } from './api/entityManager' +import { AudiusABIDecoder } from './services/ABIDecoder' import { Comstock } from './services/comstock' -import { Hedgehog, HedgehogConfig } from './services/hedgehog' -import type { Hedgehog as HedgehogBase } from '@audius/hedgehog' import { CreatorNode, CreatorNodeConfig } from './services/creatorNode' +import { AudiusContracts } from './services/dataContracts' import { DiscoveryProvider, DiscoveryProviderConfig } from './services/discoveryProvider' +import { EthContracts } from './services/ethContracts' +import { EthWeb3Config, EthWeb3Manager } from './services/ethWeb3Manager' +import { Hedgehog, HedgehogConfig } from './services/hedgehog' +import { IdentityService } from './services/identity' +import { Schemas, SchemaValidator } from './services/schemaValidator' +import { + SolanaWeb3Manager, + SolanaUtils, + SolanaWeb3Config +} from './services/solana' +import type { MonitoringCallbacks } from './services/types' +import { Web3Config, Web3Manager } from './services/web3Manager' import { ProxyWormhole, ProxyWormholeConfig } from './services/wormhole/ProxyWormhole' -import { AudiusABIDecoder } from './services/ABIDecoder' -import { Schemas, SchemaValidator } from './services/schemaValidator' import { UserStateManager } from './userStateManager' import { Utils, Nullable, Logger, getNStorageNodes } from './utils' -import { ServiceProvider } from './api/ServiceProvider' - -import { Account } from './api/Account' -import { Users } from './api/Users' -import { Track } from './api/Track' -import { Playlists } from './api/Playlist' -import { File } from './api/File' -import { Rewards } from './api/Rewards' -import { Reactions } from './api/Reactions' -import { Notifications } from './api/Notifications' -import Web3 from './LibsWeb3' - -import { Keypair } from '@solana/web3.js' import { getPlatformLocalStorage, LocalStorage } from './utils/localStorage' -import type { BaseConstructorArgs } from './api/base' -import type { MonitoringCallbacks } from './services/types' -import { EntityManager } from './api/entityManager' +import { version } from './version' type LibsIdentityServiceConfig = { url: string diff --git a/packages/libs/src/api/Account.ts b/packages/libs/src/api/Account.ts index ed52e7c7add..e6ebb741652 100644 --- a/packages/libs/src/api/Account.ts +++ b/packages/libs/src/api/Account.ts @@ -1,11 +1,13 @@ -import { Base, BaseConstructorArgs, Services } from './base' -import { Nullable, UserMetadata, Utils } from '../utils' +import { PublicKey } from '@solana/web3.js' +import type { BN } from 'ethereumjs-util' + import { AuthHeaders } from '../constants' +import { Nullable, UserMetadata, Utils } from '../utils' import { getPermitDigest, sign } from '../utils/signatures' -import { PublicKey } from '@solana/web3.js' -import type { Users } from './Users' + import type { ServiceProvider } from './ServiceProvider' -import type { BN } from 'ethereumjs-util' +import type { Users } from './Users' +import { Base, BaseConstructorArgs, Services } from './base' export class Account extends Base { User: Users @@ -566,7 +568,7 @@ export class Account extends Base { name, tokenAddress, chainId, - { owner: owner, spender: relayerAddress, value: amount }, + { owner, spender: relayerAddress, value: amount }, nonce, deadline ) diff --git a/packages/libs/src/api/File.ts b/packages/libs/src/api/File.ts index a11013b5717..bd57c6ef272 100644 --- a/packages/libs/src/api/File.ts +++ b/packages/libs/src/api/File.ts @@ -1,12 +1,13 @@ +import retry from 'async-retry' +import axios, { ResponseType } from 'axios' import urlJoin from 'proper-url-join' -import axios, { ResponseType } from 'axios' -import { Base, BaseConstructorArgs, Services } from './base' -import { raceRequests } from '../utils/network' -import retry from 'async-retry' -import type { Users } from './Users' import type { Nullable } from '../utils' +import { raceRequests } from '../utils/network' + import type { ServiceProvider } from './ServiceProvider' +import type { Users } from './Users' +import { Base, BaseConstructorArgs, Services } from './base' /** * Downloads a file using an element in the DOM diff --git a/packages/libs/src/api/Notifications.ts b/packages/libs/src/api/Notifications.ts index 49ef0c9a9b5..028320c1e50 100644 --- a/packages/libs/src/api/Notifications.ts +++ b/packages/libs/src/api/Notifications.ts @@ -1,11 +1,13 @@ import type { TransactionReceipt } from 'web3-core' -import { Base, BaseConstructorArgs, Services } from './base' + import { Action, EntityType } from '../services/dataContracts/EntityManagerClient' import type { GetUserNotificationsParams } from '../services/discoveryProvider/requests' +import { Base, BaseConstructorArgs, Services } from './base' + type AnnouncementData = {} export class Notifications extends Base { diff --git a/packages/libs/src/api/Rewards.ts b/packages/libs/src/api/Rewards.ts index c43ed8baab4..1015b11dfc8 100644 --- a/packages/libs/src/api/Rewards.ts +++ b/packages/libs/src/api/Rewards.ts @@ -1,15 +1,16 @@ import axios, { AxiosRequestConfig, AxiosResponse } from 'axios' +import BN from 'bn.js' import { sampleSize } from 'lodash' -import { Base, BaseConstructorArgs, Services } from './base' -import BN from 'bn.js' -import { RewardsManagerError } from '../services/solana/errors' import { WAUDIO_DECMIALS } from '../constants' +import type { DiscoveryProvider } from '../services/discoveryProvider' +import { RewardsManagerError } from '../services/solana/errors' +import type { AttestationMeta } from '../services/solana/rewards' +import type { Logger, Nullable } from '../utils' import { Utils } from '../utils/utils' + import type { ServiceProvider } from './ServiceProvider' -import type { Logger, Nullable } from '../utils' -import type { AttestationMeta } from '../services/solana/rewards' -import type { DiscoveryProvider } from '../services/discoveryProvider' +import { Base, BaseConstructorArgs, Services } from './base' const { decodeHashId } = Utils diff --git a/packages/libs/src/api/ServiceProvider.ts b/packages/libs/src/api/ServiceProvider.ts index a60dee3f6cf..9fbef351675 100644 --- a/packages/libs/src/api/ServiceProvider.ts +++ b/packages/libs/src/api/ServiceProvider.ts @@ -1,9 +1,9 @@ import { sampleSize } from 'lodash' -import { Base, BaseConstructorArgs } from './base' +import type { ServiceWithEndpoint } from '../utils' import { getNStorageNodes } from '../utils/getNStorageNodes' -import type { ServiceWithEndpoint } from '../utils' +import { Base, BaseConstructorArgs } from './base' const CONTENT_NODE_SERVICE_NAME = 'content-node' const DISCOVERY_NODE_SERVICE_NAME = 'discovery-node' diff --git a/packages/libs/src/api/Track.ts b/packages/libs/src/api/Track.ts index e4823ad4286..baa261b3346 100644 --- a/packages/libs/src/api/Track.ts +++ b/packages/libs/src/api/Track.ts @@ -1,11 +1,11 @@ -import type { BaseConstructorArgs } from './base' - -import { Base, Services } from './base' -import { Nullable, TrackMetadata, Utils } from '../utils' import { Action, EntityManagerClient } from '../services/dataContracts/EntityManagerClient' +import { Nullable, TrackMetadata, Utils } from '../utils' + +import type { BaseConstructorArgs } from './base' +import { Base, Services } from './base' const TRACK_PROPS = [ 'owner_id', diff --git a/packages/libs/src/api/Users.ts b/packages/libs/src/api/Users.ts index 822995e1b63..6224ace49a6 100644 --- a/packages/libs/src/api/Users.ts +++ b/packages/libs/src/api/Users.ts @@ -1,8 +1,10 @@ import { pick } from 'lodash' -import { Base, BaseConstructorArgs, Services } from './base' + +import { EntityManagerClient } from '../services/dataContracts/EntityManagerClient' import { Nullable, UserMetadata, Utils } from '../utils' + import type { ServiceProvider } from './ServiceProvider' -import { EntityManagerClient } from '../services/dataContracts/EntityManagerClient' +import { Base, BaseConstructorArgs, Services } from './base' // User metadata fields that are required on the metadata object and can have // null or non-null values @@ -517,7 +519,6 @@ export class Users extends Base { } } - async _waitForDiscoveryToIndexUser( userId: number, blockNumber: number, diff --git a/packages/libs/src/api/base.ts b/packages/libs/src/api/base.ts index 8ca5dec30ef..af72f0e5cf0 100644 --- a/packages/libs/src/api/base.ts +++ b/packages/libs/src/api/base.ts @@ -1,15 +1,16 @@ +import type { Hedgehog } from '@audius/hedgehog' + import type { Comstock } from '../services/comstock' import type { CreatorNode } from '../services/creatorNode' import type { AudiusContracts } from '../services/dataContracts' import type { DiscoveryProvider } from '../services/discoveryProvider' import type { EthContracts } from '../services/ethContracts' import type { EthWeb3Manager } from '../services/ethWeb3Manager' -import type { Hedgehog } from '@audius/hedgehog' import type { IdentityService } from '../services/identity' import type { SolanaWeb3Manager } from '../services/solana' import type { Web3Manager } from '../services/web3Manager' -import type { UserStateManager } from '../userStateManager' import type { Wormhole } from '../services/wormhole' +import type { UserStateManager } from '../userStateManager' export const Services = Object.freeze({ IDENTITY_SERVICE: 'Identity Service', diff --git a/packages/libs/src/api/entityManager.ts b/packages/libs/src/api/entityManager.ts index 76058c04461..1a3d8844004 100644 --- a/packages/libs/src/api/entityManager.ts +++ b/packages/libs/src/api/entityManager.ts @@ -1,4 +1,3 @@ -import { Base, Services } from './base' import type { PlaylistMetadata } from '../services/creatorNode' import { Action, @@ -6,6 +5,8 @@ import { } from '../services/dataContracts/EntityManagerClient' import { Utils } from '../utils' +import { Base, Services } from './base' + export type EntityManagerSuccessResponse = { blockHash: string blockNumber: number @@ -151,7 +152,7 @@ export class EntityManager extends Base { data: metadata }) return await this.manageEntity({ - userId: userId, + userId, entityType, entityId: playlist.playlist_id, action: createAction, diff --git a/packages/libs/src/sanityChecks/index.ts b/packages/libs/src/sanityChecks/index.ts index de0e044c858..0219d0088e9 100644 --- a/packages/libs/src/sanityChecks/index.ts +++ b/packages/libs/src/sanityChecks/index.ts @@ -1,6 +1,7 @@ -import { needsRecoveryEmail } from './needsRecoveryEmail' import type { AudiusLibs } from '../AudiusLibs' +import { needsRecoveryEmail } from './needsRecoveryEmail' + // Checks to run at startup to ensure a user is in a good state. export class SanityChecks { libs: AudiusLibs diff --git a/packages/libs/src/sdk/api/albums/AlbumsApi.test.ts b/packages/libs/src/sdk/api/albums/AlbumsApi.test.ts index 27efb3842d8..f939cdfadd1 100644 --- a/packages/libs/src/sdk/api/albums/AlbumsApi.test.ts +++ b/packages/libs/src/sdk/api/albums/AlbumsApi.test.ts @@ -1,18 +1,21 @@ -import { Auth } from '../../services/Auth/Auth' +import fs from 'fs' +import path from 'path' + import { beforeAll, expect, jest } from '@jest/globals' -import { Configuration } from '../generated/default' -import { PlaylistsApi as GeneratedPlaylistsApi } from '../generated/default/apis/PlaylistsApi' -import { EntityManager } from '../../services/EntityManager' -import { AlbumsApi } from './AlbumsApi' + +import { Auth } from '../../services/Auth/Auth' import { DiscoveryNodeSelector } from '../../services/DiscoveryNodeSelector' -import { StorageNodeSelector } from '../../services/StorageNodeSelector' +import { EntityManager } from '../../services/EntityManager' +import { Logger } from '../../services/Logger' import { Storage } from '../../services/Storage' -import { TrackUploadHelper } from '../tracks/TrackUploadHelper' -import { Mood } from '../../types/Mood' +import { StorageNodeSelector } from '../../services/StorageNodeSelector' import { Genre } from '../../types/Genre' -import { Logger } from '../../services/Logger' -import fs from 'fs' -import path from 'path' +import { Mood } from '../../types/Mood' +import { Configuration } from '../generated/default' +import { PlaylistsApi as GeneratedPlaylistsApi } from '../generated/default/apis/PlaylistsApi' +import { TrackUploadHelper } from '../tracks/TrackUploadHelper' + +import { AlbumsApi } from './AlbumsApi' const wavFile = fs.readFileSync( path.resolve(__dirname, '../../test/wav-file.wav') diff --git a/packages/libs/src/sdk/api/albums/AlbumsApi.ts b/packages/libs/src/sdk/api/albums/AlbumsApi.ts index cf2aa3fe769..0f51ea89fb6 100644 --- a/packages/libs/src/sdk/api/albums/AlbumsApi.ts +++ b/packages/libs/src/sdk/api/albums/AlbumsApi.ts @@ -7,6 +7,7 @@ import type { LoggerService } from '../../services/Logger' import { parseParams } from '../../utils/parseParams' import type { Configuration } from '../generated/default' import { PlaylistsApi } from '../playlists/PlaylistsApi' + import { createUpdateAlbumSchema, createUploadAlbumSchema, diff --git a/packages/libs/src/sdk/api/albums/types.ts b/packages/libs/src/sdk/api/albums/types.ts index 73988bdde79..582bd3bbec6 100644 --- a/packages/libs/src/sdk/api/albums/types.ts +++ b/packages/libs/src/sdk/api/albums/types.ts @@ -1,9 +1,10 @@ import { z } from 'zod' + import { AudioFile, ImageFile } from '../../types/File' +import { Genre } from '../../types/Genre' import { HashId } from '../../types/HashId' import { Mood } from '../../types/Mood' import { createUploadTrackMetadataSchema } from '../tracks/types' -import { Genre } from '../../types/Genre' export const getAlbumSchema = z.object({ userId: z.string(), diff --git a/packages/libs/src/sdk/api/chats/ChatsApi.ts b/packages/libs/src/sdk/api/chats/ChatsApi.ts index 0519f9fc2f5..ea638a38b99 100644 --- a/packages/libs/src/sdk/api/chats/ChatsApi.ts +++ b/packages/libs/src/sdk/api/chats/ChatsApi.ts @@ -1,22 +1,24 @@ +import EventEmitter from 'events' + +import * as secp from '@noble/secp256k1' +import { base64 } from '@scure/base' +import WebSocket from 'isomorphic-ws' +import * as aes from 'micro-aes-gcm' +import type TypedEmitter from 'typed-emitter' +import { ulid } from 'ulid' + +import type { AuthService } from '../../services/Auth' +import type { DiscoveryNodeSelectorService } from '../../services/DiscoveryNodeSelector/types' +import type { LoggerService } from '../../services/Logger' +import type { EventEmitterTarget } from '../../utils/EventEmitterTarget' +import { parseParams } from '../../utils/parseParams' import { BaseAPI, Configuration, HTTPQuery, RequestOpts } from '../generated/default' -import * as aes from 'micro-aes-gcm' -import { base64 } from '@scure/base' -import { ulid } from 'ulid' -import * as secp from '@noble/secp256k1' -import type { - ChatInvite, - UserChat, - ChatMessage, - ChatWebsocketEventData, - RPCPayloadRequest, - ValidatedChatPermissions -} from './serverTypes' import { ChatBlockRequest, ChatBlockRequestSchema, @@ -54,14 +56,14 @@ import { TypedCommsResponse, UnfurlResponse } from './clientTypes' -import WebSocket from 'isomorphic-ws' -import EventEmitter from 'events' -import type TypedEmitter from 'typed-emitter' -import type { DiscoveryNodeSelectorService } from '../../services/DiscoveryNodeSelector/types' -import type { AuthService } from '../../services/Auth' -import type { EventEmitterTarget } from '../../utils/EventEmitterTarget' -import { parseParams } from '../../utils/parseParams' -import type { LoggerService } from '../../services/Logger' +import type { + ChatInvite, + UserChat, + ChatMessage, + ChatWebsocketEventData, + RPCPayloadRequest, + ValidatedChatPermissions +} from './serverTypes' const GENERIC_MESSAGE_ERROR = 'Error: this message can not be displayed' @@ -182,16 +184,16 @@ export class ChatsApi timestamp: new Date().getTime() } if (limit) { - query['limit'] = limit + query.limit = limit } if (before) { - query['before'] = before + query.before = before } if (after) { - query['after'] = after + query.after = after } if (currentUserId) { - query['current_user_id'] = currentUserId + query.current_user_id = currentUserId } const response = await this.signAndSendRequest({ method: 'GET', @@ -238,16 +240,16 @@ export class ChatsApi timestamp: new Date().getTime() } if (limit) { - query['limit'] = limit + query.limit = limit } if (before) { - query['before'] = before + query.before = before } if (after) { - query['after'] = after + query.after = after } if (currentUserId) { - query['current_user_id'] = currentUserId + query.current_user_id = currentUserId } const response = await this.signAndSendRequest({ method: 'GET', @@ -292,7 +294,7 @@ export class ChatsApi timestamp: new Date().getTime() } if (parsedArgs?.currentUserId) { - query['current_user_id'] = parsedArgs.currentUserId + query.current_user_id = parsedArgs.currentUserId } const res = await this.signAndSendRequest({ method: 'GET', @@ -317,9 +319,9 @@ export class ChatsApi 'getPermissions', ChatGetPermissionRequestSchema )(params) - query['id'] = userIds + query.id = userIds if (currentUserId) { - query['current_user_id'] = currentUserId + query.current_user_id = currentUserId } const res = await this.signAndSendRequest({ @@ -345,7 +347,7 @@ export class ChatsApi timestamp: new Date().getTime() } if (parsedArgs?.currentUserId) { - query['current_user_id'] = parsedArgs.currentUserId + query.current_user_id = parsedArgs.currentUserId } const response = await this.signAndSendRequest({ method: 'GET', @@ -370,7 +372,7 @@ export class ChatsApi timestamp: new Date().getTime() } if (parsedArgs?.currentUserId) { - query['current_user_id'] = parsedArgs.currentUserId + query.current_user_id = parsedArgs.currentUserId } const response = await this.signAndSendRequest({ method: 'GET', @@ -507,7 +509,7 @@ export class ChatsApi params: { chat_id: chatId, message_id: messageId, - reaction: reaction + reaction } }) } @@ -704,7 +706,7 @@ export class ChatsApi timestamp: new Date().getTime() } if (currentUserId) { - queryParameters['current_user_id'] = currentUserId + queryParameters.current_user_id = currentUserId } const response = await this.signAndSendRequest({ method: 'GET', diff --git a/packages/libs/src/sdk/api/developer-apps/DeveloperAppsApi.ts b/packages/libs/src/sdk/api/developer-apps/DeveloperAppsApi.ts index aed8ffe75b9..fb19fe0c77e 100644 --- a/packages/libs/src/sdk/api/developer-apps/DeveloperAppsApi.ts +++ b/packages/libs/src/sdk/api/developer-apps/DeveloperAppsApi.ts @@ -1,9 +1,4 @@ import type Web3Type from 'web3' -import Web3 from '../../utils/web3' -import { - Configuration, - DeveloperAppsApi as GeneratedDeveloperAppsApi -} from '../generated/default' import type { AuthService, EntityManagerService } from '../../services' import { @@ -11,8 +6,13 @@ import { EntityType, AdvancedOptions } from '../../services/EntityManager/types' - import { parseParams } from '../../utils/parseParams' +import Web3 from '../../utils/web3' +import { + Configuration, + DeveloperAppsApi as GeneratedDeveloperAppsApi +} from '../generated/default' + import { CreateDeveloperAppRequest, CreateDeveloperAppSchema, diff --git a/packages/libs/src/sdk/api/developer-apps/types.ts b/packages/libs/src/sdk/api/developer-apps/types.ts index 61d20f7b553..ee4c94f28ea 100644 --- a/packages/libs/src/sdk/api/developer-apps/types.ts +++ b/packages/libs/src/sdk/api/developer-apps/types.ts @@ -1,4 +1,5 @@ import { z } from 'zod' + import { HashId } from '../../types/HashId' import { isApiKeyValid } from '../../utils/apiKey' diff --git a/packages/libs/src/sdk/api/generator/gen.js b/packages/libs/src/sdk/api/generator/gen.js index bdcee8dd5af..1c56fe610fc 100644 --- a/packages/libs/src/sdk/api/generator/gen.js +++ b/packages/libs/src/sdk/api/generator/gen.js @@ -1,23 +1,24 @@ const { exec } = require('child_process') + const commander = require('commander') const program = new commander.Command() const spawnOpenAPIGenerator = (openApiGeneratorArgs) => { - console.log('Running OpenAPI Generator:') + console.info('Running OpenAPI Generator:') const fullCmd = `docker run --add-host=audius-protocol-discovery-provider-1:host-gateway --rm -v "${ process.env.PWD }:/local" openapitools/openapi-generator-cli ${openApiGeneratorArgs.join( ' ' )}` - console.log(fullCmd) + console.info(fullCmd) const openApiGeneratorCLI = exec(fullCmd, (error, stdout, stderr) => { if (error) { console.error(`exec error: ${error}`) return } if (stdout) { - console.log(`stdout: ${stdout}`) + console.info(`stdout: ${stdout}`) } if (stderr) { console.error(`stderr: ${stderr}`) diff --git a/packages/libs/src/sdk/api/grants/GrantsApi.ts b/packages/libs/src/sdk/api/grants/GrantsApi.ts index b160b42b416..b797f9bc873 100644 --- a/packages/libs/src/sdk/api/grants/GrantsApi.ts +++ b/packages/libs/src/sdk/api/grants/GrantsApi.ts @@ -1,8 +1,7 @@ -import type { Configuration } from '../generated/default' - import type { AuthService, EntityManagerService } from '../../services' - import { Action, EntityType } from '../../services/EntityManager/types' +import { parseParams } from '../../utils/parseParams' +import type { Configuration } from '../generated/default' import { CreateGrantRequest, @@ -10,9 +9,9 @@ import { RevokeGrantRequest, RevokeGrantSchema } from './types' -import { parseParams } from '../../utils/parseParams' export class GrantsApi { + // eslint-disable-next-line no-useless-constructor constructor( _config: Configuration, private readonly entityManager: EntityManagerService, diff --git a/packages/libs/src/sdk/api/grants/types.ts b/packages/libs/src/sdk/api/grants/types.ts index 9990d189422..75c95e9894b 100644 --- a/packages/libs/src/sdk/api/grants/types.ts +++ b/packages/libs/src/sdk/api/grants/types.ts @@ -1,4 +1,5 @@ import { z } from 'zod' + import { HashId } from '../../types/HashId' import { isApiKeyValid } from '../../utils/apiKey' diff --git a/packages/libs/src/sdk/api/playlists/PlaylistsApi.test.ts b/packages/libs/src/sdk/api/playlists/PlaylistsApi.test.ts index 24f501d19b6..4bb640b3761 100644 --- a/packages/libs/src/sdk/api/playlists/PlaylistsApi.test.ts +++ b/packages/libs/src/sdk/api/playlists/PlaylistsApi.test.ts @@ -1,18 +1,21 @@ -import { Auth } from '../../services/Auth/Auth' +import fs from 'fs' +import path from 'path' + import { beforeAll, expect, jest } from '@jest/globals' -import { Configuration } from '../generated/default' -import { PlaylistsApi as GeneratedPlaylistsApi } from '../generated/default/apis/PlaylistsApi' -import { EntityManager } from '../../services/EntityManager' -import { PlaylistsApi } from './PlaylistsApi' + +import { Auth } from '../../services/Auth/Auth' import { DiscoveryNodeSelector } from '../../services/DiscoveryNodeSelector' -import { StorageNodeSelector } from '../../services/StorageNodeSelector' +import { EntityManager } from '../../services/EntityManager' +import { Logger } from '../../services/Logger' import { Storage } from '../../services/Storage' -import { TrackUploadHelper } from '../tracks/TrackUploadHelper' -import { Mood } from '../../types/Mood' +import { StorageNodeSelector } from '../../services/StorageNodeSelector' import { Genre } from '../../types/Genre' -import { Logger } from '../../services/Logger' -import fs from 'fs' -import path from 'path' +import { Mood } from '../../types/Mood' +import { Configuration } from '../generated/default' +import { PlaylistsApi as GeneratedPlaylistsApi } from '../generated/default/apis/PlaylistsApi' +import { TrackUploadHelper } from '../tracks/TrackUploadHelper' + +import { PlaylistsApi } from './PlaylistsApi' const wavFile = fs.readFileSync( path.resolve(__dirname, '../../test/wav-file.wav') diff --git a/packages/libs/src/sdk/api/playlists/PlaylistsApi.ts b/packages/libs/src/sdk/api/playlists/PlaylistsApi.ts index d7206d7e3f6..184814a49f3 100644 --- a/packages/libs/src/sdk/api/playlists/PlaylistsApi.ts +++ b/packages/libs/src/sdk/api/playlists/PlaylistsApi.ts @@ -1,3 +1,4 @@ +import { pick } from 'lodash' import snakecaseKeys from 'snakecase-keys' import type { z } from 'zod' @@ -8,11 +9,16 @@ import { EntityType, AdvancedOptions } from '../../services/EntityManager/types' +import type { LoggerService } from '../../services/Logger' +import { encodeHashId } from '../../utils/hashId' import { parseParams } from '../../utils/parseParams' +import { retry3 } from '../../utils/retry' import { Configuration, PlaylistsApi as GeneratedPlaylistsApi } from '../generated/default' +import { TrackUploadHelper } from '../tracks/TrackUploadHelper' + import { AddTrackToPlaylistRequest, AddTrackToPlaylistSchema, @@ -39,11 +45,6 @@ import { UploadPlaylistRequest, createUpdatePlaylistMetadataSchema } from './types' -import { retry3 } from '../../utils/retry' -import { TrackUploadHelper } from '../tracks/TrackUploadHelper' -import { encodeHashId } from '../../utils/hashId' -import { pick } from 'lodash' -import type { LoggerService } from '../../services/Logger' export class PlaylistsApi extends GeneratedPlaylistsApi { private readonly trackUploadHelper: TrackUploadHelper diff --git a/packages/libs/src/sdk/api/playlists/types.ts b/packages/libs/src/sdk/api/playlists/types.ts index 03a11ee2c53..5e43022d00c 100644 --- a/packages/libs/src/sdk/api/playlists/types.ts +++ b/packages/libs/src/sdk/api/playlists/types.ts @@ -1,9 +1,10 @@ import { z } from 'zod' + import { AudioFile, ImageFile } from '../../types/File' +import { Genre } from '../../types/Genre' import { HashId } from '../../types/HashId' import { Mood } from '../../types/Mood' import { createUploadTrackMetadataSchema } from '../tracks/types' -import { Genre } from '../../types/Genre' const CreatePlaylistMetadataSchema = z .object({ diff --git a/packages/libs/src/sdk/api/tracks/TracksApi.test.ts b/packages/libs/src/sdk/api/tracks/TracksApi.test.ts index bdbd0b57fcb..3fa5791cdc2 100644 --- a/packages/libs/src/sdk/api/tracks/TracksApi.test.ts +++ b/packages/libs/src/sdk/api/tracks/TracksApi.test.ts @@ -1,17 +1,20 @@ -import { TracksApi } from './TracksApi' -import { Auth } from '../../services/Auth/Auth' +import fs from 'fs' +import path from 'path' + import { beforeAll, expect, jest } from '@jest/globals' -import { Configuration } from '../generated/default' -import { Genre } from '../../types/Genre' -import { Mood } from '../../types/Mood' -import { EntityManager } from '../../services/EntityManager' + +import { Auth } from '../../services/Auth/Auth' import { DiscoveryNodeSelector } from '../../services/DiscoveryNodeSelector' -import { StorageNodeSelector } from '../../services/StorageNodeSelector' +import { EntityManager } from '../../services/EntityManager' +import { Logger } from '../../services/Logger' import { Storage } from '../../services/Storage' +import { StorageNodeSelector } from '../../services/StorageNodeSelector' +import { Genre } from '../../types/Genre' +import { Mood } from '../../types/Mood' +import { Configuration } from '../generated/default' + import { TrackUploadHelper } from './TrackUploadHelper' -import { Logger } from '../../services/Logger' -import fs from 'fs' -import path from 'path' +import { TracksApi } from './TracksApi' const wavFile = fs.readFileSync( path.resolve(__dirname, '../../test/wav-file.wav') diff --git a/packages/libs/src/sdk/api/tracks/TracksApi.ts b/packages/libs/src/sdk/api/tracks/TracksApi.ts index fc2020c6d1f..c4a146caf45 100644 --- a/packages/libs/src/sdk/api/tracks/TracksApi.ts +++ b/packages/libs/src/sdk/api/tracks/TracksApi.ts @@ -1,12 +1,25 @@ import snakecaseKeys from 'snakecase-keys' -import { BASE_PATH, RequiredError } from '../generated/default/runtime' +import type { EntityManagerService, AuthService } from '../../services' +import type { DiscoveryNodeSelectorService } from '../../services/DiscoveryNodeSelector' +import { + Action, + EntityType, + AdvancedOptions +} from '../../services/EntityManager/types' +import type { LoggerService } from '../../services/Logger' +import type { StorageService } from '../../services/Storage' +import { encodeHashId } from '../../utils/hashId' +import { parseParams } from '../../utils/parseParams' +import { retry3 } from '../../utils/retry' import { Configuration, StreamTrackRequest, TracksApi as GeneratedTracksApi } from '../generated/default' -import type { DiscoveryNodeSelectorService } from '../../services/DiscoveryNodeSelector' +import { BASE_PATH, RequiredError } from '../generated/default/runtime' + +import { TrackUploadHelper } from './TrackUploadHelper' import { createUpdateTrackSchema, createUploadTrackSchema, @@ -23,18 +36,6 @@ import { UpdateTrackRequest, UploadTrackRequest } from './types' -import type { StorageService } from '../../services/Storage' -import { retry3 } from '../../utils/retry' -import type { EntityManagerService, AuthService } from '../../services' -import { - Action, - EntityType, - AdvancedOptions -} from '../../services/EntityManager/types' -import { parseParams } from '../../utils/parseParams' -import { TrackUploadHelper } from './TrackUploadHelper' -import { encodeHashId } from '../../utils/hashId' -import type { LoggerService } from '../../services/Logger' // Extend that new class export class TracksApi extends GeneratedTracksApi { @@ -96,7 +97,7 @@ export class TracksApi extends GeneratedTracksApi { ) const uploadOptions: { [key: string]: string } = {} if (metadata.previewStartSeconds) { - uploadOptions['previewStartSeconds'] = + uploadOptions.previewStartSeconds = metadata.previewStartSeconds.toString() } diff --git a/packages/libs/src/sdk/api/tracks/types.ts b/packages/libs/src/sdk/api/tracks/types.ts index 70f0f9e2b72..7357a08d986 100644 --- a/packages/libs/src/sdk/api/tracks/types.ts +++ b/packages/libs/src/sdk/api/tracks/types.ts @@ -1,4 +1,5 @@ import { z } from 'zod' + import { AudioFile, ImageFile } from '../../types/File' import { Genre } from '../../types/Genre' import { HashId } from '../../types/HashId' diff --git a/packages/libs/src/sdk/api/users/UsersApi.test.ts b/packages/libs/src/sdk/api/users/UsersApi.test.ts index 310b22d719f..ad97f1f34ce 100644 --- a/packages/libs/src/sdk/api/users/UsersApi.test.ts +++ b/packages/libs/src/sdk/api/users/UsersApi.test.ts @@ -1,14 +1,17 @@ -import { Auth } from '../../services/Auth/Auth' +import fs from 'fs' +import path from 'path' + import { beforeAll, expect, jest } from '@jest/globals' -import { Configuration } from '../generated/default' -import { EntityManager } from '../../services/EntityManager' + +import { Auth } from '../../services/Auth/Auth' import { DiscoveryNodeSelector } from '../../services/DiscoveryNodeSelector' -import { StorageNodeSelector } from '../../services/StorageNodeSelector' +import { EntityManager } from '../../services/EntityManager' +import { Logger } from '../../services/Logger' import { Storage } from '../../services/Storage' +import { StorageNodeSelector } from '../../services/StorageNodeSelector' +import { Configuration } from '../generated/default' + import { UsersApi } from './UsersApi' -import { Logger } from '../../services/Logger' -import fs from 'fs' -import path from 'path' const pngFile = fs.readFileSync( path.resolve(__dirname, '../../test/png-file.png') diff --git a/packages/libs/src/sdk/api/users/UsersApi.ts b/packages/libs/src/sdk/api/users/UsersApi.ts index a587c341d58..ac0b96f26a6 100644 --- a/packages/libs/src/sdk/api/users/UsersApi.ts +++ b/packages/libs/src/sdk/api/users/UsersApi.ts @@ -1,11 +1,17 @@ import snakecaseKeys from 'snakecase-keys' -import type { AuthService, DiscoveryNodeSelectorService, StorageService } from '../../services' + +import type { + AuthService, + DiscoveryNodeSelectorService, + StorageService +} from '../../services' import { Action, EntityManagerService, EntityType, AdvancedOptions } from '../../services/EntityManager/types' +import type { LoggerService } from '../../services/Logger' import { parseParams } from '../../utils/parseParams' import { retry3 } from '../../utils/retry' import { @@ -16,6 +22,8 @@ import { DownloadUSDCWithdrawalsAsCSVRequest, UsersApi as GeneratedUsersApi } from '../generated/default' +import * as runtime from '../generated/default/runtime' + import { FollowUserRequest, FollowUserSchema, @@ -28,8 +36,6 @@ import { UnsubscribeFromUserSchema, UpdateProfileSchema } from './types' -import type { LoggerService } from '../../services/Logger' -import * as runtime from '../generated/default/runtime' export class UsersApi extends GeneratedUsersApi { constructor( @@ -198,117 +204,216 @@ export class UsersApi extends GeneratedUsersApi { /** * Downloads the sales the user has made as a CSV file */ - async downloadSalesAsCSVBlob(params: DownloadSalesAsCSVRequest): Promise { + async downloadSalesAsCSVBlob( + params: DownloadSalesAsCSVRequest + ): Promise { if (params.id === null || params.id === undefined) { - throw new runtime.RequiredError('id','Required parameter params.id was null or undefined when calling downloadSalesAsCSV.'); + throw new runtime.RequiredError( + 'id', + 'Required parameter params.id was null or undefined when calling downloadSalesAsCSV.' + ) } - if (params.encodedDataMessage === null || params.encodedDataMessage === undefined) { - throw new runtime.RequiredError('encodedDataMessage','Required parameter params.encodedDataMessage was null or undefined when calling downloadSalesAsCSV.'); + if ( + params.encodedDataMessage === null || + params.encodedDataMessage === undefined + ) { + throw new runtime.RequiredError( + 'encodedDataMessage', + 'Required parameter params.encodedDataMessage was null or undefined when calling downloadSalesAsCSV.' + ) } - if (params.encodedDataSignature === null || params.encodedDataSignature === undefined) { - throw new runtime.RequiredError('encodedDataSignature','Required parameter params.encodedDataSignature was null or undefined when calling downloadSalesAsCSV.'); + if ( + params.encodedDataSignature === null || + params.encodedDataSignature === undefined + ) { + throw new runtime.RequiredError( + 'encodedDataSignature', + 'Required parameter params.encodedDataSignature was null or undefined when calling downloadSalesAsCSV.' + ) } - const queryParameters: any = {}; + const queryParameters: any = {} if (params.userId !== undefined) { - queryParameters['user_id'] = params.userId; + queryParameters.user_id = params.userId } - const headerParameters: runtime.HTTPHeaders = {}; + const headerParameters: runtime.HTTPHeaders = {} - if (params.encodedDataMessage !== undefined && params.encodedDataMessage !== null) { - headerParameters['Encoded-Data-Message'] = String(params.encodedDataMessage); + if ( + params.encodedDataMessage !== undefined && + params.encodedDataMessage !== null + ) { + headerParameters['Encoded-Data-Message'] = String( + params.encodedDataMessage + ) } - if (params.encodedDataSignature !== undefined && params.encodedDataSignature !== null) { - headerParameters['Encoded-Data-Signature'] = String(params.encodedDataSignature); + if ( + params.encodedDataSignature !== undefined && + params.encodedDataSignature !== null + ) { + headerParameters['Encoded-Data-Signature'] = String( + params.encodedDataSignature + ) } const host = await this.discoveryNodeSelectorService.getSelectedEndpoint() - const path = `/users/{id}/sales/download`.replace(`{${"id"}}`, encodeURIComponent(String(params.id))) + const path = `/users/{id}/sales/download`.replace( + `{${'id'}}`, + encodeURIComponent(String(params.id)) + ) const url = `${host}${BASE_PATH}${path}` - const response = await fetch(url, { method: 'GET', headers: headerParameters }) + const response = await fetch(url, { + method: 'GET', + headers: headerParameters + }) return response.blob() } /** * Downloads the purchases the user has made as a CSV file */ - async downloadPurchasesAsCSVBlob(params: DownloadPurchasesAsCSVRequest): Promise { + async downloadPurchasesAsCSVBlob( + params: DownloadPurchasesAsCSVRequest + ): Promise { if (params.id === null || params.id === undefined) { - throw new runtime.RequiredError('id','Required parameter params.id was null or undefined when calling downloadPurchasesAsCSV.'); + throw new runtime.RequiredError( + 'id', + 'Required parameter params.id was null or undefined when calling downloadPurchasesAsCSV.' + ) } - if (params.encodedDataMessage === null || params.encodedDataMessage === undefined) { - throw new runtime.RequiredError('encodedDataMessage','Required parameter params.encodedDataMessage was null or undefined when calling downloadPurchasesAsCSV.'); + if ( + params.encodedDataMessage === null || + params.encodedDataMessage === undefined + ) { + throw new runtime.RequiredError( + 'encodedDataMessage', + 'Required parameter params.encodedDataMessage was null or undefined when calling downloadPurchasesAsCSV.' + ) } - if (params.encodedDataSignature === null || params.encodedDataSignature === undefined) { - throw new runtime.RequiredError('encodedDataSignature','Required parameter params.encodedDataSignature was null or undefined when calling downloadPurchasesAsCSV.'); + if ( + params.encodedDataSignature === null || + params.encodedDataSignature === undefined + ) { + throw new runtime.RequiredError( + 'encodedDataSignature', + 'Required parameter params.encodedDataSignature was null or undefined when calling downloadPurchasesAsCSV.' + ) } - const queryParameters: any = {}; + const queryParameters: any = {} if (params.userId !== undefined) { - queryParameters['user_id'] = params.userId; + queryParameters.user_id = params.userId } - const headerParameters: runtime.HTTPHeaders = {}; + const headerParameters: runtime.HTTPHeaders = {} - if (params.encodedDataMessage !== undefined && params.encodedDataMessage !== null) { - headerParameters['Encoded-Data-Message'] = String(params.encodedDataMessage); + if ( + params.encodedDataMessage !== undefined && + params.encodedDataMessage !== null + ) { + headerParameters['Encoded-Data-Message'] = String( + params.encodedDataMessage + ) } - if (params.encodedDataSignature !== undefined && params.encodedDataSignature !== null) { - headerParameters['Encoded-Data-Signature'] = String(params.encodedDataSignature); + if ( + params.encodedDataSignature !== undefined && + params.encodedDataSignature !== null + ) { + headerParameters['Encoded-Data-Signature'] = String( + params.encodedDataSignature + ) } const host = await this.discoveryNodeSelectorService.getSelectedEndpoint() - const path = `/users/{id}/purchases/download`.replace(`{${"id"}}`, encodeURIComponent(String(params.id))) + const path = `/users/{id}/purchases/download`.replace( + `{${'id'}}`, + encodeURIComponent(String(params.id)) + ) const url = `${host}${BASE_PATH}${path}` - const response = await fetch(url, { method: 'GET', headers: headerParameters }) + const response = await fetch(url, { + method: 'GET', + headers: headerParameters + }) return response.blob() } /** * Downloads the USDC withdrawals the user has made as a CSV file */ - async downloadUSDCWithdrawalsAsCSVBlob(params: DownloadUSDCWithdrawalsAsCSVRequest): Promise { + async downloadUSDCWithdrawalsAsCSVBlob( + params: DownloadUSDCWithdrawalsAsCSVRequest + ): Promise { if (params.id === null || params.id === undefined) { - throw new runtime.RequiredError('id','Required parameter params.id was null or undefined when calling downloadUSDCWithdrawalsAsCSV.'); + throw new runtime.RequiredError( + 'id', + 'Required parameter params.id was null or undefined when calling downloadUSDCWithdrawalsAsCSV.' + ) } - if (params.encodedDataMessage === null || params.encodedDataMessage === undefined) { - throw new runtime.RequiredError('encodedDataMessage','Required parameter params.encodedDataMessage was null or undefined when calling downloadUSDCWithdrawalsAsCSV.'); + if ( + params.encodedDataMessage === null || + params.encodedDataMessage === undefined + ) { + throw new runtime.RequiredError( + 'encodedDataMessage', + 'Required parameter params.encodedDataMessage was null or undefined when calling downloadUSDCWithdrawalsAsCSV.' + ) } - if (params.encodedDataSignature === null || params.encodedDataSignature === undefined) { - throw new runtime.RequiredError('encodedDataSignature','Required parameter params.encodedDataSignature was null or undefined when calling downloadUSDCWithdrawalsAsCSV.'); + if ( + params.encodedDataSignature === null || + params.encodedDataSignature === undefined + ) { + throw new runtime.RequiredError( + 'encodedDataSignature', + 'Required parameter params.encodedDataSignature was null or undefined when calling downloadUSDCWithdrawalsAsCSV.' + ) } - const queryParameters: any = {}; + const queryParameters: any = {} if (params.userId !== undefined) { - queryParameters['user_id'] = params.userId; + queryParameters.user_id = params.userId } - const headerParameters: runtime.HTTPHeaders = {}; + const headerParameters: runtime.HTTPHeaders = {} - if (params.encodedDataMessage !== undefined && params.encodedDataMessage !== null) { - headerParameters['Encoded-Data-Message'] = String(params.encodedDataMessage); + if ( + params.encodedDataMessage !== undefined && + params.encodedDataMessage !== null + ) { + headerParameters['Encoded-Data-Message'] = String( + params.encodedDataMessage + ) } - if (params.encodedDataSignature !== undefined && params.encodedDataSignature !== null) { - headerParameters['Encoded-Data-Signature'] = String(params.encodedDataSignature); + if ( + params.encodedDataSignature !== undefined && + params.encodedDataSignature !== null + ) { + headerParameters['Encoded-Data-Signature'] = String( + params.encodedDataSignature + ) } const host = await this.discoveryNodeSelectorService.getSelectedEndpoint() - const path = `/users/{id}/withdrawals/download`.replace(`{${"id"}}`, encodeURIComponent(String(params.id))) + const path = `/users/{id}/withdrawals/download`.replace( + `{${'id'}}`, + encodeURIComponent(String(params.id)) + ) const url = `${host}${BASE_PATH}${path}` - const response = await fetch(url, { method: 'GET', headers: headerParameters }) + const response = await fetch(url, { + method: 'GET', + headers: headerParameters + }) return response.blob() } } diff --git a/packages/libs/src/sdk/api/users/types.ts b/packages/libs/src/sdk/api/users/types.ts index c6c1bba7052..3fbc2b5aaa7 100644 --- a/packages/libs/src/sdk/api/users/types.ts +++ b/packages/libs/src/sdk/api/users/types.ts @@ -1,4 +1,5 @@ import { z } from 'zod' + import { ImageFile } from '../../types/File' import { HashId } from '../../types/HashId' diff --git a/packages/libs/src/sdk/index.ts b/packages/libs/src/sdk/index.ts index 430f7e47115..6a1a131bcb9 100644 --- a/packages/libs/src/sdk/index.ts +++ b/packages/libs/src/sdk/index.ts @@ -1,3 +1,4 @@ +/* eslint-disable import/export */ export { sdk } from './sdk' export type { AudiusSdk } from './sdk' export * as full from './api/generated/full' diff --git a/packages/libs/src/sdk/oauth/OAuth.ts b/packages/libs/src/sdk/oauth/OAuth.ts index 88fbd5ff6a7..d454770a685 100644 --- a/packages/libs/src/sdk/oauth/OAuth.ts +++ b/packages/libs/src/sdk/oauth/OAuth.ts @@ -2,6 +2,7 @@ import type { DecodedUserToken, UsersApi } from '../api/generated/default' import type { LoggerService } from '../services/Logger' import { isOAuthScopeValid } from '../utils/oauthScope' import { parseParams } from '../utils/parseParams' + import { OAuthScope, IsWriteAccessGrantedSchema, diff --git a/packages/libs/src/sdk/oauth/types.ts b/packages/libs/src/sdk/oauth/types.ts index 2ce9f673676..4a6e920717a 100644 --- a/packages/libs/src/sdk/oauth/types.ts +++ b/packages/libs/src/sdk/oauth/types.ts @@ -1,4 +1,5 @@ import { z } from 'zod' + import { isApiKeyValid } from '../utils/apiKey' export const IsWriteAccessGrantedSchema = z.object({ diff --git a/packages/libs/src/sdk/scripts/generateServicesConfig.ts b/packages/libs/src/sdk/scripts/generateServicesConfig.ts index b574963d4ed..31ec0685a55 100644 --- a/packages/libs/src/sdk/scripts/generateServicesConfig.ts +++ b/packages/libs/src/sdk/scripts/generateServicesConfig.ts @@ -1,8 +1,9 @@ -import { EthWeb3Manager } from '../../services/ethWeb3Manager' -import { EthContracts } from '../../services/ethContracts' -import { IdentityService } from '../../services/identity' import { promises } from 'fs' import path from 'path' + +import { EthContracts } from '../../services/ethContracts' +import { EthWeb3Manager } from '../../services/ethWeb3Manager' +import { IdentityService } from '../../services/identity' import type { ServicesConfig } from '../config/types' const { writeFile } = promises diff --git a/packages/libs/src/sdk/sdk.ts b/packages/libs/src/sdk/sdk.ts index 279efe921f5..4ea2522152f 100644 --- a/packages/libs/src/sdk/sdk.ts +++ b/packages/libs/src/sdk/sdk.ts @@ -1,13 +1,10 @@ import { isBrowser } from 'browser-or-node' -import { OAuth } from './oauth' -import { GrantsApi } from './api/grants/GrantsApi' -import { DeveloperAppsApi } from './api/developer-apps/DeveloperAppsApi' -import { AlbumsApi } from './api/albums/AlbumsApi' -import { PlaylistsApi } from './api/playlists/PlaylistsApi' -import { TracksApi } from './api/tracks/TracksApi' -import { UsersApi } from './api/users/UsersApi' +import fetch from 'cross-fetch' + import { ResolveApi } from './api/ResolveApi' +import { AlbumsApi } from './api/albums/AlbumsApi' import { ChatsApi } from './api/chats/ChatsApi' +import { DeveloperAppsApi } from './api/developer-apps/DeveloperAppsApi' import { Configuration, TipsApi } from './api/generated/default' import { Configuration as ConfigurationFull, @@ -19,8 +16,12 @@ import { TipsApi as TipsApiFull, TransactionsApi as TransactionsApiFull } from './api/generated/full' -import fetch from 'cross-fetch' +import { GrantsApi } from './api/grants/GrantsApi' +import { PlaylistsApi } from './api/playlists/PlaylistsApi' +import { TracksApi } from './api/tracks/TracksApi' +import { UsersApi } from './api/users/UsersApi' import { addAppNameMiddleware } from './middleware' +import { OAuth } from './oauth' import { DiscoveryNodeSelector, Auth, @@ -28,10 +29,10 @@ import { EntityManager, AppAuth } from './services' -import { StorageNodeSelector } from './services/StorageNodeSelector' import { defaultEntityManagerConfig } from './services/EntityManager/constants' -import { SdkConfig, SdkConfigSchema, ServicesContainer } from './types' import { Logger } from './services/Logger' +import { StorageNodeSelector } from './services/StorageNodeSelector' +import { SdkConfig, SdkConfigSchema, ServicesContainer } from './types' /** * The Audius SDK @@ -100,7 +101,7 @@ const initializeServices = (config: SdkConfig) => { const defaultStorage = new Storage({ storageNodeSelector, logger }) const defaultServices: ServicesContainer = { - storageNodeSelector: storageNodeSelector, + storageNodeSelector, discoveryNodeSelector: defaultDiscoveryNodeSelector, entityManager: defaultEntityManager, storage: defaultStorage, diff --git a/packages/libs/src/sdk/sdkBrowserDist.ts b/packages/libs/src/sdk/sdkBrowserDist.ts index 79e3dfac7db..74f820e4cc7 100644 --- a/packages/libs/src/sdk/sdkBrowserDist.ts +++ b/packages/libs/src/sdk/sdkBrowserDist.ts @@ -1,9 +1,9 @@ import { developmentConfig, productionConfig, stagingConfig } from './config' import { sdk } from './sdk' import { DiscoveryNodeSelector } from './services' -import { ParseRequestError } from './utils/parseParams' import { Genre } from './types/Genre' import { Mood } from './types/Mood' +import { ParseRequestError } from './utils/parseParams' ;(window as any).audiusSdk = sdk ;(window as any).audiusSdk.DiscoveryNodeSelector = DiscoveryNodeSelector ;(window as any).audiusSdk.config = { diff --git a/packages/libs/src/sdk/services/Auth/AppAuth.ts b/packages/libs/src/sdk/services/Auth/AppAuth.ts index db0583355a8..096ad331c2d 100644 --- a/packages/libs/src/sdk/services/Auth/AppAuth.ts +++ b/packages/libs/src/sdk/services/Auth/AppAuth.ts @@ -1,4 +1,5 @@ import { EIP712TypedData, MessageData, signTypedData } from 'eth-sig-util' + import type { AuthService } from './types' /** diff --git a/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.test.ts b/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.test.ts index 15c981c3a95..5d1a2ab96ee 100644 --- a/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.test.ts +++ b/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.test.ts @@ -1,12 +1,14 @@ -import { setupServer } from 'msw/node' +import fetch, { Response } from 'cross-fetch' import { rest } from 'msw' +import { setupServer } from 'msw/node' + +import type { FetchParams } from '../../api/generated/default' + import { DiscoveryNodeSelector } from './DiscoveryNodeSelector' import type { ApiHealthResponseData, HealthCheckResponseData } from './healthCheckTypes' -import fetch, { Response } from 'cross-fetch' -import type { FetchParams } from '../../api/generated/default' // jest.mock('./healthChecks', () => ({ // getHealthCheck: jest.fn(() => ({})) @@ -334,12 +336,12 @@ describe('discoveryNodeSelector', () => { const middleware = selector.createMiddleware() expect(middleware.pre).not.toBeUndefined() const result = await middleware.pre!({ - fetch: fetch, + fetch, url: '/v1/full/tracks', init: {} }) expect(result).not.toBeUndefined() - expect((result as FetchParams).url.startsWith(HEALTHY_NODE)) + expect((result as FetchParams).url.startsWith(HEALTHY_NODE)).toBe(true) }) test('reselects if request succeeds but node fell behind', async () => { @@ -367,12 +369,12 @@ describe('discoveryNodeSelector', () => { } } await middleware.post!({ - fetch: fetch, + fetch, url: `${BEHIND_BLOCKDIFF_NODE}/v1/full/tracks`, init: {}, response: new Response(JSON.stringify(data)) }) - expect(changeHandler).toBeCalledWith(HEALTHY_NODE) + expect(changeHandler).toHaveBeenCalledWith(HEALTHY_NODE) }) test("doesn't reselect if behind but was already behind", async () => { @@ -402,12 +404,12 @@ describe('discoveryNodeSelector', () => { } } await middleware.post!({ - fetch: fetch, + fetch, url: `${BEHIND_BLOCKDIFF_NODE}/v1/full/tracks`, init: {}, response: new Response(JSON.stringify(data)) }) - expect(changeHandler).not.toBeCalled() + expect(changeHandler).not.toHaveBeenCalled() }) test('reselects if request fails and node fell behind', async () => { @@ -444,13 +446,13 @@ describe('discoveryNodeSelector', () => { ) const actualResponse = await middleware.post!({ - fetch: fetch, + fetch, url: `${BEHIND_BLOCKDIFF_NODE}/v1/full/tracks`, init: {}, response: response as Response }) expect(actualResponse?.ok).toBe(true) - expect(changeHandler).toBeCalledWith(HEALTHY_NODE) + expect(changeHandler).toHaveBeenCalledWith(HEALTHY_NODE) }) test('reselects if request fails and node unhealthy', async () => { @@ -486,13 +488,13 @@ describe('discoveryNodeSelector', () => { ) const actualResponse = await middleware.post!({ - fetch: fetch, + fetch, url: `${UNHEALTHY_NODE}/v1/full/tracks`, init: {}, response: response as Response }) expect(actualResponse?.ok).toBe(true) - expect(changeHandler).toBeCalledWith(HEALTHY_NODE) + expect(changeHandler).toHaveBeenCalledWith(HEALTHY_NODE) }) test("doesn't reselect if request fails but node is healthy", async () => { @@ -518,12 +520,12 @@ describe('discoveryNodeSelector', () => { } await middleware.post!({ - fetch: fetch, + fetch, url: `${HEALTHY_NODE}/v1/full/tracks`, init: {}, response: response as Response }) - expect(changeHandler).not.toBeCalled() + expect(changeHandler).not.toHaveBeenCalled() }) test('resets isBehind when request shows the node is caught up', async () => { @@ -553,7 +555,7 @@ describe('discoveryNodeSelector', () => { } } await middleware.post!({ - fetch: fetch, + fetch, url: `${BEHIND_BLOCKDIFF_NODE}/v1/full/tracks`, init: {}, response: new Response(JSON.stringify(data)) diff --git a/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.ts b/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.ts index ae413d215a8..07074442a49 100644 --- a/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.ts +++ b/packages/libs/src/sdk/services/DiscoveryNodeSelector/DiscoveryNodeSelector.ts @@ -1,19 +1,27 @@ -import semver from 'semver' +import EventEmitter from 'events' + import sampleSize from 'lodash/sampleSize' -import { ApiHealthResponseData, HealthCheckStatus } from './healthCheckTypes' -import { - parseApiHealthStatusReason, - getDiscoveryNodeHealthCheck, - isFullFlaskResponse -} from './healthChecks' -import { promiseAny } from '../../utils/promiseAny' -import { defaultDiscoveryNodeSelectorConfig } from './constants' +import { AbortController as AbortControllerPolyfill } from 'node-abort-controller' +import semver from 'semver' +import type TypedEventEmitter from 'typed-emitter' + import type { ErrorContext, Middleware, RequestContext, ResponseContext } from '../../api/generated/default' +import { mergeConfigWithDefaults } from '../../utils/mergeConfigs' +import { promiseAny } from '../../utils/promiseAny' +import type { LoggerService } from '../Logger' + +import { defaultDiscoveryNodeSelectorConfig } from './constants' +import { ApiHealthResponseData, HealthCheckStatus } from './healthCheckTypes' +import { + parseApiHealthStatusReason, + getDiscoveryNodeHealthCheck, + isFullFlaskResponse +} from './healthChecks' import { BackupHealthData, Backup, @@ -24,11 +32,6 @@ import { DiscoveryNodeSelectorServiceConfigInternal, ServiceSelectionEvents } from './types' -import type TypedEventEmitter from 'typed-emitter' -import EventEmitter from 'events' -import { AbortController as AbortControllerPolyfill } from 'node-abort-controller' -import { mergeConfigWithDefaults } from '../../utils/mergeConfigs' -import type { LoggerService } from '../Logger' const getPathFromUrl = (url: string) => { const pathRegex = /^([a-z]+:\/\/)?(?:www\.)?([^/]+)?(.*)$/ diff --git a/packages/libs/src/sdk/services/DiscoveryNodeSelector/constants.ts b/packages/libs/src/sdk/services/DiscoveryNodeSelector/constants.ts index 14cb096e4ac..e894ce6b183 100644 --- a/packages/libs/src/sdk/services/DiscoveryNodeSelector/constants.ts +++ b/packages/libs/src/sdk/services/DiscoveryNodeSelector/constants.ts @@ -1,5 +1,6 @@ import { productionConfig } from '../../config' import { Logger } from '../Logger' + import type { DiscoveryNodeSelectorServiceConfigInternal } from './types' /** diff --git a/packages/libs/src/sdk/services/DiscoveryNodeSelector/healthChecks.test.ts b/packages/libs/src/sdk/services/DiscoveryNodeSelector/healthChecks.test.ts index 3a53e012cbf..107f8e400a0 100644 --- a/packages/libs/src/sdk/services/DiscoveryNodeSelector/healthChecks.test.ts +++ b/packages/libs/src/sdk/services/DiscoveryNodeSelector/healthChecks.test.ts @@ -1,9 +1,10 @@ +import { expect, describe, test } from '@jest/globals' + +import { HealthCheckStatus } from './healthCheckTypes' import { parseApiHealthStatusReason, parseHealthStatusReason } from './healthChecks' -import { HealthCheckStatus } from './healthCheckTypes' -import { expect, describe, test } from '@jest/globals' describe('health_check', () => { test('no data is unhealthy', () => { diff --git a/packages/libs/src/sdk/services/DiscoveryNodeSelector/healthChecks.ts b/packages/libs/src/sdk/services/DiscoveryNodeSelector/healthChecks.ts index 98b19687715..3c207e5f7ee 100644 --- a/packages/libs/src/sdk/services/DiscoveryNodeSelector/healthChecks.ts +++ b/packages/libs/src/sdk/services/DiscoveryNodeSelector/healthChecks.ts @@ -1,4 +1,9 @@ +import fetch from 'cross-fetch' import semver from 'semver' + +import type { CommsResponse } from '../../../legacy' + +import { DISCOVERY_SERVICE_NAME } from './constants' import { ApiHealthResponseData, FlaskFullResponse, @@ -8,9 +13,6 @@ import { HealthCheckStatusReason, HealthCheckThresholds } from './healthCheckTypes' -import { DISCOVERY_SERVICE_NAME } from './constants' -import fetch from 'cross-fetch' -import type { CommsResponse } from '../../../legacy' export const isFullFlaskResponse = ( data: ApiHealthResponseData diff --git a/packages/libs/src/sdk/services/DiscoveryNodeSelector/types.ts b/packages/libs/src/sdk/services/DiscoveryNodeSelector/types.ts index 3973f610a1d..961d6ac2b1c 100644 --- a/packages/libs/src/sdk/services/DiscoveryNodeSelector/types.ts +++ b/packages/libs/src/sdk/services/DiscoveryNodeSelector/types.ts @@ -1,7 +1,8 @@ import type { Middleware } from '../../api/generated/default' -import type { DeepPartial } from '../../utils/deepPartial' import type { EventEmitterTarget } from '../../utils/EventEmitterTarget' +import type { DeepPartial } from '../../utils/deepPartial' import type { LoggerService } from '../Logger' + import type { HealthCheckThresholds } from './healthCheckTypes' export type Decision = { diff --git a/packages/libs/src/sdk/services/EntityManager/EntityManager.test.ts b/packages/libs/src/sdk/services/EntityManager/EntityManager.test.ts index fdf4a0e7dd8..12eb534004b 100644 --- a/packages/libs/src/sdk/services/EntityManager/EntityManager.test.ts +++ b/packages/libs/src/sdk/services/EntityManager/EntityManager.test.ts @@ -1,15 +1,16 @@ +import type { EIP712TypedData } from 'eth-sig-util' import { rest } from 'msw' -import { DiscoveryNodeSelector } from '../DiscoveryNodeSelector' import { setupServer } from 'msw/node' -import type { AuthService } from '../Auth/types' -import type { EIP712TypedData } from 'eth-sig-util' -import { EntityManager } from './EntityManager' import { developmentConfig } from '../../config' -import { Action, EntityType } from './types' import Web3 from '../../utils/web3' +import type { AuthService } from '../Auth/types' +import { DiscoveryNodeSelector } from '../DiscoveryNodeSelector' import { Logger } from '../Logger' +import { EntityManager } from './EntityManager' +import { Action, EntityType } from './types' + const userWallet = '0xc0ffee254729296a45a3885639AC7E10F9d54979' const discoveryNode = 'https://discovery-provider.audius.co' diff --git a/packages/libs/src/sdk/services/EntityManager/EntityManager.ts b/packages/libs/src/sdk/services/EntityManager/EntityManager.ts index d8e851b5192..4bfad64e41b 100644 --- a/packages/libs/src/sdk/services/EntityManager/EntityManager.ts +++ b/packages/libs/src/sdk/services/EntityManager/EntityManager.ts @@ -1,15 +1,16 @@ -import type { TransactionReceipt } from 'web3-core' -import Web3 from '../../utils/web3' +import fetch, { Headers } from 'cross-fetch' import type Web3Type from 'web3' +import type { TransactionReceipt } from 'web3-core' +import type { Contract } from 'web3-eth-contract' import type { AbiItem } from 'web3-utils' -import fetch, { Headers } from 'cross-fetch' -// TODO: move into sdk? -import * as signatureSchemas from '../../../data-contracts/signatureSchemas' import { abi as EntityManagerABI } from '../../../data-contracts/ABIs/EntityManager.json' - +import * as signatureSchemas from '../../../data-contracts/signatureSchemas' import { mergeConfigWithDefaults } from '../../utils/mergeConfigs' -import type { Contract } from 'web3-eth-contract' +import Web3 from '../../utils/web3' +import type { DiscoveryNodeSelectorService } from '../DiscoveryNodeSelector' +import type { LoggerService } from '../Logger' + import { CONFIRMATION_POLLING_INTERVAL, CONFIRMATION_TIMEOUT, @@ -23,8 +24,6 @@ import { EntityManagerService, ManageEntityOptions } from './types' -import type { LoggerService } from '../Logger' -import type { DiscoveryNodeSelectorService } from '../DiscoveryNodeSelector' export class EntityManager implements EntityManagerService { /** diff --git a/packages/libs/src/sdk/services/EntityManager/constants.ts b/packages/libs/src/sdk/services/EntityManager/constants.ts index 2e079675c41..71bd7ce9749 100644 --- a/packages/libs/src/sdk/services/EntityManager/constants.ts +++ b/packages/libs/src/sdk/services/EntityManager/constants.ts @@ -1,7 +1,8 @@ -import type { EntityManagerConfigInternal } from './types' import { productionConfig } from '../../config' import { Logger } from '../Logger' +import type { EntityManagerConfigInternal } from './types' + export const defaultEntityManagerConfig: EntityManagerConfigInternal = { contractAddress: productionConfig.entityManagerContractAddress, web3ProviderUrl: productionConfig.web3ProviderUrl, diff --git a/packages/libs/src/sdk/services/EntityManager/types.ts b/packages/libs/src/sdk/services/EntityManager/types.ts index dbc40ea753d..56f6a3a852d 100644 --- a/packages/libs/src/sdk/services/EntityManager/types.ts +++ b/packages/libs/src/sdk/services/EntityManager/types.ts @@ -1,5 +1,6 @@ -import type { AuthService } from '../Auth' import type { TransactionReceipt } from 'web3-core' + +import type { AuthService } from '../Auth' import type { DiscoveryNodeSelectorService } from '../DiscoveryNodeSelector' import type { LoggerService } from '../Logger' diff --git a/packages/libs/src/sdk/services/Storage/Storage.ts b/packages/libs/src/sdk/services/Storage/Storage.ts index 298e1d5197a..4c308d5a675 100644 --- a/packages/libs/src/sdk/services/Storage/Storage.ts +++ b/packages/libs/src/sdk/services/Storage/Storage.ts @@ -1,8 +1,22 @@ -import FormData from 'form-data' import axios from 'axios' - import fetch from 'cross-fetch' +import FormData from 'form-data' + +import { isNodeFile } from '../../types/File' +import type { CrossPlatformFile as File } from '../../types/File' +import { mergeConfigWithDefaults } from '../../utils/mergeConfigs' import { wait } from '../../utils/wait' +import type { AuthService } from '../Auth' +import { sortObjectKeys } from '../Auth/utils' +import type { LoggerService } from '../Logger' +import type { StorageNodeSelectorService } from '../StorageNodeSelector' + +import { + defaultStorageServiceConfig, + MAX_IMAGE_RESIZE_TIMEOUT_MS, + MAX_TRACK_TRANSCODE_TIMEOUT, + POLL_STATUS_INTERVAL +} from './constants' import type { FileTemplate, ProgressCB, @@ -11,19 +25,6 @@ import type { StorageServiceConfigInternal, UploadResponse } from './types' -import { mergeConfigWithDefaults } from '../../utils/mergeConfigs' -import { - defaultStorageServiceConfig, - MAX_IMAGE_RESIZE_TIMEOUT_MS, - MAX_TRACK_TRANSCODE_TIMEOUT, - POLL_STATUS_INTERVAL -} from './constants' -import type { StorageNodeSelectorService } from '../StorageNodeSelector' -import { sortObjectKeys } from '../Auth/utils' -import type { AuthService } from '../Auth' -import { isNodeFile } from '../../types/File' -import type { CrossPlatformFile as File } from '../../types/File' -import type { LoggerService } from '../Logger' export class Storage implements StorageService { /** @@ -78,7 +79,7 @@ export class Storage implements StorageService { method: 'post', url: `${contentNodeEndpoint}/uploads/${uploadId}`, maxContentLength: Infinity, - data: data, + data, params: { signature: JSON.stringify(signatureEnvelope) } }) diff --git a/packages/libs/src/sdk/services/Storage/constants.ts b/packages/libs/src/sdk/services/Storage/constants.ts index 3be57b8b77a..d584ecb34cc 100644 --- a/packages/libs/src/sdk/services/Storage/constants.ts +++ b/packages/libs/src/sdk/services/Storage/constants.ts @@ -1,4 +1,5 @@ import { Logger } from '../Logger' + import type { StorageServiceConfigInternal } from './types' export const defaultStorageServiceConfig: StorageServiceConfigInternal = { diff --git a/packages/libs/src/sdk/services/Storage/types.ts b/packages/libs/src/sdk/services/Storage/types.ts index d1417b8062c..50edbc666aa 100644 --- a/packages/libs/src/sdk/services/Storage/types.ts +++ b/packages/libs/src/sdk/services/Storage/types.ts @@ -1,7 +1,7 @@ import type { CrossPlatformFile as File } from '../../types/File' -import type { StorageNodeSelectorService } from '../StorageNodeSelector' import type { AuthService } from '../Auth' import type { LoggerService } from '../Logger' +import type { StorageNodeSelectorService } from '../StorageNodeSelector' export type StorageServiceConfigInternal = { /** diff --git a/packages/libs/src/sdk/services/StorageNodeSelector/StorageNodeSelector.test.ts b/packages/libs/src/sdk/services/StorageNodeSelector/StorageNodeSelector.test.ts index af8637e7776..f84200985d3 100644 --- a/packages/libs/src/sdk/services/StorageNodeSelector/StorageNodeSelector.test.ts +++ b/packages/libs/src/sdk/services/StorageNodeSelector/StorageNodeSelector.test.ts @@ -1,14 +1,15 @@ -import waitForExpect from 'wait-for-expect' +import type { EIP712TypedData } from 'eth-sig-util' import { rest } from 'msw' -import { DiscoveryNodeSelector } from '../DiscoveryNodeSelector' -import { StorageNodeSelector } from './StorageNodeSelector' -import type { HealthCheckResponseData } from '../DiscoveryNodeSelector/healthCheckTypes' import { setupServer } from 'msw/node' +import waitForExpect from 'wait-for-expect' import type { AuthService } from '../Auth/types' -import type { EIP712TypedData } from 'eth-sig-util' +import { DiscoveryNodeSelector } from '../DiscoveryNodeSelector' +import type { HealthCheckResponseData } from '../DiscoveryNodeSelector/healthCheckTypes' import { Logger } from '../Logger' +import { StorageNodeSelector } from './StorageNodeSelector' + const storageNodeA = { endpoint: 'https://node-a.audius.co', delegateOwnerWallet: '0xc0ffee254729296a45a3885639AC7E10F9d54971' diff --git a/packages/libs/src/sdk/services/StorageNodeSelector/StorageNodeSelector.ts b/packages/libs/src/sdk/services/StorageNodeSelector/StorageNodeSelector.ts index c6e6d1134cc..ea321fa96d4 100644 --- a/packages/libs/src/sdk/services/StorageNodeSelector/StorageNodeSelector.ts +++ b/packages/libs/src/sdk/services/StorageNodeSelector/StorageNodeSelector.ts @@ -1,19 +1,21 @@ -import type { Maybe } from '../../../utils/types' +import fetch from 'cross-fetch' + import { isNodeHealthy } from '../../../utils/getNStorageNodes' import RendezvousHash from '../../../utils/rendezvous' -import fetch from 'cross-fetch' +import type { Maybe } from '../../../utils/types' +import { mergeConfigWithDefaults } from '../../utils/mergeConfigs' +import type { AuthService } from '../Auth' import type { DiscoveryNodeSelectorService } from '../DiscoveryNodeSelector' import type { HealthCheckResponseData } from '../DiscoveryNodeSelector/healthCheckTypes' -import type { AuthService } from '../Auth' +import type { LoggerService } from '../Logger' + +import { defaultStorageNodeSelectorConfig } from './constants' import type { StorageNode, StorageNodeSelectorConfig, StorageNodeSelectorConfigInternal, StorageNodeSelectorService } from './types' -import { mergeConfigWithDefaults } from '../../utils/mergeConfigs' -import { defaultStorageNodeSelectorConfig } from './constants' -import type { LoggerService } from '../Logger' const DISCOVERY_RESPONSE_TIMEOUT = 15000 diff --git a/packages/libs/src/sdk/services/StorageNodeSelector/constants.ts b/packages/libs/src/sdk/services/StorageNodeSelector/constants.ts index e0e923bafe4..f14f0ea1943 100644 --- a/packages/libs/src/sdk/services/StorageNodeSelector/constants.ts +++ b/packages/libs/src/sdk/services/StorageNodeSelector/constants.ts @@ -1,5 +1,6 @@ import { productionConfig } from '../../config' import { Logger } from '../Logger' + import type { StorageNodeSelectorConfigInternal } from './types' export const defaultStorageNodeSelectorConfig: StorageNodeSelectorConfigInternal = diff --git a/packages/libs/src/sdk/types.ts b/packages/libs/src/sdk/types.ts index 57a770b2747..f7c21870f6c 100644 --- a/packages/libs/src/sdk/types.ts +++ b/packages/libs/src/sdk/types.ts @@ -3,9 +3,9 @@ import { z } from 'zod' import type { AuthService } from './services/Auth' import type { DiscoveryNodeSelectorService } from './services/DiscoveryNodeSelector' import type { EntityManagerService } from './services/EntityManager' +import type { LoggerService } from './services/Logger' import type { StorageService } from './services/Storage' import type { StorageNodeSelectorService } from './services/StorageNodeSelector' -import type { LoggerService } from './services/Logger' export type ServicesContainer = { /** diff --git a/packages/libs/src/sdk/types/File.ts b/packages/libs/src/sdk/types/File.ts index 5a75c854c00..ad794da0590 100644 --- a/packages/libs/src/sdk/types/File.ts +++ b/packages/libs/src/sdk/types/File.ts @@ -1,5 +1,5 @@ -import { z } from 'zod' import * as fileType from 'file-type' +import { z } from 'zod' let fileTypeBrowser: any if (typeof window !== 'undefined' && window) { diff --git a/packages/libs/src/sdk/types/HashId.ts b/packages/libs/src/sdk/types/HashId.ts index 80d67c38755..fa8e03bfe14 100644 --- a/packages/libs/src/sdk/types/HashId.ts +++ b/packages/libs/src/sdk/types/HashId.ts @@ -1,4 +1,5 @@ import { z } from 'zod' + import { decodeHashId } from '../utils/hashId' export const HashId = z.string().transform((data: string, context) => { diff --git a/packages/libs/src/sdk/utils/mergeConfigs.test.ts b/packages/libs/src/sdk/utils/mergeConfigs.test.ts index 39dc8a34b87..1097926f216 100644 --- a/packages/libs/src/sdk/utils/mergeConfigs.test.ts +++ b/packages/libs/src/sdk/utils/mergeConfigs.test.ts @@ -1,6 +1,7 @@ -import { mergeConfigWithDefaults } from './mergeConfigs' import { expect, describe, test } from '@jest/globals' +import { mergeConfigWithDefaults } from './mergeConfigs' + describe('merge configs', () => { test("doesn't merge arrays", () => { expect( diff --git a/packages/libs/src/sdk/utils/parseParams.ts b/packages/libs/src/sdk/utils/parseParams.ts index 66d56bfd8f2..2cdc372db2f 100644 --- a/packages/libs/src/sdk/utils/parseParams.ts +++ b/packages/libs/src/sdk/utils/parseParams.ts @@ -1,7 +1,7 @@ import type { ZodError, z } from 'zod' export class ParseRequestError extends Error { - override name: 'ParseRequestError' = 'ParseRequestError' + override name = 'ParseRequestError' as const constructor(public method: string, public innerError: ZodError) { super(`'${method}' => ${innerError.message}`) } diff --git a/packages/libs/src/sdk/utils/web3.ts b/packages/libs/src/sdk/utils/web3.ts index b457895d820..851914bc518 100644 --- a/packages/libs/src/sdk/utils/web3.ts +++ b/packages/libs/src/sdk/utils/web3.ts @@ -1,5 +1,5 @@ -import type Web3Type from 'web3' import type BN from 'bn.js' +import type Web3Type from 'web3' declare global { interface Window { diff --git a/packages/libs/src/service-selection/ServiceSelection.test.ts b/packages/libs/src/service-selection/ServiceSelection.test.ts index 6ae02601616..6cc53eb9f3d 100644 --- a/packages/libs/src/service-selection/ServiceSelection.test.ts +++ b/packages/libs/src/service-selection/ServiceSelection.test.ts @@ -1,8 +1,11 @@ -import { ServiceSelection } from './ServiceSelection' -import nock from 'nock' import assert from 'assert' -import { Utils } from '../utils' + import type { AxiosResponse } from 'axios' +import nock from 'nock' + +import { Utils } from '../utils' + +import { ServiceSelection } from './ServiceSelection' describe('ServiceSelection', () => { it('prefers a healthy service', async () => { diff --git a/packages/libs/src/service-selection/ServiceSelection.ts b/packages/libs/src/service-selection/ServiceSelection.ts index b136398e776..5224f4c65af 100644 --- a/packages/libs/src/service-selection/ServiceSelection.ts +++ b/packages/libs/src/service-selection/ServiceSelection.ts @@ -1,4 +1,6 @@ +import type { AxiosResponse } from 'axios' import { sampleSize } from 'lodash' + import { raceRequests, allRequests, @@ -7,8 +9,8 @@ import { Service, Maybe } from '../utils' + import { DECISION_TREE_STATE } from './constants' -import type { AxiosResponse } from 'axios' function isVerbose(service: Service): service is ServiceWithEndpoint { return typeof service !== 'string' diff --git a/packages/libs/src/services/ABIDecoder/AudiusABIDecoder.ts b/packages/libs/src/services/ABIDecoder/AudiusABIDecoder.ts index 46a4fb6212f..c5bd0402237 100644 --- a/packages/libs/src/services/ABIDecoder/AudiusABIDecoder.ts +++ b/packages/libs/src/services/ABIDecoder/AudiusABIDecoder.ts @@ -1,11 +1,11 @@ import abiDecoder from 'abi-decoder' -import type { AbiItem, AbiInput } from 'web3-utils' -import type { Log } from 'web3-core' import sigUtil from 'eth-sig-util' +import type { Log } from 'web3-core' +import type { AbiItem, AbiInput } from 'web3-utils' -import RegistryABI from '../../data-contracts/ABIs/Registry.json' import DiscoverProviderFactoryABI from '../../data-contracts/ABIs/DiscoveryProviderFactory.json' import EntityManagerABI from '../../data-contracts/ABIs/EntityManager.json' +import RegistryABI from '../../data-contracts/ABIs/Registry.json' import { generators } from '../../data-contracts/signatureSchemas' const abiMap: Record = {} diff --git a/packages/libs/src/services/contracts/ContractClient.ts b/packages/libs/src/services/contracts/ContractClient.ts index 8a15ef4a931..d07770258ea 100644 --- a/packages/libs/src/services/contracts/ContractClient.ts +++ b/packages/libs/src/services/contracts/ContractClient.ts @@ -1,10 +1,12 @@ -import { ProviderSelection } from './ProviderSelection' -import { Web3Manager } from '../web3Manager' import retry from 'async-retry' -import type { ContractABI, Nullable, Logger } from '../../utils' -import type { Contract } from 'web3-eth-contract' import type { HttpProvider } from 'web3-core' +import type { Contract } from 'web3-eth-contract' + +import type { ContractABI, Nullable, Logger } from '../../utils' import type { EthWeb3Manager } from '../ethWeb3Manager' +import { Web3Manager } from '../web3Manager' + +import { ProviderSelection } from './ProviderSelection' const CONTRACT_INITIALIZING_INTERVAL = 100 const CONTRACT_INITIALIZING_TIMEOUT = 10000 diff --git a/packages/libs/src/services/contracts/GovernedContractClient.ts b/packages/libs/src/services/contracts/GovernedContractClient.ts index 9ec57c7d75e..ef5da941425 100644 --- a/packages/libs/src/services/contracts/GovernedContractClient.ts +++ b/packages/libs/src/services/contracts/GovernedContractClient.ts @@ -2,8 +2,8 @@ import type { ContractABI, Logger } from '../../utils' import type { GovernanceClient } from '../ethContracts/GovernanceClient' import type { EthWeb3Manager } from '../ethWeb3Manager' import type { Web3Manager } from '../web3Manager' -import type { GetRegistryAddress } from './ContractClient' +import type { GetRegistryAddress } from './ContractClient' import { ContractClient } from './ContractClient' /** diff --git a/packages/libs/src/services/contracts/ProviderSelection.ts b/packages/libs/src/services/contracts/ProviderSelection.ts index 044cbabd2e6..3df2fb29014 100644 --- a/packages/libs/src/services/contracts/ProviderSelection.ts +++ b/packages/libs/src/services/contracts/ProviderSelection.ts @@ -1,4 +1,5 @@ import Web3 from 'web3' + import { ServiceSelection } from '../../service-selection' import type { EthWeb3Manager } from '../ethWeb3Manager' import type { Web3Manager } from '../web3Manager' diff --git a/packages/libs/src/services/creatorNode/CreatorNode.ts b/packages/libs/src/services/creatorNode/CreatorNode.ts index 4c2c5d9eb02..28ebd54faf0 100644 --- a/packages/libs/src/services/creatorNode/CreatorNode.ts +++ b/packages/libs/src/services/creatorNode/CreatorNode.ts @@ -1,18 +1,19 @@ +import retry from 'async-retry' import axios, { AxiosRequestConfig } from 'axios' import FormData from 'form-data' -import retry from 'async-retry' + +import type { StorageNodeSelectorService } from '../../sdk' +import type { UserStateManager } from '../../userStateManager' import { Nullable, TrackMetadata, UserMetadata, Utils, uuid } from '../../utils' +import { hashAndSign, sortObjectKeys } from '../../utils/apiSigning' import { userSchemaType, trackSchemaType, playlistSchemaType, Schemas } from '../schemaValidator/SchemaValidator' -import type { Web3Manager } from '../web3Manager' -import type { UserStateManager } from '../../userStateManager' import type { MonitoringCallbacks } from '../types' -import type { StorageNodeSelectorService } from '../../sdk' -import { hashAndSign, sortObjectKeys } from '../../utils/apiSigning' +import type { Web3Manager } from '../web3Manager' const { wait } = Utils @@ -163,7 +164,7 @@ export class CreatorNode { const resp = await this._retry3( async () => await this.editFileV2(metadata.audio_upload_id!, data), (e) => { - console.log('Retrying editFileV2', e) + console.info('Retrying editFileV2', e) } ) @@ -183,7 +184,7 @@ export class CreatorNode { const updatedMetadata = { ...metadata } const audioUploadOpts: { [key: string]: string } = {} if (updatedMetadata.preview_start_seconds != null) { - audioUploadOpts['previewStartSeconds'] = + audioUploadOpts.previewStartSeconds = updatedMetadata.preview_start_seconds.toString() } @@ -193,7 +194,7 @@ export class CreatorNode { async () => await this.uploadTrackAudioV2(trackFile, onProgress, audioUploadOpts), (e) => { - console.log('Retrying uploadTrackAudioV2', e) + console.info('Retrying uploadTrackAudioV2', e) } ) ] @@ -203,7 +204,7 @@ export class CreatorNode { async () => await this.uploadTrackCoverArtV2(coverArtFile, onProgress), (e) => { - console.log('Retrying uploadTrackCoverArtV2', e) + console.info('Retrying uploadTrackCoverArtV2', e) } ) ) @@ -277,7 +278,7 @@ export class CreatorNode { const response = await this._makeRequestV2({ method: 'post', url: `/uploads/${uploadId}`, - data: data, + data, params: { signature: JSON.stringify(signatureEnvelope) }, headers }) diff --git a/packages/libs/src/services/dataContracts/AudiusContracts.ts b/packages/libs/src/services/dataContracts/AudiusContracts.ts index ee79e1d1470..2413a2addfd 100644 --- a/packages/libs/src/services/dataContracts/AudiusContracts.ts +++ b/packages/libs/src/services/dataContracts/AudiusContracts.ts @@ -1,14 +1,14 @@ import type { AbiItem } from 'web3-utils' -import type { Logger } from '../../utils' -// load classes wrapping contracts -import { EntityManagerClient } from './EntityManagerClient' -import type { Web3Manager } from '../web3Manager' +import { abi as EntityManagerABI } from '../../data-contracts/ABIs/EntityManager.json' +import type { Logger } from '../../utils' import type { ContractClient, GetRegistryAddress } from '../contracts/ContractClient' -import { abi as EntityManagerABI } from '../../data-contracts/ABIs/EntityManager.json' +import type { Web3Manager } from '../web3Manager' + +import { EntityManagerClient } from './EntityManagerClient' export class AudiusContracts { web3Manager: Web3Manager diff --git a/packages/libs/src/services/dataContracts/EntityManagerClient.ts b/packages/libs/src/services/dataContracts/EntityManagerClient.ts index f04eeede6aa..f71a896c26e 100644 --- a/packages/libs/src/services/dataContracts/EntityManagerClient.ts +++ b/packages/libs/src/services/dataContracts/EntityManagerClient.ts @@ -1,11 +1,11 @@ -import type { TransactionReceipt } from 'web3-core' import sigUtil from 'eth-sig-util' import { Buffer as SafeBuffer } from 'safe-buffer' +import type { TransactionReceipt } from 'web3-core' -import { ContractClient } from '../contracts/ContractClient' import * as signatureSchemas from '../../data-contracts/signatureSchemas' -import type { Web3Manager } from '../web3Manager' import type { TrackMetadata, UserMetadata } from '../../utils' +import { ContractClient } from '../contracts/ContractClient' +import type { Web3Manager } from '../web3Manager' export enum Action { CREATE = 'Create', diff --git a/packages/libs/src/services/discoveryProvider/DiscoveryProvider.ts b/packages/libs/src/services/discoveryProvider/DiscoveryProvider.ts index 3838adff422..1dfe4fb5ec8 100644 --- a/packages/libs/src/services/discoveryProvider/DiscoveryProvider.ts +++ b/packages/libs/src/services/discoveryProvider/DiscoveryProvider.ts @@ -5,24 +5,22 @@ import axios, { Method, ResponseType } from 'axios' +import fetch from 'cross-fetch' +import urlJoin, { PathArg } from 'proper-url-join' +import type { TransactionReceipt } from 'web3-core' +import { DiscoveryNodeSelector, FetchError, Middleware } from '../../sdk' +import type { CurrentUser, UserStateManager } from '../../userStateManager' import { CollectionMetadata, Nullable, User, Utils } from '../../utils' +import type { EthContracts } from '../ethContracts' +import type { Web3Manager } from '../web3Manager' -import { DEFAULT_UNHEALTHY_BLOCK_DIFF, REQUEST_TIMEOUT_MS } from './constants' - -import * as Requests from './requests' - -import urlJoin, { PathArg } from 'proper-url-join' import { DiscoveryProviderSelection, DiscoveryProviderSelectionConfig } from './DiscoveryProviderSelection' -import type { CurrentUser, UserStateManager } from '../../userStateManager' -import type { EthContracts } from '../ethContracts' -import type { Web3Manager } from '../web3Manager' -import { DiscoveryNodeSelector, FetchError, Middleware } from '../../sdk' -import fetch from 'cross-fetch' -import type { TransactionReceipt } from 'web3-core' +import { DEFAULT_UNHEALTHY_BLOCK_DIFF, REQUEST_TIMEOUT_MS } from './constants' +import * as Requests from './requests' const MAX_MAKE_REQUEST_RETRY_COUNT = 5 const MAX_MAKE_REQUEST_RETRIES_WITH_404 = 2 @@ -95,14 +93,14 @@ type DiscoveryNodeChallenge = { } export type DiscoveryRelayBody = { - contractRegistryKey?: string | null; - contractAddress?: string | null; - senderAddress?: string | null; - encodedABI?: string | null; - gasLimit?: number | null; - handle?: string | null; - nethermindContractAddress?: string | null; - nethermindEncodedAbi?: string | null; + contractRegistryKey?: string | null + contractAddress?: string | null + senderAddress?: string | null + encodedABI?: string | null + gasLimit?: number | null + handle?: string | null + nethermindContractAddress?: string | null + nethermindEncodedAbi?: string | null } /** @@ -176,8 +174,8 @@ export class DiscoveryProvider { selectionCallback, monitoringCallbacks, requestTimeout: selectionRequestTimeout, - unhealthySlotDiffPlays: unhealthySlotDiffPlays, - localStorage: localStorage, + unhealthySlotDiffPlays, + localStorage, unhealthyBlockDiff: this.unhealthyBlockDiff }, this.ethContracts @@ -1080,7 +1078,9 @@ export class DiscoveryProvider { ) } - async relay(data: DiscoveryRelayBody): Promise<{ receipt: TransactionReceipt } | null | undefined> { + async relay( + data: DiscoveryRelayBody + ): Promise<{ receipt: TransactionReceipt } | null | undefined> { const req = { endpoint: 'relay', method: 'post', @@ -1170,6 +1170,7 @@ export class DiscoveryProvider { } if (resp && resp.status === 404) { // We have 404'd. Throw that error message back out + // eslint-disable-next-line no-throw-literal throw { ...errData, status: '404' } } @@ -1589,7 +1590,7 @@ export class DiscoveryProvider { const timeout = requestObj.timeout ?? this.selectionRequestTimeout let axiosRequest: AxiosRequestConfig = { url: requestUrl, - headers: headers, + headers, method: requestObj.method ?? 'get', responseType: requestObj.responseType ?? 'json', timeout diff --git a/packages/libs/src/services/discoveryProvider/DiscoveryProviderSelection.test.ts b/packages/libs/src/services/discoveryProvider/DiscoveryProviderSelection.test.ts index 435f2caf9df..325df966ef0 100644 --- a/packages/libs/src/services/discoveryProvider/DiscoveryProviderSelection.test.ts +++ b/packages/libs/src/services/discoveryProvider/DiscoveryProviderSelection.test.ts @@ -1,9 +1,12 @@ -import nock from 'nock' import assert from 'assert' + +import nock from 'nock' +import { LocalStorage } from 'node-localstorage' + +import type { EthContracts } from '../ethContracts' + import { DiscoveryProviderSelection } from './DiscoveryProviderSelection' import { DISCOVERY_PROVIDER_TIMESTAMP } from './constants' -import type { EthContracts } from '../ethContracts' -import { LocalStorage } from 'node-localstorage' const mockEthContracts = ( urls: string[], diff --git a/packages/libs/src/services/discoveryProvider/DiscoveryProviderSelection.ts b/packages/libs/src/services/discoveryProvider/DiscoveryProviderSelection.ts index 33078bcca90..23dc1256e60 100644 --- a/packages/libs/src/services/discoveryProvider/DiscoveryProviderSelection.ts +++ b/packages/libs/src/services/discoveryProvider/DiscoveryProviderSelection.ts @@ -1,9 +1,17 @@ +import type { AxiosResponse } from 'axios' +import semver from 'semver' + import { Backup, Decision, ServiceSelection, ServiceSelectionConfig } from '../../service-selection' +import type { Maybe, Nullable } from '../../utils' +import type { LocalStorage } from '../../utils/localStorage' +import { EthContracts, isVersionAtLeastSameMajorMinor } from '../ethContracts' +import type { MonitoringCallbacks } from '../types' + import { DISCOVERY_PROVIDER_TIMESTAMP, DISCOVERY_SERVICE_NAME, @@ -11,12 +19,6 @@ import { DISCOVERY_PROVIDER_RESELECT_TIMEOUT, REGRESSED_MODE_TIMEOUT } from './constants' -import semver from 'semver' -import { EthContracts, isVersionAtLeastSameMajorMinor } from '../ethContracts' -import type { AxiosResponse } from 'axios' -import type { Maybe, Nullable } from '../../utils' -import type { LocalStorage } from '../../utils/localStorage' -import type { MonitoringCallbacks } from '../types' const PREVIOUS_VERSIONS_TO_CHECK = 5 diff --git a/packages/libs/src/services/discoveryProvider/requests.ts b/packages/libs/src/services/discoveryProvider/requests.ts index e0ac90bd57a..8faf0adf8a5 100644 --- a/packages/libs/src/services/discoveryProvider/requests.ts +++ b/packages/libs/src/services/discoveryProvider/requests.ts @@ -1,8 +1,9 @@ /* eslint-disable @typescript-eslint/restrict-plus-operands */ -import type { Nullable } from '../../utils' import type { ResponseType } from 'axios' +import type { Nullable } from '../../utils' + export const getUsers = ( limit = 100, offset = 0, @@ -22,7 +23,7 @@ export const getUsers = ( include_incomplete?: boolean } - const queryParams: QueryParams = { limit: limit, offset: offset } + const queryParams: QueryParams = { limit, offset } if (handle) { queryParams.handle = handle } @@ -68,7 +69,7 @@ export const getTracks = ( with_users?: boolean } - const queryParams: QueryParams = { limit: limit, offset: offset } + const queryParams: QueryParams = { limit, offset } if (idsArray) { if (!Array.isArray(idsArray)) { @@ -315,7 +316,7 @@ export const getTrackRepostIntersectionUsers = ( endpoint: 'users', urlParams: '/intersection/repost/track/' + repostTrackId + '/' + followerUserId, - queryParams: { limit: limit, offset: offset } + queryParams: { limit, offset } } } @@ -332,7 +333,7 @@ export const getPlaylistRepostIntersectionUsers = ( repostPlaylistId + '/' + followerUserId, - queryParams: { limit: limit, offset: offset } + queryParams: { limit, offset } } } @@ -344,7 +345,7 @@ export const getFollowersForUser = ( return { endpoint: 'users', urlParams: '/followers/' + followeeUserId, - queryParams: { limit: limit, offset: offset } + queryParams: { limit, offset } } } @@ -356,7 +357,7 @@ export const getFolloweesForUser = ( return { endpoint: 'users', urlParams: '/followees/' + followerUserId, - queryParams: { limit: limit, offset: offset } + queryParams: { limit, offset } } } @@ -368,7 +369,7 @@ export const getRepostersForTrack = ( return { endpoint: 'users', urlParams: '/reposts/track/' + repostTrackId, - queryParams: { limit: limit, offset: offset } + queryParams: { limit, offset } } } @@ -380,7 +381,7 @@ export const getRepostersForPlaylist = ( return { endpoint: 'users', urlParams: '/reposts/playlist/' + repostPlaylistId, - queryParams: { limit: limit, offset: offset } + queryParams: { limit, offset } } } @@ -392,7 +393,7 @@ export const getSaversForTrack = ( return { endpoint: 'users', urlParams: '/saves/track/' + saveTrackId, - queryParams: { limit: limit, offset: offset } + queryParams: { limit, offset } } } @@ -404,7 +405,7 @@ export const getSaversForPlaylist = ( return { endpoint: 'users', urlParams: '/saves/playlist/' + savePlaylistId, - queryParams: { limit: limit, offset: offset } + queryParams: { limit, offset } } } @@ -423,7 +424,7 @@ export const searchFull = ( export const searchAutocomplete = (text: string, limit = 100, offset = 0) => { return { endpoint: 'search/autocomplete', - queryParams: { query: text, limit: limit, offset: offset } + queryParams: { query: text, limit, offset } } } @@ -453,21 +454,21 @@ export const getSavedPlaylists = ( ) => { return { endpoint: 'saves/playlists', - queryParams: { limit: limit, offset: offset, with_users: withUsers } + queryParams: { limit, offset, with_users: withUsers } } } export const getSavedAlbums = (limit = 100, offset = 0, withUsers = false) => { return { endpoint: 'saves/albums', - queryParams: { limit: limit, offset: offset, with_users: withUsers } + queryParams: { limit, offset, with_users: withUsers } } } export const getSavedTracks = (limit = 100, offset = 0, withUsers = false) => { return { endpoint: 'saves/tracks', - queryParams: { limit: limit, offset: offset, with_users: withUsers } + queryParams: { limit, offset, with_users: withUsers } } } @@ -787,7 +788,7 @@ export const verifyToken = (token: string) => { return { endpoint: '/v1/users/verify_token', queryParams: { - token: token + token } } } diff --git a/packages/libs/src/services/ethContracts/AudiusTokenClient.ts b/packages/libs/src/services/ethContracts/AudiusTokenClient.ts index 877e91ed6bc..44f25c574be 100644 --- a/packages/libs/src/services/ethContracts/AudiusTokenClient.ts +++ b/packages/libs/src/services/ethContracts/AudiusTokenClient.ts @@ -1,8 +1,9 @@ +import type BN from 'bn.js' import type Web3 from 'web3' -import type { EthWeb3Manager } from '../ethWeb3Manager' import type { Contract } from 'web3-eth-contract' import type { AbiItem } from 'web3-utils' -import type BN from 'bn.js' + +import type { EthWeb3Manager } from '../ethWeb3Manager' export class AudiusTokenClient { ethWeb3Manager: EthWeb3Manager diff --git a/packages/libs/src/services/ethContracts/ClaimDistributionClient.ts b/packages/libs/src/services/ethContracts/ClaimDistributionClient.ts index a92b6bb1187..a2dc1065ef0 100644 --- a/packages/libs/src/services/ethContracts/ClaimDistributionClient.ts +++ b/packages/libs/src/services/ethContracts/ClaimDistributionClient.ts @@ -1,4 +1,5 @@ import type BN from 'bn.js' + import { ContractClient } from '../contracts/ContractClient' import type { EthWeb3Manager } from '../ethWeb3Manager' diff --git a/packages/libs/src/services/ethContracts/ClaimsManagerClient.ts b/packages/libs/src/services/ethContracts/ClaimsManagerClient.ts index 9b991d42082..69ecde94a7c 100644 --- a/packages/libs/src/services/ethContracts/ClaimsManagerClient.ts +++ b/packages/libs/src/services/ethContracts/ClaimsManagerClient.ts @@ -93,10 +93,10 @@ export class ClaimsManagerClient extends ContractClient { }) return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - claimer: event.returnValues['_claimer'], - rewards: Utils.toBN(event.returnValues['_rewards']), - oldTotal: Utils.toBN(event.returnValues['_oldTotal']), - newTotal: Utils.toBN(event.returnValues['_newTotal']) + claimer: event.returnValues._claimer, + rewards: Utils.toBN(event.returnValues._rewards), + oldTotal: Utils.toBN(event.returnValues._oldTotal), + newTotal: Utils.toBN(event.returnValues._newTotal) })) } } diff --git a/packages/libs/src/services/ethContracts/DelegateManagerClient.ts b/packages/libs/src/services/ethContracts/DelegateManagerClient.ts index 1ab7850445e..9ac628370be 100644 --- a/packages/libs/src/services/ethContracts/DelegateManagerClient.ts +++ b/packages/libs/src/services/ethContracts/DelegateManagerClient.ts @@ -1,8 +1,10 @@ import type BN from 'bn.js' + import { ContractABI, Logger, Utils } from '../../utils' import type { GetRegistryAddress } from '../contracts/ContractClient' import { GovernedContractClient } from '../contracts/GovernedContractClient' import type { EthWeb3Manager } from '../ethWeb3Manager' + import type { AudiusTokenClient } from './AudiusTokenClient' import type { GovernanceClient } from './GovernanceClient' import type { StakingProxyClient } from './StakingProxyClient' @@ -46,7 +48,7 @@ export class DelegateManagerClient extends GovernedContractClient { const method = await this.getMethod('delegateStake', targetSP, amount) const tx = await this.web3Manager.sendTransaction(method) - const returnValues = tx.events?.['IncreaseDelegatedStake']?.returnValues + const returnValues = tx.events?.IncreaseDelegatedStake?.returnValues return { txReceipt: tx, @@ -77,9 +79,9 @@ export class DelegateManagerClient extends GovernedContractClient { return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - delegator: event.returnValues['_delegator'], - increaseAmount: Utils.toBN(event.returnValues['_increaseAmount']), - serviceProvider: event.returnValues['_serviceProvider'] + delegator: event.returnValues._delegator, + increaseAmount: Utils.toBN(event.returnValues._increaseAmount), + serviceProvider: event.returnValues._serviceProvider })) } @@ -106,9 +108,9 @@ export class DelegateManagerClient extends GovernedContractClient { ) return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - delegator: event.returnValues['_delegator'], - amount: Utils.toBN(event.returnValues['_amount']), - serviceProvider: event.returnValues['_serviceProvider'] + delegator: event.returnValues._delegator, + amount: Utils.toBN(event.returnValues._amount), + serviceProvider: event.returnValues._serviceProvider })) } @@ -133,10 +135,10 @@ export class DelegateManagerClient extends GovernedContractClient { return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - lockupExpiryBlock: parseInt(event.returnValues['_lockupExpiryBlock']), - delegator: event.returnValues['_delegator'], - amount: Utils.toBN(event.returnValues['_amount']), - serviceProvider: event.returnValues['_serviceProvider'] + lockupExpiryBlock: parseInt(event.returnValues._lockupExpiryBlock), + delegator: event.returnValues._delegator, + amount: Utils.toBN(event.returnValues._amount), + serviceProvider: event.returnValues._serviceProvider })) } @@ -164,9 +166,9 @@ export class DelegateManagerClient extends GovernedContractClient { return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - delegator: event.returnValues['_delegator'], - amount: Utils.toBN(event.returnValues['_amount']), - serviceProvider: event.returnValues['_serviceProvider'] + delegator: event.returnValues._delegator, + amount: Utils.toBN(event.returnValues._amount), + serviceProvider: event.returnValues._serviceProvider })) } @@ -186,9 +188,9 @@ export class DelegateManagerClient extends GovernedContractClient { }) return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - claimer: event.returnValues['_claimer'], - rewards: Utils.toBN(event.returnValues['_rewards']), - newTotal: Utils.toBN(event.returnValues['_newTotal']) + claimer: event.returnValues._claimer, + rewards: Utils.toBN(event.returnValues._rewards), + newTotal: Utils.toBN(event.returnValues._newTotal) })) } @@ -208,9 +210,9 @@ export class DelegateManagerClient extends GovernedContractClient { }) return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - target: event.returnValues['_target'], - amount: Utils.toBN(event.returnValues['_amount']), - newTotal: Utils.toBN(event.returnValues['_newTotal']) + target: event.returnValues._target, + amount: Utils.toBN(event.returnValues._amount), + newTotal: Utils.toBN(event.returnValues._newTotal) })) } @@ -230,9 +232,9 @@ export class DelegateManagerClient extends GovernedContractClient { }) return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - serviceProvider: event.returnValues['_serviceProvider'], - delegator: event.returnValues['_delegator'], - unstakedAmount: Utils.toBN(event.returnValues['_unstakedAmount']) + serviceProvider: event.returnValues._serviceProvider, + delegator: event.returnValues._delegator, + unstakedAmount: Utils.toBN(event.returnValues._unstakedAmount) })) } @@ -256,7 +258,7 @@ export class DelegateManagerClient extends GovernedContractClient { const tx = await this.web3Manager.sendTransaction(method) const returnValues = - tx.events?.['UndelegateStakeRequestEvaluated']?.returnValues + tx.events?.UndelegateStakeRequestEvaluated?.returnValues return { txReceipt: tx, @@ -300,7 +302,7 @@ export class DelegateManagerClient extends GovernedContractClient { ) const tx = await this.web3Manager.sendTransaction(method) const returnValues = - tx.events?.['RemoveDelegatorRequestEvaluated']?.returnValues + tx.events?.RemoveDelegatorRequestEvaluated?.returnValues return { txReceipt: tx, delegator: returnValues._delegator, diff --git a/packages/libs/src/services/ethContracts/EthContracts.ts b/packages/libs/src/services/ethContracts/EthContracts.ts index d0b7d079414..41d920ed7d1 100644 --- a/packages/libs/src/services/ethContracts/EthContracts.ts +++ b/packages/libs/src/services/ethContracts/EthContracts.ts @@ -1,34 +1,34 @@ import semver from 'semver' -import { AudiusTokenClient } from './AudiusTokenClient' -import { RegistryClient } from './RegistryClient' -import { GovernanceClient } from './GovernanceClient' -import { ServiceTypeManagerClient } from './ServiceTypeManagerClient' -import { ServiceProviderFactoryClient } from './ServiceProviderFactoryClient' -import { StakingProxyClient } from './StakingProxyClient' -import { DelegateManagerClient } from './DelegateManagerClient' -import { ClaimsManagerClient } from './ClaimsManagerClient' -import { ClaimDistributionClient } from './ClaimDistributionClient' -import { WormholeClient } from './WormholeClient' -import { EthRewardsManagerClient } from './EthRewardsManagerClient' -import { TrustedNotifierManagerClient } from './TrustedNotifierManagerClient' -import type { Logger } from '../../utils' -import type { EthWeb3Manager } from '../ethWeb3Manager' -import type { ContractClient } from '../contracts/ContractClient' +import type { AbiItem } from 'web3-utils' +import { abi as ClaimDistributionABI } from '../../eth-contracts/ABIs/AudiusClaimDistributor.json' import { abi as AudiusTokenABI } from '../../eth-contracts/ABIs/AudiusToken.json' -import { abi as RegistryABI } from '../../eth-contracts/ABIs/Registry.json' +import { abi as ClaimsManagerABI } from '../../eth-contracts/ABIs/ClaimsManager.json' +import { abi as DelegateManagerABI } from '../../eth-contracts/ABIs/DelegateManagerV2.json' +import { abi as EthRewardsManagerABI } from '../../eth-contracts/ABIs/EthRewardsManager.json' import { abi as GovernanceABI } from '../../eth-contracts/ABIs/Governance.json' -import { abi as ServiceTypeManagerABI } from '../../eth-contracts/ABIs/ServiceTypeManager.json' +import { abi as RegistryABI } from '../../eth-contracts/ABIs/Registry.json' import { abi as ServiceProviderFactoryABI } from '../../eth-contracts/ABIs/ServiceProviderFactory.json' +import { abi as ServiceTypeManagerABI } from '../../eth-contracts/ABIs/ServiceTypeManager.json' import { abi as StakingABI } from '../../eth-contracts/ABIs/Staking.json' -import { abi as DelegateManagerABI } from '../../eth-contracts/ABIs/DelegateManagerV2.json' -import { abi as ClaimsManagerABI } from '../../eth-contracts/ABIs/ClaimsManager.json' -import { abi as ClaimDistributionABI } from '../../eth-contracts/ABIs/AudiusClaimDistributor.json' -import { abi as WormholeClientABI } from '../../eth-contracts/ABIs/WormholeClient.json' -import { abi as EthRewardsManagerABI } from '../../eth-contracts/ABIs/EthRewardsManager.json' import { abi as TrustedNotifierManagerABI } from '../../eth-contracts/ABIs/TrustedNotifierManager.json' +import { abi as WormholeClientABI } from '../../eth-contracts/ABIs/WormholeClient.json' +import type { Logger } from '../../utils' +import type { ContractClient } from '../contracts/ContractClient' +import type { EthWeb3Manager } from '../ethWeb3Manager' -import type { AbiItem } from 'web3-utils' +import { AudiusTokenClient } from './AudiusTokenClient' +import { ClaimDistributionClient } from './ClaimDistributionClient' +import { ClaimsManagerClient } from './ClaimsManagerClient' +import { DelegateManagerClient } from './DelegateManagerClient' +import { EthRewardsManagerClient } from './EthRewardsManagerClient' +import { GovernanceClient } from './GovernanceClient' +import { RegistryClient } from './RegistryClient' +import { ServiceProviderFactoryClient } from './ServiceProviderFactoryClient' +import { ServiceTypeManagerClient } from './ServiceTypeManagerClient' +import { StakingProxyClient } from './StakingProxyClient' +import { TrustedNotifierManagerClient } from './TrustedNotifierManagerClient' +import { WormholeClient } from './WormholeClient' const GovernanceRegistryKey = 'Governance' const ServiceTypeManagerProxyKey = 'ServiceTypeManagerProxy' @@ -278,7 +278,7 @@ export class EthContracts { ) return version } catch (e) { - console.log(`Error retrieving version for ${serviceType}`) + console.info(`Error retrieving version for ${serviceType}`) return '' } } diff --git a/packages/libs/src/services/ethContracts/GovernanceClient.ts b/packages/libs/src/services/ethContracts/GovernanceClient.ts index 56c3c65c6b2..a37a17115ab 100644 --- a/packages/libs/src/services/ethContracts/GovernanceClient.ts +++ b/packages/libs/src/services/ethContracts/GovernanceClient.ts @@ -1,9 +1,11 @@ -import { ContractClient, GetRegistryAddress } from '../contracts/ContractClient' +import type { EventLog } from 'web3-core' + import { ContractABI, ContractMethod, Logger, Utils } from '../../utils' +import { ContractClient, GetRegistryAddress } from '../contracts/ContractClient' import type { EthWeb3Manager } from '../ethWeb3Manager' + import type { AudiusTokenClient } from './AudiusTokenClient' import type { StakingProxyClient } from './StakingProxyClient' -import type { EventLog } from 'web3-core' type ProposalTxn = { proposalId: string @@ -223,7 +225,7 @@ export class GovernanceClient extends ContractClient { }) { const argumentTypes = functionSignature .match(/.*\((?.*)\)/) - ?.groups?.['args']?.split(',') + ?.groups?.args?.split(',') const encodedCallData = this.abiEncode(argumentTypes as string[], callData) const method = await this.getMethod( @@ -236,7 +238,7 @@ export class GovernanceClient extends ContractClient { description ) const tx = await this.web3Manager.sendTransaction(method) - const id = tx.events?.['ProposalSubmitted']?.returnValues?._proposalId + const id = tx.events?.ProposalSubmitted?.returnValues?._proposalId if (id) { return id } diff --git a/packages/libs/src/services/ethContracts/RegistryClient.ts b/packages/libs/src/services/ethContracts/RegistryClient.ts index d2406636e62..5d43e7f5db5 100644 --- a/packages/libs/src/services/ethContracts/RegistryClient.ts +++ b/packages/libs/src/services/ethContracts/RegistryClient.ts @@ -1,7 +1,8 @@ -import { Utils } from '../../utils' -import type { AbiItem } from 'web3-utils' import type Web3 from 'web3' import type { Contract } from 'web3-eth-contract' +import type { AbiItem } from 'web3-utils' + +import { Utils } from '../../utils' import type { EthWeb3Manager } from '../ethWeb3Manager' export class RegistryClient { diff --git a/packages/libs/src/services/ethContracts/ServiceProviderFactoryClient.ts b/packages/libs/src/services/ethContracts/ServiceProviderFactoryClient.ts index 92ea719f093..42c5a5959aa 100644 --- a/packages/libs/src/services/ethContracts/ServiceProviderFactoryClient.ts +++ b/packages/libs/src/services/ethContracts/ServiceProviderFactoryClient.ts @@ -1,16 +1,18 @@ // TODO: a lot of extra parseInt's that result in incorrect (as unknown as string) typecasting -import { ContractABI, Logger, Utils } from '../../utils' -import { GovernedContractClient } from '../contracts/GovernedContractClient' import axios, { AxiosRequestConfig } from 'axios' +import type BN from 'bn.js' import { range } from 'lodash' -import type { EthWeb3Manager } from '../ethWeb3Manager' +import urlJoin from 'proper-url-join' + +import { ContractABI, Logger, Utils } from '../../utils' import type { GetRegistryAddress } from '../contracts/ContractClient' +import { GovernedContractClient } from '../contracts/GovernedContractClient' +import type { EthWeb3Manager } from '../ethWeb3Manager' + import type { AudiusTokenClient } from './AudiusTokenClient' -import type { StakingProxyClient } from './StakingProxyClient' import type { GovernanceClient } from './GovernanceClient' -import urlJoin from 'proper-url-join' -import type BN from 'bn.js' +import type { StakingProxyClient } from './StakingProxyClient' type GetEvent = { serviceType: string @@ -76,7 +78,7 @@ export class ServiceProviderFactoryClient extends GovernedContractClient { method: 'get', timeout: 1000, params: { - 'allow_unregistered': 'true' + allow_unregistered: 'true' } } const resp = await axios(axiosRequestObj) @@ -106,7 +108,7 @@ export class ServiceProviderFactoryClient extends GovernedContractClient { ) // @ts-expect-error TODO: this seems incorrect const tx = await this.web3Manager.sendTransaction(method, 1000000) - const returnValues = tx.events?.['RegisteredServiceProvider']?.returnValues + const returnValues = tx.events?.RegisteredServiceProvider?.returnValues return { txReceipt: tx, spID: parseInt(returnValues._spID), @@ -152,11 +154,11 @@ export class ServiceProviderFactoryClient extends GovernedContractClient { return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - spID: parseInt(event.returnValues['_spID']), - serviceType: Utils.hexToUtf8(event.returnValues['_serviceType']), - owner: event.returnValues['_owner'], - endpoint: event.returnValues['_endpoint'], - stakeAmount: Utils.toBN(event.returnValues['_stakeAmout']) + spID: parseInt(event.returnValues._spID), + serviceType: Utils.hexToUtf8(event.returnValues._serviceType), + owner: event.returnValues._owner, + endpoint: event.returnValues._endpoint, + stakeAmount: Utils.toBN(event.returnValues._stakeAmout) })) } @@ -179,11 +181,11 @@ export class ServiceProviderFactoryClient extends GovernedContractClient { }) return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - spID: parseInt(event.returnValues['_spID']), - serviceType: Utils.hexToUtf8(event.returnValues['_serviceType']), - owner: event.returnValues['_owner'], - endpoint: event.returnValues['_endpoint'], - stakeAmount: Utils.toBN(event.returnValues['_stakeAmount']) + spID: parseInt(event.returnValues._spID), + serviceType: Utils.hexToUtf8(event.returnValues._serviceType), + owner: event.returnValues._owner, + endpoint: event.returnValues._endpoint, + stakeAmount: Utils.toBN(event.returnValues._stakeAmount) })) } @@ -203,9 +205,9 @@ export class ServiceProviderFactoryClient extends GovernedContractClient { }) return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - owner: event.returnValues['_owner'], - increaseAmount: Utils.toBN(event.returnValues['_increaseAmount']), - newStakeAmount: Utils.toBN(event.returnValues['_newStakeAmount']) + owner: event.returnValues._owner, + increaseAmount: Utils.toBN(event.returnValues._increaseAmount), + newStakeAmount: Utils.toBN(event.returnValues._newStakeAmount) })) } @@ -228,9 +230,9 @@ export class ServiceProviderFactoryClient extends GovernedContractClient { ) return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - owner: event.returnValues['_owner'], - decreaseAmount: Utils.toBN(event.returnValues['_decreaseAmount']), - newStakeAmount: Utils.toBN(event.returnValues['_newStakeAmount']) + owner: event.returnValues._owner, + decreaseAmount: Utils.toBN(event.returnValues._decreaseAmount), + newStakeAmount: Utils.toBN(event.returnValues._newStakeAmount) })) } @@ -250,9 +252,9 @@ export class ServiceProviderFactoryClient extends GovernedContractClient { }) return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - owner: event.returnValues['_owner'], - decreaseAmount: Utils.toBN(event.returnValues['_decreaseAmount']), - lockupExpiryBlock: parseInt(event.returnValues['_lockupExpiryBlock']) + owner: event.returnValues._owner, + decreaseAmount: Utils.toBN(event.returnValues._decreaseAmount), + lockupExpiryBlock: parseInt(event.returnValues._lockupExpiryBlock) })) } @@ -275,9 +277,9 @@ export class ServiceProviderFactoryClient extends GovernedContractClient { ) return events.map((event) => ({ blockNumber: parseInt(event.blockNumber as unknown as string), - owner: event.returnValues['_owner'], - decreaseAmount: Utils.toBN(event.returnValues['_decreaseAmount']), - lockupExpiryBlock: parseInt(event.returnValues['_lockupExpiryBlock']) + owner: event.returnValues._owner, + decreaseAmount: Utils.toBN(event.returnValues._decreaseAmount), + lockupExpiryBlock: parseInt(event.returnValues._lockupExpiryBlock) })) } @@ -473,8 +475,7 @@ export class ServiceProviderFactoryClient extends GovernedContractClient { endpoint ) const tx = await this.web3Manager.sendTransaction(method) - const returnValues = - tx.events?.['DeregisteredServiceProvider']?.returnValues + const returnValues = tx.events?.DeregisteredServiceProvider?.returnValues return { txReceipt: tx, diff --git a/packages/libs/src/services/ethContracts/StakingProxyClient.ts b/packages/libs/src/services/ethContracts/StakingProxyClient.ts index 5d2ae07bfbb..d07260dbc51 100644 --- a/packages/libs/src/services/ethContracts/StakingProxyClient.ts +++ b/packages/libs/src/services/ethContracts/StakingProxyClient.ts @@ -1,8 +1,10 @@ +import type BN from 'bn.js' + import type { ContractABI, Logger } from '../../utils' import { ContractClient, GetRegistryAddress } from '../contracts/ContractClient' import type { EthWeb3Manager } from '../ethWeb3Manager' + import type { AudiusTokenClient } from './AudiusTokenClient' -import type BN from 'bn.js' export class StakingProxyClient extends ContractClient { audiusTokenClient: AudiusTokenClient diff --git a/packages/libs/src/services/ethContracts/WormholeClient.ts b/packages/libs/src/services/ethContracts/WormholeClient.ts index 2a84b861938..e13e24eeac9 100644 --- a/packages/libs/src/services/ethContracts/WormholeClient.ts +++ b/packages/libs/src/services/ethContracts/WormholeClient.ts @@ -1,10 +1,12 @@ +import type BN from 'bn.js' +import type { ECDSASignature } from 'ethereumjs-util' import type Web3 from 'web3' +import type { Contract } from 'web3-eth-contract' + import type { ContractABI } from '../../utils' import type { EthWeb3Manager } from '../ethWeb3Manager' + import type { AudiusTokenClient } from './AudiusTokenClient' -import type { Contract } from 'web3-eth-contract' -import type BN from 'bn.js' -import type { ECDSASignature } from 'ethereumjs-util' export class WormholeClient { ethWeb3Manager: EthWeb3Manager diff --git a/packages/libs/src/services/ethWeb3Manager/EthWeb3Manager.ts b/packages/libs/src/services/ethWeb3Manager/EthWeb3Manager.ts index 57564c6d415..eea28ea70d7 100644 --- a/packages/libs/src/services/ethWeb3Manager/EthWeb3Manager.ts +++ b/packages/libs/src/services/ethWeb3Manager/EthWeb3Manager.ts @@ -1,5 +1,12 @@ -import Web3 from '../../LibsWeb3' +import type { Hedgehog } from '@audius/hedgehog' +import retry from 'async-retry' +import type { AxiosError } from 'axios' +import { Transaction as EthereumTx } from 'ethereumjs-tx' +import type Wallet from 'ethereumjs-wallet' import type Web3Type from 'web3' +import type { TransactionReceipt } from 'web3-core' + +import Web3 from '../../LibsWeb3' import { MultiProvider, estimateGas, @@ -7,13 +14,7 @@ import { Maybe, Nullable } from '../../utils' -import { Transaction as EthereumTx } from 'ethereumjs-tx' -import retry from 'async-retry' import type { IdentityService, RelayTransaction } from '../identity' -import type { Hedgehog } from '@audius/hedgehog' -import type { AxiosError } from 'axios' -import type Wallet from 'ethereumjs-wallet' -import type { TransactionReceipt } from 'web3-core' const MIN_GAS_PRICE = Math.pow(10, 9) // 1 GWei, ETH minimum allowed gas price const HIGH_GAS_PRICE = 250 * MIN_GAS_PRICE // 250 GWei @@ -144,7 +145,7 @@ export class EthWeb3Manager { retries: txRetries, onRetry: (err) => { if (err) { - console.log( + console.info( // eslint-disable-next-line @typescript-eslint/no-base-to-string -- TODO `libs ethWeb3Manager transaction send retry error : ${err}` ) @@ -160,7 +161,7 @@ export class EthWeb3Manager { return await contractMethod.send({ from: this.ownerWallet, gas: gasLimit, - gasPrice: gasPrice + gasPrice }) } @@ -219,7 +220,7 @@ export class EthWeb3Manager { retries: txRetries, onRetry: (err) => { if (err) { - console.log( + console.info( // eslint-disable-next-line @typescript-eslint/no-base-to-string -- TODO `libs ethWeb3Manager transaction relay retry error : ${err}` ) diff --git a/packages/libs/src/services/hedgehog/Hedgehog.ts b/packages/libs/src/services/hedgehog/Hedgehog.ts index 0c02c2334cd..9fa544b6136 100644 --- a/packages/libs/src/services/hedgehog/Hedgehog.ts +++ b/packages/libs/src/services/hedgehog/Hedgehog.ts @@ -3,10 +3,11 @@ import { WalletManager, getPlatformCreateKey } from '@audius/hedgehog' -import type { IdentityService } from '../identity' -import type { LocalStorage } from '../../utils/localStorage' import type { SetAuthFn, SetUserFn, GetFn, CreateKey } from '@audius/hedgehog' +import type { LocalStorage } from '../../utils/localStorage' +import type { IdentityService } from '../identity' + export type HedgehogConfig = { identityService: IdentityService useLocalStorage?: boolean @@ -67,7 +68,7 @@ export class Hedgehog { ) // hedgehog property is called username so being consistent instead of calling it email - const data = await this.getFn({ lookupKey: lookupKey, username: email }) + const data = await this.getFn({ lookupKey, username: email }) if (data?.iv && data.cipherText) { const { walletObj, entropy } = diff --git a/packages/libs/src/services/identity/IdentityService.ts b/packages/libs/src/services/identity/IdentityService.ts index 25489bbd9a1..061d9ed0d4f 100644 --- a/packages/libs/src/services/identity/IdentityService.ts +++ b/packages/libs/src/services/identity/IdentityService.ts @@ -1,13 +1,14 @@ import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios' +import type BN from 'bn.js' +import type Wallet from 'ethereumjs-wallet' +import type { TransactionReceipt } from 'web3-core' + import { AuthHeaders } from '../../constants' -import { uuid } from '../../utils/uuid' import type { Nullable } from '../../utils' +import { uuid } from '../../utils/uuid' +import type { Web3Manager } from '../web3Manager' import { getTrackListens, TimeFrame } from './requests' -import type { Web3Manager } from '../web3Manager' -import type { TransactionReceipt } from 'web3-core' -import type Wallet from 'ethereumjs-wallet' -import type BN from 'bn.js' type Data = Record @@ -158,7 +159,7 @@ export class IdentityService { url: '/users/check', method: 'get', params: { - email: email + email } }) } @@ -292,7 +293,7 @@ export class IdentityService { return await this._makeRequest({ url: '/twitter/handle_lookup', method: 'get', - params: { handle: handle } + params: { handle } }) } else { throw new Error('No handle passed into function lookupTwitterHandle') @@ -603,7 +604,8 @@ export class IdentityService { /* ------- INTERNAL FUNCTIONS ------- */ async _makeRequest(axiosRequestObj: AxiosRequestConfig) { - axiosRequestObj.baseURL = axiosRequestObj.baseURL || this.identityServiceEndpoint + axiosRequestObj.baseURL = + axiosRequestObj.baseURL || this.identityServiceEndpoint const requestId = uuid() axiosRequestObj.headers = { diff --git a/packages/libs/src/services/schemaValidator/SchemaValidator.ts b/packages/libs/src/services/schemaValidator/SchemaValidator.ts index a555afcb075..722be5b85cf 100644 --- a/packages/libs/src/services/schemaValidator/SchemaValidator.ts +++ b/packages/libs/src/services/schemaValidator/SchemaValidator.ts @@ -1,8 +1,8 @@ import { validate } from 'jsonschema' +import PlaylistSchema from './schemas/playlistSchema.json' import TrackSchema from './schemas/trackSchema.json' import UserSchema from './schemas/userSchema.json' -import PlaylistSchema from './schemas/playlistSchema.json' export const trackSchemaType = 'TrackSchema' export const userSchemaType = 'UserSchema' diff --git a/packages/libs/src/services/solana/SolanaUtils.ts b/packages/libs/src/services/solana/SolanaUtils.ts index 02590a99511..b5685330ac7 100644 --- a/packages/libs/src/services/solana/SolanaUtils.ts +++ b/packages/libs/src/services/solana/SolanaUtils.ts @@ -1,4 +1,3 @@ -import { padBNToUint8Array } from './padBNToUint8Array' import { PublicKey, PublicKeyInitData, @@ -7,8 +6,11 @@ import { import BN from 'bn.js' import keccak256 from 'keccak256' import secp256k1 from 'secp256k1' + import { WAUDIO_DECMIALS } from '../../constants' +import { padBNToUint8Array } from './padBNToUint8Array' + export class SolanaUtils { /** * Signs arbitrary bytes diff --git a/packages/libs/src/services/solana/SolanaWeb3Manager.ts b/packages/libs/src/services/solana/SolanaWeb3Manager.ts index 99beb14aa47..2e13fa70ce9 100644 --- a/packages/libs/src/services/solana/SolanaWeb3Manager.ts +++ b/packages/libs/src/services/solana/SolanaWeb3Manager.ts @@ -1,3 +1,4 @@ +import splToken from '@solana/spl-token' import solanaWeb3, { Connection, Keypair, @@ -6,19 +7,13 @@ import solanaWeb3, { TransactionInstruction } from '@solana/web3.js' import BN from 'bn.js' -import splToken from '@solana/spl-token' -import { createTransferInstructions, transferWAudioBalance } from './transfer' -import { getBankAccountAddress, createUserBankFrom } from './userBank' -import { - createAssociatedTokenAccount, - getTokenAccountInfo, - findAssociatedTokenAddress -} from './tokenAccount' -import { wAudioFromWeiAudio } from './wAudio' +import { AUDIO_DECMIALS, WAUDIO_DECMIALS } from '../../constants' import { Logger, Nullable, Utils } from '../../utils' +import type { IdentityService } from '../identity' +import type { Web3Manager } from '../web3Manager' + import { SolanaUtils } from './SolanaUtils' -import { TransactionHandler } from './transactionHandler' import { submitAttestations, evaluateAttestations, @@ -27,9 +22,15 @@ import { SubmitAttestationsConfig as SubmitAttestationsBaseConfig, CreateSenderParams as CreateSenderBaseParams } from './rewards' -import { AUDIO_DECMIALS, WAUDIO_DECMIALS } from '../../constants' -import type { IdentityService } from '../identity' -import type { Web3Manager } from '../web3Manager' +import { + createAssociatedTokenAccount, + getTokenAccountInfo, + findAssociatedTokenAddress +} from './tokenAccount' +import { TransactionHandler } from './transactionHandler' +import { createTransferInstructions, transferWAudioBalance } from './transfer' +import { getBankAccountAddress, createUserBankFrom } from './userBank' +import { wAudioFromWeiAudio } from './wAudio' type EvaluateChallengeAttestationsConfig = { challengeId: string diff --git a/packages/libs/src/services/solana/rewards.ts b/packages/libs/src/services/solana/rewards.ts index 7b0a178bc1c..168cb94b83d 100644 --- a/packages/libs/src/services/solana/rewards.ts +++ b/packages/libs/src/services/solana/rewards.ts @@ -7,14 +7,16 @@ import { SYSVAR_RENT_PUBKEY, TransactionInstruction } from '@solana/web3.js' -import { serialize } from 'borsh' -import { getBankAccountAddress } from './userBank' import BN from 'bn.js' +import { serialize } from 'borsh' + +import type { Logger, Nullable } from '../../utils' +import type { IdentityService } from '../identity' + import { SolanaUtils } from './SolanaUtils' import { RewardsManagerError } from './errors' import type { TransactionHandler } from './transactionHandler' -import type { Logger, Nullable } from '../../utils' -import type { IdentityService } from '../identity' +import { getBankAccountAddress } from './userBank' // Various prefixes used for rewards const SENDER_SEED_PREFIX = 'S_' diff --git a/packages/libs/src/services/solana/tokenAccount.ts b/packages/libs/src/services/solana/tokenAccount.ts index 2e4405e5ce8..4a8a5f7ecbf 100644 --- a/packages/libs/src/services/solana/tokenAccount.ts +++ b/packages/libs/src/services/solana/tokenAccount.ts @@ -5,6 +5,7 @@ import { SYSVAR_RENT_PUBKEY, Connection } from '@solana/web3.js' + import type { Nullable } from '../../utils' import type { IdentityService } from '../identity' diff --git a/packages/libs/src/services/solana/transactionHandler.ts b/packages/libs/src/services/solana/transactionHandler.ts index 2a4359d9121..a8c23a82067 100644 --- a/packages/libs/src/services/solana/transactionHandler.ts +++ b/packages/libs/src/services/solana/transactionHandler.ts @@ -1,4 +1,3 @@ -import { SolanaUtils } from './SolanaUtils' import { Transaction, PublicKey, @@ -6,8 +5,11 @@ import { Keypair, TransactionInstruction } from '@solana/web3.js' -import type { IdentityService, RelayTransactionData } from '../identity' + import type { Logger, Nullable } from '../../utils' +import type { IdentityService, RelayTransactionData } from '../identity' + +import { SolanaUtils } from './SolanaUtils' type HandleTransactionParams = { instructions: TransactionInstruction[] diff --git a/packages/libs/src/services/solana/transfer.ts b/packages/libs/src/services/solana/transfer.ts index f693e3d67fe..77fd220741d 100644 --- a/packages/libs/src/services/solana/transfer.ts +++ b/packages/libs/src/services/solana/transfer.ts @@ -8,11 +8,12 @@ import { Connection } from '@solana/web3.js' import BN from 'bn.js' -import type { TransactionHandler } from './transactionHandler' import { deserialize, serialize } from 'borsh' -import { SolanaUtils } from './SolanaUtils' import secp256k1 from 'secp256k1' + +import { SolanaUtils } from './SolanaUtils' import { ClaimableProgramError } from './errors' +import type { TransactionHandler } from './transactionHandler' const encoder = new TextEncoder() diff --git a/packages/libs/src/services/solana/userBank.ts b/packages/libs/src/services/solana/userBank.ts index f6ef622a817..8e1f5061979 100644 --- a/packages/libs/src/services/solana/userBank.ts +++ b/packages/libs/src/services/solana/userBank.ts @@ -6,6 +6,7 @@ import { } from '@solana/web3.js' import { serialize } from 'borsh' import bs58 from 'bs58' + import { SolanaUtils } from './SolanaUtils' import type { TransactionHandler } from './transactionHandler' diff --git a/packages/libs/src/services/solana/wAudio.test.js b/packages/libs/src/services/solana/wAudio.test.js index b8998973466..f73ffb75ac0 100644 --- a/packages/libs/src/services/solana/wAudio.test.js +++ b/packages/libs/src/services/solana/wAudio.test.js @@ -1,6 +1,7 @@ -const BN = require('bn.js') const assert = require('assert') +const BN = require('bn.js') + const { wAudioFromWeiAudio } = require('./wAudio') describe('wAudioFromWeiAudio', () => { diff --git a/packages/libs/src/services/web3Manager/Web3Config.ts b/packages/libs/src/services/web3Manager/Web3Config.ts index 6a6fb6fbbd0..ebdf3e81932 100644 --- a/packages/libs/src/services/web3Manager/Web3Config.ts +++ b/packages/libs/src/services/web3Manager/Web3Config.ts @@ -1,5 +1,5 @@ -import type Web3 from 'web3' import type Wallet from 'ethereumjs-wallet' +import type Web3 from 'web3' export type Web3Config = { registryAddress: string diff --git a/packages/libs/src/services/web3Manager/Web3Manager.ts b/packages/libs/src/services/web3Manager/Web3Manager.ts index 4b4b6a7989c..e4087c6ae09 100644 --- a/packages/libs/src/services/web3Manager/Web3Manager.ts +++ b/packages/libs/src/services/web3Manager/Web3Manager.ts @@ -1,6 +1,14 @@ -import Web3 from '../../LibsWeb3' -import sigUtil from 'eth-sig-util' +import type { Hedgehog } from '@audius/hedgehog' +import type { DecodedLog } from 'abi-decoder' import retry from 'async-retry' +import sigUtil from 'eth-sig-util' +import type { EIP712TypedData } from 'eth-sig-util' +import EthereumWallet from 'ethereumjs-wallet' +import type Web3Type from 'web3' +import type { HttpProvider, TransactionReceipt, EventLog } from 'web3-core' + +import type { AudiusLibs } from '../../AudiusLibs' +import Web3 from '../../LibsWeb3' import { ContractMethod, estimateGas, @@ -8,17 +16,11 @@ import { Nullable } from '../../utils' import { AudiusABIDecoder } from '../ABIDecoder' -import EthereumWallet from 'ethereumjs-wallet' -import { XMLHttpRequest } from './XMLHttpRequest' -import type { Web3Config } from './Web3Config' -import type { IdentityService } from '../identity' -import type { Hedgehog } from '@audius/hedgehog' -import type Web3Type from 'web3' -import type { HttpProvider, TransactionReceipt, EventLog } from 'web3-core' -import type { EIP712TypedData } from 'eth-sig-util' -import type { DecodedLog } from 'abi-decoder' -import type { AudiusLibs } from '../../AudiusLibs' import type { DiscoveryProvider } from '../discoveryProvider' +import type { IdentityService } from '../identity' + +import type { Web3Config } from './Web3Config' +import { XMLHttpRequest } from './XMLHttpRequest' const DEFAULT_GAS_LIMIT = 2000000 @@ -189,7 +191,7 @@ export class Web3Manager { * @param signature hex-formatted signature of data generated by web3 personalSign method */ async verifySignature(data: string, signature: string) { - return sigUtil.recoverPersonalSignature({ data: data, sig: signature }) + return sigUtil.recoverPersonalSignature({ data, sig: signature }) } async signTypedData(signatureData: EIP712TypedData) { @@ -276,7 +278,7 @@ export class Web3Manager { retries: txRetries, onRetry: (err) => { if (err) { - console.log( + console.info( // eslint-disable-next-line @typescript-eslint/no-base-to-string `libs web3Manager transaction send retry error : ${err}` ) @@ -385,7 +387,7 @@ const ethSignTypedData = async ( ;(web3.currentProvider as HttpProvider).send( { - method: method, + method, params: [wallet, processedSignatureData], // @ts-expect-error from not in JsonRpcPayload from: wallet diff --git a/packages/libs/src/services/wormhole/ProxyWormhole.ts b/packages/libs/src/services/wormhole/ProxyWormhole.ts index b27d9778aa0..3a8d7923d8d 100644 --- a/packages/libs/src/services/wormhole/ProxyWormhole.ts +++ b/packages/libs/src/services/wormhole/ProxyWormhole.ts @@ -1,13 +1,12 @@ import type { Hedgehog } from '@audius/hedgehog' -import type { EthContracts } from '../ethContracts' -import type { EthWeb3Manager } from '../ethWeb3Manager' -import type { IdentityService } from '../identity' -import type { SolanaWeb3Manager } from '../solana' - import bs58 from 'bs58' import { BN, toBuffer } from 'ethereumjs-util' import { Utils, sign, getTransferTokensDigest, Nullable } from '../../utils' +import type { EthContracts } from '../ethContracts' +import type { EthWeb3Manager } from '../ethWeb3Manager' +import type { IdentityService } from '../identity' +import type { SolanaWeb3Manager } from '../solana' export type ProxyWormholeConfig = {} diff --git a/packages/libs/src/services/wormhole/Wormhole.ts b/packages/libs/src/services/wormhole/Wormhole.ts index 22c3a0258e6..eb7182a042a 100644 --- a/packages/libs/src/services/wormhole/Wormhole.ts +++ b/packages/libs/src/services/wormhole/Wormhole.ts @@ -1,24 +1,23 @@ import type { Hedgehog } from '@audius/hedgehog' -import type { EthContracts } from '../ethContracts' -import type { ContractReceipt } from 'ethers' -import type { EthWeb3Manager } from '../ethWeb3Manager' -import type { IdentityService, RelayTransactionData } from '../identity' -import type { SolanaWeb3Manager } from '../solana' - -import bs58 from 'bs58' -import { BN, toBuffer } from 'ethereumjs-util' -import { zeroPad } from 'ethers/lib/utils' -import { providers } from 'ethers/lib/index' import wormholeSDK, { ChainId } from '@certusone/wormhole-sdk' - -import { SolanaUtils, wAudioFromWeiAudio } from '../solana' -import { Utils, sign, getTransferTokensDigest, Nullable } from '../../utils' +import type { GetSignedVAAResponse } from '@certusone/wormhole-sdk/lib/cjs/proto/publicrpc/v1/publicrpc' import type { RpcResponseAndContext, SignatureResult, Transaction } from '@solana/web3.js' -import type { GetSignedVAAResponse } from '@certusone/wormhole-sdk/lib/cjs/proto/publicrpc/v1/publicrpc' +import bs58 from 'bs58' +import { BN, toBuffer } from 'ethereumjs-util' +import type { ContractReceipt } from 'ethers' +import { providers } from 'ethers/lib/index' +import { zeroPad } from 'ethers/lib/utils' + +import { Utils, sign, getTransferTokensDigest, Nullable } from '../../utils' +import type { EthContracts } from '../ethContracts' +import type { EthWeb3Manager } from '../ethWeb3Manager' +import type { IdentityService, RelayTransactionData } from '../identity' +import type { SolanaWeb3Manager } from '../solana' +import { SolanaUtils, wAudioFromWeiAudio } from '../solana' export type WormholeConfig = { rpcHosts: string[] diff --git a/packages/libs/src/utils/apiSigning.ts b/packages/libs/src/utils/apiSigning.ts index 6242198dae8..66ee62ad38c 100644 --- a/packages/libs/src/utils/apiSigning.ts +++ b/packages/libs/src/utils/apiSigning.ts @@ -1,5 +1,7 @@ import assert from 'assert' + import type Web3Type from 'web3' + import Web3 from '../LibsWeb3' const web3Instance = new Web3() diff --git a/packages/libs/src/utils/fileHasher.ts b/packages/libs/src/utils/fileHasher.ts index 00611dbb055..aa626ac16e8 100644 --- a/packages/libs/src/utils/fileHasher.ts +++ b/packages/libs/src/utils/fileHasher.ts @@ -1,11 +1,7 @@ -import { - ImportCandidate, - importer, - UserImporterOptions -} from 'ipfs-unixfs-importer' import fs from 'fs' -import { promisify } from 'util' import { Stream } from 'stream' +import { promisify } from 'util' + import type { Blockstore, Options } from 'interface-blockstore' import type { AwaitIterable, @@ -14,6 +10,11 @@ import type { Query, KeyQuery } from 'interface-store' +import { + ImportCandidate, + importer, + UserImporterOptions +} from 'ipfs-unixfs-importer' import { CID } from 'multiformats/cid' import * as json from 'multiformats/codecs/json' import { sha256 } from 'multiformats/hashes/sha2' diff --git a/packages/libs/src/utils/getNStorageNodes.test.ts b/packages/libs/src/utils/getNStorageNodes.test.ts index d59993305b2..1293b645776 100644 --- a/packages/libs/src/utils/getNStorageNodes.test.ts +++ b/packages/libs/src/utils/getNStorageNodes.test.ts @@ -1,6 +1,8 @@ -import type { StorageNode } from './getNStorageNodes' import assert from 'assert' + import nock from 'nock' + +import type { StorageNode } from './getNStorageNodes' import { isNodeHealthy, getNStorageNodes } from './getNStorageNodes' const sampleNodes: StorageNode[] = [ diff --git a/packages/libs/src/utils/getNStorageNodes.ts b/packages/libs/src/utils/getNStorageNodes.ts index c5ec2ea0e33..3cda0d98e2a 100644 --- a/packages/libs/src/utils/getNStorageNodes.ts +++ b/packages/libs/src/utils/getNStorageNodes.ts @@ -1,6 +1,7 @@ import axios from 'axios' -import type { Logger } from './types' + import RendezvousHash from './rendezvous' +import type { Logger } from './types' export type StorageNode = { owner: any diff --git a/packages/libs/src/utils/multiProvider.ts b/packages/libs/src/utils/multiProvider.ts index 4d350df02f5..4843799a866 100644 --- a/packages/libs/src/utils/multiProvider.ts +++ b/packages/libs/src/utils/multiProvider.ts @@ -1,9 +1,11 @@ import { callbackify, promisify } from 'util' -import Web3 from '../LibsWeb3' + import { shuffle } from 'lodash' import type { HttpProvider, AbstractProvider } from 'web3-core' import type { JsonRpcPayload } from 'web3-core-helpers' +import Web3 from '../LibsWeb3' + const getSendMethod = (provider: HttpProvider | AbstractProvider) => { if ('sendAsync' in provider) { return provider.sendAsync @@ -63,7 +65,7 @@ export class MultiProvider extends Web3.providers.HttpProvider { const result = await send(payload) return result } catch (e) { - console.log(e) + console.info(e) } } diff --git a/packages/libs/src/utils/network.test.ts b/packages/libs/src/utils/network.test.ts index ffb52576de1..794985ed336 100644 --- a/packages/libs/src/utils/network.test.ts +++ b/packages/libs/src/utils/network.test.ts @@ -1,4 +1,5 @@ import assert from 'assert' + import nock from 'nock' import { timeRequests } from './network' diff --git a/packages/libs/src/utils/network.ts b/packages/libs/src/utils/network.ts index b4cc874ac27..125204d5a58 100644 --- a/packages/libs/src/utils/network.ts +++ b/packages/libs/src/utils/network.ts @@ -5,9 +5,9 @@ import axios, { } from 'axios' import semver from 'semver' -import { Utils } from './utils' import { promiseFight } from './promiseFight' import type { Nullable } from './types' +import { Utils } from './utils' export type ServiceName = string export interface ServiceWithEndpoint { diff --git a/packages/libs/src/utils/promiseFight.test.ts b/packages/libs/src/utils/promiseFight.test.ts index f482fbae764..09cd208855f 100644 --- a/packages/libs/src/utils/promiseFight.test.ts +++ b/packages/libs/src/utils/promiseFight.test.ts @@ -1,6 +1,7 @@ -import { promiseFight } from './promiseFight' import assert from 'assert' +import { promiseFight } from './promiseFight' + /** * A promise that either resolves or rejects. If it resolves, * resolves with the provided id. diff --git a/packages/libs/src/utils/rendezvous.test.ts b/packages/libs/src/utils/rendezvous.test.ts index 9ae859dfcd6..eadc750a691 100644 --- a/packages/libs/src/utils/rendezvous.test.ts +++ b/packages/libs/src/utils/rendezvous.test.ts @@ -1,4 +1,5 @@ import assert from 'assert' + import { RendezvousHash } from './rendezvous' describe('RendezvousHash', () => { diff --git a/packages/libs/src/utils/rendezvous.ts b/packages/libs/src/utils/rendezvous.ts index 5d706eab190..e68ce675fe8 100644 --- a/packages/libs/src/utils/rendezvous.ts +++ b/packages/libs/src/utils/rendezvous.ts @@ -1,6 +1,7 @@ -import CRC32C from 'crc-32/crc32c' import { Buffer } from 'buffer' +import CRC32C from 'crc-32/crc32c' + class NodeScore { node: Buffer score: number diff --git a/packages/libs/src/utils/signatures.ts b/packages/libs/src/utils/signatures.ts index b63c34cb3c5..992cd79c0b2 100644 --- a/packages/libs/src/utils/signatures.ts +++ b/packages/libs/src/utils/signatures.ts @@ -1,8 +1,9 @@ -import { Utils } from './utils' -import { BN, ecsign, toBuffer } from 'ethereumjs-util' import { pack } from '@ethersproject/solidity' +import { BN, ecsign, toBuffer } from 'ethereumjs-util' import type Web3 from 'web3' +import { Utils } from './utils' + export const sign = (digest: any, privateKey: Buffer) => { const buffer = toBuffer(digest) const signature = ecsign(buffer, privateKey) diff --git a/packages/libs/src/utils/utils.test.ts b/packages/libs/src/utils/utils.test.ts index b6d3acc5a46..019d2a2ada3 100644 --- a/packages/libs/src/utils/utils.test.ts +++ b/packages/libs/src/utils/utils.test.ts @@ -1,4 +1,5 @@ import assert from 'assert' + import { Utils } from './utils' describe('utils', () => { diff --git a/packages/libs/src/utils/utils.ts b/packages/libs/src/utils/utils.ts index 691b19e020d..05cd0ce1bae 100644 --- a/packages/libs/src/utils/utils.ts +++ b/packages/libs/src/utils/utils.ts @@ -1,12 +1,14 @@ -import bs58 from 'bs58' -import Web3 from '../LibsWeb3' import axios, { AxiosResponse } from 'axios' +import bs58 from 'bs58' import Hashids from 'hashids' -import { MultiProvider } from './multiProvider' -import { uuid } from './uuid' +import type { AbiItem } from 'web3-utils' + +import Web3 from '../LibsWeb3' + import { fileHasher } from './fileHasher' import type { ImageHasher, NonImageHasher, HashedImage } from './fileHasher' -import type { AbiItem } from 'web3-utils' +import { MultiProvider } from './multiProvider' +import { uuid } from './uuid' // Hashids