From ea7ecec7a3af9d8e3e693b757b3aa4272c9c1b4f Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Thu, 31 Jan 2019 20:46:56 +0100 Subject: [PATCH] Fix derive not returning (needsSubscription issues) (#658) Fix derive not subscribing (needsSubscription issues) --- .../promise/01_simple_connect/package.json | 4 ++-- .../promise/02_listen_to_blocks/package.json | 2 +- .../03_listen_to_balance_change/package.json | 2 +- docs/examples/promise/04_unsubscribe/package.json | 2 +- docs/examples/promise/05_read_storage/package.json | 2 +- .../examples/promise/06_make_transfer/package.json | 2 +- .../examples/promise/08_system_events/package.json | 2 +- .../promise/09_transfer_events/package.json | 2 +- .../examples/promise/10_upgrade_chain/package.json | 2 +- packages/api/src/Base.ts | 14 +++++++++++++- packages/api/test/e2e/promise-queries.spec.js | 13 ++++++++++++- 11 files changed, 35 insertions(+), 12 deletions(-) diff --git a/docs/examples/promise/01_simple_connect/package.json b/docs/examples/promise/01_simple_connect/package.json index d5e2f5283a..82dfad0ae6 100644 --- a/docs/examples/promise/01_simple_connect/package.json +++ b/docs/examples/promise/01_simple_connect/package.json @@ -11,8 +11,8 @@ }, "dependencies": { - "@polkadot/api": "^0.38.6", - "@polkadot/rpc-provider": "^0.38.6" + "@polkadot/api": "0.42.1", + "@polkadot/rpc-provider": "0.42.1" }, "devDependencies": { "rimraf": "^2.6.2" diff --git a/docs/examples/promise/02_listen_to_blocks/package.json b/docs/examples/promise/02_listen_to_blocks/package.json index 614d535ba6..c8a8d6c5bc 100644 --- a/docs/examples/promise/02_listen_to_blocks/package.json +++ b/docs/examples/promise/02_listen_to_blocks/package.json @@ -10,7 +10,7 @@ "start": "node index.js" }, "dependencies": { - "@polkadot/api": "^0.38.6" + "@polkadot/api": "0.42.1" }, "devDependencies": { "rimraf": "^2.6.2" diff --git a/docs/examples/promise/03_listen_to_balance_change/package.json b/docs/examples/promise/03_listen_to_balance_change/package.json index f832cf9f3a..5e2a775a7b 100644 --- a/docs/examples/promise/03_listen_to_balance_change/package.json +++ b/docs/examples/promise/03_listen_to_balance_change/package.json @@ -10,7 +10,7 @@ "start": "node index.js" }, "dependencies": { - "@polkadot/api": "^0.38.6" + "@polkadot/api": "^0.42.1" }, "devDependencies": { "rimraf": "^2.6.2" diff --git a/docs/examples/promise/04_unsubscribe/package.json b/docs/examples/promise/04_unsubscribe/package.json index a9599381bf..016663f7ec 100644 --- a/docs/examples/promise/04_unsubscribe/package.json +++ b/docs/examples/promise/04_unsubscribe/package.json @@ -10,7 +10,7 @@ "start": "node index.js" }, "dependencies": { - "@polkadot/api": "^0.38.6" + "@polkadot/api": "^0.42.1" }, "devDependencies": { "rimraf": "^2.6.2" diff --git a/docs/examples/promise/05_read_storage/package.json b/docs/examples/promise/05_read_storage/package.json index 5ab6e26688..fe9f9f9449 100644 --- a/docs/examples/promise/05_read_storage/package.json +++ b/docs/examples/promise/05_read_storage/package.json @@ -10,7 +10,7 @@ "start": "node index.js" }, "dependencies": { - "@polkadot/api": "^0.38.6" + "@polkadot/api": "^0.42.1" }, "devDependencies": { "rimraf": "^2.6.2" diff --git a/docs/examples/promise/06_make_transfer/package.json b/docs/examples/promise/06_make_transfer/package.json index 5496969668..07d9d32bc1 100644 --- a/docs/examples/promise/06_make_transfer/package.json +++ b/docs/examples/promise/06_make_transfer/package.json @@ -10,7 +10,7 @@ "start": "node index.js" }, "dependencies": { - "@polkadot/api": "^0.38.6" + "@polkadot/api": "^0.42.1" }, "devDependencies": { "rimraf": "^2.6.2" diff --git a/docs/examples/promise/08_system_events/package.json b/docs/examples/promise/08_system_events/package.json index 33df7e29e5..638cfb71df 100644 --- a/docs/examples/promise/08_system_events/package.json +++ b/docs/examples/promise/08_system_events/package.json @@ -10,7 +10,7 @@ "start": "node index.js" }, "dependencies": { - "@polkadot/api": "^0.38.6" + "@polkadot/api": "^0.42.1" }, "devDependencies": { "rimraf": "^2.6.2" diff --git a/docs/examples/promise/09_transfer_events/package.json b/docs/examples/promise/09_transfer_events/package.json index 0e85d8233e..6d724a9cf9 100644 --- a/docs/examples/promise/09_transfer_events/package.json +++ b/docs/examples/promise/09_transfer_events/package.json @@ -13,6 +13,6 @@ "@polkadot/api": "^0.38.6" }, "devDependencies": { - "rimraf": "^2.6.2" + "rimraf": "^0.42.1" } } diff --git a/docs/examples/promise/10_upgrade_chain/package.json b/docs/examples/promise/10_upgrade_chain/package.json index f2a7116dda..bfcd617f9b 100644 --- a/docs/examples/promise/10_upgrade_chain/package.json +++ b/docs/examples/promise/10_upgrade_chain/package.json @@ -10,7 +10,7 @@ "start": "node index.js" }, "dependencies": { - "@polkadot/api": "^0.38.6" + "@polkadot/api": "^0.42.1" }, "devDependencies": { "rimraf": "^2.6.2" diff --git a/packages/api/src/Base.ts b/packages/api/src/Base.ts index 506938ffa5..4e58afdd67 100644 --- a/packages/api/src/Base.ts +++ b/packages/api/src/Base.ts @@ -480,7 +480,19 @@ export default abstract class ApiBase implement const sectionName = _sectionName as keyof DeriveInterface; result[sectionName] = Object.keys(derive[sectionName]).reduce((section, methodName) => { - const method = (...params: any[]) => onCall((derive[sectionName] as any)[methodName], params); + // FIXME The callback extraction we do way too much - de-dupe + const method = (...args: Array) => { + let callback: CodecCallback | undefined; + let params = args; + + if (args.length && isFunction(args[args.length - 1])) { + callback = args[args.length - 1]; + params = args.slice(0, args.length - 1); + } + + return onCall((derive[sectionName] as any)[methodName], params, callback, !!callback); + }; + section[methodName] = method; return section; diff --git a/packages/api/test/e2e/promise-queries.spec.js b/packages/api/test/e2e/promise-queries.spec.js index 565be9d82c..8ec90183c8 100644 --- a/packages/api/test/e2e/promise-queries.spec.js +++ b/packages/api/test/e2e/promise-queries.spec.js @@ -13,7 +13,10 @@ describe.skip('e2e queries', () => { let api; beforeEach(async (done) => { - api = await Api.create(); + if (!api) { + api = await Api.create(); + } + jest.setTimeout(30000); done(); }); @@ -44,6 +47,14 @@ describe.skip('e2e queries', () => { }); }); + it('subscribes to derive', (done) => { + api.derive.chain.subscribeNewHead((header) => { + expect(header.blockNumber.isZero()).toBe(false); + + done(); + }); + }); + it('subscribes to queries', (done) => { api.query.system.accountNonce(keyring.ferdie.address(), (nonce) => { expect(nonce instanceof BN).toBe(true);