|
1 | | -import type { IRpcApi, RpcRequest } from '@solana/rpc-transport'; |
| 1 | +import { createJsonRpcApi } from '@solana/rpc-transport'; |
| 2 | +import { IRpcApi } from '@solana/rpc-transport'; |
2 | 3 |
|
3 | 4 | import { patchParamsForSolanaLabsRpc } from '../params-patcher'; |
4 | 5 | import { patchResponseForSolanaLabsRpc } from '../response-patcher'; |
@@ -115,37 +116,17 @@ export type SolanaRpcMethods = GetAccountInfoApi & |
115 | 116 | SimulateTransactionApi; |
116 | 117 |
|
117 | 118 | export function createSolanaRpcApi(config?: Config): IRpcApi<SolanaRpcMethods> { |
118 | | - return new Proxy({} as IRpcApi<SolanaRpcMethods>, { |
119 | | - defineProperty() { |
120 | | - return false; |
121 | | - }, |
122 | | - deleteProperty() { |
123 | | - return false; |
124 | | - }, |
125 | | - get<TMethodName extends keyof IRpcApi<SolanaRpcMethods>>( |
126 | | - ...args: Parameters<NonNullable<ProxyHandler<IRpcApi<SolanaRpcMethods>>['get']>> |
127 | | - ) { |
128 | | - const [_, p] = args; |
129 | | - const methodName = p.toString() as keyof SolanaRpcMethods as string; |
130 | | - return function ( |
131 | | - ...rawParams: Parameters< |
132 | | - SolanaRpcMethods[TMethodName] extends CallableFunction ? SolanaRpcMethods[TMethodName] : never |
133 | | - > |
134 | | - ): RpcRequest<ReturnType<SolanaRpcMethods[TMethodName]>> { |
135 | | - const handleIntegerOverflow = config?.onIntegerOverflow; |
136 | | - const params = patchParamsForSolanaLabsRpc( |
137 | | - rawParams, |
138 | | - handleIntegerOverflow |
139 | | - ? (keyPath, value) => handleIntegerOverflow(methodName, keyPath, value) |
140 | | - : undefined, |
141 | | - ); |
142 | | - return { |
143 | | - methodName, |
144 | | - params, |
145 | | - responseTransformer: rawResponse => patchResponseForSolanaLabsRpc(rawResponse, methodName), |
146 | | - }; |
147 | | - }; |
148 | | - }, |
| 119 | + const handleIntegerOverflow = config?.onIntegerOverflow; |
| 120 | + return createJsonRpcApi<SolanaRpcMethods>({ |
| 121 | + parametersTransformer: <T>(rawParams: T, methodName: string) => |
| 122 | + patchParamsForSolanaLabsRpc( |
| 123 | + rawParams, |
| 124 | + handleIntegerOverflow |
| 125 | + ? (keyPath, value) => handleIntegerOverflow(methodName, keyPath, value) |
| 126 | + : undefined, |
| 127 | + ) as unknown[], |
| 128 | + responseTransformer: <T>(rawResponse: unknown, methodName: string): T => |
| 129 | + patchResponseForSolanaLabsRpc(rawResponse, methodName as keyof SolanaRpcMethods), |
149 | 130 | }); |
150 | 131 | } |
151 | 132 |
|
|
0 commit comments