@gojinko/cli 0.3.0 → 0.4.5

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 (96) hide show
  1. package/README.md +86 -18
  2. package/SKILL.md +96 -18
  3. package/dist/bin/jinko.js +0 -0
  4. package/dist/commands/book.js +1 -1
  5. package/dist/commands/book.js.map +1 -1
  6. package/dist/commands/checkout.d.ts +3 -0
  7. package/dist/commands/checkout.d.ts.map +1 -0
  8. package/dist/commands/checkout.js +18 -0
  9. package/dist/commands/checkout.js.map +1 -0
  10. package/dist/commands/confirm-payment.d.ts +3 -0
  11. package/dist/commands/confirm-payment.d.ts.map +1 -0
  12. package/dist/commands/confirm-payment.js +24 -0
  13. package/dist/commands/confirm-payment.js.map +1 -0
  14. package/dist/commands/find-destination.js +1 -1
  15. package/dist/commands/find-destination.js.map +1 -1
  16. package/dist/commands/find-flight.js +1 -1
  17. package/dist/commands/find-flight.js.map +1 -1
  18. package/dist/commands/flight-calendar.js +1 -1
  19. package/dist/commands/flight-calendar.js.map +1 -1
  20. package/dist/commands/flight-search.d.ts.map +1 -1
  21. package/dist/commands/flight-search.js +8 -4
  22. package/dist/commands/flight-search.js.map +1 -1
  23. package/dist/commands/quote.d.ts +3 -0
  24. package/dist/commands/quote.d.ts.map +1 -0
  25. package/dist/commands/quote.js +14 -0
  26. package/dist/commands/quote.js.map +1 -0
  27. package/dist/commands/refund.d.ts +3 -0
  28. package/dist/commands/refund.d.ts.map +1 -0
  29. package/dist/commands/refund.js +37 -0
  30. package/dist/commands/refund.js.map +1 -0
  31. package/dist/commands/select-ancillaries.d.ts +3 -0
  32. package/dist/commands/select-ancillaries.d.ts.map +1 -0
  33. package/dist/commands/select-ancillaries.js +33 -0
  34. package/dist/commands/select-ancillaries.js.map +1 -0
  35. package/dist/commands/trip.js +1 -1
  36. package/dist/commands/trip.js.map +1 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +12 -1
  39. package/dist/index.js.map +1 -1
  40. package/package.json +12 -12
  41. package/dist/commands/book/index.d.ts +0 -3
  42. package/dist/commands/book/index.d.ts.map +0 -1
  43. package/dist/commands/book/index.js +0 -61
  44. package/dist/commands/book/index.js.map +0 -1
  45. package/dist/commands/flights/calendar.d.ts +0 -3
  46. package/dist/commands/flights/calendar.d.ts.map +0 -1
  47. package/dist/commands/flights/calendar.js +0 -51
  48. package/dist/commands/flights/calendar.js.map +0 -1
  49. package/dist/commands/flights/destinations.d.ts +0 -3
  50. package/dist/commands/flights/destinations.d.ts.map +0 -1
  51. package/dist/commands/flights/destinations.js +0 -53
  52. package/dist/commands/flights/destinations.js.map +0 -1
  53. package/dist/commands/flights/find.d.ts +0 -3
  54. package/dist/commands/flights/find.d.ts.map +0 -1
  55. package/dist/commands/flights/find.js +0 -43
  56. package/dist/commands/flights/find.js.map +0 -1
  57. package/dist/commands/flights/index.d.ts +0 -3
  58. package/dist/commands/flights/index.d.ts.map +0 -1
  59. package/dist/commands/flights/index.js +0 -14
  60. package/dist/commands/flights/index.js.map +0 -1
  61. package/dist/commands/flights/search.d.ts +0 -3
  62. package/dist/commands/flights/search.d.ts.map +0 -1
  63. package/dist/commands/flights/search.js +0 -58
  64. package/dist/commands/flights/search.js.map +0 -1
  65. package/dist/commands/travelers/index.d.ts +0 -3
  66. package/dist/commands/travelers/index.d.ts.map +0 -1
  67. package/dist/commands/travelers/index.js +0 -118
  68. package/dist/commands/travelers/index.js.map +0 -1
  69. package/dist/commands/trip/add-flight.d.ts +0 -3
  70. package/dist/commands/trip/add-flight.d.ts.map +0 -1
  71. package/dist/commands/trip/add-flight.js +0 -22
  72. package/dist/commands/trip/add-flight.js.map +0 -1
  73. package/dist/commands/trip/checkout.d.ts +0 -3
  74. package/dist/commands/trip/checkout.d.ts.map +0 -1
  75. package/dist/commands/trip/checkout.js +0 -59
  76. package/dist/commands/trip/checkout.js.map +0 -1
  77. package/dist/commands/trip/create.d.ts +0 -3
  78. package/dist/commands/trip/create.d.ts.map +0 -1
  79. package/dist/commands/trip/create.js +0 -14
  80. package/dist/commands/trip/create.js.map +0 -1
  81. package/dist/commands/trip/index.d.ts +0 -3
  82. package/dist/commands/trip/index.d.ts.map +0 -1
  83. package/dist/commands/trip/index.js +0 -14
  84. package/dist/commands/trip/index.js.map +0 -1
  85. package/dist/commands/trip/remove.d.ts +0 -3
  86. package/dist/commands/trip/remove.d.ts.map +0 -1
  87. package/dist/commands/trip/remove.js +0 -19
  88. package/dist/commands/trip/remove.js.map +0 -1
  89. package/dist/commands/trip/show.d.ts +0 -3
  90. package/dist/commands/trip/show.d.ts.map +0 -1
  91. package/dist/commands/trip/show.js +0 -17
  92. package/dist/commands/trip/show.js.map +0 -1
  93. package/dist/commands/trip/travelers.d.ts +0 -3
  94. package/dist/commands/trip/travelers.d.ts.map +0 -1
  95. package/dist/commands/trip/travelers.js +0 -38
  96. package/dist/commands/trip/travelers.js.map +0 -1
@@ -0,0 +1,33 @@
1
+ import { withClient, output } from './shared.js';
2
+ export function registerSelectAncillariesCommand(program) {
3
+ program
4
+ .command('select-ancillaries')
5
+ .description('Select ancillaries (baggage, seats, meals) for a trip item.')
6
+ .requiredOption('--trip-id <id>', 'trip ID')
7
+ .requiredOption('--item-id <id>', 'trip item ID')
8
+ .requiredOption('--select <ids>', 'comma-separated ancillary offer IDs')
9
+ .option('--pax <ref>', 'passenger reference (for per-pax ancillaries)')
10
+ .option('--quantity <n>', 'quantity (default: 1)', '1')
11
+ .action(withClient(async (client, globals, opts) => {
12
+ const parsedQuantity = parseInt(opts.quantity, 10);
13
+ if (Number.isNaN(parsedQuantity)) {
14
+ console.error('Error: --quantity must be a valid integer');
15
+ process.exitCode = 1;
16
+ return;
17
+ }
18
+ const selections = opts.select.split(',').map((offerId) => ({
19
+ offer_id: offerId.trim(),
20
+ ...(opts.pax && { pax_ref_id: opts.pax }),
21
+ ...(parsedQuantity !== 1 && { quantity: parsedQuantity }),
22
+ }));
23
+ const response = await client.raw.POST('/api/v1/trips/ancillaries', {
24
+ body: {
25
+ trip_id: opts.tripId,
26
+ item_id: opts.itemId,
27
+ selections,
28
+ },
29
+ });
30
+ output(response.data, { format: globals.format });
31
+ }));
32
+ }
33
+ //# sourceMappingURL=select-ancillaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-ancillaries.js","sourceRoot":"","sources":["../../src/commands/select-ancillaries.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,UAAU,gCAAgC,CAAC,OAAgB;IAC/D,OAAO;SACJ,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,6DAA6D,CAAC;SAC1E,cAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC;SAC3C,cAAc,CAAC,gBAAgB,EAAE,cAAc,CAAC;SAChD,cAAc,CAAC,gBAAgB,EAAE,qCAAqC,CAAC;SACvE,MAAM,CAAC,aAAa,EAAE,+CAA+C,CAAC;SACtE,MAAM,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,GAAG,CAAC;SACtD,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,CAAC;YAClE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE;YACxB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YACzC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;SAC1D,CAAC,CAAC,CAAC;QAEJ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,2BAAoC,EAAE;YAC3E,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI,CAAC,MAAM;gBACpB,OAAO,EAAE,IAAI,CAAC,MAAM;gBACpB,UAAU;aACX;SACO,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"}
@@ -36,7 +36,7 @@ export function registerTripCommand(program) {
36
36
  }
37
37
  body['upsert_travelers'] = upsertTravelers;
38
38
  }
39
- const response = await client.raw.POST('/api/v1/devplatform/trips', {
39
+ const response = await client.raw.POST('/api/v1/trips', {
40
40
  body,
41
41
  });
42
42
  output(response.data, { format: globals.format });
@@ -1 +1 @@
1
- {"version":3,"file":"trip.js","sourceRoot":"","sources":["../../src/commands/trip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,+EAA+E,CAAC;SAC5F,MAAM,CAAC,gBAAgB,EAAE,uCAAuC,CAAC;SACjE,MAAM,CAAC,2BAA2B,EAAE,wCAAwC,CAAC;SAC7E,MAAM,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;SACpD,MAAM,CAAC,kBAAkB,EAAE,6BAA6B,CAAC;SACzD,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,IAAI,GAA4B,EAAE,CAAC;QAEzC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7D,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,SAAoB,CAAC;YACzB,IAAI,CAAC;gBACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAc,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,eAAe,GAA4B,EAAE,SAAS,EAAE,CAAC;YAE/D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,eAAe,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxD,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,IAAI,CAAC,kBAAkB,CAAC,GAAG,eAAe,CAAC;QAC7C,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":"trip.js","sourceRoot":"","sources":["../../src/commands/trip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,+EAA+E,CAAC;SAC5F,MAAM,CAAC,gBAAgB,EAAE,uCAAuC,CAAC;SACjE,MAAM,CAAC,2BAA2B,EAAE,wCAAwC,CAAC;SAC7E,MAAM,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;SACpD,MAAM,CAAC,kBAAkB,EAAE,6BAA6B,CAAC;SACzD,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,IAAI,GAA4B,EAAE,CAAC;QAEzC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7D,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,SAAoB,CAAC;YACzB,IAAI,CAAC;gBACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAc,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,eAAe,GAA4B,EAAE,SAAS,EAAE,CAAC;YAE/D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,eAAe,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxD,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,IAAI,CAAC,kBAAkB,CAAC,GAAG,eAAe,CAAC;QAC7C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,eAAwB,EAAE;YAC/D,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;AAWpC,wBAAgB,aAAa,IAAI,OAAO,CAwBvC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,aAAa,IAAI,OAAO,CA+BvC"}
package/dist/index.js CHANGED
@@ -5,6 +5,11 @@ import { registerFlightSearchCommand } from './commands/flight-search.js';
5
5
  import { registerFlightCalendarCommand } from './commands/flight-calendar.js';
6
6
  import { registerTripCommand } from './commands/trip.js';
7
7
  import { registerBookCommand } from './commands/book.js';
8
+ import { registerQuoteCommand } from './commands/quote.js';
9
+ import { registerCheckoutCommand } from './commands/checkout.js';
10
+ import { registerSelectAncillariesCommand } from './commands/select-ancillaries.js';
11
+ import { registerConfirmPaymentCommand } from './commands/confirm-payment.js';
12
+ import { registerRefundCommand } from './commands/refund.js';
8
13
  import { registerAuthCommands } from './commands/auth/index.js';
9
14
  import { registerSchemaCommand } from './commands/schema.js';
10
15
  import { registerConfigCommands } from './commands/config/index.js';
@@ -16,13 +21,19 @@ export function createProgram() {
16
21
  .version('0.2.0')
17
22
  .option('--format <format>', 'output format: json (default) or table', 'json')
18
23
  .option('--api-key <key>', 'API key (jnk_...) — overrides env/config');
19
- // 6 tools matching MCP 1:1
24
+ // Core tools (matching MCP 1:1)
20
25
  registerFindFlightCommand(program);
21
26
  registerFindDestinationCommand(program);
22
27
  registerFlightSearchCommand(program);
23
28
  registerFlightCalendarCommand(program);
24
29
  registerTripCommand(program);
25
30
  registerBookCommand(program);
31
+ // V2: quote, checkout, ancillaries, payment, refunds
32
+ registerQuoteCommand(program);
33
+ registerCheckoutCommand(program);
34
+ registerSelectAncillariesCommand(program);
35
+ registerConfirmPaymentCommand(program);
36
+ registerRefundCommand(program);
26
37
  // Utility commands
27
38
  registerAuthCommands(program);
28
39
  registerConfigCommands(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,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,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,CAAC;IAEzE,2BAA2B;IAC3B,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACnC,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxC,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACrC,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE7B,mBAAmB;IACnB,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,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,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,CAAC;IAEzE,gCAAgC;IAChC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACnC,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxC,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACrC,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE7B,qDAAqD;IACrD,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC1C,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/B,mBAAmB;IACnB,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,19 +1,27 @@
1
1
  {
2
2
  "name": "@gojinko/cli",
3
- "version": "0.3.0",
3
+ "version": "0.4.5",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "jinko": "./dist/bin/jinko.js"
7
7
  },
8
8
  "main": "dist/index.js",
9
9
  "types": "dist/index.d.ts",
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsx --watch src/bin/jinko.ts",
13
+ "start": "tsx src/bin/jinko.ts",
14
+ "test": "vitest run",
15
+ "test:watch": "vitest",
16
+ "lint": "tsc --noEmit"
17
+ },
10
18
  "dependencies": {
19
+ "@gojinko/api-client": "workspace:*",
11
20
  "commander": "^12.1.0",
12
21
  "chalk": "^5.4.1",
13
22
  "open": "^10.0.0",
14
23
  "zod": "^3.23.8",
15
- "yaml": "^2.7.0",
16
- "@gojinko/api-client": "0.3.0"
24
+ "yaml": "^2.7.0"
17
25
  },
18
26
  "publishConfig": {
19
27
  "access": "public"
@@ -29,13 +37,5 @@
29
37
  "tsx": "^4.19.1",
30
38
  "vitest": "^2.1.0",
31
39
  "@types/node": "^22.0.0"
32
- },
33
- "scripts": {
34
- "build": "tsc",
35
- "dev": "tsx --watch src/bin/jinko.ts",
36
- "start": "tsx src/bin/jinko.ts",
37
- "test": "vitest run",
38
- "test:watch": "vitest",
39
- "lint": "tsc --noEmit"
40
40
  }
41
- }
41
+ }
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerBookCommand(program: Command): void;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,61 +0,0 @@
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
@@ -1 +0,0 @@
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,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerCalendarCommand(parent: Command): void;
3
- //# sourceMappingURL=calendar.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,51 +0,0 @@
1
- import { withClient, output } from '../shared.js';
2
- export function registerCalendarCommand(parent) {
3
- parent
4
- .command('calendar')
5
- .description('Show cheapest prices across a date range for a route. (Coming soon: dedicated endpoint)')
6
- .requiredOption('--from <origin>', 'origin airport code')
7
- .requiredOption('--to <destination>', 'destination airport code')
8
- .option('--month <month>', 'month to display (YYYY-MM), defaults to current month')
9
- .option('--cabin <class>', 'cabin class', 'economy')
10
- .option('--direct-only', 'only direct flights')
11
- .action(withClient(async (client, globals, opts) => {
12
- // v1: Use search with date range. Dedicated BFF endpoint deferred.
13
- const month = opts.month ?? new Date().toISOString().slice(0, 7);
14
- const [year, mon] = month.split('-').map(Number);
15
- if (!year || !mon) {
16
- console.error('Error: --month must be in YYYY-MM format.');
17
- process.exit(3);
18
- }
19
- const startDate = `${month}-01`;
20
- const lastDay = new Date(year, mon, 0).getDate();
21
- const endDate = `${month}-${String(lastDay).padStart(2, '0')}`;
22
- const body = {
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',
37
- };
38
- // Note: This is a simplified v1. A proper calendar endpoint would
39
- // return price-per-date. For now, we search the full range.
40
- const response = await client.raw.POST('/api/v1/devplatform/flights/search', {
41
- body,
42
- });
43
- const data = response.data;
44
- if (globals.format === 'table') {
45
- console.log(`\nFlight calendar: ${opts.from} → ${opts.to} (${month})`);
46
- console.log(`Date range: ${startDate} to ${endDate}\n`);
47
- }
48
- output(data, { format: globals.format });
49
- }));
50
- }
51
- //# sourceMappingURL=calendar.js.map
@@ -1 +0,0 @@
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,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerDestinationsCommand(parent: Command): void;
3
- //# sourceMappingURL=destinations.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,53 +0,0 @@
1
- import { withClient, output } from '../shared.js';
2
- export function registerDestinationsCommand(parent) {
3
- parent
4
- .command('destinations')
5
- .description('Discover destinations from one or more origins.')
6
- .requiredOption('--from <origins...>', 'origin airport code(s) (e.g. PAR or PAR CDG)')
7
- .option('--date <date>', 'departure date (YYYY-MM-DD)')
8
- .option('--return <date>', 'return date (YYYY-MM-DD)')
9
- .option('--direct-only', 'only direct flights')
10
- .option('--cabin <class>', 'cabin class', 'economy')
11
- .option('--max-price <amount>', 'maximum price filter')
12
- .option('--sort <sort>', 'sort: lowest, recommendation', 'lowest')
13
- .option('--limit <n>', 'max destinations', '20')
14
- .action(withClient(async (client, globals, opts) => {
15
- const origins = Array.isArray(opts.from) ? opts.from : [opts.from];
16
- const body = {
17
- passengers: { adt: 1 },
18
- filters: {
19
- locations: {
20
- origins,
21
- },
22
- trip_type: opts.return ? 'roundtrip' : 'oneway',
23
- },
24
- flights_per_destination: 1,
25
- sort: opts.sort,
26
- limit: Number(opts.limit) || 20,
27
- };
28
- // BFF requires dates — use provided date or default to next 12 months.
29
- if (opts.date) {
30
- body['filters']['dates'] = {
31
- departure_dates: [opts.date],
32
- ...(opts.return ? { return_dates: [opts.return] } : {}),
33
- };
34
- }
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', {
48
- body,
49
- });
50
- output(response.data, { format: globals.format });
51
- }));
52
- }
53
- //# sourceMappingURL=destinations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"destinations.js","sourceRoot":"","sources":["../../../src/commands/flights/destinations.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerFindCommand(parent: Command): void;
3
- //# sourceMappingURL=find.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,43 +0,0 @@
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
@@ -1 +0,0 @@
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,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerFlightsCommands(program: Command): void;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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,14 +0,0 @@
1
- import { registerFindCommand } from './find.js';
2
- import { registerSearchCommand } from './search.js';
3
- import { registerDestinationsCommand } from './destinations.js';
4
- import { registerCalendarCommand } from './calendar.js';
5
- export function registerFlightsCommands(program) {
6
- const flights = program
7
- .command('flights')
8
- .description('Search flights, explore destinations, and check prices.');
9
- registerFindCommand(flights);
10
- registerSearchCommand(flights);
11
- registerDestinationsCommand(flights);
12
- registerCalendarCommand(flights);
13
- }
14
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
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,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerSearchCommand(parent: Command): void;
3
- //# sourceMappingURL=search.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,58 +0,0 @@
1
- import { withClient, output } from '../shared.js';
2
- export function registerSearchCommand(parent) {
3
- parent
4
- .command('search')
5
- .description('Search flights or price-check a specific offer.')
6
- .option('--from <origin>', 'origin airport code (e.g. PAR)')
7
- .option('--to <destination>', 'destination airport code (e.g. NYC)')
8
- .option('--date <date>', 'departure date (YYYY-MM-DD)')
9
- .option('--return <date>', 'return date for round-trip (YYYY-MM-DD)')
10
- .option('--passengers <n>', 'number of passengers', '1')
11
- .option('--cabin <class>', 'cabin class: economy, premium_economy, business, first', 'economy')
12
- .option('--direct-only', 'only show direct flights')
13
- .option('--max-price <amount>', 'maximum price filter')
14
- .option('--offer-token <token>', 'price-check a specific offer (live pricing)')
15
- .action(withClient(async (client, globals, opts) => {
16
- const isOfferCheck = Boolean(opts.offerToken);
17
- if (isOfferCheck) {
18
- // Mode B: Price check via devplatform/flights/shop
19
- const response = await client.raw.POST('/api/v1/devplatform/flights/shop', {
20
- body: {
21
- offer_token: opts.offerToken,
22
- passengers: {
23
- adults: Number(opts.passengers) || 1,
24
- },
25
- },
26
- });
27
- output(response.data, { format: globals.format });
28
- }
29
- else {
30
- // Mode A: Search via devplatform/flights/shop
31
- if (!opts.from || !opts.to || !opts.date) {
32
- console.error('Error: --from, --to, and --date are required for search mode.');
33
- console.error(' Or provide --offer-token for price-check mode.');
34
- process.exit(3);
35
- }
36
- const body = {
37
- origin: opts.from,
38
- destination: opts.to,
39
- departure_date: opts.date,
40
- trip_type: opts.return ? 'roundtrip' : 'oneway',
41
- cabin_class: opts.cabin,
42
- direct_only: opts.directOnly ?? false,
43
- passengers: {
44
- adults: Number(opts.passengers) || 1,
45
- },
46
- };
47
- if (opts.return)
48
- body['return_date'] = opts.return;
49
- if (opts.maxPrice)
50
- body['max_price'] = Number(opts.maxPrice);
51
- const response = await client.raw.POST('/api/v1/devplatform/flights/shop', {
52
- body,
53
- });
54
- output(response.data, { format: globals.format });
55
- }
56
- }));
57
- }
58
- //# sourceMappingURL=search.js.map
@@ -1 +0,0 @@
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,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerTravelersCommands(program: Command): void;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/travelers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgHhE"}