From 78101e1292cfeba29a82933b23b2b0116a387257 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Fri, 12 Oct 2018 15:39:00 +0200 Subject: [PATCH] Update subscription naming handling (#266) --- packages/api-observable/src/Base.ts | 2 +- packages/api-observable/src/Calls.ts | 6 +++--- packages/api/README.md | 4 ++-- packages/api/src/Base.ts | 4 ++-- .../api/src/promise/SubmittableExtrinsic.ts | 2 +- packages/api/src/promise/index.ts | 6 +++--- packages/api/src/rx/SubmittableExtrinsic.ts | 2 +- packages/api/src/rx/index.ts | 6 +++--- packages/api/test/e2e/promise-queries.spec.js | 2 +- packages/rpc-core/README.md | 10 +++------ packages/rpc-core/src/formatting.spec.js | 2 +- packages/rpc-core/src/index.ts | 21 ++++++++++++------- packages/rpc-core/src/methodSend.spec.js | 8 ++++--- packages/rpc-core/test/e2e/chain.test.js | 8 ++----- .../rpc-core/test/e2e/krummelanke.test.js | 8 ++----- packages/rpc-core/test/e2e/subscribe.test.js | 6 +----- packages/rpc-provider/src/mock/mocks.ts | 2 +- packages/rpc-provider/src/mock/state.spec.js | 2 +- .../rpc-provider/src/mock/subscribe.spec.js | 12 +++++------ .../rpc-provider/src/mock/unsubscribe.spec.js | 12 +++++------ packages/rpc-provider/src/ws/index.ts | 4 ++-- packages/rpc-rx/test/e2e/subscribe.test.js | 4 ++-- .../type-extrinsics/test/e2e/transfer.spec.js | 2 +- packages/type-jsonrpc/src/author.ts | 14 ++++++------- packages/type-jsonrpc/src/chain.ts | 13 ++++++------ packages/type-jsonrpc/src/create/method.ts | 6 +++--- packages/type-jsonrpc/src/state.ts | 13 ++++++------ packages/type-jsonrpc/src/types.d.ts | 4 ++-- 28 files changed, 90 insertions(+), 95 deletions(-) diff --git a/packages/api-observable/src/Base.ts b/packages/api-observable/src/Base.ts index 6d36d5f7c8..c6addfd1cb 100644 --- a/packages/api-observable/src/Base.ts +++ b/packages/api-observable/src/Base.ts @@ -120,7 +120,7 @@ export default class ApiBase { let observable; try { - observable = this._api.state.storage(keys); + observable = this._api.state.subscribeStorage(keys); } catch (error) { observable = EMPTY; } diff --git a/packages/api-observable/src/Calls.ts b/packages/api-observable/src/Calls.ts index de7fdcf70b..1f7f5591de 100644 --- a/packages/api-observable/src/Calls.ts +++ b/packages/api-observable/src/Calls.ts @@ -12,7 +12,7 @@ import ApiQueries from './Queries'; export default class ApiCalls extends ApiQueries { bestNumber = (): Observable => { return this - .newHead() + .subscribeNewHead() .pipe( map((header?: Header): BlockNumber | undefined => header && header.blockNumber @@ -30,8 +30,8 @@ export default class ApiCalls extends ApiQueries { return this._api.chain.getBlock(hash); } - newHead = (): Observable
=> { - return this._api.chain.newHead().pipe( + subscribeNewHead = (): Observable
=> { + return this._api.chain.subscribeNewHead().pipe( defaultIfEmpty() ); } diff --git a/packages/api/README.md b/packages/api/README.md index 4db2d840aa..aafa8a0e0a 100644 --- a/packages/api/README.md +++ b/packages/api/README.md @@ -40,7 +40,7 @@ import { ApiPromise } from '@polkadot/api'; const api = await ApiPromise.create(); // make a call to retrieve the current network head -api.rpc.chain.newHead((header) => { +api.rpc.chain.subscribeNewHead((header) => { console.log(`Chain is at #${header.blockNumber}`); }); ``` @@ -54,7 +54,7 @@ import { ApiRx } from '@polkadot/api'; const api = await ApiRx.create().toPromise(); // make a call to retrieve the current network head -api.rpc.chain.newHead().subscribe((header) => { +api.rpc.chain.subscribeNewHead().subscribe((header) => { console.log(`Chain is at #${header.blockNumber}`); }); ``` diff --git a/packages/api/src/Base.ts b/packages/api/src/Base.ts index d00b729bb2..482ed34eb9 100644 --- a/packages/api/src/Base.ts +++ b/packages/api/src/Base.ts @@ -51,7 +51,7 @@ export default abstract class ApiBase implements ApiBaseInterface { - * api.rpc.newHead().subscribe((header) => { + * api.rpc.subscribeNewHead().subscribe((header) => { * console.log(`new block #${header.blockNumber.toNumber()}`); * }); * }); @@ -102,7 +102,7 @@ export default abstract class ApiBase implements ApiBaseInterface { * console.log('new header', header); * }); diff --git a/packages/api/src/promise/SubmittableExtrinsic.ts b/packages/api/src/promise/SubmittableExtrinsic.ts index 141ff94555..1c9b3b194e 100644 --- a/packages/api/src/promise/SubmittableExtrinsic.ts +++ b/packages/api/src/promise/SubmittableExtrinsic.ts @@ -19,7 +19,7 @@ export default class SubmittableExtrinsic extends Extrinsic { send (statusCb?: (status: ExtrinsicStatus) => any): Promise { if (status) { - return this._api.rpc.author.extrinsicUpdate(this, statusCb); + return this._api.rpc.author.submitAndWatchExtrinsic(this, statusCb); } return this._api.rpc.author.submitExtrinsic(this); diff --git a/packages/api/src/promise/index.ts b/packages/api/src/promise/index.ts index a9b6fa661a..52444b5cab 100644 --- a/packages/api/src/promise/index.ts +++ b/packages/api/src/promise/index.ts @@ -41,7 +41,7 @@ import { StorageFunction } from '@polkadot/types/StorageKey'; * const api = await ApiPromise.create(); * * // make a subscription to the network head - * api.rpc.chain.newHead((header) => { + * api.rpc.chain.subscribeNewHead((header) => { * console.log(`Chain is at #${header.blockNumber}`); * }); * ``` @@ -138,7 +138,7 @@ export default class ApiPromise extends ApiBase { - * api.rpc.newHead((header) => { + * api.rpc.subscribeNewHead((header) => { * console.log(`new block #${header.blockNumber.toNumber()}`); * }); * }); @@ -206,7 +206,7 @@ export default class ApiPromise extends ApiBase = []) => args[args.length - 1](result[0]) diff --git a/packages/api/src/rx/SubmittableExtrinsic.ts b/packages/api/src/rx/SubmittableExtrinsic.ts index 7825c80031..fb5a783563 100644 --- a/packages/api/src/rx/SubmittableExtrinsic.ts +++ b/packages/api/src/rx/SubmittableExtrinsic.ts @@ -19,7 +19,7 @@ export default class SubmittableExtrinsic extends Extrinsic { } send (): Observable { - return this._api.rpc.author.extrinsicUpdate(this); + return this._api.rpc.author.submitAndWatchExtrinsic(this); } sign (signerPair: KeyringPair, nonce: AnyNumber, blockHash?: AnyU8a): SubmittableExtrinsic { diff --git a/packages/api/src/rx/index.ts b/packages/api/src/rx/index.ts index 9c73d41af6..7637f6678e 100644 --- a/packages/api/src/rx/index.ts +++ b/packages/api/src/rx/index.ts @@ -46,7 +46,7 @@ const l = logger('api-rx'); * const api = await ApiRx.create().toPromise(); * * // make a call to retrieve the current network head - * api.rpc.chain.newHead().subscribe((header) => { + * api.rpc.chain.subscribeNewHead().subscribe((header) => { * console.log(`Chain is at #${header.blockNumber}`); * }); * ``` @@ -154,7 +154,7 @@ export default class ApiRx extends ApiBase { - * api.rpc.newHead().subscribe((header) => { + * api.rpc.subscribeNewHead().subscribe((header) => { * console.log(`new block #${header.blockNumber.toNumber()}`); * }); * }); @@ -231,7 +231,7 @@ export default class ApiRx extends ApiBase { }); it('subscribes to queries', (done) => { - api.rpc.chain.newHead((error, header) => { + api.rpc.chain.subscribeNewHead((error, header) => { expect(error).toBe(null); expect(header.blockNumber.isZero()).toBe(false); diff --git a/packages/rpc-core/README.md b/packages/rpc-core/README.md index 02f1c84421..72c2c674ba 100644 --- a/packages/rpc-core/README.md +++ b/packages/rpc-core/README.md @@ -53,17 +53,13 @@ Retrieving best header via subscription - ```js api.chain - .newHead((error, header) => { - if (error) { - console.error('error:', error); - } - - console.log(`best #${header.blockNumber.toString()}`); + .subscribeNewHead((header) => { + console.log(`best #${header.blockNumber}`); }) .then((subscriptionId) => { console.log(`subscriptionId: ${subscriptionId}`); // id for the subscription, can unsubscribe via - // api.chain.newHead.unsubscribe(subscriptionId); + // api.chain.subscribeNewHead.unsubscribe(subscriptionId); }) .catch((error) => { console.error('error subscribing:', error); diff --git a/packages/rpc-core/src/formatting.spec.js b/packages/rpc-core/src/formatting.spec.js index 0d70b3b373..02f2df41bc 100644 --- a/packages/rpc-core/src/formatting.spec.js +++ b/packages/rpc-core/src/formatting.spec.js @@ -52,7 +52,7 @@ describe('formatting', () => { it('encodes multiple keys, decoding multiple results', (done) => { api.state - .storage( + .subscribeStorage( [ [storage.balances.freeBalance, ADDR_ONE], [storage.balances.freeBalance, ADDR_TWO] diff --git a/packages/rpc-core/src/index.ts b/packages/rpc-core/src/index.ts index 7e83adddbf..fb22833a18 100644 --- a/packages/rpc-core/src/index.ts +++ b/packages/rpc-core/src/index.ts @@ -87,18 +87,20 @@ export default class Rpc implements RpcInterface { return Object .keys(methods) .reduce((exposed, method) => { - const rpcName = `${section}_${method}`; + const def = methods[method]; exposed[method] = def.isSubscription - ? this.createMethodSubscribe(rpcName, def) - : this.createMethodSend(rpcName, def); + ? this.createMethodSubscribe(def) + : this.createMethodSend(def); return exposed; }, {} as RpcInterface$Section); } - private createMethodSend (rpcName: string, method: RpcMethod): RpcInterface$Section$Method { + private createMethodSend (method: RpcMethod): RpcInterface$Section$Method { + const rpcName = `${method.section}_${method.method}`; + const call = async (...values: Array): Promise => { // TODO Warn on deprecated methods try { @@ -119,9 +121,14 @@ export default class Rpc implements RpcInterface { return call as RpcInterface$Section$Method; } - private createMethodSubscribe (rpcName: string, method: RpcMethod): RpcInterface$Section$Method { + private createMethodSubscribe (method: RpcMethod): RpcInterface$Section$Method { + const [updateType, subMethod, unsubMethod] = method.pubsub; + const subName = `${method.section}_${subMethod}`; + const unsubName = `${method.section}_${unsubMethod}`; + const subscriptionType = `${method.section}_${updateType}`; + const unsubscribe = (subscriptionId: any): Promise => - this._provider.unsubscribe(rpcName, method.subscribe[1], subscriptionId); + this._provider.unsubscribe(subscriptionType, unsubName, subscriptionId); const _call = async (...values: Array): Promise => { try { const cb: ProviderInterface$Callback = values.pop(); @@ -139,7 +146,7 @@ export default class Rpc implements RpcInterface { cb(this.formatOutput(method, params, result)); }; - return this._provider.subscribe(rpcName, method.subscribe[0], paramsJson, update); + return this._provider.subscribe(subscriptionType, subName, paramsJson, update); } catch (error) { const message = `${Rpc.signature(method)}:: ${error.message}`; diff --git a/packages/rpc-core/src/methodSend.spec.js b/packages/rpc-core/src/methodSend.spec.js index d11736e06f..0ba08cdae2 100644 --- a/packages/rpc-core/src/methodSend.spec.js +++ b/packages/rpc-core/src/methodSend.spec.js @@ -16,11 +16,13 @@ describe('methodSend', () => { params: [ { name: 'foo', type: 'Bytes' } ], + section: 'test', type: 'Bytes' }, bleh: { method: 'bleh', params: [], + section: 'test', type: 'Bytes' } }; @@ -35,7 +37,7 @@ describe('methodSend', () => { }); it('wraps errors with the call signature', () => { - const method = api.createMethodSend('test_blah', methods.blah); + const method = api.createMethodSend(methods.blah); return method().catch((error) => { expect(error.message).toMatch(/blah \(foo: Bytes\): Bytes/); @@ -43,7 +45,7 @@ describe('methodSend', () => { }); it('checks for mismatched parameters', () => { - const method = api.createMethodSend('test_bleh', methods.bleh); + const method = api.createMethodSend(methods.bleh); return method(1).catch((error) => { expect(error.message).toMatch(/parameters, 1 found instead/); @@ -51,7 +53,7 @@ describe('methodSend', () => { }); it('calls the provider with the correct parameters', () => { - const method = api.createMethodSend('test_blah', methods.blah); + const method = api.createMethodSend(methods.blah); // Args are length-prefixed, because it's a Bytes return method(new Uint8Array([2 << 2, 0x12, 0x34])).then(() => { diff --git a/packages/rpc-core/test/e2e/chain.test.js b/packages/rpc-core/test/e2e/chain.test.js index d5ead09bf6..b75a1fb8b9 100644 --- a/packages/rpc-core/test/e2e/chain.test.js +++ b/packages/rpc-core/test/e2e/chain.test.js @@ -14,16 +14,12 @@ describe.skip('e2e chain', () => { api = new Rpc(new Ws('ws://127.0.0.1:9944')); }); - it('subscribes to chain_newHead', (done) => { + it('subscribes via subscribeNewHead', (done) => { let count = 0; // tslint:disable-next-line api.chain - .newHead((error, header) => { - if (error) { - return done(error); - } - + .subscribeNewHead((header) => { expect(header).toBeDefined(); if (++count === 3) { diff --git a/packages/rpc-core/test/e2e/krummelanke.test.js b/packages/rpc-core/test/e2e/krummelanke.test.js index c078af8d42..b1a54c000a 100644 --- a/packages/rpc-core/test/e2e/krummelanke.test.js +++ b/packages/rpc-core/test/e2e/krummelanke.test.js @@ -22,11 +22,7 @@ describe.skip('e2e krumme lanke', () => { [storage.system.accountNonce, '5Ejbye9R8ygByQPrDSasaUid1munedPZUmg4f118HGmtodGp'], [storage.balances.freeBalance, '5DTestUPts3kjeXSTMyerHihn1uwMfLj8vU8sqF7qYrFacT7'] ], - (error, data) => { - if (error) { - return done(error); - } - + (data) => { expect(data).toHaveLength(2); expect(data[0].toNumber()).toEqual(0); expect(data[1].toNumber()).not.toEqual(0); @@ -35,7 +31,7 @@ describe.skip('e2e krumme lanke', () => { } ) .then((subscriptionId) => { - console.log('newHead: subscriptionId =', subscriptionId); + console.log('stoarge subscriptionId =', subscriptionId); }); }); diff --git a/packages/rpc-core/test/e2e/subscribe.test.js b/packages/rpc-core/test/e2e/subscribe.test.js index 11faddf0c5..107097a31e 100644 --- a/packages/rpc-core/test/e2e/subscribe.test.js +++ b/packages/rpc-core/test/e2e/subscribe.test.js @@ -19,11 +19,7 @@ describe.skip('e2e subscriptions', () => { let count = 0; return api.state - .storage([[storage.timestamp.now]], (error, data) => { - if (error) { - return done(error); - } - + .subscribeStorage([[storage.timestamp.now]], (data) => { expect(data).toBeDefined(); if (++count === 3) { diff --git a/packages/rpc-provider/src/mock/mocks.ts b/packages/rpc-provider/src/mock/mocks.ts index b5b0193622..9bf25eca88 100644 --- a/packages/rpc-provider/src/mock/mocks.ts +++ b/packages/rpc-provider/src/mock/mocks.ts @@ -79,6 +79,6 @@ export default function mocks ({ emitter, db, subscriptions }: MockState): void setStorageBn(db, storage.timestamp.now, Math.floor(Date.now() / 1000)); - updateSubs(subscriptions, 'chain_newHead', new Header(newHead).toJSON()); + updateSubs(subscriptions, 'chain_subscribeNewHead', new Header(newHead).toJSON()); }, 5000); } diff --git a/packages/rpc-provider/src/mock/state.spec.js b/packages/rpc-provider/src/mock/state.spec.js index 795b68544f..efacff035d 100644 --- a/packages/rpc-provider/src/mock/state.spec.js +++ b/packages/rpc-provider/src/mock/state.spec.js @@ -24,7 +24,7 @@ describe('state', () => { expect( state.subscriptions ).toMatchObject({ - 'chain_newHead': { + 'chain_subscribeNewHead': { callbacks: {}, lastValue: null } diff --git a/packages/rpc-provider/src/mock/subscribe.spec.js b/packages/rpc-provider/src/mock/subscribe.spec.js index 34fd6095e5..f68a3b6dd1 100644 --- a/packages/rpc-provider/src/mock/subscribe.spec.js +++ b/packages/rpc-provider/src/mock/subscribe.spec.js @@ -19,7 +19,7 @@ describe('subscribe', () => { }); it('returns a subscription id', () => { - return subscribe(state, 'chain_newHead', 'chain_newHead', [() => void 0]).then((id) => { + return subscribe(state, 'chain_newHead', 'chain_subscribeNewHead', [() => void 0]).then((id) => { expect(id).toEqual(state.subscriptionId); }); }); @@ -27,16 +27,16 @@ describe('subscribe', () => { it('stores the mapping values', () => { const cb = () => void 0; - return subscribe(state, 'chain_newHead', 'chain_newHead', [cb]).then((id) => { - expect(state.subscriptionMap[id]).toEqual('chain_newHead'); - expect(state.subscriptions['chain_newHead'].callbacks[id]).toEqual(cb); + return subscribe(state, 'chain_newHead', 'chain_subscribeNewHead', [cb]).then((id) => { + expect(state.subscriptionMap[id]).toEqual('chain_subscribeNewHead'); + expect(state.subscriptions['chain_subscribeNewHead'].callbacks[id]).toEqual(cb); }); }); it('calls back with the last known value', (done) => { - state.subscriptions['chain_newHead'].lastValue = 'testValue'; + state.subscriptions['chain_subscribeNewHead'].lastValue = 'testValue'; - subscribe(state, 'chain_newHead', 'chain_newHead', [(_, value) => { + subscribe(state, 'chain_newHead', 'chain_subscribeNewHead', [(_, value) => { expect(value).toEqual('testValue'); done(); }]); diff --git a/packages/rpc-provider/src/mock/unsubscribe.spec.js b/packages/rpc-provider/src/mock/unsubscribe.spec.js index 544736717d..5039885561 100644 --- a/packages/rpc-provider/src/mock/unsubscribe.spec.js +++ b/packages/rpc-provider/src/mock/unsubscribe.spec.js @@ -13,23 +13,23 @@ describe('unsubscribe', () => { beforeEach(() => { state = createState(); - return subscribe(state, 'chain_newHead', 'chain_newHead', [() => void 0]).then((_id) => { + return subscribe(state, 'chain_newHead', 'chain_subscribeNewHead', [() => void 0]).then((_id) => { id = _id; }); }); it('fails on unknown ids', () => { - return unsubscribe(state, 'chain_newHead', 'chain_newHead', 5).catch((error) => { + return unsubscribe(state, 'chain_newHead', 'chain_subscribeNewHead', 5).catch((error) => { expect(error.message).toMatch(/Unable to find/); }); }); it('unsubscribes successfully', () => { - return unsubscribe(state, 'chain_newHead', 'chain_newHead', id); + return unsubscribe(state, 'chain_newHead', 'chain_subscribeNewHead', id); }); it('fails on double unsubscribe', () => { - return unsubscribe(state, 'chain_newHead', 'chain_newHead', id) + return unsubscribe(state, 'chain_newHead', 'chain_subscribeNewHead', id) .then(() => unsubscribe(state, id)) .catch((error) => { expect(error.message).toMatch(/Unable to find/); @@ -37,9 +37,9 @@ describe('unsubscribe', () => { }); it('clears the subscriptions', () => { - return unsubscribe(state, 'chain_newHead', 'chain_newHead', id).then(() => { + return unsubscribe(state, 'chain_newHead', 'chain_subscribeNewHead', id).then(() => { expect(state.subscriptionMap[id]).not.toBeDefined(); - expect(state.subscriptions['chain_newHead'].callbacks[id]).not.toBeDefined(); + expect(state.subscriptions['chain_subscribeNewHead'].callbacks[id]).not.toBeDefined(); }); }); }); diff --git a/packages/rpc-provider/src/ws/index.ts b/packages/rpc-provider/src/ws/index.ts index 1e07bcfbf0..24841504b3 100644 --- a/packages/rpc-provider/src/ws/index.ts +++ b/packages/rpc-provider/src/ws/index.ts @@ -186,9 +186,9 @@ export default class WsProvider implements WSProviderInterface { * * ```javascript * const provider = new WsProvider('ws://127.0.0.1:9944'); - * const api = new Rpc(provider); + * const rpc = new Rpc(provider); * - * api.state.storage([[storage.balances.freeBalance,
]], (_, values) => { + * rpc.state.subscribeStorage([[storage.balances.freeBalance,
]], (_, values) => { * console.log(values) * }).then((subscriptionId) => { * console.log('balance changes subscription id: ', subscriptionId) diff --git a/packages/rpc-rx/test/e2e/subscribe.test.js b/packages/rpc-rx/test/e2e/subscribe.test.js index e2176c5bb9..4c6802f07f 100644 --- a/packages/rpc-rx/test/e2e/subscribe.test.js +++ b/packages/rpc-rx/test/e2e/subscribe.test.js @@ -20,7 +20,7 @@ describe.skip('e2e subscriptions', () => { let count = 0; api.state - .storage([[storage.timestamp.now]]) + .subscribeStorage([[storage.timestamp.now]]) .subscribe((data) => { console.error('timestamp.now', data); @@ -32,7 +32,7 @@ describe.skip('e2e subscriptions', () => { it('retrieves multiple values', (done) => { api.state - .storage([ + .subscribeStorage([ [storage.timestamp.now], [storage.session.sessionLength], [storage.staking.sessionsPerEra] diff --git a/packages/type-extrinsics/test/e2e/transfer.spec.js b/packages/type-extrinsics/test/e2e/transfer.spec.js index 66e0ef25b7..f513a5ea64 100644 --- a/packages/type-extrinsics/test/e2e/transfer.spec.js +++ b/packages/type-extrinsics/test/e2e/transfer.spec.js @@ -45,7 +45,7 @@ describe.skip('e2e transfer', () => { extrinsic.sign(keyring.alice, 0, genesisHash); - return api.author.extrinsicUpdate(extrinsic, (status) => { + return api.author.submitAndWatchExtrinsic(extrinsic, (status) => { console.log(status); if (status.type === 'Finalised') { diff --git a/packages/type-jsonrpc/src/author.ts b/packages/type-jsonrpc/src/author.ts index 3bc48374cc..97a15d920b 100644 --- a/packages/type-jsonrpc/src/author.ts +++ b/packages/type-jsonrpc/src/author.ts @@ -22,17 +22,17 @@ const submitExtrinsic: RpcMethodOpt = { type: 'Hash' }; -const extrinsicUpdate: RpcMethodOpt = { +const submitAndWatchExtrinsic: RpcMethodOpt = { description: 'Subscribe and watch an extrinsic until unsubscribed', isSigned: true, - isSubscription: true, - subscribe: [ - 'author_submitAndWatchExtrinsic', - 'author_unwatchExtrinsic' - ], params: [ createParam('extinsic', 'Extrinsic') ], + pubsub: [ + 'extrinsicUpdate', + 'submitAndWatchExtrinsic', + 'unwatchExtrinsic' + ], type: 'ExtrinsicStatus' }; @@ -49,6 +49,6 @@ export default { methods: { pendingExtrinsics: createMethod(section, 'pendingExtrinsics', pendingExtrinsics), submitExtrinsic: createMethod(section, 'submitExtrinsic', submitExtrinsic), - extrinsicUpdate: createMethod(section, 'extrinsicUpdate', extrinsicUpdate) + submitAndWatchExtrinsic: createMethod(section, 'submitAndWatchExtrinsic', submitAndWatchExtrinsic) } } as RpcSection; diff --git a/packages/type-jsonrpc/src/chain.ts b/packages/type-jsonrpc/src/chain.ts index a27af5edb6..e7d2caa866 100644 --- a/packages/type-jsonrpc/src/chain.ts +++ b/packages/type-jsonrpc/src/chain.ts @@ -47,13 +47,14 @@ const getRuntimeVersion: RpcMethodOpt = { type: 'RuntimeVersion' }; -const newHead: RpcMethodOpt = { +const subscribeNewHead: RpcMethodOpt = { description: 'Retrieves the best header via subscription', - subscribe: [ - 'chain_subscribeNewHead', - 'chain_unsubscribeNewHead' - ], params: [], + pubsub: [ + 'newHead', + 'subscribeNewHead', + 'unsubscribeNewHead' + ], type: 'Header' }; @@ -73,6 +74,6 @@ export default { getHead: createMethod(section, 'getHead', getHead), getHeader: createMethod(section, 'getHeader', getHeader), getRuntimeVersion: createMethod(section, 'getRuntimeVersion', getRuntimeVersion), - newHead: createMethod(section, 'newHead', newHead) + subscribeNewHead: createMethod(section, 'subscribeNewHead', subscribeNewHead) } } as RpcSection; diff --git a/packages/type-jsonrpc/src/create/method.ts b/packages/type-jsonrpc/src/create/method.ts index ab3980e0b9..7cd3c3f7cc 100644 --- a/packages/type-jsonrpc/src/create/method.ts +++ b/packages/type-jsonrpc/src/create/method.ts @@ -6,17 +6,17 @@ import { RpcMethodOpt, RpcMethod } from '../types'; import isUndefined from '@polkadot/util/is/undefined'; -export default function createMethod (section: string, method: string, { description, params, type, isDeprecated = false, isHidden = false, isSigned = false, subscribe }: RpcMethodOpt): RpcMethod { +export default function createMethod (section: string, method: string, { description, isDeprecated = false, isHidden = false, isSigned = false, params, pubsub, type }: RpcMethodOpt): RpcMethod { return { description, isDeprecated, isHidden, isSigned, - isSubscription: !isUndefined(subscribe), + isSubscription: !isUndefined(pubsub), method, params, + pubsub: pubsub || ['', '', ''], section, - subscribe: subscribe || ['', ''], type }; } diff --git a/packages/type-jsonrpc/src/state.ts b/packages/type-jsonrpc/src/state.ts index 903b7ff34e..62a9f5c124 100644 --- a/packages/type-jsonrpc/src/state.ts +++ b/packages/type-jsonrpc/src/state.ts @@ -99,16 +99,17 @@ const queryStorage: RpcMethodOpt = { type: 'Vec' }; -const storage: RpcMethodOpt = { +const subscribeStorage: RpcMethodOpt = { description: 'Subscribes to storage changes for the provided keys', - subscribe: [ - 'state_subscribeStorage', - 'state_unsubscribeStorage' - ], params: [ // @ts-ignore The Vec<> wrap is fine createParam('keys', 'Vec') ], + pubsub: [ + 'storage', + 'subscribeStorage', + 'unsubscribeStorage' + ], type: 'StorageChangeSet' }; @@ -133,6 +134,6 @@ export default { getStorageSize: createMethod(section, 'getStorageSize', getStorageSize), getStorageSizeAt: createMethod(section, 'getStorageSizeAt', getStorageSizeAt), queryStorage: createMethod(section, 'queryStorage', queryStorage), - storage: createMethod(section, 'storage', storage) + subscribeStorage: createMethod(section, 'subscribeStorage', subscribeStorage) } } as RpcSection; diff --git a/packages/type-jsonrpc/src/types.d.ts b/packages/type-jsonrpc/src/types.d.ts index ad6d2da903..023c91f9f8 100644 --- a/packages/type-jsonrpc/src/types.d.ts +++ b/packages/type-jsonrpc/src/types.d.ts @@ -17,7 +17,7 @@ export type RpcMethodOpt = { isSigned?: boolean, isSubscription?: boolean, params: Array, - subscribe?: [string, string], + pubsub?: [string, string, string], type: CodecTypes }; @@ -30,8 +30,8 @@ export type RpcMethod = { isSubscription: boolean, method: string, params: Array, + pubsub: [string, string, string], section: string, - subscribe: [string, string], type: CodecTypes };