47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
"""Tools for getting RPC cluster information."""
|
|
|
|
from typing import NamedTuple, Literal, Optional
|
|
|
|
|
|
class ClusterUrls(NamedTuple):
|
|
"""A collection of urls for each cluster."""
|
|
|
|
devnet: str
|
|
testnet: str
|
|
mainnet_beta: str
|
|
|
|
|
|
class Endpoint(NamedTuple):
|
|
"""Container for http and https cluster urls."""
|
|
|
|
http: ClusterUrls
|
|
https: ClusterUrls
|
|
|
|
|
|
ENDPOINT = Endpoint(
|
|
http=ClusterUrls(
|
|
devnet="http://api.devnet.solana.com",
|
|
testnet="http://api.testnet.solana.com",
|
|
mainnet_beta="http://api.mainnet-beta.solana.com/",
|
|
),
|
|
https=ClusterUrls(
|
|
devnet="https://api.devnet.solana.com",
|
|
testnet="https://api.testnet.solana.com",
|
|
mainnet_beta="https://api.mainnet-beta.solana.com/",
|
|
),
|
|
)
|
|
|
|
|
|
Cluster = Literal["devnet", "testnet", "mainnet-beta"]
|
|
|
|
|
|
def cluster_api_url(cluster: Optional[Cluster] = None, tls: bool = True) -> str:
|
|
"""Retrieve the RPC API URL for the specified cluster.
|
|
|
|
:param cluster: The name of the cluster to use.
|
|
:param tls: If True, use https. Defaults to True.
|
|
"""
|
|
urls = ENDPOINT.https if tls else ENDPOINT.http
|
|
if cluster is None:
|
|
return urls.devnet
|
|
return getattr(urls, cluster)
|