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
package/dist/news.js
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { googleWebText, GoogleWebError, positiveTimeout, xmlText } from './utils/google-web.js';
|
|
2
|
+
export { GoogleWebError } from './utils/google-web.js';
|
|
3
|
+
function malformedXml(message = 'Malformed Google News RSS feed') {
|
|
4
|
+
throw new GoogleWebError(message, 'parse');
|
|
5
|
+
}
|
|
6
|
+
function xmlTagEnd(xml, start) {
|
|
7
|
+
let quote;
|
|
8
|
+
for (let i = start; i < xml.length; i++) {
|
|
9
|
+
const character = xml[i];
|
|
10
|
+
if (quote) {
|
|
11
|
+
if (character === quote)
|
|
12
|
+
quote = undefined;
|
|
13
|
+
}
|
|
14
|
+
else if (character === '"' || character === "'")
|
|
15
|
+
quote = character;
|
|
16
|
+
else if (character === '>')
|
|
17
|
+
return i;
|
|
18
|
+
else if (character === '<')
|
|
19
|
+
return malformedXml();
|
|
20
|
+
}
|
|
21
|
+
return malformedXml();
|
|
22
|
+
}
|
|
23
|
+
function xmlAttributes(value) {
|
|
24
|
+
const attributes = Object.create(null);
|
|
25
|
+
const pattern = /\s+([A-Za-z_][\w.:-]*)\s*=\s*(?:"([^"<]*)"|'([^'<]*)')/y;
|
|
26
|
+
let cursor = 0;
|
|
27
|
+
while (cursor < value.length) {
|
|
28
|
+
if (!value.slice(cursor).trim())
|
|
29
|
+
break;
|
|
30
|
+
pattern.lastIndex = cursor;
|
|
31
|
+
const match = pattern.exec(value);
|
|
32
|
+
if (!match || match[1] in attributes)
|
|
33
|
+
return malformedXml('Malformed Google News XML attributes');
|
|
34
|
+
attributes[match[1]] = xmlText(match[2] ?? match[3]);
|
|
35
|
+
cursor = pattern.lastIndex;
|
|
36
|
+
}
|
|
37
|
+
return attributes;
|
|
38
|
+
}
|
|
39
|
+
function xmlRoot(xml) {
|
|
40
|
+
if (typeof xml !== 'string' || xml.length > 10_000_000)
|
|
41
|
+
return malformedXml('RSS exceeds the supported input size');
|
|
42
|
+
const stack = [];
|
|
43
|
+
let root;
|
|
44
|
+
let cursor = 0, count = 0;
|
|
45
|
+
while (cursor < xml.length) {
|
|
46
|
+
if (xml[cursor] !== '<') {
|
|
47
|
+
const next = xml.indexOf('<', cursor);
|
|
48
|
+
const end = next === -1 ? xml.length : next;
|
|
49
|
+
const text = xml.slice(cursor, end);
|
|
50
|
+
const parent = stack[stack.length - 1];
|
|
51
|
+
if (parent)
|
|
52
|
+
parent.parts.push(text);
|
|
53
|
+
else if (text.trim())
|
|
54
|
+
return malformedXml();
|
|
55
|
+
cursor = end;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (xml.startsWith('<!--', cursor)) {
|
|
59
|
+
const end = xml.indexOf('-->', cursor + 4);
|
|
60
|
+
if (end === -1 || xml.slice(cursor + 4, end).includes('--'))
|
|
61
|
+
return malformedXml('Malformed Google News XML comment');
|
|
62
|
+
cursor = end + 3;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (xml.startsWith('<![CDATA[', cursor)) {
|
|
66
|
+
const parent = stack[stack.length - 1];
|
|
67
|
+
const end = xml.indexOf(']]>', cursor + 9);
|
|
68
|
+
if (!parent || end === -1)
|
|
69
|
+
return malformedXml('Malformed Google News CDATA');
|
|
70
|
+
parent.parts.push({ cdata: xml.slice(cursor + 9, end) });
|
|
71
|
+
cursor = end + 3;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (xml.startsWith('<?', cursor)) {
|
|
75
|
+
const end = xml.indexOf('?>', cursor + 2);
|
|
76
|
+
if (end === -1)
|
|
77
|
+
return malformedXml('Malformed Google News XML processing instruction');
|
|
78
|
+
cursor = end + 2;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (xml.startsWith('<!', cursor))
|
|
82
|
+
return malformedXml('RSS declarations and external entities are unsupported');
|
|
83
|
+
const end = xmlTagEnd(xml, cursor + 1);
|
|
84
|
+
const token = xml.slice(cursor + 1, end);
|
|
85
|
+
if (token.startsWith('/')) {
|
|
86
|
+
const match = /^\/([A-Za-z_][\w.:-]*)\s*$/.exec(token);
|
|
87
|
+
const node = stack.pop();
|
|
88
|
+
if (!match || !node || node.name !== match[1])
|
|
89
|
+
return malformedXml('Mismatched Google News XML element');
|
|
90
|
+
node.closing = xml.slice(cursor, end + 1);
|
|
91
|
+
node.end = end + 1;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const match = /^([A-Za-z_][\w.:-]*)([\s\S]*)$/.exec(token);
|
|
95
|
+
if (!match)
|
|
96
|
+
return malformedXml();
|
|
97
|
+
const selfClosing = /\/\s*$/.test(match[2]);
|
|
98
|
+
const attributeText = selfClosing ? match[2].replace(/\/\s*$/, '') : match[2];
|
|
99
|
+
const node = {
|
|
100
|
+
name: match[1], attributes: xmlAttributes(attributeText), parts: [], children: [],
|
|
101
|
+
opening: xml.slice(cursor, end + 1), closing: '', start: cursor, end: end + 1,
|
|
102
|
+
};
|
|
103
|
+
const parent = stack[stack.length - 1];
|
|
104
|
+
if (parent) {
|
|
105
|
+
parent.children.push(node);
|
|
106
|
+
parent.parts.push(node);
|
|
107
|
+
}
|
|
108
|
+
else if (root)
|
|
109
|
+
return malformedXml('Google News RSS has multiple root elements');
|
|
110
|
+
else
|
|
111
|
+
root = node;
|
|
112
|
+
if (++count > 50_000 || stack.length >= 64)
|
|
113
|
+
return malformedXml('RSS exceeds supported XML complexity');
|
|
114
|
+
if (!selfClosing)
|
|
115
|
+
stack.push(node);
|
|
116
|
+
}
|
|
117
|
+
cursor = end + 1;
|
|
118
|
+
}
|
|
119
|
+
if (stack.length || !root)
|
|
120
|
+
return malformedXml('Truncated Google News RSS feed');
|
|
121
|
+
return root;
|
|
122
|
+
}
|
|
123
|
+
function elementContent(element) {
|
|
124
|
+
return element.parts.map(part => typeof part === 'string' ? xmlText(part) : 'cdata' in part ? part.cdata : xmlText(part.opening) + elementContent(part) + xmlText(part.closing)).join('');
|
|
125
|
+
}
|
|
126
|
+
function field(element, name) {
|
|
127
|
+
const child = element.children.find(item => item.name === name);
|
|
128
|
+
return child ? elementContent(child) : undefined;
|
|
129
|
+
}
|
|
130
|
+
function httpUrl(value, name) {
|
|
131
|
+
let url;
|
|
132
|
+
try {
|
|
133
|
+
url = new URL(value);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
throw new GoogleWebError(`Google News has an invalid ${name}`, 'parse');
|
|
137
|
+
}
|
|
138
|
+
if ((url.protocol !== 'https:' && url.protocol !== 'http:') || url.username || url.password)
|
|
139
|
+
throw new GoogleWebError(`Google News has an invalid ${name}`, 'parse');
|
|
140
|
+
return url.toString();
|
|
141
|
+
}
|
|
142
|
+
/** Parse Google News RSS metadata; article links remain Google's publisher redirects. */
|
|
143
|
+
export function parseGoogleNewsRss(xml) {
|
|
144
|
+
const root = xmlRoot(xml);
|
|
145
|
+
const channels = root.children.filter(child => child.name === 'channel');
|
|
146
|
+
if (root.name !== 'rss' || channels.length !== 1)
|
|
147
|
+
return malformedXml();
|
|
148
|
+
const channel = channels[0];
|
|
149
|
+
const title = field(channel, 'title'), link = field(channel, 'link');
|
|
150
|
+
if (!title || !link)
|
|
151
|
+
throw new GoogleWebError('Google News RSS has no channel title or URL', 'parse');
|
|
152
|
+
const articles = channel.children.filter(child => child.name === 'item').map(item => {
|
|
153
|
+
const rawXml = xml.slice(item.start, item.end);
|
|
154
|
+
const title = field(item, 'title'), link = field(item, 'link');
|
|
155
|
+
if (!title || !link)
|
|
156
|
+
throw new GoogleWebError('Google News article has no title or URL', 'parse');
|
|
157
|
+
const source = item.children.find(child => child.name === 'source');
|
|
158
|
+
const sourceUrl = source?.attributes.url;
|
|
159
|
+
const date = field(item, 'pubDate');
|
|
160
|
+
if (date && !Number.isFinite(Date.parse(date)))
|
|
161
|
+
throw new GoogleWebError('Google News article has an invalid publication date', 'parse');
|
|
162
|
+
return {
|
|
163
|
+
title, url: httpUrl(link, 'article URL'), guid: field(item, 'guid'),
|
|
164
|
+
publishedAt: date ? new Date(date).toISOString() : undefined,
|
|
165
|
+
source: source ? { name: elementContent(source), url: sourceUrl ? httpUrl(sourceUrl, 'source URL') : undefined } : undefined,
|
|
166
|
+
descriptionHtml: field(item, 'description'), rawXml,
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
return { title, url: httpUrl(link, 'channel URL'), language: field(channel, 'language'), copyright: field(channel, 'copyright'), articles, rawXml: xml };
|
|
170
|
+
}
|
|
171
|
+
/** Public headline and query feeds, separate from paid third-party news APIs. */
|
|
172
|
+
export class GoogleNewsClient {
|
|
173
|
+
fetcher;
|
|
174
|
+
timeoutMs;
|
|
175
|
+
defaults;
|
|
176
|
+
constructor(config = {}) {
|
|
177
|
+
this.fetcher = config.fetch ?? globalThis.fetch;
|
|
178
|
+
this.timeoutMs = positiveTimeout(config.timeoutMs ?? 30_000);
|
|
179
|
+
this.defaults = config;
|
|
180
|
+
}
|
|
181
|
+
headlines(options = {}) { return this.feed('/rss', options); }
|
|
182
|
+
search(query, options = {}) {
|
|
183
|
+
if (typeof query !== 'string' || !query.trim())
|
|
184
|
+
throw new TypeError('Google News query must not be empty');
|
|
185
|
+
return this.feed('/rss/search', options, query);
|
|
186
|
+
}
|
|
187
|
+
async feed(path, options, query) {
|
|
188
|
+
const language = options.language ?? this.defaults.language ?? 'en-US';
|
|
189
|
+
const country = options.country ?? this.defaults.country ?? 'US';
|
|
190
|
+
const edition = options.edition ?? this.defaults.edition ?? `${country}:${language.split('-')[0]}`;
|
|
191
|
+
if (!/^[a-zA-Z]{2,8}(?:-[a-zA-Z0-9]{1,8})*$/.test(language) || !/^[A-Z]{2}$/.test(country) || !/^[A-Z]{2}:[a-zA-Z-]+$/.test(edition))
|
|
192
|
+
throw new TypeError('Invalid Google News locale or edition');
|
|
193
|
+
const url = new URL(path, 'https://news.google.com');
|
|
194
|
+
for (const [key, value] of Object.entries({ hl: language, gl: country, ceid: edition }))
|
|
195
|
+
url.searchParams.set(key, value);
|
|
196
|
+
if (query !== undefined)
|
|
197
|
+
url.searchParams.set('q', query);
|
|
198
|
+
return parseGoogleNewsRss(await googleWebText(this.fetcher, url, { method: 'GET' }, this.timeoutMs, options.signal));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
export function googleNews(config = {}) { return new GoogleNewsClient(config); }
|
|
202
|
+
//# sourceMappingURL=news.js.map
|
package/dist/news.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"news.js","sourceRoot":"","sources":["../src/news.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AnalyzeOptions, CreateAnalysisOptions, PageSpeedAnalysis, PageSpeedConfig, PageSpeedRequestOptions, RunPagespeedOptions, RunPagespeedResponse, WaitForAnalysisOptions } from './types.js';
|
|
2
|
+
/** A keyless PageSpeed web client with an explicit official API method. */
|
|
3
|
+
export declare class PageSpeedClient {
|
|
4
|
+
private readonly fetcher;
|
|
5
|
+
private readonly locale;
|
|
6
|
+
private readonly requestTimeoutMs;
|
|
7
|
+
private readonly apiKey?;
|
|
8
|
+
private session?;
|
|
9
|
+
private requestId;
|
|
10
|
+
constructor(config?: PageSpeedConfig);
|
|
11
|
+
/** Starts the website's mobile and desktop Lighthouse, URL CrUX, and origin CrUX jobs. */
|
|
12
|
+
createAnalysis(url: string, options?: CreateAnalysisOptions): Promise<PageSpeedAnalysis>;
|
|
13
|
+
/** Retrieves an existing analysis by ID or a pagespeed.web.dev report URL. */
|
|
14
|
+
getAnalysis(idOrReportUrl: string, options?: PageSpeedRequestOptions): Promise<PageSpeedAnalysis>;
|
|
15
|
+
/** Refreshes pending jobs once and merges them by result ID. */
|
|
16
|
+
pollAnalysis(analysisOrId: PageSpeedAnalysis | string, options?: PageSpeedRequestOptions): Promise<PageSpeedAnalysis>;
|
|
17
|
+
/** Waits for jobs to finish; per-job errors remain available on the returned results. */
|
|
18
|
+
waitForAnalysis(analysisOrId: PageSpeedAnalysis | string, options?: WaitForAnalysisOptions): Promise<PageSpeedAnalysis>;
|
|
19
|
+
/** Creates an analysis and waits for both strategies and their field-data jobs. */
|
|
20
|
+
analyze(url: string, options?: AnalyzeOptions): Promise<PageSpeedAnalysis>;
|
|
21
|
+
/** Calls the documented v5 API; categories and API keys apply only to this method. */
|
|
22
|
+
runPagespeed(url: string, options?: RunPagespeedOptions): Promise<RunPagespeedResponse>;
|
|
23
|
+
private bootstrap;
|
|
24
|
+
private rpc;
|
|
25
|
+
private request;
|
|
26
|
+
}
|
|
27
|
+
export declare function pageSpeed(config?: PageSpeedConfig): PageSpeedClient;
|
|
28
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/pagespeed/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,cAAc,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,eAAe,EACzE,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB,EAC3F,MAAM,YAAY,CAAC;AAoDpB,2EAA2E;AAC3E,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,OAAO,CAAC,CAAmB;IACnC,OAAO,CAAC,SAAS,CAA6C;gBAElD,MAAM,GAAE,eAAoB;IAOxC,0FAA0F;IACpF,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAUlG,8EAA8E;IACxE,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAK3G,gEAAgE;IAC1D,YAAY,CAAC,YAAY,EAAE,iBAAiB,GAAG,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiB/H,yFAAyF;IACnF,eAAe,CAAC,YAAY,EAAE,iBAAiB,GAAG,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmBjI,mFAAmF;IAC7E,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIpF,sFAAsF;IAChF,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,oBAAoB,CAAC;YA0BnF,SAAS;YAUT,GAAG;YAWH,OAAO;CAmBtB;AAED,wBAAgB,SAAS,CAAC,MAAM,GAAE,eAAoB,GAAG,eAAe,CAEvE"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { PageSpeedError } from './errors.js';
|
|
2
|
+
import { parseAnalysis, parseReportId, parseResult } from './parsers.js';
|
|
3
|
+
import { buildRpcBody, decodeRpcResponse, parseSession } from './wire.js';
|
|
4
|
+
const WEB_ORIGIN = 'https://pagespeed.web.dev';
|
|
5
|
+
const API_ENDPOINT = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed';
|
|
6
|
+
const CATEGORIES = new Set(['performance', 'accessibility', 'best-practices', 'seo']);
|
|
7
|
+
function positive(value, name) {
|
|
8
|
+
if (!Number.isFinite(value) || value <= 0 || value > 2_147_483_647)
|
|
9
|
+
throw new RangeError(`${name} must be a positive number no greater than 2147483647`);
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
function targetUrl(value) {
|
|
13
|
+
let url;
|
|
14
|
+
try {
|
|
15
|
+
url = new URL(value);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
throw new TypeError('PageSpeed requires an absolute HTTP or HTTPS URL');
|
|
19
|
+
}
|
|
20
|
+
if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password)
|
|
21
|
+
throw new TypeError('PageSpeed requires an HTTP or HTTPS URL without credentials');
|
|
22
|
+
return url.toString();
|
|
23
|
+
}
|
|
24
|
+
function abortReason(signal) {
|
|
25
|
+
return signal.reason ?? new DOMException('The operation was aborted', 'AbortError');
|
|
26
|
+
}
|
|
27
|
+
function checkAbort(signal) {
|
|
28
|
+
if (signal?.aborted)
|
|
29
|
+
throw abortReason(signal);
|
|
30
|
+
}
|
|
31
|
+
function deadline(timeoutMs, parent) {
|
|
32
|
+
const controller = new AbortController();
|
|
33
|
+
const abort = () => controller.abort(parent ? abortReason(parent) : undefined);
|
|
34
|
+
if (parent?.aborted)
|
|
35
|
+
abort();
|
|
36
|
+
else
|
|
37
|
+
parent?.addEventListener('abort', abort, { once: true });
|
|
38
|
+
const timer = setTimeout(() => controller.abort(new PageSpeedError('PageSpeed operation timed out', 'timeout')), timeoutMs);
|
|
39
|
+
timer.unref?.();
|
|
40
|
+
return { signal: controller.signal, cleanup: () => { clearTimeout(timer); parent?.removeEventListener('abort', abort); } };
|
|
41
|
+
}
|
|
42
|
+
async function sleep(ms, signal) {
|
|
43
|
+
checkAbort(signal);
|
|
44
|
+
await new Promise((resolve, reject) => {
|
|
45
|
+
const abort = () => { clearTimeout(timer); reject(abortReason(signal)); };
|
|
46
|
+
const timer = setTimeout(() => { signal.removeEventListener('abort', abort); resolve(); }, ms);
|
|
47
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function retryAfter(value) {
|
|
51
|
+
if (!value)
|
|
52
|
+
return undefined;
|
|
53
|
+
if (/^\d+(\.\d+)?$/.test(value))
|
|
54
|
+
return Number(value) * 1000;
|
|
55
|
+
const timestamp = Date.parse(value);
|
|
56
|
+
return Number.isFinite(timestamp) ? Math.max(0, timestamp - Date.now()) : undefined;
|
|
57
|
+
}
|
|
58
|
+
/** A keyless PageSpeed web client with an explicit official API method. */
|
|
59
|
+
export class PageSpeedClient {
|
|
60
|
+
fetcher;
|
|
61
|
+
locale;
|
|
62
|
+
requestTimeoutMs;
|
|
63
|
+
apiKey;
|
|
64
|
+
session;
|
|
65
|
+
requestId = Math.floor(Math.random() * 90000) + 10000;
|
|
66
|
+
constructor(config = {}) {
|
|
67
|
+
this.fetcher = config.fetch ?? globalThis.fetch;
|
|
68
|
+
this.locale = config.locale ?? 'en-US';
|
|
69
|
+
this.apiKey = config.apiKey;
|
|
70
|
+
this.requestTimeoutMs = positive(config.timeoutMs ?? 120_000, 'timeoutMs');
|
|
71
|
+
}
|
|
72
|
+
/** Starts the website's mobile and desktop Lighthouse, URL CrUX, and origin CrUX jobs. */
|
|
73
|
+
async createAnalysis(url, options = {}) {
|
|
74
|
+
const normalized = targetUrl(url);
|
|
75
|
+
const session = await this.bootstrap(options.signal);
|
|
76
|
+
const args = [normalized, session.location];
|
|
77
|
+
if (options.useOriginalUrl !== undefined)
|
|
78
|
+
args.push(null, options.useOriginalUrl);
|
|
79
|
+
const raw = await this.rpc('nqfuif', args, options, { 'X-Rawurl': normalized });
|
|
80
|
+
if (!Array.isArray(raw))
|
|
81
|
+
throw new PageSpeedError('Invalid PageSpeed create response', 'parse');
|
|
82
|
+
return parseAnalysis(raw[0]);
|
|
83
|
+
}
|
|
84
|
+
/** Retrieves an existing analysis by ID or a pagespeed.web.dev report URL. */
|
|
85
|
+
async getAnalysis(idOrReportUrl, options = {}) {
|
|
86
|
+
const id = parseReportId(idOrReportUrl);
|
|
87
|
+
return parseAnalysis(await this.rpc('CBayme', [id], options));
|
|
88
|
+
}
|
|
89
|
+
/** Refreshes pending jobs once and merges them by result ID. */
|
|
90
|
+
async pollAnalysis(analysisOrId, options = {}) {
|
|
91
|
+
checkAbort(options.signal);
|
|
92
|
+
const analysis = typeof analysisOrId === 'string' ? await this.getAnalysis(analysisOrId, options) : analysisOrId;
|
|
93
|
+
const pending = analysis.results.filter(result => result.status === 'pending').map(result => result.id);
|
|
94
|
+
if (pending.length === 0)
|
|
95
|
+
return analysis;
|
|
96
|
+
const raw = await this.rpc('LsX2he', [analysis.id, pending], options);
|
|
97
|
+
if (!Array.isArray(raw) || !Array.isArray(raw[0]))
|
|
98
|
+
throw new PageSpeedError('Invalid PageSpeed poll response', 'parse');
|
|
99
|
+
const updates = new Map(raw[0].map(value => { const result = parseResult(value); return [result.id, result]; }));
|
|
100
|
+
const results = analysis.results.map(result => { const update = updates.get(result.id); updates.delete(result.id); return update ?? result; });
|
|
101
|
+
results.push(...updates.values());
|
|
102
|
+
const complete = results.length > 0 && results.every(result => result.status === 'complete');
|
|
103
|
+
const merged = [...analysis.raw];
|
|
104
|
+
merged[2] = complete ? 2 : analysis.statusCode;
|
|
105
|
+
merged[4] = results.map(result => result.raw);
|
|
106
|
+
return parseAnalysis(merged);
|
|
107
|
+
}
|
|
108
|
+
/** Waits for jobs to finish; per-job errors remain available on the returned results. */
|
|
109
|
+
async waitForAnalysis(analysisOrId, options = {}) {
|
|
110
|
+
const timeoutMs = positive(options.timeoutMs ?? 180_000, 'timeoutMs');
|
|
111
|
+
const interval = positive(options.pollIntervalMs ?? 3000, 'pollIntervalMs');
|
|
112
|
+
const operation = deadline(timeoutMs, options.signal);
|
|
113
|
+
try {
|
|
114
|
+
checkAbort(operation.signal);
|
|
115
|
+
let analysis = typeof analysisOrId === 'string' ? await this.getAnalysis(analysisOrId, operation) : analysisOrId;
|
|
116
|
+
options.onProgress?.(analysis);
|
|
117
|
+
while (analysis.status === 'pending' || analysis.results.some(result => result.status === 'pending')) {
|
|
118
|
+
checkAbort(operation.signal);
|
|
119
|
+
await sleep(interval, operation.signal);
|
|
120
|
+
analysis = await this.pollAnalysis(analysis, operation);
|
|
121
|
+
options.onProgress?.(analysis);
|
|
122
|
+
}
|
|
123
|
+
checkAbort(operation.signal);
|
|
124
|
+
return analysis;
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
operation.cleanup();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/** Creates an analysis and waits for both strategies and their field-data jobs. */
|
|
131
|
+
async analyze(url, options = {}) {
|
|
132
|
+
return this.waitForAnalysis(await this.createAnalysis(url, options), options);
|
|
133
|
+
}
|
|
134
|
+
/** Calls the documented v5 API; categories and API keys apply only to this method. */
|
|
135
|
+
async runPagespeed(url, options = {}) {
|
|
136
|
+
const normalized = targetUrl(url);
|
|
137
|
+
if (options.strategy !== undefined && options.strategy !== 'mobile' && options.strategy !== 'desktop')
|
|
138
|
+
throw new TypeError('strategy must be mobile or desktop');
|
|
139
|
+
const endpoint = new URL(API_ENDPOINT);
|
|
140
|
+
endpoint.searchParams.set('url', normalized);
|
|
141
|
+
endpoint.searchParams.set('strategy', options.strategy ?? 'desktop');
|
|
142
|
+
endpoint.searchParams.set('locale', options.locale ?? this.locale);
|
|
143
|
+
for (const category of options.categories ?? []) {
|
|
144
|
+
if (!CATEGORIES.has(category))
|
|
145
|
+
throw new TypeError(`Unsupported PageSpeed API category: ${category}`);
|
|
146
|
+
endpoint.searchParams.append('category', category);
|
|
147
|
+
}
|
|
148
|
+
if (this.apiKey)
|
|
149
|
+
endpoint.searchParams.set('key', this.apiKey);
|
|
150
|
+
for (const [key, value] of [['captchaToken', options.captchaToken], ['utm_campaign', options.utmCampaign], ['utm_source', options.utmSource]]) {
|
|
151
|
+
if (value !== undefined)
|
|
152
|
+
endpoint.searchParams.set(key, value);
|
|
153
|
+
}
|
|
154
|
+
const body = await this.request(endpoint, { method: 'GET' }, options.signal);
|
|
155
|
+
let data;
|
|
156
|
+
try {
|
|
157
|
+
data = JSON.parse(body);
|
|
158
|
+
}
|
|
159
|
+
catch (cause) {
|
|
160
|
+
throw new PageSpeedError('Invalid PageSpeed API JSON response', 'parse', undefined, undefined, undefined, { cause });
|
|
161
|
+
}
|
|
162
|
+
if (!data || typeof data !== 'object' || Array.isArray(data))
|
|
163
|
+
throw new PageSpeedError('Invalid PageSpeed API response', 'parse');
|
|
164
|
+
const error = data.error;
|
|
165
|
+
if (error)
|
|
166
|
+
throw new PageSpeedError(error.message ?? 'PageSpeed API failed', 'rpc', undefined, error.code);
|
|
167
|
+
return data;
|
|
168
|
+
}
|
|
169
|
+
async bootstrap(signal) {
|
|
170
|
+
checkAbort(signal);
|
|
171
|
+
if (!this.session) {
|
|
172
|
+
const url = new URL(WEB_ORIGIN);
|
|
173
|
+
url.searchParams.set('hl', this.locale);
|
|
174
|
+
this.session = parseSession(await this.request(url, { method: 'GET' }, signal));
|
|
175
|
+
}
|
|
176
|
+
return this.session;
|
|
177
|
+
}
|
|
178
|
+
async rpc(id, args, options, headers = {}) {
|
|
179
|
+
const session = await this.bootstrap(options.signal);
|
|
180
|
+
const url = new URL('/_/PagespeedUi/data/batchexecute', WEB_ORIGIN);
|
|
181
|
+
for (const [key, value] of Object.entries({ rpcids: id, 'source-path': '/analysis', 'f.sid': session.sessionId, bl: session.build, hl: this.locale, _reqid: String(this.requestId += 100000), rt: 'c' }))
|
|
182
|
+
url.searchParams.set(key, value);
|
|
183
|
+
return decodeRpcResponse(await this.request(url, {
|
|
184
|
+
method: 'POST',
|
|
185
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', ...headers },
|
|
186
|
+
body: buildRpcBody(id, args, session.token),
|
|
187
|
+
}, options.signal), id);
|
|
188
|
+
}
|
|
189
|
+
async request(url, init, signal) {
|
|
190
|
+
checkAbort(signal);
|
|
191
|
+
const operation = deadline(this.requestTimeoutMs, signal);
|
|
192
|
+
try {
|
|
193
|
+
const response = await this.fetcher(url.toString(), { ...init, signal: operation.signal });
|
|
194
|
+
const body = await response.text();
|
|
195
|
+
checkAbort(operation.signal);
|
|
196
|
+
if (!response.ok) {
|
|
197
|
+
let message = `PageSpeed HTTP ${response.status}`;
|
|
198
|
+
try {
|
|
199
|
+
const error = JSON.parse(body).error;
|
|
200
|
+
if (typeof error?.message === 'string')
|
|
201
|
+
message += `: ${error.message}`;
|
|
202
|
+
}
|
|
203
|
+
catch { }
|
|
204
|
+
throw new PageSpeedError(message, 'http', response.status, undefined, retryAfter(response.headers.get('Retry-After')));
|
|
205
|
+
}
|
|
206
|
+
return body;
|
|
207
|
+
}
|
|
208
|
+
catch (cause) {
|
|
209
|
+
checkAbort(operation.signal);
|
|
210
|
+
if (cause instanceof PageSpeedError)
|
|
211
|
+
throw cause;
|
|
212
|
+
throw new PageSpeedError('PageSpeed network request failed', 'network', undefined, undefined, undefined, { cause });
|
|
213
|
+
}
|
|
214
|
+
finally {
|
|
215
|
+
operation.cleanup();
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
export function pageSpeed(config = {}) {
|
|
220
|
+
return new PageSpeedClient(config);
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/pagespeed/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type PageSpeedErrorKind = 'http' | 'rpc' | 'parse' | 'timeout' | 'network';
|
|
2
|
+
export declare class PageSpeedError extends Error {
|
|
3
|
+
readonly kind: PageSpeedErrorKind;
|
|
4
|
+
readonly status?: number | undefined;
|
|
5
|
+
readonly rpcCode?: number | undefined;
|
|
6
|
+
readonly retryAfterMs?: number | undefined;
|
|
7
|
+
constructor(message: string, kind: PageSpeedErrorKind, status?: number | undefined, rpcCode?: number | undefined, retryAfterMs?: number | undefined, options?: ErrorOptions);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/pagespeed/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAElF,qBAAa,cAAe,SAAQ,KAAK;IAGrC,QAAQ,CAAC,IAAI,EAAE,kBAAkB;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM;gBAJ9B,OAAO,EAAE,MAAM,EACN,IAAI,EAAE,kBAAkB,EACxB,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,YAAY,CAAC,EAAE,MAAM,YAAA,EAC9B,OAAO,CAAC,EAAE,YAAY;CAKzB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class PageSpeedError extends Error {
|
|
2
|
+
kind;
|
|
3
|
+
status;
|
|
4
|
+
rpcCode;
|
|
5
|
+
retryAfterMs;
|
|
6
|
+
constructor(message, kind, status, rpcCode, retryAfterMs, options) {
|
|
7
|
+
super(message, options);
|
|
8
|
+
this.kind = kind;
|
|
9
|
+
this.status = status;
|
|
10
|
+
this.rpcCode = rpcCode;
|
|
11
|
+
this.retryAfterMs = retryAfterMs;
|
|
12
|
+
this.name = 'PageSpeedError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/pagespeed/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAG5B;IACA;IACA;IACA;IALX,YACE,OAAe,EACN,IAAwB,EACxB,MAAe,EACf,OAAgB,EAChB,YAAqB,EAC9B,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QANf,SAAI,GAAJ,IAAI,CAAoB;QACxB,WAAM,GAAN,MAAM,CAAS;QACf,YAAO,GAAP,OAAO,CAAS;QAChB,iBAAY,GAAZ,YAAY,CAAS;QAI9B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PageSpeedAnalysis, PageSpeedFieldData, PageSpeedResult, PageSpeedStrategy } from './types.js';
|
|
2
|
+
export declare function parseReportId(value: string): string;
|
|
3
|
+
export declare function buildReportUrl(id: string, strategy?: PageSpeedStrategy): string;
|
|
4
|
+
export declare function parseAnalysis(raw: unknown): PageSpeedAnalysis;
|
|
5
|
+
export declare function parseResult(raw: unknown): PageSpeedResult;
|
|
6
|
+
export declare function parseFieldData(raw: unknown): PageSpeedFieldData;
|
|
7
|
+
//# sourceMappingURL=parsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/pagespeed/parsers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAGlB,eAAe,EAEf,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAsCpB,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAenD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAO/E;AAWD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CA2B7D;AAiBD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CA6BzD;AAkED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,CAsB/D"}
|