CMTA profile

This commit is contained in:
Nick Turskyi 2018-06-03 17:10:01 -05:00 committed by Jannis Redmann
parent 313d97c1fc
commit 533f8ece3c
4 changed files with 156 additions and 0 deletions

23
p/cmta/example.js Normal file
View file

@ -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)

59
p/cmta/index.js Normal file
View file

@ -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

56
p/cmta/modes.js Normal file
View file

@ -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

18
p/cmta/readme.md Normal file
View file

@ -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*)