Skip to content

Commit 29a38f0

Browse files
committed
Use RpcRequest in createRpcMessage helper
1 parent b965d83 commit 29a38f0

File tree

6 files changed

+32
-16
lines changed

6 files changed

+32
-16
lines changed

.changeset/wet-colts-exist.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@solana/rpc-subscriptions-spec': patch
3+
'@solana/rpc-spec-types': patch
4+
'@solana/rpc-spec': patch
5+
---
6+
7+
Use RpcRequest in createRpcMessage helper

packages/rpc-spec-types/src/__tests__/rpc-message-test.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@ import { createRpcMessage } from '../rpc-message';
22

33
describe('createRpcMessage', () => {
44
it('auto-increments ids with each new message', () => {
5-
const { id: firstId } = createRpcMessage('foo', 'bar');
6-
const { id: secondId } = createRpcMessage('foo', 'bar');
5+
const request = { methodName: 'foo', params: 'bar' };
6+
const { id: firstId } = createRpcMessage(request);
7+
const { id: secondId } = createRpcMessage(request);
78
expect(secondId - firstId).toBe(1);
89
});
910
it('returns a well-formed JSON-RPC 2.0 message', () => {
10-
const params = [1, 2, 3];
11-
expect(createRpcMessage('someMethod', params)).toStrictEqual({
11+
const request = { methodName: 'someMethod', params: [1, 2, 3] };
12+
expect(createRpcMessage(request)).toStrictEqual({
1213
id: expect.any(Number),
1314
jsonrpc: '2.0',
1415
method: 'someMethod',
15-
params,
16+
params: [1, 2, 3],
1617
});
1718
});
1819
});
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1+
import { RpcRequest } from './rpc-request';
2+
13
let _nextMessageId = 0;
24
function getNextMessageId() {
35
const id = _nextMessageId;
46
_nextMessageId = (_nextMessageId + 1) % Number.MAX_SAFE_INTEGER;
57
return id;
68
}
79

8-
export function createRpcMessage<TParams>(method: string, params: TParams) {
10+
export function createRpcMessage<TParams>(request: RpcRequest<TParams>) {
911
return {
1012
id: getNextMessageId(),
1113
jsonrpc: '2.0',
12-
method,
13-
params,
14+
method: request.methodName,
15+
params: request.params,
1416
};
1517
}

packages/rpc-spec/src/__tests__/rpc-test.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ describe('JSON-RPC 2.0', () => {
4343
api: new Proxy({} as RpcApi<TestRpcMethods>, {
4444
get(_, methodName) {
4545
return (...params: unknown[]) => ({
46-
payload: createRpcMessage(methodName.toString(), params),
46+
payload: createRpcMessage({ methodName: methodName.toString(), params }),
4747
});
4848
},
4949
}),
@@ -55,7 +55,7 @@ describe('JSON-RPC 2.0', () => {
5555
.send()
5656
.catch(() => {});
5757
expect(makeHttpRequest).toHaveBeenCalledWith({
58-
payload: { ...createRpcMessage('someMethod', [123]), id: expect.any(Number) },
58+
payload: { ...createRpcMessage({ methodName: 'someMethod', params: [123] }), id: expect.any(Number) },
5959
});
6060
});
6161
it('returns results from the transport', async () => {
@@ -79,7 +79,10 @@ describe('JSON-RPC 2.0', () => {
7979
api: {
8080
someMethod(...params: unknown[]): RpcApiRequestPlan<unknown> {
8181
return {
82-
payload: createRpcMessage('someMethodAugmented', [...params, 'augmented', 'params']),
82+
payload: createRpcMessage({
83+
methodName: 'someMethodAugmented',
84+
params: [...params, 'augmented', 'params'],
85+
}),
8386
};
8487
},
8588
} as RpcApi<TestRpcMethods>,
@@ -92,7 +95,7 @@ describe('JSON-RPC 2.0', () => {
9295
.catch(() => {});
9396
expect(makeHttpRequest).toHaveBeenCalledWith({
9497
payload: {
95-
...createRpcMessage('someMethodAugmented', [123, 'augmented', 'params']),
98+
...createRpcMessage({ methodName: 'someMethodAugmented', params: [123, 'augmented', 'params'] }),
9699
id: expect.any(Number),
97100
},
98101
});
@@ -107,7 +110,7 @@ describe('JSON-RPC 2.0', () => {
107110
api: {
108111
someMethod(...params: unknown[]): RpcApiRequestPlan<unknown> {
109112
return {
110-
payload: createRpcMessage('someMethod', params),
113+
payload: createRpcMessage({ methodName: 'someMethod', params }),
111114
responseTransformer,
112115
};
113116
},

packages/rpc-spec/src/rpc-api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export function createJsonRpcApi<TRpcMethods extends RpcApiMethods>(config?: Rpc
5151
const rawRequest = Object.freeze({ methodName, params: rawParams });
5252
const request = config?.requestTransformer ? config?.requestTransformer(rawRequest) : rawRequest;
5353
return Object.freeze({
54-
payload: createRpcMessage(request.methodName, request.params),
54+
payload: createRpcMessage(request),
5555
...(config?.responseTransformer
5656
? {
5757
responseTransformer: (response: RpcResponse) => {

packages/rpc-subscriptions-spec/src/rpc-subscriptions-pubsub-plan.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,10 @@ export async function executeRpcPubSubSubscriptionPlan<TNotification>({
128128
* must be careful not to send the unsubscribe message until the last subscriber aborts.
129129
*/
130130
if (decrementSubscriberCountAndReturnNewCount(channel, subscriptionId) === 0) {
131-
const unsubscribePayload = createRpcMessage(unsubscribeMethodName, [subscriptionId]);
131+
const unsubscribePayload = createRpcMessage({
132+
methodName: unsubscribeMethodName,
133+
params: [subscriptionId],
134+
});
132135
subscriptionId = undefined;
133136
channel.send(unsubscribePayload).catch(() => {});
134137
}
@@ -144,7 +147,7 @@ export async function executeRpcPubSubSubscriptionPlan<TNotification>({
144147
* STEP 2
145148
* Send the subscription request.
146149
*/
147-
const subscribePayload = createRpcMessage(subscribeMethodName, subscribeParams);
150+
const subscribePayload = createRpcMessage({ methodName: subscribeMethodName, params: subscribeParams });
148151
await channel.send(subscribePayload);
149152
/**
150153
* STEP 3

0 commit comments

Comments
 (0)