googlemaps-kit 0.4.0 → 0.5.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 (621) hide show
  1. package/README.md +226 -26
  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 +46 -9
  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 +235 -12
  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 +111 -26
  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 +117 -34
  57. package/dist/cli.js.map +1 -1
  58. package/dist/client/gmaps-client.d.ts +8 -3
  59. package/dist/client/gmaps-client.d.ts.map +1 -1
  60. package/dist/client/gmaps-client.js +43 -5
  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 +1 -1
  66. package/dist/client/intent.d.ts.map +1 -1
  67. package/dist/client/intent.js +22 -5
  68. package/dist/client/intent.js.map +1 -1
  69. package/dist/client/maps-tools.d.ts +13 -1
  70. package/dist/client/maps-tools.d.ts.map +1 -1
  71. package/dist/client/maps-tools.js +44 -0
  72. package/dist/client/maps-tools.js.map +1 -1
  73. package/dist/client/namespaces.d.ts +84 -10
  74. package/dist/client/namespaces.d.ts.map +1 -1
  75. package/dist/client/namespaces.js +119 -11
  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/index.d.ts +46 -16
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +5 -3
  82. package/dist/index.js.map +1 -1
  83. package/dist/known-surfaces.d.ts +134 -2
  84. package/dist/known-surfaces.d.ts.map +1 -1
  85. package/dist/known-surfaces.js +134 -2
  86. package/dist/known-surfaces.js.map +1 -1
  87. package/dist/parsers/batch-url.d.ts +10 -1
  88. package/dist/parsers/batch-url.d.ts.map +1 -1
  89. package/dist/parsers/batch-url.js +30 -2
  90. package/dist/parsers/batch-url.js.map +1 -1
  91. package/dist/parsers/boq-reviews.d.ts +8 -1
  92. package/dist/parsers/boq-reviews.d.ts.map +1 -1
  93. package/dist/parsers/boq-reviews.js +50 -8
  94. package/dist/parsers/boq-reviews.js.map +1 -1
  95. package/dist/parsers/categories.d.ts.map +1 -1
  96. package/dist/parsers/categories.js +13 -10
  97. package/dist/parsers/categories.js.map +1 -1
  98. package/dist/parsers/directions.d.ts +18 -2
  99. package/dist/parsers/directions.d.ts.map +1 -1
  100. package/dist/parsers/directions.js +232 -18
  101. package/dist/parsers/directions.js.map +1 -1
  102. package/dist/parsers/geocode.d.ts +20 -2
  103. package/dist/parsers/geocode.d.ts.map +1 -1
  104. package/dist/parsers/geocode.js +110 -6
  105. package/dist/parsers/geocode.js.map +1 -1
  106. package/dist/parsers/knowledge.js +1 -1
  107. package/dist/parsers/knowledge.js.map +1 -1
  108. package/dist/parsers/lists.d.ts.map +1 -1
  109. package/dist/parsers/lists.js +29 -12
  110. package/dist/parsers/lists.js.map +1 -1
  111. package/dist/parsers/local-posts.d.ts.map +1 -1
  112. package/dist/parsers/local-posts.js +97 -12
  113. package/dist/parsers/local-posts.js.map +1 -1
  114. package/dist/parsers/mobility.d.ts +42 -0
  115. package/dist/parsers/mobility.d.ts.map +1 -0
  116. package/dist/parsers/mobility.js +130 -0
  117. package/dist/parsers/mobility.js.map +1 -0
  118. package/dist/parsers/panorama.d.ts +0 -1
  119. package/dist/parsers/panorama.d.ts.map +1 -1
  120. package/dist/parsers/panorama.js +117 -14
  121. package/dist/parsers/panorama.js.map +1 -1
  122. package/dist/parsers/photos.d.ts.map +1 -1
  123. package/dist/parsers/photos.js +15 -8
  124. package/dist/parsers/photos.js.map +1 -1
  125. package/dist/parsers/place-attributes.d.ts +12 -3
  126. package/dist/parsers/place-attributes.d.ts.map +1 -1
  127. package/dist/parsers/place-attributes.js +48 -2
  128. package/dist/parsers/place-attributes.js.map +1 -1
  129. package/dist/parsers/place-extended.d.ts +163 -0
  130. package/dist/parsers/place-extended.d.ts.map +1 -0
  131. package/dist/parsers/place-extended.js +741 -0
  132. package/dist/parsers/place-extended.js.map +1 -0
  133. package/dist/parsers/place.d.ts +15 -1
  134. package/dist/parsers/place.d.ts.map +1 -1
  135. package/dist/parsers/place.js +16 -5
  136. package/dist/parsers/place.js.map +1 -1
  137. package/dist/parsers/popular-times.d.ts +35 -0
  138. package/dist/parsers/popular-times.d.ts.map +1 -0
  139. package/dist/parsers/popular-times.js +149 -0
  140. package/dist/parsers/popular-times.js.map +1 -0
  141. package/dist/parsers/reveal.d.ts +1 -1
  142. package/dist/parsers/reveal.d.ts.map +1 -1
  143. package/dist/parsers/reveal.js +3 -2
  144. package/dist/parsers/reveal.js.map +1 -1
  145. package/dist/parsers/reviews.d.ts +17 -2
  146. package/dist/parsers/reviews.d.ts.map +1 -1
  147. package/dist/parsers/reviews.js +73 -1
  148. package/dist/parsers/reviews.js.map +1 -1
  149. package/dist/parsers/search.d.ts +17 -2
  150. package/dist/parsers/search.d.ts.map +1 -1
  151. package/dist/parsers/search.js +125 -7
  152. package/dist/parsers/search.js.map +1 -1
  153. package/dist/parsers/shared.d.ts +4 -0
  154. package/dist/parsers/shared.d.ts.map +1 -1
  155. package/dist/parsers/shared.js +10 -2
  156. package/dist/parsers/shared.js.map +1 -1
  157. package/dist/parsers/suggest.d.ts.map +1 -1
  158. package/dist/parsers/suggest.js +45 -6
  159. package/dist/parsers/suggest.js.map +1 -1
  160. package/dist/parsers/tiles.d.ts +13 -0
  161. package/dist/parsers/tiles.d.ts.map +1 -1
  162. package/dist/parsers/tiles.js +64 -0
  163. package/dist/parsers/tiles.js.map +1 -1
  164. package/dist/parsers/traffic.d.ts +9 -1
  165. package/dist/parsers/traffic.d.ts.map +1 -1
  166. package/dist/parsers/traffic.js +129 -2
  167. package/dist/parsers/traffic.js.map +1 -1
  168. package/dist/parsers/transit.d.ts +4 -2
  169. package/dist/parsers/transit.d.ts.map +1 -1
  170. package/dist/parsers/transit.js +385 -3
  171. package/dist/parsers/transit.js.map +1 -1
  172. package/dist/parsers/viewport.d.ts +20 -0
  173. package/dist/parsers/viewport.d.ts.map +1 -0
  174. package/dist/parsers/viewport.js +139 -0
  175. package/dist/parsers/viewport.js.map +1 -0
  176. package/dist/rpc/batch-execute.js +3 -3
  177. package/dist/rpc/batch-execute.js.map +1 -1
  178. package/dist/rpc/batch-request-builders.d.ts +12 -14
  179. package/dist/rpc/batch-request-builders.d.ts.map +1 -1
  180. package/dist/rpc/batch-request-builders.js +49 -17
  181. package/dist/rpc/batch-request-builders.js.map +1 -1
  182. package/dist/rpc/batch-rpc.js +1 -1
  183. package/dist/rpc/batch-services.d.ts +2 -0
  184. package/dist/rpc/batch-services.d.ts.map +1 -1
  185. package/dist/rpc/batch-services.js +4 -0
  186. package/dist/rpc/batch-services.js.map +1 -1
  187. package/dist/rpc/{descriptor-registry.d.ts → descriptors.d.ts} +29 -4
  188. package/dist/rpc/descriptors.d.ts.map +1 -0
  189. package/dist/rpc/{app-options.js → descriptors.js} +89 -5
  190. package/dist/rpc/descriptors.js.map +1 -0
  191. package/dist/rpc/earth-rocktree.d.ts +174 -0
  192. package/dist/rpc/earth-rocktree.d.ts.map +1 -0
  193. package/dist/rpc/earth-rocktree.js +468 -0
  194. package/dist/rpc/earth-rocktree.js.map +1 -0
  195. package/dist/rpc/feature-pb.d.ts +86 -0
  196. package/dist/rpc/feature-pb.d.ts.map +1 -0
  197. package/dist/rpc/feature-pb.js +112 -0
  198. package/dist/rpc/feature-pb.js.map +1 -0
  199. package/dist/rpc/feature-rpc.d.ts +15 -0
  200. package/dist/rpc/feature-rpc.d.ts.map +1 -1
  201. package/dist/rpc/feature-rpc.js +44 -0
  202. package/dist/rpc/feature-rpc.js.map +1 -1
  203. package/dist/rpc/maps-runtime.js +1 -1
  204. package/dist/rpc/panorama-pb.d.ts +3 -0
  205. package/dist/rpc/panorama-pb.d.ts.map +1 -1
  206. package/dist/rpc/panorama-pb.js +35 -3
  207. package/dist/rpc/panorama-pb.js.map +1 -1
  208. package/dist/rpc/pb-builders.d.ts +21 -1
  209. package/dist/rpc/pb-builders.d.ts.map +1 -1
  210. package/dist/rpc/pb-builders.js +62 -4
  211. package/dist/rpc/pb-builders.js.map +1 -1
  212. package/dist/rpc/photos-pb.d.ts +28 -1
  213. package/dist/rpc/photos-pb.d.ts.map +1 -1
  214. package/dist/rpc/photos-pb.js +96 -0
  215. package/dist/rpc/photos-pb.js.map +1 -1
  216. package/dist/rpc/rpc-methods.d.ts +0 -2
  217. package/dist/rpc/rpc-methods.d.ts.map +1 -1
  218. package/dist/rpc/rpc-methods.js +0 -38
  219. package/dist/rpc/rpc-methods.js.map +1 -1
  220. package/dist/rpc/search-filters.d.ts +0 -12
  221. package/dist/rpc/search-filters.d.ts.map +1 -1
  222. package/dist/rpc/search-filters.js +1 -11
  223. package/dist/rpc/search-filters.js.map +1 -1
  224. package/dist/rpc/tile-builders.d.ts +136 -0
  225. package/dist/rpc/tile-builders.d.ts.map +1 -0
  226. package/dist/rpc/tile-builders.js +172 -0
  227. package/dist/rpc/tile-builders.js.map +1 -0
  228. package/dist/rpc/xsrf-bootstrap.d.ts +0 -2
  229. package/dist/rpc/xsrf-bootstrap.d.ts.map +1 -1
  230. package/dist/rpc/xsrf-bootstrap.js +2 -2
  231. package/dist/rpc/xsrf-bootstrap.js.map +1 -1
  232. package/dist/services/ask-maps.d.ts +45 -5
  233. package/dist/services/ask-maps.d.ts.map +1 -1
  234. package/dist/services/ask-maps.js +148 -21
  235. package/dist/services/ask-maps.js.map +1 -1
  236. package/dist/services/directions.d.ts +17 -1
  237. package/dist/services/directions.d.ts.map +1 -1
  238. package/dist/services/directions.js +32 -0
  239. package/dist/services/directions.js.map +1 -1
  240. package/dist/services/distance-matrix.d.ts +1 -1
  241. package/dist/services/distance-matrix.d.ts.map +1 -1
  242. package/dist/services/distance-matrix.js +1 -1
  243. package/dist/services/distance-matrix.js.map +1 -1
  244. package/dist/services/elevation.d.ts +1 -1
  245. package/dist/services/elevation.d.ts.map +1 -1
  246. package/dist/services/elevation.js +3 -2
  247. package/dist/services/elevation.js.map +1 -1
  248. package/dist/services/geocode.d.ts +16 -0
  249. package/dist/services/geocode.d.ts.map +1 -1
  250. package/dist/services/geocode.js +90 -0
  251. package/dist/services/geocode.js.map +1 -1
  252. package/dist/services/lists.d.ts +7 -1
  253. package/dist/services/lists.d.ts.map +1 -1
  254. package/dist/services/lists.js +45 -1
  255. package/dist/services/lists.js.map +1 -1
  256. package/dist/services/map-3d.d.ts +66 -0
  257. package/dist/services/map-3d.d.ts.map +1 -0
  258. package/dist/services/map-3d.js +658 -0
  259. package/dist/services/map-3d.js.map +1 -0
  260. package/dist/services/map-layers.d.ts +33 -0
  261. package/dist/services/map-layers.d.ts.map +1 -0
  262. package/dist/services/map-layers.js +207 -0
  263. package/dist/services/map-layers.js.map +1 -0
  264. package/dist/services/meta.d.ts +71 -0
  265. package/dist/services/meta.d.ts.map +1 -0
  266. package/dist/services/meta.js +132 -0
  267. package/dist/services/meta.js.map +1 -0
  268. package/dist/services/mobility.d.ts +79 -0
  269. package/dist/services/mobility.d.ts.map +1 -0
  270. package/dist/services/mobility.js +296 -0
  271. package/dist/services/mobility.js.map +1 -0
  272. package/dist/services/panorama.d.ts +12 -1
  273. package/dist/services/panorama.d.ts.map +1 -1
  274. package/dist/services/panorama.js +63 -3
  275. package/dist/services/panorama.js.map +1 -1
  276. package/dist/services/photos.d.ts.map +1 -1
  277. package/dist/services/photos.js +3 -4
  278. package/dist/services/photos.js.map +1 -1
  279. package/dist/services/place-attributes.d.ts +31 -0
  280. package/dist/services/place-attributes.d.ts.map +1 -0
  281. package/dist/services/place-attributes.js +48 -0
  282. package/dist/services/place-attributes.js.map +1 -0
  283. package/dist/services/places.d.ts +13 -0
  284. package/dist/services/places.d.ts.map +1 -1
  285. package/dist/services/places.js +6 -4
  286. package/dist/services/places.js.map +1 -1
  287. package/dist/services/reviews.d.ts +11 -1
  288. package/dist/services/reviews.d.ts.map +1 -1
  289. package/dist/services/reviews.js +36 -12
  290. package/dist/services/reviews.js.map +1 -1
  291. package/dist/services/search-along-route.d.ts +33 -0
  292. package/dist/services/search-along-route.d.ts.map +1 -0
  293. package/dist/services/search-along-route.js +200 -0
  294. package/dist/services/search-along-route.js.map +1 -0
  295. package/dist/services/search.d.ts +23 -1
  296. package/dist/services/search.d.ts.map +1 -1
  297. package/dist/services/search.js +147 -3
  298. package/dist/services/search.js.map +1 -1
  299. package/dist/services/static-map.js +1 -1
  300. package/dist/services/static-map.js.map +1 -1
  301. package/dist/services/tiles.d.ts +39 -2
  302. package/dist/services/tiles.d.ts.map +1 -1
  303. package/dist/services/tiles.js +172 -13
  304. package/dist/services/tiles.js.map +1 -1
  305. package/dist/services/traffic.d.ts +12 -1
  306. package/dist/services/traffic.d.ts.map +1 -1
  307. package/dist/services/traffic.js +25 -2
  308. package/dist/services/traffic.js.map +1 -1
  309. package/dist/services/transit.d.ts +20 -3
  310. package/dist/services/transit.d.ts.map +1 -1
  311. package/dist/services/transit.js +69 -1
  312. package/dist/services/transit.js.map +1 -1
  313. package/dist/services/viewport.d.ts +76 -0
  314. package/dist/services/viewport.d.ts.map +1 -0
  315. package/dist/services/viewport.js +180 -0
  316. package/dist/services/viewport.js.map +1 -0
  317. package/dist/services/waypoint-optimizer.d.ts +31 -0
  318. package/dist/services/waypoint-optimizer.d.ts.map +1 -0
  319. package/dist/services/waypoint-optimizer.js +235 -0
  320. package/dist/services/waypoint-optimizer.js.map +1 -0
  321. package/dist/types/batch-url.d.ts +31 -0
  322. package/dist/types/batch-url.d.ts.map +1 -1
  323. package/dist/types/categories.d.ts +20 -4
  324. package/dist/types/categories.d.ts.map +1 -1
  325. package/dist/types/common.d.ts +162 -22
  326. package/dist/types/common.d.ts.map +1 -1
  327. package/dist/types/common.js +1 -1
  328. package/dist/types/common.js.map +1 -1
  329. package/dist/types/directions.d.ts +217 -3
  330. package/dist/types/directions.d.ts.map +1 -1
  331. package/dist/types/dx.d.ts +48 -3
  332. package/dist/types/dx.d.ts.map +1 -1
  333. package/dist/types/geocode.d.ts +61 -3
  334. package/dist/types/geocode.d.ts.map +1 -1
  335. package/dist/types/grid-search.d.ts +66 -0
  336. package/dist/types/grid-search.d.ts.map +1 -0
  337. package/dist/types/grid-search.js +2 -0
  338. package/dist/types/grid-search.js.map +1 -0
  339. package/dist/types/hooks.d.ts +3 -3
  340. package/dist/types/hooks.d.ts.map +1 -1
  341. package/dist/types/links.d.ts +3 -6
  342. package/dist/types/links.d.ts.map +1 -1
  343. package/dist/types/lists.d.ts +68 -3
  344. package/dist/types/lists.d.ts.map +1 -1
  345. package/dist/types/map-3d.d.ts +126 -0
  346. package/dist/types/map-3d.d.ts.map +1 -0
  347. package/dist/types/map-3d.js +2 -0
  348. package/dist/types/map-3d.js.map +1 -0
  349. package/dist/types/map-earth.d.ts +34 -0
  350. package/dist/types/map-earth.d.ts.map +1 -0
  351. package/dist/types/map-earth.js +2 -0
  352. package/dist/types/map-earth.js.map +1 -0
  353. package/dist/types/map-layers.d.ts +63 -0
  354. package/dist/types/map-layers.d.ts.map +1 -0
  355. package/dist/types/map-layers.js +2 -0
  356. package/dist/types/map-layers.js.map +1 -0
  357. package/dist/types/mobility.d.ts +121 -0
  358. package/dist/types/mobility.d.ts.map +1 -0
  359. package/dist/types/mobility.js +3 -0
  360. package/dist/types/mobility.js.map +1 -0
  361. package/dist/types/panorama.d.ts +104 -0
  362. package/dist/types/panorama.d.ts.map +1 -1
  363. package/dist/types/photos.d.ts +12 -0
  364. package/dist/types/photos.d.ts.map +1 -1
  365. package/dist/types/photos.js +2 -1
  366. package/dist/types/photos.js.map +1 -1
  367. package/dist/types/place-attributes.d.ts +15 -0
  368. package/dist/types/place-attributes.d.ts.map +1 -0
  369. package/dist/types/place-attributes.js +2 -0
  370. package/dist/types/place-attributes.js.map +1 -0
  371. package/dist/types/place-extended.d.ts +406 -0
  372. package/dist/types/place-extended.d.ts.map +1 -0
  373. package/dist/types/place-extended.js +18 -0
  374. package/dist/types/place-extended.js.map +1 -0
  375. package/dist/types/protobuf.d.ts +1 -1
  376. package/dist/types/protobuf.js +1 -1
  377. package/dist/types/reviews.d.ts +28 -0
  378. package/dist/types/reviews.d.ts.map +1 -1
  379. package/dist/types/reviews.js.map +1 -1
  380. package/dist/types/route-optimization.d.ts +56 -0
  381. package/dist/types/route-optimization.d.ts.map +1 -0
  382. package/dist/types/route-optimization.js +2 -0
  383. package/dist/types/route-optimization.js.map +1 -0
  384. package/dist/types/search-along-route.d.ts +49 -0
  385. package/dist/types/search-along-route.d.ts.map +1 -0
  386. package/dist/types/search-along-route.js +2 -0
  387. package/dist/types/search-along-route.js.map +1 -0
  388. package/dist/types/search-filters.d.ts +1 -1
  389. package/dist/types/search-filters.js +1 -1
  390. package/dist/types/suggest.d.ts +25 -2
  391. package/dist/types/suggest.d.ts.map +1 -1
  392. package/dist/types/tiles.d.ts +40 -0
  393. package/dist/types/tiles.d.ts.map +1 -1
  394. package/dist/types/traffic.d.ts +58 -1
  395. package/dist/types/traffic.d.ts.map +1 -1
  396. package/dist/types/transit.d.ts +160 -1
  397. package/dist/types/transit.d.ts.map +1 -1
  398. package/dist/types/transit.js +0 -1
  399. package/dist/types/transit.js.map +1 -1
  400. package/dist/types/viewport.d.ts +159 -0
  401. package/dist/types/viewport.d.ts.map +1 -0
  402. package/dist/types/viewport.js +3 -0
  403. package/dist/types/viewport.js.map +1 -0
  404. package/dist/utils/async.d.ts +44 -0
  405. package/dist/utils/async.d.ts.map +1 -0
  406. package/dist/utils/async.js +132 -0
  407. package/dist/utils/async.js.map +1 -0
  408. package/dist/utils/encoded-polyline.d.ts +43 -0
  409. package/dist/utils/encoded-polyline.d.ts.map +1 -1
  410. package/dist/utils/encoded-polyline.js +71 -0
  411. package/dist/utils/encoded-polyline.js.map +1 -1
  412. package/dist/utils/env.d.ts +6 -0
  413. package/dist/utils/env.d.ts.map +1 -0
  414. package/dist/utils/{load-env.js → env.js} +32 -7
  415. package/dist/utils/env.js.map +1 -0
  416. package/dist/utils/geo.d.ts +12 -0
  417. package/dist/utils/geo.d.ts.map +1 -1
  418. package/dist/utils/geo.js +20 -0
  419. package/dist/utils/geo.js.map +1 -1
  420. package/dist/utils/hooks.d.ts +2 -3
  421. package/dist/utils/hooks.d.ts.map +1 -1
  422. package/dist/utils/hooks.js +1 -1
  423. package/dist/utils/hooks.js.map +1 -1
  424. package/dist/utils/ids.d.ts +1 -0
  425. package/dist/utils/ids.d.ts.map +1 -1
  426. package/dist/utils/ids.js +10 -0
  427. package/dist/utils/ids.js.map +1 -1
  428. package/dist/utils/net.d.ts +46 -0
  429. package/dist/utils/net.d.ts.map +1 -0
  430. package/dist/utils/net.js +150 -0
  431. package/dist/utils/net.js.map +1 -0
  432. package/dist/utils/payload.d.ts +22 -0
  433. package/dist/utils/payload.d.ts.map +1 -0
  434. package/dist/utils/{chunked-decoder.js → payload.js} +80 -2
  435. package/dist/utils/payload.js.map +1 -0
  436. package/dist/utils/place-ref.d.ts +27 -0
  437. package/dist/utils/place-ref.d.ts.map +1 -1
  438. package/dist/utils/place-ref.js +45 -1
  439. package/dist/utils/place-ref.js.map +1 -1
  440. package/package.json +8 -5
  441. package/dist/client/product-namespaces.d.ts +0 -30
  442. package/dist/client/product-namespaces.d.ts.map +0 -1
  443. package/dist/client/product-namespaces.js +0 -47
  444. package/dist/client/product-namespaces.js.map +0 -1
  445. package/dist/parsers/elevation-directions.d.ts +0 -18
  446. package/dist/parsers/elevation-directions.d.ts.map +0 -1
  447. package/dist/parsers/elevation-directions.js +0 -102
  448. package/dist/parsers/elevation-directions.js.map +0 -1
  449. package/dist/parsers/passiveassist.d.ts +0 -10
  450. package/dist/parsers/passiveassist.d.ts.map +0 -1
  451. package/dist/parsers/passiveassist.js +0 -61
  452. package/dist/parsers/passiveassist.js.map +0 -1
  453. package/dist/parsers/review-aggregates.d.ts +0 -7
  454. package/dist/parsers/review-aggregates.d.ts.map +0 -1
  455. package/dist/parsers/review-aggregates.js +0 -18
  456. package/dist/parsers/review-aggregates.js.map +0 -1
  457. package/dist/parsers/review-client-filters.d.ts +0 -8
  458. package/dist/parsers/review-client-filters.d.ts.map +0 -1
  459. package/dist/parsers/review-client-filters.js +0 -28
  460. package/dist/parsers/review-client-filters.js.map +0 -1
  461. package/dist/parsers/search-client-filters.d.ts +0 -7
  462. package/dist/parsers/search-client-filters.d.ts.map +0 -1
  463. package/dist/parsers/search-client-filters.js +0 -44
  464. package/dist/parsers/search-client-filters.js.map +0 -1
  465. package/dist/parsers/search-pagination.d.ts +0 -12
  466. package/dist/parsers/search-pagination.d.ts.map +0 -1
  467. package/dist/parsers/search-pagination.js +0 -34
  468. package/dist/parsers/search-pagination.js.map +0 -1
  469. package/dist/parsers/timezone-geocode.d.ts +0 -20
  470. package/dist/parsers/timezone-geocode.d.ts.map +0 -1
  471. package/dist/parsers/timezone-geocode.js +0 -96
  472. package/dist/parsers/timezone-geocode.js.map +0 -1
  473. package/dist/parsers/ugc-aggregates.d.ts +0 -9
  474. package/dist/parsers/ugc-aggregates.d.ts.map +0 -1
  475. package/dist/parsers/ugc-aggregates.js +0 -23
  476. package/dist/parsers/ugc-aggregates.js.map +0 -1
  477. package/dist/rpc/app-options.d.ts +0 -25
  478. package/dist/rpc/app-options.d.ts.map +0 -1
  479. package/dist/rpc/app-options.js.map +0 -1
  480. package/dist/rpc/batchexecute-args.d.ts +0 -30
  481. package/dist/rpc/batchexecute-args.d.ts.map +0 -1
  482. package/dist/rpc/batchexecute-args.js +0 -35
  483. package/dist/rpc/batchexecute-args.js.map +0 -1
  484. package/dist/rpc/boq-reviews.d.ts +0 -16
  485. package/dist/rpc/boq-reviews.d.ts.map +0 -1
  486. package/dist/rpc/boq-reviews.js +0 -45
  487. package/dist/rpc/boq-reviews.js.map +0 -1
  488. package/dist/rpc/descriptor-registry.d.ts.map +0 -1
  489. package/dist/rpc/descriptor-registry.js +0 -47
  490. package/dist/rpc/descriptor-registry.js.map +0 -1
  491. package/dist/rpc/lists-pb.d.ts +0 -20
  492. package/dist/rpc/lists-pb.d.ts.map +0 -1
  493. package/dist/rpc/lists-pb.js +0 -20
  494. package/dist/rpc/lists-pb.js.map +0 -1
  495. package/dist/rpc/nxa.d.ts +0 -13
  496. package/dist/rpc/nxa.d.ts.map +0 -1
  497. package/dist/rpc/nxa.js +0 -44
  498. package/dist/rpc/nxa.js.map +0 -1
  499. package/dist/rpc/passiveassist-pb.d.ts +0 -21
  500. package/dist/rpc/passiveassist-pb.d.ts.map +0 -1
  501. package/dist/rpc/passiveassist-pb.js +0 -24
  502. package/dist/rpc/passiveassist-pb.js.map +0 -1
  503. package/dist/rpc/photo-category-tokens.d.ts +0 -29
  504. package/dist/rpc/photo-category-tokens.d.ts.map +0 -1
  505. package/dist/rpc/photo-category-tokens.js +0 -97
  506. package/dist/rpc/photo-category-tokens.js.map +0 -1
  507. package/dist/rpc/reveal-pb.d.ts +0 -26
  508. package/dist/rpc/reveal-pb.d.ts.map +0 -1
  509. package/dist/rpc/reveal-pb.js +0 -32
  510. package/dist/rpc/reveal-pb.js.map +0 -1
  511. package/dist/rpc/suggest-pb.d.ts +0 -34
  512. package/dist/rpc/suggest-pb.d.ts.map +0 -1
  513. package/dist/rpc/suggest-pb.js +0 -42
  514. package/dist/rpc/suggest-pb.js.map +0 -1
  515. package/dist/rpc/tiles-pb.d.ts +0 -45
  516. package/dist/rpc/tiles-pb.d.ts.map +0 -1
  517. package/dist/rpc/tiles-pb.js +0 -71
  518. package/dist/rpc/tiles-pb.js.map +0 -1
  519. package/dist/services/batch-url.d.ts +0 -18
  520. package/dist/services/batch-url.d.ts.map +0 -1
  521. package/dist/services/batch-url.js +0 -30
  522. package/dist/services/batch-url.js.map +0 -1
  523. package/dist/services/categories.d.ts +0 -21
  524. package/dist/services/categories.d.ts.map +0 -1
  525. package/dist/services/categories.js +0 -43
  526. package/dist/services/categories.js.map +0 -1
  527. package/dist/services/passiveassist.d.ts +0 -21
  528. package/dist/services/passiveassist.d.ts.map +0 -1
  529. package/dist/services/passiveassist.js +0 -70
  530. package/dist/services/passiveassist.js.map +0 -1
  531. package/dist/services/reveal.d.ts +0 -15
  532. package/dist/services/reveal.d.ts.map +0 -1
  533. package/dist/services/reveal.js +0 -41
  534. package/dist/services/reveal.js.map +0 -1
  535. package/dist/services/suggest.d.ts +0 -12
  536. package/dist/services/suggest.d.ts.map +0 -1
  537. package/dist/services/suggest.js +0 -36
  538. package/dist/services/suggest.js.map +0 -1
  539. package/dist/services/timezone.d.ts +0 -19
  540. package/dist/services/timezone.d.ts.map +0 -1
  541. package/dist/services/timezone.js +0 -91
  542. package/dist/services/timezone.js.map +0 -1
  543. package/dist/services/ugc-aggregates.d.ts +0 -17
  544. package/dist/services/ugc-aggregates.d.ts.map +0 -1
  545. package/dist/services/ugc-aggregates.js +0 -30
  546. package/dist/services/ugc-aggregates.js.map +0 -1
  547. package/dist/types/distance-matrix.d.ts +0 -40
  548. package/dist/types/distance-matrix.d.ts.map +0 -1
  549. package/dist/types/distance-matrix.js +0 -2
  550. package/dist/types/distance-matrix.js.map +0 -1
  551. package/dist/types/elevation.d.ts +0 -59
  552. package/dist/types/elevation.d.ts.map +0 -1
  553. package/dist/types/elevation.js +0 -2
  554. package/dist/types/elevation.js.map +0 -1
  555. package/dist/types/passiveassist.d.ts +0 -50
  556. package/dist/types/passiveassist.d.ts.map +0 -1
  557. package/dist/types/passiveassist.js +0 -2
  558. package/dist/types/passiveassist.js.map +0 -1
  559. package/dist/types/reveal.d.ts +0 -46
  560. package/dist/types/reveal.d.ts.map +0 -1
  561. package/dist/types/reveal.js +0 -2
  562. package/dist/types/reveal.js.map +0 -1
  563. package/dist/types/timezone.d.ts +0 -36
  564. package/dist/types/timezone.d.ts.map +0 -1
  565. package/dist/types/timezone.js +0 -2
  566. package/dist/types/timezone.js.map +0 -1
  567. package/dist/types/ugc-aggregates.d.ts +0 -14
  568. package/dist/types/ugc-aggregates.d.ts.map +0 -1
  569. package/dist/types/ugc-aggregates.js +0 -2
  570. package/dist/types/ugc-aggregates.js.map +0 -1
  571. package/dist/utils/abort.d.ts +0 -7
  572. package/dist/utils/abort.d.ts.map +0 -1
  573. package/dist/utils/abort.js +0 -43
  574. package/dist/utils/abort.js.map +0 -1
  575. package/dist/utils/chunked-decoder.d.ts +0 -9
  576. package/dist/utils/chunked-decoder.d.ts.map +0 -1
  577. package/dist/utils/chunked-decoder.js.map +0 -1
  578. package/dist/utils/coords.d.ts +0 -24
  579. package/dist/utils/coords.d.ts.map +0 -1
  580. package/dist/utils/coords.js +0 -37
  581. package/dist/utils/coords.js.map +0 -1
  582. package/dist/utils/feature-id.d.ts +0 -2
  583. package/dist/utils/feature-id.d.ts.map +0 -1
  584. package/dist/utils/feature-id.js +0 -11
  585. package/dist/utils/feature-id.js.map +0 -1
  586. package/dist/utils/load-env.d.ts +0 -7
  587. package/dist/utils/load-env.d.ts.map +0 -1
  588. package/dist/utils/load-env.js.map +0 -1
  589. package/dist/utils/pooled.d.ts +0 -8
  590. package/dist/utils/pooled.d.ts.map +0 -1
  591. package/dist/utils/pooled.js +0 -27
  592. package/dist/utils/pooled.js.map +0 -1
  593. package/dist/utils/request-context.d.ts +0 -9
  594. package/dist/utils/request-context.d.ts.map +0 -1
  595. package/dist/utils/request-context.js +0 -12
  596. package/dist/utils/request-context.js.map +0 -1
  597. package/dist/utils/request-scheduler.d.ts +0 -28
  598. package/dist/utils/request-scheduler.d.ts.map +0 -1
  599. package/dist/utils/request-scheduler.js +0 -58
  600. package/dist/utils/request-scheduler.js.map +0 -1
  601. package/dist/utils/response-parser.d.ts +0 -7
  602. package/dist/utils/response-parser.d.ts.map +0 -1
  603. package/dist/utils/response-parser.js +0 -50
  604. package/dist/utils/response-parser.js.map +0 -1
  605. package/dist/utils/retry-backoff.d.ts +0 -5
  606. package/dist/utils/retry-backoff.d.ts.map +0 -1
  607. package/dist/utils/retry-backoff.js +0 -23
  608. package/dist/utils/retry-backoff.js.map +0 -1
  609. package/dist/utils/safe-get.d.ts +0 -6
  610. package/dist/utils/safe-get.d.ts.map +0 -1
  611. package/dist/utils/safe-get.js +0 -29
  612. package/dist/utils/safe-get.js.map +0 -1
  613. package/dist/utils/throttle-detection.d.ts +0 -17
  614. package/dist/utils/throttle-detection.d.ts.map +0 -1
  615. package/dist/utils/throttle-detection.js +0 -71
  616. package/dist/utils/throttle-detection.js.map +0 -1
  617. package/dist/utils/ttl-cache.d.ts +0 -17
  618. package/dist/utils/ttl-cache.d.ts.map +0 -1
  619. package/dist/utils/ttl-cache.js +0 -43
  620. package/dist/utils/ttl-cache.js.map +0 -1
  621. /package/{assets → .github/assets}/banner.png +0 -0
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Status of reverse-engineered Google Maps HTTP surfaces.
2
+ * Status of undocumented Google Maps HTTP surfaces.
3
3
  */
4
4
  export type SurfaceStatus = 'working' | 'fallback' | 'auth-required' | 'blocked' | 'unverified' | 'not-used-by-web';
5
5
  export interface SurfaceInfo {
@@ -121,7 +121,7 @@ export declare const KNOWN_SURFACES: {
121
121
  readonly status: "working";
122
122
  readonly method: "GET";
123
123
  readonly path: "/maps/vt/proto";
124
- readonly notes: "256px roadmap tiles wrapped in protobuf. Satellite and 512px variants return HTTP 400.";
124
+ readonly notes: "256px roadmap tiles wrapped in protobuf. Named overlay layers decoded from the JS `_.er` descriptors: shading (type 5) and contours (type 6) answer real raster anonymously; traffic, transit, bike, svv, air-quality, area-busyness, crisis2, indoor, hotel-categorical-search, lore-p13n, lore-rec and travel-map-reachability only render inside the full client style context (empty placeholder tiles when probed directly).";
125
125
  };
126
126
  readonly mapTilesStream: {
127
127
  readonly status: "working";
@@ -273,6 +273,138 @@ export declare const KNOWN_SURFACES: {
273
273
  readonly path: "/maps/_/MapsWizUi/data/batchexecute";
274
274
  readonly notes: "2026 service-path format: f.req with /MapsService.Method and no at field. Works anonymously.";
275
275
  };
276
+ readonly mapLayerTiles: {
277
+ readonly status: "working";
278
+ readonly method: "GET";
279
+ readonly path: "mt.google.com/vt?lyrs={m|p|s|y|transit|h,traffic}";
280
+ readonly notes: "Raster basemap and overlay tiles. `p` (terrain) and `s`/`y` (imagery) answer JPEG, the rest PNG. Traffic only paints when composited onto a base layer (`h,traffic`); a bare `traffic` key returns a transparent tile.";
281
+ };
282
+ readonly satelliteImagery: {
283
+ readonly status: "working";
284
+ readonly method: "GET";
285
+ readonly path: "mt.google.com/vt?lyrs=s|y";
286
+ readonly notes: "Satellite (`s`) and hybrid (`y`) imagery, JPEG. earth.google.com exposes no public imagery API — mw.google.com/mw-earth does not resolve.";
287
+ };
288
+ readonly evCharging: {
289
+ readonly status: "fallback";
290
+ readonly method: "GET";
291
+ readonly path: "/search?tbm=map + /maps/preview/place";
292
+ readonly notes: "No EV RPC exists. Stations are found by categorical place search; connector type, power, and plug count come from placeData[140][1][0][2]. Live availability and pricing are not published anywhere.";
293
+ };
294
+ readonly parkingSearch: {
295
+ readonly status: "fallback";
296
+ readonly method: "GET";
297
+ readonly path: "/search?tbm=map";
298
+ readonly notes: "No parking RPC exists. Parking lots are ordinary places found by categorical search. Space counts and posted rates are not carried in place data.";
299
+ };
300
+ readonly adminRegions: {
301
+ readonly status: "fallback";
302
+ readonly method: "GET";
303
+ readonly path: "/search?tbm=map (reverse geocode)";
304
+ readonly notes: "Region hierarchy is read from the reverse-geocode address tail. No polygons are published, so AdminRegion.bounds is absent.";
305
+ };
306
+ readonly placeAttributes: {
307
+ readonly status: "working";
308
+ readonly method: "GET";
309
+ readonly path: "/maps/preview/place (placeData[100][1])";
310
+ readonly notes: "Amenity / accessibility / payment attributes are per place. Maps publishes no global attribute catalog.";
311
+ };
312
+ readonly trafficIncidents: {
313
+ readonly status: "working";
314
+ readonly method: "POST";
315
+ readonly path: "/MapsTrafficService.GetAreaTraffic (root[2])";
316
+ readonly notes: "Incidents ride along with the area summary in the EvxQ3b response — there is no separate incident service. Each carries a headline, road name, delay in seconds and the affected stretch as cumulative 1e7 deltas. Severity is derived from the delay, not reported.";
317
+ };
318
+ readonly schoolsLayer: {
319
+ readonly status: "fallback";
320
+ readonly method: "GET";
321
+ readonly path: "/search?tbm=map";
322
+ readonly notes: "The rendered layer is vector-tile only and has no marker service, so schools come from the categorical searches the UI uses, clipped to the requested bounds.";
323
+ };
324
+ readonly buildings3d: {
325
+ readonly status: "fallback";
326
+ readonly method: "GET";
327
+ readonly path: "kh.google.com/rt/earth (see buildings3dRocktree)";
328
+ readonly notes: "No building layer exists — /maps/vt answers raster everywhere and the mapcore WASM renders one fused surface of ground, structures and canopy. map3d.getBuildings segments structures out of that mesh (4 m grid, local ground from a neighbourhood minimum, flood fill split on a 6 m roof step), so footprints are derived massing rather than surveyed outlines.";
329
+ };
330
+ readonly transitRouting: {
331
+ readonly status: "working";
332
+ readonly method: "GET";
333
+ readonly path: "/maps/preview/directions (mode=transit + session block)";
334
+ readonly notes: "Gated on the page session block !15m3!1s{ei}!7e81!15i10142 — without it Google answers with travel-time chips and no routes. With it: full itineraries, legs, lines and colours, boarding/alighting and intermediate stops, fares, agencies, frequency and service alerts. Verified in London, New York and Tokyo.";
335
+ };
336
+ readonly terrainHillshade: {
337
+ readonly status: "working";
338
+ readonly method: "GET";
339
+ readonly path: "/maps/vt/proto (!1e5!2sshading)";
340
+ readonly notes: "Raster hillshade tiles decoded from the JS vt layer descriptors. Global coverage from z8 up; Yosemite tiles run ~45 KB at z10 vs the 220-byte blank placeholder for dataless cells.";
341
+ };
342
+ readonly contourLines: {
343
+ readonly status: "working";
344
+ readonly method: "GET";
345
+ readonly path: "/maps/vt/proto (!1e6!2scontours)";
346
+ readonly notes: "Elevation contour-line tiles, same descriptor family as hillshade. Publishes in the z13–15 band; outside it Google answers a valid-but-blank placeholder PNG which getOverlay surfaces as GMapsEmptyPayloadError.";
347
+ };
348
+ readonly userPrefs: {
349
+ readonly status: "auth-required";
350
+ readonly method: "POST";
351
+ readonly path: "/maps/_/MapsWizUi/data/batchexecute (/MapsUserPrefsService.GetUserPrefs)";
352
+ readonly notes: "Per-account settings store (units, home/work, region) registered as JGUSi in the web client. Anonymous calls return a bare [1] stub for every arg shape ([3] with a session context); response layout beyond int32 field 1 is inferred from JS message classes.";
353
+ };
354
+ readonly streetViewTileGrid: {
355
+ readonly status: "working";
356
+ readonly method: "GET";
357
+ readonly path: "streetviewpixels-pa.googleapis.com/v1/tile (pyramid manifest)";
358
+ readonly notes: "Street View ships no video endpoint — the web client renders equirectangular panoramas by fetching tile pyramids described by photometa tileSizes/maxTileDimensions/tileFaceSize. panorama.getTileGrid() returns the full per-zoom URL matrix.";
359
+ };
360
+ readonly viewportMetadata: {
361
+ readonly status: "working";
362
+ readonly method: "POST";
363
+ readonly path: "/maps/_/MapsWizUi/data/batchexecute (/MapsViewportService.GetViewportMetadata)";
364
+ readonly notes: "Capability ids for a viewport. Earlier probes failed because the camera carried no altitude: the server derives zoom from it and answers [3] for any camera it cannot place. With a real altitude it returns ids such as 2, 3, 5, 6, 7, 9 and 10 — Google publishes no names for them, and open water returns nothing at all.";
365
+ };
366
+ readonly panoramaDepth: {
367
+ readonly status: "working";
368
+ readonly method: "GET";
369
+ readonly path: "/maps/photometa/v1 (section !1e18)";
370
+ readonly notes: "A 512×256 lossless WebP per panorama, laid out equirectangularly. Pixels hold small integers indexing coplanar surfaces, not metres, and the plane equations are absent from every photometa section probed — useful as a depth segmentation. The bytes ride inside the JSON as one byte per code unit, so the response must be read as latin1.";
371
+ };
372
+ readonly panoramaElevation: {
373
+ readonly status: "working";
374
+ readonly method: "GET";
375
+ readonly path: "/maps/photometa/v1 (photometa node[5][0][1][1])";
376
+ readonly notes: "Every panorama reports its height above sea level and above the WGS84 ellipsoid, the pair differing by the local geoid offset. Verified against Denver (1598 m), Times Square (16.8 m) and Amsterdam (4.3 m) — a far more direct elevation source than the bicycling-route fallback.";
377
+ };
378
+ readonly buildings3dRocktree: {
379
+ readonly status: "working";
380
+ readonly method: "GET";
381
+ readonly path: "kh.google.com/rt/earth (PlanetoidMetadata / BulkMetadata / NodeData)";
382
+ readonly notes: "Google Earth rocktree octree — the anonymous source of the photorealistic mesh behind Maps 3D. Delta-packed vertex cubes, triangle strips and 512×512 JPEG textures decode losslessly; `!3u{imageryEpoch}` must only be appended when node flags carry bit 16, otherwise NodeData answers 404. map3d.getMesh/getTerrain/getBuildings wrap it.";
383
+ };
384
+ readonly searchGrid: {
385
+ readonly status: "working";
386
+ readonly method: "GET";
387
+ readonly path: "/search?tbm=map (per-cell via search.gridSearch)";
388
+ readonly notes: "Area-coverage orchestration over the ordinary search RPC: the bounding box is subdivided into Web Mercator cells at cellZoom and each cell runs one paginated search, deduped by hexId. Beats single-query pagination caps in dense cities — the same grid strategy commercial scrapers charge for.";
389
+ };
390
+ readonly rocktreePlanets: {
391
+ readonly status: "working";
392
+ readonly method: "GET";
393
+ readonly path: "kh.google.com/rt/{mars|moon} (PlanetoidMetadata)";
394
+ readonly notes: "The rocktree octree protocol serves more planets than earth. mars and moon answer live with distinct root epochs and reference radii (3 389.5 km / 1 737.4 km); unknown names get HTTP 400 INVALID_ARGUMENT. Pass options.planet to map3d.getMesh/getTerrain/getBuildings.";
395
+ };
396
+ readonly bikeShareAvailability: {
397
+ readonly status: "working";
398
+ readonly method: "GET";
399
+ readonly path: "/maps/preview/place placeData[133][0] = [label, \"n/m\", null, longLabel]";
400
+ readonly notes: "Live dock availability from the operator feed embedded in station previews. Verified across live/detail/rich modes and operators (Citi Bike NYC \"48/57 bikes available\", Santander Cycles London, singular \"1/13 bike available\" at low counts). Absent for non-station places; parsed by extractBikeAvailability / travel().bikeShare.";
401
+ };
402
+ readonly airQualityRpc: {
403
+ readonly status: "auth-required";
404
+ readonly method: "POST";
405
+ readonly path: "/maps/_/MapsWizUi/data/batchexecute (GivvBd air quality, FQvEwd heatmap)";
406
+ readonly notes: "Legacy rpcids, not service paths — they require an XSNRF/XSRF token from WIZ_global_data.SNlM0e, which signed-out sessions never issue. Callable with signed-in cookies via sdk().features().airQuality(); response layout unparsed until reachable anonymously.";
407
+ };
276
408
  };
277
409
  export type KnownSurfaceName = keyof typeof KNOWN_SURFACES;
278
410
  export declare function getSurfaceInfo(name: KnownSurfaceName): SurfaceInfo;
@@ -1 +1 @@
1
- {"version":3,"file":"known-surfaces.d.ts","sourceRoot":"","sources":["../src/known-surfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,UAAU,GACV,eAAe,GACf,SAAS,GACT,YAAY,GACZ,iBAAiB,CAAC;AAEtB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgSqB,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,cAAc,CAAC;AAE3D,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW,CAElE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,EAAE,CAI9E"}
1
+ {"version":3,"file":"known-surfaces.d.ts","sourceRoot":"","sources":["../src/known-surfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,UAAU,GACV,eAAe,GACf,SAAS,GACT,YAAY,GACZ,iBAAiB,CAAC;AAEtB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2bqB,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,cAAc,CAAC;AAE3D,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW,CAElE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,EAAE,CAI9E"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Status of reverse-engineered Google Maps HTTP surfaces.
2
+ * Status of undocumented Google Maps HTTP surfaces.
3
3
  */
4
4
  export const KNOWN_SURFACES = {
5
5
  search: {
@@ -114,7 +114,7 @@ export const KNOWN_SURFACES = {
114
114
  status: 'working',
115
115
  method: 'GET',
116
116
  path: '/maps/vt/proto',
117
- notes: '256px roadmap tiles wrapped in protobuf. Satellite and 512px variants return HTTP 400.',
117
+ notes: '256px roadmap tiles wrapped in protobuf. Named overlay layers decoded from the JS `_.er` descriptors: shading (type 5) and contours (type 6) answer real raster anonymously; traffic, transit, bike, svv, air-quality, area-busyness, crisis2, indoor, hotel-categorical-search, lore-p13n, lore-rec and travel-map-reachability only render inside the full client style context (empty placeholder tiles when probed directly).',
118
118
  },
119
119
  mapTilesStream: {
120
120
  status: 'working',
@@ -266,6 +266,138 @@ export const KNOWN_SURFACES = {
266
266
  path: '/maps/_/MapsWizUi/data/batchexecute',
267
267
  notes: '2026 service-path format: f.req with /MapsService.Method and no at field. Works anonymously.',
268
268
  },
269
+ mapLayerTiles: {
270
+ status: 'working',
271
+ method: 'GET',
272
+ path: 'mt.google.com/vt?lyrs={m|p|s|y|transit|h,traffic}',
273
+ notes: 'Raster basemap and overlay tiles. `p` (terrain) and `s`/`y` (imagery) answer JPEG, the rest PNG. Traffic only paints when composited onto a base layer (`h,traffic`); a bare `traffic` key returns a transparent tile.',
274
+ },
275
+ satelliteImagery: {
276
+ status: 'working',
277
+ method: 'GET',
278
+ path: 'mt.google.com/vt?lyrs=s|y',
279
+ notes: 'Satellite (`s`) and hybrid (`y`) imagery, JPEG. earth.google.com exposes no public imagery API — mw.google.com/mw-earth does not resolve.',
280
+ },
281
+ evCharging: {
282
+ status: 'fallback',
283
+ method: 'GET',
284
+ path: '/search?tbm=map + /maps/preview/place',
285
+ notes: 'No EV RPC exists. Stations are found by categorical place search; connector type, power, and plug count come from placeData[140][1][0][2]. Live availability and pricing are not published anywhere.',
286
+ },
287
+ parkingSearch: {
288
+ status: 'fallback',
289
+ method: 'GET',
290
+ path: '/search?tbm=map',
291
+ notes: 'No parking RPC exists. Parking lots are ordinary places found by categorical search. Space counts and posted rates are not carried in place data.',
292
+ },
293
+ adminRegions: {
294
+ status: 'fallback',
295
+ method: 'GET',
296
+ path: '/search?tbm=map (reverse geocode)',
297
+ notes: 'Region hierarchy is read from the reverse-geocode address tail. No polygons are published, so AdminRegion.bounds is absent.',
298
+ },
299
+ placeAttributes: {
300
+ status: 'working',
301
+ method: 'GET',
302
+ path: '/maps/preview/place (placeData[100][1])',
303
+ notes: 'Amenity / accessibility / payment attributes are per place. Maps publishes no global attribute catalog.',
304
+ },
305
+ trafficIncidents: {
306
+ status: 'working',
307
+ method: 'POST',
308
+ path: '/MapsTrafficService.GetAreaTraffic (root[2])',
309
+ notes: 'Incidents ride along with the area summary in the EvxQ3b response — there is no separate incident service. Each carries a headline, road name, delay in seconds and the affected stretch as cumulative 1e7 deltas. Severity is derived from the delay, not reported.',
310
+ },
311
+ schoolsLayer: {
312
+ status: 'fallback',
313
+ method: 'GET',
314
+ path: '/search?tbm=map',
315
+ notes: 'The rendered layer is vector-tile only and has no marker service, so schools come from the categorical searches the UI uses, clipped to the requested bounds.',
316
+ },
317
+ buildings3d: {
318
+ status: 'fallback',
319
+ method: 'GET',
320
+ path: 'kh.google.com/rt/earth (see buildings3dRocktree)',
321
+ notes: 'No building layer exists — /maps/vt answers raster everywhere and the mapcore WASM renders one fused surface of ground, structures and canopy. map3d.getBuildings segments structures out of that mesh (4 m grid, local ground from a neighbourhood minimum, flood fill split on a 6 m roof step), so footprints are derived massing rather than surveyed outlines.',
322
+ },
323
+ transitRouting: {
324
+ status: 'working',
325
+ method: 'GET',
326
+ path: '/maps/preview/directions (mode=transit + session block)',
327
+ notes: 'Gated on the page session block !15m3!1s{ei}!7e81!15i10142 — without it Google answers with travel-time chips and no routes. With it: full itineraries, legs, lines and colours, boarding/alighting and intermediate stops, fares, agencies, frequency and service alerts. Verified in London, New York and Tokyo.',
328
+ },
329
+ terrainHillshade: {
330
+ status: 'working',
331
+ method: 'GET',
332
+ path: '/maps/vt/proto (!1e5!2sshading)',
333
+ notes: 'Raster hillshade tiles decoded from the JS vt layer descriptors. Global coverage from z8 up; Yosemite tiles run ~45 KB at z10 vs the 220-byte blank placeholder for dataless cells.',
334
+ },
335
+ contourLines: {
336
+ status: 'working',
337
+ method: 'GET',
338
+ path: '/maps/vt/proto (!1e6!2scontours)',
339
+ notes: 'Elevation contour-line tiles, same descriptor family as hillshade. Publishes in the z13–15 band; outside it Google answers a valid-but-blank placeholder PNG which getOverlay surfaces as GMapsEmptyPayloadError.',
340
+ },
341
+ userPrefs: {
342
+ status: 'auth-required',
343
+ method: 'POST',
344
+ path: '/maps/_/MapsWizUi/data/batchexecute (/MapsUserPrefsService.GetUserPrefs)',
345
+ notes: 'Per-account settings store (units, home/work, region) registered as JGUSi in the web client. Anonymous calls return a bare [1] stub for every arg shape ([3] with a session context); response layout beyond int32 field 1 is inferred from JS message classes.',
346
+ },
347
+ streetViewTileGrid: {
348
+ status: 'working',
349
+ method: 'GET',
350
+ path: 'streetviewpixels-pa.googleapis.com/v1/tile (pyramid manifest)',
351
+ notes: 'Street View ships no video endpoint — the web client renders equirectangular panoramas by fetching tile pyramids described by photometa tileSizes/maxTileDimensions/tileFaceSize. panorama.getTileGrid() returns the full per-zoom URL matrix.',
352
+ },
353
+ viewportMetadata: {
354
+ status: 'working',
355
+ method: 'POST',
356
+ path: '/maps/_/MapsWizUi/data/batchexecute (/MapsViewportService.GetViewportMetadata)',
357
+ notes: 'Capability ids for a viewport. Earlier probes failed because the camera carried no altitude: the server derives zoom from it and answers [3] for any camera it cannot place. With a real altitude it returns ids such as 2, 3, 5, 6, 7, 9 and 10 — Google publishes no names for them, and open water returns nothing at all.',
358
+ },
359
+ panoramaDepth: {
360
+ status: 'working',
361
+ method: 'GET',
362
+ path: '/maps/photometa/v1 (section !1e18)',
363
+ notes: 'A 512×256 lossless WebP per panorama, laid out equirectangularly. Pixels hold small integers indexing coplanar surfaces, not metres, and the plane equations are absent from every photometa section probed — useful as a depth segmentation. The bytes ride inside the JSON as one byte per code unit, so the response must be read as latin1.',
364
+ },
365
+ panoramaElevation: {
366
+ status: 'working',
367
+ method: 'GET',
368
+ path: '/maps/photometa/v1 (photometa node[5][0][1][1])',
369
+ notes: 'Every panorama reports its height above sea level and above the WGS84 ellipsoid, the pair differing by the local geoid offset. Verified against Denver (1598 m), Times Square (16.8 m) and Amsterdam (4.3 m) — a far more direct elevation source than the bicycling-route fallback.',
370
+ },
371
+ buildings3dRocktree: {
372
+ status: 'working',
373
+ method: 'GET',
374
+ path: 'kh.google.com/rt/earth (PlanetoidMetadata / BulkMetadata / NodeData)',
375
+ notes: 'Google Earth rocktree octree — the anonymous source of the photorealistic mesh behind Maps 3D. Delta-packed vertex cubes, triangle strips and 512×512 JPEG textures decode losslessly; `!3u{imageryEpoch}` must only be appended when node flags carry bit 16, otherwise NodeData answers 404. map3d.getMesh/getTerrain/getBuildings wrap it.',
376
+ },
377
+ searchGrid: {
378
+ status: 'working',
379
+ method: 'GET',
380
+ path: '/search?tbm=map (per-cell via search.gridSearch)',
381
+ notes: 'Area-coverage orchestration over the ordinary search RPC: the bounding box is subdivided into Web Mercator cells at cellZoom and each cell runs one paginated search, deduped by hexId. Beats single-query pagination caps in dense cities — the same grid strategy commercial scrapers charge for.',
382
+ },
383
+ rocktreePlanets: {
384
+ status: 'working',
385
+ method: 'GET',
386
+ path: 'kh.google.com/rt/{mars|moon} (PlanetoidMetadata)',
387
+ notes: 'The rocktree octree protocol serves more planets than earth. mars and moon answer live with distinct root epochs and reference radii (3 389.5 km / 1 737.4 km); unknown names get HTTP 400 INVALID_ARGUMENT. Pass options.planet to map3d.getMesh/getTerrain/getBuildings.',
388
+ },
389
+ bikeShareAvailability: {
390
+ status: 'working',
391
+ method: 'GET',
392
+ path: '/maps/preview/place placeData[133][0] = [label, "n/m", null, longLabel]',
393
+ notes: 'Live dock availability from the operator feed embedded in station previews. Verified across live/detail/rich modes and operators (Citi Bike NYC "48/57 bikes available", Santander Cycles London, singular "1/13 bike available" at low counts). Absent for non-station places; parsed by extractBikeAvailability / travel().bikeShare.',
394
+ },
395
+ airQualityRpc: {
396
+ status: 'auth-required',
397
+ method: 'POST',
398
+ path: '/maps/_/MapsWizUi/data/batchexecute (GivvBd air quality, FQvEwd heatmap)',
399
+ notes: 'Legacy rpcids, not service paths — they require an XSNRF/XSRF token from WIZ_global_data.SNlM0e, which signed-out sessions never issue. Callable with signed-in cookies via sdk().features().airQuality(); response layout unparsed until reachable anonymously.',
400
+ },
269
401
  };
270
402
  export function getSurfaceInfo(name) {
271
403
  return KNOWN_SURFACES[name];
@@ -1 +1 @@
1
- {"version":3,"file":"known-surfaces.js","sourceRoot":"","sources":["../src/known-surfaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"known-surfaces.js","sourceRoot":"","sources":["../src/known-surfaces.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,16 @@
1
1
  import type { CreateShortUrlResult, DecodedMapsUrl } from '../types/batch-url.js';
2
2
  /**
3
3
  * Parse DecodeUrl batchexecute response.
4
- * Verified: lng [0][2][1][1], lat [0][2][1][2], zoom [0][2][1][5], name [0][3][2][1].
4
+ *
5
+ * Verified slot layout from decode-url-kake.json fixture:
6
+ * root[0][2][1] = [typeCode, lng, lat, null, null, zoom]
7
+ * root[0][3][2][1] = name string
8
+ *
9
+ * typeCode values (observed):
10
+ * 2 = place page URL (has name + lat/lng/zoom)
11
+ * 1 = search/query URL (unconfirmed — no fixture)
12
+ * 3 = directions URL (unconfirmed — no fixture)
13
+ * 4 = viewport-only URL (unconfirmed — no fixture)
5
14
  */
6
15
  export declare function extractDecodedMapsUrl(data: unknown, options?: {
7
16
  raw?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"batch-url.d.ts","sourceRoot":"","sources":["../../src/parsers/batch-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKlF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,cAAc,CAuBhG;AAED,iEAAiE;AACjE,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,oBAAoB,CAY5G"}
1
+ {"version":3,"file":"batch-url.d.ts","sourceRoot":"","sources":["../../src/parsers/batch-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKlF;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,cAAc,CAmChG;AAED,iEAAiE;AACjE,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,oBAAoB,CAY5G"}
@@ -1,8 +1,17 @@
1
- import { safeGet } from '../utils/safe-get.js';
1
+ import { safeGet } from '../utils/payload.js';
2
2
  import { parseBatchPayload } from '../rpc/batch-rpc.js';
3
3
  /**
4
4
  * Parse DecodeUrl batchexecute response.
5
- * Verified: lng [0][2][1][1], lat [0][2][1][2], zoom [0][2][1][5], name [0][3][2][1].
5
+ *
6
+ * Verified slot layout from decode-url-kake.json fixture:
7
+ * root[0][2][1] = [typeCode, lng, lat, null, null, zoom]
8
+ * root[0][3][2][1] = name string
9
+ *
10
+ * typeCode values (observed):
11
+ * 2 = place page URL (has name + lat/lng/zoom)
12
+ * 1 = search/query URL (unconfirmed — no fixture)
13
+ * 3 = directions URL (unconfirmed — no fixture)
14
+ * 4 = viewport-only URL (unconfirmed — no fixture)
6
15
  */
7
16
  export function extractDecodedMapsUrl(data, options) {
8
17
  const root = parseBatchPayload(data);
@@ -12,16 +21,35 @@ export function extractDecodedMapsUrl(data, options) {
12
21
  let lat;
13
22
  let lng;
14
23
  let zoom;
24
+ let type;
15
25
  if (Array.isArray(coords)) {
26
+ const typeCode = typeof coords[0] === 'number' ? coords[0] : undefined;
16
27
  lng = typeof coords[1] === 'number' ? coords[1] : undefined;
17
28
  lat = typeof coords[2] === 'number' ? coords[2] : undefined;
18
29
  zoom = typeof coords[5] === 'number' ? coords[5] : undefined;
30
+ // Derive URL type from the type code. Only code 2 (place) is confirmed from
31
+ // the fixture; others are inferred from Maps URL structure conventions.
32
+ switch (typeCode) {
33
+ case 1:
34
+ type = 'search';
35
+ break;
36
+ case 2:
37
+ type = 'place';
38
+ break;
39
+ case 3:
40
+ type = 'directions';
41
+ break;
42
+ case 4:
43
+ type = 'viewport';
44
+ break;
45
+ }
19
46
  }
20
47
  return {
21
48
  name,
22
49
  lat,
23
50
  lng,
24
51
  zoom,
52
+ type,
25
53
  raw: options?.raw ? root : undefined,
26
54
  };
27
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"batch-url.js","sourceRoot":"","sources":["../../src/parsers/batch-url.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAa,EAAE,OAA2B;IAC9E,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,CAAW,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAY,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAS,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7C,IAAI,GAAuB,CAAC;IAC5B,IAAI,GAAuB,CAAC;IAC5B,IAAI,IAAwB,CAAC;IAE7B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,IAAI,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,CAAC;IAED,OAAO;QACL,IAAI;QACJ,GAAG;QACH,GAAG;QACH,IAAI;QACJ,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KACrC,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,2BAA2B,CAAC,IAAa,EAAE,OAA2B;IACpF,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG;QACjB,OAAO,CAAS,IAAI,EAAE,CAAC,CAAC;QACxB,OAAO,CAAS,IAAI,EAAE,CAAC,CAAC;QACxB,OAAO,CAAS,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;KAC5B,CAAC;IACF,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,OAAO;QACL,QAAQ;QACR,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KACrC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"batch-url.js","sourceRoot":"","sources":["../../src/parsers/batch-url.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAa,EAAE,OAA2B;IAC9E,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,CAAW,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAY,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAS,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7C,IAAI,GAAuB,CAAC;IAC5B,IAAI,GAAuB,CAAC;IAC5B,IAAI,IAAwB,CAAC;IAC7B,IAAI,IAA4B,CAAC;IAEjC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,IAAI,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE7D,4EAA4E;QAC5E,wEAAwE;QACxE,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,CAAC;gBAAE,IAAI,GAAG,QAAQ,CAAC;gBAAC,MAAM;YAC/B,KAAK,CAAC;gBAAE,IAAI,GAAG,OAAO,CAAC;gBAAC,MAAM;YAC9B,KAAK,CAAC;gBAAE,IAAI,GAAG,YAAY,CAAC;gBAAC,MAAM;YACnC,KAAK,CAAC;gBAAE,IAAI,GAAG,UAAU,CAAC;gBAAC,MAAM;QACnC,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI;QACJ,GAAG;QACH,GAAG;QACH,IAAI;QACJ,IAAI;QACJ,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KACrC,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,2BAA2B,CAAC,IAAa,EAAE,OAA2B;IACpF,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG;QACjB,OAAO,CAAS,IAAI,EAAE,CAAC,CAAC;QACxB,OAAO,CAAS,IAAI,EAAE,CAAC,CAAC;QACxB,OAAO,CAAS,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;KAC5B,CAAC;IACF,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,OAAO;QACL,QAAQ;QACR,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KACrC,CAAC;AACJ,CAAC"}
@@ -3,6 +3,13 @@
3
3
  */
4
4
  import type { ReviewsResult } from '../types/common.js';
5
5
  import type { PbNode } from '../types/protobuf.js';
6
+ export interface ExtractBoqReviewsOptions {
7
+ /**
8
+ * When true, attach the raw boq entry array to each `Review.raw`.
9
+ * Useful for debugging field discovery. Default false.
10
+ */
11
+ raw?: boolean;
12
+ }
6
13
  /** Parse GetLocalBoqProxy JSON response into reviews. */
7
- export declare function extractBoqReviews(data: PbNode): ReviewsResult;
14
+ export declare function extractBoqReviews(data: PbNode, options?: ExtractBoqReviewsOptions): ReviewsResult;
8
15
  //# sourceMappingURL=boq-reviews.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"boq-reviews.d.ts","sourceRoot":"","sources":["../../src/parsers/boq-reviews.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAoC,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQ1F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAqQnD,yDAAyD;AACzD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAoB7D"}
1
+ {"version":3,"file":"boq-reviews.d.ts","sourceRoot":"","sources":["../../src/parsers/boq-reviews.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAoC,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQ1F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAOnD,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AA2RD,yDAAyD;AACzD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,aAAa,CAmCjG"}
@@ -3,8 +3,9 @@
3
3
  */
4
4
  import { asBoqRoot } from '../types/protobuf.js';
5
5
  import { normalizePhotoUrl } from '../utils/photo-url.js';
6
- import { safeGet } from '../utils/safe-get.js';
6
+ import { safeGet } from '../utils/payload.js';
7
7
  import { htmlToPlainText } from './shared.js';
8
+ import { buildReviewDetailedRating } from './place-extended.js';
8
9
  function isGoogleUserContentUrl(value) {
9
10
  return typeof value === 'string' && value.includes('googleusercontent.com');
10
11
  }
@@ -26,15 +27,28 @@ function parseReviewerCredibility(authorInfo) {
26
27
  const photoCount = typeof authorInfo[4] === 'number' ? authorInfo[4] : undefined;
27
28
  const authorPhoto = typeof authorInfo[1] === 'string' ? authorInfo[1] : undefined;
28
29
  const localGuideLevel = parseLocalGuideLevel(authorPhoto, authorInfo[5]);
30
+ const authorId = typeof authorInfo[6] === 'string' && /^\d+$/.test(authorInfo[6])
31
+ ? authorInfo[6]
32
+ : typeof authorInfo[7] === 'string' && /^\d+$/.test(authorInfo[7])
33
+ ? authorInfo[7]
34
+ : undefined;
29
35
  const isLocalGuide = localGuideLevel != null ||
30
36
  (typeof authorPhoto === 'string' && /-ba\d+-/i.test(authorPhoto));
31
37
  if (reviewCount == null &&
32
38
  photoCount == null &&
33
39
  localGuideLevel == null &&
40
+ authorId == null &&
34
41
  !isLocalGuide) {
35
42
  return undefined;
36
43
  }
37
- return { reviewCount, photoCount, localGuideLevel, isLocalGuide: isLocalGuide || undefined };
44
+ return {
45
+ reviewCount,
46
+ photoCount,
47
+ localGuideLevel,
48
+ isLocalGuide: isLocalGuide || undefined,
49
+ authorId,
50
+ raw: authorInfo,
51
+ };
38
52
  }
39
53
  function parseOwnerReply(block) {
40
54
  if (!Array.isArray(block))
@@ -44,7 +58,7 @@ function parseOwnerReply(block) {
44
58
  const text = rawText ? htmlToPlainText(rawText) : undefined;
45
59
  if (!date && !text)
46
60
  return undefined;
47
- return { date, text };
61
+ return { date, text, raw: block };
48
62
  }
49
63
  function parseReviewPhotos(review) {
50
64
  const photosNode = review[14];
@@ -65,6 +79,9 @@ function parseReviewPhotos(review) {
65
79
  aspectRatio: typeof entry[4] === 'number' ? entry[4] : undefined,
66
80
  videoUrl: typeof entry[5] === 'string' ? entry[5] : undefined,
67
81
  uploadDate: typeof entry[6] === 'string' ? entry[6] : undefined,
82
+ width: typeof entry[7] === 'number' ? entry[7] : undefined,
83
+ height: typeof entry[8] === 'number' ? entry[8] : undefined,
84
+ raw: entry,
68
85
  });
69
86
  }
70
87
  return photos;
@@ -128,6 +145,7 @@ function parseReviewAttributes(review) {
128
145
  label,
129
146
  value,
130
147
  rating: rating != null && rating >= 1 && rating <= 5 ? rating : undefined,
148
+ raw: entry,
131
149
  });
132
150
  }
133
151
  return attributes;
@@ -145,9 +163,9 @@ function parseTranslation(review) {
145
163
  if (!language && !text && !textPreview && !originalText && isTranslated == null) {
146
164
  return undefined;
147
165
  }
148
- return { language, isTranslated, text, textPreview, originalText };
166
+ return { language, isTranslated, text, textPreview, originalText, raw: review[44] };
149
167
  }
150
- function parseSingleReview(review) {
168
+ function parseSingleReview(review, options) {
151
169
  if (!Array.isArray(review) || review.length < 6) {
152
170
  return null;
153
171
  }
@@ -163,6 +181,10 @@ function parseSingleReview(review) {
163
181
  const helpfulCount = typeof review[29] === 'number' ? review[29] : undefined;
164
182
  const permalink = typeof review[12] === 'string' ? review[12] : undefined;
165
183
  const timestampMs = Array.isArray(timeInfo) && typeof timeInfo[2] === 'string' ? timeInfo[2] : undefined;
184
+ // visited context label — boq entry [31] in some variants
185
+ const visited = typeof review[31] === 'string' ? review[31] : undefined;
186
+ const parsedAttributes = attributes.length > 0 ? attributes : undefined;
187
+ const reviewDetailedRating = buildReviewDetailedRating(parsedAttributes);
166
188
  const parsed = {
167
189
  reviewId: typeof reviewId === 'string' ? reviewId : undefined,
168
190
  rating: typeof rating === 'number' && rating >= 1 && rating <= 5 ? rating : undefined,
@@ -183,10 +205,13 @@ function parseSingleReview(review) {
183
205
  ownerReply,
184
206
  helpfulCount,
185
207
  permalink,
186
- attributes: attributes.length > 0 ? attributes : undefined,
208
+ visited,
209
+ attributes: parsedAttributes,
210
+ reviewDetailedRating,
187
211
  photoItems: structuredPhotos.length > 0 ? structuredPhotos : undefined,
188
212
  photos: structuredPhotos.length > 0 ? structuredPhotos.map((p) => p.normalizedUrl) : undefined,
189
213
  source: 'boq',
214
+ raw: options?.raw ? review : undefined,
190
215
  };
191
216
  if (!parsed.author && !parsed.text) {
192
217
  return null;
@@ -232,14 +257,30 @@ function buildRatingDistribution(reviews) {
232
257
  return counted > 0 ? dist : undefined;
233
258
  }
234
259
  /** Parse GetLocalBoqProxy JSON response into reviews. */
235
- export function extractBoqReviews(data) {
260
+ export function extractBoqReviews(data, options) {
236
261
  const root = asBoqRoot(data);
237
262
  const reviewsNode = root ? safeGet(root, 1, 10) : undefined;
238
263
  const reviewsArray = Array.isArray(reviewsNode?.[2]) ? reviewsNode[2] : [];
239
264
  const nextPageToken = typeof reviewsNode?.[6] === 'string' ? reviewsNode[6] : undefined;
265
+ // Total review count may appear at root[1][10][1] (string) or root[1][1] (number)
266
+ let totalReviews;
267
+ const totalFromNode = reviewsNode?.[1];
268
+ if (typeof totalFromNode === 'number' && Number.isFinite(totalFromNode)) {
269
+ totalReviews = totalFromNode;
270
+ }
271
+ else if (typeof totalFromNode === 'string') {
272
+ const parsed = parseInt(totalFromNode, 10);
273
+ if (Number.isFinite(parsed))
274
+ totalReviews = parsed;
275
+ }
276
+ if (totalReviews == null) {
277
+ const altTotal = root ? safeGet(root, 1, 1) : undefined;
278
+ if (typeof altTotal === 'number' && Number.isFinite(altTotal))
279
+ totalReviews = altTotal;
280
+ }
240
281
  const reviews = [];
241
282
  for (const entry of reviewsArray) {
242
- const review = parseSingleReview(entry);
283
+ const review = parseSingleReview(entry, options);
243
284
  if (review) {
244
285
  reviews.push(review);
245
286
  }
@@ -248,6 +289,7 @@ export function extractBoqReviews(data) {
248
289
  reviewCount: reviews.length,
249
290
  reviews,
250
291
  nextPageToken,
292
+ totalReviews,
251
293
  pageRatingDistribution: buildRatingDistribution(reviews),
252
294
  };
253
295
  }