JavaScript SDK

Official JavaScript/TypeScript client for the emissions.dev API.

Installation

npm install @emissions-dev-api/sdk

Quick Start

import { EmissionsClient } from '@emissions-dev-api/sdk';

const client = new EmissionsClient({
  apiKey: process.env.EMISSIONS_API_KEY
});

const result = await client.freight.calculate({
  origin_country: 'GB',
  destination_country: 'FR',
  weight: 1000
});

console.log(result.data.attributes.emissions.co2e);

Configuration

const client = new EmissionsClient({
  apiKey: 'em_live_xxxx',
  baseUrl: 'https://api.emissions.dev/v1', // Default
  timeout: 30000, // Request timeout in ms
  retries: 3, // Number of retries
});

Freight API

const result = await client.freight.calculate({
  origin_country: 'GB',
  destination_country: 'DE',
  origin_location: 'London',
  destination_location: 'Berlin',
  weight: 5000,
  transport_mode: 'road',
  equivalents: true
});

Travel API

const result = await client.travel.calculate({
  origin_country: 'GB',
  destination_country: 'FR',
  origin_location: 'London',
  destination_location: 'Paris',
  transport_mode: 'flight',
  cabin_class: 'business',
  passengers: 2,
  return_trip: true
});

Hotel API

// Calculate emissions
const result = await client.hotel.calculate({
  country: 'GB',
  nights: 3,
  rooms: 1
});

// Get all factors
const factors = await client.hotel.factors();

// Compare countries
const comparison = await client.hotel.compare({
  countries: ['GB', 'FR', 'DE', 'ES'],
  nights: 5
});

Error Handling

import { 
  EmissionsClient,
  UnauthorizedError,
  ValidationError,
  RateLimitError
} from '@emissions-dev/sdk';

try {
  const result = await client.freight.calculate({ ... });
} catch (error) {
  if (error instanceof UnauthorizedError) {
    console.error('Invalid API key');
  } else if (error instanceof ValidationError) {
    console.error('Validation error:', error.field, error.message);
  } else if (error instanceof RateLimitError) {
    console.error('Rate limited. Retry after:', error.retryAfter);
  }
}

TypeScript Support

Full type definitions are included:

import { 
  EmissionsClient,
  FreightCalculationParams,
  FreightEmissionResponse
} from '@emissions-dev/sdk';

const params: FreightCalculationParams = {
  origin_country: 'GB',
  destination_country: 'FR',
  weight: 1000
};

const result: FreightEmissionResponse = await client.freight.calculate(params);