itamatrix 0.1.0 → 1.0.1

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 (73) hide show
  1. package/dist/browser/batch.js +0 -1
  2. package/dist/browser/forms.js +0 -1
  3. package/dist/browser/session.js +0 -1
  4. package/dist/cache.js +0 -1
  5. package/dist/cli.js +0 -1
  6. package/dist/commands/calendar.js +0 -1
  7. package/dist/commands/multicity.js +0 -1
  8. package/dist/commands/search.js +0 -1
  9. package/dist/commands/shared.js +0 -1
  10. package/dist/model/spec.js +0 -1
  11. package/dist/model/types.js +0 -1
  12. package/dist/render/calendar.js +0 -1
  13. package/dist/render/json.js +0 -1
  14. package/dist/render/normalize.js +0 -1
  15. package/dist/render/table.js +0 -1
  16. package/package.json +3 -2
  17. package/dist/browser/batch.d.ts +0 -8
  18. package/dist/browser/batch.js.map +0 -1
  19. package/dist/browser/batch.test.d.ts +0 -1
  20. package/dist/browser/batch.test.js +0 -38
  21. package/dist/browser/batch.test.js.map +0 -1
  22. package/dist/browser/forms.d.ts +0 -26
  23. package/dist/browser/forms.js.map +0 -1
  24. package/dist/browser/session.d.ts +0 -20
  25. package/dist/browser/session.js.map +0 -1
  26. package/dist/cache.d.ts +0 -21
  27. package/dist/cache.js.map +0 -1
  28. package/dist/cache.test.d.ts +0 -1
  29. package/dist/cache.test.js +0 -79
  30. package/dist/cache.test.js.map +0 -1
  31. package/dist/cli.d.ts +0 -3
  32. package/dist/cli.js.map +0 -1
  33. package/dist/commands/calendar.d.ts +0 -19
  34. package/dist/commands/calendar.js.map +0 -1
  35. package/dist/commands/calendar.test.d.ts +0 -1
  36. package/dist/commands/calendar.test.js +0 -58
  37. package/dist/commands/calendar.test.js.map +0 -1
  38. package/dist/commands/multicity.d.ts +0 -17
  39. package/dist/commands/multicity.js.map +0 -1
  40. package/dist/commands/multicity.test.d.ts +0 -1
  41. package/dist/commands/multicity.test.js +0 -54
  42. package/dist/commands/multicity.test.js.map +0 -1
  43. package/dist/commands/search.d.ts +0 -20
  44. package/dist/commands/search.js.map +0 -1
  45. package/dist/commands/search.test.d.ts +0 -1
  46. package/dist/commands/search.test.js +0 -124
  47. package/dist/commands/search.test.js.map +0 -1
  48. package/dist/commands/shared.d.ts +0 -44
  49. package/dist/commands/shared.js.map +0 -1
  50. package/dist/model/spec.d.ts +0 -63
  51. package/dist/model/spec.js.map +0 -1
  52. package/dist/model/spec.test.d.ts +0 -1
  53. package/dist/model/spec.test.js +0 -55
  54. package/dist/model/spec.test.js.map +0 -1
  55. package/dist/model/types.d.ts +0 -22080
  56. package/dist/model/types.js.map +0 -1
  57. package/dist/model/types.test.d.ts +0 -1
  58. package/dist/model/types.test.js +0 -35
  59. package/dist/model/types.test.js.map +0 -1
  60. package/dist/render/calendar.d.ts +0 -21
  61. package/dist/render/calendar.js.map +0 -1
  62. package/dist/render/calendar.render.test.d.ts +0 -1
  63. package/dist/render/calendar.render.test.js +0 -66
  64. package/dist/render/calendar.render.test.js.map +0 -1
  65. package/dist/render/json.d.ts +0 -2
  66. package/dist/render/json.js.map +0 -1
  67. package/dist/render/normalize.d.ts +0 -32
  68. package/dist/render/normalize.js.map +0 -1
  69. package/dist/render/render.test.d.ts +0 -1
  70. package/dist/render/render.test.js +0 -129
  71. package/dist/render/render.test.js.map +0 -1
  72. package/dist/render/table.d.ts +0 -2
  73. package/dist/render/table.js.map +0 -1
@@ -84,4 +84,3 @@ function matchBrace(text, start) {
84
84
  }
85
85
  return -1;
86
86
  }
87
- //# sourceMappingURL=batch.js.map
@@ -230,4 +230,3 @@ async function setAdults(page, adults) {
230
230
  async function clickSearch(page) {
231
231
  await page.getByRole("button", { name: /search/i }).last().click();
232
232
  }
233
- //# sourceMappingURL=forms.js.map
@@ -123,4 +123,3 @@ function waitForResponse(page, match, timeoutMs) {
123
123
  });
124
124
  return { promise, cancel: () => cancel() };
125
125
  }
126
- //# sourceMappingURL=session.js.map
package/dist/cache.js CHANGED
@@ -68,4 +68,3 @@ export async function withCache(namespace, keyParts, opts, produce) {
68
68
  writeEntry(key, value, now);
69
69
  return value;
70
70
  }
71
- //# sourceMappingURL=cache.js.map
package/dist/cli.js CHANGED
@@ -151,4 +151,3 @@ program
151
151
  if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
152
152
  program.parseAsync(process.argv);
153
153
  }
154
- //# sourceMappingURL=cli.js.map
@@ -44,4 +44,3 @@ function validate(origin, dest, opts, from, to) {
44
44
  }
45
45
  validateTripControls(opts);
46
46
  }
47
- //# sourceMappingURL=calendar.js.map
@@ -47,4 +47,3 @@ function toSlice(raw, index, opts) {
47
47
  ext: opts.ext,
48
48
  };
49
49
  }
50
- //# sourceMappingURL=multicity.js.map
@@ -40,4 +40,3 @@ function validate(origin, dest, opts) {
40
40
  validateTripControls(opts);
41
41
  requirePageLimit(opts.limit);
42
42
  }
43
- //# sourceMappingURL=search.js.map
@@ -74,4 +74,3 @@ function isRealCalendarDate(value) {
74
74
  date.getUTCMonth() === m - 1 &&
75
75
  date.getUTCDate() === d);
76
76
  }
77
- //# sourceMappingURL=shared.js.map
@@ -26,4 +26,3 @@ export function isRoundTrip(spec) {
26
26
  export function hasAdvancedControls(spec) {
27
27
  return Boolean(spec.cabin || spec.stops || spec.extraStops || spec.routing || spec.ext);
28
28
  }
29
- //# sourceMappingURL=spec.js.map
@@ -97,4 +97,3 @@ function unwrapResponse(raw) {
97
97
  ? raw.response
98
98
  : raw;
99
99
  }
100
- //# sourceMappingURL=types.js.map
@@ -86,4 +86,3 @@ export function renderCalendarTable(cal) {
86
86
  (cal.minPrice ? ` · cheapest ${cal.minPrice} on ${cal.minDate}` : ""));
87
87
  return `${header}\n${table.toString()}`;
88
88
  }
89
- //# sourceMappingURL=calendar.js.map
@@ -1,4 +1,3 @@
1
1
  export function renderJson(result) {
2
2
  return JSON.stringify(result, null, 2);
3
3
  }
4
- //# sourceMappingURL=json.js.map
@@ -41,4 +41,3 @@ export function normalize(resp, limit) {
41
41
  solutions,
42
42
  };
43
43
  }
44
- //# sourceMappingURL=normalize.js.map
@@ -46,4 +46,3 @@ export function renderTable(result) {
46
46
  (result.minPrice ? ` · from ${result.minPrice}` : ""));
47
47
  return `${header}\n${table.toString()}`;
48
48
  }
49
- //# sourceMappingURL=table.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "itamatrix",
3
- "version": "0.1.0",
3
+ "version": "1.0.1",
4
4
  "description": "CLI for ITA Matrix flight search",
5
5
  "type": "module",
6
6
  "bin": {
@@ -34,11 +34,12 @@
34
34
  "access": "public"
35
35
  },
36
36
  "scripts": {
37
- "build": "tsc -p tsconfig.json",
37
+ "build": "tsc -p tsconfig.build.json",
38
38
  "dev": "tsx src/cli.ts",
39
39
  "gen:skill": "tsx scripts/gen-skill.ts",
40
40
  "gen:skill:check": "tsx scripts/gen-skill.ts --check",
41
41
  "lint:md": "markdownlint-cli2 \"**/*.md\"",
42
+ "fix:changelog": "tsx scripts/fix-changelog.ts",
42
43
  "prepare": "pre-commit install || true",
43
44
  "test": "vitest run",
44
45
  "typecheck": "tsc -p tsconfig.json --noEmit",
@@ -1,8 +0,0 @@
1
- /**
2
- * Matrix returns search results inside a `multipart/mixed` `/batch` response:
3
- * each part is an `application/http` wrapper around a JSON body. Rather than
4
- * parse MIME framing, scan the raw text for balanced top-level JSON objects and
5
- * return the first one that looks like a search result (`solutionList`).
6
- */
7
- export declare function extractSearchPayload(batchBody: string): unknown | null;
8
- export declare function extractCalendarPayload(batchBody: string): unknown | null;
@@ -1 +0,0 @@
1
- {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/browser/batch.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,38 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { readFileSync } from "node:fs";
3
- import { fileURLToPath } from "node:url";
4
- import { extractCalendarPayload, extractSearchPayload } from "./batch.js";
5
- import { parseSearchResponse } from "../model/types.js";
6
- const batchBody = readFileSync(fileURLToPath(new URL("../../fixtures/batch_multipart.txt", import.meta.url)), "utf8");
7
- describe("extractSearchPayload", () => {
8
- it("pulls the solutionList payload out of a multipart /batch body", () => {
9
- const payload = extractSearchPayload(batchBody);
10
- expect(payload).not.toBeNull();
11
- const resp = parseSearchResponse(payload);
12
- expect(resp.solutionList.solutions.length).toBeGreaterThan(0);
13
- });
14
- it("returns null when no part carries a solutionList", () => {
15
- expect(extractSearchPayload('--b\r\n\r\n{"foo":1}\r\n--b--')).toBeNull();
16
- });
17
- it("skips earlier non-result parts and finds a later solutionList", () => {
18
- const body = '--b\r\n\r\n{"airports":["a"]}\r\n' +
19
- '--b\r\n\r\n{"solutionList":{"solutions":[{"id":"X","displayTotal":"USD1","itinerary":{"slices":[]}}]}}\r\n--b--';
20
- const payload = extractSearchPayload(body);
21
- expect(payload.solutionList.solutions).toHaveLength(1);
22
- });
23
- it("ignores a brace inside a JSON string without misparsing", () => {
24
- const body = '--b\r\n\r\n{"note":"a } brace","solutionList":{"solutions":[]}}\r\n--b--';
25
- expect(extractSearchPayload(body)).not.toBeNull();
26
- });
27
- });
28
- describe("extractCalendarPayload", () => {
29
- it("pulls a part carrying a calendar key out of a /batch body", () => {
30
- const body = '--b\r\n\r\n{"solutionList":{"solutions":[]}}\r\n' +
31
- '--b\r\n\r\n{"response":{"calendarSliceList":{"days":[]}}}\r\n--b--';
32
- expect(extractCalendarPayload(body)).not.toBeNull();
33
- });
34
- it("returns null when no part has a calendar-shaped payload", () => {
35
- expect(extractCalendarPayload('--b\r\n\r\n{"solutionList":{}}\r\n--b--')).toBeNull();
36
- });
37
- });
38
- //# sourceMappingURL=batch.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batch.test.js","sourceRoot":"","sources":["../../src/browser/batch.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,SAAS,GAAG,YAAY,CAC5B,aAAa,CAAC,IAAI,GAAG,CAAC,oCAAoC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC7E,MAAM,CACP,CAAC;AAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,oBAAoB,CAAC,+BAA+B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,IAAI,GACR,mCAAmC;YACnC,iHAAiH,CAAC;QACpH,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAA+C,CAAC;QACzF,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,IAAI,GAAG,0EAA0E,CAAC;QACxF,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,IAAI,GACR,kDAAkD;YAClD,oEAAoE,CAAC;QACvE,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,sBAAsB,CAAC,yCAAyC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACvF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,26 +0,0 @@
1
- import type { Page } from "playwright";
2
- import type { CalendarSpec, MultiCitySpec, SearchSpec } from "../model/spec.js";
3
- /**
4
- * Drives the Matrix search form and clicks Search.
5
- *
6
- * NOTE: this layer is intentionally thin and is the part most coupled to the
7
- * live DOM (DESIGN.md "Trade-offs"). Selectors target the Angular Material
8
- * markup observed on matrix.itasoftware.com/search. If Matrix restructures the
9
- * form, failures surface here with a clear message.
10
- */
11
- export declare function driveSearchForm(page: Page, spec: SearchSpec): Promise<void>;
12
- /**
13
- * Drives the multi-city form: selects the Multi-City tab, materialises one row
14
- * per leg, fills each leg's origin/destination/date, then applies the shared
15
- * cabin/stops controls and clicks Search. The response is the same
16
- * `solutionList` shape as a normal search (N slices instead of 1–2).
17
- */
18
- export declare function driveMultiCityForm(page: Page, spec: MultiCitySpec): Promise<void>;
19
- /**
20
- * Drives the price-calendar form: "See calendar of lowest fares" over a
21
- * departure-date range. With `tripLength` it's a round-trip calendar; without,
22
- * one-way. Selectors here are provisional — the calendar UI/response could not
23
- * be captured for P3 (DESIGN), so this is the thinnest, most likely-to-drift
24
- * layer; failures surface with a clear message.
25
- */
26
- export declare function driveCalendarForm(page: Page, spec: CalendarSpec): Promise<void>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/browser/forms.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import type { CalendarSpec, MultiCitySpec, SearchSpec } from "../model/spec.js";
2
- import { type CalendarResponse, type SearchResponse } from "../model/types.js";
3
- export interface SessionOptions {
4
- /** Show the browser window (debugging). Default headless. */
5
- headful?: boolean;
6
- /** Max time to wait for the /v1/search response. Matrix is slow (40–60s). */
7
- timeoutMs?: number;
8
- }
9
- /**
10
- * One-shot Matrix search: launch Chromium, drive the form, intercept the
11
- * `/v1/search` response, and return the parsed payload.
12
- *
13
- * Bundled headless Chromium works with light stealth (real Chrome UA, hide
14
- * navigator.webdriver) — Google's BotGuard JS still runs and mints the token.
15
- */
16
- export declare function runSearch(spec: SearchSpec, opts?: SessionOptions): Promise<SearchResponse>;
17
- /** Multi-city search (DESIGN P3): same `solutionList` response as `runSearch`. */
18
- export declare function runMultiCity(spec: MultiCitySpec, opts?: SessionOptions): Promise<SearchResponse>;
19
- /** Price-calendar search (DESIGN P3): lowest fare per departure date. */
20
- export declare function runCalendar(spec: CalendarSpec, opts?: SessionOptions): Promise<CalendarResponse>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/browser/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA2B,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GAGpB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,UAAU,GAAG,uCAAuC,CAAC;AAC3D,sEAAsE;AACtE,uEAAuE;AACvE,MAAM,aAAa,GAAG,iDAAiD,CAAC;AACxE,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC,8EAA8E;AAC9E,MAAM,UAAU,GACd,qEAAqE;IACrE,oDAAoD,CAAC;AASvD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAgB,EAChB,OAAuB,EAAE;IAEzB,OAAO,SAAS,CACd,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,EACrC,oBAAoB,EACpB,mBAAmB,EACnB,IAAI,CACL,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAmB,EACnB,OAAuB,EAAE;IAEzB,OAAO,SAAS,CACd,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EACxC,oBAAoB,EACpB,mBAAmB,EACnB,IAAI,CACL,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAkB,EAClB,OAAuB,EAAE;IAEzB,OAAO,SAAS,CACd,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,EACvC,sBAAsB,EACtB,qBAAqB,EACrB,IAAI,CACL,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,SAAS,CACtB,KAAoC,EACpC,KAAuC,EACvC,KAA0B,EAC1B,IAAoB;IAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACvD,0EAA0E;IAC1E,uDAAuD;IACvD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAChF,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;YACnE,mEAAmE;YACnE,MAAM,IAAI,KAAK,CACb,kGAAkG,CACnG,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QACjC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,yEAAyE;QACzE,mEAAmE;QACnE,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,OAAgB;IACpC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC3B,QAAQ,EAAE,CAAC,OAAO;YAClB,IAAI,EAAE,CAAC,+CAA+C,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,8CAA8C,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;QACJ,CAAC;QACD,yEAAyE;QACzE,gDAAgD;QAChD,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAAgB;IAC5C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACvC,SAAS,EAAE,UAAU;QACrB,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;KACvC,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE;QAC/B,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC;AAQD;;;;;GAKG;AACH,SAAS,eAAe,CACtB,IAAU,EACV,KAAuC,EACvC,SAAiB;IAEjB,IAAI,MAAM,GAAG,GAAS,EAAE,GAAE,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACvD,MAAM,UAAU,GAAG,CAAC,GAAkC,EAAQ,EAAE;YAC9D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG;gBAAE,OAAO;YACnE,GAAG;iBACA,IAAI,EAAE;iBACN,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACb,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACrB,MAAM,EAAE,CAAC;gBACT,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,SAAS,+BAA+B,CAAC,CAAC,CAAC;QACjF,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,GAAG,GAAG,EAAE;YACZ,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACnC,CAAC,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;AAC7C,CAAC"}
package/dist/cache.d.ts DELETED
@@ -1,21 +0,0 @@
1
- /**
2
- * File-based result cache. Matrix queries take 30–60 s and are driven by a
3
- * browser, so repeat queries for the same spec are expensive; caching the raw
4
- * parsed response makes them instant (DESIGN P4). The cache key is the spec, so
5
- * output format is irrelevant — render happens after the cache layer.
6
- */
7
- export interface CacheOptions {
8
- /** When false, `withCache` always calls the producer and skips read/write. */
9
- enabled: boolean;
10
- /** Entries older than this are treated as misses. */
11
- ttlMs: number;
12
- }
13
- export declare const DEFAULT_CACHE_TTL_MINUTES = 60;
14
- /** `$XDG_CACHE_HOME/itamatrix` → `~/.cache/itamatrix` → `$TMPDIR/itamatrix`. */
15
- export declare function cacheDir(): string;
16
- /**
17
- * Return a cached response for `keyParts` if present and fresh, otherwise call
18
- * `produce`, cache its result, and return it. Caching is best-effort: any I/O
19
- * error degrades to calling `produce` directly.
20
- */
21
- export declare function withCache<T>(namespace: string, keyParts: unknown, opts: CacheOptions, produce: () => Promise<T>): Promise<T>;
package/dist/cache.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,79 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
3
- import { createHash } from "node:crypto";
4
- import { tmpdir } from "node:os";
5
- import { join } from "node:path";
6
- import { withCache, cacheDir, DEFAULT_CACHE_TTL_MINUTES } from "./cache.js";
7
- let dir;
8
- let prevXdg;
9
- beforeEach(() => {
10
- dir = mkdtempSync(join(tmpdir(), "itamatrix-cache-"));
11
- prevXdg = process.env.XDG_CACHE_HOME;
12
- process.env.XDG_CACHE_HOME = dir;
13
- });
14
- afterEach(() => {
15
- if (prevXdg === undefined)
16
- delete process.env.XDG_CACHE_HOME;
17
- else
18
- process.env.XDG_CACHE_HOME = prevXdg;
19
- rmSync(dir, { recursive: true, force: true });
20
- });
21
- const opts = { enabled: true, ttlMs: DEFAULT_CACHE_TTL_MINUTES * 60_000 };
22
- describe("withCache", () => {
23
- it("returns the cache dir under XDG_CACHE_HOME", () => {
24
- expect(cacheDir()).toBe(join(dir, "itamatrix"));
25
- });
26
- it("calls the producer once and serves the second call from cache", async () => {
27
- const produce = vi.fn().mockResolvedValue({ price: 100 });
28
- const first = await withCache("search", { o: "BOS" }, opts, produce);
29
- const second = await withCache("search", { o: "BOS" }, opts, produce);
30
- expect(first).toEqual({ price: 100 });
31
- expect(second).toEqual({ price: 100 });
32
- expect(produce).toHaveBeenCalledTimes(1);
33
- });
34
- it("treats a different key as a miss", async () => {
35
- const produce = vi.fn().mockResolvedValue({ price: 100 });
36
- await withCache("search", { o: "BOS" }, opts, produce);
37
- await withCache("search", { o: "JFK" }, opts, produce);
38
- expect(produce).toHaveBeenCalledTimes(2);
39
- });
40
- it("separates entries by namespace", async () => {
41
- const produce = vi.fn().mockResolvedValue({ price: 100 });
42
- await withCache("search", { x: 1 }, opts, produce);
43
- await withCache("calendar", { x: 1 }, opts, produce);
44
- expect(produce).toHaveBeenCalledTimes(2);
45
- });
46
- it("bypasses cache entirely when disabled", async () => {
47
- const produce = vi.fn().mockResolvedValue({ price: 100 });
48
- const off = { enabled: false, ttlMs: 60_000 };
49
- await withCache("search", { o: "BOS" }, off, produce);
50
- await withCache("search", { o: "BOS" }, off, produce);
51
- expect(produce).toHaveBeenCalledTimes(2);
52
- });
53
- it("treats a JSON file of the wrong shape as a miss", async () => {
54
- const produce = vi.fn().mockResolvedValue({ price: 100 });
55
- mkdirSync(join(dir, "itamatrix"), { recursive: true });
56
- // Mirror the key derivation: namespace + sha256(namespace \0 JSON(parts)).
57
- const parts = { o: "BOS" };
58
- const digest = createHash("sha256")
59
- .update("search")
60
- .update("\0")
61
- .update(JSON.stringify(parts))
62
- .digest("hex");
63
- writeFileSync(join(dir, "itamatrix", `search-${digest}.json`), "{}");
64
- const result = await withCache("search", parts, opts, produce);
65
- expect(result).toEqual({ price: 100 });
66
- expect(produce).toHaveBeenCalledTimes(1);
67
- });
68
- it("re-fetches once the entry is older than the TTL", async () => {
69
- const produce = vi.fn().mockResolvedValue({ price: 100 });
70
- const base = 1_000_000;
71
- vi.spyOn(Date, "now").mockReturnValue(base);
72
- await withCache("search", { o: "BOS" }, { enabled: true, ttlMs: 1000 }, produce);
73
- vi.spyOn(Date, "now").mockReturnValue(base + 2000);
74
- await withCache("search", { o: "BOS" }, { enabled: true, ttlMs: 1000 }, produce);
75
- expect(produce).toHaveBeenCalledTimes(2);
76
- vi.restoreAllMocks();
77
- });
78
- });
79
- //# sourceMappingURL=cache.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache.test.js","sourceRoot":"","sources":["../src/cache.test.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Command } from "commander";
3
- export declare const program: Command;
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { type CacheControlOptions, type OutputFormat } from "./shared.js";
2
- export interface CalendarCommandOptions extends CacheControlOptions {
3
- departRange: string;
4
- tripLength?: number;
5
- adults: number;
6
- limit: number;
7
- cabin?: string;
8
- stops?: string;
9
- extraStops?: string;
10
- routing?: string;
11
- ext?: string;
12
- format: OutputFormat;
13
- headful?: boolean;
14
- }
15
- export declare function runCalendarCommand(origin: string, dest: string, opts: CalendarCommandOptions): Promise<string>;
16
- export declare function parseDepartRange(range: string): {
17
- from: string;
18
- to: string;
19
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/commands/calendar.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,58 +0,0 @@
1
- import { describe, it, expect, vi } from "vitest";
2
- import { parseDepartRange, runCalendarCommand, } from "./calendar.js";
3
- const captured = [];
4
- vi.mock("../browser/session.js", () => ({
5
- runCalendar: (spec) => {
6
- captured.push(spec);
7
- return Promise.resolve({ calendarSliceList: { days: [] } });
8
- },
9
- }));
10
- const opts = (over = {}) => ({
11
- departRange: "2026-08-01:2026-08-31",
12
- tripLength: 7,
13
- adults: 1,
14
- limit: 25,
15
- format: "json",
16
- cache: false,
17
- ...over,
18
- });
19
- describe("parseDepartRange", () => {
20
- it("splits START:END into trimmed dates", () => {
21
- expect(parseDepartRange("2026-08-01:2026-08-31")).toEqual({
22
- from: "2026-08-01",
23
- to: "2026-08-31",
24
- });
25
- });
26
- it("rejects a range without exactly two parts", () => {
27
- expect(() => parseDepartRange("2026-08-01")).toThrow(/START:END/);
28
- });
29
- it("rejects a malformed date in the range", () => {
30
- expect(() => parseDepartRange("2026/08/01:2026-08-31")).toThrow(/must be a valid date/);
31
- });
32
- });
33
- describe("runCalendarCommand validation/wiring", () => {
34
- it("builds a calendar spec and uppercases airports", async () => {
35
- captured.length = 0;
36
- await runCalendarCommand("bos", "lax", opts({ tripLength: 5 }));
37
- expect(captured[0]).toMatchObject({
38
- origin: "BOS",
39
- dest: "LAX",
40
- departFrom: "2026-08-01",
41
- departTo: "2026-08-31",
42
- tripLength: 5,
43
- });
44
- });
45
- it("rejects a start after the end", async () => {
46
- await expect(runCalendarCommand("BOS", "LAX", opts({ departRange: "2026-08-31:2026-08-01" }))).rejects.toThrow(/start must be on or before end/);
47
- });
48
- it("rejects a negative --trip-length", async () => {
49
- await expect(runCalendarCommand("BOS", "LAX", opts({ tripLength: -1 }))).rejects.toThrow(/--trip-length must be an integer >= 0/);
50
- });
51
- it("rejects a non-numeric --trip-length (NaN)", async () => {
52
- await expect(runCalendarCommand("BOS", "LAX", opts({ tripLength: NaN }))).rejects.toThrow(/--trip-length must be an integer >= 0/);
53
- });
54
- it("rejects an invalid --limit", async () => {
55
- await expect(runCalendarCommand("BOS", "LAX", opts({ limit: 0 }))).rejects.toThrow(/--limit must be an integer >= 1/);
56
- });
57
- });
58
- //# sourceMappingURL=calendar.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"calendar.test.js","sourceRoot":"","sources":["../../src/commands/calendar.test.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import { type Slice } from "../model/spec.js";
2
- import { type CacheControlOptions, type OutputFormat } from "./shared.js";
3
- export interface MultiCityCommandOptions extends CacheControlOptions {
4
- legs: string[];
5
- adults: number;
6
- limit: number;
7
- cabin?: string;
8
- stops?: string;
9
- extraStops?: string;
10
- routing?: string;
11
- ext?: string;
12
- format: OutputFormat;
13
- headful?: boolean;
14
- }
15
- export declare function runMultiCityCommand(opts: MultiCityCommandOptions): Promise<string>;
16
- /** Parses `--leg ORIGIN:DEST:DATE` flags into slices; `--routing`/`--ext` apply to all. */
17
- export declare function parseLegs(opts: MultiCityCommandOptions): Slice[];
@@ -1 +0,0 @@
1
- {"version":3,"file":"multicity.js","sourceRoot":"","sources":["../../src/commands/multicity.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,54 +0,0 @@
1
- import { describe, it, expect, vi } from "vitest";
2
- import { parseLegs, runMultiCityCommand, } from "./multicity.js";
3
- const captured = [];
4
- vi.mock("../browser/session.js", () => ({
5
- runMultiCity: (spec) => {
6
- captured.push(spec);
7
- return Promise.resolve({ solutionList: { solutions: [] } });
8
- },
9
- }));
10
- const opts = (over = {}) => ({
11
- legs: ["JFK:NRT:2026-08-10", "NRT:SIN:2026-08-15"],
12
- adults: 1,
13
- limit: 25,
14
- format: "json",
15
- cache: false,
16
- ...over,
17
- });
18
- describe("parseLegs", () => {
19
- it("parses and uppercases ORIGIN:DEST:DATE legs", () => {
20
- const slices = parseLegs(opts({ legs: ["jfk:nrt:2026-08-10", "nrt:sin:2026-08-15"] }));
21
- expect(slices).toEqual([
22
- { origin: "JFK", dest: "NRT", departDate: "2026-08-10", routing: undefined, ext: undefined },
23
- { origin: "NRT", dest: "SIN", departDate: "2026-08-15", routing: undefined, ext: undefined },
24
- ]);
25
- });
26
- it("applies global --routing/--ext to every leg", () => {
27
- const slices = parseLegs(opts({ routing: "UA+", ext: "-REDEYES" }));
28
- expect(slices.every((s) => s.routing === "UA+" && s.ext === "-REDEYES")).toBe(true);
29
- });
30
- it("rejects fewer than 2 legs", () => {
31
- expect(() => parseLegs(opts({ legs: ["JFK:NRT:2026-08-10"] }))).toThrow(/at least 2/);
32
- });
33
- it("rejects a leg without three colon-separated parts", () => {
34
- expect(() => parseLegs(opts({ legs: ["JFK-NRT", "NRT:SIN:2026-08-15"] }))).toThrow(/ORIGIN:DEST/);
35
- });
36
- it("rejects a leg with a malformed date", () => {
37
- expect(() => parseLegs(opts({ legs: ["JFK:NRT:08/10", "NRT:SIN:2026-08-15"] }))).toThrow(/must be a valid date/);
38
- });
39
- });
40
- describe("runMultiCityCommand spec wiring", () => {
41
- it("builds an N-slice spec with shared controls", async () => {
42
- captured.length = 0;
43
- await runMultiCityCommand(opts({ cabin: "business", stops: "1" }));
44
- expect(captured[0]).toMatchObject({
45
- cabin: "business",
46
- stops: "1",
47
- slices: [{ origin: "JFK" }, { origin: "NRT" }],
48
- });
49
- });
50
- it("rejects an unknown --cabin before launching the browser", async () => {
51
- await expect(runMultiCityCommand(opts({ cabin: "economy" }))).rejects.toThrow(/--cabin must be one of/);
52
- });
53
- });
54
- //# sourceMappingURL=multicity.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multicity.test.js","sourceRoot":"","sources":["../../src/commands/multicity.test.ts"],"names":[],"mappings":"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"}