diff --git a/packages/rpc-provider/src/coder/decodeResponse.spec.ts b/packages/rpc-provider/src/coder/decodeResponse.spec.ts index c4198bc423..b08fbb86da 100644 --- a/packages/rpc-provider/src/coder/decodeResponse.spec.ts +++ b/packages/rpc-provider/src/coder/decodeResponse.spec.ts @@ -48,6 +48,18 @@ describe('decodeResponse', (): void => { ).toThrow(/123: test error: Some random error description/); }); + it('allows for number subscription ids', (): void => { + expect( + coder.decodeResponse({ id: 1, jsonrpc: '2.0', method: 'test', params: { result: 'test result', subscription: 1 } } as JsonRpcResponse) + ).toEqual('test result'); + }); + + it('allows for string subscription ids', (): void => { + expect( + coder.decodeResponse({ id: 1, jsonrpc: '2.0', method: 'test', params: { result: 'test result', subscription: 'abc' } } as JsonRpcResponse) + ).toEqual('test result'); + }); + it('returns the result', (): void => { expect( coder.decodeResponse({ id: 1, jsonrpc: '2.0', result: 'some result' } as JsonRpcResponse) diff --git a/packages/rpc-provider/src/coder/index.ts b/packages/rpc-provider/src/coder/index.ts index 34e5c0f895..fc676b57f2 100644 --- a/packages/rpc-provider/src/coder/index.ts +++ b/packages/rpc-provider/src/coder/index.ts @@ -30,7 +30,7 @@ export default class RpcCoder { const isSubscription = !isUndefined(response.params) && !isUndefined(response.method); - assert(isNumber(response.id) || (isSubscription && isNumber(response.params.subscription)), 'Invalid id field in decoded object'); + assert(isNumber(response.id) || (isSubscription && (isNumber(response.params.subscription) || isString(response.params.subscription))), 'Invalid id field in decoded object'); this._checkError(response.error); diff --git a/packages/rpc-provider/src/types.ts b/packages/rpc-provider/src/types.ts index c2e8346a7c..c1f198ace8 100644 --- a/packages/rpc-provider/src/types.ts +++ b/packages/rpc-provider/src/types.ts @@ -28,7 +28,7 @@ interface JsonRpcResponseSubscription { params: { error?: JsonRpcResponseBaseError; result: unknown; - subscription: number; + subscription: number | string; }; }