@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.
- package/AGENTS.md +1 -1
- package/CLAUDE.md +1 -1
- package/README.md +32 -23
- package/changelog/0.3.x/0.3.0.md +30 -0
- package/changelog/0.4.x/0.4.0.md +26 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.d.ts +9 -2
- package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.js +40 -5
- package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.d.ts +10 -3
- package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.js +96 -20
- package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.js +12 -5
- package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.js +9 -4
- package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-terminal-space.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-terminal-space.tool.js +2 -0
- package/dist/mcp-server/tools/definitions/get-terminal-space.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-toll-rates.tool.d.ts +4 -0
- package/dist/mcp-server/tools/definitions/get-toll-rates.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-toll-rates.tool.js +123 -79
- package/dist/mcp-server/tools/definitions/get-toll-rates.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-travel-times.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-travel-times.tool.js +103 -101
- package/dist/mcp-server/tools/definitions/get-travel-times.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-alerts.tool.d.ts +10 -0
- package/dist/mcp-server/tools/definitions/search-alerts.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-alerts.tool.js +152 -130
- package/dist/mcp-server/tools/definitions/search-alerts.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-cameras.tool.d.ts +12 -0
- package/dist/mcp-server/tools/definitions/search-cameras.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-cameras.tool.js +118 -67
- package/dist/mcp-server/tools/definitions/search-cameras.tool.js.map +1 -1
- package/dist/mcp-server/tools/page-budget.d.ts +56 -0
- package/dist/mcp-server/tools/page-budget.d.ts.map +1 -0
- package/dist/mcp-server/tools/page-budget.js +76 -0
- package/dist/mcp-server/tools/page-budget.js.map +1 -0
- package/dist/services/ferry/ferry-service.d.ts +20 -0
- package/dist/services/ferry/ferry-service.d.ts.map +1 -1
- package/dist/services/ferry/ferry-service.js +186 -49
- package/dist/services/ferry/ferry-service.js.map +1 -1
- package/dist/services/ferry/types.d.ts +52 -4
- package/dist/services/ferry/types.d.ts.map +1 -1
- package/dist/services/text-field.d.ts +31 -0
- package/dist/services/text-field.d.ts.map +1 -0
- package/dist/services/text-field.js +41 -0
- package/dist/services/text-field.js.map +1 -0
- package/dist/services/traffic/traffic-service.d.ts.map +1 -1
- package/dist/services/traffic/traffic-service.js +66 -86
- package/dist/services/traffic/traffic-service.js.map +1 -1
- package/dist/services/traffic/types.d.ts +3 -3
- package/dist/services/traffic/types.d.ts.map +1 -1
- package/dist/services/wcf-date.d.ts +6 -4
- package/dist/services/wcf-date.d.ts.map +1 -1
- package/dist/services/wcf-date.js +8 -4
- package/dist/services/wcf-date.js.map +1 -1
- package/package.json +2 -2
- 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 {
|
|
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
|
-
|
|
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
|
|
78
|
-
terminalName
|
|
79
|
-
...(
|
|
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.
|
|
87
|
-
|
|
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
|
-
...(
|
|
90
|
-
...(
|
|
171
|
+
...textField('routeAbbrev', r.RouteAbbrev),
|
|
172
|
+
...textField('description', r.Description),
|
|
173
|
+
...(r.RouteID != null && { terminalPairs: pairs.get(r.RouteID) ?? [] }),
|
|
91
174
|
}));
|
|
92
175
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
103
|
-
|
|
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
|
|
116
|
-
|
|
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
|
-
...(
|
|
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
|
-
...(
|
|
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
|
-
...(
|
|
278
|
+
...textField('departingTerminalName', v.DepartingTerminalName),
|
|
139
279
|
...(v.ArrivingTerminalID != null && { arrivingTerminalId: v.ArrivingTerminalID }),
|
|
140
|
-
...(
|
|
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
|
-
...(
|
|
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
|
-
...(
|
|
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
|
-
...(
|
|
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
|
-
...(
|
|
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
|
-
...(
|
|
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
|
-
|
|
206
|
-
//
|
|
207
|
-
|
|
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
|
-
...(
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
-
/**
|
|
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
|
|
19
|
-
terminalName
|
|
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":"AAAA;;;GAGG;AAEH
|
|
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>`, ` `) 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>`, ` `) 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"}
|