@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 +111 -24
- package/README.md +160 -160
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +1 -1
- package/dist/provider.js.map +1 -1
- package/package.json +5 -5
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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-
|
|
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
|
-
#### `
|
|
109
|
-
|
|
110
|
-
Flights provider interface.
|
|
175
|
+
#### `TravelerPricing`
|
|
111
176
|
|
|
112
|
-
|
|
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
|
|
180
|
+
interface TravelerPricing {
|
|
121
181
|
/**
|
|
122
|
-
*
|
|
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
|
-
|
|
184
|
+
travelerId: string
|
|
129
185
|
|
|
130
186
|
/**
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
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
|
-
|
|
191
|
+
travelerType: 'adult' | 'child' | 'held-infant' | 'seated-infant'
|
|
138
192
|
|
|
139
193
|
/**
|
|
140
|
-
*
|
|
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
|
-
|
|
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
|
-
#### `
|
|
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
|
-
|
|
302
|
+
Flights provider interface.
|
|
312
303
|
|
|
313
|
-
|
|
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
|
|
317
|
-
/**
|
|
318
|
-
* Provider-specific traveler id (typically a 1-indexed string).
|
|
319
|
-
*/
|
|
320
|
-
travelerId: string
|
|
321
|
-
|
|
312
|
+
interface FlightsProvider {
|
|
322
313
|
/**
|
|
323
|
-
*
|
|
324
|
-
*
|
|
325
|
-
*
|
|
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
|
-
|
|
320
|
+
searchFlights(options: SearchFlightsOptions): Promise<FlightOffer[]>
|
|
328
321
|
|
|
329
322
|
/**
|
|
330
|
-
*
|
|
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
|
-
|
|
329
|
+
getOffer(offerId: OfferId): Promise<FlightOfferDetail>
|
|
333
330
|
|
|
334
331
|
/**
|
|
335
|
-
*
|
|
336
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
421
|
+
#### `CabinClass`
|
|
433
422
|
|
|
434
|
-
|
|
423
|
+
Cabin class enumeration.
|
|
435
424
|
|
|
436
|
-
|
|
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
|
-
|
|
429
|
+
type CabinClass = 'economy' | 'premium-economy' | 'business' | 'first'
|
|
440
430
|
```
|
|
441
431
|
|
|
442
|
-
|
|
432
|
+
### Functions
|
|
443
433
|
|
|
444
|
-
|
|
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
|
-
#### `
|
|
466
|
+
#### `searchFlights(options)`
|
|
467
467
|
|
|
468
|
-
|
|
468
|
+
Searches for flight offers matching the supplied itinerary.
|
|
469
469
|
|
|
470
470
|
```typescript
|
|
471
|
-
function
|
|
471
|
+
function searchFlights(options: SearchFlightsOptions): Promise<FlightOffer[]>
|
|
472
472
|
```
|
|
473
473
|
|
|
474
|
-
- `
|
|
474
|
+
- `options` — Search parameters (origin, destination, dates, passenger counts, cabin, etc.).
|
|
475
475
|
|
|
476
|
-
**Returns:**
|
|
476
|
+
**Returns:** Array of normalized flight offers.
|
|
477
477
|
|
|
478
|
-
#### `
|
|
478
|
+
#### `getOffer(offerId)`
|
|
479
479
|
|
|
480
|
-
|
|
480
|
+
Retrieves a previously-searched offer in detail.
|
|
481
481
|
|
|
482
482
|
```typescript
|
|
483
|
-
function
|
|
483
|
+
function getOffer(offerId: string): Promise<FlightOfferDetail>
|
|
484
484
|
```
|
|
485
485
|
|
|
486
|
-
- `
|
|
486
|
+
- `offerId` — Opaque offer identifier returned by `searchFlights`.
|
|
487
487
|
|
|
488
|
-
**Returns:**
|
|
488
|
+
**Returns:** The offer with per-passenger price breakdown when available.
|
|
489
489
|
|
|
490
|
-
#### `
|
|
490
|
+
#### `priceOffer(offerId)`
|
|
491
491
|
|
|
492
|
-
|
|
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
|
|
495
|
+
function priceOffer(offerId: string): Promise<PricingResult>
|
|
498
496
|
```
|
|
499
497
|
|
|
500
|
-
- `
|
|
498
|
+
- `offerId` — Opaque offer identifier returned by `searchFlights`.
|
|
499
|
+
|
|
500
|
+
**Returns:** Authoritative price snapshot.
|
|
501
501
|
|
|
502
502
|
## Available Providers
|
|
503
503
|
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -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,
|
|
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:
|
|
37
|
+
defaultValue: "Flights provider not configured. Bond one first using bond('flights', provider).",
|
|
38
38
|
}), { cause: error });
|
|
39
39
|
}
|
|
40
40
|
};
|
package/dist/provider.js.map
CHANGED
|
@@ -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,
|
|
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.
|
|
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.
|
|
37
|
-
"@molecule/api-i18n": "1.0.
|
|
38
|
-
"@types/node": "26.
|
|
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.
|
|
40
|
+
"vitest": "4.1.12"
|
|
41
41
|
},
|
|
42
42
|
"repository": {
|
|
43
43
|
"type": "git",
|