A typed Python client for the NEAR JSON-RPC API with Pydantic models and async HTTP support
Project description
NEAR JSON-RPC Python Client
A type-safe, Pythonic client for the NEAR Protocol JSON-RPC API.
Table of contents
- Overview
- Features
- Requirements
- Installation
- Quickstart
- Basic Usage
- Handling Responses & Errors
- Testing
- Contributing
- Deployment Guide
- License
- References
📖 Overview
This library provides a type-safe, developer-friendly Python interface for interacting with the NEAR Protocol JSON-RPC API.
- Fully typed request & response models
- Clean separation between transport, RPC layer, and domain models
- Designed for both scripting and production use
The client is inspired by official NEAR JSON-RPC client in Kotlin.
| Module | Description |
|---|---|
client |
Python JSON-RPC client supporting both sync and async usage, with full NEAR RPC method wrappers (auto-generated) |
models |
Typed Python classes for RPC requests and responses using Pydantic (auto-generated) |
generator |
Tools for generating Python client and Pydantic models from NEAR’s OpenAPI specification |
✨ Features
🎯 Type-Safe API All RPC requests and responses are represented as typed Python models (dataclasses / Pydantic), reducing runtime errors.
⚡ Simple & Explicit Design No magic. Each RPC method maps directly to a NEAR JSON-RPC endpoint.
🛡️ Structured Error Handling Clear distinction between:
- JSON-RPC errors
- HTTP errors
- Network failures
- Serialization issues
🔄 Sync & Async Friendly
- Synchronous client for scripts & backend services using
httpx.Client - Optional async client for asyncio-based applications using
httpx.AsyncClient
📦 Minimal Dependencies
Built on top of well-known Python libraries (httpx and pydantic).
🧪 Testable by Design Easy to mock transport layer for unit & integration tests.
⚙️ Requirements
- Python 3.9+
httpx(used for both sync and async transports)pydantic(for type-safe request/response models)
📦 Installation
pip install near-jsonrpc-client httpx pydantic
🚀 Quickstart
Async Client
import asyncio
from near_jsonrpc_client import NearClientAsync
from near_jsonrpc_models import RpcBlockRequest, BlockId, RpcBlockRequestBlockId, BlockIdBlockHeight
async def main():
client = NearClientAsync(rpc_urls="https://rpc.mainnet.near.org")
params = RpcBlockRequest(
RpcBlockRequestBlockId(
block_id=BlockId(BlockIdBlockHeight(178682261))
)
)
block = await client.block(params=params)
print(block)
await client.close()
asyncio.run(main())
Sync Client
from near_jsonrpc_client import NearClientSync
from near_jsonrpc_models import RpcBlockRequest, BlockId, RpcBlockRequestBlockId, BlockIdBlockHeight
client = NearClientSync(rpc_urls="https://rpc.mainnet.near.org")
params = RpcBlockRequest(
RpcBlockRequestBlockId(
block_id=BlockId(BlockIdBlockHeight(178682261))
)
)
block = client.block(params=params)
print(block)
client.close()
📝 Basic Usage
- Create request models for each RPC method.
- Call the method on the appropriate client (async or sync).
- Receive typed response models.
from near_jsonrpc_models import RpcBlockRequest, RpcBlockRequestBlockId, BlockIdBlockHeight, BlockId
params = RpcBlockRequest(RpcBlockRequestBlockId(block_id=BlockId(BlockIdBlockHeight(178682261))))
response = client.block(params=params)
print(response)
⚠️ Handling Responses & Errors
The client raises structured exceptions:
RpcError– returned from NEAR JSON-RPCRpcHttpError– HTTP errors with status code and bodyRpcTimeoutError– request timeoutRpcClientError– unexpected or invalid responses
Example:
from near_jsonrpc_client import RpcError, RpcHttpError, RpcTimeoutError, RpcClientError
try:
block = client.block(params=params)
except RpcError as e:
print(f"RPC error: {e.error}")
except RpcHttpError as e:
print(f"HTTP error: {e.status_code}, {e.body}")
except RpcTimeoutError as e:
print("Request timed out")
except RpcClientError as e:
print("Invalid response", e)
🧪 Testing
- Simply run
pytestto execute all tests. - The transport layer (
HttpTransportAsyncorHttpTransportSync) is mocked internally, so no actual network calls are made.
🤝 Contributing
- Fork the repository
- Create a feature branch
- Submit a pull request with tests
📜 License
This project is licensed under the Apache-2.0 License. See LICENSE for details.
📦 Deployment Guide
For detailed instructions on project structure, CI/CD workflow, versioning, and deployment steps, see the DEPLOYMENT.md file.
📚 References
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file near_jsonrpc_client-1.0.48.tar.gz.
File metadata
- Download URL: near_jsonrpc_client-1.0.48.tar.gz
- Upload date:
- Size: 125.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d397635f82c2df50e3e66d0b08b30a620642c211a7fb4b8968fee25daa45bf65
|
|
| MD5 |
fdeb808118b110072e9a1442a9639fc1
|
|
| BLAKE2b-256 |
e8688697a6f82467d74180d1a92594ca3ff74379c5bedb0b1676a507fcb70f52
|
File details
Details for the file near_jsonrpc_client-1.0.48-py3-none-any.whl.
File metadata
- Download URL: near_jsonrpc_client-1.0.48-py3-none-any.whl
- Upload date:
- Size: 233.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c96fa81127ed16961965b3667abce667dc2cf34a4ca34d31bab20e85d9f81e1
|
|
| MD5 |
bbf8a472cb5cc01b70592c57e9ab2c60
|
|
| BLAKE2b-256 |
776be27b20aa4b8ad1b343bd6f4f333e906aa4d2c7df198c7259236dbeaf414a
|