@molecule/api-flights 1.0.2 → 1.0.4

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/LICENSE CHANGED
@@ -1,3 +1,4 @@
1
+
1
2
  Apache License
2
3
  Version 2.0, January 2004
3
4
  http://www.apache.org/licenses/
@@ -34,21 +35,33 @@
34
35
 
35
36
  "Work" shall mean the work of authorship, whether in Source or
36
37
  Object form, made available under the License, as indicated by a
37
- copyright notice that is included in or attached to the work.
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
38
40
 
39
41
  "Derivative Works" shall mean any work, whether in Source or Object
40
42
  form, that is based on (or derived from) the Work and for which the
41
43
  editorial revisions, annotations, elaborations, or other modifications
42
- represent, as a whole, an original work of authorship.
43
-
44
- "Contribution" shall mean any work of authorship, including the
45
- original version of the Work and any modifications or additions
46
- to that Work, that is intentionally submitted to the Licensor for
47
- inclusion in the Work by the copyright owner or by an individual or
48
- Legal Entity authorized to submit on behalf of the copyright owner.
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
49
62
 
50
63
  "Contributor" shall mean Licensor and any individual or Legal Entity
51
- on behalf of whom a Contribution has been received by the Licensor and
64
+ on behalf of whom a Contribution has been received by Licensor and
52
65
  subsequently incorporated within the Work.
53
66
 
54
67
  2. Grant of Copyright License. Subject to the terms and conditions of
@@ -61,8 +74,18 @@
61
74
  3. Grant of Patent License. Subject to the terms and conditions of
62
75
  this License, each Contributor hereby grants to You a perpetual,
63
76
  worldwide, non-exclusive, no-charge, royalty-free, irrevocable
64
- patent license to make, have made, use, offer to sell, sell, import,
65
- and otherwise transfer the Work.
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
66
89
 
67
90
  4. Redistribution. You may reproduce and distribute copies of the
68
91
  Work or Derivative Works thereof in any medium, with or without
@@ -84,23 +107,87 @@
84
107
  (d) If the Work includes a "NOTICE" text file as part of its
85
108
  distribution, then any Derivative Works that You distribute must
86
109
  include a readable copy of the attribution notices contained
87
- within such NOTICE file.
88
-
89
- 5. Submission of Contributions.
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
90
138
 
91
139
  6. Trademarks. This License does not grant permission to use the trade
92
- names, trademarks, service marks, or product names of the Licensor.
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
93
143
 
94
144
  7. Disclaimer of Warranty. Unless required by applicable law or
95
- agreed to in writing, Licensor provides the Work on an "AS IS" BASIS,
96
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
97
-
98
- 8. Limitation of Liability. In no event and under no legal theory shall
99
- any Contributor be liable to You for damages.
100
-
101
- 9. Accepting Warranty or Additional Liability.
102
-
103
- Copyright 2026 Molecule Dev, Inc.
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
104
191
 
105
192
  Licensed under the Apache License, Version 2.0 (the "License");
106
193
  you may not use this file except in compliance with the License.
package/README.md CHANGED
@@ -3,15 +3,11 @@ AUTO-GENERATED — DO NOT EDIT THIS FILE.
3
3
  Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
4
4
  Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
5
5
  To change this document, edit the module-level JSDoc in src/index.ts.
6
- Generated: 2026-08-04T01:48:14.014Z
6
+ Generated: 2026-10-16T23:29:39.868Z
7
7
  -->
8
8
 
9
9
  # @molecule/api-flights
10
10
 
11
- > **Auto-generated, AI-first package reference** for the [molecule.dev](https://molecule.dev) ecosystem.
12
- > It is written to be read by coding agents as much as by people, and is generated from this
13
- > package's source — edit `src/index.ts` JSDoc, not this file.
14
-
15
11
  Provider-agnostic flights interface for molecule.dev.
16
12
 
17
13
  Defines the {@link FlightsProvider} interface for flight search +
@@ -20,6 +16,10 @@ interface. Application code uses the convenience functions
20
16
  (`searchFlights`, `getOffer`, `priceOffer`) which delegate to the bonded
21
17
  provider.
22
18
 
19
+ > **Auto-generated, AI-first package reference** for the [molecule.dev](https://molecule.dev) ecosystem.
20
+ > It is written to be read by coding agents as much as by people, and is generated from this
21
+ > package's source — edit `src/index.ts` JSDoc, not this file.
22
+
23
23
  ## Quick Start
24
24
 
25
25
  ```typescript
@@ -50,6 +50,73 @@ npm install @molecule/api-flights @molecule/api-bond @molecule/api-i18n
50
50
 
51
51
  ### Interfaces
52
52
 
53
+ #### `Segment`
54
+
55
+ One leg of a {@link FlightOffer} — a single take-off / landing pair on a
56
+ single operated flight.
57
+
58
+ ```typescript
59
+ interface Segment {
60
+ /**
61
+ * Departure airport / instant.
62
+ */
63
+ departure: SegmentEndpoint
64
+
65
+ /**
66
+ * Arrival airport / instant.
67
+ */
68
+ arrival: SegmentEndpoint
69
+
70
+ /**
71
+ * Marketing carrier IATA code (e.g. `'AA'`, `'BA'`).
72
+ */
73
+ carrier: CarrierCode
74
+
75
+ /**
76
+ * Marketing flight number (e.g. `'100'`, `'1234'`).
77
+ *
78
+ * String rather than number to preserve any leading zeros and to
79
+ * accommodate alphanumeric carriers (e.g. EasyJet's `'EZY'` prefix).
80
+ */
81
+ flightNumber: string
82
+
83
+ /**
84
+ * IATA aircraft code (e.g. `'77W'`, `'320'`). `null` when the upstream
85
+ * does not supply aircraft data for this segment.
86
+ */
87
+ aircraft?: string | null
88
+
89
+ /**
90
+ * Block / total time the segment is in the air. `null` when the upstream
91
+ * does not supply per-segment duration.
92
+ */
93
+ duration?: IsoDuration | null
94
+ }
95
+ ```
96
+
97
+ #### `SegmentEndpoint`
98
+
99
+ Departure or arrival point on a {@link Segment}.
100
+
101
+ ```typescript
102
+ interface SegmentEndpoint {
103
+ /**
104
+ * IATA airport code (e.g. `'JFK'`).
105
+ */
106
+ airport: AirportCode
107
+
108
+ /**
109
+ * Local-time instant including timezone offset.
110
+ */
111
+ at: IsoDateTime
112
+
113
+ /**
114
+ * Terminal designator (e.g. `'4'`, `'2A'`). `null` when not supplied.
115
+ */
116
+ terminal?: string | null
117
+ }
118
+ ```
119
+
53
120
  #### `FlightOffer`
54
121
 
55
122
  Normalized flight offer returned by
@@ -105,45 +172,34 @@ interface FlightOfferDetail extends FlightOffer {
105
172
  }
106
173
  ```
107
174
 
108
- #### `FlightsProvider`
109
-
110
- Flights provider interface.
175
+ #### `TravelerPricing`
111
176
 
112
- All flight providers (Amadeus, Duffel, Sabre, etc.) implement this
113
- interface. The interface is deliberately minimal so providers with very
114
- different upstream APIs can satisfy it identically. Providers that lack
115
- a "fetch single offer" call typically implement {@link getOffer} by
116
- round-tripping through their pricing endpoint and returning the priced
117
- offer.
177
+ Per-passenger price row inside {@link FlightOfferDetail.travelerPricings}.
118
178
 
119
179
  ```typescript
120
- interface FlightsProvider {
180
+ interface TravelerPricing {
121
181
  /**
122
- * Searches for flight offers matching the supplied itinerary.
123
- *
124
- * @param options - Search parameters (origin, destination, dates,
125
- * passenger counts, cabin, etc.).
126
- * @returns Array of normalized flight offers.
182
+ * Provider-specific traveler id (typically a 1-indexed string).
127
183
  */
128
- searchFlights(options: SearchFlightsOptions): Promise<FlightOffer[]>
184
+ travelerId: string
129
185
 
130
186
  /**
131
- * Retrieves a previously-searched offer in detail.
132
- *
133
- * @param offerId - Opaque offer identifier returned by
134
- * {@link searchFlights}.
135
- * @returns The offer with per-passenger price breakdown when available.
187
+ * Adult, child, or infant. The infant variant is split between
188
+ * lap-infants (`'held-infant'`) and seated infants (`'seated-infant'`)
189
+ * because they are priced differently by most carriers.
136
190
  */
137
- getOffer(offerId: OfferId): Promise<FlightOfferDetail>
191
+ travelerType: 'adult' | 'child' | 'held-infant' | 'seated-infant'
138
192
 
139
193
  /**
140
- * Confirms the up-to-the-minute price for a previously-searched offer.
141
- *
142
- * @param offerId - Opaque offer identifier returned by
143
- * {@link searchFlights}.
144
- * @returns Authoritative price snapshot.
194
+ * Total price for this traveler in the offer's currency.
145
195
  */
146
- priceOffer(offerId: OfferId): Promise<PricingResult>
196
+ price: number
197
+
198
+ /**
199
+ * Cabin class booked for this traveler. `null` when mixed across
200
+ * segments or not supplied.
201
+ */
202
+ cabin?: CabinClass | null
147
203
  }
148
204
  ```
149
205
 
@@ -241,101 +297,45 @@ interface SearchFlightsOptions {
241
297
  }
242
298
  ```
243
299
 
244
- #### `Segment`
245
-
246
- One leg of a {@link FlightOffer} — a single take-off / landing pair on a
247
- single operated flight.
248
-
249
- ```typescript
250
- interface Segment {
251
- /**
252
- * Departure airport / instant.
253
- */
254
- departure: SegmentEndpoint
255
-
256
- /**
257
- * Arrival airport / instant.
258
- */
259
- arrival: SegmentEndpoint
260
-
261
- /**
262
- * Marketing carrier IATA code (e.g. `'AA'`, `'BA'`).
263
- */
264
- carrier: CarrierCode
265
-
266
- /**
267
- * Marketing flight number (e.g. `'100'`, `'1234'`).
268
- *
269
- * String rather than number to preserve any leading zeros and to
270
- * accommodate alphanumeric carriers (e.g. EasyJet's `'EZY'` prefix).
271
- */
272
- flightNumber: string
273
-
274
- /**
275
- * IATA aircraft code (e.g. `'77W'`, `'320'`). `null` when the upstream
276
- * does not supply aircraft data for this segment.
277
- */
278
- aircraft?: string | null
279
-
280
- /**
281
- * Block / total time the segment is in the air. `null` when the upstream
282
- * does not supply per-segment duration.
283
- */
284
- duration?: IsoDuration | null
285
- }
286
- ```
287
-
288
- #### `SegmentEndpoint`
289
-
290
- Departure or arrival point on a {@link Segment}.
291
-
292
- ```typescript
293
- interface SegmentEndpoint {
294
- /**
295
- * IATA airport code (e.g. `'JFK'`).
296
- */
297
- airport: AirportCode
298
-
299
- /**
300
- * Local-time instant including timezone offset.
301
- */
302
- at: IsoDateTime
303
-
304
- /**
305
- * Terminal designator (e.g. `'4'`, `'2A'`). `null` when not supplied.
306
- */
307
- terminal?: string | null
308
- }
309
- ```
300
+ #### `FlightsProvider`
310
301
 
311
- #### `TravelerPricing`
302
+ Flights provider interface.
312
303
 
313
- Per-passenger price row inside {@link FlightOfferDetail.travelerPricings}.
304
+ All flight providers (Amadeus, Duffel, Sabre, etc.) implement this
305
+ interface. The interface is deliberately minimal so providers with very
306
+ different upstream APIs can satisfy it identically. Providers that lack
307
+ a "fetch single offer" call typically implement {@link getOffer} by
308
+ round-tripping through their pricing endpoint and returning the priced
309
+ offer.
314
310
 
315
311
  ```typescript
316
- interface TravelerPricing {
317
- /**
318
- * Provider-specific traveler id (typically a 1-indexed string).
319
- */
320
- travelerId: string
321
-
312
+ interface FlightsProvider {
322
313
  /**
323
- * Adult, child, or infant. The infant variant is split between
324
- * lap-infants (`'held-infant'`) and seated infants (`'seated-infant'`)
325
- * because they are priced differently by most carriers.
314
+ * Searches for flight offers matching the supplied itinerary.
315
+ *
316
+ * @param options - Search parameters (origin, destination, dates,
317
+ * passenger counts, cabin, etc.).
318
+ * @returns Array of normalized flight offers.
326
319
  */
327
- travelerType: 'adult' | 'child' | 'held-infant' | 'seated-infant'
320
+ searchFlights(options: SearchFlightsOptions): Promise<FlightOffer[]>
328
321
 
329
322
  /**
330
- * Total price for this traveler in the offer's currency.
323
+ * Retrieves a previously-searched offer in detail.
324
+ *
325
+ * @param offerId - Opaque offer identifier returned by
326
+ * {@link searchFlights}.
327
+ * @returns The offer with per-passenger price breakdown when available.
331
328
  */
332
- price: number
329
+ getOffer(offerId: OfferId): Promise<FlightOfferDetail>
333
330
 
334
331
  /**
335
- * Cabin class booked for this traveler. `null` when mixed across
336
- * segments or not supplied.
332
+ * Confirms the up-to-the-minute price for a previously-searched offer.
333
+ *
334
+ * @param offerId - Opaque offer identifier returned by
335
+ * {@link searchFlights}.
336
+ * @returns Authoritative price snapshot.
337
337
  */
338
- cabin?: CabinClass | null
338
+ priceOffer(offerId: OfferId): Promise<PricingResult>
339
339
  }
340
340
  ```
341
341
 
@@ -353,17 +353,6 @@ upstream exposes.
353
353
  type AirportCode = string
354
354
  ```
355
355
 
356
- #### `CabinClass`
357
-
358
- Cabin class enumeration.
359
-
360
- Providers map each value onto whatever upstream code they require
361
- (e.g. Amadeus uses `'ECONOMY' | 'PREMIUM_ECONOMY' | 'BUSINESS' | 'FIRST'`).
362
-
363
- ```typescript
364
- type CabinClass = 'economy' | 'premium-economy' | 'business' | 'first'
365
- ```
366
-
367
356
  #### `CarrierCode`
368
357
 
369
358
  IATA two-character airline / marketing carrier code (e.g. `'AA'`,
@@ -373,17 +362,6 @@ IATA two-character airline / marketing carrier code (e.g. `'AA'`,
373
362
  type CarrierCode = string
374
363
  ```
375
364
 
376
- #### `CurrencyCode`
377
-
378
- ISO 4217 three-letter currency code (e.g. `'USD'`, `'EUR'`, `'JPY'`).
379
-
380
- Conventionally upper-case to match {@link FlightOffer.currency} and the
381
- vast majority of upstream travel APIs.
382
-
383
- ```typescript
384
- type CurrencyCode = string
385
- ```
386
-
387
365
  #### `IsoDate`
388
366
 
389
367
  ISO 8601 calendar date (e.g. `'2026-07-15'`). Time-of-day MUST NOT be
@@ -416,6 +394,17 @@ whether they expose seconds-precision, fractional minutes, etc.
416
394
  type IsoDuration = string
417
395
  ```
418
396
 
397
+ #### `CurrencyCode`
398
+
399
+ ISO 4217 three-letter currency code (e.g. `'USD'`, `'EUR'`, `'JPY'`).
400
+
401
+ Conventionally upper-case to match {@link FlightOffer.currency} and the
402
+ vast majority of upstream travel APIs.
403
+
404
+ ```typescript
405
+ type CurrencyCode = string
406
+ ```
407
+
419
408
  #### `OfferId`
420
409
 
421
410
  Provider-specific offer identifier.
@@ -429,19 +418,30 @@ and MUST NOT be parsed by consumers.
429
418
  type OfferId = string
430
419
  ```
431
420
 
432
- ### Functions
421
+ #### `CabinClass`
433
422
 
434
- #### `getOffer(offerId)`
423
+ Cabin class enumeration.
435
424
 
436
- Retrieves a previously-searched offer in detail.
425
+ Providers map each value onto whatever upstream code they require
426
+ (e.g. Amadeus uses `'ECONOMY' | 'PREMIUM_ECONOMY' | 'BUSINESS' | 'FIRST'`).
437
427
 
438
428
  ```typescript
439
- function getOffer(offerId: string): Promise<FlightOfferDetail>
429
+ type CabinClass = 'economy' | 'premium-economy' | 'business' | 'first'
440
430
  ```
441
431
 
442
- - `offerId` — Opaque offer identifier returned by `searchFlights`.
432
+ ### Functions
443
433
 
444
- **Returns:** The offer with per-passenger price breakdown when available.
434
+ #### `setProvider(provider)`
435
+
436
+ Registers a flights provider as the active singleton. Called by bond
437
+ packages (e.g. `@molecule/api-flights-amadeus`) during application
438
+ startup.
439
+
440
+ ```typescript
441
+ function setProvider(provider: FlightsProvider): void
442
+ ```
443
+
444
+ - `provider` — The flights provider implementation to bond.
445
445
 
446
446
  #### `getProvider()`
447
447
 
@@ -463,41 +463,41 @@ function hasProvider(): boolean
463
463
 
464
464
  **Returns:** `true` if a flights provider is bonded.
465
465
 
466
- #### `priceOffer(offerId)`
466
+ #### `searchFlights(options)`
467
467
 
468
- Confirms the up-to-the-minute price for a previously-searched offer.
468
+ Searches for flight offers matching the supplied itinerary.
469
469
 
470
470
  ```typescript
471
- function priceOffer(offerId: string): Promise<PricingResult>
471
+ function searchFlights(options: SearchFlightsOptions): Promise<FlightOffer[]>
472
472
  ```
473
473
 
474
- - `offerId` — Opaque offer identifier returned by `searchFlights`.
474
+ - `options` — Search parameters (origin, destination, dates, passenger counts, cabin, etc.).
475
475
 
476
- **Returns:** Authoritative price snapshot.
476
+ **Returns:** Array of normalized flight offers.
477
477
 
478
- #### `searchFlights(options)`
478
+ #### `getOffer(offerId)`
479
479
 
480
- Searches for flight offers matching the supplied itinerary.
480
+ Retrieves a previously-searched offer in detail.
481
481
 
482
482
  ```typescript
483
- function searchFlights(options: SearchFlightsOptions): Promise<FlightOffer[]>
483
+ function getOffer(offerId: string): Promise<FlightOfferDetail>
484
484
  ```
485
485
 
486
- - `options` — Search parameters (origin, destination, dates, passenger counts, cabin, etc.).
486
+ - `offerId` — Opaque offer identifier returned by `searchFlights`.
487
487
 
488
- **Returns:** Array of normalized flight offers.
488
+ **Returns:** The offer with per-passenger price breakdown when available.
489
489
 
490
- #### `setProvider(provider)`
490
+ #### `priceOffer(offerId)`
491
491
 
492
- Registers a flights provider as the active singleton. Called by bond
493
- packages (e.g. `@molecule/api-flights-amadeus`) during application
494
- startup.
492
+ Confirms the up-to-the-minute price for a previously-searched offer.
495
493
 
496
494
  ```typescript
497
- function setProvider(provider: FlightsProvider): void
495
+ function priceOffer(offerId: string): Promise<PricingResult>
498
496
  ```
499
497
 
500
- - `provider` — The flights provider implementation to bond.
498
+ - `offerId` — Opaque offer identifier returned by `searchFlights`.
499
+
500
+ **Returns:** Authoritative price snapshot.
501
501
 
502
502
  ## Available Providers
503
503
 
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,OAAO,EACP,aAAa,EACb,oBAAoB,EACrB,MAAM,YAAY,CAAA;AAKnB;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,UAAU,eAAe,KAAG,IAEvD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,eAW9B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,QAAO,OAE9B,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAU,SAAS,oBAAoB,KAAG,OAAO,CAAC,WAAW,EAAE,CAExF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAU,SAAS,OAAO,KAAG,OAAO,CAAC,iBAAiB,CAE1E,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAU,SAAS,OAAO,KAAG,OAAO,CAAC,aAAa,CAExE,CAAA"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,OAAO,EACP,aAAa,EACb,oBAAoB,EACrB,MAAM,YAAY,CAAA;AAKnB;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,UAAU,eAAe,KAAG,IAEvD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,eAY9B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,QAAO,OAE9B,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAU,SAAS,oBAAoB,KAAG,OAAO,CAAC,WAAW,EAAE,CAExF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAU,SAAS,OAAO,KAAG,OAAO,CAAC,iBAAiB,CAE1E,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAU,SAAS,OAAO,KAAG,OAAO,CAAC,aAAa,CAExE,CAAA"}
package/dist/provider.js CHANGED
@@ -34,7 +34,7 @@ export const getProvider = () => {
34
34
  }
35
35
  catch (error) {
36
36
  throw new Error(t('flights.error.noProvider', undefined, {
37
- defaultValue: 'Flights provider not configured. Call setProvider() first.',
37
+ defaultValue: "Flights provider not configured. Bond one first using bond('flights', provider).",
38
38
  }), { cause: error });
39
39
  }
40
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACvF,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAA;AAWtC,MAAM,SAAS,GAAG,SAAS,CAAA;AAC3B,UAAU,CAAC,SAAS,CAAC,CAAA;AAErB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAyB,EAAQ,EAAE;IAC7D,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;AAC3B,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAoB,EAAE;IAC/C,IAAI,CAAC;QACH,OAAO,WAAW,CAAkB,SAAS,CAAC,CAAA;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,CAAC,CAAC,0BAA0B,EAAE,SAAS,EAAE;YACvC,YAAY,EAAE,4DAA4D;SAC3E,CAAC,EACF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAY,EAAE;IACvC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,OAA6B,EAA0B,EAAE;IAC3F,OAAO,WAAW,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;AAC7C,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAgB,EAA8B,EAAE;IAC7E,OAAO,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,OAAgB,EAA0B,EAAE;IAC3E,OAAO,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AAC1C,CAAC,CAAA"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACvF,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAA;AAWtC,MAAM,SAAS,GAAG,SAAS,CAAA;AAC3B,UAAU,CAAC,SAAS,CAAC,CAAA;AAErB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAyB,EAAQ,EAAE;IAC7D,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;AAC3B,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAoB,EAAE;IAC/C,IAAI,CAAC;QACH,OAAO,WAAW,CAAkB,SAAS,CAAC,CAAA;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,CAAC,CAAC,0BAA0B,EAAE,SAAS,EAAE;YACvC,YAAY,EACV,kFAAkF;SACrF,CAAC,EACF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAY,EAAE;IACvC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,OAA6B,EAA0B,EAAE;IAC3F,OAAO,WAAW,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;AAC7C,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAgB,EAA8B,EAAE;IAC7E,OAAO,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,OAAgB,EAA0B,EAAE;IAC3E,OAAO,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AAC1C,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@molecule/api-flights",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Flight search + offer pricing core interface for molecule.dev",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -33,11 +33,11 @@
33
33
  "@molecule/api-i18n": "^1.0.1"
34
34
  },
35
35
  "devDependencies": {
36
- "@molecule/api-bond": "1.0.2",
37
- "@molecule/api-i18n": "1.0.3",
38
- "@types/node": "26.1.2",
36
+ "@molecule/api-bond": "1.0.3",
37
+ "@molecule/api-i18n": "1.0.4",
38
+ "@types/node": "26.6.5",
39
39
  "typescript": "6.0.3",
40
- "vitest": "4.1.11"
40
+ "vitest": "4.1.12"
41
41
  },
42
42
  "repository": {
43
43
  "type": "git",