@gojinko/api-client 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @gojinko/api-client
2
2
 
3
- Typed API client for the Jinko BFF. 6 methods matching MCP tools 1:1.
3
+ Typed API client for the Jinko BFF. Methods mirror the MCP tools and CLI commands 1:1.
4
4
 
5
5
  ## Install
6
6
 
@@ -13,19 +13,54 @@ npm install @gojinko/api-client
13
13
  ```typescript
14
14
  import { createJinkoClient } from '@gojinko/api-client';
15
15
 
16
+ // Uses credentials from ~/.jinko/config.yaml or JINKO_API_KEY env
17
+ const client = await createJinkoClient();
18
+
19
+ // Or pass an API key directly
16
20
  const client = await createJinkoClient({ apiKey: 'jnk_...' });
17
21
  ```
18
22
 
19
- ## 6 Tools
23
+ ## Authentication
24
+
25
+ The client resolves credentials automatically in this order:
26
+
27
+ 1. `apiKey` option passed to `createJinkoClient()`
28
+ 2. `JINKO_API_KEY` environment variable
29
+ 3. `~/.jinko/config.yaml` — API key or OAuth tokens (managed by `jinko auth login`)
30
+
31
+ OAuth tokens auto-refresh when they expire.
32
+
33
+ ## Methods
34
+
35
+ ### Discovery (cached)
36
+
37
+ | Method | BFF Endpoint |
38
+ |---|---|
39
+ | `client.findFlight()` | `POST /flights/search` |
40
+ | `client.findDestination()` | `POST /flights/destination-search` |
41
+ | `client.flightCalendar()` | `POST /flights/search` |
42
+
43
+ ### Live search & trip building
44
+
45
+ | Method | BFF Endpoint |
46
+ |---|---|
47
+ | `client.flightSearch()` | `POST /flights/shop` |
48
+ | `client.trip()` | `POST /trips` |
49
+
50
+ ### Checkout
20
51
 
21
- | Method | MCP Tool | Mode | BFF Endpoint |
22
- |--------|----------|------|--------------|
23
- | `client.findFlight()` | `find_flight` | Cached | `POST /flights/search` |
24
- | `client.findDestination()` | `find_destination` | Cached | `POST /flights/destination-search` |
25
- | `client.flightCalendar()` | `flight_calendar` | Cached | `POST /flights/search` |
26
- | `client.flightSearch()` | `flight_search` | Live | `POST /flights/shop` |
27
- | `client.trip()` | `trip` | Live | `POST /trips` |
28
- | `client.book()` | `book` | Live | `POST /trips/checkout` |
52
+ | Method | BFF Endpoint |
53
+ |---|---|
54
+ | `client.checkout(tripId)` | `POST /trips/checkout` |
55
+ | `client.selectAncillaries()` | `POST /trips/ancillaries` |
56
+ | `client.getTrip(tripId)` | `GET /trips/:id` |
57
+
58
+ ### Post-booking
59
+
60
+ | Method | BFF Endpoint |
61
+ |---|---|
62
+ | `client.refundCheck()` | `POST /flights/refund-check` |
63
+ | `client.refundCommit()` | `POST /flights/refund-commit` |
29
64
 
30
65
  ## Usage
31
66
 
@@ -42,34 +77,6 @@ const flights = await client.findFlight({
42
77
  sort: 'lowest',
43
78
  limit: 10,
44
79
  });
45
- // → itineraries with offer_token
46
- ```
47
-
48
- ### find_destination — Discover destinations
49
-
50
- ```typescript
51
- const destinations = await client.findDestination({
52
- passengers: { adt: 1 },
53
- filters: {
54
- locations: { origins: ['PAR'] },
55
- trip_type: 'oneway',
56
- },
57
- limit: 20,
58
- });
59
- ```
60
-
61
- ### flight_calendar — Price calendar
62
-
63
- ```typescript
64
- const calendar = await client.flightCalendar({
65
- passengers: { adt: 1 },
66
- filters: {
67
- locations: { origins: ['PAR'], destinations: ['NYC'] },
68
- dates: { departure_date_ranges: [{ start: '2026-06-01', end: '2026-06-30' }] },
69
- trip_type: 'oneway',
70
- },
71
- sort: 'lowest',
72
- });
73
80
  ```
74
81
 
75
82
  ### flight_search — Live search / price-check
@@ -98,52 +105,79 @@ const trip = await client.trip({
98
105
  add_item: { trip_item_token: 'tok_xyz' },
99
106
  upsert_travelers: {
100
107
  travelers: [{
101
- first_name: 'John',
108
+ first_name: 'Jane',
102
109
  last_name: 'Doe',
103
110
  date_of_birth: '1990-01-15',
104
- gender: 'MALE',
111
+ gender: 'FEMALE',
105
112
  passenger_type: 'ADULT',
106
113
  }],
107
- contact: { email: 'john@example.com', phone: '+33612345678' },
114
+ contact: { email: 'jane@example.com', phone: '+33612345678' },
108
115
  },
109
116
  });
110
- // → { trip_id, status, items, travelers, actions_performed }
117
+ // → { trip_id, ... }
111
118
  ```
112
119
 
113
- ### bookCheckout
120
+ ### checkoutSchedule checkout
114
121
 
115
122
  ```typescript
116
- const checkout = await client.book({ trip_id: '42' });
117
- // { checkout_url, session_id, status }
123
+ const checkout = await client.checkout('42');
124
+ // {
125
+ // session_id, checkout_url, expires_at, status,
126
+ // total_amount: { amount, currency },
127
+ // items: [ { item_id, kind, price, pax_count, available_ancillaries, selected_ancillaries } ],
128
+ // }
129
+
130
+ // Send the user to checkout.checkout_url to complete payment.
118
131
  ```
119
132
 
120
- ## Token Flow
133
+ ### selectAncillaries — Add baggage, seats, meals
121
134
 
122
- ```
123
- findFlight / findDestination / flightCalendar → offer_token (cached)
124
- flightSearch (with offer_token) → trip_item_token (live)
125
- trip (with trip_item_token + travelers) → trip_id
126
- book (with trip_id) → checkout_url
135
+ ```typescript
136
+ await client.selectAncillaries({
137
+ trip_id: '42',
138
+ item_id: 'item_1',
139
+ selections: [
140
+ { offer_id: 'offer_bag_checked_1', quantity: 1 },
141
+ { offer_id: 'offer_seat_12A', pax_ref_id: 'pax_1', quantity: 1 },
142
+ ],
143
+ });
127
144
  ```
128
145
 
129
- ## Authentication
146
+ ### getTrip — Full lifecycle state
130
147
 
131
148
  ```typescript
132
- // Pass API key directly
133
- const client = await createJinkoClient({ apiKey: 'jnk_...' });
149
+ const status = await client.getTrip('42');
150
+ // {
151
+ // trip_id, status,
152
+ // travelers, contact, items, total_amount,
153
+ // quote: { quoted_cart_id, status, expires_at },
154
+ // fulfillment: { fulfillment_cart_id, status, phase, scheduled_at },
155
+ // bookings: [ { item_id, booking_reference, pnr, provider_status } ],
156
+ // created_at, updated_at,
157
+ // }
158
+ ```
134
159
 
135
- // Or via environment variable (JINKO_API_KEY=jnk_...)
136
- const client = await createJinkoClient();
160
+ Poll `getTrip()` until `status === 'fulfilled'` (or `'partially_fulfilled'`) to read the PNRs.
137
161
 
138
- // Or via ~/.jinko/config.yaml (api_key: jnk_...)
162
+ ### refundCheck / refundCommit
163
+
164
+ ```typescript
165
+ const eligibility = await client.refundCheck({ booking_reference: 'ref_123', pnr: 'ABC123' });
166
+ const refund = await client.refundCommit({ booking_reference: 'ref_123', pnr: 'ABC123', reason: 'schedule change' });
139
167
  ```
140
168
 
141
- ## Config File
169
+ ## Token Flow
142
170
 
143
- ```yaml
144
- # ~/.jinko/config.yaml
145
- api_key: jnk_your_key
146
171
  ```
172
+ findFlight / findDestination / flightCalendar → offer_token (cached)
173
+ flightSearch (offer_token) → trip_item_token (live)
174
+ trip (trip_item_token + travelers + contact) → trip_id
175
+ checkout (trip_id) → checkout_url + items + ancillaries
176
+ [user pays on checkout_url]
177
+ getTrip (trip_id) → bookings / PNRs
178
+ ```
179
+
180
+ Quote is automatic — it's handled internally by `checkout()`. You don't call it.
147
181
 
148
182
  ## Error Handling
149
183
 
@@ -154,7 +188,7 @@ try {
154
188
  const client = await createJinkoClient();
155
189
  } catch (error) {
156
190
  if (error instanceof AuthError) {
157
- // No credentials configured
191
+ // No credentials configured — run `jinko auth login`
158
192
  }
159
193
  if (error instanceof ApiError) {
160
194
  console.error(error.code, error.message, error.statusCode);
@@ -169,12 +203,22 @@ import type {
169
203
  FlightFindRequest,
170
204
  FlightDestinationSearchRequest,
171
205
  FlightSearchRequest,
172
- FlightSearchLiveRequest,
173
- FlightSearchPriceCheckRequest,
174
206
  TripRequest,
175
207
  CheckoutRequest,
208
+ CheckoutResponse,
209
+ TripQuotedItem,
210
+ AncillaryOffer,
211
+ SelectedAncillary,
212
+ TripStatusResponse,
213
+ QuoteSummary,
214
+ FulfillmentSummary,
215
+ BookingRef,
216
+ SelectAncillariesRequest,
217
+ RefundCheckRequest,
218
+ RefundCommitRequest,
176
219
  Traveler,
177
220
  Contact,
221
+ Money,
178
222
  } from '@gojinko/api-client';
179
223
  ```
180
224
 
@@ -183,7 +227,7 @@ import type {
183
227
  The underlying openapi-fetch client is still accessible:
184
228
 
185
229
  ```typescript
186
- const response = await client.raw.POST('/api/v1/devplatform/flights/shop' as never, {
187
- body: { ... },
230
+ const response = await client.raw.POST('/api/v1/flights/shop' as never, {
231
+ body: { /* ... */ },
188
232
  } as never);
189
233
  ```
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { createJinkoClient, type ClientOptions, type JinkoClient, type JinkoRawC
2
2
  export { type JinkoTools } from './tools.js';
3
3
  export { resolveAuth, readConfigFile, writeConfigFile, clearAuthConfig, CONFIG_DIR, CONFIG_FILE, type AuthMethod, type ResolvedAuth, type OAuthConfig } from './auth.js';
4
4
  export { ApiError, AuthError, ValidationError, type ApiErrorDetail } from './errors.js';
5
- export { requestDeviceAuthorization, pollForToken, refreshAccessToken, isTokenExpired, OAuthError, OAuthRefreshError, type OAuthTokens, type DeviceAuthorization, } from './oauth.js';
5
+ export { requestDeviceAuthorization, pollForToken, refreshAccessToken, isTokenExpired, OAuthError, OAuthRefreshError, resolveExpiresAt, type OAuthTokens, type DeviceAuthorization, } from './oauth.js';
6
6
  export type { paths, components } from './types/generated.js';
7
- export type { FlightPassengers, ShopPassengers, FlightSearchFilters, FlightPriceConstraints, DateRange, FlightFindRequest, FlightDestinationSearchRequest, FlightSearchRequest, FlightSearchLiveRequest, FlightSearchPriceCheckRequest, Traveler, Contact, TripUpsertTravelers, TripRequest, CheckoutRequest, BookRequest, } from './types/devplatform.js';
7
+ export type { FlightPassengers, ShopPassengers, FlightSearchFilters, FlightPriceConstraints, DateRange, Money, FlightFindRequest, FlightDestinationSearchRequest, FlightSearchRequest, FlightSearchLiveRequest, FlightSearchPriceCheckRequest, Traveler, Contact, TripUpsertTravelers, TripRequest, CheckoutRequest, CheckoutResponse, AncillaryOffer, SelectedAncillary, TripQuotedItem, TripStatusResponse, TravelerSummary, ContactInfo, QuoteSummary, FulfillmentSummary, BookingRef, AncillarySelection, SelectAncillariesRequest, RefundCheckRequest, RefundCommitRequest, } from './types/devplatform.js';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3G,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACzK,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,SAAS,EACT,iBAAiB,EACjB,8BAA8B,EAC9B,mBAAmB,EACnB,uBAAuB,EACvB,6BAA6B,EAC7B,QAAQ,EACR,OAAO,EACP,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,WAAW,GACZ,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3G,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACzK,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,SAAS,EACT,KAAK,EACL,iBAAiB,EACjB,8BAA8B,EAC9B,mBAAmB,EACnB,uBAAuB,EACvB,6BAA6B,EAC7B,QAAQ,EACR,OAAO,EACP,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export { createJinkoClient } from './client.js';
2
2
  export { resolveAuth, readConfigFile, writeConfigFile, clearAuthConfig, CONFIG_DIR, CONFIG_FILE } from './auth.js';
3
3
  export { ApiError, AuthError, ValidationError } from './errors.js';
4
- export { requestDeviceAuthorization, pollForToken, refreshAccessToken, isTokenExpired, OAuthError, OAuthRefreshError, } from './oauth.js';
4
+ export { requestDeviceAuthorization, pollForToken, refreshAccessToken, isTokenExpired, OAuthError, OAuthRefreshError, resolveExpiresAt, } from './oauth.js';
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA6D,MAAM,aAAa,CAAC;AAE3G,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAwD,MAAM,WAAW,CAAC;AACzK,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAuB,MAAM,aAAa,CAAC;AACxF,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,iBAAiB,GAGlB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA6D,MAAM,aAAa,CAAC;AAE3G,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAwD,MAAM,WAAW,CAAC;AACzK,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAuB,MAAM,aAAa,CAAC;AACxF,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GAGjB,MAAM,YAAY,CAAC"}
package/dist/oauth.d.ts CHANGED
@@ -38,4 +38,9 @@ export declare function refreshAccessToken(refreshToken: string): Promise<OAuthT
38
38
  * Check if tokens are expired (with buffer).
39
39
  */
40
40
  export declare function isTokenExpired(tokens: OAuthTokens, bufferSeconds?: number): boolean;
41
+ /**
42
+ * Derive expires_at (ms) from the token response.
43
+ * Prefers `expires_in` from the response, falls back to the JWT `exp` claim.
44
+ */
45
+ export declare function resolveExpiresAt(accessToken: string, expiresIn?: number): number;
41
46
  //# sourceMappingURL=oauth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,iBAAkB,SAAQ,UAAU;gBACnC,OAAO,SAAwE;CAI5F;AAED;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAa/E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IACP,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B,GACA,OAAO,CAAC,WAAW,CAAC,CAqDtB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA0BnF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,SAAK,GAAG,OAAO,CAE/E"}
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,iBAAkB,SAAQ,UAAU;gBACnC,OAAO,SAAwE;CAI5F;AAED;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAa/E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IACP,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B,GACA,OAAO,CAAC,WAAW,CAAC,CAqDtB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA0BnF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,SAAK,GAAG,OAAO,CAE/E;AAQD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBhF"}
package/dist/oauth.js CHANGED
@@ -55,7 +55,7 @@ export async function pollForToken(deviceCode, options) {
55
55
  return {
56
56
  access_token: data.access_token,
57
57
  refresh_token: data.refresh_token,
58
- expires_at: Date.now() + data.expires_in * 1000,
58
+ expires_at: resolveExpiresAt(data.access_token, data.expires_in),
59
59
  };
60
60
  }
61
61
  const error = await response.json();
@@ -96,7 +96,7 @@ export async function refreshAccessToken(refreshToken) {
96
96
  return {
97
97
  access_token: data.access_token,
98
98
  refresh_token: data.refresh_token,
99
- expires_at: Date.now() + data.expires_in * 1000,
99
+ expires_at: resolveExpiresAt(data.access_token, data.expires_in),
100
100
  };
101
101
  }
102
102
  /**
@@ -105,6 +105,39 @@ export async function refreshAccessToken(refreshToken) {
105
105
  export function isTokenExpired(tokens, bufferSeconds = 60) {
106
106
  return Date.now() >= tokens.expires_at - bufferSeconds * 1000;
107
107
  }
108
+ /** Maximum token lifetime we trust from a JWT exp claim (24 hours). */
109
+ const MAX_TOKEN_TTL_MS = 24 * 60 * 60 * 1000;
110
+ /** Fallback token lifetime when neither expires_in nor JWT exp is available (5 minutes). */
111
+ const FALLBACK_TOKEN_TTL_MS = 5 * 60 * 1000;
112
+ /**
113
+ * Derive expires_at (ms) from the token response.
114
+ * Prefers `expires_in` from the response, falls back to the JWT `exp` claim.
115
+ */
116
+ export function resolveExpiresAt(accessToken, expiresIn) {
117
+ if (typeof expiresIn === 'number' && expiresIn > 0) {
118
+ return Date.now() + expiresIn * 1000;
119
+ }
120
+ // WorkOS device flow doesn't return expires_in — decode the JWT exp claim.
121
+ try {
122
+ const parts = accessToken.split('.');
123
+ if (parts.length === 3 && parts[1]) {
124
+ const decoded = JSON.parse(Buffer.from(parts[1], 'base64url').toString());
125
+ if (typeof decoded.exp === 'number') {
126
+ const expMs = decoded.exp * 1000;
127
+ const now = Date.now();
128
+ if (expMs > now && expMs <= now + MAX_TOKEN_TTL_MS) {
129
+ return expMs;
130
+ }
131
+ // exp is in the past or unreasonably far in the future — ignore it
132
+ }
133
+ }
134
+ }
135
+ catch {
136
+ // Malformed token — fall through
137
+ }
138
+ // Last resort: assume 5-minute lifetime (WorkOS default for access tokens)
139
+ return Date.now() + FALLBACK_TOKEN_TTL_MS;
140
+ }
108
141
  function sleep(ms) {
109
142
  return new Promise((resolve) => setTimeout(resolve, ms));
110
143
  }
package/dist/oauth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -1,14 +1,18 @@
1
1
  import type { JinkoRawClient } from './client.js';
2
- import type { FlightFindRequest, FlightDestinationSearchRequest, FlightSearchRequest, TripRequest, CheckoutRequest } from './types/devplatform.js';
2
+ import type { FlightFindRequest, FlightDestinationSearchRequest, FlightSearchRequest, TripRequest, CheckoutResponse, TripStatusResponse, SelectAncillariesRequest, RefundCheckRequest, RefundCommitRequest } from './types/devplatform.js';
3
3
  /**
4
- * 6 tool methods matching MCP tool names 1:1.
4
+ * Tool methods matching MCP/CLI tool names.
5
5
  *
6
- * find_flight → findFlight()
7
- * find_destination → findDestination()
8
- * flight_search → flightSearch()
9
- * flight_calendar → flightCalendar()
10
- * trip → trip()
11
- * bookbook()
6
+ * find_flight → findFlight()
7
+ * find_destination → findDestination()
8
+ * flight_search → flightSearch()
9
+ * flight_calendar → flightCalendar()
10
+ * trip → trip()
11
+ * checkoutcheckout()
12
+ * select_ancillaries → selectAncillaries()
13
+ * trip-status → getTrip()
14
+ * refund_check → refundCheck()
15
+ * refund_commit → refundCommit()
12
16
  */
13
17
  export interface JinkoTools {
14
18
  /** find_flight — cached flight search, returns offer_tokens. */
@@ -21,8 +25,16 @@ export interface JinkoTools {
21
25
  readonly flightCalendar: (request: FlightFindRequest) => Promise<unknown>;
22
26
  /** trip — create trip, add flight item, set travelers. Returns trip_id. */
23
27
  readonly trip: (request: TripRequest) => Promise<unknown>;
24
- /** book — checkout a trip, returns checkout_url + session_id. */
25
- readonly book: (request: CheckoutRequest) => Promise<unknown>;
28
+ /** checkoutschedule checkout: returns checkout_url, items, available ancillaries, total. */
29
+ readonly checkout: (tripId: string) => Promise<CheckoutResponse>;
30
+ /** select_ancillaries — select baggage, seats, meals for a trip item. */
31
+ readonly selectAncillaries: (request: SelectAncillariesRequest) => Promise<unknown>;
32
+ /** getTrip — full lifecycle state: cart, quote, fulfillment, bookings. */
33
+ readonly getTrip: (tripId: string) => Promise<TripStatusResponse>;
34
+ /** refund_check — check refund eligibility for a booked flight. */
35
+ readonly refundCheck: (request: RefundCheckRequest) => Promise<unknown>;
36
+ /** refund_commit — initiate a refund for a booked flight. */
37
+ readonly refundCommit: (request: RefundCommitRequest) => Promise<unknown>;
26
38
  }
27
39
  export declare function createTools(raw: JinkoRawClient): JinkoTools;
28
40
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EACV,iBAAiB,EACjB,8BAA8B,EAC9B,mBAAmB,EACnB,WAAW,EACX,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtE,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAExF,4FAA4F;IAC5F,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1E,4FAA4F;IAC5F,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1E,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1D,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,UAAU,CAc3D"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EACV,iBAAiB,EACjB,8BAA8B,EAC9B,mBAAmB,EACnB,WAAW,EAEX,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtE,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAExF,4FAA4F;IAC5F,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1E,4FAA4F;IAC5F,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1E,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1D,+FAA+F;IAC/F,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEjE,yEAAyE;IACzE,QAAQ,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpF,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAElE,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAExE,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,UAAU,CA2B3D"}
package/dist/tools.js CHANGED
@@ -4,12 +4,25 @@ export function createTools(raw) {
4
4
  return response.data;
5
5
  }
6
6
  return {
7
- findFlight: (request) => post('/api/v1/devplatform/flights/search', request),
8
- findDestination: (request) => post('/api/v1/devplatform/flights/destination-search', request),
9
- flightSearch: (request) => post('/api/v1/devplatform/flights/shop', request),
10
- flightCalendar: (request) => post('/api/v1/devplatform/flights/search', request),
11
- trip: (request) => post('/api/v1/devplatform/trips', request),
12
- book: (request) => post('/api/v1/devplatform/trips/checkout', request),
7
+ findFlight: (request) => post('/api/v1/flights/search', request),
8
+ findDestination: (request) => post('/api/v1/flights/destination-search', request),
9
+ flightSearch: (request) => post('/api/v1/flights/shop', request),
10
+ flightCalendar: (request) => post('/api/v1/flights/search', request),
11
+ trip: (request) => post('/api/v1/trips', request),
12
+ checkout: async (tripId) => {
13
+ const body = { trip_id: tripId };
14
+ const data = await post('/api/v1/trips/checkout', body);
15
+ return data;
16
+ },
17
+ selectAncillaries: (request) => post('/api/v1/trips/ancillaries', request),
18
+ getTrip: async (tripId) => {
19
+ const response = await raw.GET('/api/v1/trips/{id}', {
20
+ params: { path: { id: tripId } },
21
+ });
22
+ return response.data;
23
+ },
24
+ refundCheck: (request) => post('/api/v1/flights/refund-check', request),
25
+ refundCommit: (request) => post('/api/v1/flights/refund-commit', request),
13
26
  };
14
27
  }
15
28
  //# sourceMappingURL=tools.js.map
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAuCA,MAAM,UAAU,WAAW,CAAC,GAAmB;IAC7C,KAAK,UAAU,IAAI,CAAC,IAAY,EAAE,IAAa;QAC7C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAa,EAAE,EAAE,IAAI,EAAW,CAAC,CAAC;QAClE,OAAQ,QAA+B,CAAC,IAAI,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,oCAAoC,EAAE,OAAO,CAAC;QAC5E,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,gDAAgD,EAAE,OAAO,CAAC;QAC7F,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kCAAkC,EAAE,OAAO,CAAC;QAC5E,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,oCAAoC,EAAE,OAAO,CAAC;QAChF,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC;QAC7D,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,oCAAoC,EAAE,OAAO,CAAC;KACvE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AA4DA,MAAM,UAAU,WAAW,CAAC,GAAmB;IAC7C,KAAK,UAAU,IAAI,CAAC,IAAY,EAAE,IAAa;QAC7C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAa,EAAE,EAAE,IAAI,EAAW,CAAC,CAAC;QAClE,OAAQ,QAA+B,CAAC,IAAI,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC;QAChE,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,oCAAoC,EAAE,OAAO,CAAC;QACjF,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,OAAO,CAAC;QAChE,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC;QACpE,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;QACjD,QAAQ,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;YACjC,MAAM,IAAI,GAAoB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;YACxD,OAAO,IAAwB,CAAC;QAClC,CAAC;QACD,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC;QAC1E,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;YAChC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,oBAA6B,EAAE;gBAC5D,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;aACxB,CAAC,CAAC;YACZ,OAAQ,QAA0C,CAAC,IAA0B,CAAC;QAChF,CAAC;QACD,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,8BAA8B,EAAE,OAAO,CAAC;QACvE,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,OAAO,CAAC;KAC1E,CAAC;AACJ,CAAC"}
@@ -2,12 +2,14 @@
2
2
  * Request/response types for the devplatform API.
3
3
  *
4
4
  * Naming convention matches MCP tools:
5
- * find_flight → FlightFindRequest (cached, /flights/search)
6
- * find_destination → FlightDestinationSearchRequest (cached, /flights/destination-search)
7
- * flight_search → FlightSearchRequest (live, /flights/shop)
8
- * flight_calendar → FlightFindRequest (cached, /flights/search with date range)
9
- * trip → TripRequest (live, /trips)
10
- * book → CheckoutRequest (live, /trips/checkout)
5
+ * find_flight → FlightFindRequest (cached, /flights/search)
6
+ * find_destination → FlightDestinationSearchRequest (cached, /flights/destination-search)
7
+ * flight_search → FlightSearchRequest (live, /flights/shop)
8
+ * flight_calendar → FlightFindRequest (cached, /flights/search w/ range)
9
+ * trip → TripRequest (live, /trips)
10
+ * checkout → CheckoutRequest / CheckoutResponse (live, /trips/checkout)
11
+ * trip-status → TripStatusResponse (live, GET /trips/:id)
12
+ * select_ancillaries → SelectAncillariesRequest (live, /trips/ancillaries)
11
13
  */
12
14
  /** Passenger counts using GDS-style shortcodes (adt/chd/inf). Used by cached endpoints. */
13
15
  export interface FlightPassengers {
@@ -34,6 +36,10 @@ export interface StayDaysRange {
34
36
  readonly min: number;
35
37
  readonly max: number;
36
38
  }
39
+ export interface Money {
40
+ readonly amount: number;
41
+ readonly currency: string;
42
+ }
37
43
  export interface FlightSearchFilters {
38
44
  readonly locations: {
39
45
  readonly origins: readonly string[];
@@ -77,7 +83,9 @@ export interface FlightDestinationSearchRequest {
77
83
  }
78
84
  export interface FlightSearchLiveRequest {
79
85
  readonly origin: string;
86
+ readonly origin_type?: 'city' | 'airport';
80
87
  readonly destination: string;
88
+ readonly destination_type?: 'city' | 'airport';
81
89
  readonly departure_date: string;
82
90
  readonly return_date?: string;
83
91
  readonly trip_type?: string;
@@ -124,10 +132,102 @@ export interface TripRequest {
124
132
  export interface CheckoutRequest {
125
133
  readonly trip_id: string;
126
134
  }
127
- export interface BookRequest {
128
- readonly trip_id?: string;
129
- readonly trip_item_token?: string;
130
- readonly travelers?: readonly Traveler[];
131
- readonly contact?: Contact;
135
+ export interface AncillaryOffer {
136
+ readonly offer_id: string;
137
+ readonly type: 'bag' | 'seat' | 'meal' | 'assistance' | string;
138
+ readonly label: string;
139
+ readonly description?: string;
140
+ readonly price_per_unit: Money;
141
+ readonly per_pax: boolean;
142
+ readonly max_quantity?: number;
143
+ }
144
+ export interface SelectedAncillary {
145
+ readonly offer_id: string;
146
+ readonly pax_ref_id?: string;
147
+ readonly quantity: number;
148
+ }
149
+ export interface TripQuotedItem {
150
+ readonly item_id: string;
151
+ readonly kind: 'flight' | 'hotel';
152
+ readonly price: Money;
153
+ readonly pax_count: number;
154
+ readonly available_ancillaries: readonly AncillaryOffer[];
155
+ readonly selected_ancillaries: readonly SelectedAncillary[];
156
+ }
157
+ export interface CheckoutResponse {
158
+ readonly session_id: string;
159
+ readonly checkout_url: string;
160
+ readonly expires_at?: string;
161
+ /** "ready" | "pending" | "failed" */
162
+ readonly status: string;
163
+ readonly total_amount?: Money;
164
+ readonly items: readonly TripQuotedItem[];
165
+ }
166
+ export interface TravelerSummary {
167
+ readonly pax_ref_id?: string;
168
+ readonly first_name?: string;
169
+ readonly last_name?: string;
170
+ readonly passenger_type?: string;
171
+ }
172
+ export interface ContactInfo {
173
+ readonly email?: string;
174
+ readonly phone?: string;
175
+ }
176
+ export interface QuoteSummary {
177
+ readonly quoted_cart_id: number;
178
+ /** 'pending' | 'in_progress' | 'partial' | 'completed' | 'failed' | 'expired' */
179
+ readonly status: string;
180
+ readonly expires_at?: string;
181
+ }
182
+ export interface FulfillmentSummary {
183
+ readonly fulfillment_cart_id: number;
184
+ /** 'pending' | 'awaiting_payment' | 'preparing' | 'prepared' | 'processing' | 'confirming' | 'completed' | 'partial' | 'failed' | 'cancelled' */
185
+ readonly status: string;
186
+ readonly phase?: string;
187
+ readonly scheduled_at?: string;
188
+ }
189
+ export interface BookingRef {
190
+ readonly item_id: string;
191
+ readonly kind: string;
192
+ readonly booking_reference: string;
193
+ readonly pnr?: string;
194
+ readonly provider_status?: string;
195
+ }
196
+ export interface TripStatusResponse {
197
+ readonly trip_id: string;
198
+ /** CartStatus: draft | quoting | quoted | fulfillment_prepared | fulfilling | fulfilled | partially_fulfilled | failed | cancelled */
199
+ readonly status: string;
200
+ readonly travelers: readonly TravelerSummary[];
201
+ readonly contact?: ContactInfo;
202
+ readonly items: readonly TripQuotedItem[];
203
+ readonly total_amount?: Money;
204
+ readonly quote?: QuoteSummary;
205
+ readonly fulfillment?: FulfillmentSummary;
206
+ readonly bookings?: readonly BookingRef[];
207
+ readonly created_at: string;
208
+ readonly updated_at: string;
209
+ }
210
+ export interface AncillarySelection {
211
+ readonly offer_id: string;
212
+ readonly category?: string;
213
+ readonly pax_ref_id?: string;
214
+ readonly segment_ref_ids?: readonly string[];
215
+ readonly journey_ref_id?: string;
216
+ readonly quantity?: number;
217
+ readonly provider_metadata?: Record<string, string>;
218
+ }
219
+ export interface SelectAncillariesRequest {
220
+ readonly trip_id: string;
221
+ readonly item_id: string;
222
+ readonly selections: readonly AncillarySelection[];
223
+ }
224
+ export interface RefundCheckRequest {
225
+ readonly booking_reference: string;
226
+ readonly pnr: string;
227
+ }
228
+ export interface RefundCommitRequest {
229
+ readonly booking_reference: string;
230
+ readonly pnr: string;
231
+ readonly reason?: string;
132
232
  }
133
233
  //# sourceMappingURL=devplatform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"devplatform.d.ts","sourceRoot":"","sources":["../../src/types/devplatform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devplatform.d.ts","sourceRoot":"","sources":["../../src/types/devplatform.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,14 @@
2
2
  * Request/response types for the devplatform API.
3
3
  *
4
4
  * Naming convention matches MCP tools:
5
- * find_flight → FlightFindRequest (cached, /flights/search)
6
- * find_destination → FlightDestinationSearchRequest (cached, /flights/destination-search)
7
- * flight_search → FlightSearchRequest (live, /flights/shop)
8
- * flight_calendar → FlightFindRequest (cached, /flights/search with date range)
9
- * trip → TripRequest (live, /trips)
10
- * book → CheckoutRequest (live, /trips/checkout)
5
+ * find_flight → FlightFindRequest (cached, /flights/search)
6
+ * find_destination → FlightDestinationSearchRequest (cached, /flights/destination-search)
7
+ * flight_search → FlightSearchRequest (live, /flights/shop)
8
+ * flight_calendar → FlightFindRequest (cached, /flights/search w/ range)
9
+ * trip → TripRequest (live, /trips)
10
+ * checkout → CheckoutRequest / CheckoutResponse (live, /trips/checkout)
11
+ * trip-status → TripStatusResponse (live, GET /trips/:id)
12
+ * select_ancillaries → SelectAncillariesRequest (live, /trips/ancillaries)
11
13
  */
12
14
  export {};
13
15
  //# sourceMappingURL=devplatform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"devplatform.js","sourceRoot":"","sources":["../../src/types/devplatform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
1
+ {"version":3,"file":"devplatform.js","sourceRoot":"","sources":["../../src/types/devplatform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gojinko/api-client",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -10,6 +10,14 @@
10
10
  "import": "./dist/index.js"
11
11
  }
12
12
  },
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch",
16
+ "generate:api-types": "swagger2openapi bff-swagger.yaml --patch -o bff-openapi3.yaml && openapi-typescript bff-openapi3.yaml -o src/types/generated.ts",
17
+ "test": "vitest run",
18
+ "test:watch": "vitest",
19
+ "lint": "tsc --noEmit"
20
+ },
13
21
  "dependencies": {
14
22
  "openapi-fetch": "^0.14.1",
15
23
  "yaml": "^2.7.0"
@@ -27,13 +35,5 @@
27
35
  "swagger2openapi": "^7.0.8",
28
36
  "typescript": "^5.6.3",
29
37
  "vitest": "^2.1.0"
30
- },
31
- "scripts": {
32
- "build": "tsc",
33
- "dev": "tsc --watch",
34
- "generate:api-types": "swagger2openapi bff-swagger.yaml --patch -o bff-openapi3.yaml && openapi-typescript bff-openapi3.yaml -o src/types/generated.ts",
35
- "test": "vitest run",
36
- "test:watch": "vitest",
37
- "lint": "tsc --noEmit"
38
38
  }
39
- }
39
+ }
@@ -1,18 +0,0 @@
1
- export interface CallbackResult {
2
- readonly code: string;
3
- readonly state: string;
4
- }
5
- export interface CallbackServer {
6
- readonly port: number;
7
- readonly result: Promise<CallbackResult>;
8
- readonly close: () => void;
9
- }
10
- /**
11
- * Start a local HTTP server on a random port to receive the OAuth callback.
12
- * Returns after the server is listening and the port is known.
13
- */
14
- export declare function startCallbackServer(options: {
15
- readonly expectedState: string;
16
- readonly timeoutMs?: number;
17
- }): Promise<CallbackServer>;
18
- //# sourceMappingURL=callback-server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"callback-server.d.ts","sourceRoot":"","sources":["../src/callback-server.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;CAC5B;AAsBD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IACjD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC,cAAc,CAAC,CAuE1B"}
@@ -1,85 +0,0 @@
1
- import { createServer } from 'node:http';
2
- import { OAuthError } from './oauth.js';
3
- const SUCCESS_HTML = `<!DOCTYPE html>
4
- <html><head><title>Jinko CLI</title><style>
5
- body { font-family: -apple-system, system-ui, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #f8f9fa; }
6
- .card { text-align: center; padding: 2rem 3rem; background: white; border-radius: 12px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
7
- h1 { color: #1a1a1a; margin-bottom: 0.5rem; }
8
- p { color: #666; }
9
- </style></head><body>
10
- <div class="card"><h1>Authenticated</h1><p>You can close this tab and return to the terminal.</p></div>
11
- </body></html>`;
12
- const ERROR_HTML = `<!DOCTYPE html>
13
- <html><head><title>Jinko CLI — Error</title><style>
14
- body { font-family: -apple-system, system-ui, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #f8f9fa; }
15
- .card { text-align: center; padding: 2rem 3rem; background: white; border-radius: 12px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
16
- h1 { color: #c0392b; margin-bottom: 0.5rem; }
17
- p { color: #666; }
18
- </style></head><body>
19
- <div class="card"><h1>Authentication Failed</h1><p>Please try again from the terminal.</p></div>
20
- </body></html>`;
21
- /**
22
- * Start a local HTTP server on a random port to receive the OAuth callback.
23
- * Returns after the server is listening and the port is known.
24
- */
25
- export async function startCallbackServer(options) {
26
- const { expectedState, timeoutMs = 120_000 } = options;
27
- const server = createServer();
28
- let timeoutHandle;
29
- const result = new Promise((resolve, reject) => {
30
- server.on('request', (req, res) => {
31
- const url = new URL(req.url ?? '/', `http://localhost`);
32
- if (url.pathname !== '/callback') {
33
- res.writeHead(404);
34
- res.end('Not found');
35
- return;
36
- }
37
- const code = url.searchParams.get('code');
38
- const state = url.searchParams.get('state');
39
- const error = url.searchParams.get('error');
40
- if (error) {
41
- res.writeHead(200, { 'Content-Type': 'text/html' });
42
- res.end(ERROR_HTML);
43
- reject(new OAuthError(`OAuth error: ${error}`));
44
- return;
45
- }
46
- if (!code || !state) {
47
- res.writeHead(400, { 'Content-Type': 'text/html' });
48
- res.end(ERROR_HTML);
49
- reject(new OAuthError('Missing code or state in callback'));
50
- return;
51
- }
52
- if (state !== expectedState) {
53
- res.writeHead(400, { 'Content-Type': 'text/html' });
54
- res.end(ERROR_HTML);
55
- reject(new OAuthError('State mismatch — possible CSRF attack'));
56
- return;
57
- }
58
- res.writeHead(200, { 'Content-Type': 'text/html' });
59
- res.end(SUCCESS_HTML);
60
- resolve({ code, state });
61
- });
62
- timeoutHandle = setTimeout(() => {
63
- reject(new OAuthError(`OAuth callback timed out after ${timeoutMs / 1000}s`));
64
- server.close();
65
- }, timeoutMs);
66
- }).finally(() => {
67
- clearTimeout(timeoutHandle);
68
- server.close();
69
- });
70
- // Wait for server to start listening so port is assigned
71
- await new Promise((resolve) => {
72
- server.listen(0, () => resolve());
73
- });
74
- const address = server.address();
75
- const port = typeof address === 'object' && address ? address.port : 0;
76
- return {
77
- port,
78
- result,
79
- close: () => {
80
- clearTimeout(timeoutHandle);
81
- server.close();
82
- },
83
- };
84
- }
85
- //# sourceMappingURL=callback-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"callback-server.js","sourceRoot":"","sources":["../src/callback-server.ts"],"names":[],"mappings":"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"}
package/dist/flights.d.ts DELETED
@@ -1,14 +0,0 @@
1
- import type { JinkoRawClient } from './client.js';
2
- import type { FlightFindRequest, FlightDestinationSearchRequest, FlightSearchRequest } from './types/devplatform.js';
3
- export interface FlightsApi {
4
- /** find_flight — cached flight search, returns offer_tokens. */
5
- readonly find: (request: FlightFindRequest) => Promise<unknown>;
6
- /** find_destination — discover destinations from origin airports (cached). */
7
- readonly destinations: (request: FlightDestinationSearchRequest) => Promise<unknown>;
8
- /** flight_search — live search or price-check a specific offer. Returns trip_item_token. */
9
- readonly search: (request: FlightSearchRequest) => Promise<unknown>;
10
- /** flight_calendar — cheapest prices across a date range (cached, uses /flights/search). */
11
- readonly calendar: (request: FlightFindRequest) => Promise<unknown>;
12
- }
13
- export declare function createFlightsApi(raw: JinkoRawClient): FlightsApi;
14
- //# sourceMappingURL=flights.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flights.d.ts","sourceRoot":"","sources":["../src/flights.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EACV,iBAAiB,EACjB,8BAA8B,EAC9B,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhE,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAErF,4FAA4F;IAC5F,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpE,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACrE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,UAAU,CA8BhE"}
package/dist/flights.js DELETED
@@ -1,29 +0,0 @@
1
- export function createFlightsApi(raw) {
2
- return {
3
- async find(request) {
4
- const response = await raw.POST('/api/v1/devplatform/flights/search', {
5
- body: request,
6
- });
7
- return response.data;
8
- },
9
- async destinations(request) {
10
- const response = await raw.POST('/api/v1/devplatform/flights/destination-search', {
11
- body: request,
12
- });
13
- return response.data;
14
- },
15
- async search(request) {
16
- const response = await raw.POST('/api/v1/devplatform/flights/shop', {
17
- body: request,
18
- });
19
- return response.data;
20
- },
21
- async calendar(request) {
22
- const response = await raw.POST('/api/v1/devplatform/flights/search', {
23
- body: request,
24
- });
25
- return response.data;
26
- },
27
- };
28
- }
29
- //# sourceMappingURL=flights.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flights.js","sourceRoot":"","sources":["../src/flights.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,gBAAgB,CAAC,GAAmB;IAClD,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,OAAO;YAChB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,oCAA6C,EAAE;gBAC7E,IAAI,EAAE,OAAO;aACL,CAAC,CAAC;YACZ,OAAQ,QAA+B,CAAC,IAAI,CAAC;QAC/C,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,OAAO;YACxB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,gDAAyD,EAAE;gBACzF,IAAI,EAAE,OAAO;aACL,CAAC,CAAC;YACZ,OAAQ,QAA+B,CAAC,IAAI,CAAC;QAC/C,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,OAAO;YAClB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,kCAA2C,EAAE;gBAC3E,IAAI,EAAE,OAAO;aACL,CAAC,CAAC;YACZ,OAAQ,QAA+B,CAAC,IAAI,CAAC;QAC/C,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,OAAO;YACpB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,oCAA6C,EAAE;gBAC7E,IAAI,EAAE,OAAO;aACL,CAAC,CAAC;YACZ,OAAQ,QAA+B,CAAC,IAAI,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/trips.d.ts DELETED
@@ -1,18 +0,0 @@
1
- import type { JinkoRawClient } from './client.js';
2
- import type { TripUpsertTravelers, CheckoutRequest, BookRequest } from './types/devplatform.js';
3
- export interface TripsApi {
4
- /** Create an empty trip (shopping cart). */
5
- readonly create: () => Promise<unknown>;
6
- /** Get trip details by ID. */
7
- readonly show: (tripId: string) => Promise<unknown>;
8
- /** Add a flight to a trip using a trip_item_token. */
9
- readonly addFlight: (tripItemToken: string, tripId?: string) => Promise<unknown>;
10
- /** Set travelers (and optional contact) on a trip. */
11
- readonly setTravelers: (tripId: string, upsertTravelers: TripUpsertTravelers) => Promise<unknown>;
12
- /** Checkout a trip — handles quoting and returns a checkout URL. */
13
- readonly checkout: (request: CheckoutRequest) => Promise<unknown>;
14
- /** One-shot booking: create trip + add flight + set travelers + checkout. */
15
- readonly book: (request: BookRequest) => Promise<unknown>;
16
- }
17
- export declare function createTripsApi(raw: JinkoRawClient): TripsApi;
18
- //# sourceMappingURL=trips.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trips.d.ts","sourceRoot":"","sources":["../src/trips.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAEV,mBAAmB,EACnB,eAAe,EACf,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,QAAQ;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAExC,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpD,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjF,sDAAsD;IACtD,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,mBAAmB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAElG,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAElE,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,QAAQ,CA2E5D"}
package/dist/trips.js DELETED
@@ -1,65 +0,0 @@
1
- export function createTripsApi(raw) {
2
- async function postTrip(body) {
3
- const response = await raw.POST('/api/v1/devplatform/trips', {
4
- body,
5
- });
6
- return response.data;
7
- }
8
- async function postCheckout(body) {
9
- const response = await raw.POST('/api/v1/devplatform/trips/checkout', {
10
- body,
11
- });
12
- return response.data;
13
- }
14
- return {
15
- async create() {
16
- return postTrip({});
17
- },
18
- async show(tripId) {
19
- return postTrip({ trip_id: tripId });
20
- },
21
- async addFlight(tripItemToken, tripId) {
22
- return postTrip({
23
- ...(tripId ? { trip_id: tripId } : {}),
24
- add_item: { trip_item_token: tripItemToken },
25
- });
26
- },
27
- async setTravelers(tripId, upsertTravelers) {
28
- return postTrip({
29
- trip_id: tripId,
30
- upsert_travelers: upsertTravelers,
31
- });
32
- },
33
- async checkout(request) {
34
- return postCheckout(request);
35
- },
36
- async book(request) {
37
- const { trip_item_token, travelers, contact } = request;
38
- let tripId = request.trip_id;
39
- // Step 1: Create trip with flight + travelers if trip_item_token provided.
40
- if (trip_item_token) {
41
- const tripBody = {
42
- ...(tripId ? { trip_id: tripId } : {}),
43
- add_item: { trip_item_token },
44
- ...(travelers || contact ? {
45
- upsert_travelers: {
46
- travelers: travelers ?? [],
47
- ...(contact ? { contact } : {}),
48
- },
49
- } : {}),
50
- };
51
- const tripData = await postTrip(tripBody);
52
- tripId = tripData?.['trip_id'];
53
- if (!tripId) {
54
- throw new Error('Failed to create trip — no trip_id returned.');
55
- }
56
- }
57
- if (!tripId) {
58
- throw new Error('Either trip_id or trip_item_token is required.');
59
- }
60
- // Step 2: Checkout.
61
- return postCheckout({ trip_id: tripId });
62
- },
63
- };
64
- }
65
- //# sourceMappingURL=trips.js.map
package/dist/trips.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"trips.js","sourceRoot":"","sources":["../src/trips.ts"],"names":[],"mappings":"AA4BA,MAAM,UAAU,cAAc,CAAC,GAAmB;IAChD,KAAK,UAAU,QAAQ,CAAC,IAAiB;QACvC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,2BAAoC,EAAE;YACpE,IAAI;SACI,CAAC,CAAC;QACZ,OAAQ,QAA+B,CAAC,IAAI,CAAC;IAC/C,CAAC;IAED,KAAK,UAAU,YAAY,CAAC,IAAqB;QAC/C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,oCAA6C,EAAE;YAC7E,IAAI;SACI,CAAC,CAAC;QACZ,OAAQ,QAA+B,CAAC,IAAI,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,KAAK,CAAC,MAAM;YACV,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,MAAM;YACf,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM;YACnC,OAAO,QAAQ,CAAC;gBACd,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,QAAQ,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE;aAC7C,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,eAAe;YACxC,OAAO,QAAQ,CAAC;gBACd,OAAO,EAAE,MAAM;gBACf,gBAAgB,EAAE,eAAe;aAClC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,OAAO;YACpB,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAAO;YAChB,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;YACxD,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAE7B,2EAA2E;YAC3E,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAgB;oBAC5B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtC,QAAQ,EAAE,EAAE,eAAe,EAAE;oBAC7B,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC;wBACzB,gBAAgB,EAAE;4BAChB,SAAS,EAAE,SAAS,IAAI,EAAE;4BAC1B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBAChC;qBACF,CAAC,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAwC,CAAC;gBACjF,MAAM,GAAG,QAAQ,EAAE,CAAC,SAAS,CAAW,CAAC;gBAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,CAAC;YAED,oBAAoB;YACpB,OAAO,YAAY,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC;AACJ,CAAC"}