1.0.0 • Published 4 months ago

@solana-api-toolkit/core v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

Solana API Toolkit Core

Core utilities, interfaces, and shared functionality for the Solana API Toolkit ecosystem.

npm version License: MIT

Features

  • 🔄 HTTP Client: Robust HTTP client with retry logic, circuit breaker, and standardized error handling
  • 🛡️ Error Types: Comprehensive error hierarchy for different API scenarios
  • 🚦 Rate Limiting: Built-in rate limit handling with configurable backoff
  • 💾 Caching: Simple and efficient caching implementation
  • 🧩 Common Types: Shared type definitions used across the toolkit
  • 🔍 Validation: Utilities for validating Solana addresses and other data

Installation

npm install solana-api-toolkit-core

Usage

import { HttpClient, ApiClientConfig } from 'solana-api-toolkit-core';
// Create a client for a specific API
class MyApiClient extends HttpClient {
    constructor(config: ApiClientConfig) {
    super({
        baseUrl: 'https://api.example.com',
        ...config
    });
}
async getResource(id: string): Promise<any> {
        return this.get<any>(`/resources/${id}`);
    }
}
// Use the client
const client = new MyApiClient({ apiKey: 'your-api-key' });
const data = await client.getResource('123');
import {
    ApiError,
    ApiRequestError,
    RateLimitError,
    AuthenticationError,
    NotFoundError,
    ValidationError
} from 'solana-api-toolkit-core';
try {
    // API call
} catch (error) {
    if (error instanceof RateLimitError) {
        console.log(`Rate limited. Retry after ${error.retryAfter} seconds`);
    } else if (error instanceof AuthenticationError) {
        console.log('Authentication failed. Check your API key.');
    } else if (error instanceof NotFoundError) {
        console.log(`Resource not found: ${error.message}`);
    } else if (error instanceof ValidationError) {
        console.log(`Validation error for field ${error.field}: ${error.message}`);
    } else if (error instanceof ApiRequestError) {
        console.log(`API request failed: ${error.message}, Status: ${error.statusCode}`);
    }
}
import { SimpleCache } from 'solana-api-toolkit-core';
const cache = new SimpleCache<any>();
// Set with TTL (time-to-live) in milliseconds
cache.set('key', data, 60000); // Cache for 1 minute
// Get (returns undefined if expired or not found)
const cachedData = cache.get('key');
// Check if exists
const exists = cache.has('key');
// Delete
cache.delete('key');
// Clear all
cache.clear();
import { isValidSolanaAddress } from 'solana-api-toolkit-core';
if (isValidSolanaAddress('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v')) {
// Valid Solana address
}
import { CircuitBreaker } from 'solana-api-toolkit-core';
// Create a circuit breaker with custom settings
const breaker = new CircuitBreaker(
5, // Threshold (number of failures before opening)
30000 // Reset timeout in milliseconds
);
// Record success/failure
breaker.recordSuccess();
breaker.recordFailure();
// Check if requests can be made
if (breaker.canRequest()) {
// Safe to make request
}
import {
    ApiClientConfig,
    TokenInfo,
    TokenBalance,
    WalletPortfolio
} from 'solana-api-toolkit-core';

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Backlog

  • Additional @solana-api-toolkit packages for other common API uses
1.0.0

4 months ago

0.1.0

4 months ago