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 @@
|
|
|
1
|
+
{"version":3,"file":"translate.js","sourceRoot":"","sources":["../src/translate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { GoogleWebConfig, GoogleWebRequestOptions } from '../utils/google-web.js';
|
|
2
|
+
export interface GoogleTravelConfig extends GoogleWebConfig {
|
|
3
|
+
currency?: string;
|
|
4
|
+
language?: string;
|
|
5
|
+
userAgent?: string;
|
|
6
|
+
}
|
|
7
|
+
export type GoogleTravelRequestOptions = GoogleWebRequestOptions;
|
|
8
|
+
export declare const array: (value: unknown) => unknown[];
|
|
9
|
+
export declare const numeric: (value: unknown) => number | undefined;
|
|
10
|
+
export declare const text: (value: unknown) => string | undefined;
|
|
11
|
+
export declare function travelDate(value: string): number[];
|
|
12
|
+
export declare function dateFromWire(value: unknown): string | undefined;
|
|
13
|
+
export declare class TravelRpc {
|
|
14
|
+
private readonly app;
|
|
15
|
+
readonly currency: string;
|
|
16
|
+
readonly language: string;
|
|
17
|
+
private readonly fetcher;
|
|
18
|
+
private readonly timeoutMs;
|
|
19
|
+
private readonly userAgent;
|
|
20
|
+
private wiz?;
|
|
21
|
+
constructor(app: 'flights' | 'hotels', config?: GoogleTravelConfig);
|
|
22
|
+
call(id: string, args: unknown[], options: GoogleTravelRequestOptions): Promise<unknown>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/travel-google/common.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEvF,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AACD,MAAM,MAAM,0BAA0B,GAAG,uBAAuB,CAAC;AACjE,eAAO,MAAM,KAAK,GAAI,OAAO,OAAO,KAAG,OAAO,EAAuC,CAAC;AACtF,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,SAAoF,CAAC;AACvI,eAAO,MAAM,IAAI,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,SAA8E,CAAC;AAE9H,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAKlD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAK/D;AAED,qBAAa,SAAS;IAQR,OAAO,CAAC,QAAQ,CAAC,GAAG;IAPhC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,GAAG,CAAC,CAA0B;gBAET,GAAG,EAAE,SAAS,GAAG,QAAQ,EAAE,MAAM,GAAE,kBAAuB;IAWjF,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC;CAqB/F"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { GoogleWebError, googleBatchBody, googleBatchResponse, googleBootstrap, googleWebText, positiveTimeout, } from '../utils/google-web.js';
|
|
2
|
+
export const array = (value) => Array.isArray(value) ? value : [];
|
|
3
|
+
export const numeric = (value) => typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
4
|
+
export const text = (value) => typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
5
|
+
export function travelDate(value) {
|
|
6
|
+
if (typeof value !== 'string' || !/^\d{4}-\d{2}-\d{2}$/.test(value))
|
|
7
|
+
throw new TypeError('Travel dates must use YYYY-MM-DD');
|
|
8
|
+
const date = new Date(`${value}T00:00:00Z`);
|
|
9
|
+
if (!Number.isFinite(date.getTime()) || date.toISOString().slice(0, 10) !== value)
|
|
10
|
+
throw new RangeError('Invalid travel date');
|
|
11
|
+
return value.split('-').map(Number);
|
|
12
|
+
}
|
|
13
|
+
export function dateFromWire(value) {
|
|
14
|
+
const node = array(value);
|
|
15
|
+
if (node.length < 3 || !node.slice(0, 3).every(Number.isInteger))
|
|
16
|
+
return undefined;
|
|
17
|
+
const result = `${String(node[0]).padStart(4, '0')}-${String(node[1]).padStart(2, '0')}-${String(node[2]).padStart(2, '0')}`;
|
|
18
|
+
try {
|
|
19
|
+
travelDate(result);
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class TravelRpc {
|
|
27
|
+
app;
|
|
28
|
+
currency;
|
|
29
|
+
language;
|
|
30
|
+
fetcher;
|
|
31
|
+
timeoutMs;
|
|
32
|
+
userAgent;
|
|
33
|
+
wiz;
|
|
34
|
+
constructor(app, config = {}) {
|
|
35
|
+
this.app = app;
|
|
36
|
+
this.fetcher = config.fetch ?? globalThis.fetch;
|
|
37
|
+
this.timeoutMs = positiveTimeout(config.timeoutMs ?? 30_000);
|
|
38
|
+
this.currency = config.currency?.toUpperCase() ?? 'USD';
|
|
39
|
+
this.language = config.language ?? 'en';
|
|
40
|
+
if (!/^[A-Z]{3}$/.test(this.currency))
|
|
41
|
+
throw new TypeError('Travel currency must use a three-letter code');
|
|
42
|
+
if (!/^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/.test(this.language))
|
|
43
|
+
throw new TypeError('Invalid travel language');
|
|
44
|
+
this.userAgent = config.userAgent ?? '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';
|
|
45
|
+
if (!this.userAgent.trim() || /[\r\n]/.test(this.userAgent))
|
|
46
|
+
throw new TypeError('Invalid travel user agent');
|
|
47
|
+
}
|
|
48
|
+
async call(id, args, options) {
|
|
49
|
+
const app = this.app === 'flights' ? 'FlightsFrontendUi' : 'TravelFrontendUi';
|
|
50
|
+
if (!this.wiz) {
|
|
51
|
+
const url = new URL(`https://www.google.com/travel/${this.app}`);
|
|
52
|
+
url.searchParams.set('hl', this.language);
|
|
53
|
+
url.searchParams.set('curr', this.currency);
|
|
54
|
+
const html = await googleWebText(this.fetcher, url, { headers: { 'User-Agent': this.userAgent, Accept: 'text/html' } }, this.timeoutMs, options.signal);
|
|
55
|
+
const wiz = googleBootstrap(html);
|
|
56
|
+
if (wiz.eptZe !== `/_/${app}/`)
|
|
57
|
+
throw new GoogleWebError('Google returned an unsupported travel application', 'parse');
|
|
58
|
+
this.wiz = wiz;
|
|
59
|
+
}
|
|
60
|
+
const url = new URL(`https://www.google.com/_/${app}/data/batchexecute`);
|
|
61
|
+
for (const [key, value] of Object.entries({ rpcids: id, 'source-path': this.app === 'flights' ? '/travel/flights' : '/travel/search', 'f.sid': this.wiz.FdrFJe, bl: this.wiz.cfb2h, hl: this.language, curr: this.currency, rt: 'c' })) {
|
|
62
|
+
if (value != null)
|
|
63
|
+
url.searchParams.set(key, String(value));
|
|
64
|
+
}
|
|
65
|
+
const body = await googleWebText(this.fetcher, url, {
|
|
66
|
+
method: 'POST', headers: { 'User-Agent': this.userAgent, 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', Origin: 'https://www.google.com', Referer: 'https://www.google.com/travel/' },
|
|
67
|
+
body: googleBatchBody(id, args, typeof this.wiz.SNlM0e === 'string' ? this.wiz.SNlM0e : undefined),
|
|
68
|
+
}, this.timeoutMs, options.signal);
|
|
69
|
+
return googleBatchResponse(body, id);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/travel-google/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TrendsConfig, TrendsEmbedType, TrendsExploreOptions, TrendsFeed, TrendsRequestOptions, TrendsSuggestions, TrendingOptions } from './types.js';
|
|
2
|
+
/** Anonymous Trends topic suggestions and the public Trending now RSS feed. */
|
|
3
|
+
export declare class TrendsClient {
|
|
4
|
+
private readonly fetcher;
|
|
5
|
+
private readonly locale;
|
|
6
|
+
private readonly timezone;
|
|
7
|
+
private readonly timeoutMs;
|
|
8
|
+
constructor(config?: TrendsConfig);
|
|
9
|
+
/** Resolves search terms to suggested topic IDs, titles, and topic types. */
|
|
10
|
+
suggestions(keyword: string, options?: TrendsRequestOptions): Promise<TrendsSuggestions>;
|
|
11
|
+
/** Reads the public feed; approximateTraffic retains Google's bucketed display value. */
|
|
12
|
+
trending(options?: TrendingOptions): Promise<TrendsFeed>;
|
|
13
|
+
exploreUrl(options: TrendsExploreOptions): string;
|
|
14
|
+
embedUrl(type: TrendsEmbedType, options: TrendsExploreOptions): string;
|
|
15
|
+
private get;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/trends/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,UAAU,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAc5J,+EAA+E;AAC/E,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,GAAE,YAAiB;IAOrC,6EAA6E;IACvE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAOlG,yFAAyF;IACnF,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;IAMlE,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM;IAIjD,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,GAAG,MAAM;YAIxD,GAAG;CA0BlB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { TrendsError } from './errors.js';
|
|
2
|
+
import { buildTrendsEmbedUrl, buildTrendsExploreUrl, trendsGeo, trendsTimezone } from './links.js';
|
|
3
|
+
import { parseSuggestions, parseTrendingRss, parseTrendsJson } from './parsers.js';
|
|
4
|
+
function timeout(value) {
|
|
5
|
+
if (!Number.isFinite(value) || value <= 0 || value > 2_147_483_647)
|
|
6
|
+
throw new RangeError('timeoutMs must be positive and no greater than 2147483647');
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
function retryAfter(value) {
|
|
10
|
+
if (!value)
|
|
11
|
+
return undefined;
|
|
12
|
+
if (/^\d+(?:\.\d+)?$/.test(value))
|
|
13
|
+
return Number(value) * 1000;
|
|
14
|
+
const date = Date.parse(value);
|
|
15
|
+
return Number.isFinite(date) ? Math.max(0, date - Date.now()) : undefined;
|
|
16
|
+
}
|
|
17
|
+
/** Anonymous Trends topic suggestions and the public Trending now RSS feed. */
|
|
18
|
+
export class TrendsClient {
|
|
19
|
+
fetcher;
|
|
20
|
+
locale;
|
|
21
|
+
timezone;
|
|
22
|
+
timeoutMs;
|
|
23
|
+
constructor(config = {}) {
|
|
24
|
+
this.fetcher = config.fetch ?? globalThis.fetch;
|
|
25
|
+
this.locale = config.locale ?? 'en-US';
|
|
26
|
+
this.timezone = trendsTimezone(config.timezone ?? 0);
|
|
27
|
+
this.timeoutMs = timeout(config.timeoutMs ?? 30_000);
|
|
28
|
+
}
|
|
29
|
+
/** Resolves search terms to suggested topic IDs, titles, and topic types. */
|
|
30
|
+
async suggestions(keyword, options = {}) {
|
|
31
|
+
if (typeof keyword !== 'string' || keyword.trim().length === 0)
|
|
32
|
+
throw new TypeError('keyword must be a nonempty string');
|
|
33
|
+
const url = new URL(`https://trends.google.com/trends/api/autocomplete/${encodeURIComponent(keyword)}`);
|
|
34
|
+
url.searchParams.set('hl', this.locale);
|
|
35
|
+
return parseSuggestions(parseTrendsJson(await this.get(url, options)));
|
|
36
|
+
}
|
|
37
|
+
/** Reads the public feed; approximateTraffic retains Google's bucketed display value. */
|
|
38
|
+
async trending(options = {}) {
|
|
39
|
+
const url = new URL('https://trends.google.com/trending/rss');
|
|
40
|
+
url.searchParams.set('geo', trendsGeo(options.geo ?? 'US'));
|
|
41
|
+
return parseTrendingRss(await this.get(url, options));
|
|
42
|
+
}
|
|
43
|
+
exploreUrl(options) {
|
|
44
|
+
return buildTrendsExploreUrl(options, { locale: this.locale });
|
|
45
|
+
}
|
|
46
|
+
embedUrl(type, options) {
|
|
47
|
+
return buildTrendsEmbedUrl(type, options, { locale: this.locale, timezone: this.timezone });
|
|
48
|
+
}
|
|
49
|
+
async get(url, options) {
|
|
50
|
+
if (options.signal?.aborted)
|
|
51
|
+
throw options.signal.reason ?? new DOMException('The operation was aborted', 'AbortError');
|
|
52
|
+
const controller = new AbortController();
|
|
53
|
+
const abort = () => controller.abort(options.signal?.reason ?? new DOMException('The operation was aborted', 'AbortError'));
|
|
54
|
+
options.signal?.addEventListener('abort', abort, { once: true });
|
|
55
|
+
const timer = setTimeout(() => controller.abort(new TrendsError('Google Trends request timed out', 'timeout')), this.timeoutMs);
|
|
56
|
+
timer.unref?.();
|
|
57
|
+
try {
|
|
58
|
+
const response = await this.fetcher(url.toString(), { signal: controller.signal, headers: { Accept: 'application/json, application/rss+xml, application/xml, text/xml' } });
|
|
59
|
+
const body = await response.text();
|
|
60
|
+
if (controller.signal.aborted)
|
|
61
|
+
throw controller.signal.reason;
|
|
62
|
+
if (response.status === 429)
|
|
63
|
+
throw new TrendsError('Google Trends rate limited this request', 'rate-limit', 429, retryAfter(response.headers.get('retry-after')));
|
|
64
|
+
const html = response.headers.get('content-type')?.includes('text/html') || /^\s*<!doctype html|^\s*<html/i.test(body);
|
|
65
|
+
if (html && /unusual traffic|g-recaptcha|recaptcha\/api|\/sorry\/index/i.test(body))
|
|
66
|
+
throw new TrendsError('Google Trends returned a traffic challenge', 'blocked', response.status);
|
|
67
|
+
if (!response.ok)
|
|
68
|
+
throw new TrendsError(`Google Trends returned HTTP ${response.status}`, 'http', response.status, retryAfter(response.headers.get('retry-after')));
|
|
69
|
+
if (html)
|
|
70
|
+
throw new TrendsError('Google Trends returned an HTML access page', 'blocked', response.status);
|
|
71
|
+
return body;
|
|
72
|
+
}
|
|
73
|
+
catch (cause) {
|
|
74
|
+
if (controller.signal.aborted)
|
|
75
|
+
throw controller.signal.reason;
|
|
76
|
+
if (cause instanceof TrendsError)
|
|
77
|
+
throw cause;
|
|
78
|
+
throw new TrendsError('Google Trends request failed', 'network', undefined, undefined, { cause });
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
clearTimeout(timer);
|
|
82
|
+
options.signal?.removeEventListener('abort', abort);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/trends/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type TrendsErrorKind = 'http' | 'rate-limit' | 'blocked' | 'parse' | 'timeout' | 'network';
|
|
2
|
+
export declare class TrendsError extends Error {
|
|
3
|
+
readonly kind: TrendsErrorKind;
|
|
4
|
+
readonly status?: number | undefined;
|
|
5
|
+
readonly retryAfterMs?: number | undefined;
|
|
6
|
+
constructor(message: string, kind: TrendsErrorKind, status?: number | undefined, retryAfterMs?: number | undefined, options?: ErrorOptions);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/trends/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAElG,qBAAa,WAAY,SAAQ,KAAK;IAGlC,QAAQ,CAAC,IAAI,EAAE,eAAe;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM;gBAH9B,OAAO,EAAE,MAAM,EACN,IAAI,EAAE,eAAe,EACrB,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,YAAY,CAAC,EAAE,MAAM,YAAA,EAC9B,OAAO,CAAC,EAAE,YAAY;CAKzB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class TrendsError extends Error {
|
|
2
|
+
kind;
|
|
3
|
+
status;
|
|
4
|
+
retryAfterMs;
|
|
5
|
+
constructor(message, kind, status, retryAfterMs, options) {
|
|
6
|
+
super(message, options);
|
|
7
|
+
this.kind = kind;
|
|
8
|
+
this.status = status;
|
|
9
|
+
this.retryAfterMs = retryAfterMs;
|
|
10
|
+
this.name = 'TrendsError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/trends/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGzB;IACA;IACA;IAJX,YACE,OAAe,EACN,IAAqB,EACrB,MAAe,EACf,YAAqB,EAC9B,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QALf,SAAI,GAAJ,IAAI,CAAiB;QACrB,WAAM,GAAN,MAAM,CAAS;QACf,iBAAY,GAAZ,YAAY,CAAS;QAI9B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TrendsEmbedType, TrendsExploreOptions, TrendsLinkOptions } from './types.js';
|
|
2
|
+
export declare function trendsTimezone(value: number): number;
|
|
3
|
+
export declare function trendsGeo(value: string): string;
|
|
4
|
+
/** Builds a website link for comparisons sharing one location and time range. */
|
|
5
|
+
export declare function buildTrendsExploreUrl(options: TrendsExploreOptions, link?: TrendsLinkOptions): string;
|
|
6
|
+
/** Builds an iframe URL using the request structure in Google's shipped embed loader. */
|
|
7
|
+
export declare function buildTrendsEmbedUrl(type: TrendsEmbedType, options: TrendsExploreOptions, link?: TrendsLinkOptions): string;
|
|
8
|
+
//# sourceMappingURL=links.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/trends/links.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAK3F,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/C;AAmBD,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,EAAE,IAAI,GAAE,iBAAsB,GAAG,MAAM,CAgBzG;AAED,yFAAyF;AACzF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,GAAE,iBAAsB,GAAG,MAAM,CAO9H"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
const PROPERTIES = new Set(['', 'images', 'news', 'froogle', 'youtube']);
|
|
2
|
+
const EMBEDS = new Set(['TIMESERIES', 'GEO_MAP', 'RELATED_TOPICS', 'RELATED_QUERIES']);
|
|
3
|
+
export function trendsTimezone(value) {
|
|
4
|
+
if (!Number.isInteger(value) || Math.abs(value) > 1440)
|
|
5
|
+
throw new RangeError('timezone must be integer minutes west of UTC between -1440 and 1440');
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
export function trendsGeo(value) {
|
|
9
|
+
if (!/^[A-Z]{2}(?:-[A-Z0-9]+)*$/.test(value))
|
|
10
|
+
throw new TypeError('geo must be a country or subdivision code such as US or US-CA');
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
function request(options) {
|
|
14
|
+
if (!Array.isArray(options.comparisonItem) || options.comparisonItem.length === 0)
|
|
15
|
+
throw new TypeError('comparisonItem must contain at least one keyword');
|
|
16
|
+
const comparisonItem = options.comparisonItem.map(item => {
|
|
17
|
+
if (typeof item.keyword !== 'string' || item.keyword.trim().length === 0)
|
|
18
|
+
throw new TypeError('keyword must be a nonempty search term or topic ID');
|
|
19
|
+
const geo = item.geo ?? '';
|
|
20
|
+
if (geo !== '')
|
|
21
|
+
trendsGeo(geo);
|
|
22
|
+
const time = item.time ?? 'today 12-m';
|
|
23
|
+
if (typeof time !== 'string' || time.trim().length === 0)
|
|
24
|
+
throw new TypeError('time must be a nonempty Trends range expression');
|
|
25
|
+
return { keyword: item.keyword, geo, time };
|
|
26
|
+
});
|
|
27
|
+
const category = options.category ?? 0;
|
|
28
|
+
if (!Number.isSafeInteger(category) || category < 0)
|
|
29
|
+
throw new RangeError('category must be a nonnegative integer');
|
|
30
|
+
const property = options.property ?? '';
|
|
31
|
+
if (!PROPERTIES.has(property))
|
|
32
|
+
throw new TypeError('property must be empty, images, news, froogle, or youtube');
|
|
33
|
+
return { comparisonItem, category, property };
|
|
34
|
+
}
|
|
35
|
+
/** Builds a website link for comparisons sharing one location and time range. */
|
|
36
|
+
export function buildTrendsExploreUrl(options, link = {}) {
|
|
37
|
+
const value = request(options);
|
|
38
|
+
const items = value.comparisonItem;
|
|
39
|
+
if (new Set(items.map(item => item.geo)).size > 1 || new Set(items.map(item => item.time)).size > 1)
|
|
40
|
+
throw new TypeError('Explore links require a shared geo and time; use an embed URL for per-item settings');
|
|
41
|
+
if (items.some(item => item.keyword.includes(',')))
|
|
42
|
+
throw new TypeError('Explore links cannot preserve commas inside keywords; use an embed URL');
|
|
43
|
+
const url = new URL('https://trends.google.com/trends/explore');
|
|
44
|
+
url.searchParams.set('q', items.map(item => item.keyword).join(','));
|
|
45
|
+
const geos = items.map(item => item.geo);
|
|
46
|
+
const times = items.map(item => item.time);
|
|
47
|
+
if (geos.some(Boolean))
|
|
48
|
+
url.searchParams.set('geo', new Set(geos).size === 1 ? geos[0] : geos.join(','));
|
|
49
|
+
url.searchParams.set('date', new Set(times).size === 1 ? times[0] : times.join(','));
|
|
50
|
+
if (value.category !== 0)
|
|
51
|
+
url.searchParams.set('cat', String(value.category));
|
|
52
|
+
if (value.property !== '')
|
|
53
|
+
url.searchParams.set('gprop', String(value.property));
|
|
54
|
+
if (link.locale)
|
|
55
|
+
url.searchParams.set('hl', link.locale);
|
|
56
|
+
if (link.legacy)
|
|
57
|
+
url.searchParams.set('legacy', '');
|
|
58
|
+
return url.toString();
|
|
59
|
+
}
|
|
60
|
+
/** Builds an iframe URL using the request structure in Google's shipped embed loader. */
|
|
61
|
+
export function buildTrendsEmbedUrl(type, options, link = {}) {
|
|
62
|
+
if (!EMBEDS.has(type))
|
|
63
|
+
throw new TypeError('Unsupported Trends embed type');
|
|
64
|
+
const url = new URL(`https://trends.google.com/trends/embed/explore/${type}`);
|
|
65
|
+
url.searchParams.set('req', JSON.stringify(request(options)));
|
|
66
|
+
url.searchParams.set('tz', String(trendsTimezone(link.timezone ?? 0)));
|
|
67
|
+
if (link.locale)
|
|
68
|
+
url.searchParams.set('hl', link.locale.replace(/[^a-z]/ig, ''));
|
|
69
|
+
return url.toString();
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"links.js","sourceRoot":"","sources":["../../src/trends/links.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { TrendsFeed, TrendsSuggestions } from './types.js';
|
|
2
|
+
export declare function parseTrendsJson(text: string): Record<string, unknown>;
|
|
3
|
+
export declare function parseSuggestions(raw: unknown): TrendsSuggestions;
|
|
4
|
+
export declare function parseTrendingRss(raw: string): TrendsFeed;
|
|
5
|
+
//# sourceMappingURL=parsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/trends/parsers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiC,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAc/F,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQrE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAYhE;AA6CD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAuCxD"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { TrendsError } from './errors.js';
|
|
2
|
+
function malformed(label) {
|
|
3
|
+
throw new TrendsError(`Malformed Google Trends ${label}`, 'parse');
|
|
4
|
+
}
|
|
5
|
+
function object(value) {
|
|
6
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
7
|
+
}
|
|
8
|
+
function nonempty(value, label) {
|
|
9
|
+
return typeof value === 'string' && value.length > 0 ? value : malformed(label);
|
|
10
|
+
}
|
|
11
|
+
export function parseTrendsJson(text) {
|
|
12
|
+
// The anonymous JSON endpoints prepend )]}', as an XSSI guard.
|
|
13
|
+
const body = text.replace(/^\uFEFF/, '').replace(/^\)\]\}',?\s*/, '');
|
|
14
|
+
let parsed;
|
|
15
|
+
try {
|
|
16
|
+
parsed = JSON.parse(body);
|
|
17
|
+
}
|
|
18
|
+
catch (cause) {
|
|
19
|
+
throw new TrendsError('Malformed Google Trends JSON', 'parse', undefined, undefined, { cause });
|
|
20
|
+
}
|
|
21
|
+
return object(parsed) ? parsed : malformed('JSON object');
|
|
22
|
+
}
|
|
23
|
+
export function parseSuggestions(raw) {
|
|
24
|
+
if (!object(raw) || !object(raw.default) || !Array.isArray(raw.default.topics))
|
|
25
|
+
return malformed('suggestions');
|
|
26
|
+
const topics = raw.default.topics.map(value => {
|
|
27
|
+
if (!object(value))
|
|
28
|
+
return malformed('topic');
|
|
29
|
+
return {
|
|
30
|
+
mid: nonempty(value.mid, 'topic ID'),
|
|
31
|
+
title: nonempty(value.title, 'topic title'),
|
|
32
|
+
type: nonempty(value.type, 'topic type'),
|
|
33
|
+
raw: value,
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
return { topics, raw };
|
|
37
|
+
}
|
|
38
|
+
function xmlMask(xml) {
|
|
39
|
+
const masked = xml.replace(/<!\[CDATA\[[\s\S]*?\]\]>|<!--[\s\S]*?-->/g, value => ' '.repeat(value.length));
|
|
40
|
+
if (masked.includes('<![CDATA[') || masked.includes('<!--'))
|
|
41
|
+
return malformed('RSS text section');
|
|
42
|
+
return masked;
|
|
43
|
+
}
|
|
44
|
+
function elements(xml, tag) {
|
|
45
|
+
const escaped = tag.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
46
|
+
const masked = xmlMask(xml);
|
|
47
|
+
const expression = new RegExp(`(<${escaped}(?:\\s[^>]*?)?>)([\\s\\S]*?)<\\/${escaped}\\s*>`, 'g');
|
|
48
|
+
const matches = Array.from(masked.matchAll(expression), match => {
|
|
49
|
+
const start = match.index;
|
|
50
|
+
const innerStart = start + match[1].length;
|
|
51
|
+
return { inner: xml.slice(innerStart, innerStart + match[2].length), start, end: start + match[0].length };
|
|
52
|
+
});
|
|
53
|
+
const starts = masked.match(new RegExp(`<${escaped}(?:\\s[^>]*?)?(?<!\\/)>`, 'g'))?.length ?? 0;
|
|
54
|
+
if (starts !== matches.length)
|
|
55
|
+
return malformed(`RSS ${tag}`);
|
|
56
|
+
return matches;
|
|
57
|
+
}
|
|
58
|
+
function blocks(xml, tag) {
|
|
59
|
+
return elements(xml, tag).map(element => element.inner);
|
|
60
|
+
}
|
|
61
|
+
function decodeXml(text) {
|
|
62
|
+
const segments = text.split(/(<!\[CDATA\[[\s\S]*?\]\]>)/g);
|
|
63
|
+
return segments.map(segment => segment.startsWith('<![CDATA[') ? segment.slice(9, -3) : segment.replace(/<!--[\s\S]*?-->/g, '').replace(/&([^;]+);/g, (_, entity) => {
|
|
64
|
+
const named = { amp: '&', lt: '<', gt: '>', quot: '"', apos: "'" };
|
|
65
|
+
if (Object.hasOwn(named, entity))
|
|
66
|
+
return named[entity];
|
|
67
|
+
const numeric = /^#x([0-9a-f]+)$/i.exec(entity) ?? /^#([0-9]+)$/.exec(entity);
|
|
68
|
+
if (!numeric)
|
|
69
|
+
return malformed('RSS entity');
|
|
70
|
+
const code = Number.parseInt(numeric[1], entity.startsWith('#x') || entity.startsWith('#X') ? 16 : 10);
|
|
71
|
+
if (code <= 0 || code > 0x10ffff || (code >= 0xd800 && code <= 0xdfff))
|
|
72
|
+
return malformed('RSS entity');
|
|
73
|
+
return String.fromCodePoint(code);
|
|
74
|
+
})).join('');
|
|
75
|
+
}
|
|
76
|
+
function tag(xml, name) {
|
|
77
|
+
const values = blocks(xml, name);
|
|
78
|
+
if (values.length > 0)
|
|
79
|
+
return decodeXml(values[0]).trim();
|
|
80
|
+
return new RegExp(`<${name}\\s*\\/>`).test(xml) ? '' : undefined;
|
|
81
|
+
}
|
|
82
|
+
export function parseTrendingRss(raw) {
|
|
83
|
+
if (/<!DOCTYPE|<!ENTITY/i.test(raw) || !/<rss(?:\s|>)/.test(raw) || !/<\/rss\s*>/.test(raw))
|
|
84
|
+
return malformed('RSS document');
|
|
85
|
+
const channels = blocks(raw, 'channel');
|
|
86
|
+
if (channels.length !== 1)
|
|
87
|
+
return malformed('RSS channel');
|
|
88
|
+
const channel = channels[0];
|
|
89
|
+
const itemElements = elements(channel, 'item');
|
|
90
|
+
const itemBlocks = itemElements.map(item => item.inner);
|
|
91
|
+
let channelMetadata = channel;
|
|
92
|
+
for (const item of [...itemElements].reverse())
|
|
93
|
+
channelMetadata = channelMetadata.slice(0, item.start) + channelMetadata.slice(item.end);
|
|
94
|
+
const items = itemBlocks.map(item => {
|
|
95
|
+
const articles = blocks(item, 'ht:news_item').map(article => ({
|
|
96
|
+
title: nonempty(tag(article, 'ht:news_item_title'), 'RSS article title'),
|
|
97
|
+
url: nonempty(tag(article, 'ht:news_item_url'), 'RSS article URL'),
|
|
98
|
+
source: tag(article, 'ht:news_item_source'),
|
|
99
|
+
snippet: tag(article, 'ht:news_item_snippet'),
|
|
100
|
+
picture: tag(article, 'ht:news_item_picture'),
|
|
101
|
+
raw: article,
|
|
102
|
+
}));
|
|
103
|
+
const published = tag(item, 'pubDate');
|
|
104
|
+
const timestamp = published === undefined ? undefined : Date.parse(published);
|
|
105
|
+
if (timestamp !== undefined && !Number.isFinite(timestamp))
|
|
106
|
+
return malformed('RSS publication date');
|
|
107
|
+
return {
|
|
108
|
+
title: nonempty(tag(item, 'title'), 'RSS item title'),
|
|
109
|
+
link: tag(item, 'link'),
|
|
110
|
+
approximateTraffic: tag(item, 'ht:approx_traffic'),
|
|
111
|
+
publishedAt: timestamp === undefined ? undefined : new Date(timestamp).toISOString(),
|
|
112
|
+
picture: tag(item, 'ht:picture'),
|
|
113
|
+
pictureSource: tag(item, 'ht:picture_source'),
|
|
114
|
+
articles,
|
|
115
|
+
raw: item,
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
return {
|
|
119
|
+
title: nonempty(tag(channelMetadata, 'title'), 'RSS title'),
|
|
120
|
+
description: tag(channelMetadata, 'description'),
|
|
121
|
+
link: tag(channelMetadata, 'link'),
|
|
122
|
+
items,
|
|
123
|
+
raw,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=parsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/trends/parsers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export interface TrendsConfig {
|
|
2
|
+
fetch?: typeof globalThis.fetch;
|
|
3
|
+
locale?: string;
|
|
4
|
+
/** Minutes west of UTC, matching Date.getTimezoneOffset(). Defaults to 0. */
|
|
5
|
+
timezone?: number;
|
|
6
|
+
/** Deadline for each request, including its response body. Defaults to 30 seconds. */
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface TrendsRequestOptions {
|
|
10
|
+
signal?: AbortSignal;
|
|
11
|
+
}
|
|
12
|
+
export interface TrendsTopic {
|
|
13
|
+
mid: string;
|
|
14
|
+
title: string;
|
|
15
|
+
type: string;
|
|
16
|
+
raw: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export interface TrendsSuggestions {
|
|
19
|
+
topics: TrendsTopic[];
|
|
20
|
+
raw: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
export interface TrendsArticle {
|
|
23
|
+
title: string;
|
|
24
|
+
url: string;
|
|
25
|
+
source?: string;
|
|
26
|
+
snippet?: string;
|
|
27
|
+
picture?: string;
|
|
28
|
+
raw: string;
|
|
29
|
+
}
|
|
30
|
+
export interface TrendingSearch {
|
|
31
|
+
title: string;
|
|
32
|
+
link?: string;
|
|
33
|
+
approximateTraffic?: string;
|
|
34
|
+
publishedAt?: string;
|
|
35
|
+
picture?: string;
|
|
36
|
+
pictureSource?: string;
|
|
37
|
+
articles: TrendsArticle[];
|
|
38
|
+
raw: string;
|
|
39
|
+
}
|
|
40
|
+
export interface TrendsFeed {
|
|
41
|
+
title: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
link?: string;
|
|
44
|
+
items: TrendingSearch[];
|
|
45
|
+
raw: string;
|
|
46
|
+
}
|
|
47
|
+
export interface TrendingOptions extends TrendsRequestOptions {
|
|
48
|
+
/** Country or supported subdivision code, for example US or IN. Defaults to US. */
|
|
49
|
+
geo?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface TrendsComparisonItem {
|
|
52
|
+
keyword: string;
|
|
53
|
+
/** Empty string selects worldwide. Defaults to worldwide. */
|
|
54
|
+
geo?: string;
|
|
55
|
+
/** Website range expression, such as today 12-m, all, or 2026-01-01 2026-09-30. */
|
|
56
|
+
time?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface TrendsExploreOptions {
|
|
59
|
+
comparisonItem: TrendsComparisonItem[];
|
|
60
|
+
category?: number;
|
|
61
|
+
property?: '' | 'images' | 'news' | 'froogle' | 'youtube';
|
|
62
|
+
}
|
|
63
|
+
export type TrendsEmbedType = 'TIMESERIES' | 'GEO_MAP' | 'RELATED_TOPICS' | 'RELATED_QUERIES';
|
|
64
|
+
export interface TrendsLinkOptions {
|
|
65
|
+
locale?: string;
|
|
66
|
+
/** Selects the classic Explore link offered by the current website. */
|
|
67
|
+
legacy?: boolean;
|
|
68
|
+
/** Minutes west of UTC. */
|
|
69
|
+
timezone?: number;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/trends/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAC3D,mFAAmF;IACnF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,oBAAoB,EAAE,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,EAAE,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;CAC3D;AAED,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAE9F,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/trends/types.ts"],"names":[],"mappings":""}
|