diff --git a/package-lock.json b/package-lock.json index 09eb615..ec27b11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "3.0.0", "license": "GPL-3.0", "dependencies": { - "@owlboard/api-schema-types": "^3.0.3-alpha10", + "@owlboard/api-schema-types": "^3.0.3-alpha17", "install": "^0.13.0", "latlon-geohash": "^2.0.0", "npm": "^11.13.0" @@ -506,9 +506,9 @@ } }, "node_modules/@owlboard/api-schema-types": { - "version": "3.0.3-alpha10", - "resolved": "https://git.fjla.uk/api/packages/OwlBoard/npm/%40owlboard%2Fapi-schema-types/-/3.0.3-alpha10/api-schema-types-3.0.3-alpha10.tgz", - "integrity": "sha512-gwQRhMXSgQYJVg6kc4sP9Dp2zCyubLLdS9Pxa4egED6XiAfG+YfCQZ4HRuGH9jEhp618Z93JyxAXiu7Iq2hBlw==", + "version": "3.0.3-alpha17", + "resolved": "https://git.fjla.uk/api/packages/OwlBoard/npm/%40owlboard%2Fapi-schema-types/-/3.0.3-alpha17/api-schema-types-3.0.3-alpha17.tgz", + "integrity": "sha512-9jtsajZIq/1W9w1XPSIQSH/rcH2mfnS+3XoQpe81Yor2pOVl5+iyHZ9wAlJLrLEVKVVs3k4lkjcM5l6KgWgd9w==", "license": "MIT" }, "node_modules/@tsconfig/node10": { diff --git a/package.json b/package.json index dab219b..36326b9 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "author": "Frederick Boniface", "license": "GPL-3.0", "dependencies": { - "@owlboard/api-schema-types": "^3.0.3-alpha10", + "@owlboard/api-schema-types": "^3.0.3-alpha17", "install": "^0.13.0", "latlon-geohash": "^2.0.0", "npm": "^11.13.0" diff --git a/src/index.ts b/src/index.ts index 327e561..3ab32da 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,3 +9,4 @@ export { PisModule } from './modules/pis.js'; export { LocationFilterModule } from './modules/locationFilter.js'; export { StationDataModule } from './modules/stationData.js'; export { TrainsModule } from './modules/trains.js'; +export { BoardModule } from './modules/board.js'; diff --git a/src/lib/client.ts b/src/lib/client.ts index 39e17da..39eb93d 100644 --- a/src/lib/client.ts +++ b/src/lib/client.ts @@ -3,12 +3,14 @@ import { PisModule } from "../modules/pis.js"; import { LocationFilterModule } from "../modules/locationFilter.js"; import { StationDataModule } from "../modules/stationData.js"; import { TrainsModule } from "../modules/trains.js"; +import { BoardModule } from "../modules/board.js"; export class OwlBoardClient extends BaseClient { public readonly pis: PisModule; public readonly locationFilter: LocationFilterModule; public readonly stationData: StationDataModule; public readonly trains: TrainsModule; + public readonly board: BoardModule constructor(baseUrl: string, apiKey?: string) { super(baseUrl, apiKey); @@ -17,5 +19,6 @@ export class OwlBoardClient extends BaseClient { this.locationFilter = new LocationFilterModule(this); this.stationData = new StationDataModule(this); this.trains = new TrainsModule(this); + this.board = new BoardModule(this); } } \ No newline at end of file diff --git a/src/modules/board.ts b/src/modules/board.ts new file mode 100644 index 0000000..6e562e7 --- /dev/null +++ b/src/modules/board.ts @@ -0,0 +1,21 @@ +import { ApiStationsBoard } from '@owlboard/api-schema-types'; +import type { BaseClient, ApiResult } from '../lib/base.js'; +import { IsValidCrs, IsValidTiploc } from '../lib/validation.js'; +import { ValidationError } from '../lib/errors.js'; + +export class BoardModule { + constructor(private client: BaseClient) { } + + async getByLocation(location: string, customFetch?: typeof fetch): Promise> { + if (!IsValidCrs(location) && !IsValidTiploc(location)) { + throw new ValidationError("Location", "Location must be provided as CRS or TIPLOC"); + } + + const path = `/board/${location.toUpperCase()}`; + + return this.client.request(path, { + method: 'GET', + }, customFetch); + } + +} \ No newline at end of file