@gojinko/cli 2.23.0 → 2.24.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 (38) hide show
  1. package/README.md +45 -4
  2. package/SKILL.md +19 -5
  3. package/dist/commands/checkout.d.ts.map +1 -1
  4. package/dist/commands/checkout.js +5 -0
  5. package/dist/commands/checkout.js.map +1 -1
  6. package/dist/commands/flight-search.d.ts +106 -0
  7. package/dist/commands/flight-search.d.ts.map +1 -1
  8. package/dist/commands/flight-search.js +451 -45
  9. package/dist/commands/flight-search.js.map +1 -1
  10. package/dist/commands/get-booking.js +1 -1
  11. package/dist/commands/get-booking.js.map +1 -1
  12. package/dist/commands/hotel-cancel.js +1 -1
  13. package/dist/commands/hotel-cancel.js.map +1 -1
  14. package/dist/commands/schema.d.ts.map +1 -1
  15. package/dist/commands/schema.js +88 -24
  16. package/dist/commands/schema.js.map +1 -1
  17. package/dist/commands/shared.d.ts.map +1 -1
  18. package/dist/commands/shared.js +5 -2
  19. package/dist/commands/shared.js.map +1 -1
  20. package/dist/commands/trip-status.d.ts.map +1 -1
  21. package/dist/commands/trip-status.js +2 -0
  22. package/dist/commands/trip-status.js.map +1 -1
  23. package/dist/commands/trip.d.ts.map +1 -1
  24. package/dist/commands/trip.js +2 -0
  25. package/dist/commands/trip.js.map +1 -1
  26. package/dist/output/formatter.d.ts +19 -7
  27. package/dist/output/formatter.d.ts.map +1 -1
  28. package/dist/output/formatter.js +22 -8
  29. package/dist/output/formatter.js.map +1 -1
  30. package/dist/output/price-change.d.ts +45 -0
  31. package/dist/output/price-change.d.ts.map +1 -0
  32. package/dist/output/price-change.js +86 -0
  33. package/dist/output/price-change.js.map +1 -0
  34. package/dist/output/remedies.d.ts +30 -0
  35. package/dist/output/remedies.d.ts.map +1 -0
  36. package/dist/output/remedies.js +45 -0
  37. package/dist/output/remedies.js.map +1 -0
  38. package/package.json +2 -2
package/README.md CHANGED
@@ -63,7 +63,7 @@ Prod and sandbox keys are stored separately in `~/.jinko/config.yaml`. Resolutio
63
63
 
64
64
  | Command | Description |
65
65
  |---|---|
66
- | `flight-search` | Direct search by route + dates OR price-check an `offer_token`. Returns bookable `trip_item_token`. |
66
+ | `flight-search` | Direct search by route + dates OR price-check an `offer_token`. Returns bookable `trip_item_token`. Carries the full shop filter set (stops, time windows, layovers, fare attributes, alternate airports) and reports which filters the results honor. |
67
67
  | `price-monitoring` | Cache-only price snapshot for a fixed OD + dates — intended for scheduled polling. Semantically distinct from `flight-search` (one-shot live shopping). |
68
68
  | `hotel-search` | Live hotel search by city / query / geo / hotel-ids. Returns hotels with rooms, rates, `htl_*` offer tokens. |
69
69
  | `hotel-details` | Lazy lookup for a specific hotel — images, amenities, location detail. Pairs with `hotel-search` when the user wants the full picture before booking. |
@@ -80,10 +80,10 @@ Prod and sandbox keys are stored separately in `~/.jinko/config.yaml`. Resolutio
80
80
  | Command | Description |
81
81
  |---|---|
82
82
  | `checkout` | Finalize a trip → returns `checkout_url` (human pays in a browser) + `agent_spt_params` (agent pays programmatically) + items + total. (`book` is a deprecated alias.) |
83
- | `agent-pay submit` | Pay programmatically with a Shared Payment Token: present `--trip-id` + `--token`; the BFF schedules the agent fulfillment and redeems the SPT. Falls back to `checkout_url` on a 3DS step-up. |
83
+ | `agent-pay submit` | Pay programmatically with a Shared Payment Token: present `--trip-id` + `--token`; the BFF schedules the agent fulfillment and redeems the SPT. Returns the Jinko `booking_ref` (`JNK-…`) once authorized. Falls back to `checkout_url` on a 3DS step-up. |
84
84
  | `get-ancillaries` | List a trip's purchasable ancillaries (bags / seats / meals) without generating a checkout URL |
85
85
  | `select-ancillaries` | Optional: preselect bags / seats / meals before handoff |
86
- | `trip-status` | Full lifecycle state: cart, quote, fulfillment, bookings |
86
+ | `trip-status` | Full lifecycle state: cart, quote, fulfillment, bookings — plus the Jinko `booking_ref` once fulfillment has been scheduled (it can be present before payment completes — read `fulfillment.status` for paid), the value `get-booking` / `hotel-cancel` / `refund` / `exchange` take as `--booking-ref` |
87
87
 
88
88
  ### Post-booking
89
89
 
@@ -121,6 +121,14 @@ Quote is automatic — `checkout` handles it internally. A human pays on the ret
121
121
  # Live flight search by route + dates (returns trip_item_token directly)
122
122
  jinko flight-search --origin PAR --destination NYC --departure-date 2026-06-15
123
123
 
124
+ # Filtered search — non-stop, morning departure, checked bag in the fare
125
+ jinko flight-search --origin JFK --destination CDG --departure-date 2026-09-01 \
126
+ --max-stops 0 --departure-time-range 06:00-11:00 --checked-bag-included
127
+
128
+ # Widen the search to more departure airports (the anchor still decides ranking)
129
+ jinko flight-search --origin JFK --destination CDG --departure-date 2026-09-01 \
130
+ --origin-alternate-airports EWR LGA
131
+
124
132
  # Or price-check an offer_token from flight-calendar
125
133
  jinko flight-search --offer-token <offer_token>
126
134
 
@@ -163,11 +171,44 @@ jinko refund check --booking-ref <ref> --pnr <pnr>
163
171
  jinko refund commit --booking-ref <ref> --pnr <pnr> --reason "schedule change"
164
172
 
165
173
  # Hotel cancellations (idempotent — safe to retry)
166
- jinko hotel-cancel --ref <booking_ref> --last-name <name>
174
+ jinko hotel-cancel --booking-ref <booking_ref> --last-name <name>
167
175
  # Or via the authenticated shortcut:
168
176
  jinko hotel-cancel --provider-booking-id <id> --provider nuitee
169
177
  ```
170
178
 
179
+ ## Flight search filters
180
+
181
+ `flight-search` exposes every filter the `POST /v1/flight_search` contract
182
+ accepts, one option per field — run `jinko flight-search --help` for the list.
183
+ Two things are worth knowing before you use them:
184
+
185
+ **The response says which filters were honored.** Every search comes back with
186
+ `applied_filters` (the ones these results DO honor) and `unapplied_filters`
187
+ (the ones they do not, each with a reason). A filter the platform could not
188
+ enforce is a reported outcome, not an error: the call still returns 200 with
189
+ offers. Post-filter them yourself, or tell the user the constraint could not be
190
+ met. `--format table` prints the report under the results; JSON output carries
191
+ both lists as response fields.
192
+
193
+ **Alternate airports widen an airport anchor.** `--origin-alternate-airports`
194
+ and `--destination-alternate-airports` add departure/arrival airports beside
195
+ `--origin` / `--destination` — widening only, so they can add results but never
196
+ remove any. The anchor decides ranking and truncation, which makes the two
197
+ airports NOT interchangeable: put the airport that matters most in `--origin`.
198
+ Against a city anchor (`--origin-type city`, or a code the platform resolves to
199
+ a city) the list is ignored — a city already searches its whole metro area —
200
+ and comes back in `unapplied_filters` under the name `origin` or `destination`,
201
+ never under the option name it was sent with.
202
+
203
+ ```bash
204
+ jinko flight-search --origin PAR --destination NYC --departure-date 2026-06-15 \
205
+ --origin-alternate-airports ORY --format table
206
+ # ...offers...
207
+ #
208
+ # Unapplied filters:
209
+ # origin — <the reason the platform gives for not enforcing it>
210
+ ```
211
+
171
212
  ## Output Formats
172
213
 
173
214
  ```bash
package/SKILL.md CHANGED
@@ -28,17 +28,20 @@ export JINKO_API_KEY=jnk_...
28
28
 
29
29
  ### Pricing (live)
30
30
  - `flight-search` — direct search by route + dates OR price-check an `offer_token`. Returns `trip_item_token`.
31
+ Carries the full shop filter set (`--max-stops`, `--departure-time-range`, `--refundable-only`,
32
+ `--checked-bag-included`, `--via-airports`, `--origin-alternate-airports`, …) — run
33
+ `jinko flight-search --help` for the list.
31
34
 
32
35
  ### Trip building
33
36
  - `trip` — create/update a trip (add items, set travelers + contact). Returns `trip_id`.
34
37
 
35
38
  ### Checkout
36
39
  - `checkout` — finalize a trip; returns BOTH `checkout_url` (a human opens it to pay) AND `agent_spt_params` (an agent uses them to pay programmatically), plus items + ancillaries + total. (`book` is a deprecated alias.)
37
- - `agent-pay submit --trip-id <id> --token <spt>` — pay programmatically: mint a Shared Payment Token scoped to `checkout`'s `agent_spt_params`, then submit it; the BFF schedules the agent fulfillment and redeems the token. A 3DS step-up / decline falls back to a `checkout_url`.
40
+ - `agent-pay submit --trip-id <id> --token <spt>` — pay programmatically: mint a Shared Payment Token scoped to `checkout`'s `agent_spt_params`, then submit it; the BFF schedules the agent fulfillment and redeems the token. Returns the Jinko `booking_ref` (`JNK-…`) once authorized. A 3DS step-up / decline falls back to a `checkout_url`.
38
41
  - `select-ancillaries` — (optional) preselect bags/seats/meals before checkout.
39
42
 
40
43
  ### Status
41
- - `trip-status` — full lifecycle state: cart, quote, fulfillment, bookings (PNRs).
44
+ - `trip-status` — full lifecycle state: cart, quote, fulfillment, bookings (PNRs). Once fulfillment has been scheduled it also carries the Jinko `booking_ref` — the value `get-booking` / `hotel-cancel` / `refund` / `exchange` take as `--booking-ref`. It can be present before payment completes (a hosted checkout still in progress, or an `agent-pay submit` that fell back to `checkout_url`), so presence does not mean paid — read `fulfillment.status`. `bookings[].booking_reference` is the supplier's confirmation, not that handle.
42
45
 
43
46
  ### Post-booking
44
47
  - `refund check` / `refund commit`
@@ -49,7 +52,7 @@ export JINKO_API_KEY=jnk_...
49
52
  ## Canonical Flow
50
53
 
51
54
  ```
52
- 1. jinko flight-search --from PAR --to NYC --date 2026-05-01
55
+ 1. jinko flight-search --origin PAR --destination NYC --departure-date 2026-05-01
53
56
  → each fare has a trip_item_token (live pricing already applied)
54
57
 
55
58
  2. jinko trip \
@@ -67,10 +70,11 @@ export JINKO_API_KEY=jnk_...
67
70
  5a. Human path: send the user to checkout_url — they complete payment on the Jinko web page.
68
71
  5b. Agent path: mint a Shared Payment Token scoped to agent_spt_params, then
69
72
  jinko agent-pay submit --trip-id <trip_id> --token <spt>
70
- → { status: "processing", payment_verified: true } (or a checkout_url fallback on 3DS)
73
+ → { status: "processing", payment_verified: true, booking_ref: "JNK-…" } (or a checkout_url fallback on 3DS)
71
74
 
72
75
  6. jinko trip-status --trip-id <trip_id>
73
76
  → poll until status = "fulfilled" (or "partially_fulfilled") to get PNRs.
77
+ → booking_ref is the Jinko reference for get-booking / hotel-cancel / refund / exchange (--booking-ref).
74
78
  ```
75
79
 
76
80
  ## Important Notes
@@ -82,4 +86,14 @@ export JINKO_API_KEY=jnk_...
82
86
  - Dates: YYYY-MM-DD.
83
87
  - Gender: MALE | FEMALE (uppercase).
84
88
  - Passenger types: ADULT | CHILD | INFANT.
85
- - Cabin classes: economy | premium_economy | business | first.
89
+ - Cabin classes: economy | premium_economy | business | first. Cabin is ADVISORY —
90
+ providers may still return other cabins, so read each fare's own `cabin_class`.
91
+ - `flight-search` reports what it enforced: `applied_filters` lists the requested
92
+ filters the results honor, `unapplied_filters` the ones they do not, each with a
93
+ reason. An unapplied filter is not an error — the call still returns 200. Either
94
+ post-filter the offers yourself or tell the user the constraint could not be met.
95
+ - `--origin-alternate-airports` / `--destination-alternate-airports` WIDEN an airport
96
+ anchor: they add airports beside `--origin` / `--destination`, never remove results.
97
+ The anchor decides ranking, so put the airport that matters most in `--origin`.
98
+ Against a city anchor the list is ignored and reported back under `origin` /
99
+ `destination` in `unapplied_filters`.
@@ -1 +1 @@
1
- {"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyB9D"}
1
+ {"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6B9D"}
@@ -1,4 +1,5 @@
1
1
  import { withClient, output, userIntentOption } from './shared.js';
2
+ import { printPriceChangeNotices } from '../output/price-change.js';
2
3
  export function registerCheckoutCommand(program) {
3
4
  program
4
5
  .command('checkout')
@@ -9,6 +10,9 @@ export function registerCheckoutCommand(program) {
9
10
  .action(withClient(async (client, globals, opts) => {
10
11
  const response = await client.checkout(opts.tripId);
11
12
  output(response, { format: globals.format });
13
+ // Last thing the user reads before they open checkout_url: the price
14
+ // they are about to pay is not the one they were shown in search.
15
+ printPriceChangeNotices(response);
12
16
  }));
13
17
  // DEPRECATED alias — `book` was renamed to `checkout` (JIN-1131). Kept so
14
18
  // existing scripts keep working; mcp-apps still exposes `book`.
@@ -20,6 +24,7 @@ export function registerCheckoutCommand(program) {
20
24
  .action(withClient(async (client, globals, opts) => {
21
25
  const response = await client.book(opts.tripId);
22
26
  output(response, { format: globals.format });
27
+ printPriceChangeNotices(response);
23
28
  }));
24
29
  }
25
30
  //# sourceMappingURL=checkout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,OAAO,CAAC,2FAA2F,CAAC;SACpG,WAAW,CACV,ubAAub,CACxb;SACA,cAAc,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;SAC1E,SAAS,CAAC,gBAAgB,EAAE,CAAC;SAC7B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC,CAAC;IAEN,0EAA0E;IAC1E,gEAAgE;IAChE,OAAO;SACJ,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACjC,OAAO,CAAC,yEAAyE,CAAC;SAClF,cAAc,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;SAC1E,SAAS,CAAC,gBAAgB,EAAE,CAAC;SAC7B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
1
+ {"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,OAAO,CAAC,2FAA2F,CAAC;SACpG,WAAW,CACV,ubAAub,CACxb;SACA,cAAc,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;SAC1E,SAAS,CAAC,gBAAgB,EAAE,CAAC;SAC7B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,qEAAqE;QACrE,kEAAkE;QAClE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC,CAAC;IAEN,0EAA0E;IAC1E,gEAAgE;IAChE,OAAO;SACJ,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACjC,OAAO,CAAC,yEAAyE,CAAC;SAClF,cAAc,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;SAC1E,SAAS,CAAC,gBAAgB,EAAE,CAAC;SAC7B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -1,3 +1,109 @@
1
1
  import { Command } from 'commander';
2
+ import type { FlightSearchRequest, FlightSearchResponse, TimeRange } from '@gojinko/api-client';
3
+ /**
4
+ * Canonical (post-deprecated-alias-resolution) inputs for the request body.
5
+ * Values arrive as commander strings; numbers and time windows are coerced
6
+ * here. Every field maps to one leaf of the jinko-api flight_search contract.
7
+ */
8
+ export interface FlightSearchBodyOpts {
9
+ origin: string;
10
+ destination: string;
11
+ departureDate: string;
12
+ returnDate?: string;
13
+ originType?: string;
14
+ destinationType?: string;
15
+ tripType?: string;
16
+ adults?: string;
17
+ children?: string;
18
+ infants?: string;
19
+ cabinClass?: string;
20
+ directOnly?: boolean;
21
+ maxStops?: string;
22
+ multiFare?: boolean;
23
+ maxPrice?: string;
24
+ includeCarriers?: string[];
25
+ excludeCarriers?: string[];
26
+ departureTimeRange?: string;
27
+ arrivalTimeRange?: string;
28
+ returnDepartureTimeRange?: string;
29
+ returnArrivalTimeRange?: string;
30
+ connectionTimeMinMinutes?: string;
31
+ connectionTimeMaxMinutes?: string;
32
+ maxTotalDurationMinutes?: string;
33
+ singleCarrierOnly?: boolean;
34
+ viaAirports?: string[];
35
+ excludeViaAirports?: string[];
36
+ aircraftTypes?: string[];
37
+ sameConnectionAirportOnly?: boolean;
38
+ sameOriginAirportOnly?: boolean;
39
+ sameTurnaroundAirportOnly?: boolean;
40
+ originAlternateAirports?: string[];
41
+ destinationAlternateAirports?: string[];
42
+ nearbyAirports?: boolean;
43
+ refundableOnly?: boolean;
44
+ changeableOnly?: boolean;
45
+ checkedBagIncluded?: boolean;
46
+ limit?: string;
47
+ currency?: string;
48
+ locale?: string;
49
+ }
50
+ /** Price-check inputs: the contract's non-search-only fields plus the token. */
51
+ export interface OfferCheckBodyOpts {
52
+ offerToken: string;
53
+ adults?: string;
54
+ children?: string;
55
+ infants?: string;
56
+ currency?: string;
57
+ locale?: string;
58
+ }
59
+ /**
60
+ * Parse a `HH:MM-HH:MM` window into the contract's TimeRange object. Either
61
+ * bound may be omitted — `08:00-` is "at or after 08:00", `-12:00` is "at or
62
+ * before 12:00" — which is exactly what TimeRange means when one key is absent.
63
+ * Exported for tests.
64
+ */
65
+ export declare function parseTimeRange(value: string | undefined, flag: string): TimeRange | undefined;
66
+ /**
67
+ * Map canonical CLI options onto the jinko-api flight_search search-mode body.
68
+ * Pure — exported for tests. Only fields the caller actually set are attached:
69
+ * the platform reads an absent field as "not asked for", and an empty list or
70
+ * a `false` flag would mean the same thing while cluttering the request.
71
+ */
72
+ export declare function buildFlightSearchBody(o: FlightSearchBodyOpts): FlightSearchRequest;
73
+ /**
74
+ * Map canonical CLI options onto the price-check body. Every search-mode field
75
+ * is a contradiction beside `offer_token` (the platform rejects the pair), so
76
+ * only the fields that describe the re-price itself travel.
77
+ */
78
+ export declare function buildOfferCheckBody(o: OfferCheckBodyOpts): FlightSearchRequest;
79
+ /**
80
+ * Search-mode flags the caller set, in flag spelling. Reads "set" the way the
81
+ * platform does: `false` and an empty list are not a request. `multi_fare` is
82
+ * the exception — the platform asks whether the field was sent at all, so an
83
+ * explicit `--no-multi-fare` counts. Exported for tests.
84
+ */
85
+ export declare function searchOnlyFlagsPresent(o: Partial<FlightSearchBodyOpts>): string[];
86
+ /**
87
+ * The filter report every flight_search response carries, with both lists
88
+ * optional so an older response (or a fixture) without them renders as "no
89
+ * report" instead of throwing.
90
+ */
91
+ export type FilterReport = Partial<Pick<FlightSearchResponse, 'applied_filters' | 'unapplied_filters'>>;
92
+ /**
93
+ * Human lines for the applied/unapplied filter report. Empty when the request
94
+ * carried no filters (both lists empty), so an unfiltered search prints
95
+ * nothing extra. An unapplied entry is not an error — the results simply do
96
+ * not honor that filter, and the reason says why. The alternate-airport lists
97
+ * are reported per side as `origin` / `destination`, never under the field
98
+ * name they were sent with. Pure — exported for tests.
99
+ */
100
+ export declare function filterReportLines(report: FilterReport): string[];
101
+ /**
102
+ * Print the response, then the filter report under the results table. JSON
103
+ * output gets the report for free — `applied_filters` / `unapplied_filters` are
104
+ * response fields and travel through `output` untouched — so only the human
105
+ * format needs the extra block. Exported for tests.
106
+ */
107
+ export declare function renderFlightSearchResponse(response: FlightSearchResponse, format: 'json' | 'table'): void;
2
108
  export declare function registerFlightSearchCommand(program: Command): void;
3
109
  //# sourceMappingURL=flight-search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flight-search.d.ts","sourceRoot":"","sources":["../../src/commands/flight-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgFlE"}
1
+ {"version":3,"file":"flight-search.d.ts","sourceRoot":"","sources":["../../src/commands/flight-search.ts"],"names":[],"mappings":"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"}