SDKs
TypeScript SDK
Official TypeScript/JavaScript client for AltSportsLeagues API
TypeScript SDK
The official TypeScript SDK provides a type-safe, promise-based interface to the AltSportsLeagues API. Works in Node.js and modern browsers.
Installation
npm install altsportsleagues
# or
yarn add altsportsleagues
# or
pnpm add altsportsleaguesRequirements: Node.js 16+ or modern browser with ES2020 support
Quick Start
import { AltSportsLeagues } from 'altsportsleagues';
const client = new AltSportsLeagues({
apiKey: process.env.ASL_API_KEY,
timeout: 30000, // optional, in milliseconds
});
// List leagues
const leagues = await client.leagues.list({
tier: 'tier-2',
sport: 'Soccer',
limit: 10
});
console.log(leagues.data);Configuration
Constructor Options
interface ClientOptions {
apiKey: string; // Required: Your API key
baseUrl?: string; // Optional: API base URL
timeout?: number; // Optional: Request timeout (ms)
retries?: number; // Optional: Max retry attempts
retryDelay?: number; // Optional: Delay between retries (ms)
headers?: Record<string, string>; // Optional: Custom headers
}
const client = new AltSportsLeagues({
apiKey: 'your_api_key',
timeout: 30000,
retries: 3,
retryDelay: 1000,
});API Reference
Leagues
List Leagues
const leagues = await client.leagues.list({
sportType?: string;
archetype?: string;
tier?: 'tier-1' | 'tier-2' | 'tier-3' | 'tier-4';
country?: string;
limit?: number; // default: 100
offset?: number; // default: 0
});
// Response type
interface LeagueListResponse {
data: LeagueBasic[];
meta: {
total: number;
page: number;
limit: number;
has_more: boolean;
api_version: string;
timestamp: string;
};
}Get League Details
const league = await client.leagues.get('league_001');
// Response type
interface LeagueDetailResponse {
data: LeagueDetailed;
meta: MetaInfo;
}Get League Stats
const stats = await client.leagues.stats();
// Response includes tier_breakdown, sport_bucket_breakdown, etc.Discovery
Search Leagues
const results = await client.discovery.search({
query: 'professional pickleball leagues in North America',
minConfidence?: number; // 0-1, default: 0.5
limit?: number; // default: 10
});
// Each result includes confidence_scoreFind Similar Leagues
const similar = await client.discovery.similar('league_001', {
limit?: number; // default: 10
});
// Each result includes similarity_scoreValuation
Evaluate League Quality
const valuation = await client.valuation.evaluate({
leagueId: 'league_001',
includeApiAssessment?: boolean; // default: false
includeDataQuality?: boolean; // default: false
});
// Response includes:
// - composite_score (0-100)
// - tier classification
// - dimensional breakdown
// - estimated_annual_value
// - reasoningQualification
Score Qualification
const score = await client.qualification.score({
leagueId: 'league_001',
mappings: [
{
source: 'match_id',
target: 'event.id',
confirmed: true
}
],
qualityMetrics: {
overallScore: 85,
mappedPercentage: 90,
confirmedPercentage: 80,
recommendation: 'accept'
}
});
// Response includes:
// - qualified (boolean)
// - qualification_score (0-100)
// - recommendation
// - estimated_tier
// - engineering_effort estimateError Handling
The SDK throws typed errors that you can catch and handle:
import { AltSportsLeagues, APIError } from 'altsportsleagues';
const client = new AltSportsLeagues({ apiKey: 'demo-0001' });
try {
const league = await client.leagues.get('invalid_id');
} catch (error) {
if (error instanceof APIError) {
console.error('API Error:', error.message);
console.error('Status:', error.status);
console.error('Code:', error.code);
console.error('Details:', error.details);
} else {
console.error('Unexpected error:', error);
}
}Error Types
class APIError extends Error {
status: number; // HTTP status code
code: string; // Error code (e.g., 'RESOURCE_NOT_FOUND')
details?: any; // Additional error details
}
class RateLimitError extends APIError {
retryAfter: number; // Seconds until rate limit resets
}
class AuthenticationError extends APIError {
// Thrown for 401 responses
}
class ValidationError extends APIError {
fields: Record<string, string>; // Field-level validation errors
}TypeScript Support
The SDK is written in TypeScript and provides full type definitions:
import type {
LeagueBasic,
LeagueDetailed,
LeagueListResponse,
SearchResult,
ValuationResult,
QualificationResult,
} from 'altsportsleagues';
const leagues: LeagueListResponse = await client.leagues.list();
const league: LeagueDetailed = leagues.data[0];Pagination
Helper for paginating through large result sets:
async function* paginateLeagues(
client: AltSportsLeagues,
options: any = {}
) {
let offset = 0;
const limit = options.limit || 100;
while (true) {
const response = await client.leagues.list({
...options,
limit,
offset,
});
yield* response.data;
if (!response.meta.has_more) break;
offset += limit;
}
}
// Usage
for await (const league of paginateLeagues(client, { tier: 'tier-2' })) {
console.log(league.name);
}Advanced Usage
Custom Headers
const client = new AltSportsLeagues({
apiKey: 'your_api_key',
headers: {
'X-Custom-Header': 'value',
'User-Agent': 'MyApp/1.0'
}
});Retry Configuration
const client = new AltSportsLeagues({
apiKey: 'your_api_key',
retries: 3, // Max 3 retries
retryDelay: 1000, // 1 second between retries
});Timeout Handling
const client = new AltSportsLeagues({
apiKey: 'your_api_key',
timeout: 10000, // 10 second timeout
});
try {
const leagues = await client.leagues.list();
} catch (error) {
if (error.code === 'ETIMEDOUT') {
console.error('Request timed out');
}
}Examples
Browse Leagues by Tier
const tier1Leagues = await client.leagues.list({ tier: 'tier-1' });
const tier2Leagues = await client.leagues.list({ tier: 'tier-2' });
console.log(`Tier 1: ${tier1Leagues.data.length} leagues`);
console.log(`Tier 2: ${tier2Leagues.data.length} leagues`);Search and Evaluate
// Search for leagues
const results = await client.discovery.search({
query: 'professional pickleball',
minConfidence: 0.7
});
// Evaluate top result
if (results.data.length > 0) {
const topLeague = results.data[0];
const valuation = await client.valuation.evaluate({
leagueId: topLeague.id
});
console.log(`${topLeague.name}:`);
console.log(` Score: ${valuation.data.composite_score}/100`);
console.log(` Tier: ${valuation.data.tier}`);
console.log(` Value: $${valuation.data.estimated_annual_value}`);
}Compare Leagues
const [league1, league2] = await Promise.all([
client.valuation.evaluate({ leagueId: 'league_001' }),
client.valuation.evaluate({ leagueId: 'league_002' })
]);
console.log('Comparison:');
console.log(`League 1: ${league1.data.composite_score}/100`);
console.log(`League 2: ${league2.data.composite_score}/100`);