@drfrost/bods-js
Version:
JavaScript client for the UK's Bus Open Data Service (BODS) API
143 lines • 4.62 kB
TypeScript
import type { DisruptionData } from '../types/index.js';
import { HttpClient } from './http-client.js';
/**
* Client for interacting with the BODS Disruptions API
*
* The Disruptions API provides information about current and planned
* disruptions to bus services in SIRI-SX format (XML).
* Data is updated as new information becomes available.
*/
export declare class DisruptionsClient {
private httpClient;
constructor(httpClient: HttpClient);
/**
* Get all current service disruptions in SIRI-SX format
*
* @returns Promise resolving to SIRI-SX XML data containing all disruptions
*
* @example
* ```typescript
* // Get all current disruptions
* const disruptions = await client.disruptions.getAll();
* console.log('Disruptions XML:', disruptions.xmlData);
*
* // You would typically parse the XML to extract specific disruption details
* const parser = new DOMParser();
* const doc = parser.parseFromString(disruptions.xmlData, 'text/xml');
* ```
*/
getAll(): Promise<DisruptionData>;
/**
* Get current service disruptions (alias for getAll)
*
* @returns Promise resolving to SIRI-SX XML data containing current disruptions
*
* @example
* ```typescript
* const currentDisruptions = await client.disruptions.getCurrent();
* ```
*/
getCurrent(): Promise<DisruptionData>;
/**
* Helper method to parse SIRI-SX XML and extract basic disruption information
* Note: This is a basic parser. For production use, consider a more robust XML parsing solution.
* Requires a DOM environment (browser) or a polyfill like jsdom in Node.js.
*
* @param xmlData - Raw SIRI-SX XML data
* @returns Array of parsed disruption objects
*
* @example
* ```typescript
* const disruptions = await client.disruptions.getAll();
* const parsed = client.disruptions.parseDisruptions(disruptions.xmlData);
*
* parsed.forEach(disruption => {
* console.log(`${disruption.summary}: ${disruption.description}`);
* });
* ```
*/
parseDisruptions(xmlData: string): Array<{
situationNumber?: string;
participantRef?: string;
summary?: string;
description?: string;
severity?: string;
startTime?: string;
endTime?: string;
planned?: boolean;
}>;
/**
* Get and parse current disruptions in one call
*
* @returns Promise resolving to array of parsed disruption objects
*
* @example
* ```typescript
* const disruptions = await client.disruptions.getCurrentParsed();
*
* disruptions.forEach(disruption => {
* if (disruption.planned) {
* console.log(`Planned disruption: ${disruption.summary}`);
* } else {
* console.log(`Unplanned disruption: ${disruption.summary}`);
* }
* });
* ```
*/
getCurrentParsed(): Promise<Array<{
situationNumber?: string;
participantRef?: string;
summary?: string;
description?: string;
severity?: string;
startTime?: string;
endTime?: string;
planned?: boolean;
}>>;
/**
* Filter parsed disruptions by criteria
*
* @param disruptions - Array of parsed disruptions
* @param filters - Filter criteria
* @returns Filtered array of disruptions
*
* @example
* ```typescript
* const allDisruptions = await client.disruptions.getCurrentParsed();
*
* // Get only unplanned disruptions
* const unplanned = client.disruptions.filterDisruptions(allDisruptions, {
* planned: false
* });
*
* // Get disruptions from specific participant
* const tfgmDisruptions = client.disruptions.filterDisruptions(allDisruptions, {
* participantRef: 'TfGM'
* });
* ```
*/
filterDisruptions(disruptions: Array<{
situationNumber?: string;
participantRef?: string;
summary?: string;
description?: string;
severity?: string;
startTime?: string;
endTime?: string;
planned?: boolean;
}>, filters: {
planned?: boolean;
participantRef?: string;
severity?: string;
}): Array<{
situationNumber?: string;
participantRef?: string;
summary?: string;
description?: string;
severity?: string;
startTime?: string;
endTime?: string;
planned?: boolean;
}>;
}
//# sourceMappingURL=disruptions-client.d.ts.map