mirror of
https://github.com/kennethnym/aris.git
synced 2026-03-20 17:11:17 +00:00
feat(backend): add TflService
Manages per-user TflSource instances with individual line configuration. Implements FeedSourceProvider so it can be wired into FeedEngineService. Adds TflSource.setLines() so line config can be mutated in place, keeping engine references valid. Also exports ITflApi from @aris/source-tfl for testability. Co-authored-by: Ona <no-reply@ona.com>
This commit is contained in:
@@ -42,18 +42,46 @@ const SEVERITY_PRIORITY: Record<TflAlertSeverity, number> = {
|
||||
* ```
|
||||
*/
|
||||
export class TflSource implements FeedSource<TflAlertFeedItem> {
|
||||
static readonly DEFAULT_LINES_OF_INTEREST: readonly TflLineId[] = [
|
||||
"bakerloo",
|
||||
"central",
|
||||
"circle",
|
||||
"district",
|
||||
"hammersmith-city",
|
||||
"jubilee",
|
||||
"metropolitan",
|
||||
"northern",
|
||||
"piccadilly",
|
||||
"victoria",
|
||||
"waterloo-city",
|
||||
"lioness",
|
||||
"mildmay",
|
||||
"windrush",
|
||||
"weaver",
|
||||
"suffragette",
|
||||
"liberty",
|
||||
"elizabeth",
|
||||
]
|
||||
|
||||
readonly id = "tfl"
|
||||
readonly dependencies = ["location"]
|
||||
|
||||
private readonly client: ITflApi
|
||||
private readonly lines?: TflLineId[]
|
||||
private lines: TflLineId[]
|
||||
|
||||
constructor(options: TflSourceOptions) {
|
||||
if (!options.client && !options.apiKey) {
|
||||
throw new Error("Either client or apiKey must be provided")
|
||||
}
|
||||
this.client = options.client ?? new TflApi(options.apiKey!)
|
||||
this.lines = options.lines
|
||||
this.lines = options.lines ?? [...TflSource.DEFAULT_LINES_OF_INTEREST]
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the set of monitored lines. Takes effect on the next fetchItems call.
|
||||
*/
|
||||
setLinesOfInterest(lines: TflLineId[]): void {
|
||||
this.lines = lines
|
||||
}
|
||||
|
||||
async fetchItems(context: Context): Promise<TflAlertFeedItem[]> {
|
||||
|
||||
Reference in New Issue
Block a user