From a366e8ff765663a1463361ec0c9788ac27f1e399 Mon Sep 17 00:00:00 2001 From: Mariano Cortesi Date: Thu, 26 Sep 2019 18:39:34 -0300 Subject: [PATCH] Enable floating promises check everywhere (fix issues) Removes floagint promises on all packages that inherit from tslint parent config. Only in mobile package, the config is overrided as a "warning". Also: updates tslint & tslint rule set to their last versions. --- package.json | 2 +- packages/celotool/src/lib/cloud-storage.ts | 2 +- .../celo-private-keys-subprovider.ts | 2 +- packages/faucet/src/database-helper.ts | 2 +- packages/faucet/src/test-driver.ts | 8 ++- packages/mobile/tslint.json | 3 +- .../src/exchange/exchangeQuery.ts | 4 +- .../analytics/CeloAnalytics.tsx | 22 +++--- packages/typescript/package.json | 6 +- packages/typescript/tslint.json | 4 +- packages/verifier/src/App.tsx | 4 +- .../src/components/HomeScreen/Activity.tsx | 4 +- .../src/components/HomeScreen/HomeScreen.tsx | 60 +++++++++------- .../src/components/NUX/SetupAccountScreen.tsx | 2 +- packages/verifier/src/services/Apollo.ts | 3 + packages/verifier/src/services/FirebaseDb.ts | 12 ++-- yarn.lock | 71 +++++++++---------- 17 files changed, 110 insertions(+), 101 deletions(-) diff --git a/package.json b/package.json index 242b05afc64..b50462669d7 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "prettier": "1.13.5", "pretty-quick": "^1.11.1", "solc": "0.5.8", - "tslint": "^5.12.1", + "tslint": "^5.20.0", "jest": "^24.8.0", "ts-jest": "^24.0.2", "typescript-tslint-plugin": "^0.5.4", diff --git a/packages/celotool/src/lib/cloud-storage.ts b/packages/celotool/src/lib/cloud-storage.ts index b5e0f17e205..1dbb06c80f6 100644 --- a/packages/celotool/src/lib/cloud-storage.ts +++ b/packages/celotool/src/lib/cloud-storage.ts @@ -29,7 +29,7 @@ export const createBucketIfNotExists = async ( location: string = 'US-CENTRAL1', storageClass: string = 'COLDLINE' ) => { - if (!checkBucketExists(client, bucketName)) { + if (!(await checkBucketExists(client, bucketName))) { await createBucket(client, bucketName, location, storageClass) } } diff --git a/packages/contractkit/src/providers/celo-private-keys-subprovider.ts b/packages/contractkit/src/providers/celo-private-keys-subprovider.ts index c31b8527aa1..9c472cf7af1 100644 --- a/packages/contractkit/src/providers/celo-private-keys-subprovider.ts +++ b/packages/contractkit/src/providers/celo-private-keys-subprovider.ts @@ -72,7 +72,7 @@ export class CeloPrivateKeysWalletProvider extends PrivateKeyWalletSubprovider { const shouldPassToSuperClassForHandling = !signingRequired || this.canSign(payload.params[0].from) if (shouldPassToSuperClassForHandling) { - super.handleRequest(payload, next, end) + return super.handleRequest(payload, next, end) } else { // Pass it to the next handler to sign next() diff --git a/packages/faucet/src/database-helper.ts b/packages/faucet/src/database-helper.ts index c477a1e96fc..d078586a5a8 100644 --- a/packages/faucet/src/database-helper.ts +++ b/packages/faucet/src/database-helper.ts @@ -257,7 +257,7 @@ export class AccountPool { for (const key of accountKeys) { const lockPath = accountsSnap.child(key + '/locked') - if (!lockPath.val() && this.trySetLockField(lockPath.ref)) { + if (!lockPath.val() && (await this.trySetLockField(lockPath.ref))) { return accountsSnap.child(key) } } diff --git a/packages/faucet/src/test-driver.ts b/packages/faucet/src/test-driver.ts index 00509334e3b..c44872448a8 100644 --- a/packages/faucet/src/test-driver.ts +++ b/packages/faucet/src/test-driver.ts @@ -50,7 +50,7 @@ async function populatePool(pool: fbHelper.AccountPool) { function fakeAction(pool: fbHelper.AccountPool) { return pool.doWithAccount(async (account) => { console.log('GOT Accounts', account) - wait(5000) + await wait(5000) }) } @@ -137,8 +137,10 @@ async function main() { console.error('Failed') console.error(err) } finally { - admin.app().delete() + await admin.app().delete() } } -main() +main().catch((err) => { + console.log(err) +}) diff --git a/packages/mobile/tslint.json b/packages/mobile/tslint.json index 5a7b61b5fc3..5678fc43e83 100644 --- a/packages/mobile/tslint.json +++ b/packages/mobile/tslint.json @@ -6,6 +6,7 @@ "rules": { "no-relative-imports": true, "max-classes-per-file": [true, 2], - "no-global-arrow-functions": false + "no-global-arrow-functions": false, + "no-floating-promises": { "severity": "warning"} } } diff --git a/packages/notification-service/src/exchange/exchangeQuery.ts b/packages/notification-service/src/exchange/exchangeQuery.ts index a7c3f6cccdb..098bfd5f03c 100644 --- a/packages/notification-service/src/exchange/exchangeQuery.ts +++ b/packages/notification-service/src/exchange/exchangeQuery.ts @@ -33,8 +33,8 @@ export async function getExchangeRate(makerToken: CURRENCY_ENUM, web3Instance: W } let web3: Web3 -export function getWeb3Instance(): Web3 { - if (web3 && web3.eth.net.isListening()) { +export async function getWeb3Instance(): Promise { + if (web3 && (await web3.eth.net.isListening())) { // Already connected return web3 } else { diff --git a/packages/react-components/analytics/CeloAnalytics.tsx b/packages/react-components/analytics/CeloAnalytics.tsx index b70c5da7e56..209fb2f8d8c 100644 --- a/packages/react-components/analytics/CeloAnalytics.tsx +++ b/packages/react-components/analytics/CeloAnalytics.tsx @@ -109,15 +109,13 @@ class CeloAnalytics { return } - try { - const props = this.getProps(eventProperties) - if (attachDeviceInfo) { - _.set(props, 'device', getDeviceInfo()) - } - Analytics.track(eventName, props) - } catch (err) { - this.Logger.error(TAG, `Failed to tracking event ${eventName}`, err) + const props = this.getProps(eventProperties) + if (attachDeviceInfo) { + _.set(props, 'device', getDeviceInfo()) } + Analytics.track(eventName, props).catch((err) => { + this.Logger.error(TAG, `Failed to tracking event ${eventName}`, err) + }) } // Used with trackSubEvent and endTracking to track durations for @@ -170,12 +168,10 @@ class CeloAnalytics { return } - try { - const props = this.getProps(eventProperties) - Analytics.screen(page, props) - } catch (err) { + const props = this.getProps(eventProperties) + Analytics.screen(page, props).catch((err) => { this.Logger.error(TAG, 'Error tracking page', err) - } + }) } applyWhitelist(allProps: {}) { diff --git a/packages/typescript/package.json b/packages/typescript/package.json index 10e8f5972c0..3f2abf304b5 100644 --- a/packages/typescript/package.json +++ b/packages/typescript/package.json @@ -9,10 +9,10 @@ "build-rules": "tsc" }, "devDependencies": { - "tslint": "^5.12.1", + "tslint": "^5.20.0", "tslint-config-prettier": "^1.18.0", "tslint-eslint-rules": "^5.4.0", - "tslint-microsoft-contrib": "^5.1.0", - "tslint-react": "^3.6.0" + "tslint-microsoft-contrib": "^6.2.0", + "tslint-react": "^4.1.0" } } diff --git a/packages/typescript/tslint.json b/packages/typescript/tslint.json index 298cafef80c..190b1a6b0f0 100644 --- a/packages/typescript/tslint.json +++ b/packages/typescript/tslint.json @@ -27,6 +27,8 @@ "no-inner-declarations": [true, "functions"], "no-for-in": true, "void-zero": false, - "no-global-arrow-functions": true + "no-global-arrow-functions": true, + "no-floating-promises": true, + "no-promise-as-boolean": true } } diff --git a/packages/verifier/src/App.tsx b/packages/verifier/src/App.tsx index ea0a20d9737..4d82609fa55 100644 --- a/packages/verifier/src/App.tsx +++ b/packages/verifier/src/App.tsx @@ -135,7 +135,9 @@ const WrappedNavigator = connect( class App extends React.Component<{}, {}> { componentDidMount() { - initializeFirebase() + initializeFirebase().catch((err) => { + console.error('Failed to initialize firebase', err) + }) } hideSplashScreen() { diff --git a/packages/verifier/src/components/HomeScreen/Activity.tsx b/packages/verifier/src/components/HomeScreen/Activity.tsx index 93fdd875943..ddac7b68498 100644 --- a/packages/verifier/src/components/HomeScreen/Activity.tsx +++ b/packages/verifier/src/components/HomeScreen/Activity.tsx @@ -111,7 +111,9 @@ export class Activity extends React.Component { return } this.updateStats(data.rewards) - createMessagePhoneMapping() + createMessagePhoneMapping().catch((err) => { + console.error(`createMessagePhoneMapping() error`, err) + }) } updateStats = (rewards: Array) => { diff --git a/packages/verifier/src/components/HomeScreen/HomeScreen.tsx b/packages/verifier/src/components/HomeScreen/HomeScreen.tsx index 4021fae8593..32d9a43194d 100644 --- a/packages/verifier/src/components/HomeScreen/HomeScreen.tsx +++ b/packages/verifier/src/components/HomeScreen/HomeScreen.tsx @@ -86,20 +86,24 @@ class HomeScreen extends React.Component { } async componentDidMount() { - this.getVerifierStatus() - NetInfo.addEventListener('connectionChange', this.handleNetworkStatusChange) + try { + NetInfo.addEventListener('connectionChange', this.handleNetworkStatusChange) + if (!this.props.isVerifying && isVerifyingDisabledLongTime(this.props.verifyingOffAt)) { + setTimeout(() => this.showVerifyingOffLongMessage(), 2000) + } - /** - * Note about FCMToken: - * Because we are getting this from our custom VerifierService, there is no way to subscribe to updates - * To ensure we keep it up to date, we will retrieve it every time the home page mounts - * To avoid this, we would need to add the RN Firebase module for messaging and subscribe to its updates - */ - const fcmToken = await VerifierService.getFCMToken() - setFcmToken(fcmToken) + await this.getVerifierStatus() - if (!this.props.isVerifying && isVerifyingDisabledLongTime(this.props.verifyingOffAt)) { - setTimeout(() => this.showVerifyingOffLongMessage(), 2000) + /** + * Note about FCMToken: + * Because we are getting this from our custom VerifierService, there is no way to subscribe to updates + * To ensure we keep it up to date, we will retrieve it every time the home page mounts + * To avoid this, we would need to add the RN Firebase module for messaging and subscribe to its updates + */ + const fcmToken = await VerifierService.getFCMToken() + await setFcmToken(fcmToken) + } catch (err) { + logger.error('HomeScreen/componentDidMount', err) } } @@ -119,23 +123,27 @@ class HomeScreen extends React.Component { this.setState({ networkType: reachability.type }) } - toggleVerifyingService = () => { - const isCurrentlyVerifying = this.props.isVerifying + toggleVerifyingService = async () => { + try { + const isCurrentlyVerifying = this.props.isVerifying - // The actual service that receices the verification texts - VerifierService.toggleVerifierService(!isCurrentlyVerifying) - // The firebase which lets everyone know we are open for business - setIsVerifying(!isCurrentlyVerifying) - // The Local redux state - this.props.setVerificationState(!isCurrentlyVerifying) + // The actual service that receices the verification texts + VerifierService.toggleVerifierService(!isCurrentlyVerifying) + // The firebase which lets everyone know we are open for business + await setIsVerifying(!isCurrentlyVerifying) + // The Local redux state + this.props.setVerificationState(!isCurrentlyVerifying) - // when Turning from On to off, and its the first time (verifyingOffAt never set so null) show message - if (isCurrentlyVerifying && !this.props.verifyingOffAt) { - this.showVerifyingOffLongMessage() - } else { - this.props.clearMessage() + // when Turning from On to off, and its the first time (verifyingOffAt never set so null) show message + if (isCurrentlyVerifying && !this.props.verifyingOffAt) { + this.showVerifyingOffLongMessage() + } else { + this.props.clearMessage() + } + trackVerificationState(isCurrentlyVerifying) + } catch (err) { + logger.error('HomeScreen/toggleVerifyingService', err) } - trackVerificationState(isCurrentlyVerifying) } getVerifierStatus = async () => { diff --git a/packages/verifier/src/components/NUX/SetupAccountScreen.tsx b/packages/verifier/src/components/NUX/SetupAccountScreen.tsx index a9f1eacfb55..f1f69c16db7 100644 --- a/packages/verifier/src/components/NUX/SetupAccountScreen.tsx +++ b/packages/verifier/src/components/NUX/SetupAccountScreen.tsx @@ -82,7 +82,7 @@ class SetupAccountScreen extends React.Component { this.props.setName(name) const fcmToken = await VerifierService.getFCMToken() - setVerifier({ + await setVerifier({ name, phoneNum: e164Number, fcmToken, diff --git a/packages/verifier/src/services/Apollo.ts b/packages/verifier/src/services/Apollo.ts index 5efd7f37eea..72729b2998e 100644 --- a/packages/verifier/src/services/Apollo.ts +++ b/packages/verifier/src/services/Apollo.ts @@ -22,9 +22,12 @@ const fragmentMatcher = new IntrospectionFragmentMatcher({ const cache = new InMemoryCache({ fragmentMatcher }) +// TODO what should happen if this fails??? persistCache({ cache, storage: AsyncStorage, +}).catch((err) => { + console.error('Apollo.persistCache error', err) }) export const apolloClient = new ApolloClient({ diff --git a/packages/verifier/src/services/FirebaseDb.ts b/packages/verifier/src/services/FirebaseDb.ts index f728cd1a1c6..43e4effc5c8 100644 --- a/packages/verifier/src/services/FirebaseDb.ts +++ b/packages/verifier/src/services/FirebaseDb.ts @@ -52,29 +52,29 @@ const getUserUID = () => { return user.uid } -export const setVerifier = (newVerifier: Verifier) => { +export const setVerifier = async (newVerifier: Verifier) => { try { const uid = getUserUID() const verifierRef = getVerifierRef(uid) logger.info(tag, 'Updating verifier in Firebase') - verifierRef.set(newVerifier) + await verifierRef.set(newVerifier) } catch (error) { logger.error(tag, 'Failed to save verifier data to FirebaseDb', error) } } -export const setIsVerifying = (isVerifying: boolean) => { +export const setIsVerifying = async (isVerifying: boolean) => { if (!verifier) { return } - setVerifier({ ...verifier, isVerifying }) + await setVerifier({ ...verifier, isVerifying }) } -export const setFcmToken = (fcmToken: string) => { +export const setFcmToken = async (fcmToken: string) => { if (!verifier) { return } - setVerifier({ ...verifier, fcmToken }) + await setVerifier({ ...verifier, fcmToken }) } const getVerifierRef = (uid: string) => { diff --git a/yarn.lock b/yarn.lock index 1e77b1107f6..29a6ac69301 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7020,7 +7020,7 @@ axios@^0.18.0: follow-redirects "^1.3.0" is-buffer "^1.1.5" -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= @@ -11444,7 +11444,7 @@ diff@3.3.1: resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" integrity sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww== -diff@3.5.0, diff@^3.2.0, diff@^3.5.0: +diff@3.5.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== @@ -18548,14 +18548,6 @@ js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.7.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" - integrity sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - jsan@^3.1.5, jsan@^3.1.9: version "3.1.9" resolved "https://registry.yarnpkg.com/jsan/-/jsan-3.1.9.tgz#2705676c1058f0a7d9ac266ad036a5769cfa7c96" @@ -29924,64 +29916,58 @@ tslint-eslint-rules@^5.4.0: tslib "1.9.0" tsutils "^3.0.0" -tslint-microsoft-contrib@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz#a6286839f800e2591d041ea2800c77487844ad81" - integrity sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA== +tslint-microsoft-contrib@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tslint-microsoft-contrib/-/tslint-microsoft-contrib-6.2.0.tgz#8aa0f40584d066d05e6a5e7988da5163b85f2ad4" + integrity sha512-6tfi/2tHqV/3CL77pULBcK+foty11Rr0idRDxKnteTaKm6gWF9qmaCNU17HVssOuwlYNyOmd9Jsmjd+1t3a3qw== dependencies: tsutils "^2.27.2 <2.29.0" -tslint-react@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-3.6.0.tgz#7f462c95c4a0afaae82507f06517ff02942196a1" - integrity sha512-AIv1QcsSnj7e9pFir6cJ6vIncTqxfqeFF3Lzh8SuuBljueYzEAtByuB6zMaD27BL0xhMEqsZ9s5eHuCONydjBw== +tslint-react@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-4.1.0.tgz#7153b724a8cfbea52423d0ffa469e8eba3bcc834" + integrity sha512-Y7CbFn09X7Mpg6rc7t/WPbmjx9xPI8p1RsQyiGCLWgDR6sh3+IBSlT+bEkc0PSZcWwClOkqq2wPsID8Vep6szQ== dependencies: - tsutils "^2.13.1" + tsutils "^3.9.1" -tslint@^5.12.1: - version "5.12.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.12.1.tgz#8cec9d454cf8a1de9b0a26d7bdbad6de362e52c1" - integrity sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw== +tslint@^5.20.0: + version "5.20.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.0.tgz#fac93bfa79568a5a24e7be9cdde5e02b02d00ec1" + integrity sha512-2vqIvkMHbnx8acMogAERQ/IuINOq6DFqgF8/VDvhEkBqQh/x6SP0Y+OHnKth9/ZcHQSroOZwUQSN18v8KKF0/g== dependencies: - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" chalk "^2.3.0" commander "^2.12.1" - diff "^3.2.0" + diff "^4.0.1" glob "^7.1.1" - js-yaml "^3.7.0" + js-yaml "^3.13.1" minimatch "^3.0.4" + mkdirp "^0.5.1" resolve "^1.3.2" semver "^5.3.0" tslib "^1.8.0" - tsutils "^2.27.2" + tsutils "^2.29.0" tsscmp@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== -tsutils@^2.13.1: - version "2.26.2" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.26.2.tgz#a9f9f63434a456a5e0c95a45d9a59181cb32d3bf" - integrity sha512-uzwnhmrSbyinPCiwfzGsOY3IulBTwoky7r83HmZdz9QNCjhSCzavkh47KLWuU0zF2F2WbpmmzoJUIEiYyd+jEQ== +"tsutils@^2.27.2 <2.29.0": + version "2.28.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.28.0.tgz#6bd71e160828f9d019b6f4e844742228f85169a1" + integrity sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA== dependencies: tslib "^1.8.1" -tsutils@^2.27.2: +tsutils@^2.29.0: version "2.29.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== dependencies: tslib "^1.8.1" -"tsutils@^2.27.2 <2.29.0": - version "2.28.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.28.0.tgz#6bd71e160828f9d019b6f4e844742228f85169a1" - integrity sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA== - dependencies: - tslib "^1.8.1" - tsutils@^3.0.0: version "3.10.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.10.0.tgz#6f1c95c94606e098592b0dff06590cf9659227d6" @@ -29989,6 +29975,13 @@ tsutils@^3.0.0: dependencies: tslib "^1.8.1" +tsutils@^3.9.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + tty-aware-progress@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tty-aware-progress/-/tty-aware-progress-1.0.3.tgz#93fbe86caf0d79c35f6e104e08f3a56c5069d3d6"