1- import type { IRpcSubscriptionsApi , RpcSubscription } from '@solana/rpc-transport' ;
1+ import { createJsonRpcSubscriptionsApi , IRpcSubscriptionsApi } from '@solana/rpc-transport' ;
22
33import { patchParamsForSolanaLabsRpc } from '../params-patcher' ;
44import { patchResponseForSolanaLabsRpcSubscriptions } from '../response-patcher' ;
@@ -25,63 +25,38 @@ export type SolanaRpcSubscriptions = AccountNotificationsApi &
2525 SlotNotificationsApi ;
2626export type SolanaRpcSubscriptionsUnstable = SlotsUpdatesNotificationsApi & VoteNotificationsApi ;
2727
28- export function createSolanaRpcSubscriptionsApi (
28+ export function createSolanaRpcSubscriptionsApi_INTERNAL (
2929 config ?: Config ,
3030) : IRpcSubscriptionsApi < SolanaRpcSubscriptions & SolanaRpcSubscriptionsUnstable > {
31- return new Proxy ( { } as IRpcSubscriptionsApi < SolanaRpcSubscriptions & SolanaRpcSubscriptionsUnstable > , {
32- defineProperty ( ) {
33- return false ;
34- } ,
35- deleteProperty ( ) {
36- return false ;
37- } ,
38- get <
39- TNotificationName extends keyof IRpcSubscriptionsApi <
40- SolanaRpcSubscriptions & SolanaRpcSubscriptionsUnstable
41- > ,
42- > (
43- ...args : Parameters <
44- NonNullable <
45- ProxyHandler < IRpcSubscriptionsApi < SolanaRpcSubscriptions & SolanaRpcSubscriptionsUnstable > > [ 'get' ]
46- >
47- >
48- ) {
49- const [ _ , p ] = args ;
50- const notificationName = p . toString ( ) as keyof ( SolanaRpcSubscriptions &
51- SolanaRpcSubscriptionsUnstable ) as string ;
52- return function (
53- ...rawParams : Parameters <
54- ( SolanaRpcSubscriptions &
55- SolanaRpcSubscriptionsUnstable ) [ TNotificationName ] extends CallableFunction
56- ? ( SolanaRpcSubscriptions & SolanaRpcSubscriptionsUnstable ) [ TNotificationName ]
57- : never
58- >
59- ) : RpcSubscription <
60- ReturnType < ( SolanaRpcSubscriptions & SolanaRpcSubscriptionsUnstable ) [ TNotificationName ] >
61- > {
62- const handleIntegerOverflow = config ?. onIntegerOverflow ;
63- const params = patchParamsForSolanaLabsRpc (
64- rawParams ,
65- handleIntegerOverflow
66- ? ( keyPath , value ) => handleIntegerOverflow ( notificationName , keyPath , value )
67- : undefined ,
68- ) ;
69- return {
70- params,
71- responseTransformer : rawResponse =>
72- patchResponseForSolanaLabsRpcSubscriptions ( rawResponse , notificationName ) ,
73- subscribeMethodName : notificationName . replace ( / N o t i f i c a t i o n s $ / , 'Subscribe' ) ,
74- unsubscribeMethodName : notificationName . replace ( / N o t i f i c a t i o n s $ / , 'Unsubscribe' ) ,
75- } ;
76- } ;
77- } ,
31+ const handleIntegerOverflow = config ?. onIntegerOverflow ;
32+ return createJsonRpcSubscriptionsApi < SolanaRpcSubscriptions & SolanaRpcSubscriptionsUnstable > ( {
33+ parametersTransformer : < T > ( rawParams : T , methodName : string ) =>
34+ patchParamsForSolanaLabsRpc (
35+ rawParams ,
36+ handleIntegerOverflow
37+ ? ( keyPath , value ) => handleIntegerOverflow ( methodName , keyPath , value )
38+ : undefined ,
39+ ) as unknown [ ] ,
40+ responseTransformer : < T > ( rawResponse : unknown , methodName : string ) : T =>
41+ patchResponseForSolanaLabsRpcSubscriptions (
42+ rawResponse ,
43+ methodName as keyof ( SolanaRpcSubscriptions & SolanaRpcSubscriptionsUnstable ) ,
44+ ) ,
45+ subscribeNotificationNameTransformer : ( notificationName : string ) =>
46+ notificationName . replace ( / N o t i f i c a t i o n s $ / , 'Subscribe' ) ,
47+ unsubscribeNotificationNameTransformer : ( notificationName : string ) =>
48+ notificationName . replace ( / N o t i f i c a t i o n s $ / , 'Unsubscribe' ) ,
7849 } ) ;
7950}
8051
52+ export function createSolanaRpcSubscriptionsApi ( config ?: Config ) : IRpcSubscriptionsApi < SolanaRpcSubscriptions > {
53+ return createSolanaRpcSubscriptionsApi_INTERNAL ( config ) as IRpcSubscriptionsApi < SolanaRpcSubscriptions > ;
54+ }
55+
8156export function createSolanaRpcSubscriptionsApi_UNSTABLE (
8257 config ?: Config ,
8358) : IRpcSubscriptionsApi < SolanaRpcSubscriptions & SolanaRpcSubscriptionsUnstable > {
84- return createSolanaRpcSubscriptionsApi ( config ) as IRpcSubscriptionsApi <
59+ return createSolanaRpcSubscriptionsApi_INTERNAL ( config ) as IRpcSubscriptionsApi <
8560 SolanaRpcSubscriptions & SolanaRpcSubscriptionsUnstable
8661 > ;
8762}
0 commit comments