@gojinko/cli 0.1.1 → 0.1.3

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 (37) hide show
  1. package/README.md +35 -20
  2. package/SKILL.md +29 -16
  3. package/dist/commands/auth/index.js +13 -13
  4. package/dist/commands/auth/index.js.map +1 -1
  5. package/dist/commands/book/index.d.ts +3 -0
  6. package/dist/commands/book/index.d.ts.map +1 -0
  7. package/dist/commands/book/index.js +61 -0
  8. package/dist/commands/book/index.js.map +1 -0
  9. package/dist/commands/flights/calendar.d.ts.map +1 -1
  10. package/dist/commands/flights/calendar.js +15 -9
  11. package/dist/commands/flights/calendar.js.map +1 -1
  12. package/dist/commands/flights/destinations.d.ts.map +1 -1
  13. package/dist/commands/flights/destinations.js +20 -6
  14. package/dist/commands/flights/destinations.js.map +1 -1
  15. package/dist/commands/flights/find.d.ts +3 -0
  16. package/dist/commands/flights/find.d.ts.map +1 -0
  17. package/dist/commands/flights/find.js +43 -0
  18. package/dist/commands/flights/find.js.map +1 -0
  19. package/dist/commands/flights/index.d.ts.map +1 -1
  20. package/dist/commands/flights/index.js +2 -0
  21. package/dist/commands/flights/index.js.map +1 -1
  22. package/dist/commands/flights/search.d.ts.map +1 -1
  23. package/dist/commands/flights/search.js +0 -3
  24. package/dist/commands/flights/search.js.map +1 -1
  25. package/dist/commands/schema.d.ts.map +1 -1
  26. package/dist/commands/schema.js +63 -32
  27. package/dist/commands/schema.js.map +1 -1
  28. package/dist/commands/trip/index.d.ts.map +1 -1
  29. package/dist/commands/trip/index.js +1 -3
  30. package/dist/commands/trip/index.js.map +1 -1
  31. package/dist/commands/trip/travelers.d.ts.map +1 -1
  32. package/dist/commands/trip/travelers.js +6 -5
  33. package/dist/commands/trip/travelers.js.map +1 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +4 -2
  36. package/dist/index.js.map +1 -1
  37. package/package.json +2 -2
package/README.md CHANGED
@@ -11,20 +11,20 @@ npm install -g @gojinko/cli
11
11
  ## Authentication
12
12
 
13
13
  ```bash
14
- # API key
14
+ # Configure via CLI
15
15
  jinko auth login --key jnk_YOUR_KEY
16
16
 
17
17
  # Or environment variable
18
18
  export JINKO_API_KEY=jnk_YOUR_KEY
19
-
20
- # OAuth token also supported
21
- export JINKO_TOKEN=eyJ...your.jwt.token
22
19
  ```
23
20
 
24
21
  ## Quick Start
25
22
 
26
23
  ```bash
27
- # Search flights
24
+ # Find cheapest flights (cached)
25
+ jinko flights find --from PAR --to NYC --date 2026-04-15
26
+
27
+ # Live flight search
28
28
  jinko flights search --from PAR --to NYC --date 2026-04-15
29
29
 
30
30
  # Explore destinations
@@ -34,7 +34,7 @@ jinko flights destinations --from PAR
34
34
  jinko flights search --offer-token <offer_token>
35
35
 
36
36
  # One-shot booking → returns checkout URL
37
- jinko trip checkout \
37
+ jinko book \
38
38
  --trip-item-token <token> \
39
39
  --travelers '[{"first_name":"John","last_name":"Doe","date_of_birth":"1990-01-15","gender":"MALE","passenger_type":"ADULT"}]' \
40
40
  --contact '{"email":"john@example.com","phone":"+33612345678"}'
@@ -42,23 +42,37 @@ jinko trip checkout \
42
42
 
43
43
  ## Commands
44
44
 
45
- ### Flights
45
+ ### Flights — Cached
46
+
46
47
  | Command | Description |
47
48
  |---------|-------------|
48
- | `flights search` | Search flights or price-check an offer |
49
+ | `flights find` | Find cheapest flights from cached data |
49
50
  | `flights destinations` | Discover destinations from origin airports |
50
51
  | `flights calendar` | Browse prices across a date range |
51
52
 
52
- ### Trip
53
+ ### Flights — Live
54
+
55
+ | Command | Description |
56
+ |---------|-------------|
57
+ | `flights search` | Live flight search or price-check an offer |
58
+
59
+ ### Trip Management
60
+
53
61
  | Command | Description |
54
62
  |---------|-------------|
55
- | `trip create` | Create a new trip |
63
+ | `trip create` | Create a new trip (shopping cart) |
56
64
  | `trip show` | Show trip details |
57
65
  | `trip add-flight` | Add a flight to a trip |
58
66
  | `trip travelers` | Set travelers on a trip |
59
- | `trip checkout` | Checkout → returns payment URL |
67
+
68
+ ### Booking
69
+
70
+ | Command | Description |
71
+ |---------|-------------|
72
+ | `book` | One-shot or existing trip checkout → returns checkout URL |
60
73
 
61
74
  ### Utility
75
+
62
76
  | Command | Description |
63
77
  |---------|-------------|
64
78
  | `auth login` | Configure API key or OAuth token |
@@ -67,6 +81,14 @@ jinko trip checkout \
67
81
  | `config show` | Show current config |
68
82
  | `schema [cmd]` | Show request/response schemas |
69
83
 
84
+ ## Token Flow
85
+
86
+ ```
87
+ flights find (filters) → offer_token (cached)
88
+ flights search (offer_token) → trip_item_token (live pricing)
89
+ book (trip_item_token + travelers + contact) → checkout_url
90
+ ```
91
+
70
92
  ## Output Formats
71
93
 
72
94
  ```bash
@@ -77,17 +99,10 @@ jinko flights search --from PAR --to NYC --date 2026-04-15
77
99
  jinko flights search --from PAR --to NYC --date 2026-04-15 --format table
78
100
  ```
79
101
 
80
- ## Token Flow
81
-
82
- ```
83
- flights search (filters) → offer_token
84
- flights search (offer_token) → trip_item_token
85
- trip checkout (trip_item_token + travelers + contact) → checkout_url
86
- ```
87
-
88
102
  ## Schema Introspection
89
103
 
90
104
  ```bash
91
105
  jinko schema # List all commands
92
- jinko schema flights.search # Show request/response shapes
106
+ jinko schema flights.find # Show request/response shapes
107
+ jinko schema book # Show booking contract
93
108
  ```
package/SKILL.md CHANGED
@@ -4,7 +4,7 @@ You are using `jinko`, a CLI for searching flights, managing trips, and booking
4
4
 
5
5
  ## Authentication
6
6
 
7
- Before any command, ensure an API key is configured:
7
+ Before any command, configure your API key:
8
8
 
9
9
  ```bash
10
10
  jinko auth login --key jnk_YOUR_KEY
@@ -14,13 +14,13 @@ export JINKO_API_KEY=jnk_YOUR_KEY
14
14
 
15
15
  Check status: `jinko auth status`
16
16
 
17
- ## Core Workflow: Search → Price → Book
17
+ ## Core Workflow: Find → Price → Book
18
18
 
19
19
  ### Step 1: Discover flights (pick one approach)
20
20
 
21
- **Search by route:**
21
+ **Find cheapest flights (cached):**
22
22
  ```bash
23
- jinko flights search --from PAR --to NYC --date 2026-04-01
23
+ jinko flights find --from PAR --to NYC --date 2026-04-01
24
24
  ```
25
25
 
26
26
  **Explore destinations:**
@@ -33,7 +33,7 @@ jinko flights destinations --from PAR --from CDG
33
33
  jinko flights calendar --from PAR --to NYC --month 2026-04
34
34
  ```
35
35
 
36
- All discovery commands return `offer_token` per flight.
36
+ All discovery commands hit cached endpoints and return `offer_token` per flight.
37
37
 
38
38
  ### Step 2: Price a specific flight (live pricing)
39
39
 
@@ -47,7 +47,7 @@ Returns fare options with `trip_item_token` per fare. This hits live pricing (mo
47
47
 
48
48
  **One-shot booking (recommended):**
49
49
  ```bash
50
- jinko trip checkout \
50
+ jinko book \
51
51
  --trip-item-token <trip_item_token> \
52
52
  --travelers '[{"first_name":"John","last_name":"Doe","date_of_birth":"1990-01-15","gender":"MALE","passenger_type":"ADULT"}]' \
53
53
  --contact '{"email":"john@example.com","phone":"+33612345678"}'
@@ -60,28 +60,39 @@ Returns `checkout_url` — the user opens this in a browser to complete payment.
60
60
  jinko trip create
61
61
  jinko trip add-flight --trip-item-token <token> --trip-id <trip_id>
62
62
  jinko trip travelers --trip-id <trip_id> --travelers '[...]' --contact '{...}'
63
- jinko trip checkout --trip-id <trip_id>
63
+ jinko book --trip-id <trip_id>
64
64
  ```
65
65
 
66
66
  ## Token Flow
67
67
 
68
68
  ```
69
- flights search (filters) → offer_token (per flight)
70
- flights search (offer_token) → trip_item_token (per fare)
71
- trip checkout (trip_item_token + travelers + contact) → checkout_url
69
+ flights find (filters) → offer_token (per flight) [cached]
70
+ flights search (offer_token) → trip_item_token (per fare) [live]
71
+ book (trip_item_token + travelers + contact) → checkout_url
72
72
  ```
73
73
 
74
+ ## API Endpoints
75
+
76
+ All calls use `/api/v1/devplatform/` prefix.
77
+
78
+ | Endpoint | Type | Used by |
79
+ |----------|------|---------|
80
+ | `POST /flights/search` | Cached | `flights find`, `flights calendar` |
81
+ | `POST /flights/destination-search` | Cached | `flights destinations` |
82
+ | `POST /flights/shop` | Live | `flights search` |
83
+ | `POST /trips` | Live | `trip create/show/add-flight/travelers`, `book` |
84
+ | `POST /trips/checkout` | Live | `book` |
85
+
74
86
  ## Tool Selection Guide
75
87
 
76
88
  | User Intent | Command |
77
89
  |-------------|---------|
78
- | "Find flights from Paris to New York" | `flights search --from PAR --to NYC --date ...` |
90
+ | "Find flights from Paris to New York" | `flights find --from PAR --to NYC --date ...` |
91
+ | "Search flights with live pricing" | `flights search --from PAR --to NYC --date ...` |
79
92
  | "Where can I fly from Paris?" | `flights destinations --from PAR` |
80
93
  | "What's the cheapest day to fly?" | `flights calendar --from PAR --to NYC --month ...` |
81
94
  | "Get exact price for this flight" | `flights search --offer-token <token>` |
82
- | "Book this flight" | `trip checkout --trip-item-token <token> --travelers ... --contact ...` |
83
- | "Show my travelers" | `travelers list` |
84
- | "Add a traveler" | `travelers add --first-name ... --last-name ... --dob ... --gender ...` |
95
+ | "Book this flight" | `book --trip-item-token <token> --travelers ... --contact ...` |
85
96
 
86
97
  ## Output Format
87
98
 
@@ -93,8 +104,9 @@ To see the exact request/response shape for any command:
93
104
 
94
105
  ```bash
95
106
  jinko schema # List all documented commands
96
- jinko schema flights.search # Show flights search schema
97
- jinko schema trip.checkout # Show checkout schema
107
+ jinko schema flights.find # Show find schema
108
+ jinko schema flights.search # Show search schema
109
+ jinko schema book # Show booking schema
98
110
  ```
99
111
 
100
112
  ## Important Notes
@@ -106,3 +118,4 @@ jinko schema trip.checkout # Show checkout schema
106
118
  - **Cabin classes**: `economy`, `premium_economy`, `business`, `first`.
107
119
  - **Trip type**: Inferred from `--return` flag presence. Include `--return` for round-trip.
108
120
  - **Checkout URL**: Opens the Jinko checkout page. User completes payment there.
121
+ - **Cached vs Live**: `flights find`, `destinations`, `calendar` use cached data (fast, cheap). `flights search` uses live pricing (slower, accurate). Use cached for discovery, live for final pricing.
@@ -7,8 +7,8 @@ export function registerAuthCommands(program) {
7
7
  .description('Manage authentication.');
8
8
  auth
9
9
  .command('login')
10
- .description('Configure authentication. Accepts an API key (jnk_...) or OAuth token.')
11
- .option('--key <token>', 'API key (jnk_...) or OAuth JWT token')
10
+ .description('Configure API key authentication.')
11
+ .option('--key <token>', 'API key (jnk_...)')
12
12
  .action(async (opts, cmd) => {
13
13
  const globals = getGlobalOptions(cmd);
14
14
  let token = opts['key'];
@@ -20,25 +20,25 @@ export function registerAuthCommands(program) {
20
20
  output: process.stdout,
21
21
  });
22
22
  token = await new Promise((resolve) => {
23
- rl.question('Enter your Jinko API key (jnk_...) or OAuth token: ', (answer) => {
23
+ rl.question('Enter your Jinko API key (jnk_...): ', (answer) => {
24
24
  rl.close();
25
25
  resolve(answer.trim());
26
26
  });
27
27
  });
28
28
  }
29
29
  if (!token) {
30
- outputError({ code: 'INVALID_TOKEN', message: 'No token provided.' }, globals);
30
+ outputError({ code: 'INVALID_TOKEN', message: 'No API key provided.' }, globals);
31
31
  process.exit(3);
32
32
  }
33
- const isApiKey = token.startsWith('jnk_');
34
- const configUpdate = isApiKey
35
- ? { api_key: token }
36
- : { oauth_token: token };
37
- await writeConfigFile(configUpdate);
33
+ if (!token.startsWith('jnk_')) {
34
+ outputError({ code: 'INVALID_TOKEN', message: 'API key must start with "jnk_". Get one from the Jinko developer platform.' }, globals);
35
+ process.exit(3);
36
+ }
37
+ await writeConfigFile({ api_key: token });
38
38
  output({
39
39
  status: 'ok',
40
- method: isApiKey ? 'api_key' : 'oauth',
41
- message: `${isApiKey ? 'API key' : 'OAuth token'} saved to ${CONFIG_FILE}`,
40
+ method: 'api_key',
41
+ message: `API key saved to ${CONFIG_FILE}`,
42
42
  }, { format: globals.format });
43
43
  });
44
44
  auth
@@ -50,7 +50,7 @@ export function registerAuthCommands(program) {
50
50
  if (!auth) {
51
51
  output({
52
52
  authenticated: false,
53
- message: 'No credentials configured. Run `jinko auth login` or set JINKO_API_KEY / JINKO_TOKEN.',
53
+ message: 'No credentials configured. Run `jinko auth login` or set JINKO_API_KEY.',
54
54
  }, { format: globals.format });
55
55
  return;
56
56
  }
@@ -60,7 +60,7 @@ export function registerAuthCommands(program) {
60
60
  : '***';
61
61
  const source = globals.apiKey
62
62
  ? 'flag'
63
- : (process.env['JINKO_API_KEY'] || process.env['JINKO_TOKEN'])
63
+ : process.env['JINKO_API_KEY']
64
64
  ? 'env'
65
65
  : 'config';
66
66
  output({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerBookCommand(program: Command): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/book/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmE1D"}
@@ -0,0 +1,61 @@
1
+ import { withClient, output } from '../shared.js';
2
+ export function registerBookCommand(program) {
3
+ program
4
+ .command('book')
5
+ .description('Book a trip. Orchestrates quoting and returns a checkout URL.')
6
+ .option('--trip-id <id>', 'trip ID (required if no --trip-item-token)')
7
+ .option('--trip-item-token <token>', 'create trip + add flight + checkout in one call')
8
+ .option('--travelers <json>', 'travelers JSON array (for one-shot booking)')
9
+ .option('--contact <json>', 'contact JSON {email, phone} (for one-shot booking)')
10
+ .action(withClient(async (client, globals, opts) => {
11
+ let tripId = opts.tripId;
12
+ // One-shot booking: create trip with flight + travelers, then checkout.
13
+ if (opts.tripItemToken) {
14
+ const tripBody = {
15
+ add_item: { trip_item_token: opts.tripItemToken },
16
+ };
17
+ if (opts.travelers) {
18
+ let travelers;
19
+ try {
20
+ travelers = JSON.parse(opts.travelers);
21
+ }
22
+ catch {
23
+ console.error('Error: --travelers must be valid JSON array.');
24
+ process.exit(3);
25
+ }
26
+ const upsertTravelers = { travelers };
27
+ if (opts.contact) {
28
+ try {
29
+ upsertTravelers['contact'] = JSON.parse(opts.contact);
30
+ }
31
+ catch {
32
+ console.error('Error: --contact must be valid JSON object.');
33
+ process.exit(3);
34
+ }
35
+ }
36
+ tripBody['upsert_travelers'] = upsertTravelers;
37
+ }
38
+ if (tripId)
39
+ tripBody['trip_id'] = tripId;
40
+ const tripResponse = await client.raw.POST('/api/v1/devplatform/trips', {
41
+ body: tripBody,
42
+ });
43
+ const tripData = tripResponse.data;
44
+ tripId = tripData?.['trip_id'];
45
+ if (!tripId) {
46
+ console.error('Error: failed to create trip — no trip_id returned.');
47
+ process.exit(1);
48
+ }
49
+ }
50
+ if (!tripId) {
51
+ console.error('Error: --trip-id is required, or use --trip-item-token for one-shot booking.');
52
+ process.exit(3);
53
+ }
54
+ // Checkout via devplatform endpoint — handles quoting internally.
55
+ const checkoutResponse = await client.raw.POST('/api/v1/devplatform/trips/checkout', {
56
+ body: { trip_id: tripId },
57
+ });
58
+ output(checkoutResponse.data, { format: globals.format });
59
+ }));
60
+ }
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/book/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;SACtE,MAAM,CAAC,2BAA2B,EAAE,iDAAiD,CAAC;SACtF,MAAM,CAAC,oBAAoB,EAAE,6CAA6C,CAAC;SAC3E,MAAM,CAAC,kBAAkB,EAAE,oDAAoD,CAAC;SAChF,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAEzB,wEAAwE;QACxE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,QAAQ,GAA4B;gBACxC,QAAQ,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,EAAE;aAClD,CAAC;YAEF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,SAAoB,CAAC;gBACzB,IAAI,CAAC;oBACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAc,CAAC;gBACtD,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;oBAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,MAAM,eAAe,GAA4B,EAAE,SAAS,EAAE,CAAC;gBAE/D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,IAAI,CAAC;wBACH,eAAe,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACxD,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;wBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;gBAED,QAAQ,CAAC,kBAAkB,CAAC,GAAG,eAAe,CAAC;YACjD,CAAC;YAED,IAAI,MAAM;gBAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;YAEzC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,2BAAoC,EAAE;gBAC/E,IAAI,EAAE,QAAQ;aACN,CAAC,CAAC;YAEZ,MAAM,QAAQ,GAAI,YAAmD,CAAC,IAAI,CAAC;YAC3E,MAAM,GAAG,QAAQ,EAAE,CAAC,SAAS,CAAW,CAAC;YAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;YAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,kEAAkE;QAClE,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,oCAA6C,EAAE;YAC5F,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;SACjB,CAAC,CAAC;QAEZ,MAAM,CAAE,gBAAuC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/commands/flights/calendar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAgD7D"}
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/commands/flights/calendar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAsD7D"}
@@ -20,18 +20,24 @@ export function registerCalendarCommand(parent) {
20
20
  const lastDay = new Date(year, mon, 0).getDate();
21
21
  const endDate = `${month}-${String(lastDay).padStart(2, '0')}`;
22
22
  const body = {
23
- origin: opts.from,
24
- destination: opts.to,
25
- departure_date: startDate,
26
- trip_type: 'oneway',
27
- cabin_class: opts.cabin,
28
- direct_only: opts.directOnly ?? false,
29
- sort_by: 'lowest',
30
- passengers: { adults: 1 },
23
+ passengers: { adt: 1 },
24
+ filters: {
25
+ locations: {
26
+ origins: [opts.from],
27
+ destinations: [opts.to],
28
+ },
29
+ dates: {
30
+ departure_date_ranges: [{ start: startDate, end: endDate }],
31
+ },
32
+ trip_type: 'oneway',
33
+ cabin_class: opts.cabin,
34
+ direct_only: opts.directOnly ?? false,
35
+ },
36
+ sort: 'lowest',
31
37
  };
32
38
  // Note: This is a simplified v1. A proper calendar endpoint would
33
39
  // return price-per-date. For now, we search the full range.
34
- const response = await client.raw.POST('/api/v1/devplatform/flights/shop', {
40
+ const response = await client.raw.POST('/api/v1/devplatform/flights/search', {
35
41
  body,
36
42
  });
37
43
  const data = response.data;
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/commands/flights/calendar.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,uBAAuB,CAAC,MAAe;IACrD,MAAM;SACH,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,yFAAyF,CAAC;SACtG,cAAc,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;SACxD,cAAc,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;SAChE,MAAM,CAAC,iBAAiB,EAAE,uDAAuD,CAAC;SAClF,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,SAAS,CAAC;SACnD,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,mEAAmE;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,KAAK,KAAK,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAE/D,MAAM,IAAI,GAA4B;YACpC,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,WAAW,EAAE,IAAI,CAAC,EAAE;YACpB,cAAc,EAAE,SAAS;YACzB,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,IAAI,CAAC,KAAK;YACvB,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;YACrC,OAAO,EAAE,QAAQ;YACjB,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;SAC1B,CAAC;QAEF,kEAAkE;QAClE,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,kCAA2C,EAAE;YAClF,IAAI;SACI,CAAC,CAAC;QAEZ,MAAM,IAAI,GAAI,QAA+B,CAAC,IAAI,CAAC;QAEnD,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,OAAO,OAAO,IAAI,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/commands/flights/calendar.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,uBAAuB,CAAC,MAAe;IACrD,MAAM;SACH,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,yFAAyF,CAAC;SACtG,cAAc,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;SACxD,cAAc,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;SAChE,MAAM,CAAC,iBAAiB,EAAE,uDAAuD,CAAC;SAClF,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,SAAS,CAAC;SACnD,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,mEAAmE;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,KAAK,KAAK,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAE/D,MAAM,IAAI,GAA4B;YACpC,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;YACtB,OAAO,EAAE;gBACP,SAAS,EAAE;oBACT,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;oBACpB,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;iBACxB;gBACD,KAAK,EAAE;oBACL,qBAAqB,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;iBAC5D;gBACD,SAAS,EAAE,QAAQ;gBACnB,WAAW,EAAE,IAAI,CAAC,KAAK;gBACvB,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;aACtC;YACD,IAAI,EAAE,QAAQ;SACf,CAAC;QAEF,kEAAkE;QAClE,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,oCAA6C,EAAE;YACpF,IAAI;SACI,CAAC,CAAC;QAEZ,MAAM,IAAI,GAAI,QAA+B,CAAC,IAAI,CAAC;QAEnD,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,OAAO,OAAO,IAAI,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"destinations.d.ts","sourceRoot":"","sources":["../../../src/commands/flights/destinations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAwCjE"}
1
+ {"version":3,"file":"destinations.d.ts","sourceRoot":"","sources":["../../../src/commands/flights/destinations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAsDjE"}
@@ -9,28 +9,42 @@ export function registerDestinationsCommand(parent) {
9
9
  .option('--direct-only', 'only direct flights')
10
10
  .option('--cabin <class>', 'cabin class', 'economy')
11
11
  .option('--max-price <amount>', 'maximum price filter')
12
- .option('--sort <sort>', 'sort: price, destination', 'price')
12
+ .option('--sort <sort>', 'sort: lowest, recommendation', 'lowest')
13
13
  .option('--limit <n>', 'max destinations', '20')
14
14
  .action(withClient(async (client, globals, opts) => {
15
15
  const origins = Array.isArray(opts.from) ? opts.from : [opts.from];
16
16
  const body = {
17
- passengers: { adults: 1 },
17
+ passengers: { adt: 1 },
18
18
  filters: {
19
19
  locations: {
20
- origins: origins.map((o) => ({ code: o })),
20
+ origins,
21
21
  },
22
22
  trip_type: opts.return ? 'roundtrip' : 'oneway',
23
23
  },
24
24
  flights_per_destination: 1,
25
+ sort: opts.sort,
25
26
  limit: Number(opts.limit) || 20,
26
27
  };
28
+ // BFF requires dates — use provided date or default to next 12 months.
27
29
  if (opts.date) {
28
30
  body['filters']['dates'] = {
29
- departure: opts.date,
30
- ...(opts.return ? { return: opts.return } : {}),
31
+ departure_dates: [opts.date],
32
+ ...(opts.return ? { return_dates: [opts.return] } : {}),
31
33
  };
32
34
  }
33
- const response = await client.raw.POST('/api/v1/flights/destination-search', {
35
+ else {
36
+ const today = new Date();
37
+ const start = today.toISOString().slice(0, 10);
38
+ const end = new Date(today.getFullYear() + 1, today.getMonth(), today.getDate())
39
+ .toISOString().slice(0, 10);
40
+ body['filters']['dates'] = {
41
+ departure_date_ranges: [{ start, end }],
42
+ };
43
+ }
44
+ if (opts.maxPrice) {
45
+ body['price_constraints'] = { max_total: Number(opts.maxPrice) };
46
+ }
47
+ const response = await client.raw.POST('/api/v1/devplatform/flights/destination-search', {
34
48
  body,
35
49
  });
36
50
  output(response.data, { format: globals.format });
@@ -1 +1 @@
1
- {"version":3,"file":"destinations.js","sourceRoot":"","sources":["../../../src/commands/flights/destinations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,2BAA2B,CAAC,MAAe;IACzD,MAAM;SACH,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,cAAc,CAAC,qBAAqB,EAAE,8CAA8C,CAAC;SACrF,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;SACtD,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;SACrD,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,SAAS,CAAC;SACnD,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;SACtD,MAAM,CAAC,eAAe,EAAE,0BAA0B,EAAE,OAAO,CAAC;SAC5D,MAAM,CAAC,aAAa,EAAE,kBAAkB,EAAE,IAAI,CAAC;SAC/C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnE,MAAM,IAAI,GAA4B;YACpC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;YACzB,OAAO,EAAE;gBACP,SAAS,EAAE;oBACT,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;iBACnD;gBACD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;aAChD;YACD,uBAAuB,EAAE,CAAC;YAC1B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;SAChC,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,CAA6B,CAAC,OAAO,CAAC,GAAG;gBACtD,SAAS,EAAE,IAAI,CAAC,IAAI;gBACpB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChD,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,oCAA6C,EAAE;YACpF,IAAI;SACI,CAAC,CAAC;QAEZ,MAAM,CAAE,QAA+B,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
1
+ {"version":3,"file":"destinations.js","sourceRoot":"","sources":["../../../src/commands/flights/destinations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,2BAA2B,CAAC,MAAe;IACzD,MAAM;SACH,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,cAAc,CAAC,qBAAqB,EAAE,8CAA8C,CAAC;SACrF,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;SACtD,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;SACrD,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,SAAS,CAAC;SACnD,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;SACtD,MAAM,CAAC,eAAe,EAAE,8BAA8B,EAAE,QAAQ,CAAC;SACjE,MAAM,CAAC,aAAa,EAAE,kBAAkB,EAAE,IAAI,CAAC;SAC/C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnE,MAAM,IAAI,GAA4B;YACpC,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;YACtB,OAAO,EAAE;gBACP,SAAS,EAAE;oBACT,OAAO;iBACR;gBACD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;aAChD;YACD,uBAAuB,EAAE,CAAC;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;SAChC,CAAC;QAEF,uEAAuE;QACvE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,CAA6B,CAAC,OAAO,CAAC,GAAG;gBACtD,eAAe,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/C,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;iBAC7E,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,CAA6B,CAAC,OAAO,CAAC,GAAG;gBACtD,qBAAqB,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;aACxC,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,gDAAyD,EAAE;YAChG,IAAI;SACI,CAAC,CAAC;QAEZ,MAAM,CAAE,QAA+B,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerFindCommand(parent: Command): void;
3
+ //# sourceMappingURL=find.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/commands/flights/find.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA2CzD"}
@@ -0,0 +1,43 @@
1
+ import { withClient, output } from '../shared.js';
2
+ export function registerFindCommand(parent) {
3
+ parent
4
+ .command('find')
5
+ .description('Find cheapest flights from cached data. Use "flights search" for live pricing.')
6
+ .requiredOption('--from <origin>', 'origin airport code (e.g. PAR)')
7
+ .requiredOption('--to <destination>', 'destination airport code (e.g. NYC)')
8
+ .requiredOption('--date <date>', 'departure date (YYYY-MM-DD)')
9
+ .option('--return <date>', 'return date for round-trip (YYYY-MM-DD)')
10
+ .option('--cabin <class>', 'cabin class: economy, premium_economy, business, first', 'economy')
11
+ .option('--direct-only', 'only show direct flights')
12
+ .option('--max-price <amount>', 'maximum price filter')
13
+ .option('--sort <sort>', 'sort: lowest, recommendation', 'lowest')
14
+ .option('--limit <n>', 'max results', '10')
15
+ .action(withClient(async (client, globals, opts) => {
16
+ const body = {
17
+ passengers: { adt: 1 },
18
+ filters: {
19
+ locations: {
20
+ origins: [opts.from],
21
+ destinations: [opts.to],
22
+ },
23
+ dates: {
24
+ departure_dates: [opts.date],
25
+ ...(opts.return ? { return_dates: [opts.return] } : {}),
26
+ },
27
+ trip_type: opts.return ? 'roundtrip' : 'oneway',
28
+ cabin_class: opts.cabin,
29
+ direct_only: opts.directOnly ?? false,
30
+ },
31
+ sort: opts.sort,
32
+ limit: Number(opts.limit) || 10,
33
+ };
34
+ if (opts.maxPrice) {
35
+ body['price_constraints'] = { max_total: Number(opts.maxPrice) };
36
+ }
37
+ const response = await client.raw.POST('/api/v1/devplatform/flights/search', {
38
+ body,
39
+ });
40
+ output(response.data, { format: globals.format });
41
+ }));
42
+ }
43
+ //# sourceMappingURL=find.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/commands/flights/find.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,mBAAmB,CAAC,MAAe;IACjD,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gFAAgF,CAAC;SAC7F,cAAc,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;SACnE,cAAc,CAAC,oBAAoB,EAAE,qCAAqC,CAAC;SAC3E,cAAc,CAAC,eAAe,EAAE,6BAA6B,CAAC;SAC9D,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;SACpE,MAAM,CAAC,iBAAiB,EAAE,wDAAwD,EAAE,SAAS,CAAC;SAC9F,MAAM,CAAC,eAAe,EAAE,0BAA0B,CAAC;SACnD,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;SACtD,MAAM,CAAC,eAAe,EAAE,8BAA8B,EAAE,QAAQ,CAAC;SACjE,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;SAC1C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,IAAI,GAA4B;YACpC,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;YACtB,OAAO,EAAE;gBACP,SAAS,EAAE;oBACT,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;oBACpB,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;iBACxB;gBACD,KAAK,EAAE;oBACL,eAAe,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC5B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxD;gBACD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;gBAC/C,WAAW,EAAE,IAAI,CAAC,KAAK;gBACvB,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;aACtC;YACD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;SAChC,CAAC;QAEF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,oCAA6C,EAAE;YACpF,IAAI;SACI,CAAC,CAAC;QAEZ,MAAM,CAAE,QAA+B,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/flights/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/flights/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS9D"}
@@ -1,3 +1,4 @@
1
+ import { registerFindCommand } from './find.js';
1
2
  import { registerSearchCommand } from './search.js';
2
3
  import { registerDestinationsCommand } from './destinations.js';
3
4
  import { registerCalendarCommand } from './calendar.js';
@@ -5,6 +6,7 @@ export function registerFlightsCommands(program) {
5
6
  const flights = program
6
7
  .command('flights')
7
8
  .description('Search flights, explore destinations, and check prices.');
9
+ registerFindCommand(flights);
8
10
  registerSearchCommand(flights);
9
11
  registerDestinationsCommand(flights);
10
12
  registerCalendarCommand(flights);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/flights/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,yDAAyD,CAAC,CAAC;IAE1E,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACrC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/flights/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,yDAAyD,CAAC,CAAC;IAE1E,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACrC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/flights/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA6D3D"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/flights/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA0D3D"}
@@ -11,9 +11,7 @@ export function registerSearchCommand(parent) {
11
11
  .option('--cabin <class>', 'cabin class: economy, premium_economy, business, first', 'economy')
12
12
  .option('--direct-only', 'only show direct flights')
13
13
  .option('--max-price <amount>', 'maximum price filter')
14
- .option('--sort <sort>', 'sort: lowest, recommendation', 'lowest')
15
14
  .option('--offer-token <token>', 'price-check a specific offer (live pricing)')
16
- .option('--limit <n>', 'max results', '10')
17
15
  .action(withClient(async (client, globals, opts) => {
18
16
  const isOfferCheck = Boolean(opts.offerToken);
19
17
  if (isOfferCheck) {
@@ -42,7 +40,6 @@ export function registerSearchCommand(parent) {
42
40
  trip_type: opts.return ? 'roundtrip' : 'oneway',
43
41
  cabin_class: opts.cabin,
44
42
  direct_only: opts.directOnly ?? false,
45
- sort_by: opts.sort,
46
43
  passengers: {
47
44
  adults: Number(opts.passengers) || 1,
48
45
  },
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/flights/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACnD,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;SAC3D,MAAM,CAAC,oBAAoB,EAAE,qCAAqC,CAAC;SACnE,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;SACtD,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;SACpE,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,GAAG,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,wDAAwD,EAAE,SAAS,CAAC;SAC9F,MAAM,CAAC,eAAe,EAAE,0BAA0B,CAAC;SACnD,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;SACtD,MAAM,CAAC,eAAe,EAAE,8BAA8B,EAAE,QAAQ,CAAC;SACjE,MAAM,CAAC,uBAAuB,EAAE,6CAA6C,CAAC;SAC9E,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;SAC1C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE9C,IAAI,YAAY,EAAE,CAAC;YACjB,mDAAmD;YACnD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,kCAA2C,EAAE;gBAClF,IAAI,EAAE;oBACJ,WAAW,EAAE,IAAI,CAAC,UAAU;oBAC5B,UAAU,EAAE;wBACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;qBACrC;iBACF;aACO,CAAC,CAAC;YAEZ,MAAM,CAAE,QAA+B,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,8CAA8C;YAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACzC,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;gBAC/E,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;gBAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,IAAI,GAA4B;gBACpC,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,WAAW,EAAE,IAAI,CAAC,EAAE;gBACpB,cAAc,EAAE,IAAI,CAAC,IAAI;gBACzB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;gBAC/C,WAAW,EAAE,IAAI,CAAC,KAAK;gBACvB,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;gBACrC,OAAO,EAAE,IAAI,CAAC,IAAI;gBAClB,UAAU,EAAE;oBACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;iBACrC;aACF,CAAC;YAEF,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACnD,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE7D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,kCAA2C,EAAE;gBAClF,IAAI;aACI,CAAC,CAAC;YAEZ,MAAM,CAAE,QAA+B,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/flights/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACnD,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;SAC3D,MAAM,CAAC,oBAAoB,EAAE,qCAAqC,CAAC;SACnE,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;SACtD,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;SACpE,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,GAAG,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,wDAAwD,EAAE,SAAS,CAAC;SAC9F,MAAM,CAAC,eAAe,EAAE,0BAA0B,CAAC;SACnD,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;SACtD,MAAM,CAAC,uBAAuB,EAAE,6CAA6C,CAAC;SAC9E,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE9C,IAAI,YAAY,EAAE,CAAC;YACjB,mDAAmD;YACnD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,kCAA2C,EAAE;gBAClF,IAAI,EAAE;oBACJ,WAAW,EAAE,IAAI,CAAC,UAAU;oBAC5B,UAAU,EAAE;wBACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;qBACrC;iBACF;aACO,CAAC,CAAC;YAEZ,MAAM,CAAE,QAA+B,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,8CAA8C;YAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACzC,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;gBAC/E,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;gBAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,IAAI,GAA4B;gBACpC,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,WAAW,EAAE,IAAI,CAAC,EAAE;gBACpB,cAAc,EAAE,IAAI,CAAC,IAAI;gBACzB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;gBAC/C,WAAW,EAAE,IAAI,CAAC,KAAK;gBACvB,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;gBACrC,UAAU,EAAE;oBACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;iBACrC;aACF,CAAC;YAEF,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACnD,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE7D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,kCAA2C,EAAE;gBAClF,IAAI;aACI,CAAC,CAAC;YAEZ,MAAM,CAAE,QAA+B,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2FpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B5D"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0HpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B5D"}
@@ -5,83 +5,114 @@ import { getGlobalOptions } from '../config/config.js';
5
5
  * request/response shapes for agent consumption.
6
6
  */
7
7
  const SCHEMAS = {
8
+ 'flights.find': {
9
+ description: 'Find cheapest flights from cached data (POST /flights/search).',
10
+ request: {
11
+ passengers: '{ adt: number, chd?: number, inf_lap?: number }',
12
+ filters: {
13
+ locations: '{ origins: string[], destinations: string[] }',
14
+ dates: '{ departure_dates?: string[], return_dates?: string[], departure_date_ranges?: [{ start, end }] }',
15
+ trip_type: 'oneway | roundtrip',
16
+ cabin_class: 'economy | premium_economy | business | first',
17
+ direct_only: 'boolean?',
18
+ },
19
+ sort: 'lowest | recommendation',
20
+ limit: 'number? (default 20)',
21
+ price_constraints: '{ max_total?: number }?',
22
+ },
23
+ response: {
24
+ itineraries: '[{ id, slices, total_amount, origin_city_code, destination_city_code, ... }]',
25
+ destination: '{ iata_code, city_name, location }',
26
+ pagination: '{ next_page_token }',
27
+ },
28
+ },
8
29
  'flights.search': {
9
- description: 'Search flights (Mode A) or price-check an offer (Mode B).',
30
+ description: 'Live flight search or price-check a specific offer (POST /flights/shop).',
10
31
  request: {
11
32
  mode_a_search: {
12
- origin: 'string (IATA code, e.g. PAR)',
13
- destination: 'string (IATA code, e.g. NYC)',
33
+ origin: 'string (IATA code)',
34
+ destination: 'string (IATA code)',
14
35
  departure_date: 'string (YYYY-MM-DD)',
15
- return_date: 'string? (YYYY-MM-DD, for roundtrip)',
36
+ return_date: 'string? (YYYY-MM-DD)',
16
37
  trip_type: 'oneway | roundtrip',
17
38
  cabin_class: 'economy | premium_economy | business | first',
18
39
  direct_only: 'boolean?',
19
40
  max_price: 'number?',
20
- passengers: '{ adults: number, children?: number, infants?: number }',
41
+ passengers: '{ adults?: number, children?: number, infants?: number }',
21
42
  },
22
43
  mode_b_price_check: {
23
- offer_token: 'string (from search results)',
24
- passengers: '{ adults: number, children?: number, infants?: number }',
44
+ offer_token: 'string (from find results)',
45
+ passengers: '{ adults?: number, children?: number, infants?: number }',
25
46
  },
26
47
  },
27
48
  response: {
28
49
  mode: 'search | price_check',
29
- flights: '[{ offer_token, airline, departure, arrival, duration, stops, price, currency, ... }]',
30
- fares: '(mode B only) [{ trip_item_token, cabin_class, baggage, refundable, price }]',
50
+ flights: '[{ offer_token, origin, destination, total_price, currency, outbound_*, inbound_*, fares? }]',
51
+ fares: '(price_check only) [{ trip_item_token, brand_name, cabin_class, total_price, is_refundable, ... }]',
31
52
  },
32
53
  },
33
54
  'flights.destinations': {
34
- description: 'Discover destinations from origin airports.',
55
+ description: 'Discover destinations from origin airports (POST /flights/destination-search).',
35
56
  request: {
36
- origins: 'string[] (IATA codes)',
37
- departure_date: 'string? (YYYY-MM-DD)',
38
- return_date: 'string? (YYYY-MM-DD)',
39
- direct_only: 'boolean?',
40
- cabin_class: 'string?',
41
- max_price: 'number?',
57
+ passengers: '{ adt: number }',
58
+ filters: {
59
+ locations: '{ origins: string[] }',
60
+ dates: '{ departure_dates?: string[], return_dates?: string[] }?',
61
+ trip_type: 'oneway | roundtrip',
62
+ },
63
+ flights_per_destination: 'number? (default 1)',
64
+ limit: 'number? (default 20)',
65
+ price_constraints: '{ max_total?: number }?',
42
66
  },
43
67
  response: {
44
- destinations: '[{ city, country, airport_code, cheapest_price, currency, offer_token }]',
68
+ origin: '{ city_code, city_name, country_code }',
69
+ destinations: '[{ iata_code, city_name, lowest_fare_flight, flights }]',
70
+ pagination: '{ next_page_token }',
71
+ total: 'number',
45
72
  },
46
73
  },
47
74
  'flights.calendar': {
48
- description: 'Show cheapest prices across a date range.',
75
+ description: 'Browse prices across a date range (uses /flights/search with date range).',
49
76
  request: {
50
- origin: 'string (IATA code)',
51
- destination: 'string (IATA code)',
52
- month: 'string (YYYY-MM)',
53
- cabin_class: 'string?',
77
+ from: 'string (IATA code, origin)',
78
+ to: 'string (IATA code, destination)',
79
+ month: 'string (YYYY-MM, CLI computes start/end date range)',
80
+ cabin_class: 'string? (default economy)',
54
81
  direct_only: 'boolean?',
55
82
  },
56
83
  response: {
57
- dates: '[{ date, price, currency, offer_token }]',
84
+ itineraries: '[{ id, slices, total_amount, ... }]',
58
85
  },
59
86
  },
60
- 'trip.checkout': {
61
- description: 'One-shot booking: send trip_item_token + travelers + contact, get checkout URL.',
87
+ 'book': {
88
+ description: 'Book a trip. One-shot or existing trip checkout (POST /trips + /trips/checkout).',
62
89
  request: {
63
- trip_item_token: 'string (from flights search price-check)',
90
+ trip_id: 'string? (required if no trip_item_token)',
91
+ trip_item_token: 'string? (from price-check, for one-shot booking)',
64
92
  travelers: '[{ first_name, last_name, date_of_birth, gender, passenger_type, nationality?, passport_number?, passport_expiry?, passport_country? }]',
65
- contact: '{ email: string, phone: string }',
93
+ contact: '{ email: string, phone?: string }',
66
94
  },
67
95
  response: {
68
96
  checkout_url: 'string (https://app.gojinko.com/checkout?sid=XXX)',
69
97
  session_id: 'string',
70
- trip_id: 'string',
71
- status: 'ready | error',
98
+ status: 'ready | pending | failed',
99
+ expires_at: 'string? (ISO datetime)',
72
100
  },
73
101
  },
74
102
  'trip.travelers': {
75
- description: 'Set travelers on a trip (inline, via devplatform/trips).',
103
+ description: 'Set travelers on a trip (POST /trips with upsert_travelers).',
76
104
  request: {
77
105
  trip_id: 'string',
78
- travelers: '[{ first_name, last_name, date_of_birth, gender, passenger_type, nationality?, passport_number?, passport_expiry?, passport_country? }]',
79
- contact: '{ email: string, phone: string }',
106
+ upsert_travelers: {
107
+ travelers: '[{ first_name, last_name, date_of_birth, gender, passenger_type, ... }]',
108
+ contact: '{ email: string, phone?: string }?',
109
+ },
80
110
  },
81
111
  response: {
82
112
  trip_id: 'string',
83
113
  status: 'string',
84
114
  travelers: '[...]',
115
+ contact: '{ email, phone }',
85
116
  actions_performed: 'string[]',
86
117
  },
87
118
  },
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/trip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAU3D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/trip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS3D"}
@@ -2,15 +2,13 @@ import { registerTripCreateCommand } from './create.js';
2
2
  import { registerTripShowCommand } from './show.js';
3
3
  import { registerTripAddFlightCommand } from './add-flight.js';
4
4
  import { registerTripTravelersCommand } from './travelers.js';
5
- import { registerTripCheckoutCommand } from './checkout.js';
6
5
  export function registerTripCommands(program) {
7
6
  const trip = program
8
7
  .command('trip')
9
- .description('Manage trips: create, add flights, assign travelers, and checkout.');
8
+ .description('Manage trips: create, add flights, and assign travelers.');
10
9
  registerTripCreateCommand(trip);
11
10
  registerTripShowCommand(trip);
12
11
  registerTripAddFlightCommand(trip);
13
12
  registerTripTravelersCommand(trip);
14
- registerTripCheckoutCommand(trip);
15
13
  }
16
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/trip/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAE5D,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oEAAoE,CAAC,CAAC;IAErF,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9B,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACnC,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACnC,2BAA2B,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/trip/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0DAA0D,CAAC,CAAC;IAE3E,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9B,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACnC,4BAA4B,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"travelers.d.ts","sourceRoot":"","sources":["../../../src/commands/trip/travelers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAoClE"}
1
+ {"version":3,"file":"travelers.d.ts","sourceRoot":"","sources":["../../../src/commands/trip/travelers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAsClE"}
@@ -15,19 +15,20 @@ export function registerTripTravelersCommand(parent) {
15
15
  console.error('Error: --travelers must be valid JSON array.');
16
16
  process.exit(3);
17
17
  }
18
- const body = {
19
- trip_id: opts.tripId,
20
- upsert_travelers: travelers,
21
- };
18
+ const upsertTravelers = { travelers };
22
19
  if (opts.contact) {
23
20
  try {
24
- body['contact'] = JSON.parse(opts.contact);
21
+ upsertTravelers['contact'] = JSON.parse(opts.contact);
25
22
  }
26
23
  catch {
27
24
  console.error('Error: --contact must be valid JSON object.');
28
25
  process.exit(3);
29
26
  }
30
27
  }
28
+ const body = {
29
+ trip_id: opts.tripId,
30
+ upsert_travelers: upsertTravelers,
31
+ };
31
32
  const response = await client.raw.POST('/api/v1/devplatform/trips', {
32
33
  body,
33
34
  });
@@ -1 +1 @@
1
- {"version":3,"file":"travelers.js","sourceRoot":"","sources":["../../../src/commands/trip/travelers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,4BAA4B,CAAC,MAAe;IAC1D,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,0BAA0B,CAAC;SACvC,cAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC;SAC3C,cAAc,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;SAC5D,MAAM,CAAC,kBAAkB,EAAE,0CAA0C,CAAC;SACtE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,IAAI,SAAoB,CAAC;QACzB,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAc,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAA4B;YACpC,OAAO,EAAE,IAAI,CAAC,MAAM;YACpB,gBAAgB,EAAE,SAAS;SAC5B,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,2BAAoC,EAAE;YAC3E,IAAI;SACI,CAAC,CAAC;QAEZ,MAAM,CAAE,QAA+B,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
1
+ {"version":3,"file":"travelers.js","sourceRoot":"","sources":["../../../src/commands/trip/travelers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,4BAA4B,CAAC,MAAe;IAC1D,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,0BAA0B,CAAC;SACvC,cAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC;SAC3C,cAAc,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;SAC5D,MAAM,CAAC,kBAAkB,EAAE,0CAA0C,CAAC;SACtE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,IAAI,SAAoB,CAAC;QACzB,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAc,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,eAAe,GAA4B,EAAE,SAAS,EAAE,CAAC;QAE/D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,eAAe,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAA4B;YACpC,OAAO,EAAE,IAAI,CAAC,MAAM;YACpB,gBAAgB,EAAE,eAAe;SAClC,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,2BAAoC,EAAE;YAC3E,IAAI;SACI,CAAC,CAAC;QAEZ,MAAM,CAAE,QAA+B,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,aAAa,IAAI,OAAO,CAkBvC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,aAAa,IAAI,OAAO,CAmBvC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Command } from 'commander';
2
2
  import { registerFlightsCommands } from './commands/flights/index.js';
3
3
  import { registerTripCommands } from './commands/trip/index.js';
4
+ import { registerBookCommand } from './commands/book/index.js';
4
5
  import { registerAuthCommands } from './commands/auth/index.js';
5
6
  import { registerSchemaCommand } from './commands/schema.js';
6
7
  import { registerConfigCommands } from './commands/config/index.js';
@@ -9,12 +10,13 @@ export function createProgram() {
9
10
  program
10
11
  .name('jinko')
11
12
  .description('Jinko CLI — search flights, manage trips, and book travel from the terminal.')
12
- .version('0.1.0')
13
+ .version('0.1.3')
13
14
  .option('--format <format>', 'output format: json (default) or table', 'json')
14
- .option('--api-key <key>', 'API key or OAuth token (overrides env/config)')
15
+ .option('--api-key <key>', 'API key (jnk_...) overrides env/config')
15
16
  .option('--base-url <url>', 'BFF base URL override');
16
17
  registerFlightsCommands(program);
17
18
  registerTripCommands(program);
19
+ registerBookCommand(program);
18
20
  registerAuthCommands(program);
19
21
  registerConfigCommands(program);
20
22
  registerSchemaCommand(program);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,8EAA8E,CAAC;SAC3F,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,mBAAmB,EAAE,wCAAwC,EAAE,MAAM,CAAC;SAC7E,MAAM,CAAC,iBAAiB,EAAE,+CAA+C,CAAC;SAC1E,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;IAEvD,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,8EAA8E,CAAC;SAC3F,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,mBAAmB,EAAE,wCAAwC,EAAE,MAAM,CAAC;SAC7E,MAAM,CAAC,iBAAiB,EAAE,0CAA0C,CAAC;SACrE,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;IAEvD,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gojinko/cli",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "jinko": "./dist/bin/jinko.js"
@@ -12,7 +12,7 @@
12
12
  "chalk": "^5.4.1",
13
13
  "zod": "^3.23.8",
14
14
  "yaml": "^2.7.0",
15
- "@gojinko/api-client": "0.1.1"
15
+ "@gojinko/api-client": "0.1.3"
16
16
  },
17
17
  "publishConfig": {
18
18
  "access": "public"