diff --git a/p/cmta/example.js b/p/cmta/example.js new file mode 100644 index 00000000..944ba0cb --- /dev/null +++ b/p/cmta/example.js @@ -0,0 +1,23 @@ +'use strict' + +const createClient = require('../..') +const cmtaProfile = require('.') + +const client = createClient(cmtaProfile) + +// Broadie Oaks to Domain +client.journeys('000002370', '900000024101', {results: 1, polylines: true}) +// client.departures('000002370', {duration: 1}) +// client.locations('Westgate', {results: 2}) +// client.location('900000042101') // Spichernstr TODO +// client.nearby(52.5137344, 13.4744798, {distance: 60}) TODO +// client.radar(52.52411, 13.41002, 52.51942, 13.41709, {results: 10}) TODO + +// .then(([journey]) => { +// const leg = journey.legs[0] +// return client.journeyLeg(leg.id, leg.line.name, {polyline: true}) +// }) +.then((data) => { + console.log(require('util').inspect(data, {depth: null})) +}) +.catch(console.error) diff --git a/p/cmta/index.js b/p/cmta/index.js new file mode 100644 index 00000000..51ab08f4 --- /dev/null +++ b/p/cmta/index.js @@ -0,0 +1,59 @@ +'use strict' + +const shorten = require('vbb-short-station-name') +const {to12Digit, to9Digit} = require('vbb-translate-ids') +const parseLineName = require('vbb-parse-line') +const parseTicket = require('vbb-parse-ticket') +const getStations = require('vbb-stations') + +const _createParseLine = require('../../parse/line') +const _parseLocation = require('../../parse/location') +const _createParseJourney = require('../../parse/journey') +const _createParseDeparture = require('../../parse/departure') +const _formatStation = require('../../format/station') +const createParseBitmask = require('../../parse/products-bitmask') +const createFormatBitmask = require('../../format/products-bitmask') + +const modes = require('./modes') + +const formatBitmask = createFormatBitmask(modes) + +const transformReqBody = (body) => { + body.client = {type: 'WEB', id: 'CMTA', name: 'webapp', l: ''} + body.ext = 'SBB.TZT.1' + body.ver = '1.13' + body.auth = {type: 'AID', aid: 'weblwemrcrlwemlcri'} + + return body +} + +const defaultProducts = { + bus: true, + rapid: true, + rail: true +} + +const formatBitmask = createFormatBitmask(modes) + +const formatProducts = (products) => { + products = Object.assign(Object.create(null), defaultProducts, products) + return { + type: 'PROD', + mode: 'INC', + value: formatBitmask(products) + '' + } +} + +const cmtaProfile = { + endpoint: 'https://capmetro.hafas.de/bin/mgate.exe', + locale: 'en-US', + timezone: 'America/Chicago', + products: modes.allProducts, + transformReqBody, + formatProducts, + parseProducts: createParseBitmask(modes.allProducts, defaultProducts), +} + +module.exports = cmtaProfile + +module.exports = vbbProfile diff --git a/p/cmta/modes.js b/p/cmta/modes.js new file mode 100644 index 00000000..d66647f0 --- /dev/null +++ b/p/cmta/modes.js @@ -0,0 +1,56 @@ +'use strict' + +const m = { + bus: { + category: 1, + bitmask: 32, + name: 'Bus', + mode: 'bus', + short: 'B', + product: 'bus' + }, + rapid: { + category: 2, + bitmask: 4096, + name: 'MetroRapid', + mode: 'bus', + short: 'R', + product: 'rapid' + }, + rail: { + category: 3, + bitmask: 8, + name: 'MetroRail', + mode: 'train', + short: 'M', + product: 'rail' + }, + unknown: { + category: null, + bitmask: 0, + name: 'unknown', + mode: null, + short: '?', + product: 'unknown' + } +} + +m.bitmasks = [] +m.bitmasks[8] = m.rail +m.bitmasks[32] = m.bus +m.bitmasks[4096] = m.rapid + +m.categories = [ + m.bus, + m.rapid, + m.rail, + m.unknown +] + +m.allProducts = [ + m.bus, + m.rapid, + m.rail +] + +module.exports = m diff --git a/p/cmta/readme.md b/p/cmta/readme.md new file mode 100644 index 00000000..c21fc7c0 --- /dev/null +++ b/p/cmta/readme.md @@ -0,0 +1,18 @@ +# CMTA profile for `hafas-client` + +[*Capital Metropolitan Transportation Authority (CMTA)*](https://en.wikipedia.org/wiki/Capital_Metropolitan_Transportation_Authority) or CapMetro is a public transportation provider serving [Austin, Texas](https://en.wikipedia.org/wiki/Austin,_Texas) metropolitan area. This profile adds *CMTA*-specific customizations to `hafas-client`. + +## Usage + +```js +const createClient = require('hafas-client') +const cmtaProfile = require('hafas-client/p/cmta') + +// create a client with CMTA profile +const client = createClient(cmtaProfile) +``` + + +## Customisations + +- parses *CMTA*-specific products (such as *MetroRapid* and *MetroRail*)