@swimmable/sdk
Version:
Official JavaScript/TypeScript SDK for the Swimmable API - Real-time swimming conditions and water quality data
205 lines • 4.75 kB
TypeScript
/**
* Swimmable API SDK Types
* Official TypeScript definitions for the Swimmable API
*/
export interface SwimmableConfig {
/** Your Swimmable API key */
apiKey?: string;
/** Base URL for the API (defaults to https://api.swimmable.app) */
baseUrl?: string;
/** Request timeout in milliseconds (defaults to 10000) */
timeout?: number;
/** Custom headers to include with requests */
headers?: Record<string, string>;
}
export interface Coordinates {
/** Latitude coordinate */
lat: number;
/** Longitude coordinate */
lon: number;
}
export interface BasicConditions {
/** Air temperature in Celsius */
airTemperature: number;
/** Water temperature in Celsius */
waterTemperature: number;
/** Weather description */
weatherDescription: string;
/** UV index */
uvIndex: number;
/** Wind speed in km/h */
windSpeed: number;
/** Wave height in meters */
waveHeight: number;
/** Timestamp of data */
timestamp: string;
/** Indicates if this is demo data */
_demo?: boolean;
/** Additional notes about the data */
_note?: string;
}
export interface WaterConditions {
temperature: {
value: number;
unit: string;
};
ph: number;
turbidity: string;
bacteria: {
enterococcus: number;
threshold: number;
status: string;
};
}
export interface OceanConditions {
waveHeight: {
value: number;
unit: string;
};
wavePeriod: {
value: number;
unit: string;
};
currentSpeed: {
value: number;
unit: string;
};
ripRisk: string;
tideStatus: string;
}
export interface WeatherConditions {
airTemp: {
value: number;
unit: string;
};
windSpeed: {
value: number;
unit: string;
};
windDirection: string;
uvIndex: number;
visibility: {
value: number;
unit: string;
};
cloudCover: number;
precipitation: string;
}
export interface Subscores {
temperature: number;
waterQuality: number;
surfHazard: number;
meteorology: number;
}
export interface EnhancedConditions {
/** Overall swimmability score (1-10) */
swimmabilityScore: number;
/** Location information */
location: {
name: string;
lat: number;
lon: number;
timezone: string;
};
/** Timestamp of data */
timestamp: string;
/** Breakdown of safety scores */
subscores: Subscores;
/** Detailed conditions */
conditions: {
water: WaterConditions;
ocean: OceanConditions;
weather: WeatherConditions;
};
/** Any safety warnings */
warnings: string[];
/** Age of data sources in minutes */
dataAge: {
NDBC: number;
EPA: number;
weather: number;
};
/** Indicates if this is demo data */
_demo?: boolean;
/** Additional notes about the data */
_note?: string;
}
export interface SpotInfo {
id: number;
name: string;
lat: number;
lon: number;
description: string;
region: string;
nearestNOAAStation?: string;
}
export interface SpotsResponse {
spots: SpotInfo[];
count: number;
note?: string;
}
export interface ApiError {
error: string;
message: string;
path?: string;
signup?: string;
docs?: string;
}
export interface RequestOptions {
/** Request timeout in milliseconds */
timeout?: number;
/** Additional headers for this request */
headers?: Record<string, string>;
}
export interface ApiResponse<T> {
data: T;
status: number;
headers: Record<string, string>;
}
export interface HealthStatus {
status: string;
timestamp: string;
service: string;
version: string;
environment: string;
database: string;
cache: string;
}
export interface UsageStats {
total_requests: number;
successful_requests: number;
error_requests: number;
avg_response_time: number;
top_endpoints: Array<{
endpoint: string;
count: number;
}>;
}
export interface ApiKeyInfo {
id: string;
name: string;
key_prefix: string;
description?: string;
permissions: {
endpoints: string[];
rate_limit: number;
};
is_active: boolean;
last_used_at?: string;
expires_at?: string;
created_at: string;
}
export interface CreateApiKeyRequest {
name: string;
description?: string;
permissions?: {
endpoints: string[];
rate_limit: number;
};
expires_in_days?: number;
}
export interface CreateApiKeyResponse {
api_key: string;
api_key_record: ApiKeyInfo;
}
//# sourceMappingURL=types.d.ts.map