@cyanheads/wsdot-mcp-server 0.3.0 → 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 (43) hide show
  1. package/AGENTS.md +1 -1
  2. package/CLAUDE.md +1 -1
  3. package/README.md +15 -11
  4. package/changelog/0.4.x/0.4.0.md +26 -0
  5. package/dist/index.js +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.d.ts +9 -2
  8. package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.d.ts.map +1 -1
  9. package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.js +40 -5
  10. package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.js.map +1 -1
  11. package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.d.ts +10 -3
  12. package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.d.ts.map +1 -1
  13. package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.js +89 -19
  14. package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.js.map +1 -1
  15. package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.d.ts +2 -2
  16. package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.d.ts.map +1 -1
  17. package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.js +12 -5
  18. package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.js.map +1 -1
  19. package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.d.ts +2 -2
  20. package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.d.ts.map +1 -1
  21. package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.js +9 -4
  22. package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.js.map +1 -1
  23. package/dist/services/ferry/ferry-service.d.ts +20 -0
  24. package/dist/services/ferry/ferry-service.d.ts.map +1 -1
  25. package/dist/services/ferry/ferry-service.js +186 -49
  26. package/dist/services/ferry/ferry-service.js.map +1 -1
  27. package/dist/services/ferry/types.d.ts +52 -4
  28. package/dist/services/ferry/types.d.ts.map +1 -1
  29. package/dist/services/text-field.d.ts +31 -0
  30. package/dist/services/text-field.d.ts.map +1 -0
  31. package/dist/services/text-field.js +41 -0
  32. package/dist/services/text-field.js.map +1 -0
  33. package/dist/services/traffic/traffic-service.d.ts.map +1 -1
  34. package/dist/services/traffic/traffic-service.js +66 -86
  35. package/dist/services/traffic/traffic-service.js.map +1 -1
  36. package/dist/services/traffic/types.d.ts +3 -3
  37. package/dist/services/traffic/types.d.ts.map +1 -1
  38. package/dist/services/wcf-date.d.ts +6 -4
  39. package/dist/services/wcf-date.d.ts.map +1 -1
  40. package/dist/services/wcf-date.js +8 -4
  41. package/dist/services/wcf-date.js.map +1 -1
  42. package/package.json +1 -1
  43. package/server.json +3 -3
@@ -4,18 +4,21 @@
4
4
  * .NET `DateTime.MinValue` sentinel so every mapper handles upstream dates identically.
5
5
  * @module services/wcf-date
6
6
  */
7
+ import { nonBlank } from './text-field.js';
7
8
  /** Decoded dates before this year are treated as the .NET `DateTime.MinValue` "no timestamp" sentinel. */
8
9
  const MIN_VALID_YEAR = 1900;
9
10
  /**
10
11
  * Decode a WCF JSON date string (`/Date(ms±offset)/`) to an ISO 8601 UTC string.
11
12
  *
12
- * - `null` / `undefined` → `undefined`.
13
- * - A value that doesn't match the WCF pattern is returned unchanged (already ISO, or unknown shape).
13
+ * - `null` / `undefined`, or a blank or whitespace-only string → `undefined` (the {@link nonBlank}
14
+ * rule every upstream string follows); a populated value is trimmed before decoding.
15
+ * - A value that doesn't match the WCF pattern is returned as-is (already ISO, or unknown shape).
14
16
  * - `.NET DateTime.MinValue` (year 0001, e.g. `/Date(-62135568000000-0800)/`) is WSDOT's
15
17
  * "no timestamp" sentinel and decodes to `undefined`, so callers omit the field rather than
16
18
  * surfacing a year-0001 date.
17
19
  */
18
- export function decodeWcfDate(value) {
20
+ export function decodeWcfDate(raw) {
21
+ const value = nonBlank(raw);
19
22
  if (value == null)
20
23
  return;
21
24
  const match = /^\/Date\((-?\d+)(?:[+-]\d{4})?\)\/$/.exec(value);
@@ -28,7 +31,8 @@ export function decodeWcfDate(value) {
28
31
  }
29
32
  /**
30
33
  * Spread-ready ISO date field. Decodes a WCF date and returns `{ [key]: iso }`, or `{}` when the
31
- * value is absent or the MinValue sentinel — so the field is omitted from the normalized object.
34
+ * value is absent, blank, or the MinValue sentinel — so the field is omitted from the normalized
35
+ * object.
32
36
  *
33
37
  * @example
34
38
  * return { ...wcfDateField('dateUpdated', p.DateUpdated) };
@@ -1 +1 @@
1
- {"version":3,"file":"wcf-date.js","sourceRoot":"","sources":["../../src/services/wcf-date.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,0GAA0G;AAC1G,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgC;IAC5D,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO;IAC1B,MAAM,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,cAAc;QAAE,OAAO;IACnF,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAM,EACN,GAA8B;IAE9B,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAwB,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"wcf-date.js","sourceRoot":"","sources":["../../src/services/wcf-date.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,0GAA0G;AAC1G,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,GAA8B;IAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO;IAC1B,MAAM,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,cAAc;QAAE,OAAO;IACnF,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAM,EACN,GAA8B;IAE9B,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAwB,CAAC;AAClE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/wsdot-mcp-server",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts via MCP. STDIO or Streamable HTTP.",
5
5
  "mcpName": "io.github.cyanheads/wsdot-mcp-server",
6
6
  "type": "module",
package/server.json CHANGED
@@ -12,14 +12,14 @@
12
12
  "url": "https://wsdot.caseyjhand.com/mcp"
13
13
  }
14
14
  ],
15
- "version": "0.3.0",
15
+ "version": "0.4.0",
16
16
  "packages": [
17
17
  {
18
18
  "registryType": "npm",
19
19
  "registryBaseUrl": "https://registry.npmjs.org",
20
20
  "identifier": "@cyanheads/wsdot-mcp-server",
21
21
  "runtimeHint": "node",
22
- "version": "0.3.0",
22
+ "version": "0.4.0",
23
23
  "packageArguments": [
24
24
  {
25
25
  "type": "positional",
@@ -54,7 +54,7 @@
54
54
  "registryBaseUrl": "https://registry.npmjs.org",
55
55
  "identifier": "@cyanheads/wsdot-mcp-server",
56
56
  "runtimeHint": "node",
57
- "version": "0.3.0",
57
+ "version": "0.4.0",
58
58
  "packageArguments": [
59
59
  {
60
60
  "type": "positional",