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.
- package/LICENSE +21 -0
- package/README.md +543 -0
- package/dist/airports.d.ts +3315 -0
- package/dist/airports.js +3317 -0
- package/dist/airports.js.map +1 -0
- package/dist/bright-data-fetch.d.ts +5 -0
- package/dist/bright-data-fetch.js +27 -0
- package/dist/bright-data-fetch.js.map +1 -0
- package/dist/cookies-impl.d.ts +16 -0
- package/dist/cookies-impl.js +43 -0
- package/dist/cookies-impl.js.map +1 -0
- package/dist/core.d.ts +41 -0
- package/dist/core.js +243 -0
- package/dist/core.js.map +1 -0
- package/dist/decoder.d.ts +65 -0
- package/dist/decoder.js +174 -0
- package/dist/decoder.js.map +1 -0
- package/dist/fallback-playwright.d.ts +2 -0
- package/dist/fallback-playwright.js +43 -0
- package/dist/fallback-playwright.js.map +1 -0
- package/dist/filter.d.ts +9 -0
- package/dist/filter.js +20 -0
- package/dist/filter.js.map +1 -0
- package/dist/flights-impl.d.ts +61 -0
- package/dist/flights-impl.js +151 -0
- package/dist/flights-impl.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/local-playwright.d.ts +2 -0
- package/dist/local-playwright.js +22 -0
- package/dist/local-playwright.js.map +1 -0
- package/dist/proto/encode.d.ts +51 -0
- package/dist/proto/encode.js +211 -0
- package/dist/proto/encode.js.map +1 -0
- package/dist/schema.d.ts +15 -0
- package/dist/schema.js +3 -0
- package/dist/schema.js.map +1 -0
- package/dist/search.d.ts +5 -0
- package/dist/search.js +15 -0
- package/dist/search.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Manual protobuf encoder for Google Flights' tfs parameter.
|
|
4
|
+
*
|
|
5
|
+
* We hand-roll the encoding instead of using a protobuf library because the
|
|
6
|
+
* .proto schema is tiny and fixed, and this avoids the heavy protobufjs
|
|
7
|
+
* dependency at runtime. The wire format is standard protobuf.
|
|
8
|
+
*
|
|
9
|
+
* Reference: https://protobuf.dev/programming-guides/encoding/
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.Passenger = exports.Trip = exports.Seat = void 0;
|
|
13
|
+
exports.encodeInfo = encodeInfo;
|
|
14
|
+
exports.encodeItinerarySummary = encodeItinerarySummary;
|
|
15
|
+
exports.decodeItinerarySummary = decodeItinerarySummary;
|
|
16
|
+
exports.encodeSOCS = encodeSOCS;
|
|
17
|
+
// Wire types
|
|
18
|
+
const VARINT = 0;
|
|
19
|
+
const LENGTH_DELIMITED = 2;
|
|
20
|
+
function encodeVarint(value) {
|
|
21
|
+
const bytes = [];
|
|
22
|
+
let v = value >>> 0; // ensure unsigned
|
|
23
|
+
while (v > 0x7f) {
|
|
24
|
+
bytes.push((v & 0x7f) | 0x80);
|
|
25
|
+
v >>>= 7;
|
|
26
|
+
}
|
|
27
|
+
bytes.push(v & 0x7f);
|
|
28
|
+
return bytes;
|
|
29
|
+
}
|
|
30
|
+
function encodeTag(fieldNumber, wireType) {
|
|
31
|
+
return encodeVarint((fieldNumber << 3) | wireType);
|
|
32
|
+
}
|
|
33
|
+
function encodeString(fieldNumber, value) {
|
|
34
|
+
const encoded = new TextEncoder().encode(value);
|
|
35
|
+
return [
|
|
36
|
+
...encodeTag(fieldNumber, LENGTH_DELIMITED),
|
|
37
|
+
...encodeVarint(encoded.length),
|
|
38
|
+
...encoded,
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
function encodeVarintField(fieldNumber, value) {
|
|
42
|
+
return [...encodeTag(fieldNumber, VARINT), ...encodeVarint(value)];
|
|
43
|
+
}
|
|
44
|
+
function encodeMessage(fieldNumber, content) {
|
|
45
|
+
return [
|
|
46
|
+
...encodeTag(fieldNumber, LENGTH_DELIMITED),
|
|
47
|
+
...encodeVarint(content.length),
|
|
48
|
+
...content,
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
// --- Enums matching flights.proto ---
|
|
52
|
+
var Seat;
|
|
53
|
+
(function (Seat) {
|
|
54
|
+
Seat[Seat["UNKNOWN_SEAT"] = 0] = "UNKNOWN_SEAT";
|
|
55
|
+
Seat[Seat["ECONOMY"] = 1] = "ECONOMY";
|
|
56
|
+
Seat[Seat["PREMIUM_ECONOMY"] = 2] = "PREMIUM_ECONOMY";
|
|
57
|
+
Seat[Seat["BUSINESS"] = 3] = "BUSINESS";
|
|
58
|
+
Seat[Seat["FIRST"] = 4] = "FIRST";
|
|
59
|
+
})(Seat || (exports.Seat = Seat = {}));
|
|
60
|
+
var Trip;
|
|
61
|
+
(function (Trip) {
|
|
62
|
+
Trip[Trip["UNKNOWN_TRIP"] = 0] = "UNKNOWN_TRIP";
|
|
63
|
+
Trip[Trip["ROUND_TRIP"] = 1] = "ROUND_TRIP";
|
|
64
|
+
Trip[Trip["ONE_WAY"] = 2] = "ONE_WAY";
|
|
65
|
+
Trip[Trip["MULTI_CITY"] = 3] = "MULTI_CITY";
|
|
66
|
+
})(Trip || (exports.Trip = Trip = {}));
|
|
67
|
+
var Passenger;
|
|
68
|
+
(function (Passenger) {
|
|
69
|
+
Passenger[Passenger["UNKNOWN_PASSENGER"] = 0] = "UNKNOWN_PASSENGER";
|
|
70
|
+
Passenger[Passenger["ADULT"] = 1] = "ADULT";
|
|
71
|
+
Passenger[Passenger["CHILD"] = 2] = "CHILD";
|
|
72
|
+
Passenger[Passenger["INFANT_IN_SEAT"] = 3] = "INFANT_IN_SEAT";
|
|
73
|
+
Passenger[Passenger["INFANT_ON_LAP"] = 4] = "INFANT_ON_LAP";
|
|
74
|
+
})(Passenger || (exports.Passenger = Passenger = {}));
|
|
75
|
+
// --- Encode an Airport sub-message (field 2 = airport string) ---
|
|
76
|
+
function encodeAirport(code) {
|
|
77
|
+
return encodeString(2, code);
|
|
78
|
+
}
|
|
79
|
+
function encodeFlightData(fd) {
|
|
80
|
+
const bytes = [];
|
|
81
|
+
// field 2: date (string)
|
|
82
|
+
bytes.push(...encodeString(2, fd.date));
|
|
83
|
+
// field 5: max_stops (optional int32)
|
|
84
|
+
if (fd.max_stops !== undefined && fd.max_stops !== null) {
|
|
85
|
+
bytes.push(...encodeVarintField(5, fd.max_stops));
|
|
86
|
+
}
|
|
87
|
+
// field 6: airlines (repeated string)
|
|
88
|
+
if (fd.airlines) {
|
|
89
|
+
for (const airline of fd.airlines) {
|
|
90
|
+
bytes.push(...encodeString(6, airline));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// field 13: from_flight (Airport message)
|
|
94
|
+
bytes.push(...encodeMessage(13, encodeAirport(fd.from_airport)));
|
|
95
|
+
// field 14: to_flight (Airport message)
|
|
96
|
+
bytes.push(...encodeMessage(14, encodeAirport(fd.to_airport)));
|
|
97
|
+
return bytes;
|
|
98
|
+
}
|
|
99
|
+
function encodeInfo(info) {
|
|
100
|
+
const bytes = [];
|
|
101
|
+
// field 3: data (repeated FlightData)
|
|
102
|
+
for (const fd of info.data) {
|
|
103
|
+
bytes.push(...encodeMessage(3, encodeFlightData(fd)));
|
|
104
|
+
}
|
|
105
|
+
// field 8: passengers (repeated enum/varint)
|
|
106
|
+
for (const p of info.passengers) {
|
|
107
|
+
bytes.push(...encodeVarintField(8, p));
|
|
108
|
+
}
|
|
109
|
+
// field 9: seat (enum/varint)
|
|
110
|
+
bytes.push(...encodeVarintField(9, info.seat));
|
|
111
|
+
// field 19: trip (enum/varint)
|
|
112
|
+
bytes.push(...encodeVarintField(19, info.trip));
|
|
113
|
+
return new Uint8Array(bytes);
|
|
114
|
+
}
|
|
115
|
+
// --- Encode Price message ---
|
|
116
|
+
function encodePrice(price, currency) {
|
|
117
|
+
const bytes = [];
|
|
118
|
+
bytes.push(...encodeVarintField(1, price));
|
|
119
|
+
bytes.push(...encodeString(3, currency));
|
|
120
|
+
return bytes;
|
|
121
|
+
}
|
|
122
|
+
// --- Encode ItinerarySummary message ---
|
|
123
|
+
function encodeItinerarySummary(flights, price, currency) {
|
|
124
|
+
const bytes = [];
|
|
125
|
+
bytes.push(...encodeString(2, flights));
|
|
126
|
+
bytes.push(...encodeMessage(3, encodePrice(price, currency)));
|
|
127
|
+
return new Uint8Array(bytes);
|
|
128
|
+
}
|
|
129
|
+
// --- Decode helpers for ItinerarySummary from base64 ---
|
|
130
|
+
function decodeVarintAt(buf, offset) {
|
|
131
|
+
let value = 0;
|
|
132
|
+
let shift = 0;
|
|
133
|
+
let pos = offset;
|
|
134
|
+
while (pos < buf.length) {
|
|
135
|
+
const byte = buf[pos];
|
|
136
|
+
value |= (byte & 0x7f) << shift;
|
|
137
|
+
pos++;
|
|
138
|
+
if ((byte & 0x80) === 0)
|
|
139
|
+
break;
|
|
140
|
+
shift += 7;
|
|
141
|
+
}
|
|
142
|
+
return { value, newOffset: pos };
|
|
143
|
+
}
|
|
144
|
+
function decodeFields(buf) {
|
|
145
|
+
const fields = [];
|
|
146
|
+
let offset = 0;
|
|
147
|
+
while (offset < buf.length) {
|
|
148
|
+
const tag = decodeVarintAt(buf, offset);
|
|
149
|
+
offset = tag.newOffset;
|
|
150
|
+
const fieldNumber = tag.value >>> 3;
|
|
151
|
+
const wireType = tag.value & 0x7;
|
|
152
|
+
if (wireType === VARINT) {
|
|
153
|
+
const val = decodeVarintAt(buf, offset);
|
|
154
|
+
offset = val.newOffset;
|
|
155
|
+
fields.push({ fieldNumber, wireType, value: val.value });
|
|
156
|
+
}
|
|
157
|
+
else if (wireType === LENGTH_DELIMITED) {
|
|
158
|
+
const len = decodeVarintAt(buf, offset);
|
|
159
|
+
offset = len.newOffset;
|
|
160
|
+
const value = buf.slice(offset, offset + len.value);
|
|
161
|
+
offset += len.value;
|
|
162
|
+
fields.push({ fieldNumber, wireType, value });
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
// Skip unknown wire types (won't encounter for our schema)
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return fields;
|
|
170
|
+
}
|
|
171
|
+
function decodeItinerarySummary(base64) {
|
|
172
|
+
const buf = Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));
|
|
173
|
+
const fields = decodeFields(buf);
|
|
174
|
+
let flights = "";
|
|
175
|
+
let price = 0;
|
|
176
|
+
let currency = "";
|
|
177
|
+
for (const f of fields) {
|
|
178
|
+
if (f.fieldNumber === 2 && f.value instanceof Uint8Array) {
|
|
179
|
+
flights = new TextDecoder().decode(f.value);
|
|
180
|
+
}
|
|
181
|
+
if (f.fieldNumber === 3 && f.value instanceof Uint8Array) {
|
|
182
|
+
// nested Price message
|
|
183
|
+
const priceFields = decodeFields(f.value);
|
|
184
|
+
for (const pf of priceFields) {
|
|
185
|
+
if (pf.fieldNumber === 1 && typeof pf.value === "number") {
|
|
186
|
+
price = pf.value;
|
|
187
|
+
}
|
|
188
|
+
if (pf.fieldNumber === 3 && pf.value instanceof Uint8Array) {
|
|
189
|
+
currency = new TextDecoder().decode(pf.value);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return { flights, price: price / 100, currency };
|
|
195
|
+
}
|
|
196
|
+
// --- SOCS cookie encoding ---
|
|
197
|
+
function encodeSOCS(gws, locale, timestamp) {
|
|
198
|
+
// Information message: field 2 = gws, field 3 = locale
|
|
199
|
+
const infoBytes = [];
|
|
200
|
+
infoBytes.push(...encodeString(2, gws));
|
|
201
|
+
infoBytes.push(...encodeString(3, locale));
|
|
202
|
+
// Datetime message: field 1 = timestamp (uint32)
|
|
203
|
+
const datetimeBytes = [];
|
|
204
|
+
datetimeBytes.push(...encodeVarintField(1, timestamp));
|
|
205
|
+
// SOCS message: field 2 = info, field 3 = datetime
|
|
206
|
+
const socsBytes = [];
|
|
207
|
+
socsBytes.push(...encodeMessage(2, infoBytes));
|
|
208
|
+
socsBytes.push(...encodeMessage(3, datetimeBytes));
|
|
209
|
+
return new Uint8Array(socsBytes);
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=encode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/proto/encode.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface Flight {
|
|
2
|
+
is_best: boolean;
|
|
3
|
+
name: string;
|
|
4
|
+
departure: string;
|
|
5
|
+
arrival: string;
|
|
6
|
+
arrival_time_ahead: string;
|
|
7
|
+
duration: string;
|
|
8
|
+
stops: number | string;
|
|
9
|
+
delay: string | null;
|
|
10
|
+
price: string;
|
|
11
|
+
}
|
|
12
|
+
export interface Result {
|
|
13
|
+
current_price: "low" | "typical" | "high" | string;
|
|
14
|
+
flights: Flight[];
|
|
15
|
+
}
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":""}
|
package/dist/search.d.ts
ADDED
package/dist/search.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.searchAirport = searchAirport;
|
|
4
|
+
const airports_js_1 = require("./airports.js");
|
|
5
|
+
function searchAirport(query) {
|
|
6
|
+
const lowerQuery = query.toLowerCase();
|
|
7
|
+
const results = [];
|
|
8
|
+
for (const [name, code] of Object.entries(airports_js_1.AIRPORTS)) {
|
|
9
|
+
if (name.toLowerCase().includes(lowerQuery)) {
|
|
10
|
+
results.push({ name: name, code });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return results;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":";;AAEA,sCAWC;AAbD,+CAAuD;AAEvD,SAAgB,aAAa,CAAC,KAAa;IACzC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,OAAO,GAA2C,EAAE,CAAC;IAE3D,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,sBAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "google-flights-ts",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A fast, robust, strongly-typed Google Flights scraper for Node.js",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"README.md",
|
|
10
|
+
"LICENSE"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"test": "vitest run",
|
|
15
|
+
"test:watch": "vitest",
|
|
16
|
+
"prepublishOnly": "npm run build && npm test"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"google-flights",
|
|
20
|
+
"flights",
|
|
21
|
+
"scraper",
|
|
22
|
+
"flight-search",
|
|
23
|
+
"travel",
|
|
24
|
+
"airfare",
|
|
25
|
+
"flight-prices"
|
|
26
|
+
],
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "https://github.com/wooldox/google-flights-ts.git"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/wooldox/google-flights-ts#readme",
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/wooldox/google-flights-ts/issues"
|
|
34
|
+
},
|
|
35
|
+
"author": "wooldox",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18.0.0"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"cheerio": "^1.0.0"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/node": "^22.0.0",
|
|
45
|
+
"typescript": "^5.6.0",
|
|
46
|
+
"vitest": "^3.0.0"
|
|
47
|
+
},
|
|
48
|
+
"optionalDependencies": {
|
|
49
|
+
"playwright": "^1.48.0"
|
|
50
|
+
}
|
|
51
|
+
}
|