@@ -2,7 +2,7 @@ import type { SolanaRpcApi, SolanaRpcApiDevnet, SolanaRpcApiMainnet, SolanaRpcAp
22import type { Rpc , RpcTransport } from '@solana/rpc-spec' ;
33import { devnet , mainnet , testnet } from '@solana/rpc-types' ;
44
5- import { createSolanaRpc } from '../rpc' ;
5+ import { createSolanaRpc , createSolanaRpcFromTransport } from '../rpc' ;
66import type {
77 RpcDevnet ,
88 RpcMainnet ,
@@ -13,85 +13,165 @@ import type {
1313} from '../rpc-clusters' ;
1414import { createDefaultRpcTransport } from '../rpc-transport' ;
1515
16- // Creating default HTTP transports
16+ // Define cluster-aware URLs and transports.
1717
1818const genericUrl = 'http://localhost:8899' ;
1919const devnetUrl = devnet ( 'https://api.devnet.solana.com' ) ;
2020const testnetUrl = testnet ( 'https://api.testnet.solana.com' ) ;
2121const mainnetUrl = mainnet ( 'https://api.mainnet-beta.solana.com' ) ;
2222
23- // No cluster specified should be generic `RpcTransport`
24- createDefaultRpcTransport ( { url : genericUrl } ) satisfies RpcTransport ;
25- //@ts -expect-error Should not be a devnet transport
26- createDefaultRpcTransport ( { url : genericUrl } ) satisfies RpcTransportDevnet ;
27- //@ts -expect-error Should not be a testnet transport
28- createDefaultRpcTransport ( { url : genericUrl } ) satisfies RpcTransportTestnet ;
29- //@ts -expect-error Should not be a mainnet transport
30- createDefaultRpcTransport ( { url : genericUrl } ) satisfies RpcTransportMainnet ;
31-
32- // Devnet cluster should be `RpcTransportDevnet`
33- createDefaultRpcTransport ( { url : devnetUrl } ) satisfies RpcTransportDevnet ;
34- //@ts -expect-error Should not be a testnet transport
35- createDefaultRpcTransport ( { url : devnetUrl } ) satisfies RpcTransportTestnet ;
36- //@ts -expect-error Should not be a mainnet transport
37- createDefaultRpcTransport ( { url : devnetUrl } ) satisfies RpcTransportMainnet ;
38-
39- // Testnet cluster should be `RpcTransportTestnet`
40- createDefaultRpcTransport ( { url : testnetUrl } ) satisfies RpcTransportTestnet ;
41- //@ts -expect-error Should not be a devnet transport
42- createDefaultRpcTransport ( { url : testnetUrl } ) satisfies RpcTransportDevnet ;
43- //@ts -expect-error Should not be a mainnet transport
44- createDefaultRpcTransport ( { url : testnetUrl } ) satisfies RpcTransportMainnet ;
45-
46- // Mainnet cluster should be `RpcTransportMainnet`
47- createDefaultRpcTransport ( { url : mainnetUrl } ) satisfies RpcTransportMainnet ;
48- //@ts -expect-error Should not be a devnet transport
49- createDefaultRpcTransport ( { url : mainnetUrl } ) satisfies RpcTransportDevnet ;
50- //@ts -expect-error Should not be a testnet transport
51- createDefaultRpcTransport ( { url : mainnetUrl } ) satisfies RpcTransportTestnet ;
52-
53- // Creating JSON RPC clients
54-
5523const genericTransport = createDefaultRpcTransport ( { url : genericUrl } ) ;
5624const devnetTransport = createDefaultRpcTransport ( { url : devnetUrl } ) ;
5725const testnetTransport = createDefaultRpcTransport ( { url : testnetUrl } ) ;
5826const mainnetTransport = createDefaultRpcTransport ( { url : mainnetUrl } ) ;
5927
60- // No cluster specified should be generic `Rpc`
61- createSolanaRpc ( { transport : genericTransport } ) satisfies Rpc < SolanaRpcApi > ;
62- //@ts -expect-error Should not be a devnet RPC
63- createSolanaRpc ( { transport : genericTransport } ) satisfies RpcDevnet < SolanaRpcApi > ;
64- //@ts -expect-error Should not be a testnet RPC
65- createSolanaRpc ( { transport : genericTransport } ) satisfies RpcTestnet < SolanaRpcApi > ;
66- //@ts -expect-error Should not be a mainnet RPC
67- createSolanaRpc ( { transport : genericTransport } ) satisfies RpcMainnet < SolanaRpcApi > ;
68-
69- // Devnet cluster should be `RpcDevnet`
70- createSolanaRpc ( { transport : devnetTransport } ) satisfies Rpc < SolanaRpcApi > ;
71- createSolanaRpc ( { transport : devnetTransport } ) satisfies Rpc < SolanaRpcApiDevnet > ;
72- createSolanaRpc ( { transport : devnetTransport } ) satisfies RpcDevnet < SolanaRpcApi > ;
73- createSolanaRpc ( { transport : devnetTransport } ) satisfies RpcDevnet < SolanaRpcApiDevnet > ; // Same types
74- //@ts -expect-error Should not be a testnet RPC
75- createSolanaRpc ( { transport : devnetTransport } ) satisfies RpcTestnet < SolanaRpcApi > ;
76- //@ts -expect-error Should not be a mainnet RPC
77- createSolanaRpc ( { transport : devnetTransport } ) satisfies RpcMainnet < SolanaRpcApi > ;
78-
79- // Testnet cluster should be `RpcTestnet`
80- createSolanaRpc ( { transport : testnetTransport } ) satisfies Rpc < SolanaRpcApi > ;
81- createSolanaRpc ( { transport : testnetTransport } ) satisfies Rpc < SolanaRpcApiTestnet > ;
82- createSolanaRpc ( { transport : testnetTransport } ) satisfies RpcTestnet < SolanaRpcApi > ;
83- createSolanaRpc ( { transport : testnetTransport } ) satisfies RpcTestnet < SolanaRpcApiTestnet > ; // Same types
84- //@ts -expect-error Should not be a devnet RPC
85- createSolanaRpc ( { transport : testnetTransport } ) satisfies RpcDevnet < SolanaRpcApi > ;
86- //@ts -expect-error Should not be a mainnet RPC
87- createSolanaRpc ( { transport : testnetTransport } ) satisfies RpcMainnet < SolanaRpcApi > ;
88-
89- // Mainnet cluster should be `RpcMainnet`
90- createSolanaRpc ( { transport : mainnetTransport } ) satisfies Rpc < SolanaRpcApiMainnet > ;
91- createSolanaRpc ( { transport : mainnetTransport } ) satisfies RpcMainnet < SolanaRpcApiMainnet > ;
92- //@ts -expect-error Should not have `requestAirdrop` method
93- createSolanaRpc ( { transport : mainnetTransport } ) satisfies Rpc < RequestAirdropApi > ;
94- //@ts -expect-error Should not be a devnet RPC
95- createSolanaRpc ( { transport : mainnetTransport } ) satisfies RpcDevnet < SolanaRpcApi > ;
96- //@ts -expect-error Should not be a testnet RPC
97- createSolanaRpc ( { transport : mainnetTransport } ) satisfies RpcTestnet < SolanaRpcApi > ;
28+ // [DEFINE] createDefaultRpcTransport.
29+ {
30+ // No cluster specified should be generic `RpcTransport`.
31+ {
32+ genericTransport satisfies RpcTransport ;
33+ //@ts -expect-error Should not be a devnet transport
34+ genericTransport satisfies RpcTransportDevnet ;
35+ //@ts -expect-error Should not be a testnet transport
36+ genericTransport satisfies RpcTransportTestnet ;
37+ //@ts -expect-error Should not be a mainnet transport
38+ genericTransport satisfies RpcTransportMainnet ;
39+ }
40+
41+ // Devnet cluster should be `RpcTransportDevnet`.
42+ {
43+ devnetTransport satisfies RpcTransportDevnet ;
44+ //@ts -expect-error Should not be a testnet transport
45+ devnetTransport satisfies RpcTransportTestnet ;
46+ //@ts -expect-error Should not be a mainnet transport
47+ devnetTransport satisfies RpcTransportMainnet ;
48+ }
49+
50+ // Testnet cluster should be `RpcTransportTestnet`.
51+ {
52+ testnetTransport satisfies RpcTransportTestnet ;
53+ //@ts -expect-error Should not be a devnet transport
54+ testnetTransport satisfies RpcTransportDevnet ;
55+ //@ts -expect-error Should not be a mainnet transport
56+ testnetTransport satisfies RpcTransportMainnet ;
57+ }
58+
59+ // Mainnet cluster should be `RpcTransportMainnet`.
60+ {
61+ mainnetTransport satisfies RpcTransportMainnet ;
62+ //@ts -expect-error Should not be a devnet transport
63+ mainnetTransport satisfies RpcTransportDevnet ;
64+ //@ts -expect-error Should not be a testnet transport
65+ mainnetTransport satisfies RpcTransportTestnet ;
66+ }
67+ }
68+
69+ // [DEFINE] createSolanaRpcFromTransport.
70+ {
71+ const genericRpc = createSolanaRpcFromTransport ( genericTransport ) ;
72+ const devnetRpc = createSolanaRpcFromTransport ( devnetTransport ) ;
73+ const testnetRpc = createSolanaRpcFromTransport ( testnetTransport ) ;
74+ const mainnetRpc = createSolanaRpcFromTransport ( mainnetTransport ) ;
75+
76+ // No cluster specified should be generic `Rpc`.
77+ {
78+ genericRpc satisfies Rpc < SolanaRpcApi > ;
79+ //@ts -expect-error Should not be a devnet RPC
80+ genericRpc satisfies RpcDevnet < SolanaRpcApi > ;
81+ //@ts -expect-error Should not be a testnet RPC
82+ genericRpc satisfies RpcTestnet < SolanaRpcApi > ;
83+ //@ts -expect-error Should not be a mainnet RPC
84+ genericRpc satisfies RpcMainnet < SolanaRpcApi > ;
85+ }
86+
87+ // Devnet cluster should be `RpcDevnet`.
88+ {
89+ devnetRpc satisfies Rpc < SolanaRpcApi > ;
90+ devnetRpc satisfies Rpc < SolanaRpcApiDevnet > ;
91+ devnetRpc satisfies RpcDevnet < SolanaRpcApi > ;
92+ devnetRpc satisfies RpcDevnet < SolanaRpcApiDevnet > ; // Same types
93+ //@ts -expect-error Should not be a testnet RPC
94+ devnetRpc satisfies RpcTestnet < SolanaRpcApi > ;
95+ //@ts -expect-error Should not be a mainnet RPC
96+ devnetRpc satisfies RpcMainnet < SolanaRpcApi > ;
97+ }
98+
99+ // Testnet cluster should be `RpcTestnet`.
100+ {
101+ testnetRpc satisfies Rpc < SolanaRpcApi > ;
102+ testnetRpc satisfies Rpc < SolanaRpcApiTestnet > ;
103+ testnetRpc satisfies RpcTestnet < SolanaRpcApi > ;
104+ testnetRpc satisfies RpcTestnet < SolanaRpcApiTestnet > ; // Same types
105+ //@ts -expect-error Should not be a devnet RPC
106+ testnetRpc satisfies RpcDevnet < SolanaRpcApi > ;
107+ //@ts -expect-error Should not be a mainnet RPC
108+ testnetRpc satisfies RpcMainnet < SolanaRpcApi > ;
109+ }
110+
111+ // Mainnet cluster should be `RpcMainnet`.
112+ {
113+ mainnetRpc satisfies Rpc < SolanaRpcApiMainnet > ;
114+ mainnetRpc satisfies RpcMainnet < SolanaRpcApiMainnet > ;
115+ //@ts -expect-error Should not have `requestAirdrop` method
116+ mainnetRpc satisfies Rpc < RequestAirdropApi > ;
117+ //@ts -expect-error Should not be a devnet RPC
118+ mainnetRpc satisfies RpcDevnet < SolanaRpcApi > ;
119+ //@ts -expect-error Should not be a testnet RPC
120+ mainnetRpc satisfies RpcTestnet < SolanaRpcApi > ;
121+ }
122+ }
123+
124+ // [DEFINE] createSolanaRpc.
125+ {
126+ const genericRpc = createSolanaRpc ( genericUrl ) ;
127+ const devnetRpc = createSolanaRpc ( devnetUrl ) ;
128+ const testnetRpc = createSolanaRpc ( testnetUrl ) ;
129+ const mainnetRpc = createSolanaRpc ( mainnetUrl ) ;
130+
131+ // No cluster specified should be generic `Rpc`.
132+ {
133+ genericRpc satisfies Rpc < SolanaRpcApi > ;
134+ //@ts -expect-error Should not be a devnet RPC
135+ genericRpc satisfies RpcDevnet < SolanaRpcApi > ;
136+ //@ts -expect-error Should not be a testnet RPC
137+ genericRpc satisfies RpcTestnet < SolanaRpcApi > ;
138+ //@ts -expect-error Should not be a mainnet RPC
139+ genericRpc satisfies RpcMainnet < SolanaRpcApi > ;
140+ }
141+
142+ // Devnet cluster should be `RpcDevnet`.
143+ {
144+ devnetRpc satisfies Rpc < SolanaRpcApi > ;
145+ devnetRpc satisfies Rpc < SolanaRpcApiDevnet > ;
146+ devnetRpc satisfies RpcDevnet < SolanaRpcApi > ;
147+ devnetRpc satisfies RpcDevnet < SolanaRpcApiDevnet > ; // Same types
148+ //@ts -expect-error Should not be a testnet RPC
149+ devnetRpc satisfies RpcTestnet < SolanaRpcApi > ;
150+ //@ts -expect-error Should not be a mainnet RPC
151+ devnetRpc satisfies RpcMainnet < SolanaRpcApi > ;
152+ }
153+
154+ // Testnet cluster should be `RpcTestnet`.
155+ {
156+ testnetRpc satisfies Rpc < SolanaRpcApi > ;
157+ testnetRpc satisfies Rpc < SolanaRpcApiTestnet > ;
158+ testnetRpc satisfies RpcTestnet < SolanaRpcApi > ;
159+ testnetRpc satisfies RpcTestnet < SolanaRpcApiTestnet > ; // Same types
160+ //@ts -expect-error Should not be a devnet RPC
161+ testnetRpc satisfies RpcDevnet < SolanaRpcApi > ;
162+ //@ts -expect-error Should not be a mainnet RPC
163+ testnetRpc satisfies RpcMainnet < SolanaRpcApi > ;
164+ }
165+
166+ // Mainnet cluster should be `RpcMainnet`.
167+ {
168+ mainnetRpc satisfies Rpc < SolanaRpcApiMainnet > ;
169+ mainnetRpc satisfies RpcMainnet < SolanaRpcApiMainnet > ;
170+ //@ts -expect-error Should not have `requestAirdrop` method
171+ mainnetRpc satisfies Rpc < RequestAirdropApi > ;
172+ //@ts -expect-error Should not be a devnet RPC
173+ mainnetRpc satisfies RpcDevnet < SolanaRpcApi > ;
174+ //@ts -expect-error Should not be a testnet RPC
175+ mainnetRpc satisfies RpcTestnet < SolanaRpcApi > ;
176+ }
177+ }
0 commit comments