npm.io
3.0.0 • Published yesterday

@dills1220/tmdb

Licence
Version
3.0.0
Deps
2
Size
47 kB
Vulns
0
Weekly
0

TMDb

npm version

A small, typed Node.js SDK for The Movie Database (TMDb) v3 API.

Requirements

  • Node.js 22.13 or newer
  • A TMDb v3 API key

Install

npm install @dills1220/tmdb

Usage

import {
  Tmdb,
} from '@dills1220/tmdb';

const tmdb = new Tmdb(process.env.TMDB_API_KEY ?? '');
const movie = await tmdb.getMovie(218);

console.log(movie.title);

The optional second constructor argument selects the response language and defaults to en:

const tmdb = new Tmdb(process.env.TMDB_API_KEY ?? '', 'fr');

The SDK continues to use TMDb v3's supported api_key query authentication. Keep API keys out of source control and logs.

API

findId(
  resourceType: 'movie' | 'person',
  externalSource: 'imdb',
  externalId: string,
): Promise<number>;

get<T = Record<string, unknown>>(
  resource: string,
  parameters?: Readonly<Record<string, string | number | null>>,
): Promise<T>;

getCompany(companyId: number): Promise<CompanyType>;
getMovie(movieId: number): Promise<MovieType>;
getMovieBackdropImages(
  movieId: number,
  includeImageLanguage?: readonly string[] | null,
): Promise<readonly MovieBackdropImageType[]>;
getMovieCastCredits(movieId: number): Promise<readonly MovieCastCreditType[]>;
getMovieCrewCredits(movieId: number): Promise<readonly MovieCrewCreditType[]>;
getMoviePosterImages(
  movieId: number,
  includeImageLanguage?: readonly string[] | null,
): Promise<readonly MoviePosterImageType[]>;
getMovieVideos(movieId: number): Promise<readonly MovieVideoType[]>;
getPerson(personId: number): Promise<PersonType>;
getPersonMovieCredits(personId: number): Promise<MovieCreditsType>;

The low-level get() method supports TMDb endpoints that do not yet have a dedicated SDK method. Response keys are converted recursively from snake case to camel case:

const result = await tmdb.get<{
  readonly results: readonly {
    readonly id: number;
    readonly originalTitle: string;
  }[];
}>('search/movie', {
  query: 'The Terminator',
});

Errors and rate limits

Resource lookups throw NotFoundError for HTTP 404 responses. Other TMDb failures throw RemoteError, which exposes TMDb's numeric error code as error.code.

import {
  NotFoundError,
  Tmdb,
} from '@dills1220/tmdb';

const tmdb = new Tmdb(process.env.TMDB_API_KEY ?? '');

try {
  await tmdb.getMovie(0);
} catch (error) {
  if (error instanceof NotFoundError) {
    console.error('Movie not found.');
  } else {
    throw error;
  }
}

HTTP 429 responses are retried up to three times. The client honors Retry-After and TMDb's legacy rate-limit reset header, with a maximum delay of 60 seconds per retry.

Logging

The package uses Roarr for structured logs. Set ROARR_LOG=true to enable logging and use roarr-cli when human-readable output is useful.

Development

npm ci
npm run lint
npm test
npm run build

Tests use Node's built-in test runner and Nock; they never require a live TMDb API key.

Keywords