@flybywiresim/api-client

Client library for the FlyByWire Simulations API

Usage no npm install needed!

<script type="module">
  import flybywiresimApiClient from 'https://cdn.skypack.dev/@flybywiresim/api-client';
</script>

README

FlyByWire Simulations API Client

The official JavaScript client for the FBW API. The library supports both JavaScript and TypeScript.

Installation

Install the client library using npm:

$ npm install --save @flybywiresim/api-client

Usage

Initializing the client

import { NXApi } from '@flybywiresim/api-client';

NXApi.url = new URL('http://localhost:3000');

By default, the URL is set to https://api.flybywiresim.com. If this is the desired URL this step can be omitted.

METAR

import { Metar } from '@flybywiresim/api-client';

Metar.get(icao, source)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • icao is a string of the the airport ICAO code to get the METAR for.
  • source is the selected datasource for the METAR and is optional. Valid sources are:
    • vatsim
    • ms
    • ivao
    • pilotedge

TAF

import { Taf } from '@flybywiresim/api-client';

Taf.get(icao, source)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • icao is a string of the the airport ICAO code to get the TAF for.
  • source is the selected datasource for the TAF and is optional. Valid sources are:
    • aviationweather
    • faa

ATIS

import { Atis } from '@flybywiresim/api-client';

Atis.get(icao, source)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • icao is a string of the the airport ICAO code to get the ATIS for.
  • source is the selected datasource for the ATIS and is optional. Valid sources are:
    • faa
    • vatsim
    • ivao
    • pilotedge

Airport

import { Airport } from '@flybywiresim/api-client';

Airport.get(icao)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • icao is a string of the the airport ICAO code to search for.

ATC

import { Atis } from '@flybywiresim/api-client';

ATC.get(source)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • source is the selected datasource for the ATC. Valid sources are:
    • vatsim
    • ivao

TELEX connection handling

Connect to TELEX system

import { Telex } from '@flybywiresim/api-client';

Telex.connect(status)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • status is of type AircraftStatus and contains information about the current flight.

The backend might block certain flight numbers from being used for various reasons.

Update the TELEX status

import { Telex } from '@flybywiresim/api-client';

Telex.update(status)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • status is of type AircraftStatus and contains information about the current flight.

The status has to updated every 6 minutes for the connection to stay alive. It is recommended to update the status every 15 seconds for a usable live map. The status can only be updated once a connection has been established.

Disconnect from TELEX system

import { Telex } from '@flybywiresim/api-client';

Telex.disconnect()
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});

The connection can only be disconnected once it has been established. This releases the flight number for reuse and removes the flight from the live map.

TELEX message handling

Sending a message

import { Telex } from '@flybywiresim/api-client';

Telex.sendMessage(recipient, message)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • recipient is a string containing the flight number of the recipient flight.
  • message is a string containing the message to send.

Messages will be filtered for profanity in the backend.

Receiving messages

import { Telex } from '@flybywiresim/api-client';

Telex.fetchMessages()
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});

Messages can only be received once and will be acknowledged by this transaction.

TELEX Querying

Fetch a single page of active connections

import { Telex } from '@flybywiresim/api-client';

Telex.fetchConnections(skip, take, bounds)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • skip is a number and tells the backend to skip the first n connections.
  • take is a number and tells the backend how many connections to send.
  • bounds is an optional bounding box. Query only connections within this area.

take and skip are used to control the pagination. A maximum of 100 entries can be fetched at a time.

Fetch all active connections

import { Telex } from '@flybywiresim/api-client';

Telex.fetchAllConnections(bounds, callback)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • bounds is an optional bounding box. Query only connections within this area.
  • callback gets called after every fetched page.

Fetch a certain connection

import { Telex } from '@flybywiresim/api-client';

Telex.fetchConnection(id)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • id is the unique identifier of the connection.

Find all active connections matching a flight number

import { Telex } from '@flybywiresim/api-client';

Telex.findConnection(flight)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • flight is the flight number to search for.

Count active connections

import { Telex } from '@flybywiresim/api-client';

Telex.countConnections()
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});

Github

Get the newest commit for a branch

import { GitVersions } from '@flybywiresim/api-client';

GitVersions.getNewestCommit(user, repo, branch)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • user the owner of the repository.
  • repo the repository.
  • branch the requested branch.

Get all releases for a repository

import { GitVersions } from '@flybywiresim/api-client';

GitVersions.getReleases(user, repo)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • user the owner of the repository.
  • repo the repository.

Get open pull requests for a repository

import { GitVersions } from '@flybywiresim/api-client';

GitVersions.getPulls(user, repo)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • user the owner of the repository.
  • repo the repository.

Get the artifact URL for a pull request

import { GitVersions } from '@flybywiresim/api-client';

GitVersions.getArtifact(user, repo, pull)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • user the owner of the repository.
  • repo the repository.
  • pull the number of the pull request.

Charts

Get the charts for an airport

import { Charts } from '@flybywiresim/api-client';

Charts.get(icao, source)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});
  • icao is a string of the the airport ICAO code to search for.

GNSS

Fetch data for all GNSS satellites

import { Atis } from '@flybywiresim/api-client';

GNSS.get()
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});

Hoppie

Send the request

import { Hoppie } from '@flybywiresim/api-client';

const body {
  logon: 'XXXXXXXXX',
  from: 'TEST0',
  to: 'TEST0',
  type: 'poll'
}
Hoppie.post(body)
  .then(data => {
    console.log(data);
  }).catch(err => {
    console.error(err);
});

License

This software is licensed under the MIT license.