-
Notifications
You must be signed in to change notification settings - Fork 800
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor(experimental): add cluster level subscriptions API for trans…
…ports
- Loading branch information
1 parent
a1db0ef
commit 3b57349
Showing
6 changed files
with
233 additions
and
9 deletions.
There are no files selected for viewing
101 changes: 101 additions & 0 deletions
101
packages/rpc-transport/src/__typetests__/json-rpc-subscription-typetest.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
import { | ||
devnet, | ||
IRpcApiSubscriptions, | ||
mainnet, | ||
RpcSubscriptions, | ||
RpcSubscriptionsDevnet, | ||
RpcSubscriptionsMainnet, | ||
RpcSubscriptionsTestnet, | ||
testnet, | ||
} from '@solana/rpc-types'; | ||
|
||
import { createJsonRpcSubscriptionsApi } from '../apis/subscriptions/subscriptions-api'; | ||
import { createJsonSubscriptionRpc } from '../json-rpc-subscription'; | ||
import { createWebSocketTransport } from '../transports/websocket/websocket-transport'; | ||
|
||
interface MySubscriptionApiMethods extends IRpcApiSubscriptions { | ||
foo(): number; | ||
bar(): string; | ||
} | ||
|
||
const api = null as unknown as ReturnType<typeof createJsonRpcSubscriptionsApi<MySubscriptionApiMethods>>; | ||
|
||
const genericTransport = createWebSocketTransport({ sendBufferHighWatermark: 0, url: 'http://localhost:8899' }); | ||
const devnetTransport = createWebSocketTransport({ | ||
sendBufferHighWatermark: 0, | ||
url: devnet('https://api.devnet.solana.com'), | ||
}); | ||
const testnetTransport = createWebSocketTransport({ | ||
sendBufferHighWatermark: 0, | ||
url: testnet('https://api.testnet.solana.com'), | ||
}); | ||
const mainnetTransport = createWebSocketTransport({ | ||
sendBufferHighWatermark: 0, | ||
url: mainnet('https://api.mainnet-beta.solana.com'), | ||
}); | ||
|
||
// When providing a generic transport, the RPC should be typed as RpcSubscription | ||
createJsonSubscriptionRpc({ api, transport: genericTransport }) satisfies RpcSubscriptions<MySubscriptionApiMethods>; | ||
createJsonSubscriptionRpc({ | ||
api, | ||
transport: genericTransport, | ||
//@ts-expect-error Should not be a devnet transport | ||
}) satisfies RpcSubscriptionsDevnet<MySubscriptionApiMethods>; | ||
createJsonSubscriptionRpc({ | ||
api, | ||
transport: genericTransport, | ||
//@ts-expect-error Should not be a testnet transport | ||
}) satisfies RpcSubscriptionsTestnet<MySubscriptionApiMethods>; | ||
createJsonSubscriptionRpc({ | ||
api, | ||
transport: genericTransport, | ||
//@ts-expect-error Should not be a mainnet transport | ||
}) satisfies RpcSubscriptionsMainnet<MySubscriptionApiMethods>; | ||
|
||
// When providing a devnet transport, the RPC should be typed as RpcSubscriptionsDevnet | ||
createJsonSubscriptionRpc({ | ||
api, | ||
transport: devnetTransport, | ||
}) satisfies RpcSubscriptionsDevnet<MySubscriptionApiMethods>; | ||
createJsonSubscriptionRpc({ | ||
api, | ||
transport: devnetTransport, | ||
//@ts-expect-error Should not be a testnet transport | ||
}) satisfies RpcSubscriptionsTestnet<MySubscriptionApiMethods>; | ||
createJsonSubscriptionRpc({ | ||
api, | ||
transport: devnetTransport, | ||
//@ts-expect-error Should not be a mainnet transport | ||
}) satisfies RpcSubscriptionsMainnet<MySubscriptionApiMethods>; | ||
|
||
// When providing a testnet transport, the RPC should be typed as RpcSubscriptionsTestnet | ||
createJsonSubscriptionRpc({ | ||
api, | ||
transport: testnetTransport, | ||
}) satisfies RpcSubscriptionsTestnet<MySubscriptionApiMethods>; | ||
createJsonSubscriptionRpc({ | ||
api, | ||
transport: testnetTransport, | ||
//@ts-expect-error Should not be a devnet transport | ||
}) satisfies RpcSubscriptionsDevnet<MySubscriptionApiMethods>; | ||
createJsonSubscriptionRpc({ | ||
api, | ||
transport: testnetTransport, | ||
//@ts-expect-error Should not be a mainnet transport | ||
}) satisfies RpcSubscriptionsMainnet<MySubscriptionApiMethods>; | ||
|
||
// When providing a mainnet transport, the RPC should be typed as RpcSubscriptionsMainnet | ||
createJsonSubscriptionRpc({ | ||
api, | ||
transport: mainnetTransport, | ||
}) satisfies RpcSubscriptionsMainnet<MySubscriptionApiMethods>; | ||
createJsonSubscriptionRpc({ | ||
api, | ||
transport: mainnetTransport, | ||
//@ts-expect-error Should not be a devnet transport | ||
}) satisfies RpcSubscriptionsDevnet<MySubscriptionApiMethods>; | ||
createJsonSubscriptionRpc({ | ||
api, | ||
transport: mainnetTransport, | ||
//@ts-expect-error Should not be a testnet transport | ||
}) satisfies RpcSubscriptionsTestnet<MySubscriptionApiMethods>; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
46 changes: 46 additions & 0 deletions
46
packages/rpc-transport/src/transports/websocket/__typetests__/websocket-typetest.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
import { | ||
devnet, | ||
IRpcWebSocketTransport, | ||
IRpcWebSocketTransportDevnet, | ||
IRpcWebSocketTransportMainnet, | ||
IRpcWebSocketTransportTestnet, | ||
mainnet, | ||
testnet, | ||
} from '@solana/rpc-types'; | ||
|
||
import { createWebSocketTransport } from '../websocket-transport'; | ||
|
||
const genericConfig = { sendBufferHighWatermark: 0, url: 'http://localhost:8899' }; | ||
const devnetConfig = { sendBufferHighWatermark: 0, url: devnet('https://api.devnet.solana.com') }; | ||
const testnetConfig = { sendBufferHighWatermark: 0, url: testnet('https://api.testnet.solana.com') }; | ||
const mainnetConfig = { sendBufferHighWatermark: 0, url: mainnet('https://api.mainnet-beta.solana.com') }; | ||
|
||
// When providing a generic URL, the transport should be typed as an IRpcWebSocketTransport | ||
createWebSocketTransport(genericConfig) satisfies IRpcWebSocketTransport; | ||
//@ts-expect-error Should not be a devnet transport | ||
createWebSocketTransport(genericConfig) satisfies IRpcWebSocketTransportDevnet; | ||
//@ts-expect-error Should not be a testnet transport | ||
createWebSocketTransport(genericConfig) satisfies IRpcWebSocketTransportTestnet; | ||
//@ts-expect-error Should not be a mainnet transport | ||
createWebSocketTransport(genericConfig) satisfies IRpcWebSocketTransportMainnet; | ||
|
||
// When providing a devnet URL, the transport should be typed as an IRpcWebSocketTransportDevnet | ||
createWebSocketTransport(devnetConfig) satisfies IRpcWebSocketTransportDevnet; | ||
//@ts-expect-error Should not be a testnet transport | ||
createWebSocketTransport(devnetConfig) satisfies IRpcWebSocketTransportTestnet; | ||
//@ts-expect-error Should not be a mainnet transport | ||
createWebSocketTransport(devnetConfig) satisfies IRpcWebSocketTransportMainnet; | ||
|
||
// When providing a testnet URL, the transport should be typed as an IRpcWebSocketTransportTestnet | ||
createWebSocketTransport(testnetConfig) satisfies IRpcWebSocketTransportTestnet; | ||
//@ts-expect-error Should not be a devnet transport | ||
createWebSocketTransport(testnetConfig) satisfies IRpcWebSocketTransportDevnet; | ||
//@ts-expect-error Should not be a mainnet transport | ||
createWebSocketTransport(testnetConfig) satisfies IRpcWebSocketTransportMainnet; | ||
|
||
// When providing a mainnet URL, the transport should be typed as an IRpcWebSocketTransportMainnet | ||
createWebSocketTransport(mainnetConfig) satisfies IRpcWebSocketTransportMainnet; | ||
//@ts-expect-error Should not be a devnet transport | ||
createWebSocketTransport(mainnetConfig) satisfies IRpcWebSocketTransportDevnet; | ||
//@ts-expect-error Should not be a testnet transport | ||
createWebSocketTransport(mainnetConfig) satisfies IRpcWebSocketTransportTestnet; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters