@gojinko/api-client 0.2.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.
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. 12 methods matching MCP tools 1:1.
4
4
 
5
5
  ## Install
6
6
 
@@ -13,19 +13,71 @@ 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
30
+
31
+ OAuth tokens are set up via the CLI (`jinko auth login`) and refreshed automatically when they expire.
32
+
33
+ ### Config file
34
+
35
+ ```yaml
36
+ # ~/.jinko/config.yaml
37
+
38
+ # API key auth
39
+ api_key: jnk_your_key
40
+
41
+ # OR OAuth auth (managed by `jinko auth login`, don't edit manually)
42
+ oauth:
43
+ access_token: eyJhbGci...
44
+ refresh_token: re_abc...
45
+ expires_at: 1711036800000
46
+ ```
47
+
48
+ ## 12 Methods
20
49
 
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` |
50
+ ### Discovery (cached)
51
+
52
+ | Method | MCP Tool | BFF Endpoint |
53
+ |--------|----------|--------------|
54
+ | `client.findFlight()` | `find_flight` | `POST /flights/search` |
55
+ | `client.findDestination()` | `find_destination` | `POST /flights/destination-search` |
56
+ | `client.flightCalendar()` | `flight_calendar` | `POST /flights/search` |
57
+
58
+ ### Search & Trip (live)
59
+
60
+ | Method | MCP Tool | BFF Endpoint |
61
+ |--------|----------|--------------|
62
+ | `client.flightSearch()` | `flight_search` | `POST /flights/shop` |
63
+ | `client.trip()` | `trip` | `POST /trips` |
64
+
65
+ ### Booking — Cart V2 (live)
66
+
67
+ | Method | MCP Tool | BFF Endpoint |
68
+ |--------|----------|--------------|
69
+ | `client.quote()` | `book` (quote) | `POST /trips/checkout` |
70
+ | `client.selectAncillaries()` | `trip` (ancillaries) | `POST /trips/ancillaries` |
71
+ | `client.scheduleFulfillment()` | `book` (fulfillment) | `POST /trips/fulfillment` |
72
+ | `client.confirmPayment()` | `book` (confirm) | `POST /trips/confirm-payment` |
73
+ | `client.book()` | `book` | `POST /trips/checkout` |
74
+
75
+ ### Post-Booking (live)
76
+
77
+ | Method | MCP Tool | BFF Endpoint |
78
+ |--------|----------|--------------|
79
+ | `client.refundCheck()` | — | `POST /flights/refund-check` |
80
+ | `client.refundCommit()` | — | `POST /flights/refund-commit` |
29
81
 
30
82
  ## Usage
31
83
 
@@ -75,7 +127,7 @@ const calendar = await client.flightCalendar({
75
127
  ### flight_search — Live search / price-check
76
128
 
77
129
  ```typescript
78
- // Search mode
130
+ // Search mode (city codes — default)
79
131
  const results = await client.flightSearch({
80
132
  origin: 'PAR',
81
133
  destination: 'NYC',
@@ -84,6 +136,17 @@ const results = await client.flightSearch({
84
136
  passengers: { adults: 1 },
85
137
  });
86
138
 
139
+ // Search mode (airport codes)
140
+ const results = await client.flightSearch({
141
+ origin: 'CDG',
142
+ origin_type: 'airport',
143
+ destination: 'JFK',
144
+ destination_type: 'airport',
145
+ departure_date: '2026-06-15',
146
+ trip_type: 'oneway',
147
+ passengers: { adults: 1 },
148
+ });
149
+
87
150
  // Price-check mode (returns trip_item_token)
88
151
  const fares = await client.flightSearch({
89
152
  offer_token: 'tok_abc123',
@@ -110,41 +173,83 @@ const trip = await client.trip({
110
173
  // → { trip_id, status, items, travelers, actions_performed }
111
174
  ```
112
175
 
113
- ### bookCheckout
176
+ ### quoteGet quote with ancillary options
114
177
 
115
178
  ```typescript
116
- const checkout = await client.book({ trip_id: '42' });
117
- // → { checkout_url, session_id, status }
179
+ const quote = await client.quote({ trip_id: '42' });
180
+ // → { items, available_ancillaries, pricing }
118
181
  ```
119
182
 
120
- ## Token Flow
183
+ ### selectAncillaries — Add baggage, seats, meals
121
184
 
185
+ ```typescript
186
+ const updated = await client.selectAncillaries({
187
+ trip_id: '42',
188
+ item_id: 'item_1',
189
+ select: ['offer_id_1', 'offer_id_2'],
190
+ pax: 'pax_ref', // optional, for per-pax ancillaries
191
+ quantity: 2, // optional, default 1
192
+ });
122
193
  ```
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
194
+
195
+ ### scheduleFulfillment Create Stripe payment
196
+
197
+ ```typescript
198
+ const checkout = await client.scheduleFulfillment({ trip_id: '42' });
199
+ // → { checkout_url, session_id }
127
200
  ```
128
201
 
129
- ## Authentication
202
+ ### confirmPayment — Verify Stripe payment after checkout
130
203
 
131
204
  ```typescript
132
- // Pass API key directly
133
- const client = await createJinkoClient({ apiKey: 'jnk_...' });
205
+ const confirmation = await client.confirmPayment({
206
+ trip_id: '42',
207
+ checkout_session: 'cs_xxx',
208
+ });
209
+ // → booking confirmation
210
+ ```
134
211
 
135
- // Or via environment variable (JINKO_API_KEY=jnk_...)
136
- const client = await createJinkoClient();
212
+ ### book Legacy shortcut (quote + checkout in one step)
137
213
 
138
- // Or via ~/.jinko/config.yaml (api_key: jnk_...)
214
+ ```typescript
215
+ const checkout = await client.book({ trip_id: '42' });
216
+ // → { checkout_url, session_id, status }
139
217
  ```
140
218
 
141
- ## Config File
219
+ ### refundCheck — Check refund eligibility
142
220
 
143
- ```yaml
144
- # ~/.jinko/config.yaml
145
- api_key: jnk_your_key
221
+ ```typescript
222
+ const eligibility = await client.refundCheck({
223
+ booking_ref: 'ref_123',
224
+ pnr: 'ABC123',
225
+ });
146
226
  ```
147
227
 
228
+ ### refundCommit — Initiate a refund
229
+
230
+ ```typescript
231
+ const refund = await client.refundCommit({
232
+ booking_ref: 'ref_123',
233
+ pnr: 'ABC123',
234
+ reason: 'schedule change',
235
+ });
236
+ ```
237
+
238
+ ## Token Flow (Cart V2)
239
+
240
+ ```
241
+ findFlight / findDestination / flightCalendar → offer_token (cached)
242
+ flightSearch (with offer_token) → trip_item_token (live)
243
+ trip (with trip_item_token + travelers) → trip_id
244
+ quote (with trip_id) → items + ancillary offers
245
+ selectAncillaries (optional) → updated pricing
246
+ scheduleFulfillment (with trip_id) → checkout_url
247
+ [customer pays via Stripe]
248
+ confirmPayment (with session_id) → booking_reference
249
+ ```
250
+
251
+ > **Legacy shortcut**: `client.book({ trip_id })` combines quote + checkout in one step (skips ancillary selection).
252
+
148
253
  ## Error Handling
149
254
 
150
255
  ```typescript
@@ -154,7 +259,7 @@ try {
154
259
  const client = await createJinkoClient();
155
260
  } catch (error) {
156
261
  if (error instanceof AuthError) {
157
- // No credentials configured
262
+ // No credentials configured — run `jinko auth login`
158
263
  }
159
264
  if (error instanceof ApiError) {
160
265
  console.error(error.code, error.message, error.statusCode);
@@ -173,6 +278,12 @@ import type {
173
278
  FlightSearchPriceCheckRequest,
174
279
  TripRequest,
175
280
  CheckoutRequest,
281
+ QuoteRequest,
282
+ SelectAncillariesRequest,
283
+ ScheduleFulfillmentRequest,
284
+ ConfirmPaymentRequest,
285
+ RefundCheckRequest,
286
+ RefundCommitRequest,
176
287
  Traveler,
177
288
  Contact,
178
289
  } from '@gojinko/api-client';
@@ -183,7 +294,7 @@ import type {
183
294
  The underlying openapi-fetch client is still accessible:
184
295
 
185
296
  ```typescript
186
- const response = await client.raw.POST('/api/v1/devplatform/flights/shop' as never, {
297
+ const response = await client.raw.POST('/api/v1/flights/shop' as never, {
187
298
  body: { ... },
188
299
  } as never);
189
300
  ```
package/dist/auth.d.ts CHANGED
@@ -3,18 +3,22 @@ export interface ResolvedAuth {
3
3
  readonly method: AuthMethod;
4
4
  readonly token: string;
5
5
  }
6
+ export interface OAuthConfig {
7
+ readonly access_token: string;
8
+ readonly refresh_token: string;
9
+ readonly expires_at: number;
10
+ }
6
11
  interface ConfigFile {
7
12
  readonly api_key?: string;
8
- readonly oauth_token?: string;
13
+ readonly oauth?: OAuthConfig;
9
14
  }
10
15
  declare const DEFAULT_BASE_URL = "https://mcp-bff.gojinko.com";
11
16
  declare const CONFIG_DIR: string;
12
17
  declare const CONFIG_FILE: string;
13
18
  /**
14
- * Resolve auth credentials with precedence: param > env > config file.
19
+ * Resolve auth credentials with precedence: param > env > config file (api_key) > config file (oauth).
15
20
  *
16
- * Currently only API key auth (jnk_...) is supported.
17
- * OAuth JWT support exists internally but is not exposed to users yet.
21
+ * OAuth tokens are auto-refreshed if expired.
18
22
  */
19
23
  export declare function resolveAuth(paramToken?: string): Promise<ResolvedAuth | undefined>;
20
24
  /**
@@ -29,5 +33,9 @@ export declare function readConfigFile(): Promise<ConfigFile | undefined>;
29
33
  * Write a config value to ~/.jinko/config.yaml.
30
34
  */
31
35
  export declare function writeConfigFile(updates: Partial<ConfigFile>): Promise<void>;
36
+ /**
37
+ * Clear all auth credentials from config file.
38
+ */
39
+ export declare function clearAuthConfig(): Promise<void>;
32
40
  export { CONFIG_DIR, CONFIG_FILE, DEFAULT_BASE_URL };
33
41
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,UAAU;IAClB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,QAAA,MAAM,gBAAgB,gCAAgC,CAAC;AACvD,QAAA,MAAM,UAAU,QAA4B,CAAC;AAC7C,QAAA,MAAM,WAAW,QAAkC,CAAC;AAEpD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAYxF;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAOtE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CASjF;AAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,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,UAAU,UAAU;IAClB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;CAC9B;AAED,QAAA,MAAM,gBAAgB,gCAAgC,CAAC;AACvD,QAAA,MAAM,UAAU,QAA4B,CAAC;AAC7C,QAAA,MAAM,WAAW,QAAkC,CAAC;AAEpD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAiDxF;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAOtE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CASjF;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAYrD;AAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC"}
package/dist/auth.js CHANGED
@@ -2,26 +2,60 @@ import { readFile } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
4
  import { parse as parseYaml } from 'yaml';
5
+ import { isTokenExpired, refreshAccessToken } from './oauth.js';
5
6
  const DEFAULT_BASE_URL = 'https://mcp-bff.gojinko.com';
6
7
  const CONFIG_DIR = join(homedir(), '.jinko');
7
8
  const CONFIG_FILE = join(CONFIG_DIR, 'config.yaml');
8
9
  /**
9
- * Resolve auth credentials with precedence: param > env > config file.
10
+ * Resolve auth credentials with precedence: param > env > config file (api_key) > config file (oauth).
10
11
  *
11
- * Currently only API key auth (jnk_...) is supported.
12
- * OAuth JWT support exists internally but is not exposed to users yet.
12
+ * OAuth tokens are auto-refreshed if expired.
13
13
  */
14
14
  export async function resolveAuth(paramToken) {
15
- const token = paramToken
16
- ?? process.env['JINKO_API_KEY']
17
- ?? (await readConfigFile())?.api_key;
18
- if (!token)
15
+ // 1. Explicit param or env — always API key
16
+ const explicitToken = paramToken ?? process.env['JINKO_API_KEY'];
17
+ if (explicitToken) {
18
+ return {
19
+ method: explicitToken.startsWith('jnk_') ? 'api_key' : 'oauth',
20
+ token: explicitToken,
21
+ };
22
+ }
23
+ // 2. Config file
24
+ const config = await readConfigFile();
25
+ if (!config)
19
26
  return undefined;
20
- // Internal: keep oauth detection for future use.
21
- return {
22
- method: token.startsWith('jnk_') ? 'api_key' : 'oauth',
23
- token,
24
- };
27
+ // 2a. API key in config
28
+ if (config.api_key) {
29
+ return { method: 'api_key', token: config.api_key };
30
+ }
31
+ // 2b. OAuth tokens in config
32
+ if (config.oauth) {
33
+ const tokens = {
34
+ access_token: config.oauth.access_token,
35
+ refresh_token: config.oauth.refresh_token,
36
+ expires_at: config.oauth.expires_at,
37
+ };
38
+ if (isTokenExpired(tokens)) {
39
+ try {
40
+ const refreshed = await refreshAccessToken(tokens.refresh_token);
41
+ // Persist refreshed tokens
42
+ await writeConfigFile({
43
+ oauth: {
44
+ access_token: refreshed.access_token,
45
+ refresh_token: refreshed.refresh_token,
46
+ expires_at: refreshed.expires_at,
47
+ },
48
+ });
49
+ return { method: 'oauth', token: refreshed.access_token };
50
+ }
51
+ catch {
52
+ // Refresh failed — try with existing token, server will 401 if truly expired
53
+ return { method: 'oauth', token: tokens.access_token };
54
+ }
55
+ }
56
+ return { method: 'oauth', token: tokens.access_token };
57
+ }
58
+ return undefined;
25
59
  }
26
60
  /**
27
61
  * Internal base URL — not configurable by users.
@@ -52,5 +86,19 @@ export async function writeConfigFile(updates) {
52
86
  const merged = { ...existing, ...updates };
53
87
  await writeFile(CONFIG_FILE, stringifyYaml(merged), 'utf-8');
54
88
  }
89
+ /**
90
+ * Clear all auth credentials from config file.
91
+ */
92
+ export async function clearAuthConfig() {
93
+ const config = await readConfigFile();
94
+ if (!config)
95
+ return;
96
+ const { api_key: _, oauth: __, ...rest } = config;
97
+ const { mkdir, writeFile } = await import('node:fs/promises');
98
+ const { stringify: stringifyYaml } = await import('yaml');
99
+ await mkdir(CONFIG_DIR, { recursive: true });
100
+ const cleaned = Object.keys(rest).length > 0 ? rest : {};
101
+ await writeFile(CONFIG_FILE, stringifyYaml(cleaned), 'utf-8');
102
+ }
55
103
  export { CONFIG_DIR, CONFIG_FILE, DEFAULT_BASE_URL };
56
104
  //# sourceMappingURL=auth.js.map
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAc1C,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AACvD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAmB;IACnD,MAAM,KAAK,GAAG,UAAU;WACnB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;WAC5B,CAAC,MAAM,cAAc,EAAE,CAAC,EAAE,OAAO,CAAC;IAEvC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,iDAAiD;IACjD,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QACtD,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,SAAS,CAAC,OAAO,CAAe,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA4B;IAChE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC9D,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IAE1D,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,MAAM,QAAQ,GAAG,CAAC,MAAM,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,MAAM,GAAe,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;IACvD,MAAM,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -14,6 +14,7 @@ export interface JinkoClient extends JinkoTools {
14
14
  * Create a configured openapi-fetch client for the Jinko BFF.
15
15
  *
16
16
  * Auth: pass an API key (jnk_...) via options, JINKO_API_KEY env, or ~/.jinko/config.yaml.
17
+ * OAuth tokens are auto-refreshed before each request when expired.
17
18
  */
18
19
  export declare function createJinkoClient(options?: ClientOptions): Promise<JinkoClient>;
19
20
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,YAAiC,MAAM,eAAe,CAAC;AAC9D,OAAO,EAA+B,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAE3E,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAEpE,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAkEzF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,YAAiC,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAgD,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAG5F,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAEpE,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAQD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAkGzF"}
package/dist/client.js CHANGED
@@ -1,11 +1,13 @@
1
1
  import createClient from 'openapi-fetch';
2
- import { resolveAuth, resolveBaseUrl } from './auth.js';
2
+ import { resolveAuth, resolveBaseUrl, writeConfigFile } from './auth.js';
3
+ import { isTokenExpired, refreshAccessToken } from './oauth.js';
3
4
  import { ApiError, AuthError } from './errors.js';
4
5
  import { createTools } from './tools.js';
5
6
  /**
6
7
  * Create a configured openapi-fetch client for the Jinko BFF.
7
8
  *
8
9
  * Auth: pass an API key (jnk_...) via options, JINKO_API_KEY env, or ~/.jinko/config.yaml.
10
+ * OAuth tokens are auto-refreshed before each request when expired.
9
11
  */
10
12
  export async function createJinkoClient(options = {}) {
11
13
  const auth = await resolveAuth(options.apiKey);
@@ -14,7 +16,14 @@ export async function createJinkoClient(options = {}) {
14
16
  }
15
17
  const baseUrl = resolveBaseUrl();
16
18
  const client = createClient({ baseUrl });
17
- // Auth middleware injects the right headers based on auth method.
19
+ // Mutable token state for OAuth refresh only used when method is oauth
20
+ let tokenState;
21
+ if (auth.method === 'oauth') {
22
+ // We don't have refresh_token/expires_at here from resolveAuth,
23
+ // but the token was already refreshed if needed during resolveAuth.
24
+ // For in-flight refresh during long-running sessions, we read config.
25
+ tokenState = undefined; // Will lazy-init on first refresh check
26
+ }
18
27
  const authMiddleware = {
19
28
  async onRequest({ request }) {
20
29
  const headers = new Headers(request.headers);
@@ -25,7 +34,31 @@ export async function createJinkoClient(options = {}) {
25
34
  headers.set('X-API-Key', auth.token);
26
35
  }
27
36
  else {
28
- headers.set('Authorization', `Bearer ${auth.token}`);
37
+ // OAuth — check if we need to refresh
38
+ let currentToken = auth.token;
39
+ if (tokenState && isTokenExpired({ access_token: tokenState.accessToken, refresh_token: tokenState.refreshToken, expires_at: tokenState.expiresAt })) {
40
+ try {
41
+ const refreshed = await refreshAccessToken(tokenState.refreshToken);
42
+ tokenState = {
43
+ accessToken: refreshed.access_token,
44
+ refreshToken: refreshed.refresh_token,
45
+ expiresAt: refreshed.expires_at,
46
+ };
47
+ currentToken = refreshed.access_token;
48
+ // Persist silently
49
+ await writeConfigFile({
50
+ oauth: {
51
+ access_token: refreshed.access_token,
52
+ refresh_token: refreshed.refresh_token,
53
+ expires_at: refreshed.expires_at,
54
+ },
55
+ });
56
+ }
57
+ catch {
58
+ // Proceed with current token
59
+ }
60
+ }
61
+ headers.set('Authorization', `Bearer ${currentToken}`);
29
62
  }
30
63
  return new Request(request.url, {
31
64
  method: request.method,
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  export { createJinkoClient, type ClientOptions, type JinkoClient, type JinkoRawClient } from './client.js';
2
2
  export { type JinkoTools } from './tools.js';
3
- export { resolveAuth, readConfigFile, writeConfigFile, CONFIG_DIR, CONFIG_FILE, type AuthMethod, type ResolvedAuth } from './auth.js';
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, resolveExpiresAt, type OAuthTokens, type DeviceAuthorization, } from './oauth.js';
5
6
  export type { paths, components } from './types/generated.js';
6
- 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, FlightFindRequest, FlightDestinationSearchRequest, FlightSearchRequest, FlightSearchLiveRequest, FlightSearchPriceCheckRequest, Traveler, Contact, TripUpsertTravelers, TripRequest, QuoteRequest, ScheduleFulfillmentRequest, CheckoutRequest, BookRequest, AncillarySelection, SelectAncillariesRequest, ConfirmPaymentRequest, RefundCheckRequest, RefundCommitRequest, } from './types/devplatform.js';
7
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,UAAU,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACtI,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACxF,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,iBAAiB,EACjB,8BAA8B,EAC9B,mBAAmB,EACnB,uBAAuB,EACvB,6BAA6B,EAC7B,QAAQ,EACR,OAAO,EACP,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { createJinkoClient } from './client.js';
2
- export { resolveAuth, readConfigFile, writeConfigFile, CONFIG_DIR, CONFIG_FILE } from './auth.js';
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, resolveExpiresAt, } from './oauth.js';
4
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,UAAU,EAAE,WAAW,EAAsC,MAAM,WAAW,CAAC;AACtI,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAuB,MAAM,aAAa,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"}
@@ -0,0 +1,46 @@
1
+ export interface OAuthTokens {
2
+ readonly access_token: string;
3
+ readonly refresh_token: string;
4
+ readonly expires_at: number;
5
+ }
6
+ export interface DeviceAuthorization {
7
+ readonly device_code: string;
8
+ readonly user_code: string;
9
+ readonly verification_uri: string;
10
+ readonly verification_uri_complete: string;
11
+ readonly expires_in: number;
12
+ readonly interval: number;
13
+ }
14
+ export declare class OAuthError extends Error {
15
+ constructor(message: string);
16
+ }
17
+ export declare class OAuthRefreshError extends OAuthError {
18
+ constructor(message?: string);
19
+ }
20
+ /**
21
+ * Request device authorization — returns a user code and verification URL.
22
+ */
23
+ export declare function requestDeviceAuthorization(): Promise<DeviceAuthorization>;
24
+ /**
25
+ * Poll the token endpoint until the user approves or the code expires.
26
+ * Calls onPoll() before each attempt (for progress indicators).
27
+ */
28
+ export declare function pollForToken(deviceCode: string, options: {
29
+ readonly intervalSeconds: number;
30
+ readonly expiresIn: number;
31
+ readonly onPoll?: () => void;
32
+ }): Promise<OAuthTokens>;
33
+ /**
34
+ * Refresh an expired access token.
35
+ */
36
+ export declare function refreshAccessToken(refreshToken: string): Promise<OAuthTokens>;
37
+ /**
38
+ * Check if tokens are expired (with buffer).
39
+ */
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;
46
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +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;AAQD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBhF"}
package/dist/oauth.js ADDED
@@ -0,0 +1,144 @@
1
+ // WorkOS AuthKit Device Authorization Flow (RFC 8628)
2
+ const DEVICE_AUTHORIZE_URL = 'https://api.workos.com/user_management/authorize/device';
3
+ const AUTHENTICATE_URL = 'https://api.workos.com/user_management/authenticate';
4
+ const TOKEN_URL = 'https://api.workos.com/user_management/authenticate';
5
+ const CLIENT_ID = 'client_01K6AG6ZM86FN92TGSW0VTZHVJ';
6
+ export class OAuthError extends Error {
7
+ constructor(message) {
8
+ super(message);
9
+ this.name = 'OAuthError';
10
+ }
11
+ }
12
+ export class OAuthRefreshError extends OAuthError {
13
+ constructor(message = 'Failed to refresh OAuth token. Please run `jinko auth login` again.') {
14
+ super(message);
15
+ this.name = 'OAuthRefreshError';
16
+ }
17
+ }
18
+ /**
19
+ * Request device authorization — returns a user code and verification URL.
20
+ */
21
+ export async function requestDeviceAuthorization() {
22
+ const response = await fetch(DEVICE_AUTHORIZE_URL, {
23
+ method: 'POST',
24
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
25
+ body: new URLSearchParams({ client_id: CLIENT_ID }),
26
+ });
27
+ if (!response.ok) {
28
+ const body = await response.text();
29
+ throw new OAuthError(`Device authorization request failed (${response.status}): ${body}`);
30
+ }
31
+ return await response.json();
32
+ }
33
+ /**
34
+ * Poll the token endpoint until the user approves or the code expires.
35
+ * Calls onPoll() before each attempt (for progress indicators).
36
+ */
37
+ export async function pollForToken(deviceCode, options) {
38
+ const { intervalSeconds, expiresIn, onPoll } = options;
39
+ const deadline = Date.now() + expiresIn * 1000;
40
+ let interval = intervalSeconds;
41
+ while (Date.now() < deadline) {
42
+ onPoll?.();
43
+ await sleep(interval * 1000);
44
+ const response = await fetch(AUTHENTICATE_URL, {
45
+ method: 'POST',
46
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
47
+ body: new URLSearchParams({
48
+ grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
49
+ device_code: deviceCode,
50
+ client_id: CLIENT_ID,
51
+ }),
52
+ });
53
+ if (response.ok) {
54
+ const data = await response.json();
55
+ return {
56
+ access_token: data.access_token,
57
+ refresh_token: data.refresh_token,
58
+ expires_at: resolveExpiresAt(data.access_token, data.expires_in),
59
+ };
60
+ }
61
+ const error = await response.json();
62
+ if (error.error === 'authorization_pending') {
63
+ continue;
64
+ }
65
+ if (error.error === 'slow_down') {
66
+ interval += 5;
67
+ continue;
68
+ }
69
+ if (error.error === 'access_denied') {
70
+ throw new OAuthError('Authorization was denied by the user.');
71
+ }
72
+ if (error.error === 'expired_token') {
73
+ throw new OAuthError('Device code expired. Please try again.');
74
+ }
75
+ throw new OAuthError(`Unexpected polling error: ${error.error ?? response.statusText}`);
76
+ }
77
+ throw new OAuthError('Device code expired. Please try again.');
78
+ }
79
+ /**
80
+ * Refresh an expired access token.
81
+ */
82
+ export async function refreshAccessToken(refreshToken) {
83
+ const response = await fetch(TOKEN_URL, {
84
+ method: 'POST',
85
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
86
+ body: new URLSearchParams({
87
+ grant_type: 'refresh_token',
88
+ client_id: CLIENT_ID,
89
+ refresh_token: refreshToken,
90
+ }),
91
+ });
92
+ if (!response.ok) {
93
+ throw new OAuthRefreshError();
94
+ }
95
+ const data = await response.json();
96
+ return {
97
+ access_token: data.access_token,
98
+ refresh_token: data.refresh_token,
99
+ expires_at: resolveExpiresAt(data.access_token, data.expires_in),
100
+ };
101
+ }
102
+ /**
103
+ * Check if tokens are expired (with buffer).
104
+ */
105
+ export function isTokenExpired(tokens, bufferSeconds = 60) {
106
+ return Date.now() >= tokens.expires_at - bufferSeconds * 1000;
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
+ }
141
+ function sleep(ms) {
142
+ return new Promise((resolve) => setTimeout(resolve, ms));
143
+ }
144
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
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, CheckoutRequest, QuoteRequest, ScheduleFulfillmentRequest, SelectAncillariesRequest, ConfirmPaymentRequest, RefundCheckRequest, RefundCommitRequest } from './types/devplatform.js';
3
3
  /**
4
- * 6 tool methods matching MCP tool names 1:1.
4
+ * 10 tool methods matching MCP tool names.
5
5
  *
6
- * find_flight → findFlight()
7
- * find_destination → findDestination()
8
- * flight_search → flightSearch()
9
- * flight_calendar → flightCalendar()
10
- * trip → trip()
11
- * book → book()
6
+ * find_flight → findFlight()
7
+ * find_destination → findDestination()
8
+ * flight_search → flightSearch()
9
+ * flight_calendar → flightCalendar()
10
+ * trip → trip()
11
+ * book → book()
12
+ * select_ancillaries → selectAncillaries()
13
+ * confirm_payment → confirmPayment()
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,20 @@ 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
- /** bookcheckout a trip, returns checkout_url + session_id. */
28
+ /** quoteschedule quote for a trip, returns items + available ancillaries. */
29
+ readonly quote: (request: QuoteRequest) => Promise<unknown>;
30
+ /** scheduleFulfillment — create Stripe payment with ancillary-inclusive amount. Returns checkout_url. */
31
+ readonly scheduleFulfillment: (request: ScheduleFulfillmentRequest) => Promise<unknown>;
32
+ /** book — (legacy) one-shot quote+checkout, returns checkout_url + session_id. */
25
33
  readonly book: (request: CheckoutRequest) => Promise<unknown>;
34
+ /** select_ancillaries — select baggage, seats, meals for a trip item. */
35
+ readonly selectAncillaries: (request: SelectAncillariesRequest) => Promise<unknown>;
36
+ /** confirm_payment — verify Stripe payment after checkout. */
37
+ readonly confirmPayment: (request: ConfirmPaymentRequest) => Promise<unknown>;
38
+ /** refund_check — check refund eligibility for a booked flight. */
39
+ readonly refundCheck: (request: RefundCheckRequest) => Promise<unknown>;
40
+ /** refund_commit — initiate a refund for a booked flight. */
41
+ readonly refundCommit: (request: RefundCommitRequest) => Promise<unknown>;
26
42
  }
27
43
  export declare function createTools(raw: JinkoRawClient): JinkoTools;
28
44
  //# 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,EACX,eAAe,EACf,YAAY,EACZ,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,EACrB,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,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5D,yGAAyG;IACzG,QAAQ,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAExF,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9D,yEAAyE;IACzE,QAAQ,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpF,8DAA8D;IAC9D,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9E,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,CAoB3D"}
package/dist/tools.js CHANGED
@@ -4,12 +4,18 @@ 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
+ quote: (request) => post('/api/v1/trips/checkout', request),
13
+ scheduleFulfillment: (request) => post('/api/v1/trips/fulfillment', request),
14
+ book: (request) => post('/api/v1/trips/checkout', request),
15
+ selectAncillaries: (request) => post('/api/v1/trips/ancillaries', request),
16
+ confirmPayment: (request) => post('/api/v1/trips/confirm-payment', request),
17
+ refundCheck: (request) => post('/api/v1/flights/refund-check', request),
18
+ refundCommit: (request) => post('/api/v1/flights/refund-commit', request),
13
19
  };
14
20
  }
15
21
  //# 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":"AAmEA,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,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC;QAC3D,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC;QAC5E,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC;QAC1D,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC;QAC1E,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,OAAO,CAAC;QAC3E,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"}
@@ -77,7 +77,9 @@ export interface FlightDestinationSearchRequest {
77
77
  }
78
78
  export interface FlightSearchLiveRequest {
79
79
  readonly origin: string;
80
+ readonly origin_type?: 'city' | 'airport';
80
81
  readonly destination: string;
82
+ readonly destination_type?: 'city' | 'airport';
81
83
  readonly departure_date: string;
82
84
  readonly return_date?: string;
83
85
  readonly trip_type?: string;
@@ -121,9 +123,44 @@ export interface TripRequest {
121
123
  };
122
124
  readonly upsert_travelers?: TripUpsertTravelers;
123
125
  }
126
+ export interface QuoteRequest {
127
+ readonly trip_id: string;
128
+ }
129
+ export interface ScheduleFulfillmentRequest {
130
+ readonly trip_id: string;
131
+ readonly idempotency_key?: string;
132
+ }
124
133
  export interface CheckoutRequest {
125
134
  readonly trip_id: string;
126
135
  }
136
+ export interface AncillarySelection {
137
+ readonly offer_id: string;
138
+ readonly category?: string;
139
+ readonly pax_ref_id?: string;
140
+ readonly segment_ref_ids?: readonly string[];
141
+ readonly journey_ref_id?: string;
142
+ readonly quantity?: number;
143
+ readonly provider_metadata?: Record<string, string>;
144
+ }
145
+ export interface SelectAncillariesRequest {
146
+ readonly trip_id: string;
147
+ readonly item_id: string;
148
+ readonly selections: readonly AncillarySelection[];
149
+ }
150
+ export interface ConfirmPaymentRequest {
151
+ readonly trip_id: string;
152
+ readonly checkout_session_id?: string;
153
+ readonly payment_intent_id?: string;
154
+ }
155
+ export interface RefundCheckRequest {
156
+ readonly booking_reference: string;
157
+ readonly pnr: string;
158
+ }
159
+ export interface RefundCommitRequest {
160
+ readonly booking_reference: string;
161
+ readonly pnr: string;
162
+ readonly reason?: string;
163
+ }
127
164
  export interface BookRequest {
128
165
  readonly trip_id?: string;
129
166
  readonly trip_item_token?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"devplatform.d.ts","sourceRoot":"","sources":["../../src/types/devplatform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,2FAA2F;AAC3F,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,0FAA0F;AAC1F,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAID,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAC3C,CAAC;IACF,QAAQ,CAAC,KAAK,CAAC,EAAE;QACf,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC7C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;QACtD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC1C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;QACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;KAC1C,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;CACrD;AAID,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;CACrD;AAID,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,GAAG,6BAA6B,CAAC;AAI1F,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;CACjD;AAID,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAID,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B"}
1
+ {"version":3,"file":"devplatform.d.ts","sourceRoot":"","sources":["../../src/types/devplatform.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gojinko/api-client",
3
- "version": "0.2.0",
3
+ "version": "0.4.5",
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
+ }
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"}