@cyanheads/wsdot-mcp-server 0.2.6 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/AGENTS.md +1 -1
  2. package/CLAUDE.md +1 -1
  3. package/README.md +32 -23
  4. package/changelog/0.3.x/0.3.0.md +30 -0
  5. package/changelog/0.4.x/0.4.0.md +26 -0
  6. package/dist/index.js +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.d.ts +9 -2
  9. package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.d.ts.map +1 -1
  10. package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.js +40 -5
  11. package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.js.map +1 -1
  12. package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.d.ts +10 -3
  13. package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.d.ts.map +1 -1
  14. package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.js +96 -20
  15. package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.js.map +1 -1
  16. package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.d.ts +2 -2
  17. package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.d.ts.map +1 -1
  18. package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.js +12 -5
  19. package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.js.map +1 -1
  20. package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.d.ts +2 -2
  21. package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.d.ts.map +1 -1
  22. package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.js +9 -4
  23. package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.js.map +1 -1
  24. package/dist/mcp-server/tools/definitions/get-terminal-space.tool.d.ts.map +1 -1
  25. package/dist/mcp-server/tools/definitions/get-terminal-space.tool.js +2 -0
  26. package/dist/mcp-server/tools/definitions/get-terminal-space.tool.js.map +1 -1
  27. package/dist/mcp-server/tools/definitions/get-toll-rates.tool.d.ts +4 -0
  28. package/dist/mcp-server/tools/definitions/get-toll-rates.tool.d.ts.map +1 -1
  29. package/dist/mcp-server/tools/definitions/get-toll-rates.tool.js +123 -79
  30. package/dist/mcp-server/tools/definitions/get-toll-rates.tool.js.map +1 -1
  31. package/dist/mcp-server/tools/definitions/get-travel-times.tool.d.ts.map +1 -1
  32. package/dist/mcp-server/tools/definitions/get-travel-times.tool.js +103 -101
  33. package/dist/mcp-server/tools/definitions/get-travel-times.tool.js.map +1 -1
  34. package/dist/mcp-server/tools/definitions/search-alerts.tool.d.ts +10 -0
  35. package/dist/mcp-server/tools/definitions/search-alerts.tool.d.ts.map +1 -1
  36. package/dist/mcp-server/tools/definitions/search-alerts.tool.js +152 -130
  37. package/dist/mcp-server/tools/definitions/search-alerts.tool.js.map +1 -1
  38. package/dist/mcp-server/tools/definitions/search-cameras.tool.d.ts +12 -0
  39. package/dist/mcp-server/tools/definitions/search-cameras.tool.d.ts.map +1 -1
  40. package/dist/mcp-server/tools/definitions/search-cameras.tool.js +118 -67
  41. package/dist/mcp-server/tools/definitions/search-cameras.tool.js.map +1 -1
  42. package/dist/mcp-server/tools/page-budget.d.ts +56 -0
  43. package/dist/mcp-server/tools/page-budget.d.ts.map +1 -0
  44. package/dist/mcp-server/tools/page-budget.js +76 -0
  45. package/dist/mcp-server/tools/page-budget.js.map +1 -0
  46. package/dist/services/ferry/ferry-service.d.ts +20 -0
  47. package/dist/services/ferry/ferry-service.d.ts.map +1 -1
  48. package/dist/services/ferry/ferry-service.js +186 -49
  49. package/dist/services/ferry/ferry-service.js.map +1 -1
  50. package/dist/services/ferry/types.d.ts +52 -4
  51. package/dist/services/ferry/types.d.ts.map +1 -1
  52. package/dist/services/text-field.d.ts +31 -0
  53. package/dist/services/text-field.d.ts.map +1 -0
  54. package/dist/services/text-field.js +41 -0
  55. package/dist/services/text-field.js.map +1 -0
  56. package/dist/services/traffic/traffic-service.d.ts.map +1 -1
  57. package/dist/services/traffic/traffic-service.js +66 -86
  58. package/dist/services/traffic/traffic-service.js.map +1 -1
  59. package/dist/services/traffic/types.d.ts +3 -3
  60. package/dist/services/traffic/types.d.ts.map +1 -1
  61. package/dist/services/wcf-date.d.ts +6 -4
  62. package/dist/services/wcf-date.d.ts.map +1 -1
  63. package/dist/services/wcf-date.js +8 -4
  64. package/dist/services/wcf-date.js.map +1 -1
  65. package/package.json +2 -2
  66. package/server.json +3 -3
@@ -6,13 +6,74 @@
6
6
  import { validationError } from '@cyanheads/mcp-ts-core/errors';
7
7
  import { withRetry } from '@cyanheads/mcp-ts-core/utils';
8
8
  import { getServerConfig } from '../../config/server-config.js';
9
- import { htmlToText } from '../html-text.js';
9
+ import { htmlTextField, nonBlank, nonBlankHtml, textField } from '../text-field.js';
10
10
  import { wcfDateField } from '../wcf-date.js';
11
11
  import { assertUpstreamJson, fetchUpstream, redactUrl } from '../wsdot-http.js';
12
12
  const BASE_URL = 'https://www.wsdot.wa.gov/Ferries/API';
13
13
  const TIMEOUT_MS = 15_000;
14
14
  const SERVICE = 'WSF Ferry API';
15
+ /** Most `terminalsandmatesbyroute` lookups one routes call keeps in flight. */
16
+ const PAIR_LOOKUP_CONCURRENCY = 5;
17
+ /**
18
+ * WSF's rejection of a trip date outside the window it has published — "The TripDate 1/1/2099 is
19
+ * not valid. The valid range begins with today's date (…) and extends to the end of the most
20
+ * recently posted schedule (…)." Distinct from a terminal-pair rejection, which names the TripDate
21
+ * only after "is not valid".
22
+ */
23
+ const TRIP_DATE_REJECTED = /\bTripDate\s+\S+\s+is not valid\b/i;
24
+ /** The `Message` WSF puts in a JSON error body, or `undefined` when the body carries none. */
25
+ function wsfMessage(body) {
26
+ try {
27
+ const parsed = JSON.parse(body);
28
+ if (parsed !== null && typeof parsed === 'object' && 'Message' in parsed) {
29
+ const { Message } = parsed;
30
+ return typeof Message === 'string' ? Message : undefined;
31
+ }
32
+ }
33
+ catch {
34
+ // Not JSON — an HTML page or plain text, which assertUpstreamJson classifies.
35
+ }
36
+ return undefined;
37
+ }
38
+ /**
39
+ * Throw `invalid_date` when WSF rejected the request's trip date. WSF's message is kept whole: it
40
+ * states the window it accepts, measured from its own Pacific service day.
41
+ */
42
+ function assertTripDateAccepted(message, endpoint, status, ctx) {
43
+ if (message === undefined || !TRIP_DATE_REJECTED.test(message))
44
+ return;
45
+ throw validationError(`WSF has no schedule for the requested trip date. ${message}`, {
46
+ url: endpoint,
47
+ status,
48
+ reason: 'invalid_date',
49
+ retryable: false,
50
+ ...ctx.recoveryFor('invalid_date'),
51
+ });
52
+ }
53
+ /**
54
+ * A route's pairs as `terminalsandmatesbyroute` lists them. A pair missing either terminal ID is left
55
+ * out — it exists to be passed to the schedule tool, which needs both.
56
+ */
57
+ function normalizeTerminalPairs(raw) {
58
+ return (raw ?? []).flatMap((p) => p.DepartingTerminalID != null && p.ArrivingTerminalID != null
59
+ ? [
60
+ {
61
+ departingTerminalId: p.DepartingTerminalID,
62
+ ...textField('departingTerminalName', p.DepartingDescription),
63
+ arrivingTerminalId: p.ArrivingTerminalID,
64
+ ...textField('arrivingTerminalName', p.ArrivingDescription),
65
+ },
66
+ ]
67
+ : []);
68
+ }
15
69
  export class FerryApiService {
70
+ /**
71
+ * Terminal pairs keyed by `{tripDate}/{routeId}`. WSF lists the lookup as cacheable until its
72
+ * `cacheflushdate` stamp changes, so the entries hold only while {@link pairCacheStamp} matches it;
73
+ * a new stamp empties the map. Public upstream data, so it is shared across tenants.
74
+ */
75
+ pairCache = new Map();
76
+ pairCacheStamp;
16
77
  constructor(_config, _storage) { }
17
78
  accessCode() {
18
79
  return getServerConfig().accessCode;
@@ -28,6 +89,10 @@ export class FerryApiService {
28
89
  // The body is read before any status check: WSF explains an unregistered access code in
29
90
  // the body of a 400, which a status-first throw discards unread.
30
91
  const body = await response.text();
92
+ // A trip date outside WSF's window is an input error whatever the status it arrives with,
93
+ // so it is classified before a non-2xx falls through to api_unavailable.
94
+ if (!response.ok)
95
+ assertTripDateAccepted(wsfMessage(body), endpoint, response.status, ctx);
31
96
  assertUpstreamJson({ body, endpoint, response, service: SERVICE }, ctx);
32
97
  const parsed = JSON.parse(body);
33
98
  // Ferry API returns HTTP 200 with {"Message":"..."} for validation errors
@@ -36,6 +101,7 @@ export class FerryApiService {
36
101
  !Array.isArray(parsed) &&
37
102
  'Message' in parsed) {
38
103
  const msg = parsed.Message;
104
+ assertTripDateAccepted(msg, endpoint, response.status, ctx);
39
105
  throw validationError(`WSF Ferry API error: ${msg}`, { url: endpoint });
40
106
  }
41
107
  return parsed;
@@ -72,57 +138,131 @@ export class FerryApiService {
72
138
  }
73
139
  async getTerminals(ctx) {
74
140
  ctx.log.info('Fetching ferry terminals');
75
- const raw = await this.fetchJson('Terminals/rest/terminalbasics', ctx);
141
+ // terminallocations carries the same IDs, names, and abbreviations as terminalbasics, in the
142
+ // same order, plus the coordinates terminalbasics never sends.
143
+ const raw = await this.fetchJson('Terminals/rest/terminallocations', ctx);
76
144
  return (raw ?? []).map((t) => ({
77
- terminalId: t.TerminalID ?? 0,
78
- terminalName: t.TerminalName ?? 'Unknown',
79
- ...(t.TerminalAbbrev != null && { terminalAbbrev: t.TerminalAbbrev }),
145
+ ...(t.TerminalID != null && { terminalId: t.TerminalID }),
146
+ ...textField('terminalName', t.TerminalName),
147
+ ...textField('terminalAbbrev', t.TerminalAbbrev),
80
148
  ...(t.Latitude != null && { latitude: t.Latitude }),
81
149
  ...(t.Longitude != null && { longitude: t.Longitude }),
82
150
  }));
83
151
  }
152
+ async fetchRoutes(tripDate, ctx) {
153
+ return ((await this.fetchJson(`Schedule/rest/routes/${tripDate}`, ctx)) ?? []);
154
+ }
155
+ /**
156
+ * Whether WSF lists any route for the trip date. A date inside WSF's window whose season has no
157
+ * sailings loaded yet lists none — and WSF then rejects every terminal pair on it exactly as it
158
+ * rejects a pair that never has service, so this is what tells the two apart.
159
+ */
160
+ async hasRoutes(tripDate, ctx) {
161
+ ctx.log.info('Checking for ferry routes', { tripDate });
162
+ return (await this.fetchRoutes(tripDate, ctx)).length > 0;
163
+ }
84
164
  async getRoutes(tripDate, ctx) {
85
165
  ctx.log.info('Fetching ferry routes', { tripDate });
86
- const raw = await this.fetchJson(`Schedule/rest/routes/${tripDate}`, ctx);
87
- return (raw ?? []).map((r) => ({
166
+ const raw = await this.fetchRoutes(tripDate, ctx);
167
+ const routeIds = [...new Set(raw.flatMap((r) => (r.RouteID != null ? [r.RouteID] : [])))];
168
+ const pairs = await this.terminalPairsByRoute(tripDate, routeIds, ctx);
169
+ return raw.map((r) => ({
88
170
  ...(r.RouteID != null && { routeId: r.RouteID }),
89
- ...(r.RouteAbbrev != null && { routeAbbrev: r.RouteAbbrev }),
90
- ...(r.Description != null && { description: r.Description }),
171
+ ...textField('routeAbbrev', r.RouteAbbrev),
172
+ ...textField('description', r.Description),
173
+ ...(r.RouteID != null && { terminalPairs: pairs.get(r.RouteID) ?? [] }),
91
174
  }));
92
175
  }
93
- async getSchedule(departingTerminalId, arrivingTerminalId, tripDate, remainingOnly, ctx) {
94
- let path;
95
- const todayDate = FerryApiService.todayFerryDate();
96
- const isToday = tripDate === todayDate;
97
- // remainingOnly is only meaningful for today's sailings; ignore it for future dates
98
- if (isToday) {
99
- const flag = remainingOnly ? 'true' : 'false';
100
- path = `Schedule/rest/scheduletoday/${departingTerminalId}/${arrivingTerminalId}/${flag}`;
176
+ /**
177
+ * The pairs each route serves on the trip date, from the cache when WSF's flush stamp still
178
+ * matches and otherwise one `terminalsandmatesbyroute` request per route. Any failed request fails
179
+ * the call — a route list with some routes' pairs missing would read as those routes serving none.
180
+ */
181
+ async terminalPairsByRoute(tripDate, routeIds, ctx) {
182
+ const pairs = new Map();
183
+ if (routeIds.length === 0)
184
+ return pairs;
185
+ const stamp = JSON.stringify(await this.fetchJson('Schedule/rest/cacheflushdate', ctx));
186
+ if (stamp !== this.pairCacheStamp) {
187
+ this.pairCache.clear();
188
+ this.pairCacheStamp = stamp;
189
+ }
190
+ const missing = [];
191
+ for (const routeId of routeIds) {
192
+ const cached = this.pairCache.get(`${tripDate}/${routeId}`);
193
+ if (cached)
194
+ pairs.set(routeId, cached);
195
+ else
196
+ missing.push(routeId);
101
197
  }
102
- else {
103
- path = `Schedule/rest/schedule/${tripDate}/${departingTerminalId}/${arrivingTerminalId}`;
198
+ for (let i = 0; i < missing.length; i += PAIR_LOOKUP_CONCURRENCY) {
199
+ const batch = missing.slice(i, i + PAIR_LOOKUP_CONCURRENCY);
200
+ const results = await Promise.all(batch.map((routeId) => this.fetchJson(`Schedule/rest/terminalsandmatesbyroute/${tripDate}/${routeId}`, ctx)));
201
+ batch.forEach((routeId, j) => {
202
+ const routePairs = normalizeTerminalPairs(results[j] ?? null);
203
+ // A concurrent call may have seen a newer stamp while this batch was in flight; pairs
204
+ // fetched under the old one are served to this call but never cached under the new one.
205
+ if (this.pairCacheStamp === stamp)
206
+ this.pairCache.set(`${tripDate}/${routeId}`, routePairs);
207
+ pairs.set(routeId, routePairs);
208
+ });
104
209
  }
210
+ ctx.log.info('Ferry terminal pairs resolved', {
211
+ tripDate,
212
+ routes: routeIds.length,
213
+ lookedUp: missing.length,
214
+ fromCache: routeIds.length - missing.length,
215
+ });
216
+ return pairs;
217
+ }
218
+ async getSchedule(departingTerminalId, arrivingTerminalId, tripDate, remainingOnly, ctx) {
219
+ // remainingOnly applies only to today's sailings — the dated endpoint has no such filter — so
220
+ // the value reported back is the one that actually shaped the result.
221
+ const isToday = tripDate === FerryApiService.todayFerryDate();
222
+ const effectiveRemainingOnly = isToday && remainingOnly;
223
+ const path = isToday
224
+ ? `Schedule/rest/scheduletoday/${departingTerminalId}/${arrivingTerminalId}/${effectiveRemainingOnly}`
225
+ : `Schedule/rest/schedule/${tripDate}/${departingTerminalId}/${arrivingTerminalId}`;
105
226
  ctx.log.info('Fetching ferry schedule', {
106
227
  departingTerminalId,
107
228
  arrivingTerminalId,
108
229
  tripDate,
109
- remainingOnly,
230
+ remainingOnly: effectiveRemainingOnly,
110
231
  });
111
232
  const raw = await this.fetchJson(path, ctx);
112
233
  // Schedule response nests sailings in TerminalCombos[0].Times
113
234
  const combo = raw.TerminalCombos?.[0];
235
+ // Annotations are HTML and some carry nothing once rendered. Dropping a blank one shifts the
236
+ // positions after it, so each sailing's indexes are remapped onto the entries kept — and an
237
+ // index that pointed at nothing is dropped — so every index resolves.
238
+ const annotations = [];
239
+ const keptAt = new Map();
240
+ for (const [i, rawNote] of (combo?.Annotations ?? []).entries()) {
241
+ const note = nonBlankHtml(rawNote);
242
+ if (note == null)
243
+ continue;
244
+ keptAt.set(i, annotations.length);
245
+ annotations.push(note);
246
+ }
114
247
  return {
115
- ...(combo?.DepartingTerminalName != null && {
116
- departingTerminalName: combo.DepartingTerminalName,
117
- }),
118
- ...(combo?.ArrivingTerminalName != null && {
119
- arrivingTerminalName: combo.ArrivingTerminalName,
120
- }),
248
+ ...textField('departingTerminalName', combo?.DepartingTerminalName),
249
+ ...textField('arrivingTerminalName', combo?.ArrivingTerminalName),
121
250
  tripDate,
251
+ remainingOnly: effectiveRemainingOnly,
252
+ ...(combo?.Annotations != null && { annotations }),
253
+ ...htmlTextField('sailingNotes', combo?.SailingNotes),
122
254
  sailings: (combo?.Times ?? []).map((s) => ({
123
255
  ...wcfDateField('departureTime', s.DepartingTime),
124
256
  ...wcfDateField('arrivalTime', s.ArrivingTime),
125
- ...(s.VesselName != null && { vesselName: s.VesselName }),
257
+ ...textField('vesselName', s.VesselName),
258
+ ...(s.VesselID != null && { vesselId: s.VesselID }),
259
+ ...(s.LoadingRule != null && { loadingRule: s.LoadingRule }),
260
+ ...(typeof s.VesselHandicapAccessible === 'boolean' && {
261
+ vesselHandicapAccessible: s.VesselHandicapAccessible,
262
+ }),
263
+ ...(s.AnnotationIndexes != null && {
264
+ annotationIndexes: s.AnnotationIndexes.flatMap((i) => keptAt.get(i) ?? []),
265
+ }),
126
266
  })),
127
267
  };
128
268
  }
@@ -131,13 +271,13 @@ export class FerryApiService {
131
271
  const raw = await this.fetchJson('Vessels/rest/vessellocations', ctx);
132
272
  return (raw ?? []).map((v) => ({
133
273
  ...(v.VesselID != null && { vesselId: v.VesselID }),
134
- ...(v.VesselName != null && { vesselName: v.VesselName }),
274
+ ...textField('vesselName', v.VesselName),
135
275
  ...(typeof v.InService === 'boolean' && { inService: v.InService }),
136
276
  ...(typeof v.AtDock === 'boolean' && { atDock: v.AtDock }),
137
277
  ...(v.DepartingTerminalID != null && { departingTerminalId: v.DepartingTerminalID }),
138
- ...(v.DepartingTerminalName != null && { departingTerminalName: v.DepartingTerminalName }),
278
+ ...textField('departingTerminalName', v.DepartingTerminalName),
139
279
  ...(v.ArrivingTerminalID != null && { arrivingTerminalId: v.ArrivingTerminalID }),
140
- ...(v.ArrivingTerminalName != null && { arrivingTerminalName: v.ArrivingTerminalName }),
280
+ ...textField('arrivingTerminalName', v.ArrivingTerminalName),
141
281
  ...(v.Latitude != null && { latitude: v.Latitude }),
142
282
  ...(v.Longitude != null && { longitude: v.Longitude }),
143
283
  ...(v.Speed != null && { speed: v.Speed }),
@@ -145,7 +285,7 @@ export class FerryApiService {
145
285
  ...wcfDateField('leftDock', v.LeftDock),
146
286
  ...wcfDateField('eta', v.Eta),
147
287
  ...wcfDateField('scheduledDeparture', v.ScheduledDeparture),
148
- opRouteAbbrev: v.OpRouteAbbrev ?? [],
288
+ opRouteAbbrev: (v.OpRouteAbbrev ?? []).flatMap((abbrev) => nonBlank(abbrev) ?? []),
149
289
  ...wcfDateField('timestamp', v.TimeStamp),
150
290
  }));
151
291
  }
@@ -154,7 +294,7 @@ export class FerryApiService {
154
294
  const raw = await this.fetchJson('Terminals/rest/terminalsailingspace', ctx);
155
295
  return (raw ?? []).map((t) => ({
156
296
  ...(t.TerminalID != null && { terminalId: t.TerminalID }),
157
- ...(t.TerminalName != null && { terminalName: t.TerminalName }),
297
+ ...textField('terminalName', t.TerminalName),
158
298
  departingSpaces: (t.DepartingSpaces ?? []).flatMap((s) => {
159
299
  // Space counts are nested per arriving terminal; expand into one entry per arrival terminal
160
300
  const arrivalTerminals = s.SpaceForArrivalTerminals ?? [];
@@ -164,7 +304,7 @@ export class FerryApiService {
164
304
  {
165
305
  ...wcfDateField('departure', s.Departure),
166
306
  ...(typeof s.IsCancelled === 'boolean' && { isCancelled: s.IsCancelled }),
167
- ...(s.VesselName != null && { vesselName: s.VesselName }),
307
+ ...textField('vesselName', s.VesselName),
168
308
  ...(s.MaxSpaceCount != null && { maxSpaceCount: s.MaxSpaceCount }),
169
309
  },
170
310
  ];
@@ -172,10 +312,10 @@ export class FerryApiService {
172
312
  return arrivalTerminals.map((a) => ({
173
313
  ...wcfDateField('departure', s.Departure),
174
314
  ...(typeof s.IsCancelled === 'boolean' && { isCancelled: s.IsCancelled }),
175
- ...(s.VesselName != null && { vesselName: s.VesselName }),
315
+ ...textField('vesselName', s.VesselName),
176
316
  // TerminalName is an itinerary string and its sibling TerminalID is the *departing*
177
317
  // terminal on multi-stop routes; ArrivalTerminalIDs is the only reliable destination.
178
- ...(a.TerminalName != null && { itineraryLabel: a.TerminalName }),
318
+ ...textField('itineraryLabel', a.TerminalName),
179
319
  ...(a.ArrivalTerminalIDs != null &&
180
320
  a.ArrivalTerminalIDs.length > 0 && { arrivingTerminalIds: a.ArrivalTerminalIDs }),
181
321
  ...(typeof a.DisplayDriveUpSpace === 'boolean' && {
@@ -193,7 +333,7 @@ export class FerryApiService {
193
333
  reservableSpaceCount: Math.max(0, a.ReservableSpaceCount),
194
334
  }),
195
335
  ...(s.MaxSpaceCount != null && { maxSpaceCount: s.MaxSpaceCount }),
196
- ...(a.DriveUpSpaceHexColor != null && { driveUpSpaceHexColor: a.DriveUpSpaceHexColor }),
336
+ ...textField('driveUpSpaceHexColor', a.DriveUpSpaceHexColor),
197
337
  }));
198
338
  }),
199
339
  }));
@@ -202,21 +342,18 @@ export class FerryApiService {
202
342
  ctx.log.info('Fetching ferry alerts');
203
343
  const raw = await this.fetchJson('Schedule/rest/alerts', ctx);
204
344
  return (raw ?? []).map((a) => {
205
- // The bulletin body is authored in a rich-text editor and arrives as HTML — nested spans
206
- // carrying Word-paste attributes, lists, anchors. It is rendered to plain text here, before
207
- // either response path reads it, so structuredContent and format() carry the same string.
208
- const bulletinText = a.BulletinText != null ? htmlToText(a.BulletinText) : '';
345
+ const title = nonBlank(a.AlertFullTitle);
346
+ // Prefer the plain-text marquee summary; fall back to the title when it is absent or blank.
347
+ const description = nonBlank(a.RouteAlertText) ?? title;
209
348
  return {
210
349
  ...(a.BulletinID != null && { alertId: a.BulletinID }),
211
- ...(a.AlertFullTitle != null && { alertTitle: a.AlertFullTitle }),
212
- // Prefer plain-text RouteAlertText; fall back to AlertFullTitle when absent
213
- ...(a.RouteAlertText != null
214
- ? { alertDescription: a.RouteAlertText }
215
- : a.AlertFullTitle != null
216
- ? { alertDescription: a.AlertFullTitle }
217
- : {}),
218
- ...(bulletinText && { bulletinText }),
219
- ...(a.AlertType != null && { alertType: a.AlertType }),
350
+ ...(title != null && { alertTitle: title }),
351
+ ...(description != null && { alertDescription: description }),
352
+ // The bulletin body is authored in a rich-text editor and arrives as HTML — nested spans
353
+ // carrying Word-paste attributes, lists, anchors. It is rendered to plain text here, before
354
+ // either response path reads it, so structuredContent and format() carry the same string.
355
+ ...htmlTextField('bulletinText', a.BulletinText),
356
+ ...textField('alertType', a.AlertType),
220
357
  // A fleet-wide alert carries no route IDs, so the flag is what separates "every route"
221
358
  // from "no route" — it is mapped whenever upstream states it either way.
222
359
  ...(typeof a.AllRoutesFlag === 'boolean' && { affectsAllRoutes: a.AllRoutesFlag }),
@@ -1 +1 @@
1
- {"version":3,"file":"ferry-service.js","sourceRoot":"","sources":["../../../src/services/ferry/ferry-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ferry-service.js","sourceRoot":"","sources":["../../../src/services/ferry/ferry-service.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,10 @@
2
2
  * @fileoverview Domain types for the WSF (Washington State Ferries) API.
3
3
  * @module services/ferry/types
4
4
  */
5
- /** Raw ferry terminal from upstream API. */
5
+ /**
6
+ * Raw ferry terminal from `Terminals/rest/terminallocations`. The address, directions, and map-link
7
+ * fields that endpoint also sends are not read.
8
+ */
6
9
  export interface RawFerryTerminal {
7
10
  Latitude?: number | null;
8
11
  Longitude?: number | null;
@@ -10,13 +13,13 @@ export interface RawFerryTerminal {
10
13
  TerminalID?: number | null;
11
14
  TerminalName?: string | null;
12
15
  }
13
- /** Normalized ferry terminal. */
16
+ /** Normalized ferry terminal. Identity is optional too — never fabricated when absent. */
14
17
  export interface FerryTerminal {
15
18
  latitude?: number;
16
19
  longitude?: number;
17
20
  terminalAbbrev?: string;
18
- terminalId: number;
19
- terminalName: string;
21
+ terminalId?: number;
22
+ terminalName?: string;
20
23
  }
21
24
  /** Raw ferry route from upstream API. */
22
25
  export interface RawFerryRoute {
@@ -29,6 +32,28 @@ export interface FerryRoute {
29
32
  description?: string;
30
33
  routeAbbrev?: string;
31
34
  routeId?: number;
35
+ /**
36
+ * Directed terminal pairs the route serves on the trip date — `[]` when it serves none. Absent
37
+ * only when upstream omitted the route's ID, which the lookup is keyed by.
38
+ */
39
+ terminalPairs?: TerminalPair[];
40
+ }
41
+ /** Raw pair from `Schedule/rest/terminalsandmatesbyroute/{TripDate}/{RouteID}`. */
42
+ export interface RawTerminalPair {
43
+ ArrivingDescription?: string | null;
44
+ ArrivingTerminalID?: number | null;
45
+ DepartingDescription?: string | null;
46
+ DepartingTerminalID?: number | null;
47
+ }
48
+ /**
49
+ * A directed departing → arriving terminal pair with service on a trip date. Both IDs are required:
50
+ * a pair is listed so it can be passed to the schedule tool, and one missing an ID cannot be.
51
+ */
52
+ export interface TerminalPair {
53
+ arrivingTerminalId: number;
54
+ arrivingTerminalName?: string;
55
+ departingTerminalId: number;
56
+ departingTerminalName?: string;
32
57
  }
33
58
  /**
34
59
  * Raw sailing in a schedule response. Neither schedule endpoint carries a cancellation flag —
@@ -37,19 +62,31 @@ export interface FerryRoute {
37
62
  * terminal sailing-space feed's `IsCancelled`.
38
63
  */
39
64
  export interface RawSailing {
65
+ /** Positions in the combo's `Annotations` of the notes that apply to this sailing. */
66
+ AnnotationIndexes?: number[] | null;
40
67
  /** Actual API field name (was ArrivalTime in older API). */
41
68
  ArrivingTime?: string | null;
42
69
  /** Actual API field name (was DepartureTime in older API). */
43
70
  DepartingTime?: string | null;
71
+ /**
72
+ * Undocumented loading-rule code. Observed: 3 on nearly every sailing, 1 only on sailings whose
73
+ * annotation restricts vehicles. Carried as the number WSF sends — no meaning is asserted.
74
+ */
75
+ LoadingRule?: number | null;
76
+ VesselHandicapAccessible?: boolean | null;
44
77
  VesselID?: number | null;
45
78
  VesselName?: string | null;
46
79
  }
47
80
  /** Terminal combo entry within a schedule response. */
48
81
  export interface RawTerminalCombo {
82
+ /** Notes sailings reference by position. Authored as HTML (`<a href>`, `<i>`). */
83
+ Annotations?: string[] | null;
49
84
  ArrivingTerminalID?: number | null;
50
85
  ArrivingTerminalName?: string | null;
51
86
  DepartingTerminalID?: number | null;
52
87
  DepartingTerminalName?: string | null;
88
+ /** A note covering the whole pair, authored as HTML; `""` on almost every pair. */
89
+ SailingNotes?: string | null;
53
90
  Times?: RawSailing[] | null;
54
91
  }
55
92
  /** Raw ferry schedule response — times are nested under TerminalCombos[0].Times. */
@@ -60,14 +97,25 @@ export interface RawFerrySchedule {
60
97
  }
61
98
  /** Normalized sailing. */
62
99
  export interface Sailing {
100
+ /** Positions in the schedule's `annotations`; each one resolves to an entry. */
101
+ annotationIndexes?: number[];
63
102
  arrivalTime?: string;
64
103
  departureTime?: string;
104
+ loadingRule?: number;
105
+ vesselHandicapAccessible?: boolean;
106
+ vesselId?: number;
65
107
  vesselName?: string;
66
108
  }
67
109
  /** Normalized ferry schedule. */
68
110
  export interface FerrySchedule {
111
+ /** The pair's notes as plain text, blank ones removed; sailings point at them by position. */
112
+ annotations?: string[];
69
113
  arrivingTerminalName?: string;
70
114
  departingTerminalName?: string;
115
+ /** Whether only today's remaining sailings were requested upstream — false for any other date. */
116
+ remainingOnly: boolean;
117
+ /** The pair-wide note as plain text. */
118
+ sailingNotes?: string;
71
119
  sailings: Sailing[];
72
120
  tripDate: string;
73
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/ferry/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/ferry/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @fileoverview The one rule every optional upstream string follows at the service boundary: a
3
+ * blank or whitespace-only value is absent, a populated one is kept with its ends trimmed. WSDOT and
4
+ * WSF ship `""` where they have nothing to say (a pass's `WeatherCondition`, most alerts'
5
+ * `ExtendedDescription`) and pad some names (`"Coupeville "`). Normalizing here keeps
6
+ * `structuredContent` and `format()` — which gates on truthiness — carrying the same fields, and
7
+ * matches how the tools treat a blank optional filter input.
8
+ * @module services/text-field
9
+ */
10
+ /**
11
+ * The upstream string with its ends trimmed, or `undefined` when it is absent, empty, or only
12
+ * whitespace (JS `trim()` covers tabs, line breaks, and NBSP). Internal whitespace is kept.
13
+ */
14
+ export declare function nonBlank(value: string | null | undefined): string | undefined;
15
+ /**
16
+ * Spread-ready string field: `{ [key]: trimmed }`, or `{}` when the value is blank, so the field
17
+ * is omitted from the normalized object.
18
+ *
19
+ * @example
20
+ * return { ...textField('weatherCondition', p.WeatherCondition) };
21
+ */
22
+ export declare function textField<K extends string>(key: K, raw: string | null | undefined): Record<K, string> | Record<string, never>;
23
+ /**
24
+ * {@link nonBlank} for a value authored in a rich-text editor: the markup is rendered to plain text
25
+ * first, so a value that held only markup or entity whitespace (`<p></p>`, `&nbsp;`) is absent
26
+ * along with a blank one. For list elements; a single field uses {@link htmlTextField}.
27
+ */
28
+ export declare function nonBlankHtml(value: string | null | undefined): string | undefined;
29
+ /** {@link textField} for a field authored in a rich-text editor — see {@link nonBlankHtml}. */
30
+ export declare function htmlTextField<K extends string>(key: K, raw: string | null | undefined): Record<K, string> | Record<string, never>;
31
+ //# sourceMappingURL=text-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-field.d.ts","sourceRoot":"","sources":["../../src/services/text-field.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE7E;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EACxC,GAAG,EAAE,CAAC,EACN,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7B,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAG3C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEjF;AAED,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC5C,GAAG,EAAE,CAAC,EACN,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7B,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAE3C"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @fileoverview The one rule every optional upstream string follows at the service boundary: a
3
+ * blank or whitespace-only value is absent, a populated one is kept with its ends trimmed. WSDOT and
4
+ * WSF ship `""` where they have nothing to say (a pass's `WeatherCondition`, most alerts'
5
+ * `ExtendedDescription`) and pad some names (`"Coupeville "`). Normalizing here keeps
6
+ * `structuredContent` and `format()` — which gates on truthiness — carrying the same fields, and
7
+ * matches how the tools treat a blank optional filter input.
8
+ * @module services/text-field
9
+ */
10
+ import { htmlToText } from './html-text.js';
11
+ /**
12
+ * The upstream string with its ends trimmed, or `undefined` when it is absent, empty, or only
13
+ * whitespace (JS `trim()` covers tabs, line breaks, and NBSP). Internal whitespace is kept.
14
+ */
15
+ export function nonBlank(value) {
16
+ return value?.trim() || undefined;
17
+ }
18
+ /**
19
+ * Spread-ready string field: `{ [key]: trimmed }`, or `{}` when the value is blank, so the field
20
+ * is omitted from the normalized object.
21
+ *
22
+ * @example
23
+ * return { ...textField('weatherCondition', p.WeatherCondition) };
24
+ */
25
+ export function textField(key, raw) {
26
+ const text = nonBlank(raw);
27
+ return text == null ? {} : { [key]: text };
28
+ }
29
+ /**
30
+ * {@link nonBlank} for a value authored in a rich-text editor: the markup is rendered to plain text
31
+ * first, so a value that held only markup or entity whitespace (`<p></p>`, `&nbsp;`) is absent
32
+ * along with a blank one. For list elements; a single field uses {@link htmlTextField}.
33
+ */
34
+ export function nonBlankHtml(value) {
35
+ return nonBlank(value == null ? value : htmlToText(value));
36
+ }
37
+ /** {@link textField} for a field authored in a rich-text editor — see {@link nonBlankHtml}. */
38
+ export function htmlTextField(key, raw) {
39
+ return textField(key, nonBlankHtml(raw));
40
+ }
41
+ //# sourceMappingURL=text-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-field.js","sourceRoot":"","sources":["../../src/services/text-field.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAgC;IACvD,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CACvB,GAAM,EACN,GAA8B;IAE9B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAwB,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAgC;IAC3D,OAAO,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,aAAa,CAC3B,GAAM,EACN,GAA8B;IAE9B,OAAO,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC"}