0.2.0 • Published 4 years ago

lio-tdi-client v0.2.0

Weekly downloads
2
License
ISC
Repository
github
Last release
4 years ago

lio-tdi-client

A client for LIO Traveller Data Interface (TDI) endpoints with caching support.

npm version build status ISC-licensed minimum Node.js version chat with me on Gitter support me via GitHub Sponsors

Installation

npm install lio-tdi-client

Usage

// create a client
const createLioTdiClient = require('lio-tdi-client')
const endpoint = 'https://tdi.swu.de/tdinterface/'
const client = createLioTdiClient(endpoint)

// fetch stops as Buffer
const stopsBuf = await client.stops({asBuffer: true})

// decode stops Buffer
const {StopTdiArray} = require('lio-tdi-client/pbf').mhcc.app.dataprovider.model.tdiinterface.dstructs
console.log(StopTdiArray.decode(pbf, stopsBuf))
{
	stopTdiArray: [
		{
			duid: {low: 798, high: 14164742, unsigned: false},
			lastModificationTimestamp: {low: 2034426655, high: 371, unsigned: false},
			isDeleted: false,
			number: {low: 2871, high: 0, unsigned: true},
			shortName: 'GZAW',
			longName: 'Günzburg Abz Wasserburg',
			latitude: 174435185,
			longitude: 36965635,
			altitude: {low: 2147483646, high: 0, unsigned: true},
		},
		{
			duid: {low: 799, high: 14164742, unsigned: false},
			lastModificationTimestamp: {low: 2034426655, high: 371, unsigned: false},
			isDeleted: false,
			number: {low: 3466, high: 0, unsigned: true},
			shortName: 'LEBS',
			longName: 'Leipheim Bahnhofstraße',
			latitude: 174416238,
			longitude: 36784764,
			altitude: {low: 2147483646, high: 0, unsigned: true},
		},
		// …
	]
}

Observing data changes

lio-tdi-client comes with a helper, which periodically polls client.version() to check if the endpoint's data version has changed. Use it to find out when to

const observeDataVersion = require('lio-tdi-client/observe')

observeDataVersion(client, (err, version) => {
	if (err) {
		console.error(err)
		return;
	}

	console.log('new data version', version)
	// refetch actual data here, e.g. client.stops()
})

observeDataVersion(client, opt = {}, cb) takes an optional 2nd parameter opt, which overrides the following defaults:

{
	minInterval: 1_000, // start checking every 1s
	factor: 2, // multiply interval whenever the version hasn't changed
	maxInterval: 15_000, // always check at least every 15s
}

Contributing

If you have a question or need support using lio-tdi-client, please double-check your code and setup first. If you think you have found a bug or want to propose a feature, use the issues page.