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.
Files changed (343) hide show
  1. package/README.md +56 -3
  2. package/dist/advanced/parsers.d.ts +1 -1
  3. package/dist/advanced/parsers.d.ts.map +1 -1
  4. package/dist/advanced/parsers.js +1 -1
  5. package/dist/advanced/parsers.js.map +1 -1
  6. package/dist/advanced.d.ts +2 -2
  7. package/dist/advanced.d.ts.map +1 -1
  8. package/dist/advanced.js.map +1 -1
  9. package/dist/books.d.ts +30 -0
  10. package/dist/books.d.ts.map +1 -0
  11. package/dist/books.js +77 -0
  12. package/dist/books.js.map +1 -0
  13. package/dist/cli/run.d.ts.map +1 -1
  14. package/dist/cli/run.js +9 -11
  15. package/dist/cli/run.js.map +1 -1
  16. package/dist/cli/tui/app.d.ts.map +1 -1
  17. package/dist/cli/tui/app.js +7 -7
  18. package/dist/cli/tui/app.js.map +1 -1
  19. package/dist/cli.js +14 -11
  20. package/dist/cli.js.map +1 -1
  21. package/dist/client/gmaps-client.d.ts +7 -29
  22. package/dist/client/gmaps-client.d.ts.map +1 -1
  23. package/dist/client/gmaps-client.js +15 -131
  24. package/dist/client/gmaps-client.js.map +1 -1
  25. package/dist/client/http-client.d.ts +3 -1
  26. package/dist/client/http-client.d.ts.map +1 -1
  27. package/dist/client/http-client.js +14 -3
  28. package/dist/client/http-client.js.map +1 -1
  29. package/dist/client/intent.d.ts +1 -11
  30. package/dist/client/intent.d.ts.map +1 -1
  31. package/dist/client/intent.js +17 -13
  32. package/dist/client/intent.js.map +1 -1
  33. package/dist/client/maps-tools.d.ts +8 -4
  34. package/dist/client/maps-tools.d.ts.map +1 -1
  35. package/dist/client/maps-tools.js +20 -11
  36. package/dist/client/maps-tools.js.map +1 -1
  37. package/dist/client/namespaces.d.ts +51 -19
  38. package/dist/client/namespaces.d.ts.map +1 -1
  39. package/dist/client/namespaces.js +82 -28
  40. package/dist/client/namespaces.js.map +1 -1
  41. package/dist/client/place-workflows.d.ts +7 -0
  42. package/dist/client/place-workflows.d.ts.map +1 -0
  43. package/dist/client/place-workflows.js +113 -0
  44. package/dist/client/place-workflows.js.map +1 -0
  45. package/dist/finance/client.d.ts +19 -0
  46. package/dist/finance/client.d.ts.map +1 -0
  47. package/dist/finance/client.js +75 -0
  48. package/dist/finance/client.js.map +1 -0
  49. package/dist/finance/parsers.d.ts +13 -0
  50. package/dist/finance/parsers.d.ts.map +1 -0
  51. package/dist/finance/parsers.js +146 -0
  52. package/dist/finance/parsers.js.map +1 -0
  53. package/dist/finance/types.d.ts +76 -0
  54. package/dist/finance/types.d.ts.map +1 -0
  55. package/dist/finance/types.js +2 -0
  56. package/dist/finance/types.js.map +1 -0
  57. package/dist/finance.d.ts +5 -0
  58. package/dist/finance.d.ts.map +1 -0
  59. package/dist/finance.js +4 -0
  60. package/dist/finance.js.map +1 -0
  61. package/dist/flights/client.d.ts +9 -0
  62. package/dist/flights/client.d.ts.map +1 -0
  63. package/dist/flights/client.js +14 -0
  64. package/dist/flights/client.js.map +1 -0
  65. package/dist/flights/parsers.d.ts +11 -0
  66. package/dist/flights/parsers.d.ts.map +1 -0
  67. package/dist/flights/parsers.js +64 -0
  68. package/dist/flights/parsers.js.map +1 -0
  69. package/dist/flights/types.d.ts +52 -0
  70. package/dist/flights/types.d.ts.map +1 -0
  71. package/dist/flights/types.js +2 -0
  72. package/dist/flights/types.js.map +1 -0
  73. package/dist/flights.d.ts +5 -0
  74. package/dist/flights.d.ts.map +1 -0
  75. package/dist/flights.js +4 -0
  76. package/dist/flights.js.map +1 -0
  77. package/dist/gemini-web/client.d.ts +16 -0
  78. package/dist/gemini-web/client.d.ts.map +1 -0
  79. package/dist/gemini-web/client.js +110 -0
  80. package/dist/gemini-web/client.js.map +1 -0
  81. package/dist/gemini-web/parsers.d.ts +5 -0
  82. package/dist/gemini-web/parsers.d.ts.map +1 -0
  83. package/dist/gemini-web/parsers.js +62 -0
  84. package/dist/gemini-web/parsers.js.map +1 -0
  85. package/dist/gemini-web/types.d.ts +47 -0
  86. package/dist/gemini-web/types.d.ts.map +1 -0
  87. package/dist/gemini-web/types.js +2 -0
  88. package/dist/gemini-web/types.js.map +1 -0
  89. package/dist/gemini-web.d.ts +5 -0
  90. package/dist/gemini-web.d.ts.map +1 -0
  91. package/dist/gemini-web.js +4 -0
  92. package/dist/gemini-web.js.map +1 -0
  93. package/dist/google-search/client.d.ts +16 -0
  94. package/dist/google-search/client.d.ts.map +1 -0
  95. package/dist/google-search/client.js +117 -0
  96. package/dist/google-search/client.js.map +1 -0
  97. package/dist/google-search/errors.d.ts +8 -0
  98. package/dist/google-search/errors.d.ts.map +1 -0
  99. package/dist/google-search/errors.js +13 -0
  100. package/dist/google-search/errors.js.map +1 -0
  101. package/dist/google-search/html.d.ts +12 -0
  102. package/dist/google-search/html.d.ts.map +1 -0
  103. package/dist/google-search/html.js +135 -0
  104. package/dist/google-search/html.js.map +1 -0
  105. package/dist/google-search/parsers.d.ts +6 -0
  106. package/dist/google-search/parsers.d.ts.map +1 -0
  107. package/dist/google-search/parsers.js +177 -0
  108. package/dist/google-search/parsers.js.map +1 -0
  109. package/dist/google-search/types.d.ts +66 -0
  110. package/dist/google-search/types.d.ts.map +1 -0
  111. package/dist/google-search/types.js +2 -0
  112. package/dist/google-search/types.js.map +1 -0
  113. package/dist/google-search.d.ts +6 -0
  114. package/dist/google-search.d.ts.map +1 -0
  115. package/dist/google-search.js +4 -0
  116. package/dist/google-search.js.map +1 -0
  117. package/dist/hotels/client.d.ts +9 -0
  118. package/dist/hotels/client.d.ts.map +1 -0
  119. package/dist/hotels/client.js +14 -0
  120. package/dist/hotels/client.js.map +1 -0
  121. package/dist/hotels/parsers.d.ts +7 -0
  122. package/dist/hotels/parsers.d.ts.map +1 -0
  123. package/dist/hotels/parsers.js +74 -0
  124. package/dist/hotels/parsers.js.map +1 -0
  125. package/dist/hotels/types.d.ts +55 -0
  126. package/dist/hotels/types.d.ts.map +1 -0
  127. package/dist/hotels/types.js +2 -0
  128. package/dist/hotels/types.js.map +1 -0
  129. package/dist/hotels.d.ts +4 -0
  130. package/dist/hotels.d.ts.map +1 -0
  131. package/dist/hotels.js +3 -0
  132. package/dist/hotels.js.map +1 -0
  133. package/dist/index.d.ts +9 -5
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +3 -1
  136. package/dist/index.js.map +1 -1
  137. package/dist/known-surfaces.d.ts +35 -5
  138. package/dist/known-surfaces.d.ts.map +1 -1
  139. package/dist/known-surfaces.js +35 -5
  140. package/dist/known-surfaces.js.map +1 -1
  141. package/dist/lens/client.d.ts +14 -0
  142. package/dist/lens/client.d.ts.map +1 -0
  143. package/dist/lens/client.js +116 -0
  144. package/dist/lens/client.js.map +1 -0
  145. package/dist/lens/errors.d.ts +8 -0
  146. package/dist/lens/errors.d.ts.map +1 -0
  147. package/dist/lens/errors.js +13 -0
  148. package/dist/lens/errors.js.map +1 -0
  149. package/dist/lens/types.d.ts +27 -0
  150. package/dist/lens/types.d.ts.map +1 -0
  151. package/dist/lens/types.js +2 -0
  152. package/dist/lens/types.js.map +1 -0
  153. package/dist/lens.d.ts +8 -0
  154. package/dist/lens.d.ts.map +1 -0
  155. package/dist/lens.js +5 -0
  156. package/dist/lens.js.map +1 -0
  157. package/dist/news.d.ts +46 -0
  158. package/dist/news.d.ts.map +1 -0
  159. package/dist/news.js +202 -0
  160. package/dist/news.js.map +1 -0
  161. package/dist/pagespeed/client.d.ts +28 -0
  162. package/dist/pagespeed/client.d.ts.map +1 -0
  163. package/dist/pagespeed/client.js +222 -0
  164. package/dist/pagespeed/client.js.map +1 -0
  165. package/dist/pagespeed/errors.d.ts +9 -0
  166. package/dist/pagespeed/errors.d.ts.map +1 -0
  167. package/dist/pagespeed/errors.js +15 -0
  168. package/dist/pagespeed/errors.js.map +1 -0
  169. package/dist/pagespeed/parsers.d.ts +7 -0
  170. package/dist/pagespeed/parsers.d.ts.map +1 -0
  171. package/dist/pagespeed/parsers.js +236 -0
  172. package/dist/pagespeed/parsers.js.map +1 -0
  173. package/dist/pagespeed/types.d.ts +156 -0
  174. package/dist/pagespeed/types.d.ts.map +1 -0
  175. package/dist/pagespeed/types.js +2 -0
  176. package/dist/pagespeed/types.js.map +1 -0
  177. package/dist/pagespeed/wire.d.ts +10 -0
  178. package/dist/pagespeed/wire.d.ts.map +1 -0
  179. package/dist/pagespeed/wire.js +96 -0
  180. package/dist/pagespeed/wire.js.map +1 -0
  181. package/dist/pagespeed.d.ts +6 -0
  182. package/dist/pagespeed.d.ts.map +1 -0
  183. package/dist/pagespeed.js +4 -0
  184. package/dist/pagespeed.js.map +1 -0
  185. package/dist/parsers/geocode.d.ts.map +1 -1
  186. package/dist/parsers/geocode.js +30 -1
  187. package/dist/parsers/geocode.js.map +1 -1
  188. package/dist/parsers/reviews.d.ts +8 -1
  189. package/dist/parsers/reviews.d.ts.map +1 -1
  190. package/dist/parsers/reviews.js +46 -9
  191. package/dist/parsers/reviews.js.map +1 -1
  192. package/dist/platform/catalog.d.ts +18 -0
  193. package/dist/platform/catalog.d.ts.map +1 -0
  194. package/dist/platform/catalog.js +320 -0
  195. package/dist/platform/catalog.js.map +1 -0
  196. package/dist/platform/parity.d.ts +12 -0
  197. package/dist/platform/parity.d.ts.map +1 -0
  198. package/dist/platform/parity.js +25 -0
  199. package/dist/platform/parity.js.map +1 -0
  200. package/dist/services/elevation.d.ts +6 -4
  201. package/dist/services/elevation.d.ts.map +1 -1
  202. package/dist/services/elevation.js +39 -4
  203. package/dist/services/elevation.js.map +1 -1
  204. package/dist/services/environment/air-quality.d.ts +39 -0
  205. package/dist/services/environment/air-quality.d.ts.map +1 -0
  206. package/dist/services/environment/air-quality.js +82 -0
  207. package/dist/services/environment/air-quality.js.map +1 -0
  208. package/dist/services/environment/weather.d.ts +42 -0
  209. package/dist/services/environment/weather.d.ts.map +1 -0
  210. package/dist/services/environment/weather.js +63 -0
  211. package/dist/services/environment/weather.js.map +1 -0
  212. package/dist/services/geocode.d.ts +5 -1
  213. package/dist/services/geocode.d.ts.map +1 -1
  214. package/dist/services/geocode.js +13 -0
  215. package/dist/services/geocode.js.map +1 -1
  216. package/dist/services/keyed.d.ts +80 -0
  217. package/dist/services/keyed.d.ts.map +1 -0
  218. package/dist/services/keyed.js +152 -0
  219. package/dist/services/keyed.js.map +1 -0
  220. package/dist/services/knowledge.d.ts +6 -2
  221. package/dist/services/knowledge.d.ts.map +1 -1
  222. package/dist/services/knowledge.js +30 -5
  223. package/dist/services/knowledge.js.map +1 -1
  224. package/dist/services/mobility.d.ts.map +1 -1
  225. package/dist/services/mobility.js +13 -2
  226. package/dist/services/mobility.js.map +1 -1
  227. package/dist/services/nearby-search.d.ts +32 -0
  228. package/dist/services/nearby-search.d.ts.map +1 -0
  229. package/dist/services/nearby-search.js +85 -0
  230. package/dist/services/nearby-search.js.map +1 -0
  231. package/dist/services/panorama.d.ts +8 -1
  232. package/dist/services/panorama.d.ts.map +1 -1
  233. package/dist/services/panorama.js +48 -0
  234. package/dist/services/panorama.js.map +1 -1
  235. package/dist/services/photos.d.ts.map +1 -1
  236. package/dist/services/photos.js +9 -2
  237. package/dist/services/photos.js.map +1 -1
  238. package/dist/services/places.d.ts.map +1 -1
  239. package/dist/services/places.js +1 -0
  240. package/dist/services/places.js.map +1 -1
  241. package/dist/services/reviews.d.ts.map +1 -1
  242. package/dist/services/reviews.js +4 -1
  243. package/dist/services/reviews.js.map +1 -1
  244. package/dist/services/search.d.ts +8 -3
  245. package/dist/services/search.d.ts.map +1 -1
  246. package/dist/services/search.js +28 -9
  247. package/dist/services/search.js.map +1 -1
  248. package/dist/translate.d.ts +75 -0
  249. package/dist/translate.d.ts.map +1 -0
  250. package/dist/translate.js +126 -0
  251. package/dist/translate.js.map +1 -0
  252. package/dist/travel-google/common.d.ts +24 -0
  253. package/dist/travel-google/common.d.ts.map +1 -0
  254. package/dist/travel-google/common.js +72 -0
  255. package/dist/travel-google/common.js.map +1 -0
  256. package/dist/trends/client.d.ts +17 -0
  257. package/dist/trends/client.d.ts.map +1 -0
  258. package/dist/trends/client.js +86 -0
  259. package/dist/trends/client.js.map +1 -0
  260. package/dist/trends/errors.d.ts +8 -0
  261. package/dist/trends/errors.d.ts.map +1 -0
  262. package/dist/trends/errors.js +13 -0
  263. package/dist/trends/errors.js.map +1 -0
  264. package/dist/trends/links.d.ts +8 -0
  265. package/dist/trends/links.d.ts.map +1 -0
  266. package/dist/trends/links.js +71 -0
  267. package/dist/trends/links.js.map +1 -0
  268. package/dist/trends/parsers.d.ts +5 -0
  269. package/dist/trends/parsers.d.ts.map +1 -0
  270. package/dist/trends/parsers.js +126 -0
  271. package/dist/trends/parsers.js.map +1 -0
  272. package/dist/trends/types.d.ts +71 -0
  273. package/dist/trends/types.d.ts.map +1 -0
  274. package/dist/trends/types.js +2 -0
  275. package/dist/trends/types.js.map +1 -0
  276. package/dist/trends.d.ts +9 -0
  277. package/dist/trends.d.ts.map +1 -0
  278. package/dist/trends.js +8 -0
  279. package/dist/trends.js.map +1 -0
  280. package/dist/types/common.d.ts +28 -2
  281. package/dist/types/common.d.ts.map +1 -1
  282. package/dist/types/common.js.map +1 -1
  283. package/dist/types/directions.d.ts +1 -1
  284. package/dist/types/directions.d.ts.map +1 -1
  285. package/dist/types/dx.d.ts +23 -10
  286. package/dist/types/dx.d.ts.map +1 -1
  287. package/dist/types/panorama.d.ts +19 -0
  288. package/dist/types/panorama.d.ts.map +1 -1
  289. package/dist/types/reviews.d.ts +3 -4
  290. package/dist/types/reviews.d.ts.map +1 -1
  291. package/dist/types/suggest.d.ts +4 -6
  292. package/dist/types/suggest.d.ts.map +1 -1
  293. package/dist/utils/google-web.d.ts +24 -0
  294. package/dist/utils/google-web.d.ts.map +1 -0
  295. package/dist/utils/google-web.js +150 -0
  296. package/dist/utils/google-web.js.map +1 -0
  297. package/dist/utils/place-ref.d.ts +14 -4
  298. package/dist/utils/place-ref.d.ts.map +1 -1
  299. package/dist/utils/place-ref.js +49 -1
  300. package/dist/utils/place-ref.js.map +1 -1
  301. package/dist/youtube/client.d.ts +19 -0
  302. package/dist/youtube/client.d.ts.map +1 -0
  303. package/dist/youtube/client.js +115 -0
  304. package/dist/youtube/client.js.map +1 -0
  305. package/dist/youtube/errors.d.ts +8 -0
  306. package/dist/youtube/errors.d.ts.map +1 -0
  307. package/dist/youtube/errors.js +13 -0
  308. package/dist/youtube/errors.js.map +1 -0
  309. package/dist/youtube/parsers.d.ts +9 -0
  310. package/dist/youtube/parsers.d.ts.map +1 -0
  311. package/dist/youtube/parsers.js +213 -0
  312. package/dist/youtube/parsers.js.map +1 -0
  313. package/dist/youtube/types.d.ts +90 -0
  314. package/dist/youtube/types.d.ts.map +1 -0
  315. package/dist/youtube/types.js +2 -0
  316. package/dist/youtube/types.js.map +1 -0
  317. package/dist/youtube.d.ts +9 -0
  318. package/dist/youtube.d.ts.map +1 -0
  319. package/dist/youtube.js +6 -0
  320. package/dist/youtube.js.map +1 -0
  321. package/docs/books.md +18 -0
  322. package/docs/environment-research.md +65 -0
  323. package/docs/finance-research.md +153 -0
  324. package/docs/finance.md +43 -0
  325. package/docs/gemini-web.md +36 -0
  326. package/docs/google-ai-books-research.md +53 -0
  327. package/docs/google-media-research.md +105 -0
  328. package/docs/google-search-research.md +36 -0
  329. package/docs/google-search.md +53 -0
  330. package/docs/google-services-research.md +135 -0
  331. package/docs/google-travel-research.md +86 -0
  332. package/docs/internal/reverse-engineering.md +85 -0
  333. package/docs/lens.md +54 -0
  334. package/docs/maps-revalidation.md +31 -0
  335. package/docs/news.md +35 -0
  336. package/docs/pagespeed-research.md +153 -0
  337. package/docs/pagespeed.md +135 -0
  338. package/docs/reviews-research.md +33 -0
  339. package/docs/translate.md +78 -0
  340. package/docs/trends-research.md +82 -0
  341. package/docs/trends.md +75 -0
  342. package/docs/youtube.md +72 -0
  343. package/package.json +77 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translate.js","sourceRoot":"","sources":["../src/translate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAsD,MAAM,uBAAuB,CAAC;AAElM,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAkBvD,SAAS,QAAQ,CAAC,KAAa,EAAE,SAAS,GAAG,KAAK;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,uCAAuC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,KAAK,KAAK,MAAM,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC3K,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC1G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,KAAK,CAAC,KAAc,EAAE,IAAY;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,uBAAuB,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAClD,IAAI,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,MAAM,IAAI,cAAc,CAAC,2CAA2C,EAAE,OAAO,CAAC,CAAC;IACvH,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACzD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACvC,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,MAAM,IAAI,cAAc,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAC;YACvG,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;QACrJ,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,cAAc,CAAC,yCAAyC,EAAE,OAAO,CAAC,CAAC;QAC3G,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,2CAA2C,EAAE,OAAO,CAAC,CAAC;IAC1J,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAChD,gBAAgB,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QACnE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI;KAClD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,GAAY;IACtD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAClE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACxC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;YAAE,MAAM,IAAI,cAAc,CAAC,qCAAqC,EAAE,OAAO,CAAC,CAAC;QACzI,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC1K,CAAC;AAED,kGAAkG;AAClG,MAAM,OAAO,eAAe;IACT,OAAO,CAA0B;IACjC,SAAS,CAAS;IAClB,MAAM,CAAS;IACxB,OAAO,CAAiD;IACxD,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;IAEhE,YAAY,SAA0B,EAAE;QACtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,OAAyB;QACrD,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrG,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChC,yFAAyF;QACzF,OAAO,gBAAgB,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAAyB;QACnD,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrG,OAAO,2BAA2B,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,OAAuD;QAChF,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;QACrH,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,kCAAkC,EAAE,OAAO,CAAC,CAAC;QAC1L,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC7D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,2CAA2C,EAAE,OAAO,CAAC,CAAC;QAC/N,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,UAAmC,EAAE;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC/E,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACxD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACrC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,MAAM,IAAI,cAAc,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;YAChI,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAmC,EAAE;QACzD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,2BAA2B,CAAC,CAAC;QACvF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC/D,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YAC5C,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,MAAM,IAAI,cAAc,CAAC,qCAAqC,EAAE,OAAO,CAAC,CAAC;YACzG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,IAAe,EAAE,OAAgC;QAC7E,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,+BAA+B,CAAC,CAAC;YACrD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC7H,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;gBAAE,MAAM,IAAI,cAAc,CAAC,oDAAoD,EAAE,OAAO,CAAC,CAAC;YACzK,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QAC9I,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,uEAAuE,CAAC,CAAC;QAC7F,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvO,OAAO,mBAAmB,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,iDAAiD,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAClQ,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,SAA0B,EAAE,IAAqB,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/trends/types.ts"],"names":[],"mappings":""}