This is an official NPM package that wraps railwayapi API for NodeJS with first class Typescript support.
An example project using this package can be found on Railway Frontend Demo
Install this package using npm
npm install api-railway
Import the module and create a new client. You can pass different base URL, API version, protocol if you want to use different server.
import Client from "api-railway";
const client1 = new Client();
const client2 = new Client({
BASE_URL: "example.com",
API_VRSION: "v1",
DEFAULT_PROTOCOL: "https",
});
Every REST method returns a Promise, making this library async await ready. Following examples will use the await
form.
Each REST endpoint returns an object with type ApiReturnType
type ApiRetrunType<
T extends ApiRetrunDataType,
U extends ErrorObj = ErrorObj,
V = {},
> = {
httpStatusCode: number;
httpStatusText: string;
responseType: ResponseType;
ok: boolean;
url: string;
responseHeaders: Headers;
data: T[] | undefined;
errors: U[] | undefined;
raw: any;
extra?: V;
};
where ApiRetrunDataType
is defined as
type ApiRetrunDataType =
| ScheduleInfo
| ScheduleRow
| State
| StationGeneralInfo
| StationInfo
| TrainGeneralInfo
| TrainInfo
| TrainsBtwStationsType
| TrainType
| Zone;
and ErrorObj
is defined as
type ErrorObj = {
httpCode: number;
type: string;
code: string;
title: string;
description: string;
href: string;
path: string;
[key: string]: any;
};
Param | Type | Required | Default | Info |
---|---|---|---|---|
API_VERSION | String | false | v1 | API version to use |
API_KEY | String | false | ||
BASE_URL | String | false | api.railwayapi.site/api | |
API_TIMEOUT | Number | false | 15000 | |
PROTOCOL | 'http' or 'https' | false | 'https' |
Param | Type | Required | Default | Info |
---|---|---|---|---|
trainNumber | String | true | Train number of train to be searched |
Return type
ApiRetrunType<TrainInfo, ErrorObj>;
Where TrainInfo
is
type TrainInfo = {
id: number;
trainNumber: string;
trainName: string;
trainFullName: string;
stationFrom: { stationCode: string; id: number; stationName: string };
stationTo: { stationCode: string; id: number; stationName: string };
departureTime: string;
arrivalTime: string;
duration: string;
trainRunsOn: TrainRunsOnType;
numberOfStops: number;
trainTypeCode: string;
distance: number;
availableClasses: string[];
avgSpeed: number;
hasPantry: boolean;
returnTrainNumber: string;
updatedAt: string;
};
Example:
const response = await client.trains.getTrains("12279");
Param | Type | Required | Default | Info |
---|---|---|---|---|
q | String | true | Query | |
limit | Number | false | 10 | Number of train to be returned |
Return type
ApiRetrunType<TrainGeneralInfo, ErrorObj>;
Where TrainGeneralInfo
is
export type TrainGeneralInfo = {
id: number;
trainNumber: string;
trainName: string;
};
Example:
const response1 = await client.trains.getTrainsGeneral("122");
const response2 = await client.trains.getTrainsGeneral("122", 20);
Param | Type | Required | Default | Info |
---|---|---|---|---|
trainNumber | String | true | Train number of train to be searched |
Return type
ApiRetrunType<ScheduleInfo, ErrorObj>;
Where ScheduleInfo
is
type ScheduleRow = {
srNo: string;
stationId: number;
stationName: string;
stationCode: string;
arrivalTime: number | null;
departureTime: string | null;
distance: string;
haltTime: string | null;
dayCount: number;
platform: string | null;
boardingDisabled: boolean;
speed: string;
};
Example:
const response = await client.schedules.getSchedules("12279");
Param | Type | Required | Default | Info |
---|---|---|---|---|
stationCode | String | true | Station code of station to be searched |
Return type
ApiRetrunType<StationInfo, ErrorObj>;
Where StationInfo
is
type StationInfo = {
id: number;
stationCode: string;
stationName: string;
stateName: string;
stationType: string;
numberOfPlatforms: number;
hindiStationName: string;
zones: { zoneName: string; zoneCode: string };
latitude: string;
longitude: string;
updatedAt: string;
};
Example:
const response = await client.stations.getStations("NZM");
Param | Type | Required | Default | Info |
---|---|---|---|---|
q | String | true | Query | |
limit | Number | false | 10 |
Return type
ApiRetrunType<StationGeneralInfo, ErrorObj>;
Where StationGeneralInfo
is
type StationGeneralInfo = {
id: number;
stationCode: string;
stationName: string;
};
Example:
const response = await client.stations.getStationsGeneral("N");
Param | Type | Required | Default | Info |
---|---|---|---|---|
fromStationCode | String | true | From station code | |
toStationCode | String | true | To station code | |
date | String | false |
Return type
ApiRetrunType<TrainsBtwStationsType, ErrorObj, TrainsBtwStationsExtraType>;
Where TrainsBtwStationsType
, TrainsBtwStationsExtraType
, and StationInfo
is
type TrainsBtwStationsType = {
id: number;
trainNumber: string;
trainName: string;
trainFullName: string;
trainRunsOn: TrainRunsOnType;
availableClasses: string[];
hasPantry: boolean;
trainType: string;
returnTrainNumber: string;
stationFrom: StationStop;
stationTo: StationStop;
updatedAt: string;
distance: number;
duration: string;
};
type TrainsBtwStationsExtraType = {
stationsInfo: StationInfo[];
};
type StationInfo = {
id: number;
stationCode: string;
stationName: string;
stateName: string;
zoneCode: string;
stationType: string;
hindiStationName: string;
};
Example:
const response = await client.trainsBtwStations.getTrainsBtweenStations(
"NZM",
"GWL",
);