googlemaps-kit 0.4.0 → 0.6.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 (661) hide show
  1. package/README.md +228 -27
  2. package/dist/advanced/http.d.ts +4 -4
  3. package/dist/advanced/http.d.ts.map +1 -1
  4. package/dist/advanced/http.js +4 -4
  5. package/dist/advanced/http.js.map +1 -1
  6. package/dist/advanced/parsers.d.ts +9 -4
  7. package/dist/advanced/parsers.d.ts.map +1 -1
  8. package/dist/advanced/parsers.js +6 -3
  9. package/dist/advanced/parsers.js.map +1 -1
  10. package/dist/advanced/rpc.d.ts +12 -12
  11. package/dist/advanced/rpc.d.ts.map +1 -1
  12. package/dist/advanced/rpc.js +10 -10
  13. package/dist/advanced/rpc.js.map +1 -1
  14. package/dist/advanced/services.d.ts +18 -7
  15. package/dist/advanced/services.d.ts.map +1 -1
  16. package/dist/advanced/services.js +18 -7
  17. package/dist/advanced/services.js.map +1 -1
  18. package/dist/advanced/utils.d.ts +3 -3
  19. package/dist/advanced/utils.d.ts.map +1 -1
  20. package/dist/advanced/utils.js +3 -3
  21. package/dist/advanced/utils.js.map +1 -1
  22. package/dist/advanced.d.ts +47 -10
  23. package/dist/advanced.d.ts.map +1 -1
  24. package/dist/advanced.js +13 -6
  25. package/dist/advanced.js.map +1 -1
  26. package/dist/auth/auth-status.js +2 -2
  27. package/dist/auth/auth-status.js.map +1 -1
  28. package/dist/auth/maps-tokens.js +1 -1
  29. package/dist/auth/session.d.ts.map +1 -1
  30. package/dist/auth/session.js +17 -2
  31. package/dist/auth/session.js.map +1 -1
  32. package/dist/cli/args.d.ts +1 -0
  33. package/dist/cli/args.d.ts.map +1 -1
  34. package/dist/cli/args.js +24 -0
  35. package/dist/cli/args.js.map +1 -1
  36. package/dist/cli/format.d.ts.map +1 -1
  37. package/dist/cli/format.js +18 -27
  38. package/dist/cli/format.js.map +1 -1
  39. package/dist/cli/output.d.ts +19 -0
  40. package/dist/cli/output.d.ts.map +1 -0
  41. package/dist/cli/output.js +82 -0
  42. package/dist/cli/output.js.map +1 -0
  43. package/dist/cli/run.d.ts +55 -3
  44. package/dist/cli/run.d.ts.map +1 -1
  45. package/dist/cli/run.js +239 -18
  46. package/dist/cli/run.js.map +1 -1
  47. package/dist/cli/tui/app.d.ts +7 -2
  48. package/dist/cli/tui/app.d.ts.map +1 -1
  49. package/dist/cli/tui/app.js +116 -31
  50. package/dist/cli/tui/app.js.map +1 -1
  51. package/dist/cli/tui/styles.d.ts.map +1 -1
  52. package/dist/cli/tui/styles.js +13 -10
  53. package/dist/cli/tui/styles.js.map +1 -1
  54. package/dist/cli.d.ts +1 -10
  55. package/dist/cli.d.ts.map +1 -1
  56. package/dist/cli.js +122 -36
  57. package/dist/cli.js.map +1 -1
  58. package/dist/client/gmaps-client.d.ts +14 -31
  59. package/dist/client/gmaps-client.d.ts.map +1 -1
  60. package/dist/client/gmaps-client.js +52 -130
  61. package/dist/client/gmaps-client.js.map +1 -1
  62. package/dist/client/http-client.d.ts.map +1 -1
  63. package/dist/client/http-client.js +11 -9
  64. package/dist/client/http-client.js.map +1 -1
  65. package/dist/client/intent.d.ts +2 -12
  66. package/dist/client/intent.d.ts.map +1 -1
  67. package/dist/client/intent.js +39 -18
  68. package/dist/client/intent.js.map +1 -1
  69. package/dist/client/maps-tools.d.ts +19 -3
  70. package/dist/client/maps-tools.d.ts.map +1 -1
  71. package/dist/client/maps-tools.js +57 -4
  72. package/dist/client/maps-tools.js.map +1 -1
  73. package/dist/client/namespaces.d.ts +125 -16
  74. package/dist/client/namespaces.d.ts.map +1 -1
  75. package/dist/client/namespaces.js +189 -23
  76. package/dist/client/namespaces.js.map +1 -1
  77. package/dist/client/place-enrichment.js +1 -1
  78. package/dist/client/place-enrichment.js.map +1 -1
  79. package/dist/client/place-workflows.d.ts +7 -0
  80. package/dist/client/place-workflows.d.ts.map +1 -0
  81. package/dist/client/place-workflows.js +113 -0
  82. package/dist/client/place-workflows.js.map +1 -0
  83. package/dist/index.d.ts +54 -19
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +8 -4
  86. package/dist/index.js.map +1 -1
  87. package/dist/known-surfaces.d.ts +173 -5
  88. package/dist/known-surfaces.d.ts.map +1 -1
  89. package/dist/known-surfaces.js +173 -5
  90. package/dist/known-surfaces.js.map +1 -1
  91. package/dist/parsers/batch-url.d.ts +10 -1
  92. package/dist/parsers/batch-url.d.ts.map +1 -1
  93. package/dist/parsers/batch-url.js +30 -2
  94. package/dist/parsers/batch-url.js.map +1 -1
  95. package/dist/parsers/boq-reviews.d.ts +8 -1
  96. package/dist/parsers/boq-reviews.d.ts.map +1 -1
  97. package/dist/parsers/boq-reviews.js +50 -8
  98. package/dist/parsers/boq-reviews.js.map +1 -1
  99. package/dist/parsers/categories.d.ts.map +1 -1
  100. package/dist/parsers/categories.js +13 -10
  101. package/dist/parsers/categories.js.map +1 -1
  102. package/dist/parsers/directions.d.ts +18 -2
  103. package/dist/parsers/directions.d.ts.map +1 -1
  104. package/dist/parsers/directions.js +232 -18
  105. package/dist/parsers/directions.js.map +1 -1
  106. package/dist/parsers/geocode.d.ts +20 -2
  107. package/dist/parsers/geocode.d.ts.map +1 -1
  108. package/dist/parsers/geocode.js +139 -6
  109. package/dist/parsers/geocode.js.map +1 -1
  110. package/dist/parsers/knowledge.js +1 -1
  111. package/dist/parsers/knowledge.js.map +1 -1
  112. package/dist/parsers/lists.d.ts.map +1 -1
  113. package/dist/parsers/lists.js +29 -12
  114. package/dist/parsers/lists.js.map +1 -1
  115. package/dist/parsers/local-posts.d.ts.map +1 -1
  116. package/dist/parsers/local-posts.js +97 -12
  117. package/dist/parsers/local-posts.js.map +1 -1
  118. package/dist/parsers/mobility.d.ts +42 -0
  119. package/dist/parsers/mobility.d.ts.map +1 -0
  120. package/dist/parsers/mobility.js +130 -0
  121. package/dist/parsers/mobility.js.map +1 -0
  122. package/dist/parsers/panorama.d.ts +0 -1
  123. package/dist/parsers/panorama.d.ts.map +1 -1
  124. package/dist/parsers/panorama.js +117 -14
  125. package/dist/parsers/panorama.js.map +1 -1
  126. package/dist/parsers/photos.d.ts.map +1 -1
  127. package/dist/parsers/photos.js +15 -8
  128. package/dist/parsers/photos.js.map +1 -1
  129. package/dist/parsers/place-attributes.d.ts +12 -3
  130. package/dist/parsers/place-attributes.d.ts.map +1 -1
  131. package/dist/parsers/place-attributes.js +48 -2
  132. package/dist/parsers/place-attributes.js.map +1 -1
  133. package/dist/parsers/place-extended.d.ts +163 -0
  134. package/dist/parsers/place-extended.d.ts.map +1 -0
  135. package/dist/parsers/place-extended.js +741 -0
  136. package/dist/parsers/place-extended.js.map +1 -0
  137. package/dist/parsers/place.d.ts +15 -1
  138. package/dist/parsers/place.d.ts.map +1 -1
  139. package/dist/parsers/place.js +16 -5
  140. package/dist/parsers/place.js.map +1 -1
  141. package/dist/parsers/popular-times.d.ts +35 -0
  142. package/dist/parsers/popular-times.d.ts.map +1 -0
  143. package/dist/parsers/popular-times.js +149 -0
  144. package/dist/parsers/popular-times.js.map +1 -0
  145. package/dist/parsers/reveal.d.ts +1 -1
  146. package/dist/parsers/reveal.d.ts.map +1 -1
  147. package/dist/parsers/reveal.js +3 -2
  148. package/dist/parsers/reveal.js.map +1 -1
  149. package/dist/parsers/reviews.d.ts +24 -2
  150. package/dist/parsers/reviews.d.ts.map +1 -1
  151. package/dist/parsers/reviews.js +110 -1
  152. package/dist/parsers/reviews.js.map +1 -1
  153. package/dist/parsers/search.d.ts +17 -2
  154. package/dist/parsers/search.d.ts.map +1 -1
  155. package/dist/parsers/search.js +125 -7
  156. package/dist/parsers/search.js.map +1 -1
  157. package/dist/parsers/shared.d.ts +4 -0
  158. package/dist/parsers/shared.d.ts.map +1 -1
  159. package/dist/parsers/shared.js +10 -2
  160. package/dist/parsers/shared.js.map +1 -1
  161. package/dist/parsers/suggest.d.ts.map +1 -1
  162. package/dist/parsers/suggest.js +45 -6
  163. package/dist/parsers/suggest.js.map +1 -1
  164. package/dist/parsers/tiles.d.ts +13 -0
  165. package/dist/parsers/tiles.d.ts.map +1 -1
  166. package/dist/parsers/tiles.js +64 -0
  167. package/dist/parsers/tiles.js.map +1 -1
  168. package/dist/parsers/traffic.d.ts +9 -1
  169. package/dist/parsers/traffic.d.ts.map +1 -1
  170. package/dist/parsers/traffic.js +129 -2
  171. package/dist/parsers/traffic.js.map +1 -1
  172. package/dist/parsers/transit.d.ts +4 -2
  173. package/dist/parsers/transit.d.ts.map +1 -1
  174. package/dist/parsers/transit.js +385 -3
  175. package/dist/parsers/transit.js.map +1 -1
  176. package/dist/parsers/viewport.d.ts +20 -0
  177. package/dist/parsers/viewport.d.ts.map +1 -0
  178. package/dist/parsers/viewport.js +139 -0
  179. package/dist/parsers/viewport.js.map +1 -0
  180. package/dist/platform/catalog.d.ts +18 -0
  181. package/dist/platform/catalog.d.ts.map +1 -0
  182. package/dist/platform/catalog.js +329 -0
  183. package/dist/platform/catalog.js.map +1 -0
  184. package/dist/platform/parity.d.ts +12 -0
  185. package/dist/platform/parity.d.ts.map +1 -0
  186. package/dist/platform/parity.js +25 -0
  187. package/dist/platform/parity.js.map +1 -0
  188. package/dist/rpc/batch-execute.js +3 -3
  189. package/dist/rpc/batch-execute.js.map +1 -1
  190. package/dist/rpc/batch-request-builders.d.ts +12 -14
  191. package/dist/rpc/batch-request-builders.d.ts.map +1 -1
  192. package/dist/rpc/batch-request-builders.js +49 -17
  193. package/dist/rpc/batch-request-builders.js.map +1 -1
  194. package/dist/rpc/batch-rpc.js +1 -1
  195. package/dist/rpc/batch-services.d.ts +2 -0
  196. package/dist/rpc/batch-services.d.ts.map +1 -1
  197. package/dist/rpc/batch-services.js +4 -0
  198. package/dist/rpc/batch-services.js.map +1 -1
  199. package/dist/rpc/{descriptor-registry.d.ts → descriptors.d.ts} +29 -4
  200. package/dist/rpc/descriptors.d.ts.map +1 -0
  201. package/dist/rpc/{app-options.js → descriptors.js} +89 -5
  202. package/dist/rpc/descriptors.js.map +1 -0
  203. package/dist/rpc/earth-rocktree.d.ts +174 -0
  204. package/dist/rpc/earth-rocktree.d.ts.map +1 -0
  205. package/dist/rpc/earth-rocktree.js +468 -0
  206. package/dist/rpc/earth-rocktree.js.map +1 -0
  207. package/dist/rpc/feature-pb.d.ts +86 -0
  208. package/dist/rpc/feature-pb.d.ts.map +1 -0
  209. package/dist/rpc/feature-pb.js +112 -0
  210. package/dist/rpc/feature-pb.js.map +1 -0
  211. package/dist/rpc/feature-rpc.d.ts +15 -0
  212. package/dist/rpc/feature-rpc.d.ts.map +1 -1
  213. package/dist/rpc/feature-rpc.js +44 -0
  214. package/dist/rpc/feature-rpc.js.map +1 -1
  215. package/dist/rpc/maps-runtime.js +1 -1
  216. package/dist/rpc/panorama-pb.d.ts +3 -0
  217. package/dist/rpc/panorama-pb.d.ts.map +1 -1
  218. package/dist/rpc/panorama-pb.js +35 -3
  219. package/dist/rpc/panorama-pb.js.map +1 -1
  220. package/dist/rpc/pb-builders.d.ts +21 -1
  221. package/dist/rpc/pb-builders.d.ts.map +1 -1
  222. package/dist/rpc/pb-builders.js +62 -4
  223. package/dist/rpc/pb-builders.js.map +1 -1
  224. package/dist/rpc/photos-pb.d.ts +28 -1
  225. package/dist/rpc/photos-pb.d.ts.map +1 -1
  226. package/dist/rpc/photos-pb.js +96 -0
  227. package/dist/rpc/photos-pb.js.map +1 -1
  228. package/dist/rpc/rpc-methods.d.ts +0 -2
  229. package/dist/rpc/rpc-methods.d.ts.map +1 -1
  230. package/dist/rpc/rpc-methods.js +0 -38
  231. package/dist/rpc/rpc-methods.js.map +1 -1
  232. package/dist/rpc/search-filters.d.ts +0 -12
  233. package/dist/rpc/search-filters.d.ts.map +1 -1
  234. package/dist/rpc/search-filters.js +1 -11
  235. package/dist/rpc/search-filters.js.map +1 -1
  236. package/dist/rpc/tile-builders.d.ts +136 -0
  237. package/dist/rpc/tile-builders.d.ts.map +1 -0
  238. package/dist/rpc/tile-builders.js +172 -0
  239. package/dist/rpc/tile-builders.js.map +1 -0
  240. package/dist/rpc/xsrf-bootstrap.d.ts +0 -2
  241. package/dist/rpc/xsrf-bootstrap.d.ts.map +1 -1
  242. package/dist/rpc/xsrf-bootstrap.js +2 -2
  243. package/dist/rpc/xsrf-bootstrap.js.map +1 -1
  244. package/dist/services/aerial-view.d.ts +22 -0
  245. package/dist/services/aerial-view.d.ts.map +1 -0
  246. package/dist/services/aerial-view.js +107 -0
  247. package/dist/services/aerial-view.js.map +1 -0
  248. package/dist/services/ask-maps.d.ts +45 -5
  249. package/dist/services/ask-maps.d.ts.map +1 -1
  250. package/dist/services/ask-maps.js +148 -21
  251. package/dist/services/ask-maps.js.map +1 -1
  252. package/dist/services/directions.d.ts +17 -1
  253. package/dist/services/directions.d.ts.map +1 -1
  254. package/dist/services/directions.js +32 -0
  255. package/dist/services/directions.js.map +1 -1
  256. package/dist/services/distance-matrix.d.ts +1 -1
  257. package/dist/services/distance-matrix.d.ts.map +1 -1
  258. package/dist/services/distance-matrix.js +1 -1
  259. package/dist/services/distance-matrix.js.map +1 -1
  260. package/dist/services/elevation.d.ts +7 -5
  261. package/dist/services/elevation.d.ts.map +1 -1
  262. package/dist/services/elevation.js +42 -6
  263. package/dist/services/elevation.js.map +1 -1
  264. package/dist/services/environment/air-quality.d.ts +39 -0
  265. package/dist/services/environment/air-quality.d.ts.map +1 -0
  266. package/dist/services/environment/air-quality.js +86 -0
  267. package/dist/services/environment/air-quality.js.map +1 -0
  268. package/dist/services/environment/weather.d.ts +39 -0
  269. package/dist/services/environment/weather.d.ts.map +1 -0
  270. package/dist/services/environment/weather.js +54 -0
  271. package/dist/services/environment/weather.js.map +1 -0
  272. package/dist/services/geocode.d.ts +21 -1
  273. package/dist/services/geocode.d.ts.map +1 -1
  274. package/dist/services/geocode.js +103 -0
  275. package/dist/services/geocode.js.map +1 -1
  276. package/dist/services/keyed.d.ts +80 -0
  277. package/dist/services/keyed.d.ts.map +1 -0
  278. package/dist/services/keyed.js +152 -0
  279. package/dist/services/keyed.js.map +1 -0
  280. package/dist/services/knowledge.d.ts +6 -2
  281. package/dist/services/knowledge.d.ts.map +1 -1
  282. package/dist/services/knowledge.js +30 -5
  283. package/dist/services/knowledge.js.map +1 -1
  284. package/dist/services/lists.d.ts +7 -1
  285. package/dist/services/lists.d.ts.map +1 -1
  286. package/dist/services/lists.js +45 -1
  287. package/dist/services/lists.js.map +1 -1
  288. package/dist/services/map-3d.d.ts +66 -0
  289. package/dist/services/map-3d.d.ts.map +1 -0
  290. package/dist/services/map-3d.js +658 -0
  291. package/dist/services/map-3d.js.map +1 -0
  292. package/dist/services/map-layers.d.ts +33 -0
  293. package/dist/services/map-layers.d.ts.map +1 -0
  294. package/dist/services/map-layers.js +207 -0
  295. package/dist/services/map-layers.js.map +1 -0
  296. package/dist/services/meta.d.ts +71 -0
  297. package/dist/services/meta.d.ts.map +1 -0
  298. package/dist/services/meta.js +132 -0
  299. package/dist/services/meta.js.map +1 -0
  300. package/dist/services/mobility.d.ts +79 -0
  301. package/dist/services/mobility.d.ts.map +1 -0
  302. package/dist/services/mobility.js +307 -0
  303. package/dist/services/mobility.js.map +1 -0
  304. package/dist/services/nearby-search.d.ts +32 -0
  305. package/dist/services/nearby-search.d.ts.map +1 -0
  306. package/dist/services/nearby-search.js +85 -0
  307. package/dist/services/nearby-search.js.map +1 -0
  308. package/dist/services/panorama.d.ts +19 -1
  309. package/dist/services/panorama.d.ts.map +1 -1
  310. package/dist/services/panorama.js +111 -3
  311. package/dist/services/panorama.js.map +1 -1
  312. package/dist/services/photos.d.ts.map +1 -1
  313. package/dist/services/photos.js +12 -6
  314. package/dist/services/photos.js.map +1 -1
  315. package/dist/services/place-attributes.d.ts +31 -0
  316. package/dist/services/place-attributes.d.ts.map +1 -0
  317. package/dist/services/place-attributes.js +48 -0
  318. package/dist/services/place-attributes.js.map +1 -0
  319. package/dist/services/places.d.ts +13 -0
  320. package/dist/services/places.d.ts.map +1 -1
  321. package/dist/services/places.js +7 -4
  322. package/dist/services/places.js.map +1 -1
  323. package/dist/services/reviews.d.ts +11 -1
  324. package/dist/services/reviews.d.ts.map +1 -1
  325. package/dist/services/reviews.js +36 -12
  326. package/dist/services/reviews.js.map +1 -1
  327. package/dist/services/search-along-route.d.ts +33 -0
  328. package/dist/services/search-along-route.d.ts.map +1 -0
  329. package/dist/services/search-along-route.js +200 -0
  330. package/dist/services/search-along-route.js.map +1 -0
  331. package/dist/services/search.d.ts +29 -2
  332. package/dist/services/search.d.ts.map +1 -1
  333. package/dist/services/search.js +169 -6
  334. package/dist/services/search.js.map +1 -1
  335. package/dist/services/static-map.js +1 -1
  336. package/dist/services/static-map.js.map +1 -1
  337. package/dist/services/tiles.d.ts +39 -2
  338. package/dist/services/tiles.d.ts.map +1 -1
  339. package/dist/services/tiles.js +172 -13
  340. package/dist/services/tiles.js.map +1 -1
  341. package/dist/services/traffic.d.ts +12 -1
  342. package/dist/services/traffic.d.ts.map +1 -1
  343. package/dist/services/traffic.js +25 -2
  344. package/dist/services/traffic.js.map +1 -1
  345. package/dist/services/transit.d.ts +20 -3
  346. package/dist/services/transit.d.ts.map +1 -1
  347. package/dist/services/transit.js +69 -1
  348. package/dist/services/transit.js.map +1 -1
  349. package/dist/services/viewport.d.ts +76 -0
  350. package/dist/services/viewport.d.ts.map +1 -0
  351. package/dist/services/viewport.js +180 -0
  352. package/dist/services/viewport.js.map +1 -0
  353. package/dist/services/waypoint-optimizer.d.ts +31 -0
  354. package/dist/services/waypoint-optimizer.d.ts.map +1 -0
  355. package/dist/services/waypoint-optimizer.js +235 -0
  356. package/dist/services/waypoint-optimizer.js.map +1 -0
  357. package/dist/types/aerial-view.d.ts +39 -0
  358. package/dist/types/aerial-view.d.ts.map +1 -0
  359. package/dist/types/aerial-view.js +2 -0
  360. package/dist/types/aerial-view.js.map +1 -0
  361. package/dist/types/batch-url.d.ts +31 -0
  362. package/dist/types/batch-url.d.ts.map +1 -1
  363. package/dist/types/categories.d.ts +20 -4
  364. package/dist/types/categories.d.ts.map +1 -1
  365. package/dist/types/common.d.ts +192 -24
  366. package/dist/types/common.d.ts.map +1 -1
  367. package/dist/types/common.js +1 -1
  368. package/dist/types/common.js.map +1 -1
  369. package/dist/types/directions.d.ts +217 -3
  370. package/dist/types/directions.d.ts.map +1 -1
  371. package/dist/types/dx.d.ts +69 -11
  372. package/dist/types/dx.d.ts.map +1 -1
  373. package/dist/types/geocode.d.ts +61 -3
  374. package/dist/types/geocode.d.ts.map +1 -1
  375. package/dist/types/grid-search.d.ts +66 -0
  376. package/dist/types/grid-search.d.ts.map +1 -0
  377. package/dist/types/grid-search.js +2 -0
  378. package/dist/types/grid-search.js.map +1 -0
  379. package/dist/types/hooks.d.ts +3 -3
  380. package/dist/types/hooks.d.ts.map +1 -1
  381. package/dist/types/links.d.ts +3 -6
  382. package/dist/types/links.d.ts.map +1 -1
  383. package/dist/types/lists.d.ts +68 -3
  384. package/dist/types/lists.d.ts.map +1 -1
  385. package/dist/types/map-3d.d.ts +126 -0
  386. package/dist/types/map-3d.d.ts.map +1 -0
  387. package/dist/types/map-3d.js +2 -0
  388. package/dist/types/map-3d.js.map +1 -0
  389. package/dist/types/map-earth.d.ts +34 -0
  390. package/dist/types/map-earth.d.ts.map +1 -0
  391. package/dist/types/map-earth.js +2 -0
  392. package/dist/types/map-earth.js.map +1 -0
  393. package/dist/types/map-layers.d.ts +63 -0
  394. package/dist/types/map-layers.d.ts.map +1 -0
  395. package/dist/types/map-layers.js +2 -0
  396. package/dist/types/map-layers.js.map +1 -0
  397. package/dist/types/mobility.d.ts +121 -0
  398. package/dist/types/mobility.d.ts.map +1 -0
  399. package/dist/types/mobility.js +3 -0
  400. package/dist/types/mobility.js.map +1 -0
  401. package/dist/types/panorama.d.ts +123 -0
  402. package/dist/types/panorama.d.ts.map +1 -1
  403. package/dist/types/photos.d.ts +12 -0
  404. package/dist/types/photos.d.ts.map +1 -1
  405. package/dist/types/photos.js +2 -1
  406. package/dist/types/photos.js.map +1 -1
  407. package/dist/types/place-attributes.d.ts +15 -0
  408. package/dist/types/place-attributes.d.ts.map +1 -0
  409. package/dist/types/place-attributes.js +2 -0
  410. package/dist/types/place-attributes.js.map +1 -0
  411. package/dist/types/place-extended.d.ts +406 -0
  412. package/dist/types/place-extended.d.ts.map +1 -0
  413. package/dist/types/place-extended.js +18 -0
  414. package/dist/types/place-extended.js.map +1 -0
  415. package/dist/types/protobuf.d.ts +1 -1
  416. package/dist/types/protobuf.js +1 -1
  417. package/dist/types/reviews.d.ts +28 -1
  418. package/dist/types/reviews.d.ts.map +1 -1
  419. package/dist/types/reviews.js.map +1 -1
  420. package/dist/types/route-optimization.d.ts +56 -0
  421. package/dist/types/route-optimization.d.ts.map +1 -0
  422. package/dist/types/route-optimization.js +2 -0
  423. package/dist/types/route-optimization.js.map +1 -0
  424. package/dist/types/search-along-route.d.ts +49 -0
  425. package/dist/types/search-along-route.d.ts.map +1 -0
  426. package/dist/types/search-along-route.js +2 -0
  427. package/dist/types/search-along-route.js.map +1 -0
  428. package/dist/types/search-filters.d.ts +1 -1
  429. package/dist/types/search-filters.js +1 -1
  430. package/dist/types/suggest.d.ts +23 -2
  431. package/dist/types/suggest.d.ts.map +1 -1
  432. package/dist/types/tiles.d.ts +40 -0
  433. package/dist/types/tiles.d.ts.map +1 -1
  434. package/dist/types/traffic.d.ts +58 -1
  435. package/dist/types/traffic.d.ts.map +1 -1
  436. package/dist/types/transit.d.ts +160 -1
  437. package/dist/types/transit.d.ts.map +1 -1
  438. package/dist/types/transit.js +0 -1
  439. package/dist/types/transit.js.map +1 -1
  440. package/dist/types/viewport.d.ts +159 -0
  441. package/dist/types/viewport.d.ts.map +1 -0
  442. package/dist/types/viewport.js +3 -0
  443. package/dist/types/viewport.js.map +1 -0
  444. package/dist/utils/async.d.ts +44 -0
  445. package/dist/utils/async.d.ts.map +1 -0
  446. package/dist/utils/async.js +132 -0
  447. package/dist/utils/async.js.map +1 -0
  448. package/dist/utils/encoded-polyline.d.ts +43 -0
  449. package/dist/utils/encoded-polyline.d.ts.map +1 -1
  450. package/dist/utils/encoded-polyline.js +71 -0
  451. package/dist/utils/encoded-polyline.js.map +1 -1
  452. package/dist/utils/env.d.ts +6 -0
  453. package/dist/utils/env.d.ts.map +1 -0
  454. package/dist/utils/{load-env.js → env.js} +32 -7
  455. package/dist/utils/env.js.map +1 -0
  456. package/dist/utils/geo.d.ts +12 -0
  457. package/dist/utils/geo.d.ts.map +1 -1
  458. package/dist/utils/geo.js +20 -0
  459. package/dist/utils/geo.js.map +1 -1
  460. package/dist/utils/hooks.d.ts +2 -3
  461. package/dist/utils/hooks.d.ts.map +1 -1
  462. package/dist/utils/hooks.js +1 -1
  463. package/dist/utils/hooks.js.map +1 -1
  464. package/dist/utils/ids.d.ts +1 -0
  465. package/dist/utils/ids.d.ts.map +1 -1
  466. package/dist/utils/ids.js +10 -0
  467. package/dist/utils/ids.js.map +1 -1
  468. package/dist/utils/net.d.ts +46 -0
  469. package/dist/utils/net.d.ts.map +1 -0
  470. package/dist/utils/net.js +150 -0
  471. package/dist/utils/net.js.map +1 -0
  472. package/dist/utils/payload.d.ts +22 -0
  473. package/dist/utils/payload.d.ts.map +1 -0
  474. package/dist/utils/{chunked-decoder.js → payload.js} +80 -2
  475. package/dist/utils/payload.js.map +1 -0
  476. package/dist/utils/place-ref.d.ts +40 -3
  477. package/dist/utils/place-ref.d.ts.map +1 -1
  478. package/dist/utils/place-ref.js +94 -2
  479. package/dist/utils/place-ref.js.map +1 -1
  480. package/package.json +8 -5
  481. package/dist/client/product-namespaces.d.ts +0 -30
  482. package/dist/client/product-namespaces.d.ts.map +0 -1
  483. package/dist/client/product-namespaces.js +0 -47
  484. package/dist/client/product-namespaces.js.map +0 -1
  485. package/dist/parsers/elevation-directions.d.ts +0 -18
  486. package/dist/parsers/elevation-directions.d.ts.map +0 -1
  487. package/dist/parsers/elevation-directions.js +0 -102
  488. package/dist/parsers/elevation-directions.js.map +0 -1
  489. package/dist/parsers/passiveassist.d.ts +0 -10
  490. package/dist/parsers/passiveassist.d.ts.map +0 -1
  491. package/dist/parsers/passiveassist.js +0 -61
  492. package/dist/parsers/passiveassist.js.map +0 -1
  493. package/dist/parsers/review-aggregates.d.ts +0 -7
  494. package/dist/parsers/review-aggregates.d.ts.map +0 -1
  495. package/dist/parsers/review-aggregates.js +0 -18
  496. package/dist/parsers/review-aggregates.js.map +0 -1
  497. package/dist/parsers/review-client-filters.d.ts +0 -8
  498. package/dist/parsers/review-client-filters.d.ts.map +0 -1
  499. package/dist/parsers/review-client-filters.js +0 -28
  500. package/dist/parsers/review-client-filters.js.map +0 -1
  501. package/dist/parsers/search-client-filters.d.ts +0 -7
  502. package/dist/parsers/search-client-filters.d.ts.map +0 -1
  503. package/dist/parsers/search-client-filters.js +0 -44
  504. package/dist/parsers/search-client-filters.js.map +0 -1
  505. package/dist/parsers/search-pagination.d.ts +0 -12
  506. package/dist/parsers/search-pagination.d.ts.map +0 -1
  507. package/dist/parsers/search-pagination.js +0 -34
  508. package/dist/parsers/search-pagination.js.map +0 -1
  509. package/dist/parsers/timezone-geocode.d.ts +0 -20
  510. package/dist/parsers/timezone-geocode.d.ts.map +0 -1
  511. package/dist/parsers/timezone-geocode.js +0 -96
  512. package/dist/parsers/timezone-geocode.js.map +0 -1
  513. package/dist/parsers/ugc-aggregates.d.ts +0 -9
  514. package/dist/parsers/ugc-aggregates.d.ts.map +0 -1
  515. package/dist/parsers/ugc-aggregates.js +0 -23
  516. package/dist/parsers/ugc-aggregates.js.map +0 -1
  517. package/dist/rpc/app-options.d.ts +0 -25
  518. package/dist/rpc/app-options.d.ts.map +0 -1
  519. package/dist/rpc/app-options.js.map +0 -1
  520. package/dist/rpc/batchexecute-args.d.ts +0 -30
  521. package/dist/rpc/batchexecute-args.d.ts.map +0 -1
  522. package/dist/rpc/batchexecute-args.js +0 -35
  523. package/dist/rpc/batchexecute-args.js.map +0 -1
  524. package/dist/rpc/boq-reviews.d.ts +0 -16
  525. package/dist/rpc/boq-reviews.d.ts.map +0 -1
  526. package/dist/rpc/boq-reviews.js +0 -45
  527. package/dist/rpc/boq-reviews.js.map +0 -1
  528. package/dist/rpc/descriptor-registry.d.ts.map +0 -1
  529. package/dist/rpc/descriptor-registry.js +0 -47
  530. package/dist/rpc/descriptor-registry.js.map +0 -1
  531. package/dist/rpc/lists-pb.d.ts +0 -20
  532. package/dist/rpc/lists-pb.d.ts.map +0 -1
  533. package/dist/rpc/lists-pb.js +0 -20
  534. package/dist/rpc/lists-pb.js.map +0 -1
  535. package/dist/rpc/nxa.d.ts +0 -13
  536. package/dist/rpc/nxa.d.ts.map +0 -1
  537. package/dist/rpc/nxa.js +0 -44
  538. package/dist/rpc/nxa.js.map +0 -1
  539. package/dist/rpc/passiveassist-pb.d.ts +0 -21
  540. package/dist/rpc/passiveassist-pb.d.ts.map +0 -1
  541. package/dist/rpc/passiveassist-pb.js +0 -24
  542. package/dist/rpc/passiveassist-pb.js.map +0 -1
  543. package/dist/rpc/photo-category-tokens.d.ts +0 -29
  544. package/dist/rpc/photo-category-tokens.d.ts.map +0 -1
  545. package/dist/rpc/photo-category-tokens.js +0 -97
  546. package/dist/rpc/photo-category-tokens.js.map +0 -1
  547. package/dist/rpc/reveal-pb.d.ts +0 -26
  548. package/dist/rpc/reveal-pb.d.ts.map +0 -1
  549. package/dist/rpc/reveal-pb.js +0 -32
  550. package/dist/rpc/reveal-pb.js.map +0 -1
  551. package/dist/rpc/suggest-pb.d.ts +0 -34
  552. package/dist/rpc/suggest-pb.d.ts.map +0 -1
  553. package/dist/rpc/suggest-pb.js +0 -42
  554. package/dist/rpc/suggest-pb.js.map +0 -1
  555. package/dist/rpc/tiles-pb.d.ts +0 -45
  556. package/dist/rpc/tiles-pb.d.ts.map +0 -1
  557. package/dist/rpc/tiles-pb.js +0 -71
  558. package/dist/rpc/tiles-pb.js.map +0 -1
  559. package/dist/services/batch-url.d.ts +0 -18
  560. package/dist/services/batch-url.d.ts.map +0 -1
  561. package/dist/services/batch-url.js +0 -30
  562. package/dist/services/batch-url.js.map +0 -1
  563. package/dist/services/categories.d.ts +0 -21
  564. package/dist/services/categories.d.ts.map +0 -1
  565. package/dist/services/categories.js +0 -43
  566. package/dist/services/categories.js.map +0 -1
  567. package/dist/services/passiveassist.d.ts +0 -21
  568. package/dist/services/passiveassist.d.ts.map +0 -1
  569. package/dist/services/passiveassist.js +0 -70
  570. package/dist/services/passiveassist.js.map +0 -1
  571. package/dist/services/reveal.d.ts +0 -15
  572. package/dist/services/reveal.d.ts.map +0 -1
  573. package/dist/services/reveal.js +0 -41
  574. package/dist/services/reveal.js.map +0 -1
  575. package/dist/services/suggest.d.ts +0 -12
  576. package/dist/services/suggest.d.ts.map +0 -1
  577. package/dist/services/suggest.js +0 -36
  578. package/dist/services/suggest.js.map +0 -1
  579. package/dist/services/timezone.d.ts +0 -19
  580. package/dist/services/timezone.d.ts.map +0 -1
  581. package/dist/services/timezone.js +0 -91
  582. package/dist/services/timezone.js.map +0 -1
  583. package/dist/services/ugc-aggregates.d.ts +0 -17
  584. package/dist/services/ugc-aggregates.d.ts.map +0 -1
  585. package/dist/services/ugc-aggregates.js +0 -30
  586. package/dist/services/ugc-aggregates.js.map +0 -1
  587. package/dist/types/distance-matrix.d.ts +0 -40
  588. package/dist/types/distance-matrix.d.ts.map +0 -1
  589. package/dist/types/distance-matrix.js +0 -2
  590. package/dist/types/distance-matrix.js.map +0 -1
  591. package/dist/types/elevation.d.ts +0 -59
  592. package/dist/types/elevation.d.ts.map +0 -1
  593. package/dist/types/elevation.js +0 -2
  594. package/dist/types/elevation.js.map +0 -1
  595. package/dist/types/passiveassist.d.ts +0 -50
  596. package/dist/types/passiveassist.d.ts.map +0 -1
  597. package/dist/types/passiveassist.js +0 -2
  598. package/dist/types/passiveassist.js.map +0 -1
  599. package/dist/types/reveal.d.ts +0 -46
  600. package/dist/types/reveal.d.ts.map +0 -1
  601. package/dist/types/reveal.js +0 -2
  602. package/dist/types/reveal.js.map +0 -1
  603. package/dist/types/timezone.d.ts +0 -36
  604. package/dist/types/timezone.d.ts.map +0 -1
  605. package/dist/types/timezone.js +0 -2
  606. package/dist/types/timezone.js.map +0 -1
  607. package/dist/types/ugc-aggregates.d.ts +0 -14
  608. package/dist/types/ugc-aggregates.d.ts.map +0 -1
  609. package/dist/types/ugc-aggregates.js +0 -2
  610. package/dist/types/ugc-aggregates.js.map +0 -1
  611. package/dist/utils/abort.d.ts +0 -7
  612. package/dist/utils/abort.d.ts.map +0 -1
  613. package/dist/utils/abort.js +0 -43
  614. package/dist/utils/abort.js.map +0 -1
  615. package/dist/utils/chunked-decoder.d.ts +0 -9
  616. package/dist/utils/chunked-decoder.d.ts.map +0 -1
  617. package/dist/utils/chunked-decoder.js.map +0 -1
  618. package/dist/utils/coords.d.ts +0 -24
  619. package/dist/utils/coords.d.ts.map +0 -1
  620. package/dist/utils/coords.js +0 -37
  621. package/dist/utils/coords.js.map +0 -1
  622. package/dist/utils/feature-id.d.ts +0 -2
  623. package/dist/utils/feature-id.d.ts.map +0 -1
  624. package/dist/utils/feature-id.js +0 -11
  625. package/dist/utils/feature-id.js.map +0 -1
  626. package/dist/utils/load-env.d.ts +0 -7
  627. package/dist/utils/load-env.d.ts.map +0 -1
  628. package/dist/utils/load-env.js.map +0 -1
  629. package/dist/utils/pooled.d.ts +0 -8
  630. package/dist/utils/pooled.d.ts.map +0 -1
  631. package/dist/utils/pooled.js +0 -27
  632. package/dist/utils/pooled.js.map +0 -1
  633. package/dist/utils/request-context.d.ts +0 -9
  634. package/dist/utils/request-context.d.ts.map +0 -1
  635. package/dist/utils/request-context.js +0 -12
  636. package/dist/utils/request-context.js.map +0 -1
  637. package/dist/utils/request-scheduler.d.ts +0 -28
  638. package/dist/utils/request-scheduler.d.ts.map +0 -1
  639. package/dist/utils/request-scheduler.js +0 -58
  640. package/dist/utils/request-scheduler.js.map +0 -1
  641. package/dist/utils/response-parser.d.ts +0 -7
  642. package/dist/utils/response-parser.d.ts.map +0 -1
  643. package/dist/utils/response-parser.js +0 -50
  644. package/dist/utils/response-parser.js.map +0 -1
  645. package/dist/utils/retry-backoff.d.ts +0 -5
  646. package/dist/utils/retry-backoff.d.ts.map +0 -1
  647. package/dist/utils/retry-backoff.js +0 -23
  648. package/dist/utils/retry-backoff.js.map +0 -1
  649. package/dist/utils/safe-get.d.ts +0 -6
  650. package/dist/utils/safe-get.d.ts.map +0 -1
  651. package/dist/utils/safe-get.js +0 -29
  652. package/dist/utils/safe-get.js.map +0 -1
  653. package/dist/utils/throttle-detection.d.ts +0 -17
  654. package/dist/utils/throttle-detection.d.ts.map +0 -1
  655. package/dist/utils/throttle-detection.js +0 -71
  656. package/dist/utils/throttle-detection.js.map +0 -1
  657. package/dist/utils/ttl-cache.d.ts +0 -17
  658. package/dist/utils/ttl-cache.d.ts.map +0 -1
  659. package/dist/utils/ttl-cache.js +0 -43
  660. package/dist/utils/ttl-cache.js.map +0 -1
  661. /package/{assets → .github/assets}/banner.png +0 -0
@@ -0,0 +1,307 @@
1
+ import { SearchService } from './search.js';
2
+ import { PlacesService } from './places.js';
3
+ import { extractEvChargers, extractParkingAvailability, extractParkingPrice, requireBikeAvailability } from '../parsers/mobility.js';
4
+ import { haversineMeters } from '../utils/geo.js';
5
+ import { GMapsError } from '../types/common.js';
6
+ import { pooledMap } from '../utils/async.js';
7
+ /**
8
+ * Mobility POI services: EV charging, parking and bike-share availability.
9
+ */
10
+ /**
11
+ * Maps has no dedicated parking RPC — parking lots are ordinary places, and the
12
+ * web client finds them with a categorical text search. These queries mirror the
13
+ * category chips the Maps UI uses.
14
+ */
15
+ const TYPE_QUERIES = {
16
+ surface: 'surface parking lot',
17
+ garage: 'parking garage',
18
+ valet: 'valet parking',
19
+ street: 'street parking',
20
+ lot: 'parking lot',
21
+ };
22
+ /** Category label → ParkingType, matched loosely against Google's category strings. */
23
+ function classify(result) {
24
+ const label = `${result.category ?? ''} ${result.categories?.join(' ') ?? ''} ${result.name}`.toLowerCase();
25
+ if (label.includes('valet'))
26
+ return 'valet';
27
+ if (label.includes('garage') || label.includes('multi-storey') || label.includes('multi storey')) {
28
+ return 'garage';
29
+ }
30
+ if (label.includes('street'))
31
+ return 'street';
32
+ if (label.includes('surface'))
33
+ return 'surface';
34
+ return 'lot';
35
+ }
36
+ export class ParkingService {
37
+ search_;
38
+ places;
39
+ constructor(http, config) {
40
+ this.search_ = new SearchService(http, config);
41
+ this.places = new PlacesService(http, config);
42
+ }
43
+ /**
44
+ * Parking near a point, from a categorical place search.
45
+ *
46
+ * `radiusMeters` filters the returned rows client-side — Maps biases search by
47
+ * viewport rather than accepting a hard radius.
48
+ */
49
+ async search(options) {
50
+ const queries = options.type?.length
51
+ ? options.type.map((t) => TYPE_QUERIES[t])
52
+ : ['parking'];
53
+ const batches = await Promise.all(queries.map((query) => this.search_.searchText({
54
+ query,
55
+ location: options.location,
56
+ limit: 20,
57
+ fieldMask: 'enterprise',
58
+ })));
59
+ const seen = new Set();
60
+ const parkings = [];
61
+ for (const batch of batches) {
62
+ for (const row of batch.places) {
63
+ const id = row.hexId ?? row.placeId;
64
+ const lat = row.lat ?? row.latitude;
65
+ const lng = row.lng ?? row.longitude;
66
+ if (!id || lat == null || lng == null || seen.has(id))
67
+ continue;
68
+ seen.add(id);
69
+ const distanceMeters = haversineMeters(options.location.lat, options.location.lng, lat, lng);
70
+ if (options.radiusMeters != null && distanceMeters > options.radiusMeters)
71
+ continue;
72
+ parkings.push({
73
+ id,
74
+ name: row.name,
75
+ type: classify(row),
76
+ lat,
77
+ lng,
78
+ distanceMeters,
79
+ rating: row.rating,
80
+ reviews: row.reviewCount,
81
+ });
82
+ }
83
+ }
84
+ if (options.sort === 'price') {
85
+ parkings.sort((a, b) => (a.hourlyRate ?? Infinity) - (b.hourlyRate ?? Infinity));
86
+ }
87
+ else if (options.sort === 'availability') {
88
+ parkings.sort((a, b) => (b.availableSpaces ?? -1) - (a.availableSpaces ?? -1));
89
+ }
90
+ else {
91
+ parkings.sort((a, b) => a.distanceMeters - b.distanceMeters);
92
+ }
93
+ return parkings;
94
+ }
95
+ /**
96
+ * Live space counts for one parking place, read from its place preview.
97
+ *
98
+ * Google only publishes occupancy for a small number of operator-integrated
99
+ * garages; throws {@link GMapsError} when the place carries no counts.
100
+ */
101
+ async getAvailability(parkingId) {
102
+ const { data } = await this.places.fetchPreview({ hexId: parkingId, mode: 'live' });
103
+ const availability = extractParkingAvailability(data, parkingId);
104
+ if (!availability) {
105
+ throw new GMapsError(`No live availability published for parking ${parkingId} — Google exposes space counts only for operator-integrated garages.`);
106
+ }
107
+ return availability;
108
+ }
109
+ /**
110
+ * Posted rates for one parking place, read from its place preview.
111
+ *
112
+ * Throws {@link GMapsError} when the place carries no pricing block.
113
+ */
114
+ async getPricing(parkingId) {
115
+ const { data } = await this.places.fetchPreview({ hexId: parkingId, mode: 'live' });
116
+ const price = extractParkingPrice(data, parkingId);
117
+ if (!price) {
118
+ throw new GMapsError(`No pricing published for parking ${parkingId}.`);
119
+ }
120
+ return price;
121
+ }
122
+ }
123
+ /**
124
+ * Maps has no dedicated EV RPC. Charging stations are ordinary places found via
125
+ * categorical text search; connector type, power, and plug count come from each
126
+ * station's place preview.
127
+ */
128
+ const CONNECTOR_QUERIES = {
129
+ supercharger: 'tesla supercharger',
130
+ tesla: 'tesla charging station',
131
+ ccs: 'ccs ev charging station',
132
+ chademo: 'chademo ev charging station',
133
+ type2: 'type 2 ev charging station',
134
+ ac: 'ac ev charging station',
135
+ };
136
+ const ENRICH_CONCURRENCY = 5;
137
+ export class EvChargingService {
138
+ search_;
139
+ places;
140
+ constructor(http, config) {
141
+ this.search_ = new SearchService(http, config);
142
+ this.places = new PlacesService(http, config);
143
+ }
144
+ /**
145
+ * Charging stations near a point, with their advertised connectors.
146
+ *
147
+ * Runs one place search, then a bounded set of place-preview calls to read the
148
+ * connector block for each hit. `radiusMeters` filters client-side — Maps
149
+ * biases search by viewport rather than accepting a hard radius.
150
+ */
151
+ async findCharging(options) {
152
+ const queries = options.connectorTypes?.length
153
+ ? options.connectorTypes.map((t) => CONNECTOR_QUERIES[t])
154
+ : ['ev charging station'];
155
+ const batches = await Promise.all(queries.map((query) => this.search_.searchText({
156
+ query,
157
+ location: options.location,
158
+ limit: 20,
159
+ fieldMask: 'enterprise',
160
+ })));
161
+ const seen = new Set();
162
+ const candidates = [];
163
+ for (const batch of batches) {
164
+ for (const row of batch.places) {
165
+ const id = row.hexId ?? row.placeId;
166
+ const lat = row.lat ?? row.latitude;
167
+ const lng = row.lng ?? row.longitude;
168
+ if (!id || lat == null || lng == null || seen.has(id))
169
+ continue;
170
+ seen.add(id);
171
+ const distanceMeters = haversineMeters(options.location.lat, options.location.lng, lat, lng);
172
+ if (options.radiusMeters != null && distanceMeters > options.radiusMeters)
173
+ continue;
174
+ candidates.push({
175
+ id,
176
+ name: row.name,
177
+ operator: row.name,
178
+ lat,
179
+ lng,
180
+ distanceMeters,
181
+ chargers: [],
182
+ address: row.address,
183
+ phone: row.internationalPhone ?? row.phone,
184
+ website: row.website,
185
+ });
186
+ }
187
+ }
188
+ const enriched = await pooledMap(candidates, ENRICH_CONCURRENCY, async (station) => {
189
+ try {
190
+ const preview = await this.places.fetchPreview({
191
+ hexId: station.id,
192
+ name: station.name,
193
+ lat: station.lat,
194
+ lng: station.lng,
195
+ mode: 'live',
196
+ });
197
+ let chargers = extractEvChargers(preview.data, station.id);
198
+ if (chargers.length === 0) {
199
+ const rich = await this.places.fetchPreview({
200
+ hexId: station.id,
201
+ name: station.name,
202
+ lat: station.lat,
203
+ lng: station.lng,
204
+ mode: 'rich',
205
+ });
206
+ chargers = extractEvChargers(rich.data, station.id);
207
+ }
208
+ return { ...station, chargers };
209
+ }
210
+ catch {
211
+ // A preview failure costs connector detail, not the station itself.
212
+ return station;
213
+ }
214
+ });
215
+ const filtered = options.minPower == null
216
+ ? enriched
217
+ : enriched.filter((s) => s.chargers.some((c) => (c.power ?? 0) >= options.minPower));
218
+ if (options.sort === 'availability') {
219
+ filtered.sort((a, b) => totalPlugs(b) - totalPlugs(a));
220
+ }
221
+ else if (options.sort === 'price') {
222
+ // No pricing is published on any Maps surface — fall back to distance.
223
+ filtered.sort((a, b) => a.distanceMeters - b.distanceMeters);
224
+ }
225
+ else {
226
+ filtered.sort((a, b) => a.distanceMeters - b.distanceMeters);
227
+ }
228
+ return filtered;
229
+ }
230
+ /**
231
+ * Not available.
232
+ *
233
+ * Google publishes a per-plug status code in the place preview but documents
234
+ * no mapping to a charging state, and exposes no availability RPC. Use
235
+ * {@link findCharging} for connector type, power, and plug count.
236
+ *
237
+ * @throws {GMapsError} always
238
+ */
239
+ async getStatus(chargerId) {
240
+ throw new GMapsError(`Live charger availability is not exposed by any public Maps surface (charger ${chargerId}). ` +
241
+ 'findCharging() returns connector type, power, and plug count.');
242
+ }
243
+ /**
244
+ * Not available.
245
+ *
246
+ * Charging tariffs are not carried in Maps place data or any batchexecute
247
+ * service the web client calls.
248
+ *
249
+ * @throws {GMapsError} always
250
+ */
251
+ async getPricing(stationId) {
252
+ throw new GMapsError(`Charging pricing is not exposed by any public Maps surface (station ${stationId}).`);
253
+ }
254
+ }
255
+ function totalPlugs(station) {
256
+ return station.chargers.reduce((sum, c) => sum + (c.totalCount ?? 0), 0);
257
+ }
258
+ /**
259
+ * Bike-share dock availability.
260
+ *
261
+ * Reads the live operator-feed block from the station's place preview
262
+ * (placeData[133][0], verified anonymously across preview modes and
263
+ * operators such as Citi Bike NYC and Santander Cycles London).
264
+ */
265
+ export class BikeShareService {
266
+ places;
267
+ constructor(http, config = {}) {
268
+ this.places = new PlacesService(http, config);
269
+ }
270
+ /**
271
+ * Live dock availability for one bike-share station.
272
+ * Accepts a hexId (from search hits or `parseMapsUrl`) or name/coords/ftid hints.
273
+ */
274
+ async getAvailability(options) {
275
+ if (!options.hexId) {
276
+ throw new GMapsError('getAvailability requires a station hexId — resolve the station first via search or parseMapsUrl.');
277
+ }
278
+ const preview = await this.places.fetchPreview({
279
+ hexId: options.hexId,
280
+ name: options.name,
281
+ lat: options.lat,
282
+ lng: options.lng,
283
+ ftid: options.ftid,
284
+ mode: options.mode ?? 'live',
285
+ });
286
+ return requireBikeAvailability(preview.data);
287
+ }
288
+ /** Availability for several stations in parallel (bounded). */
289
+ async getAvailabilityMany(stations, concurrency = 5) {
290
+ const results = new Array(stations.length).fill(null);
291
+ let cursor = 0;
292
+ const runners = Array.from({ length: Math.min(concurrency, stations.length) }, async () => {
293
+ while (cursor < stations.length) {
294
+ const index = cursor++;
295
+ try {
296
+ results[index] = await this.getAvailability(stations[index]);
297
+ }
298
+ catch {
299
+ results[index] = null;
300
+ }
301
+ }
302
+ });
303
+ await Promise.all(runners);
304
+ return results;
305
+ }
306
+ }
307
+ //# sourceMappingURL=mobility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobility.js","sourceRoot":"","sources":["../../src/services/mobility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { GMapsConfig, LocationRef, SearchResult } from '../types/common.js';
2
+ import { HttpClient } from '../client/http-client.js';
3
+ export interface NearbySearchOptions {
4
+ /** Places API (New) includedTypes — at least one required. */
5
+ includedTypes: string[];
6
+ location: LocationRef;
7
+ /** Search radius in metres (client-side filter after search). */
8
+ radiusMeters?: number;
9
+ maxResultCount?: number;
10
+ hl?: string;
11
+ gl?: string;
12
+ rankPreference?: 'DISTANCE' | 'POPULARITY';
13
+ }
14
+ export interface NearbySearchResult {
15
+ places: SearchResult[];
16
+ /** Mirrors Places API (New) — offset token when more pages exist. */
17
+ nextPageToken?: string;
18
+ }
19
+ export declare class NearbySearchService {
20
+ private search;
21
+ private hl;
22
+ private gl;
23
+ constructor(http: HttpClient, config: GMapsConfig);
24
+ /**
25
+ * Nearby Search — categorical place search biased to a point.
26
+ *
27
+ * Consumer Maps has no type-only RPC; this mirrors the UI by running one
28
+ * text search per included type and merging/deduping by place id.
29
+ */
30
+ searchNearby(options: NearbySearchOptions): Promise<NearbySearchResult>;
31
+ }
32
+ //# sourceMappingURL=nearby-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nearby-search.d.ts","sourceRoot":"","sources":["../../src/services/nearby-search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAgCtD,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,WAAW,CAAC;IACtB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;CAC5C;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;gBAEP,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW;IAMjD;;;;;OAKG;IACG,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAsD9E"}
@@ -0,0 +1,85 @@
1
+ import { SearchService } from './search.js';
2
+ import { haversineMeters } from '../utils/geo.js';
3
+ /** Maps includedTypes values to categorical search queries the consumer uses. */
4
+ const TYPE_QUERY_MAP = {
5
+ restaurant: 'restaurant',
6
+ cafe: 'cafe',
7
+ bar: 'bar',
8
+ bakery: 'bakery',
9
+ hotel: 'hotel',
10
+ gas_station: 'gas station',
11
+ parking: 'parking',
12
+ hospital: 'hospital',
13
+ pharmacy: 'pharmacy',
14
+ school: 'school',
15
+ university: 'university',
16
+ bank: 'bank',
17
+ atm: 'atm',
18
+ supermarket: 'supermarket',
19
+ grocery_store: 'grocery store',
20
+ shopping_mall: 'shopping mall',
21
+ ev_charging_station: 'EV charging station',
22
+ train_station: 'train station',
23
+ bus_station: 'bus station',
24
+ airport: 'airport',
25
+ museum: 'museum',
26
+ park: 'park',
27
+ gym: 'gym',
28
+ dentist: 'dentist',
29
+ doctor: 'doctor',
30
+ };
31
+ export class NearbySearchService {
32
+ search;
33
+ hl;
34
+ gl;
35
+ constructor(http, config) {
36
+ this.search = new SearchService(http, config);
37
+ this.hl = config.hl ?? 'en';
38
+ this.gl = config.gl ?? 'us';
39
+ }
40
+ /**
41
+ * Nearby Search — categorical place search biased to a point.
42
+ *
43
+ * Consumer Maps has no type-only RPC; this mirrors the UI by running one
44
+ * text search per included type and merging/deduping by place id.
45
+ */
46
+ async searchNearby(options) {
47
+ if (options.includedTypes.length === 0) {
48
+ return { places: [] };
49
+ }
50
+ const origin = await this.search.resolveBias(options.location);
51
+ const radius = options.radiusMeters ?? 5_000;
52
+ const limit = options.maxResultCount ?? 20;
53
+ const queries = options.includedTypes.map((type) => TYPE_QUERY_MAP[type] ?? type.replace(/_/g, ' '));
54
+ const batches = await Promise.all(queries.map((query) => this.search.searchText({
55
+ query,
56
+ location: origin,
57
+ limit,
58
+ fieldMask: 'enterprise',
59
+ })));
60
+ const seen = new Set();
61
+ const scored = [];
62
+ for (const batch of batches) {
63
+ for (const row of batch.places) {
64
+ const id = row.hexId ?? row.placeId;
65
+ const lat = row.lat ?? row.latitude;
66
+ const lng = row.lng ?? row.longitude;
67
+ if (!id || lat == null || lng == null || seen.has(id))
68
+ continue;
69
+ const distance = haversineMeters(origin.lat, origin.lng, lat, lng);
70
+ if (distance > radius)
71
+ continue;
72
+ seen.add(id);
73
+ scored.push({ place: row, distance });
74
+ }
75
+ }
76
+ if (options.rankPreference === 'POPULARITY') {
77
+ scored.sort((a, b) => (b.place.reviewCount ?? 0) - (a.place.reviewCount ?? 0));
78
+ }
79
+ else {
80
+ scored.sort((a, b) => a.distance - b.distance);
81
+ }
82
+ return { places: scored.slice(0, limit).map((entry) => entry.place) };
83
+ }
84
+ }
85
+ //# sourceMappingURL=nearby-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nearby-search.js","sourceRoot":"","sources":["../../src/services/nearby-search.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { HttpClient } from '../client/http-client.js';
2
2
  import type { GMapsConfig } from '../types/common.js';
3
- import type { PanoramaGetOptions, PanoramaImageOptions, PanoramaLocationOptions, PanoramaMetadata, PanoramaRef, PanoramaSearchOptions } from '../types/panorama.js';
3
+ import type { PanoramaGetOptions, PanoramaImageOptions, PanoramaLocationOptions, PanoramaMetadata, PanoramaRef, PanoramaSearchOptions, PanoramaStaticImageLocationOptions, PanoramaStaticImageOptions, PanoramaStaticImageResult, PanoramaTileGrid } from '../types/panorama.js';
4
4
  export declare class PanoramaService {
5
5
  private http;
6
6
  private hl;
@@ -29,11 +29,29 @@ export declare class PanoramaService {
29
29
  private rankByDistance;
30
30
  /** Fetch full metadata for a panorama id; null when Google returns the stub response. */
31
31
  get(panoId: string, options?: PanoramaGetOptions): Promise<PanoramaMetadata | null>;
32
+ private getPhotometaAsBytes;
32
33
  /** Resolve the closest panorama near a point, then fetch its full metadata. */
33
34
  getByLocation(lat: number, lng: number, options?: PanoramaLocationOptions): Promise<PanoramaMetadata | null>;
35
+ /**
36
+ * Build the full equirectangular tile manifest for a panorama.
37
+ *
38
+ * Street View has no video stream — the web client renders by fetching these
39
+ * tiles, so this grid is the complete imagery contract. Geometry comes from
40
+ * photometa (`tileSizes` count, `maxTileDimensions`, `tileFaceSize`); pass
41
+ * previously fetched metadata to avoid a second request. Without it the
42
+ * observed default pyramid (4 levels, 8192×4096 top, 512px faces) is used.
43
+ */
44
+ getTileGrid(panoId: string, metadata?: PanoramaMetadata | null): Promise<PanoramaTileGrid>;
34
45
  /** Build a Street View thumbnail URL (no network I/O). */
35
46
  buildThumbnailUrl(options: PanoramaImageOptions): string;
36
47
  /** Build a Street View tile URL (no network I/O). */
37
48
  buildTileUrl(options: PanoramaImageOptions): string;
49
+ /**
50
+ * Fetch a static Street View JPEG (Maps Platform "Static Street View").
51
+ * Uses streetviewpixels /thumbnail — not /maps/api/streetview.
52
+ */
53
+ fetchStaticImage(options: PanoramaStaticImageOptions): Promise<PanoramaStaticImageResult>;
54
+ /** Resolve the nearest panorama, then fetch its static thumbnail JPEG. */
55
+ fetchStaticImageByLocation(lat: number, lng: number, options?: PanoramaStaticImageLocationOptions): Promise<PanoramaStaticImageResult | null>;
38
56
  }
39
57
  //# sourceMappingURL=panorama.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"panorama.d.ts","sourceRoot":"","sources":["../../src/services/panorama.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAatD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAkB9B,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;gBAEP,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW;IAMjD;;;;;;;OAOG;IACG,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAWxE,sFAAsF;YACxE,eAAe;IAgD7B,iEAAiE;YACnD,mBAAmB;IAgCjC;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAoBtB,yFAAyF;IACnF,GAAG,CACP,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAenC,+EAA+E;IACzE,aAAa,CACjB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAuBnC,0DAA0D;IAC1D,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM;IAUxD,qDAAqD;IACrD,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM;CAQpD"}
1
+ {"version":3,"file":"panorama.d.ts","sourceRoot":"","sources":["../../src/services/panorama.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAatD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACrB,kCAAkC,EAClC,0BAA0B,EAC1B,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAyB9B,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;gBAEP,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW;IAMjD;;;;;;;OAOG;IACG,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAWxE,sFAAsF;YACxE,eAAe;IAgD7B,iEAAiE;YACnD,mBAAmB;IAgCjC;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAoBtB,yFAAyF;IACnF,GAAG,CACP,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAqBrB,mBAAmB;IASjC,+EAA+E;IACzE,aAAa,CACjB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAuBnC;;;;;;;;OAQG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2ChG,0DAA0D;IAC1D,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM;IAUxD,qDAAqD;IACrD,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM;IASnD;;;OAGG;IACG,gBAAgB,CACpB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC;IA2BrC,0EAA0E;IACpE,0BAA0B,CAC9B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,kCAAkC,GAC3C,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;CAmB7C"}
@@ -2,9 +2,15 @@ import { extractCoveragePanoramas, extractNearbyPanoramas, extractPanoramaMetada
2
2
  import { buildCoverageTileUrl, buildListEntityPhotosUrl, buildPhotometaUrl, buildThumbnailUrl, buildTileUrl, } from '../rpc/panorama-pb.js';
3
3
  import { GMapsNetworkError, GMapsPhotosBlockedError } from '../types/common.js';
4
4
  import { haversineMeters, webMercatorTile } from '../utils/geo.js';
5
+ import { parseGoogleResponse } from '../utils/payload.js';
5
6
  const DEFAULT_RADIUS_METERS = 300;
6
7
  /** Coverage tiles only answer at zoom 17 — zoom 18 returns HTTP 400. */
7
8
  const COVERAGE_ZOOM = 17;
9
+ /** Observed default equirectangular pyramid when photometa omits tile geometry. */
10
+ const DEFAULT_PANO_LEVELS = 4;
11
+ const DEFAULT_PANO_MAX_WIDTH = 8192;
12
+ const DEFAULT_PANO_MAX_HEIGHT = 4096;
13
+ const DEFAULT_PANO_FACE = 512;
8
14
  /** A z17 tile spans roughly this far, so wider searches need the neighbouring tiles. */
9
15
  const COVERAGE_TILE_SPAN_METERS = 305;
10
16
  /** Street View pano ids from listentityphotos — excludes session tokens and numeric photo ids. */
@@ -122,13 +128,27 @@ export class PanoramaService {
122
128
  async get(panoId, options) {
123
129
  const hl = options?.hl ?? this.hl;
124
130
  const gl = options?.gl ?? this.gl;
125
- const url = buildPhotometaUrl({ panoId, hl, gl });
126
- const data = await this.http.get(url, {
131
+ const includeDepth = options?.includeDepth ?? false;
132
+ const url = buildPhotometaUrl({ panoId, hl, gl, includeDepth });
133
+ // The depth raster rides inside the JSON as raw bytes, so that response has
134
+ // to be read as latin1; decoding it as UTF-8 replaces every byte above 0x7f
135
+ // and leaves an unreadable WebP.
136
+ const data = includeDepth
137
+ ? await this.getPhotometaAsBytes(url)
138
+ : await this.http.get(url, {
139
+ referer: 'https://www.google.com/maps/',
140
+ includeOrigin: true,
141
+ allowShortBody: true,
142
+ });
143
+ return extractPanoramaMetadata(data, { raw: options?.raw });
144
+ }
145
+ async getPhotometaAsBytes(url) {
146
+ const { bytes } = await this.http.getBytes(url, {
127
147
  referer: 'https://www.google.com/maps/',
128
148
  includeOrigin: true,
129
149
  allowShortBody: true,
130
150
  });
131
- return extractPanoramaMetadata(data, { raw: options?.raw });
151
+ return parseGoogleResponse(Buffer.from(bytes).toString('latin1'));
132
152
  }
133
153
  /** Resolve the closest panorama near a point, then fetch its full metadata. */
134
154
  async getByLocation(lat, lng, options) {
@@ -152,6 +172,46 @@ export class PanoramaService {
152
172
  }
153
173
  return null;
154
174
  }
175
+ /**
176
+ * Build the full equirectangular tile manifest for a panorama.
177
+ *
178
+ * Street View has no video stream — the web client renders by fetching these
179
+ * tiles, so this grid is the complete imagery contract. Geometry comes from
180
+ * photometa (`tileSizes` count, `maxTileDimensions`, `tileFaceSize`); pass
181
+ * previously fetched metadata to avoid a second request. Without it the
182
+ * observed default pyramid (4 levels, 8192×4096 top, 512px faces) is used.
183
+ */
184
+ async getTileGrid(panoId, metadata) {
185
+ const levelCount = metadata?.tileSizes?.length ?? DEFAULT_PANO_LEVELS;
186
+ const [maxWidth, maxHeight] = metadata?.maxTileDimensions ?? [
187
+ DEFAULT_PANO_MAX_WIDTH,
188
+ DEFAULT_PANO_MAX_HEIGHT,
189
+ ];
190
+ const [faceWidth, faceHeight] = metadata?.tileFaceSize ?? [
191
+ DEFAULT_PANO_FACE,
192
+ DEFAULT_PANO_FACE,
193
+ ];
194
+ const levels = [];
195
+ const urls = [];
196
+ for (let zoom = 0; zoom < levelCount; zoom++) {
197
+ const divisor = 2 ** (levelCount - 1 - zoom);
198
+ const width = Math.min(maxWidth, Math.max(faceWidth, Math.ceil(maxWidth / divisor)));
199
+ const height = Math.min(maxHeight, Math.max(faceHeight, Math.ceil(maxHeight / divisor)));
200
+ const cols = Math.max(1, Math.ceil(width / faceWidth));
201
+ const rows = Math.max(1, Math.ceil(height / faceHeight));
202
+ levels.push({ zoom, cols, rows, width, height });
203
+ const gridRows = [];
204
+ for (let y = 0; y < rows; y++) {
205
+ const row = [];
206
+ for (let x = 0; x < cols; x++) {
207
+ row.push(buildTileUrl({ panoId, x, y, zoom }));
208
+ }
209
+ gridRows.push(row);
210
+ }
211
+ urls.push(gridRows);
212
+ }
213
+ return { panoId, levels, urls };
214
+ }
155
215
  /** Build a Street View thumbnail URL (no network I/O). */
156
216
  buildThumbnailUrl(options) {
157
217
  return buildThumbnailUrl({
@@ -171,5 +231,53 @@ export class PanoramaService {
171
231
  zoom: options.zoom,
172
232
  });
173
233
  }
234
+ /**
235
+ * Fetch a static Street View JPEG (Maps Platform "Static Street View").
236
+ * Uses streetviewpixels /thumbnail — not /maps/api/streetview.
237
+ */
238
+ async fetchStaticImage(options) {
239
+ const width = options.width ?? 640;
240
+ const height = options.height ?? 480;
241
+ const url = buildThumbnailUrl({
242
+ panoId: options.panoId,
243
+ width,
244
+ height,
245
+ pitch: options.pitch,
246
+ yaw: options.yaw,
247
+ });
248
+ const { bytes, contentType } = await this.http.getBytes(url, {
249
+ referer: 'https://www.google.com/maps/',
250
+ includeOrigin: true,
251
+ minBytes: 100,
252
+ });
253
+ return {
254
+ bytes,
255
+ contentType,
256
+ width,
257
+ height,
258
+ panoId: options.panoId,
259
+ url,
260
+ };
261
+ }
262
+ /** Resolve the nearest panorama, then fetch its static thumbnail JPEG. */
263
+ async fetchStaticImageByLocation(lat, lng, options) {
264
+ const nearby = await this.findNearby({
265
+ lat,
266
+ lng,
267
+ radiusMeters: options?.radiusMeters,
268
+ hl: options?.hl,
269
+ gl: options?.gl,
270
+ });
271
+ const ref = nearby.find((entry) => isLikelyStreetViewPanoId(entry.panoId));
272
+ if (!ref)
273
+ return null;
274
+ return this.fetchStaticImage({
275
+ panoId: ref.panoId,
276
+ width: options?.width,
277
+ height: options?.height,
278
+ pitch: options?.pitch ?? ref.pitch,
279
+ yaw: options?.yaw ?? ref.heading,
280
+ });
281
+ }
174
282
  }
175
283
  //# sourceMappingURL=panorama.js.map