google-flights-ts 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NLData = void 0;
4
+ exports.decodeResult = decodeResult;
5
+ const flights_impl_js_1 = require("./flights-impl.js");
6
+ /**
7
+ * NLData wraps a nested list allowing path-based indexing.
8
+ */
9
+ class NLData {
10
+ data;
11
+ constructor(data) {
12
+ this.data = data;
13
+ }
14
+ get(index) {
15
+ return this.data[index];
16
+ }
17
+ getPath(path) {
18
+ let it = this.data;
19
+ for (const index of path) {
20
+ if (!Array.isArray(it)) {
21
+ throw new Error(`Found non-list type while trying to decode path [${path.join(",")}]`);
22
+ }
23
+ if (index >= it.length) {
24
+ throw new Error(`Index ${index} out of range when decoding path [${path.join(",")}]`);
25
+ }
26
+ it = it[index];
27
+ }
28
+ return it;
29
+ }
30
+ get length() {
31
+ return this.data.length;
32
+ }
33
+ }
34
+ exports.NLData = NLData;
35
+ function key(path, decoder) {
36
+ return { path, decoder };
37
+ }
38
+ function decodeField(root, dk) {
39
+ const data = root.getPath(dk.path);
40
+ if (Array.isArray(data) && dk.decoder) {
41
+ return dk.decoder(new NLData(data));
42
+ }
43
+ return data;
44
+ }
45
+ // --- Codeshare Decoder ---
46
+ const CODESHARE_KEYS = {
47
+ airline_code: key([0]),
48
+ flight_number: key([1]),
49
+ airline_name: key([3]),
50
+ };
51
+ function decodeCodeshares(root) {
52
+ return root.data.map((el) => {
53
+ const nlEl = new NLData(el);
54
+ return {
55
+ airline_code: decodeField(nlEl, CODESHARE_KEYS.airline_code),
56
+ flight_number: decodeField(nlEl, CODESHARE_KEYS.flight_number),
57
+ airline_name: decodeField(nlEl, CODESHARE_KEYS.airline_name),
58
+ };
59
+ });
60
+ }
61
+ // --- Flight Decoder ---
62
+ const FLIGHT_KEYS = {
63
+ operator: key([2]),
64
+ departure_airport: key([3]),
65
+ departure_airport_name: key([4]),
66
+ arrival_airport: key([5]),
67
+ arrival_airport_name: key([6]),
68
+ departure_time: key([8]),
69
+ arrival_time: key([10]),
70
+ travel_time: key([11]),
71
+ seat_pitch_short: key([14]),
72
+ codeshares: key([15], decodeCodeshares),
73
+ aircraft: key([17]),
74
+ departure_date: key([20]),
75
+ arrival_date: key([21]),
76
+ airline: key([22, 0]),
77
+ airline_name: key([22, 3]),
78
+ flight_number: key([22, 1]),
79
+ };
80
+ function decodeFlights(root) {
81
+ return root.data.map((el) => {
82
+ const nlEl = new NLData(el);
83
+ return {
84
+ airline: decodeField(nlEl, FLIGHT_KEYS.airline),
85
+ airline_name: decodeField(nlEl, FLIGHT_KEYS.airline_name),
86
+ flight_number: decodeField(nlEl, FLIGHT_KEYS.flight_number),
87
+ operator: decodeField(nlEl, FLIGHT_KEYS.operator),
88
+ codeshares: decodeField(nlEl, FLIGHT_KEYS.codeshares),
89
+ aircraft: decodeField(nlEl, FLIGHT_KEYS.aircraft),
90
+ departure_airport: decodeField(nlEl, FLIGHT_KEYS.departure_airport),
91
+ departure_airport_name: decodeField(nlEl, FLIGHT_KEYS.departure_airport_name),
92
+ arrival_airport: decodeField(nlEl, FLIGHT_KEYS.arrival_airport),
93
+ arrival_airport_name: decodeField(nlEl, FLIGHT_KEYS.arrival_airport_name),
94
+ departure_date: decodeField(nlEl, FLIGHT_KEYS.departure_date),
95
+ arrival_date: decodeField(nlEl, FLIGHT_KEYS.arrival_date),
96
+ departure_time: decodeField(nlEl, FLIGHT_KEYS.departure_time),
97
+ arrival_time: decodeField(nlEl, FLIGHT_KEYS.arrival_time),
98
+ travel_time: decodeField(nlEl, FLIGHT_KEYS.travel_time),
99
+ seat_pitch_short: decodeField(nlEl, FLIGHT_KEYS.seat_pitch_short),
100
+ };
101
+ });
102
+ }
103
+ // --- Layover Decoder ---
104
+ const LAYOVER_KEYS = {
105
+ minutes: key([0]),
106
+ departure_airport: key([1]),
107
+ arrival_airport: key([2]),
108
+ departure_airport_name: key([4]),
109
+ departure_airport_city: key([5]),
110
+ arrival_airport_name: key([6]),
111
+ arrival_airport_city: key([7]),
112
+ };
113
+ function decodeLayovers(root) {
114
+ return root.data.map((el) => {
115
+ const nlEl = new NLData(el);
116
+ return {
117
+ minutes: decodeField(nlEl, LAYOVER_KEYS.minutes),
118
+ departure_airport: decodeField(nlEl, LAYOVER_KEYS.departure_airport),
119
+ departure_airport_name: decodeField(nlEl, LAYOVER_KEYS.departure_airport_name),
120
+ departure_airport_city: decodeField(nlEl, LAYOVER_KEYS.departure_airport_city),
121
+ arrival_airport: decodeField(nlEl, LAYOVER_KEYS.arrival_airport),
122
+ arrival_airport_name: decodeField(nlEl, LAYOVER_KEYS.arrival_airport_name),
123
+ arrival_airport_city: decodeField(nlEl, LAYOVER_KEYS.arrival_airport_city),
124
+ };
125
+ });
126
+ }
127
+ // --- Itinerary Decoder ---
128
+ const ITINERARY_KEYS = {
129
+ airline_code: key([0, 0]),
130
+ airline_names: key([0, 1]),
131
+ flights: key([0, 2], decodeFlights),
132
+ departure_airport: key([0, 3]),
133
+ departure_date: key([0, 4]),
134
+ departure_time: key([0, 5]),
135
+ arrival_airport: key([0, 6]),
136
+ arrival_date: key([0, 7]),
137
+ arrival_time: key([0, 8]),
138
+ travel_time: key([0, 9]),
139
+ layovers: key([0, 13], decodeLayovers),
140
+ itinerary_summary: key([1], (data) => (0, flights_impl_js_1.parseItinerarySummary)(data.get(1))),
141
+ };
142
+ function decodeItineraries(root) {
143
+ return root.data.map((el) => {
144
+ const nlEl = new NLData(el);
145
+ return {
146
+ airline_code: decodeField(nlEl, ITINERARY_KEYS.airline_code),
147
+ airline_names: decodeField(nlEl, ITINERARY_KEYS.airline_names),
148
+ flights: decodeField(nlEl, ITINERARY_KEYS.flights),
149
+ layovers: decodeField(nlEl, ITINERARY_KEYS.layovers),
150
+ travel_time: decodeField(nlEl, ITINERARY_KEYS.travel_time),
151
+ departure_airport: decodeField(nlEl, ITINERARY_KEYS.departure_airport),
152
+ arrival_airport: decodeField(nlEl, ITINERARY_KEYS.arrival_airport),
153
+ departure_date: decodeField(nlEl, ITINERARY_KEYS.departure_date),
154
+ arrival_date: decodeField(nlEl, ITINERARY_KEYS.arrival_date),
155
+ departure_time: decodeField(nlEl, ITINERARY_KEYS.departure_time),
156
+ arrival_time: decodeField(nlEl, ITINERARY_KEYS.arrival_time),
157
+ itinerary_summary: decodeField(nlEl, ITINERARY_KEYS.itinerary_summary),
158
+ };
159
+ });
160
+ }
161
+ // --- Result Decoder ---
162
+ const RESULT_KEYS = {
163
+ best: key([2, 0], decodeItineraries),
164
+ other: key([3, 0], decodeItineraries),
165
+ };
166
+ function decodeResult(root) {
167
+ const nlRoot = new NLData(root);
168
+ return {
169
+ raw: root,
170
+ best: decodeField(nlRoot, RESULT_KEYS.best),
171
+ other: decodeField(nlRoot, RESULT_KEYS.other),
172
+ };
173
+ }
174
+ //# sourceMappingURL=decoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decoder.js","sourceRoot":"","sources":["../src/decoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { FetchResponse } from "./bright-data-fetch.js";
2
+ export declare function fallbackPlaywrightFetch(params: Record<string, string>): Promise<FetchResponse>;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fallbackPlaywrightFetch = fallbackPlaywrightFetch;
4
+ const CODE = `\
5
+ import asyncio
6
+ import sys
7
+ from playwright.async_api import async_playwright
8
+
9
+ async def main():
10
+ async with async_playwright() as p:
11
+ browser = await p.chromium.launch()
12
+ page = await browser.new_page()
13
+ await page.goto("%URL%")
14
+ locator = page.locator('.eQ35Ce')
15
+ await locator.wait_for()
16
+ body = await page.evaluate(
17
+ \"\"\"() => {
18
+ return document.querySelector('[role="main"]').innerHTML
19
+ }\"\"\"
20
+ )
21
+ await browser.close()
22
+ sys.stdout.write(body)
23
+
24
+ asyncio.run(main())
25
+ `;
26
+ async function fallbackPlaywrightFetch(params) {
27
+ const queryString = new URLSearchParams(params).toString();
28
+ const url = `https://www.google.com/travel/flights?${queryString}`;
29
+ const res = await fetch("https://try.playwright.tech/service/control/run", {
30
+ method: "POST",
31
+ headers: { "Content-Type": "application/json" },
32
+ body: JSON.stringify({
33
+ code: CODE.replace("%URL%", url),
34
+ language: "python",
35
+ }),
36
+ });
37
+ if (res.status !== 200) {
38
+ throw new Error(`${res.status} Result: ${await res.text()}`);
39
+ }
40
+ const json = (await res.json());
41
+ return { status_code: 200, text: json.output };
42
+ }
43
+ //# sourceMappingURL=fallback-playwright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback-playwright.js","sourceRoot":"","sources":["../src/fallback-playwright.ts"],"names":[],"mappings":";;AAyBA,0DAwBC;AA/CD,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBZ,CAAC;AAEK,KAAK,UAAU,uBAAuB,CAC3C,MAA8B;IAE9B,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3D,MAAM,GAAG,GAAG,yCAAyC,WAAW,EAAE,CAAC;IAEnE,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,iDAAiD,EACjD;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;YAChC,QAAQ,EAAE,QAAQ;SACnB,CAAC;KACH,CACF,CAAC;IAEF,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,YAAY,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC;IACtD,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { FlightData, Passengers, TFSData, type TripType, type SeatType } from "./flights-impl.js";
2
+ export declare function createFilter(opts: {
3
+ flight_data: FlightData[];
4
+ trip: TripType;
5
+ passengers: Passengers;
6
+ seat: SeatType;
7
+ max_stops?: number;
8
+ }): TFSData;
9
+ export { TFSData };
package/dist/filter.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TFSData = void 0;
4
+ exports.createFilter = createFilter;
5
+ const flights_impl_js_1 = require("./flights-impl.js");
6
+ Object.defineProperty(exports, "TFSData", { enumerable: true, get: function () { return flights_impl_js_1.TFSData; } });
7
+ function createFilter(opts) {
8
+ if (opts.max_stops !== undefined) {
9
+ for (const fd of opts.flight_data) {
10
+ fd.max_stops = opts.max_stops;
11
+ }
12
+ }
13
+ return flights_impl_js_1.TFSData.fromInterface({
14
+ flight_data: opts.flight_data,
15
+ trip: opts.trip,
16
+ passengers: opts.passengers,
17
+ seat: opts.seat,
18
+ });
19
+ }
20
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":";;;AAEA,oCAmBC;AArBD,uDAAkG;AAuBzF,wFAvBwB,yBAAO,OAuBxB;AArBhB,SAAgB,YAAY,CAAC,IAM5B;IACC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACjC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,yBAAO,CAAC,aAAa,CAAC;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { Seat, Trip, Passenger, type FlightDataProto, type InfoProto } from "./proto/encode.js";
2
+ export { Seat, Trip, Passenger };
3
+ export declare class FlightData {
4
+ date: string;
5
+ from_airport: string;
6
+ to_airport: string;
7
+ max_stops?: number;
8
+ airlines?: string[];
9
+ constructor(opts: {
10
+ date: string;
11
+ from_airport: string;
12
+ to_airport: string;
13
+ max_stops?: number;
14
+ airlines?: string[];
15
+ });
16
+ toProto(): FlightDataProto;
17
+ }
18
+ export declare class Passengers {
19
+ private _passengers;
20
+ private _data;
21
+ constructor(opts?: {
22
+ adults?: number;
23
+ children?: number;
24
+ infants_in_seat?: number;
25
+ infants_on_lap?: number;
26
+ });
27
+ getPassengers(): Passenger[];
28
+ toString(): string;
29
+ }
30
+ export type TripType = "round-trip" | "one-way" | "multi-city";
31
+ export type SeatType = "economy" | "premium-economy" | "business" | "first";
32
+ export declare class TFSData {
33
+ flight_data: FlightData[];
34
+ seat: Seat;
35
+ trip: Trip;
36
+ passengers: Passengers;
37
+ max_stops?: number;
38
+ constructor(opts: {
39
+ flight_data: FlightData[];
40
+ seat: Seat;
41
+ trip: Trip;
42
+ passengers: Passengers;
43
+ max_stops?: number;
44
+ });
45
+ static fromInterface(opts: {
46
+ flight_data: FlightData[];
47
+ trip: TripType;
48
+ passengers: Passengers;
49
+ seat: SeatType;
50
+ max_stops?: number;
51
+ }): TFSData;
52
+ toProto(): InfoProto;
53
+ toBytes(): Uint8Array;
54
+ toBase64(): string;
55
+ }
56
+ export interface ItinerarySummary {
57
+ flights: string;
58
+ price: number;
59
+ currency: string;
60
+ }
61
+ export declare function parseItinerarySummary(b64: string): ItinerarySummary;
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TFSData = exports.Passengers = exports.FlightData = exports.Passenger = exports.Trip = exports.Seat = void 0;
4
+ exports.parseItinerarySummary = parseItinerarySummary;
5
+ const airports_js_1 = require("./airports.js");
6
+ const encode_js_1 = require("./proto/encode.js");
7
+ Object.defineProperty(exports, "Seat", { enumerable: true, get: function () { return encode_js_1.Seat; } });
8
+ Object.defineProperty(exports, "Trip", { enumerable: true, get: function () { return encode_js_1.Trip; } });
9
+ Object.defineProperty(exports, "Passenger", { enumerable: true, get: function () { return encode_js_1.Passenger; } });
10
+ const encode_js_2 = require("./proto/encode.js");
11
+ const AIRLINE_ALLIANCES = ["SKYTEAM", "STAR_ALLIANCE", "ONEWORLD"];
12
+ class FlightData {
13
+ date;
14
+ from_airport;
15
+ to_airport;
16
+ max_stops;
17
+ airlines;
18
+ constructor(opts) {
19
+ this.date = opts.date;
20
+ // Resolve airport code from AIRPORTS enum name if it matches, otherwise use raw code
21
+ this.from_airport = resolveAirport(opts.from_airport);
22
+ this.to_airport = resolveAirport(opts.to_airport);
23
+ this.max_stops = opts.max_stops;
24
+ if (opts.airlines) {
25
+ this.airlines = [];
26
+ for (const airline of opts.airlines) {
27
+ const upper = airline.toUpperCase();
28
+ if (upper.length !== 2 &&
29
+ !AIRLINE_ALLIANCES.includes(upper)) {
30
+ throw new Error(`Invalid airline code: ${airline}. ` +
31
+ `Airline codes should be 2 characters long or in the list of airline alliances: ${AIRLINE_ALLIANCES.join(", ")}`);
32
+ }
33
+ this.airlines.push(upper);
34
+ }
35
+ }
36
+ }
37
+ toProto() {
38
+ return {
39
+ date: this.date,
40
+ from_airport: this.from_airport,
41
+ to_airport: this.to_airport,
42
+ max_stops: this.max_stops,
43
+ airlines: this.airlines,
44
+ };
45
+ }
46
+ }
47
+ exports.FlightData = FlightData;
48
+ class Passengers {
49
+ _passengers;
50
+ _data;
51
+ constructor(opts = {}) {
52
+ const adults = opts.adults ?? 0;
53
+ const children = opts.children ?? 0;
54
+ const infants_in_seat = opts.infants_in_seat ?? 0;
55
+ const infants_on_lap = opts.infants_on_lap ?? 0;
56
+ const total = adults + children + infants_in_seat + infants_on_lap;
57
+ if (total > 9) {
58
+ throw new Error("Too many passengers (> 9)");
59
+ }
60
+ if (infants_on_lap > adults) {
61
+ throw new Error("You must have at least one adult per infant on lap");
62
+ }
63
+ this._passengers = [
64
+ ...Array(adults).fill(encode_js_1.Passenger.ADULT),
65
+ ...Array(children).fill(encode_js_1.Passenger.CHILD),
66
+ ...Array(infants_in_seat).fill(encode_js_1.Passenger.INFANT_IN_SEAT),
67
+ ...Array(infants_on_lap).fill(encode_js_1.Passenger.INFANT_ON_LAP),
68
+ ];
69
+ this._data = [adults, children, infants_in_seat, infants_on_lap];
70
+ }
71
+ getPassengers() {
72
+ return this._passengers;
73
+ }
74
+ toString() {
75
+ return `Passengers(${this._data.join(", ")})`;
76
+ }
77
+ }
78
+ exports.Passengers = Passengers;
79
+ class TFSData {
80
+ flight_data;
81
+ seat;
82
+ trip;
83
+ passengers;
84
+ max_stops;
85
+ constructor(opts) {
86
+ this.flight_data = opts.flight_data;
87
+ this.seat = opts.seat;
88
+ this.trip = opts.trip;
89
+ this.passengers = opts.passengers;
90
+ this.max_stops = opts.max_stops;
91
+ }
92
+ static fromInterface(opts) {
93
+ const tripMap = {
94
+ "round-trip": encode_js_1.Trip.ROUND_TRIP,
95
+ "one-way": encode_js_1.Trip.ONE_WAY,
96
+ "multi-city": encode_js_1.Trip.MULTI_CITY,
97
+ };
98
+ const seatMap = {
99
+ economy: encode_js_1.Seat.ECONOMY,
100
+ "premium-economy": encode_js_1.Seat.PREMIUM_ECONOMY,
101
+ business: encode_js_1.Seat.BUSINESS,
102
+ first: encode_js_1.Seat.FIRST,
103
+ };
104
+ return new TFSData({
105
+ flight_data: opts.flight_data,
106
+ seat: seatMap[opts.seat],
107
+ trip: tripMap[opts.trip],
108
+ passengers: opts.passengers,
109
+ max_stops: opts.max_stops,
110
+ });
111
+ }
112
+ toProto() {
113
+ const data = this.flight_data.map((fd) => {
114
+ const proto = fd.toProto();
115
+ if (this.max_stops !== undefined) {
116
+ proto.max_stops = this.max_stops;
117
+ }
118
+ return proto;
119
+ });
120
+ return {
121
+ data,
122
+ passengers: this.passengers.getPassengers(),
123
+ seat: this.seat,
124
+ trip: this.trip,
125
+ };
126
+ }
127
+ toBytes() {
128
+ return (0, encode_js_1.encodeInfo)(this.toProto());
129
+ }
130
+ toBase64() {
131
+ const bytes = this.toBytes();
132
+ // Convert Uint8Array to base64
133
+ let binary = "";
134
+ for (const byte of bytes) {
135
+ binary += String.fromCharCode(byte);
136
+ }
137
+ return btoa(binary);
138
+ }
139
+ }
140
+ exports.TFSData = TFSData;
141
+ function parseItinerarySummary(b64) {
142
+ return (0, encode_js_2.decodeItinerarySummary)(b64);
143
+ }
144
+ // Helper to resolve airport: if the string is an AIRPORTS key, return its code; otherwise treat as raw code
145
+ function resolveAirport(input) {
146
+ if (input in airports_js_1.AIRPORTS) {
147
+ return airports_js_1.AIRPORTS[input];
148
+ }
149
+ return input;
150
+ }
151
+ //# sourceMappingURL=flights-impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flights-impl.js","sourceRoot":"","sources":["../src/flights-impl.ts"],"names":[],"mappings":";;;AAwMA,sDAEC;AA1MD,+CAAyC;AACzC,iDAO2B;AAGlB,qFARP,gBAAI,OAQO;AAAE,qFAPb,gBAAI,OAOa;AAAE,0FANnB,qBAAS,OAMmB;AAF9B,iDAA2D;AAI3D,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,UAAU,CAAU,CAAC;AAE5E,MAAa,UAAU;IACrB,IAAI,CAAS;IACb,YAAY,CAAS;IACrB,UAAU,CAAS;IACnB,SAAS,CAAU;IACnB,QAAQ,CAAY;IAEpB,YAAY,IAMX;QACC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEtB,qFAAqF;QACrF,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAEhC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;gBACpC,IACE,KAAK,CAAC,MAAM,KAAK,CAAC;oBAClB,CAAE,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC,EACzD,CAAC;oBACD,MAAM,IAAI,KAAK,CACb,yBAAyB,OAAO,IAAI;wBAClC,kFAAkF,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnH,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;CACF;AAhDD,gCAgDC;AAED,MAAa,UAAU;IACb,WAAW,CAAc;IACzB,KAAK,CAAmC;IAEhD,YACE,OAKI,EAAE;QAEN,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACpC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QAEhD,MAAM,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,eAAe,GAAG,cAAc,CAAC;QACnE,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,cAAc,GAAG,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,oDAAoD,CACrD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,WAAW,GAAG;YACjB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,qBAAS,CAAC,KAAK,CAAC;YACtC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,qBAAS,CAAC,KAAK,CAAC;YACxC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,qBAAS,CAAC,cAAc,CAAC;YACxD,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,qBAAS,CAAC,aAAa,CAAC;SACvD,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;IACnE,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,QAAQ;QACN,OAAO,cAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAChD,CAAC;CACF;AA3CD,gCA2CC;AAKD,MAAa,OAAO;IAClB,WAAW,CAAe;IAC1B,IAAI,CAAO;IACX,IAAI,CAAO;IACX,UAAU,CAAa;IACvB,SAAS,CAAU;IAEnB,YAAY,IAMX;QACC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,IAMpB;QACC,MAAM,OAAO,GAA2B;YACtC,YAAY,EAAE,gBAAI,CAAC,UAAU;YAC7B,SAAS,EAAE,gBAAI,CAAC,OAAO;YACvB,YAAY,EAAE,gBAAI,CAAC,UAAU;SAC9B,CAAC;QACF,MAAM,OAAO,GAA2B;YACtC,OAAO,EAAE,gBAAI,CAAC,OAAO;YACrB,iBAAiB,EAAE,gBAAI,CAAC,eAAe;YACvC,QAAQ,EAAE,gBAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,gBAAI,CAAC,KAAK;SAClB,CAAC;QAEF,OAAO,IAAI,OAAO,CAAC;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACjC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACnC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,IAAI;YACJ,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;YAC3C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,IAAA,sBAAU,EAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,+BAA+B;QAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;CACF;AA/ED,0BA+EC;AAQD,SAAgB,qBAAqB,CAAC,GAAW;IAC/C,OAAO,IAAA,kCAAsB,EAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,4GAA4G;AAC5G,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,IAAI,sBAAQ,EAAE,CAAC;QACtB,OAAO,sBAAQ,CAAC,KAA8B,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { AIRPORTS, type Airport, type AirportCode } from "./airports.js";
2
+ export { FlightData, Passengers, TFSData, Seat, Trip, Passenger } from "./flights-impl.js";
3
+ export type { TripType, SeatType, ItinerarySummary } from "./flights-impl.js";
4
+ export { parseItinerarySummary } from "./flights-impl.js";
5
+ export { createFilter } from "./filter.js";
6
+ export { searchAirport } from "./search.js";
7
+ export { Cookies } from "./cookies-impl.js";
8
+ export { getFlights, getFlightsFromFilter, parseResponse } from "./core.js";
9
+ export type { DataSource, FetchMode, RequestOptions, FetchFn } from "./core.js";
10
+ export type { Flight, Result } from "./schema.js";
11
+ export type { DecodedResult, DecodedFlight, Itinerary, Layover, Codeshare, } from "./decoder.js";
package/dist/index.js ADDED
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseResponse = exports.getFlightsFromFilter = exports.getFlights = exports.Cookies = exports.searchAirport = exports.createFilter = exports.parseItinerarySummary = exports.Passenger = exports.Trip = exports.Seat = exports.TFSData = exports.Passengers = exports.FlightData = exports.AIRPORTS = void 0;
4
+ var airports_js_1 = require("./airports.js");
5
+ Object.defineProperty(exports, "AIRPORTS", { enumerable: true, get: function () { return airports_js_1.AIRPORTS; } });
6
+ var flights_impl_js_1 = require("./flights-impl.js");
7
+ Object.defineProperty(exports, "FlightData", { enumerable: true, get: function () { return flights_impl_js_1.FlightData; } });
8
+ Object.defineProperty(exports, "Passengers", { enumerable: true, get: function () { return flights_impl_js_1.Passengers; } });
9
+ Object.defineProperty(exports, "TFSData", { enumerable: true, get: function () { return flights_impl_js_1.TFSData; } });
10
+ Object.defineProperty(exports, "Seat", { enumerable: true, get: function () { return flights_impl_js_1.Seat; } });
11
+ Object.defineProperty(exports, "Trip", { enumerable: true, get: function () { return flights_impl_js_1.Trip; } });
12
+ Object.defineProperty(exports, "Passenger", { enumerable: true, get: function () { return flights_impl_js_1.Passenger; } });
13
+ var flights_impl_js_2 = require("./flights-impl.js");
14
+ Object.defineProperty(exports, "parseItinerarySummary", { enumerable: true, get: function () { return flights_impl_js_2.parseItinerarySummary; } });
15
+ var filter_js_1 = require("./filter.js");
16
+ Object.defineProperty(exports, "createFilter", { enumerable: true, get: function () { return filter_js_1.createFilter; } });
17
+ var search_js_1 = require("./search.js");
18
+ Object.defineProperty(exports, "searchAirport", { enumerable: true, get: function () { return search_js_1.searchAirport; } });
19
+ var cookies_impl_js_1 = require("./cookies-impl.js");
20
+ Object.defineProperty(exports, "Cookies", { enumerable: true, get: function () { return cookies_impl_js_1.Cookies; } });
21
+ var core_js_1 = require("./core.js");
22
+ Object.defineProperty(exports, "getFlights", { enumerable: true, get: function () { return core_js_1.getFlights; } });
23
+ Object.defineProperty(exports, "getFlightsFromFilter", { enumerable: true, get: function () { return core_js_1.getFlightsFromFilter; } });
24
+ Object.defineProperty(exports, "parseResponse", { enumerable: true, get: function () { return core_js_1.parseResponse; } });
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAAyE;AAAhE,uGAAA,QAAQ,OAAA;AACjB,qDAA2F;AAAlF,6GAAA,UAAU,OAAA;AAAE,6GAAA,UAAU,OAAA;AAAE,0GAAA,OAAO,OAAA;AAAE,uGAAA,IAAI,OAAA;AAAE,uGAAA,IAAI,OAAA;AAAE,4GAAA,SAAS,OAAA;AAE/D,qDAA0D;AAAjD,wHAAA,qBAAqB,OAAA;AAC9B,yCAA2C;AAAlC,yGAAA,YAAY,OAAA;AACrB,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AACtB,qDAA4C;AAAnC,0GAAA,OAAO,OAAA;AAChB,qCAA4E;AAAnE,qGAAA,UAAU,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAAE,wGAAA,aAAa,OAAA"}
@@ -0,0 +1,2 @@
1
+ import type { FetchResponse } from "./bright-data-fetch.js";
2
+ export declare function localPlaywrightFetch(params: Record<string, string>): Promise<FetchResponse>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.localPlaywrightFetch = localPlaywrightFetch;
4
+ async function localPlaywrightFetch(params) {
5
+ // Dynamic import so playwright is only required when this mode is used
6
+ const { chromium } = await import("playwright");
7
+ const queryString = new URLSearchParams(params).toString();
8
+ const url = `https://www.google.com/travel/flights?${queryString}`;
9
+ const browser = await chromium.launch();
10
+ const page = await browser.newPage();
11
+ await page.goto(url, { waitUntil: "networkidle" });
12
+ // Handle consent page
13
+ if (page.url().startsWith("https://consent.google.com")) {
14
+ await page.click('text="Accept all"');
15
+ }
16
+ await page.waitForSelector('[role="main"]', { timeout: 30000 });
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ const body = await page.evaluate(`(() => document.querySelector('[role="main"]').innerHTML)()`);
19
+ await browser.close();
20
+ return { status_code: 200, text: body };
21
+ }
22
+ //# sourceMappingURL=local-playwright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-playwright.js","sourceRoot":"","sources":["../src/local-playwright.ts"],"names":[],"mappings":";;AAEA,oDA0BC;AA1BM,KAAK,UAAU,oBAAoB,CACxC,MAA8B;IAE9B,uEAAuE;IACvE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3D,MAAM,GAAG,GAAG,yCAAyC,WAAW,EAAE,CAAC;IAEnE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;IAEnD,sBAAsB;IACtB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,4BAA4B,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,8DAA8D;IAC9D,MAAM,IAAI,GAAW,MAAM,IAAI,CAAC,QAAQ,CACtC,6DAA6D,CAC9D,CAAC;IACF,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAEtB,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Manual protobuf encoder for Google Flights' tfs parameter.
3
+ *
4
+ * We hand-roll the encoding instead of using a protobuf library because the
5
+ * .proto schema is tiny and fixed, and this avoids the heavy protobufjs
6
+ * dependency at runtime. The wire format is standard protobuf.
7
+ *
8
+ * Reference: https://protobuf.dev/programming-guides/encoding/
9
+ */
10
+ export declare enum Seat {
11
+ UNKNOWN_SEAT = 0,
12
+ ECONOMY = 1,
13
+ PREMIUM_ECONOMY = 2,
14
+ BUSINESS = 3,
15
+ FIRST = 4
16
+ }
17
+ export declare enum Trip {
18
+ UNKNOWN_TRIP = 0,
19
+ ROUND_TRIP = 1,
20
+ ONE_WAY = 2,
21
+ MULTI_CITY = 3
22
+ }
23
+ export declare enum Passenger {
24
+ UNKNOWN_PASSENGER = 0,
25
+ ADULT = 1,
26
+ CHILD = 2,
27
+ INFANT_IN_SEAT = 3,
28
+ INFANT_ON_LAP = 4
29
+ }
30
+ export interface FlightDataProto {
31
+ date: string;
32
+ from_airport: string;
33
+ to_airport: string;
34
+ max_stops?: number;
35
+ airlines?: string[];
36
+ }
37
+ export interface InfoProto {
38
+ data: FlightDataProto[];
39
+ passengers: Passenger[];
40
+ seat: Seat;
41
+ trip: Trip;
42
+ }
43
+ export declare function encodeInfo(info: InfoProto): Uint8Array;
44
+ export declare function encodeItinerarySummary(flights: string, price: number, currency: string): Uint8Array;
45
+ export interface DecodedItinerarySummary {
46
+ flights: string;
47
+ price: number;
48
+ currency: string;
49
+ }
50
+ export declare function decodeItinerarySummary(base64: string): DecodedItinerarySummary;
51
+ export declare function encodeSOCS(gws: string, locale: string, timestamp: number): Uint8Array;