googlemaps-kit 0.5.0 → 0.7.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/README.md +56 -3
- package/dist/advanced/parsers.d.ts +1 -1
- package/dist/advanced/parsers.d.ts.map +1 -1
- package/dist/advanced/parsers.js +1 -1
- package/dist/advanced/parsers.js.map +1 -1
- package/dist/advanced.d.ts +2 -2
- package/dist/advanced.d.ts.map +1 -1
- package/dist/advanced.js.map +1 -1
- package/dist/books.d.ts +30 -0
- package/dist/books.d.ts.map +1 -0
- package/dist/books.js +77 -0
- package/dist/books.js.map +1 -0
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +9 -11
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/tui/app.d.ts.map +1 -1
- package/dist/cli/tui/app.js +7 -7
- package/dist/cli/tui/app.js.map +1 -1
- package/dist/cli.js +14 -11
- package/dist/cli.js.map +1 -1
- package/dist/client/gmaps-client.d.ts +7 -29
- package/dist/client/gmaps-client.d.ts.map +1 -1
- package/dist/client/gmaps-client.js +15 -131
- package/dist/client/gmaps-client.js.map +1 -1
- package/dist/client/http-client.d.ts +3 -1
- package/dist/client/http-client.d.ts.map +1 -1
- package/dist/client/http-client.js +14 -3
- package/dist/client/http-client.js.map +1 -1
- package/dist/client/intent.d.ts +1 -11
- package/dist/client/intent.d.ts.map +1 -1
- package/dist/client/intent.js +17 -13
- package/dist/client/intent.js.map +1 -1
- package/dist/client/maps-tools.d.ts +8 -4
- package/dist/client/maps-tools.d.ts.map +1 -1
- package/dist/client/maps-tools.js +20 -11
- package/dist/client/maps-tools.js.map +1 -1
- package/dist/client/namespaces.d.ts +51 -19
- package/dist/client/namespaces.d.ts.map +1 -1
- package/dist/client/namespaces.js +82 -28
- package/dist/client/namespaces.js.map +1 -1
- package/dist/client/place-workflows.d.ts +7 -0
- package/dist/client/place-workflows.d.ts.map +1 -0
- package/dist/client/place-workflows.js +113 -0
- package/dist/client/place-workflows.js.map +1 -0
- package/dist/finance/client.d.ts +19 -0
- package/dist/finance/client.d.ts.map +1 -0
- package/dist/finance/client.js +75 -0
- package/dist/finance/client.js.map +1 -0
- package/dist/finance/parsers.d.ts +13 -0
- package/dist/finance/parsers.d.ts.map +1 -0
- package/dist/finance/parsers.js +146 -0
- package/dist/finance/parsers.js.map +1 -0
- package/dist/finance/types.d.ts +76 -0
- package/dist/finance/types.d.ts.map +1 -0
- package/dist/finance/types.js +2 -0
- package/dist/finance/types.js.map +1 -0
- package/dist/finance.d.ts +5 -0
- package/dist/finance.d.ts.map +1 -0
- package/dist/finance.js +4 -0
- package/dist/finance.js.map +1 -0
- package/dist/flights/client.d.ts +9 -0
- package/dist/flights/client.d.ts.map +1 -0
- package/dist/flights/client.js +14 -0
- package/dist/flights/client.js.map +1 -0
- package/dist/flights/parsers.d.ts +11 -0
- package/dist/flights/parsers.d.ts.map +1 -0
- package/dist/flights/parsers.js +64 -0
- package/dist/flights/parsers.js.map +1 -0
- package/dist/flights/types.d.ts +52 -0
- package/dist/flights/types.d.ts.map +1 -0
- package/dist/flights/types.js +2 -0
- package/dist/flights/types.js.map +1 -0
- package/dist/flights.d.ts +5 -0
- package/dist/flights.d.ts.map +1 -0
- package/dist/flights.js +4 -0
- package/dist/flights.js.map +1 -0
- package/dist/gemini-web/client.d.ts +16 -0
- package/dist/gemini-web/client.d.ts.map +1 -0
- package/dist/gemini-web/client.js +110 -0
- package/dist/gemini-web/client.js.map +1 -0
- package/dist/gemini-web/parsers.d.ts +5 -0
- package/dist/gemini-web/parsers.d.ts.map +1 -0
- package/dist/gemini-web/parsers.js +62 -0
- package/dist/gemini-web/parsers.js.map +1 -0
- package/dist/gemini-web/types.d.ts +47 -0
- package/dist/gemini-web/types.d.ts.map +1 -0
- package/dist/gemini-web/types.js +2 -0
- package/dist/gemini-web/types.js.map +1 -0
- package/dist/gemini-web.d.ts +5 -0
- package/dist/gemini-web.d.ts.map +1 -0
- package/dist/gemini-web.js +4 -0
- package/dist/gemini-web.js.map +1 -0
- package/dist/google-search/client.d.ts +16 -0
- package/dist/google-search/client.d.ts.map +1 -0
- package/dist/google-search/client.js +117 -0
- package/dist/google-search/client.js.map +1 -0
- package/dist/google-search/errors.d.ts +8 -0
- package/dist/google-search/errors.d.ts.map +1 -0
- package/dist/google-search/errors.js +13 -0
- package/dist/google-search/errors.js.map +1 -0
- package/dist/google-search/html.d.ts +12 -0
- package/dist/google-search/html.d.ts.map +1 -0
- package/dist/google-search/html.js +135 -0
- package/dist/google-search/html.js.map +1 -0
- package/dist/google-search/parsers.d.ts +6 -0
- package/dist/google-search/parsers.d.ts.map +1 -0
- package/dist/google-search/parsers.js +177 -0
- package/dist/google-search/parsers.js.map +1 -0
- package/dist/google-search/types.d.ts +66 -0
- package/dist/google-search/types.d.ts.map +1 -0
- package/dist/google-search/types.js +2 -0
- package/dist/google-search/types.js.map +1 -0
- package/dist/google-search.d.ts +6 -0
- package/dist/google-search.d.ts.map +1 -0
- package/dist/google-search.js +4 -0
- package/dist/google-search.js.map +1 -0
- package/dist/hotels/client.d.ts +9 -0
- package/dist/hotels/client.d.ts.map +1 -0
- package/dist/hotels/client.js +14 -0
- package/dist/hotels/client.js.map +1 -0
- package/dist/hotels/parsers.d.ts +7 -0
- package/dist/hotels/parsers.d.ts.map +1 -0
- package/dist/hotels/parsers.js +74 -0
- package/dist/hotels/parsers.js.map +1 -0
- package/dist/hotels/types.d.ts +55 -0
- package/dist/hotels/types.d.ts.map +1 -0
- package/dist/hotels/types.js +2 -0
- package/dist/hotels/types.js.map +1 -0
- package/dist/hotels.d.ts +4 -0
- package/dist/hotels.d.ts.map +1 -0
- package/dist/hotels.js +3 -0
- package/dist/hotels.js.map +1 -0
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/known-surfaces.d.ts +35 -5
- package/dist/known-surfaces.d.ts.map +1 -1
- package/dist/known-surfaces.js +35 -5
- package/dist/known-surfaces.js.map +1 -1
- package/dist/lens/client.d.ts +14 -0
- package/dist/lens/client.d.ts.map +1 -0
- package/dist/lens/client.js +116 -0
- package/dist/lens/client.js.map +1 -0
- package/dist/lens/errors.d.ts +8 -0
- package/dist/lens/errors.d.ts.map +1 -0
- package/dist/lens/errors.js +13 -0
- package/dist/lens/errors.js.map +1 -0
- package/dist/lens/types.d.ts +27 -0
- package/dist/lens/types.d.ts.map +1 -0
- package/dist/lens/types.js +2 -0
- package/dist/lens/types.js.map +1 -0
- package/dist/lens.d.ts +8 -0
- package/dist/lens.d.ts.map +1 -0
- package/dist/lens.js +5 -0
- package/dist/lens.js.map +1 -0
- package/dist/news.d.ts +46 -0
- package/dist/news.d.ts.map +1 -0
- package/dist/news.js +202 -0
- package/dist/news.js.map +1 -0
- package/dist/pagespeed/client.d.ts +28 -0
- package/dist/pagespeed/client.d.ts.map +1 -0
- package/dist/pagespeed/client.js +222 -0
- package/dist/pagespeed/client.js.map +1 -0
- package/dist/pagespeed/errors.d.ts +9 -0
- package/dist/pagespeed/errors.d.ts.map +1 -0
- package/dist/pagespeed/errors.js +15 -0
- package/dist/pagespeed/errors.js.map +1 -0
- package/dist/pagespeed/parsers.d.ts +7 -0
- package/dist/pagespeed/parsers.d.ts.map +1 -0
- package/dist/pagespeed/parsers.js +236 -0
- package/dist/pagespeed/parsers.js.map +1 -0
- package/dist/pagespeed/types.d.ts +156 -0
- package/dist/pagespeed/types.d.ts.map +1 -0
- package/dist/pagespeed/types.js +2 -0
- package/dist/pagespeed/types.js.map +1 -0
- package/dist/pagespeed/wire.d.ts +10 -0
- package/dist/pagespeed/wire.d.ts.map +1 -0
- package/dist/pagespeed/wire.js +96 -0
- package/dist/pagespeed/wire.js.map +1 -0
- package/dist/pagespeed.d.ts +6 -0
- package/dist/pagespeed.d.ts.map +1 -0
- package/dist/pagespeed.js +4 -0
- package/dist/pagespeed.js.map +1 -0
- package/dist/parsers/geocode.d.ts.map +1 -1
- package/dist/parsers/geocode.js +30 -1
- package/dist/parsers/geocode.js.map +1 -1
- package/dist/parsers/reviews.d.ts +8 -1
- package/dist/parsers/reviews.d.ts.map +1 -1
- package/dist/parsers/reviews.js +46 -9
- package/dist/parsers/reviews.js.map +1 -1
- package/dist/platform/catalog.d.ts +18 -0
- package/dist/platform/catalog.d.ts.map +1 -0
- package/dist/platform/catalog.js +320 -0
- package/dist/platform/catalog.js.map +1 -0
- package/dist/platform/parity.d.ts +12 -0
- package/dist/platform/parity.d.ts.map +1 -0
- package/dist/platform/parity.js +25 -0
- package/dist/platform/parity.js.map +1 -0
- package/dist/services/elevation.d.ts +6 -4
- package/dist/services/elevation.d.ts.map +1 -1
- package/dist/services/elevation.js +39 -4
- package/dist/services/elevation.js.map +1 -1
- package/dist/services/environment/air-quality.d.ts +39 -0
- package/dist/services/environment/air-quality.d.ts.map +1 -0
- package/dist/services/environment/air-quality.js +82 -0
- package/dist/services/environment/air-quality.js.map +1 -0
- package/dist/services/environment/weather.d.ts +42 -0
- package/dist/services/environment/weather.d.ts.map +1 -0
- package/dist/services/environment/weather.js +63 -0
- package/dist/services/environment/weather.js.map +1 -0
- package/dist/services/geocode.d.ts +5 -1
- package/dist/services/geocode.d.ts.map +1 -1
- package/dist/services/geocode.js +13 -0
- package/dist/services/geocode.js.map +1 -1
- package/dist/services/keyed.d.ts +80 -0
- package/dist/services/keyed.d.ts.map +1 -0
- package/dist/services/keyed.js +152 -0
- package/dist/services/keyed.js.map +1 -0
- package/dist/services/knowledge.d.ts +6 -2
- package/dist/services/knowledge.d.ts.map +1 -1
- package/dist/services/knowledge.js +30 -5
- package/dist/services/knowledge.js.map +1 -1
- package/dist/services/mobility.d.ts.map +1 -1
- package/dist/services/mobility.js +13 -2
- package/dist/services/mobility.js.map +1 -1
- package/dist/services/nearby-search.d.ts +32 -0
- package/dist/services/nearby-search.d.ts.map +1 -0
- package/dist/services/nearby-search.js +85 -0
- package/dist/services/nearby-search.js.map +1 -0
- package/dist/services/panorama.d.ts +8 -1
- package/dist/services/panorama.d.ts.map +1 -1
- package/dist/services/panorama.js +48 -0
- package/dist/services/panorama.js.map +1 -1
- package/dist/services/photos.d.ts.map +1 -1
- package/dist/services/photos.js +9 -2
- package/dist/services/photos.js.map +1 -1
- package/dist/services/places.d.ts.map +1 -1
- package/dist/services/places.js +1 -0
- package/dist/services/places.js.map +1 -1
- package/dist/services/reviews.d.ts.map +1 -1
- package/dist/services/reviews.js +4 -1
- package/dist/services/reviews.js.map +1 -1
- package/dist/services/search.d.ts +8 -3
- package/dist/services/search.d.ts.map +1 -1
- package/dist/services/search.js +28 -9
- package/dist/services/search.js.map +1 -1
- package/dist/translate.d.ts +75 -0
- package/dist/translate.d.ts.map +1 -0
- package/dist/translate.js +126 -0
- package/dist/translate.js.map +1 -0
- package/dist/travel-google/common.d.ts +24 -0
- package/dist/travel-google/common.d.ts.map +1 -0
- package/dist/travel-google/common.js +72 -0
- package/dist/travel-google/common.js.map +1 -0
- package/dist/trends/client.d.ts +17 -0
- package/dist/trends/client.d.ts.map +1 -0
- package/dist/trends/client.js +86 -0
- package/dist/trends/client.js.map +1 -0
- package/dist/trends/errors.d.ts +8 -0
- package/dist/trends/errors.d.ts.map +1 -0
- package/dist/trends/errors.js +13 -0
- package/dist/trends/errors.js.map +1 -0
- package/dist/trends/links.d.ts +8 -0
- package/dist/trends/links.d.ts.map +1 -0
- package/dist/trends/links.js +71 -0
- package/dist/trends/links.js.map +1 -0
- package/dist/trends/parsers.d.ts +5 -0
- package/dist/trends/parsers.d.ts.map +1 -0
- package/dist/trends/parsers.js +126 -0
- package/dist/trends/parsers.js.map +1 -0
- package/dist/trends/types.d.ts +71 -0
- package/dist/trends/types.d.ts.map +1 -0
- package/dist/trends/types.js +2 -0
- package/dist/trends/types.js.map +1 -0
- package/dist/trends.d.ts +9 -0
- package/dist/trends.d.ts.map +1 -0
- package/dist/trends.js +8 -0
- package/dist/trends.js.map +1 -0
- package/dist/types/common.d.ts +28 -2
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/common.js.map +1 -1
- package/dist/types/directions.d.ts +1 -1
- package/dist/types/directions.d.ts.map +1 -1
- package/dist/types/dx.d.ts +23 -10
- package/dist/types/dx.d.ts.map +1 -1
- package/dist/types/panorama.d.ts +19 -0
- package/dist/types/panorama.d.ts.map +1 -1
- package/dist/types/reviews.d.ts +3 -4
- package/dist/types/reviews.d.ts.map +1 -1
- package/dist/types/suggest.d.ts +4 -6
- package/dist/types/suggest.d.ts.map +1 -1
- package/dist/utils/google-web.d.ts +24 -0
- package/dist/utils/google-web.d.ts.map +1 -0
- package/dist/utils/google-web.js +150 -0
- package/dist/utils/google-web.js.map +1 -0
- package/dist/utils/place-ref.d.ts +14 -4
- package/dist/utils/place-ref.d.ts.map +1 -1
- package/dist/utils/place-ref.js +49 -1
- package/dist/utils/place-ref.js.map +1 -1
- package/dist/youtube/client.d.ts +19 -0
- package/dist/youtube/client.d.ts.map +1 -0
- package/dist/youtube/client.js +115 -0
- package/dist/youtube/client.js.map +1 -0
- package/dist/youtube/errors.d.ts +8 -0
- package/dist/youtube/errors.d.ts.map +1 -0
- package/dist/youtube/errors.js +13 -0
- package/dist/youtube/errors.js.map +1 -0
- package/dist/youtube/parsers.d.ts +9 -0
- package/dist/youtube/parsers.d.ts.map +1 -0
- package/dist/youtube/parsers.js +213 -0
- package/dist/youtube/parsers.js.map +1 -0
- package/dist/youtube/types.d.ts +90 -0
- package/dist/youtube/types.d.ts.map +1 -0
- package/dist/youtube/types.js +2 -0
- package/dist/youtube/types.js.map +1 -0
- package/dist/youtube.d.ts +9 -0
- package/dist/youtube.d.ts.map +1 -0
- package/dist/youtube.js +6 -0
- package/dist/youtube.js.map +1 -0
- package/docs/books.md +18 -0
- package/docs/environment-research.md +65 -0
- package/docs/finance-research.md +153 -0
- package/docs/finance.md +43 -0
- package/docs/gemini-web.md +36 -0
- package/docs/google-ai-books-research.md +53 -0
- package/docs/google-media-research.md +105 -0
- package/docs/google-search-research.md +36 -0
- package/docs/google-search.md +53 -0
- package/docs/google-services-research.md +135 -0
- package/docs/google-travel-research.md +86 -0
- package/docs/internal/reverse-engineering.md +85 -0
- package/docs/lens.md +54 -0
- package/docs/maps-revalidation.md +31 -0
- package/docs/news.md +35 -0
- package/docs/pagespeed-research.md +153 -0
- package/docs/pagespeed.md +135 -0
- package/docs/reviews-research.md +33 -0
- package/docs/translate.md +78 -0
- package/docs/trends-research.md +82 -0
- package/docs/trends.md +75 -0
- package/docs/youtube.md +72 -0
- package/package.json +77 -2
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { GoogleWebError, googleBatchBody, googleBatchResponse, googleBootstrap, googleWebText, positiveTimeout, } from '../utils/google-web.js';
|
|
2
|
+
import { FINANCE_RANGES, parseFinanceChartResponse, parseFinanceInstrument, parseFinanceQuoteResponse, parseFinanceSearchResponse, } from './parsers.js';
|
|
3
|
+
const USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.0.0 Safari/537.36';
|
|
4
|
+
export class FinanceClient {
|
|
5
|
+
fetcher;
|
|
6
|
+
timeoutMs;
|
|
7
|
+
language;
|
|
8
|
+
userAgent;
|
|
9
|
+
context;
|
|
10
|
+
constructor(config = {}) {
|
|
11
|
+
this.fetcher = config.fetch ?? globalThis.fetch;
|
|
12
|
+
this.timeoutMs = positiveTimeout(config.timeoutMs ?? 30_000);
|
|
13
|
+
this.language = config.language ?? 'en';
|
|
14
|
+
if (!/^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/.test(this.language))
|
|
15
|
+
throw new TypeError('Invalid Finance language code');
|
|
16
|
+
this.userAgent = config.userAgent ?? USER_AGENT;
|
|
17
|
+
if (!this.userAgent.trim() || /[\r\n]/.test(this.userAgent))
|
|
18
|
+
throw new TypeError('Invalid Finance user agent');
|
|
19
|
+
}
|
|
20
|
+
/** Returns the regular-session quote and separately reported extended-session data. */
|
|
21
|
+
async quote(instrument, options = {}) {
|
|
22
|
+
const requested = parseFinanceInstrument(instrument);
|
|
23
|
+
const raw = await this.rpc('gCvqoe', [[[null, [requested.symbol, requested.exchange]]]], options);
|
|
24
|
+
return parseFinanceQuoteResponse(raw, requested);
|
|
25
|
+
}
|
|
26
|
+
/** Returns Google's instrument suggestions, including quoted data when available. */
|
|
27
|
+
async search(query, options = {}) {
|
|
28
|
+
if (typeof query !== 'string' || !query.trim() || query.length > 1000)
|
|
29
|
+
throw new TypeError('Finance query must contain 1–1000 characters');
|
|
30
|
+
const raw = await this.rpc('XB3kn', [query, null, 1], options);
|
|
31
|
+
return parseFinanceSearchResponse(raw, query);
|
|
32
|
+
}
|
|
33
|
+
/** Returns Google's sampled historical prices; intervals depend on the requested range. */
|
|
34
|
+
async chart(instrument, options = {}) {
|
|
35
|
+
const requested = parseFinanceInstrument(instrument), range = options.range ?? '1M';
|
|
36
|
+
if (!Object.prototype.hasOwnProperty.call(FINANCE_RANGES, range))
|
|
37
|
+
throw new TypeError('Unsupported Finance chart range');
|
|
38
|
+
const raw = await this.rpc('c2u4wc', [[[null, [requested.symbol, requested.exchange]]], FINANCE_RANGES[range]], options);
|
|
39
|
+
return parseFinanceChartResponse(raw, requested, range);
|
|
40
|
+
}
|
|
41
|
+
async bootstrap(options) {
|
|
42
|
+
if (this.context)
|
|
43
|
+
return this.context;
|
|
44
|
+
const url = new URL('https://www.google.com/finance/');
|
|
45
|
+
url.searchParams.set('hl', this.language);
|
|
46
|
+
const html = await googleWebText(this.fetcher, url, { headers: { 'User-Agent': this.userAgent, Accept: 'text/html' } }, this.timeoutMs, options.signal);
|
|
47
|
+
const wiz = googleBootstrap(html);
|
|
48
|
+
if (wiz.eptZe !== '/finance/_/FinHubUi/')
|
|
49
|
+
throw new GoogleWebError('Finance returned an unsupported web application', 'parse');
|
|
50
|
+
this.context = {
|
|
51
|
+
sessionId: typeof wiz.FdrFJe === 'string' ? wiz.FdrFJe : undefined,
|
|
52
|
+
buildLabel: typeof wiz.cfb2h === 'string' ? wiz.cfb2h : undefined,
|
|
53
|
+
token: typeof wiz.SNlM0e === 'string' ? wiz.SNlM0e : undefined,
|
|
54
|
+
};
|
|
55
|
+
return this.context;
|
|
56
|
+
}
|
|
57
|
+
async rpc(id, args, options) {
|
|
58
|
+
const context = await this.bootstrap(options);
|
|
59
|
+
const url = new URL('https://www.google.com/finance/_/FinHubUi/data/batchexecute');
|
|
60
|
+
for (const [key, value] of Object.entries({ rpcids: id, 'source-path': '/finance', 'f.sid': context.sessionId, bl: context.buildLabel, hl: this.language, rt: 'c' })) {
|
|
61
|
+
if (value != null)
|
|
62
|
+
url.searchParams.set(key, value);
|
|
63
|
+
}
|
|
64
|
+
const text = await googleWebText(this.fetcher, url, {
|
|
65
|
+
method: 'POST',
|
|
66
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', 'User-Agent': this.userAgent, Origin: 'https://www.google.com', Referer: `https://www.google.com/finance/?hl=${this.language}` },
|
|
67
|
+
body: googleBatchBody(id, args, context.token),
|
|
68
|
+
}, this.timeoutMs, options.signal);
|
|
69
|
+
return googleBatchResponse(text, id);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export function finance(config = {}) {
|
|
73
|
+
return new FinanceClient(config);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/finance/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { FinanceChart, FinanceChartRange, FinanceInstrument, FinanceInstrumentInput, FinanceQuote, FinanceSearchResult } from './types.js';
|
|
2
|
+
export declare const FINANCE_RANGES: Readonly<Record<FinanceChartRange, number>>;
|
|
3
|
+
export declare function parseFinanceInstrument(input: FinanceInstrumentInput): FinanceInstrument;
|
|
4
|
+
export declare function buildFinanceQuoteUrl(input: FinanceInstrumentInput): string;
|
|
5
|
+
/** Finance DateTime uses one-based months and UTC offset seconds in field 8. */
|
|
6
|
+
export declare function parseFinanceDateTime(value: unknown, fallbackOffset?: number): string | undefined;
|
|
7
|
+
/** EntitySummary field 1 wraps a security; fields 6/17 hold regular/extended prices. */
|
|
8
|
+
export declare function parseFinanceQuoteNode(value: unknown): FinanceQuote | undefined;
|
|
9
|
+
export declare function parseFinanceQuoteResponse(value: unknown, requested: FinanceInstrument): FinanceQuote;
|
|
10
|
+
export declare function parseFinanceSearchResponse(value: unknown, query: string): FinanceSearchResult;
|
|
11
|
+
/** HistoricalPricingData field 4 groups session headers with DateTime/price/volume points. */
|
|
12
|
+
export declare function parseFinanceChartResponse(value: unknown, requested: FinanceInstrument, range: FinanceChartRange): FinanceChart;
|
|
13
|
+
//# sourceMappingURL=parsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/finance/parsers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EAAqB,iBAAiB,EAAE,iBAAiB,EACrE,sBAAsB,EAAgB,YAAY,EAAsB,mBAAmB,EAC5F,MAAM,YAAY,CAAC;AAMpB,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAEtE,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,GAAG,iBAAiB,CAQvF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAG1E;AASD,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYhG;AAcD,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAU9E;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,GAAG,YAAY,CAapG;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAiB7F;AAED,8FAA8F;AAC9F,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAyB9H"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { GoogleWebError } from '../utils/google-web.js';
|
|
2
|
+
const list = (value) => Array.isArray(value) ? value : [];
|
|
3
|
+
const number = (value) => typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
4
|
+
const string = (value) => typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
5
|
+
export const FINANCE_RANGES = {
|
|
6
|
+
'1D': 1, '5D': 2, '1M': 3, '6M': 4, YTD: 5, '1Y': 6, '5Y': 7, MAX: 8,
|
|
7
|
+
};
|
|
8
|
+
export function parseFinanceInstrument(input) {
|
|
9
|
+
const parts = typeof input === 'string' ? input.split(':') : [input?.symbol, input?.exchange];
|
|
10
|
+
const symbol = parts[0]?.trim().toUpperCase();
|
|
11
|
+
const exchange = parts[1]?.trim().toUpperCase();
|
|
12
|
+
if (parts.length !== 2 || !symbol || !exchange || !/^[-A-Z0-9._^=]{1,64}$/.test(symbol) || !/^[-A-Z0-9._]{1,40}$/.test(exchange)) {
|
|
13
|
+
throw new TypeError('Finance instrument must contain a symbol and exchange, for example GOOGL:NASDAQ');
|
|
14
|
+
}
|
|
15
|
+
return { symbol, exchange };
|
|
16
|
+
}
|
|
17
|
+
export function buildFinanceQuoteUrl(input) {
|
|
18
|
+
const { symbol, exchange } = parseFinanceInstrument(input);
|
|
19
|
+
return `https://www.google.com/finance/quote/${encodeURIComponent(symbol)}:${encodeURIComponent(exchange)}`;
|
|
20
|
+
}
|
|
21
|
+
function timestamp(value) {
|
|
22
|
+
const raw = list(value), seconds = number(raw[0]), nanos = number(raw[1]) ?? 0;
|
|
23
|
+
if (seconds == null || nanos < 0 || nanos >= 1_000_000_000)
|
|
24
|
+
return undefined;
|
|
25
|
+
const date = new Date(seconds * 1000 + nanos / 1_000_000);
|
|
26
|
+
return Number.isFinite(date.getTime()) ? date.toISOString() : undefined;
|
|
27
|
+
}
|
|
28
|
+
/** Finance DateTime uses one-based months and UTC offset seconds in field 8. */
|
|
29
|
+
export function parseFinanceDateTime(value, fallbackOffset) {
|
|
30
|
+
const raw = list(value);
|
|
31
|
+
const year = number(raw[0]), month = number(raw[1]), day = number(raw[2]);
|
|
32
|
+
const hour = number(raw[3]) ?? 0, minute = number(raw[4]) ?? 0, second = number(raw[5]) ?? 0;
|
|
33
|
+
const nanos = number(raw[6]) ?? 0, offset = number(list(raw[7])[0]) ?? fallbackOffset;
|
|
34
|
+
if (year == null || month == null || day == null || offset == null || ![year, month, day, hour, minute, second, nanos, offset].every(Number.isInteger))
|
|
35
|
+
return undefined;
|
|
36
|
+
if (year < 1 || year > 9999 || month < 1 || month > 12 || day < 1 || day > 31 || hour < 0 || hour > 23 || minute < 0 || minute > 59 || second < 0 || second > 59 || nanos < 0 || nanos >= 1_000_000_000 || Math.abs(offset) > 86_400)
|
|
37
|
+
return undefined;
|
|
38
|
+
const date = new Date(0);
|
|
39
|
+
date.setUTCFullYear(year, month - 1, day);
|
|
40
|
+
date.setUTCHours(hour, minute, second, Math.floor(nanos / 1_000_000));
|
|
41
|
+
if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day)
|
|
42
|
+
return undefined;
|
|
43
|
+
return new Date(date.getTime() - offset * 1000).toISOString();
|
|
44
|
+
}
|
|
45
|
+
function price(value, time) {
|
|
46
|
+
const raw = list(value), amount = number(raw[0]);
|
|
47
|
+
if (amount == null)
|
|
48
|
+
return undefined;
|
|
49
|
+
return { price: amount, change: number(raw[1]), changePercent: number(raw[2]), time: timestamp(time) };
|
|
50
|
+
}
|
|
51
|
+
function instrumentFromNode(value) {
|
|
52
|
+
const raw = list(value);
|
|
53
|
+
if (typeof raw[0] !== 'string' || typeof raw[1] !== 'string')
|
|
54
|
+
return undefined;
|
|
55
|
+
try {
|
|
56
|
+
return parseFinanceInstrument({ symbol: raw[0], exchange: raw[1] });
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** EntitySummary field 1 wraps a security; fields 6/17 hold regular/extended prices. */
|
|
63
|
+
export function parseFinanceQuoteNode(value) {
|
|
64
|
+
const raw = list(value), instrument = instrumentFromNode(raw[1]), regular = price(raw[5], raw[17]);
|
|
65
|
+
const name = string(raw[2]);
|
|
66
|
+
if (!instrument || !name || !regular)
|
|
67
|
+
return undefined;
|
|
68
|
+
return {
|
|
69
|
+
instrument, name, ...regular, currency: string(raw[4]), entityId: string(raw[0]),
|
|
70
|
+
previousClose: number(raw[7]), extendedMarket: price(raw[16], raw[18]), reportedTime: timestamp(raw[11]),
|
|
71
|
+
timeZone: string(raw[12]), utcOffsetSeconds: number(raw[13]), sourceCode: number(raw[24]),
|
|
72
|
+
delayStatus: 'not-disclosed', url: buildFinanceQuoteUrl(instrument), raw: value,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export function parseFinanceQuoteResponse(value, requested) {
|
|
76
|
+
if (!Array.isArray(value) || (value[0] != null && !Array.isArray(value[0])))
|
|
77
|
+
throw new GoogleWebError('Invalid Finance quote response', 'parse');
|
|
78
|
+
const rows = list(value[0]);
|
|
79
|
+
for (const row of rows) {
|
|
80
|
+
const entry = list(row), status = list(entry[1]), code = number(status[0]);
|
|
81
|
+
if (entry[0] == null && code != null && code > 0) {
|
|
82
|
+
throw new GoogleWebError(code === 5 ? 'Finance quote was not found' : string(status[1]) ?? 'Finance quote request failed', 'rpc', undefined, code);
|
|
83
|
+
}
|
|
84
|
+
const quote = parseFinanceQuoteNode(entry[0]);
|
|
85
|
+
if (quote?.instrument.symbol === requested.symbol && quote.instrument.exchange === requested.exchange)
|
|
86
|
+
return quote;
|
|
87
|
+
}
|
|
88
|
+
if (rows.length > 0)
|
|
89
|
+
throw new GoogleWebError('Finance response did not contain the requested quote', 'parse');
|
|
90
|
+
throw new GoogleWebError('Finance quote was not found', 'rpc', undefined, 5);
|
|
91
|
+
}
|
|
92
|
+
export function parseFinanceSearchResponse(value, query) {
|
|
93
|
+
if (!Array.isArray(value))
|
|
94
|
+
throw new GoogleWebError('Invalid Finance search response', 'parse');
|
|
95
|
+
const matches = [], seen = new Set();
|
|
96
|
+
for (const index of [0, 6, 7, 2, 3, 4, 5, 10, 11]) {
|
|
97
|
+
if (value[index] != null && !Array.isArray(value[index]))
|
|
98
|
+
throw new GoogleWebError('Invalid Finance suggestion group', 'parse');
|
|
99
|
+
for (const item of list(value[index])) {
|
|
100
|
+
const raw = list(item), node = list(raw[3]);
|
|
101
|
+
const instrument = instrumentFromNode(node[1]) ?? instrumentFromNode(list(raw[4])[1]);
|
|
102
|
+
const name = string(node[2]) ?? string(raw[6]);
|
|
103
|
+
if (!instrument || !name)
|
|
104
|
+
continue;
|
|
105
|
+
const key = `${instrument.symbol}:${instrument.exchange}`;
|
|
106
|
+
if (seen.has(key))
|
|
107
|
+
continue;
|
|
108
|
+
seen.add(key);
|
|
109
|
+
matches.push({ instrument, name, entityId: string(raw[0]), quote: parseFinanceQuoteNode(node), url: buildFinanceQuoteUrl(instrument), raw: item });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return { query, matches, raw: value };
|
|
113
|
+
}
|
|
114
|
+
/** HistoricalPricingData field 4 groups session headers with DateTime/price/volume points. */
|
|
115
|
+
export function parseFinanceChartResponse(value, requested, range) {
|
|
116
|
+
if (!Array.isArray(value) || (value[0] != null && !Array.isArray(value[0])))
|
|
117
|
+
throw new GoogleWebError('Invalid Finance chart response', 'parse');
|
|
118
|
+
const records = list(value[0]);
|
|
119
|
+
const record = records.find(item => {
|
|
120
|
+
const instrument = instrumentFromNode(list(item)[0]);
|
|
121
|
+
return instrument?.symbol === requested.symbol && instrument.exchange === requested.exchange;
|
|
122
|
+
});
|
|
123
|
+
if (!record) {
|
|
124
|
+
if (records.length > 0)
|
|
125
|
+
throw new GoogleWebError('Finance chart did not match the requested instrument', 'parse');
|
|
126
|
+
throw new GoogleWebError('Finance chart was not found', 'rpc', undefined, 5);
|
|
127
|
+
}
|
|
128
|
+
const raw = list(record), offset = number(raw[5]);
|
|
129
|
+
if (!Array.isArray(raw[3]))
|
|
130
|
+
throw new GoogleWebError('Finance chart sessions are missing', 'parse');
|
|
131
|
+
const sessions = raw[3].map(item => {
|
|
132
|
+
const session = list(item), header = list(session[0]);
|
|
133
|
+
if (!Array.isArray(session[1]))
|
|
134
|
+
throw new GoogleWebError('Invalid Finance chart points', 'parse');
|
|
135
|
+
const points = [];
|
|
136
|
+
for (const entry of session[1]) {
|
|
137
|
+
const point = list(entry), time = parseFinanceDateTime(point[0], offset), amount = number(list(point[1])[0]);
|
|
138
|
+
if (!time || amount == null)
|
|
139
|
+
throw new GoogleWebError('Invalid Finance chart point', 'parse');
|
|
140
|
+
points.push({ time, price: amount, volume: number(point[2]), raw: entry });
|
|
141
|
+
}
|
|
142
|
+
return { sessionCode: number(header[0]), startTime: parseFinanceDateTime(header[1], offset), endTime: parseFinanceDateTime(header[2], offset), points, raw: item };
|
|
143
|
+
});
|
|
144
|
+
return { instrument: requested, range, name: string(raw[7]), currency: string(raw[2]), entityId: string(raw[1]), intervalSeconds: number(raw[8]), previousClose: number(raw[6]), utcOffsetSeconds: offset, sessions, raw: value };
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=parsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/finance/parsers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { GoogleWebConfig, GoogleWebRequestOptions } from '../utils/google-web.js';
|
|
2
|
+
export interface FinanceConfig extends GoogleWebConfig {
|
|
3
|
+
language?: string;
|
|
4
|
+
userAgent?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface FinanceInstrument {
|
|
7
|
+
symbol: string;
|
|
8
|
+
exchange: string;
|
|
9
|
+
}
|
|
10
|
+
/** Strings use Google Finance's symbol:exchange order, for example GOOGL:NASDAQ. */
|
|
11
|
+
export type FinanceInstrumentInput = FinanceInstrument | string;
|
|
12
|
+
export type FinanceRequestOptions = GoogleWebRequestOptions;
|
|
13
|
+
export type FinanceChartRange = '1D' | '5D' | '1M' | '6M' | 'YTD' | '1Y' | '5Y' | 'MAX';
|
|
14
|
+
export interface FinanceChartOptions extends FinanceRequestOptions {
|
|
15
|
+
range?: FinanceChartRange;
|
|
16
|
+
}
|
|
17
|
+
export interface FinancePrice {
|
|
18
|
+
price: number;
|
|
19
|
+
change?: number;
|
|
20
|
+
changePercent?: number;
|
|
21
|
+
time?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface FinanceQuote extends FinancePrice {
|
|
24
|
+
instrument: FinanceInstrument;
|
|
25
|
+
name: string;
|
|
26
|
+
currency?: string;
|
|
27
|
+
entityId?: string;
|
|
28
|
+
previousClose?: number;
|
|
29
|
+
extendedMarket?: FinancePrice;
|
|
30
|
+
reportedTime?: string;
|
|
31
|
+
timeZone?: string;
|
|
32
|
+
utcOffsetSeconds?: number;
|
|
33
|
+
sourceCode?: number;
|
|
34
|
+
delayStatus: 'not-disclosed';
|
|
35
|
+
url: string;
|
|
36
|
+
raw: unknown;
|
|
37
|
+
}
|
|
38
|
+
export interface FinanceSearchMatch {
|
|
39
|
+
instrument: FinanceInstrument;
|
|
40
|
+
name: string;
|
|
41
|
+
entityId?: string;
|
|
42
|
+
quote?: FinanceQuote;
|
|
43
|
+
url: string;
|
|
44
|
+
raw: unknown;
|
|
45
|
+
}
|
|
46
|
+
export interface FinanceSearchResult {
|
|
47
|
+
query: string;
|
|
48
|
+
matches: FinanceSearchMatch[];
|
|
49
|
+
raw: unknown;
|
|
50
|
+
}
|
|
51
|
+
export interface FinanceChartPoint {
|
|
52
|
+
time: string;
|
|
53
|
+
price: number;
|
|
54
|
+
volume?: number;
|
|
55
|
+
raw: unknown;
|
|
56
|
+
}
|
|
57
|
+
export interface FinanceChartSession {
|
|
58
|
+
sessionCode?: number;
|
|
59
|
+
startTime?: string;
|
|
60
|
+
endTime?: string;
|
|
61
|
+
points: FinanceChartPoint[];
|
|
62
|
+
raw: unknown;
|
|
63
|
+
}
|
|
64
|
+
export interface FinanceChart {
|
|
65
|
+
instrument: FinanceInstrument;
|
|
66
|
+
range: FinanceChartRange;
|
|
67
|
+
name?: string;
|
|
68
|
+
currency?: string;
|
|
69
|
+
entityId?: string;
|
|
70
|
+
intervalSeconds?: number;
|
|
71
|
+
previousClose?: number;
|
|
72
|
+
utcOffsetSeconds?: number;
|
|
73
|
+
sessions: FinanceChartSession[];
|
|
74
|
+
raw: unknown;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/finance/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/finance/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { FinanceClient, finance } from './finance/client.js';
|
|
2
|
+
export { buildFinanceQuoteUrl } from './finance/parsers.js';
|
|
3
|
+
export { GoogleWebError as FinanceError } from './utils/google-web.js';
|
|
4
|
+
export type * from './finance/types.js';
|
|
5
|
+
//# sourceMappingURL=finance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finance.d.ts","sourceRoot":"","sources":["../src/finance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,cAAc,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,mBAAmB,oBAAoB,CAAC"}
|
package/dist/finance.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finance.js","sourceRoot":"","sources":["../src/finance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,cAAc,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { FlightSearchOptions, FlightSearchResult, FlightsConfig } from './types.js';
|
|
2
|
+
export declare class FlightsClient {
|
|
3
|
+
private readonly rpc;
|
|
4
|
+
constructor(config?: FlightsConfig);
|
|
5
|
+
/** Searches one-way economy fares for one adult using exact airport codes and a departure date. */
|
|
6
|
+
search(options: FlightSearchOptions): Promise<FlightSearchResult>;
|
|
7
|
+
}
|
|
8
|
+
export declare function flights(config?: FlightsConfig): FlightsClient;
|
|
9
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/flights/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEzF,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;gBACpB,MAAM,GAAE,aAAkB;IACtC,mGAAmG;IAC7F,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAKxE;AACD,wBAAgB,OAAO,CAAC,MAAM,GAAE,aAAkB,GAAG,aAAa,CAAsC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { TravelRpc } from '../travel-google/common.js';
|
|
2
|
+
import { buildFlightSearchArgs, parseFlightSearchResponse } from './parsers.js';
|
|
3
|
+
export class FlightsClient {
|
|
4
|
+
rpc;
|
|
5
|
+
constructor(config = {}) { this.rpc = new TravelRpc('flights', config); }
|
|
6
|
+
/** Searches one-way economy fares for one adult using exact airport codes and a departure date. */
|
|
7
|
+
async search(options) {
|
|
8
|
+
const args = buildFlightSearchArgs(options);
|
|
9
|
+
const raw = await this.rpc.call('LqxFAb', args, options);
|
|
10
|
+
return parseFlightSearchResponse(raw, options, this.rpc.currency, this.rpc.language);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function flights(config = {}) { return new FlightsClient(config); }
|
|
14
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/flights/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAGhF,MAAM,OAAO,aAAa;IACP,GAAG,CAAY;IAChC,YAAY,SAAwB,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACxF,mGAAmG;IACnG,KAAK,CAAC,MAAM,CAAC,OAA4B;QACvC,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzD,OAAO,yBAAyB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvF,CAAC;CACF;AACD,MAAM,UAAU,OAAO,CAAC,SAAwB,EAAE,IAAmB,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FlightSearchOptions, FlightSearchResult } from './types.js';
|
|
2
|
+
export declare function validateFlightSearch(options: FlightSearchOptions): {
|
|
3
|
+
origin: string;
|
|
4
|
+
destination: string;
|
|
5
|
+
departureDate: string;
|
|
6
|
+
};
|
|
7
|
+
/** Prefetch constraints: field 3 trip type, 6 cabin, 7 passengers, 14 dated legs; airport type is 0. */
|
|
8
|
+
export declare function buildFlightSearchArgs(options: FlightSearchOptions): unknown[];
|
|
9
|
+
export declare function buildFlightSearchUrl(options: FlightSearchOptions, currency?: string, language?: string): string;
|
|
10
|
+
export declare function parseFlightSearchResponse(value: unknown, options: FlightSearchOptions, currency: string, language?: string): FlightSearchResult;
|
|
11
|
+
//# sourceMappingURL=parsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/flights/parsers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA+B,mBAAmB,EAAE,kBAAkB,EAAiB,MAAM,YAAY,CAAC;AAEtH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAKjI;AAED,wGAAwG;AACxG,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,EAAE,CAI7E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,SAAQ,EAAE,QAAQ,SAAO,GAAG,MAAM,CAM5G;AAmBD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,SAAO,GAAG,kBAAkB,CAkB7I"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { GoogleWebError } from '../utils/google-web.js';
|
|
2
|
+
import { array, dateFromWire, numeric, text, travelDate } from '../travel-google/common.js';
|
|
3
|
+
export function validateFlightSearch(options) {
|
|
4
|
+
const origin = options.origin?.trim().toUpperCase(), destination = options.destination?.trim().toUpperCase();
|
|
5
|
+
if (!origin || !destination || !/^[A-Z]{3}$/.test(origin) || !/^[A-Z]{3}$/.test(destination) || origin === destination)
|
|
6
|
+
throw new TypeError('Flights require distinct three-letter origin and destination airport codes');
|
|
7
|
+
travelDate(options.departureDate);
|
|
8
|
+
return { origin, destination, departureDate: options.departureDate };
|
|
9
|
+
}
|
|
10
|
+
/** Prefetch constraints: field 3 trip type, 6 cabin, 7 passengers, 14 dated legs; airport type is 0. */
|
|
11
|
+
export function buildFlightSearchArgs(options) {
|
|
12
|
+
const { origin, destination, departureDate } = validateFlightSearch(options);
|
|
13
|
+
const leg = [[[[origin, 0]]], [[[destination, 0]]], null, 0, null, null, departureDate, null, null, null, null, null, null, null, 3];
|
|
14
|
+
return [[], [null, null, 2, null, [], 1, [1, 0, 0, 0], null, null, null, null, null, null, [leg], null, null, null, 1]];
|
|
15
|
+
}
|
|
16
|
+
export function buildFlightSearchUrl(options, currency = 'USD', language = 'en') {
|
|
17
|
+
const request = validateFlightSearch(options), url = new URL('https://www.google.com/travel/flights');
|
|
18
|
+
url.searchParams.set('q', `Flights from ${request.origin} to ${request.destination} on ${request.departureDate} one way`);
|
|
19
|
+
url.searchParams.set('curr', currency);
|
|
20
|
+
url.searchParams.set('hl', language);
|
|
21
|
+
return url.toString();
|
|
22
|
+
}
|
|
23
|
+
function endpoint(code, name, rawDate, rawTime) {
|
|
24
|
+
const airport = text(code), date = dateFromWire(rawDate), time = array(rawTime);
|
|
25
|
+
// A present time message omits zero components: [null, 10] is 00:10.
|
|
26
|
+
const hour = time[0] == null ? 0 : numeric(time[0]), minute = time[1] == null ? 0 : numeric(time[1]);
|
|
27
|
+
if (!airport || !/^[A-Z]{3}$/.test(airport) || !date || !Array.isArray(rawTime) || hour == null || minute == null || !Number.isInteger(hour) || hour < 0 || hour > 23 || !Number.isInteger(minute) || minute < 0 || minute > 59)
|
|
28
|
+
throw new GoogleWebError('Invalid flight airport or local date/time', 'parse');
|
|
29
|
+
return { airport, airportName: text(name), date, time: `${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}` };
|
|
30
|
+
}
|
|
31
|
+
/** Segment fields 4/7 are airports, 9/11 local times, 21/22 local dates, 23 carrier and number. */
|
|
32
|
+
function segment(value) {
|
|
33
|
+
const raw = array(value), flight = array(raw[22]);
|
|
34
|
+
return {
|
|
35
|
+
departure: endpoint(raw[3], raw[4], raw[20], raw[8]), arrival: endpoint(raw[6], raw[5], raw[21], raw[10]),
|
|
36
|
+
durationMinutes: numeric(raw[11]), airlineCode: text(flight[0]), airline: text(flight[3]), flightNumber: text(flight[1]), aircraft: text(raw[17]), raw: value,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function parseFlightSearchResponse(value, options, currency, language = 'en') {
|
|
40
|
+
const request = validateFlightSearch(options);
|
|
41
|
+
if (!Array.isArray(value) || value.length < 4)
|
|
42
|
+
throw new GoogleWebError('Invalid Flights shopping response', 'parse');
|
|
43
|
+
const offers = [];
|
|
44
|
+
for (const [index, group] of [[2, 'best'], [3, 'other']]) {
|
|
45
|
+
if (value[index] != null && !Array.isArray(value[index]))
|
|
46
|
+
throw new GoogleWebError('Invalid Flights result group', 'parse');
|
|
47
|
+
const result = array(value[index]);
|
|
48
|
+
if (result[0] != null && !Array.isArray(result[0]))
|
|
49
|
+
throw new GoogleWebError('Invalid Flights offers', 'parse');
|
|
50
|
+
for (const entry of array(result[0])) {
|
|
51
|
+
const raw = array(entry), itinerary = array(raw[0]), pricing = array(raw[1]);
|
|
52
|
+
if (!Array.isArray(itinerary[2]) || itinerary[2].length === 0)
|
|
53
|
+
throw new GoogleWebError('Flight segments are missing', 'parse');
|
|
54
|
+
const segments = itinerary[2].map(segment), amount = numeric(array(pricing[0])[1]);
|
|
55
|
+
if (amount != null && amount < 0)
|
|
56
|
+
throw new GoogleWebError('Invalid flight price', 'parse');
|
|
57
|
+
if (segments[0]?.departure.airport !== request.origin || segments.at(-1)?.arrival.airport !== request.destination || segments[0]?.departure.date !== request.departureDate)
|
|
58
|
+
throw new GoogleWebError('Flights response did not match the requested route and date', 'parse');
|
|
59
|
+
offers.push({ group, segments, durationMinutes: numeric(itinerary[9]), stops: segments.length - 1, price: amount == null ? undefined : { amount, currency }, selectionToken: text(pricing[1]), raw: entry });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { ...request, tripType: 'one-way', adults: 1, cabin: 'economy', currency, offers, searchUrl: buildFlightSearchUrl(options, currency, language), raw: value };
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=parsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/flights/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG5F,MAAM,UAAU,oBAAoB,CAAC,OAA4B;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7G,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,KAAK,WAAW;QAAE,MAAM,IAAI,SAAS,CAAC,4EAA4E,CAAC,CAAC;IAC1N,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;AACvE,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,qBAAqB,CAAC,OAA4B;IAChE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACrI,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1H,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA4B,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,GAAG,IAAI;IAClG,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACtG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,WAAW,OAAO,OAAO,CAAC,aAAa,UAAU,CAAC,CAAC;IAC1H,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAa,EAAE,IAAa,EAAE,OAAgB,EAAE,OAAgB;IAChF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAChF,qEAAqE;IACrE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,cAAc,CAAC,2CAA2C,EAAE,OAAO,CAAC,CAAC;IAChT,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;AACjI,CAAC;AAED,mGAAmG;AACnG,SAAS,OAAO,CAAC,KAAc;IAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACzG,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK;KAC9J,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAc,EAAE,OAA4B,EAAE,QAAgB,EAAE,QAAQ,GAAG,IAAI;IACvH,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;IACtH,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAU,EAAE,CAAC;QAClE,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;QAC5H,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;QAChH,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,cAAc,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;YAChI,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnF,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,GAAG,CAAC;gBAAE,MAAM,IAAI,cAAc,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;YAC5F,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,aAAa;gBAAE,MAAM,IAAI,cAAc,CAAC,6DAA6D,EAAE,OAAO,CAAC,CAAC;YAC7Q,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/M,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACtK,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { GoogleTravelConfig, GoogleTravelRequestOptions } from '../travel-google/common.js';
|
|
2
|
+
export type FlightsConfig = GoogleTravelConfig;
|
|
3
|
+
export interface FlightSearchOptions extends GoogleTravelRequestOptions {
|
|
4
|
+
origin: string;
|
|
5
|
+
destination: string;
|
|
6
|
+
departureDate: string;
|
|
7
|
+
}
|
|
8
|
+
export interface FlightEndpoint {
|
|
9
|
+
airport: string;
|
|
10
|
+
airportName?: string;
|
|
11
|
+
/** Airport-local calendar date; no UTC offset is supplied by this response. */
|
|
12
|
+
date: string;
|
|
13
|
+
/** Airport-local HH:mm, including zero components omitted on the wire. */
|
|
14
|
+
time: string;
|
|
15
|
+
}
|
|
16
|
+
export interface FlightSegment {
|
|
17
|
+
departure: FlightEndpoint;
|
|
18
|
+
arrival: FlightEndpoint;
|
|
19
|
+
durationMinutes?: number;
|
|
20
|
+
airlineCode?: string;
|
|
21
|
+
airline?: string;
|
|
22
|
+
flightNumber?: string;
|
|
23
|
+
aircraft?: string;
|
|
24
|
+
raw: unknown;
|
|
25
|
+
}
|
|
26
|
+
export interface FlightOffer {
|
|
27
|
+
group: 'best' | 'other';
|
|
28
|
+
segments: FlightSegment[];
|
|
29
|
+
durationMinutes?: number;
|
|
30
|
+
stops: number;
|
|
31
|
+
/** Amount in displayed currency units; absent when Google supplies no fare. */
|
|
32
|
+
price?: {
|
|
33
|
+
amount: number;
|
|
34
|
+
currency: string;
|
|
35
|
+
};
|
|
36
|
+
/** Opaque selection state, not a URL or a booking guarantee. */
|
|
37
|
+
selectionToken?: string;
|
|
38
|
+
raw: unknown;
|
|
39
|
+
}
|
|
40
|
+
export interface FlightSearchResult {
|
|
41
|
+
origin: string;
|
|
42
|
+
destination: string;
|
|
43
|
+
departureDate: string;
|
|
44
|
+
tripType: 'one-way';
|
|
45
|
+
adults: 1;
|
|
46
|
+
cabin: 'economy';
|
|
47
|
+
currency: string;
|
|
48
|
+
offers: FlightOffer[];
|
|
49
|
+
searchUrl: string;
|
|
50
|
+
raw: unknown;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/flights/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACjG,MAAM,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAC/C,MAAM,WAAW,mBAAoB,SAAQ,0BAA0B;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AACD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,cAAc,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;CACd;AACD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,OAAO,CAAC;CACd;AACD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/flights/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { FlightsClient, flights } from './flights/client.js';
|
|
2
|
+
export { buildFlightSearchUrl } from './flights/parsers.js';
|
|
3
|
+
export { GoogleWebError as FlightsError } from './utils/google-web.js';
|
|
4
|
+
export type * from './flights/types.js';
|
|
5
|
+
//# sourceMappingURL=flights.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flights.d.ts","sourceRoot":"","sources":["../src/flights.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,cAAc,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,mBAAmB,oBAAoB,CAAC"}
|
package/dist/flights.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flights.js","sourceRoot":"","sources":["../src/flights.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,cAAc,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type GoogleWebRequestOptions } from '../utils/google-web.js';
|
|
2
|
+
import type { GeminiWebBootstrap, GeminiWebConfig, GeminiWebGeneration, GeminiWebGenerationOptions } from './types.js';
|
|
3
|
+
/** Uses the caller's browser for actual generation; static HTTP bootstrap is inspection only. */
|
|
4
|
+
export declare class GeminiWebClient {
|
|
5
|
+
private readonly config;
|
|
6
|
+
private readonly fetcher;
|
|
7
|
+
private readonly timeoutMs;
|
|
8
|
+
private readonly intervalMs;
|
|
9
|
+
private generating;
|
|
10
|
+
constructor(config?: GeminiWebConfig);
|
|
11
|
+
inspect(options?: GoogleWebRequestOptions): Promise<GeminiWebBootstrap>;
|
|
12
|
+
/** Submits to the existing browser conversation and waits for a new completed model response. */
|
|
13
|
+
generate(prompt: string, options?: GeminiWebGenerationOptions): Promise<GeminiWebGeneration>;
|
|
14
|
+
}
|
|
15
|
+
export declare function geminiWeb(config?: GeminiWebConfig): GeminiWebClient;
|
|
16
|
+
//# sourceMappingURL=client.d.ts.map
|