|
| 1 | +import { devnet, IRpcApiMethods, mainnet, Rpc, testnet } from '@solana/rpc-types'; |
| 2 | + |
| 3 | +import { createJsonRpcApi } from '../apis/methods/methods-api'; |
| 4 | +import { createJsonRpc } from '../json-rpc'; |
| 5 | +import { RpcDevnet, RpcMainnet, RpcTestnet } from '../json-rpc-types'; |
| 6 | +import { createHttpTransport } from '../transports/http/http-transport'; |
| 7 | + |
| 8 | +interface MyApiMethods extends IRpcApiMethods { |
| 9 | + foo(): number; |
| 10 | + bar(): string; |
| 11 | +} |
| 12 | + |
| 13 | +const api = createJsonRpcApi<MyApiMethods>(); |
| 14 | + |
| 15 | +const genericTransport = createHttpTransport({ url: 'http://localhost:8899' }); |
| 16 | +const devnetTransport = createHttpTransport({ url: devnet('https://api.devnet.solana.com') }); |
| 17 | +const testnetTransport = createHttpTransport({ url: testnet('https://api.testnet.solana.com') }); |
| 18 | +const mainnetTransport = createHttpTransport({ url: mainnet('https://api.mainnet-beta.solana.com') }); |
| 19 | + |
| 20 | +// When providing a generic transport, the RPC should be typed as an Rpc |
| 21 | +createJsonRpc({ api, transport: genericTransport }) satisfies Rpc<MyApiMethods>; |
| 22 | +//@ts-expect-error Should not be a devnet RPC |
| 23 | +createJsonRpc({ api, transport: genericTransport }) satisfies RpcDevnet<MyApiMethods>; |
| 24 | +//@ts-expect-error Should not be a testnet RPC |
| 25 | +createJsonRpc({ api, transport: genericTransport }) satisfies RpcTestnet<MyApiMethods>; |
| 26 | +//@ts-expect-error Should not be a mainnet RPC |
| 27 | +createJsonRpc({ api, transport: genericTransport }) satisfies RpcMainnet<MyApiMethods>; |
| 28 | + |
| 29 | +// When providing a devnet transport, the RPC should be typed as an RpcDevnet |
| 30 | +createJsonRpc({ api, transport: devnetTransport }) satisfies RpcDevnet<MyApiMethods>; |
| 31 | +//@ts-expect-error Should not be a testnet RPC |
| 32 | +createJsonRpc({ api, transport: devnetTransport }) satisfies RpcTestnet<MyApiMethods>; |
| 33 | +//@ts-expect-error Should not be a mainnet RPC |
| 34 | +createJsonRpc({ api, transport: devnetTransport }) satisfies RpcMainnet<MyApiMethods>; |
| 35 | + |
| 36 | +// When providing a testnet transport, the RPC should be typed as an RpcTestnet |
| 37 | +createJsonRpc({ api, transport: testnetTransport }) satisfies RpcTestnet<MyApiMethods>; |
| 38 | +//@ts-expect-error Should not be a devnet RPC |
| 39 | +createJsonRpc({ api, transport: testnetTransport }) satisfies RpcDevnet<MyApiMethods>; |
| 40 | +//@ts-expect-error Should not be a mainnet RPC |
| 41 | +createJsonRpc({ api, transport: testnetTransport }) satisfies RpcMainnet<MyApiMethods>; |
| 42 | + |
| 43 | +// When providing a mainnet transport, the RPC should be typed as an RpcMainnet |
| 44 | +createJsonRpc({ api, transport: mainnetTransport }) satisfies RpcMainnet<MyApiMethods>; |
| 45 | +//@ts-expect-error Should not be a devnet RPC |
| 46 | +createJsonRpc({ api, transport: mainnetTransport }) satisfies RpcDevnet<MyApiMethods>; |
| 47 | +//@ts-expect-error Should not be a testnet RPC |
| 48 | +createJsonRpc({ api, transport: mainnetTransport }) satisfies RpcTestnet<MyApiMethods>; |
0 commit comments