googlemaps-kit 0.1.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 (525) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +249 -0
  3. package/dist/auth/auth-status.d.ts +30 -0
  4. package/dist/auth/auth-status.d.ts.map +1 -0
  5. package/dist/auth/auth-status.js +169 -0
  6. package/dist/auth/auth-status.js.map +1 -0
  7. package/dist/auth/google-auth.d.ts +9 -0
  8. package/dist/auth/google-auth.d.ts.map +1 -0
  9. package/dist/auth/google-auth.js +40 -0
  10. package/dist/auth/google-auth.js.map +1 -0
  11. package/dist/auth/maps-tokens.d.ts +6 -0
  12. package/dist/auth/maps-tokens.d.ts.map +1 -0
  13. package/dist/auth/maps-tokens.js +18 -0
  14. package/dist/auth/maps-tokens.js.map +1 -0
  15. package/dist/auth/session.d.ts +28 -0
  16. package/dist/auth/session.d.ts.map +1 -0
  17. package/dist/auth/session.js +104 -0
  18. package/dist/auth/session.js.map +1 -0
  19. package/dist/client/gmaps-client.d.ts +92 -0
  20. package/dist/client/gmaps-client.d.ts.map +1 -0
  21. package/dist/client/gmaps-client.js +254 -0
  22. package/dist/client/gmaps-client.js.map +1 -0
  23. package/dist/client/http-client.d.ts +91 -0
  24. package/dist/client/http-client.d.ts.map +1 -0
  25. package/dist/client/http-client.js +393 -0
  26. package/dist/client/http-client.js.map +1 -0
  27. package/dist/index.d.ts +64 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +36 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/internal.d.ts +140 -0
  32. package/dist/internal.d.ts.map +1 -0
  33. package/dist/internal.js +97 -0
  34. package/dist/internal.js.map +1 -0
  35. package/dist/known-surfaces.d.ts +280 -0
  36. package/dist/known-surfaces.d.ts.map +1 -0
  37. package/dist/known-surfaces.js +276 -0
  38. package/dist/known-surfaces.js.map +1 -0
  39. package/dist/parsers/batch-url.d.ts +13 -0
  40. package/dist/parsers/batch-url.d.ts.map +1 -0
  41. package/dist/parsers/batch-url.js +42 -0
  42. package/dist/parsers/batch-url.js.map +1 -0
  43. package/dist/parsers/boq-reviews.d.ts +8 -0
  44. package/dist/parsers/boq-reviews.d.ts.map +1 -0
  45. package/dist/parsers/boq-reviews.js +254 -0
  46. package/dist/parsers/boq-reviews.js.map +1 -0
  47. package/dist/parsers/categories.d.ts +14 -0
  48. package/dist/parsers/categories.d.ts.map +1 -0
  49. package/dist/parsers/categories.js +128 -0
  50. package/dist/parsers/categories.js.map +1 -0
  51. package/dist/parsers/directions.d.ts +6 -0
  52. package/dist/parsers/directions.d.ts.map +1 -0
  53. package/dist/parsers/directions.js +388 -0
  54. package/dist/parsers/directions.js.map +1 -0
  55. package/dist/parsers/elevation-directions.d.ts +18 -0
  56. package/dist/parsers/elevation-directions.d.ts.map +1 -0
  57. package/dist/parsers/elevation-directions.js +102 -0
  58. package/dist/parsers/elevation-directions.js.map +1 -0
  59. package/dist/parsers/geocode.d.ts +11 -0
  60. package/dist/parsers/geocode.d.ts.map +1 -0
  61. package/dist/parsers/geocode.js +104 -0
  62. package/dist/parsers/geocode.js.map +1 -0
  63. package/dist/parsers/knowledge.d.ts +13 -0
  64. package/dist/parsers/knowledge.d.ts.map +1 -0
  65. package/dist/parsers/knowledge.js +93 -0
  66. package/dist/parsers/knowledge.js.map +1 -0
  67. package/dist/parsers/lists.d.ts +23 -0
  68. package/dist/parsers/lists.d.ts.map +1 -0
  69. package/dist/parsers/lists.js +219 -0
  70. package/dist/parsers/lists.js.map +1 -0
  71. package/dist/parsers/local-posts.d.ts +12 -0
  72. package/dist/parsers/local-posts.d.ts.map +1 -0
  73. package/dist/parsers/local-posts.js +112 -0
  74. package/dist/parsers/local-posts.js.map +1 -0
  75. package/dist/parsers/maps-url.d.ts +15 -0
  76. package/dist/parsers/maps-url.d.ts.map +1 -0
  77. package/dist/parsers/maps-url.js +326 -0
  78. package/dist/parsers/maps-url.js.map +1 -0
  79. package/dist/parsers/panorama.d.ts +24 -0
  80. package/dist/parsers/panorama.d.ts.map +1 -0
  81. package/dist/parsers/panorama.js +161 -0
  82. package/dist/parsers/panorama.js.map +1 -0
  83. package/dist/parsers/passiveassist.d.ts +10 -0
  84. package/dist/parsers/passiveassist.d.ts.map +1 -0
  85. package/dist/parsers/passiveassist.js +61 -0
  86. package/dist/parsers/passiveassist.js.map +1 -0
  87. package/dist/parsers/photos.d.ts +21 -0
  88. package/dist/parsers/photos.d.ts.map +1 -0
  89. package/dist/parsers/photos.js +287 -0
  90. package/dist/parsers/photos.js.map +1 -0
  91. package/dist/parsers/place-attributes.d.ts +25 -0
  92. package/dist/parsers/place-attributes.d.ts.map +1 -0
  93. package/dist/parsers/place-attributes.js +266 -0
  94. package/dist/parsers/place-attributes.js.map +1 -0
  95. package/dist/parsers/place.d.ts +9 -0
  96. package/dist/parsers/place.d.ts.map +1 -0
  97. package/dist/parsers/place.js +291 -0
  98. package/dist/parsers/place.js.map +1 -0
  99. package/dist/parsers/reveal.d.ts +5 -0
  100. package/dist/parsers/reveal.d.ts.map +1 -0
  101. package/dist/parsers/reveal.js +99 -0
  102. package/dist/parsers/reveal.js.map +1 -0
  103. package/dist/parsers/review-aggregates.d.ts +7 -0
  104. package/dist/parsers/review-aggregates.d.ts.map +1 -0
  105. package/dist/parsers/review-aggregates.js +18 -0
  106. package/dist/parsers/review-aggregates.js.map +1 -0
  107. package/dist/parsers/review-client-filters.d.ts +8 -0
  108. package/dist/parsers/review-client-filters.d.ts.map +1 -0
  109. package/dist/parsers/review-client-filters.js +28 -0
  110. package/dist/parsers/review-client-filters.js.map +1 -0
  111. package/dist/parsers/reviews.d.ts +8 -0
  112. package/dist/parsers/reviews.d.ts.map +1 -0
  113. package/dist/parsers/reviews.js +55 -0
  114. package/dist/parsers/reviews.js.map +1 -0
  115. package/dist/parsers/search-client-filters.d.ts +7 -0
  116. package/dist/parsers/search-client-filters.d.ts.map +1 -0
  117. package/dist/parsers/search-client-filters.js +44 -0
  118. package/dist/parsers/search-client-filters.js.map +1 -0
  119. package/dist/parsers/search-pagination.d.ts +12 -0
  120. package/dist/parsers/search-pagination.d.ts.map +1 -0
  121. package/dist/parsers/search-pagination.js +34 -0
  122. package/dist/parsers/search-pagination.js.map +1 -0
  123. package/dist/parsers/search.d.ts +5 -0
  124. package/dist/parsers/search.d.ts.map +1 -0
  125. package/dist/parsers/search.js +187 -0
  126. package/dist/parsers/search.js.map +1 -0
  127. package/dist/parsers/shared.d.ts +24 -0
  128. package/dist/parsers/shared.d.ts.map +1 -0
  129. package/dist/parsers/shared.js +147 -0
  130. package/dist/parsers/shared.js.map +1 -0
  131. package/dist/parsers/suggest.d.ts +10 -0
  132. package/dist/parsers/suggest.d.ts.map +1 -0
  133. package/dist/parsers/suggest.js +153 -0
  134. package/dist/parsers/suggest.js.map +1 -0
  135. package/dist/parsers/tiles.d.ts +22 -0
  136. package/dist/parsers/tiles.d.ts.map +1 -0
  137. package/dist/parsers/tiles.js +70 -0
  138. package/dist/parsers/tiles.js.map +1 -0
  139. package/dist/parsers/timezone-geocode.d.ts +20 -0
  140. package/dist/parsers/timezone-geocode.d.ts.map +1 -0
  141. package/dist/parsers/timezone-geocode.js +96 -0
  142. package/dist/parsers/timezone-geocode.js.map +1 -0
  143. package/dist/parsers/traffic.d.ts +10 -0
  144. package/dist/parsers/traffic.d.ts.map +1 -0
  145. package/dist/parsers/traffic.js +38 -0
  146. package/dist/parsers/traffic.js.map +1 -0
  147. package/dist/parsers/transit.d.ts +12 -0
  148. package/dist/parsers/transit.d.ts.map +1 -0
  149. package/dist/parsers/transit.js +77 -0
  150. package/dist/parsers/transit.js.map +1 -0
  151. package/dist/parsers/ugc-aggregates.d.ts +9 -0
  152. package/dist/parsers/ugc-aggregates.d.ts.map +1 -0
  153. package/dist/parsers/ugc-aggregates.js +23 -0
  154. package/dist/parsers/ugc-aggregates.js.map +1 -0
  155. package/dist/rpc/app-options.d.ts +25 -0
  156. package/dist/rpc/app-options.d.ts.map +1 -0
  157. package/dist/rpc/app-options.js +147 -0
  158. package/dist/rpc/app-options.js.map +1 -0
  159. package/dist/rpc/batch-execute.d.ts +30 -0
  160. package/dist/rpc/batch-execute.d.ts.map +1 -0
  161. package/dist/rpc/batch-execute.js +217 -0
  162. package/dist/rpc/batch-execute.js.map +1 -0
  163. package/dist/rpc/batch-request-builders.d.ts +65 -0
  164. package/dist/rpc/batch-request-builders.d.ts.map +1 -0
  165. package/dist/rpc/batch-request-builders.js +174 -0
  166. package/dist/rpc/batch-request-builders.js.map +1 -0
  167. package/dist/rpc/batch-rpc.d.ts +34 -0
  168. package/dist/rpc/batch-rpc.d.ts.map +1 -0
  169. package/dist/rpc/batch-rpc.js +70 -0
  170. package/dist/rpc/batch-rpc.js.map +1 -0
  171. package/dist/rpc/batch-services.d.ts +38 -0
  172. package/dist/rpc/batch-services.d.ts.map +1 -0
  173. package/dist/rpc/batch-services.js +69 -0
  174. package/dist/rpc/batch-services.js.map +1 -0
  175. package/dist/rpc/batchexecute-args.d.ts +30 -0
  176. package/dist/rpc/batchexecute-args.d.ts.map +1 -0
  177. package/dist/rpc/batchexecute-args.js +35 -0
  178. package/dist/rpc/batchexecute-args.js.map +1 -0
  179. package/dist/rpc/boq-reviews.d.ts +16 -0
  180. package/dist/rpc/boq-reviews.d.ts.map +1 -0
  181. package/dist/rpc/boq-reviews.js +45 -0
  182. package/dist/rpc/boq-reviews.js.map +1 -0
  183. package/dist/rpc/descriptor-registry.d.ts +61 -0
  184. package/dist/rpc/descriptor-registry.d.ts.map +1 -0
  185. package/dist/rpc/descriptor-registry.js +47 -0
  186. package/dist/rpc/descriptor-registry.js.map +1 -0
  187. package/dist/rpc/feature-rpc.d.ts +27 -0
  188. package/dist/rpc/feature-rpc.d.ts.map +1 -0
  189. package/dist/rpc/feature-rpc.js +44 -0
  190. package/dist/rpc/feature-rpc.js.map +1 -0
  191. package/dist/rpc/lists-pb.d.ts +20 -0
  192. package/dist/rpc/lists-pb.d.ts.map +1 -0
  193. package/dist/rpc/lists-pb.js +20 -0
  194. package/dist/rpc/lists-pb.js.map +1 -0
  195. package/dist/rpc/maps-endpoint-registry.json +185 -0
  196. package/dist/rpc/maps-runtime.d.ts +42 -0
  197. package/dist/rpc/maps-runtime.d.ts.map +1 -0
  198. package/dist/rpc/maps-runtime.js +140 -0
  199. package/dist/rpc/maps-runtime.js.map +1 -0
  200. package/dist/rpc/maps-url-builders.d.ts +35 -0
  201. package/dist/rpc/maps-url-builders.d.ts.map +1 -0
  202. package/dist/rpc/maps-url-builders.js +266 -0
  203. package/dist/rpc/maps-url-builders.js.map +1 -0
  204. package/dist/rpc/nxa.d.ts +13 -0
  205. package/dist/rpc/nxa.d.ts.map +1 -0
  206. package/dist/rpc/nxa.js +44 -0
  207. package/dist/rpc/nxa.js.map +1 -0
  208. package/dist/rpc/panorama-pb.d.ts +60 -0
  209. package/dist/rpc/panorama-pb.d.ts.map +1 -0
  210. package/dist/rpc/panorama-pb.js +71 -0
  211. package/dist/rpc/panorama-pb.js.map +1 -0
  212. package/dist/rpc/passiveassist-pb.d.ts +21 -0
  213. package/dist/rpc/passiveassist-pb.d.ts.map +1 -0
  214. package/dist/rpc/passiveassist-pb.js +24 -0
  215. package/dist/rpc/passiveassist-pb.js.map +1 -0
  216. package/dist/rpc/pb-builders.d.ts +136 -0
  217. package/dist/rpc/pb-builders.d.ts.map +1 -0
  218. package/dist/rpc/pb-builders.js +290 -0
  219. package/dist/rpc/pb-builders.js.map +1 -0
  220. package/dist/rpc/photo-category-tokens.d.ts +29 -0
  221. package/dist/rpc/photo-category-tokens.d.ts.map +1 -0
  222. package/dist/rpc/photo-category-tokens.js +97 -0
  223. package/dist/rpc/photo-category-tokens.js.map +1 -0
  224. package/dist/rpc/photos-pb.d.ts +29 -0
  225. package/dist/rpc/photos-pb.d.ts.map +1 -0
  226. package/dist/rpc/photos-pb.js +73 -0
  227. package/dist/rpc/photos-pb.js.map +1 -0
  228. package/dist/rpc/reveal-pb.d.ts +26 -0
  229. package/dist/rpc/reveal-pb.d.ts.map +1 -0
  230. package/dist/rpc/reveal-pb.js +32 -0
  231. package/dist/rpc/reveal-pb.js.map +1 -0
  232. package/dist/rpc/rpc-client.d.ts +50 -0
  233. package/dist/rpc/rpc-client.d.ts.map +1 -0
  234. package/dist/rpc/rpc-client.js +136 -0
  235. package/dist/rpc/rpc-client.js.map +1 -0
  236. package/dist/rpc/rpc-descriptor-registry.json +776 -0
  237. package/dist/rpc/rpc-methods.d.ts +75 -0
  238. package/dist/rpc/rpc-methods.d.ts.map +1 -0
  239. package/dist/rpc/rpc-methods.js +130 -0
  240. package/dist/rpc/rpc-methods.js.map +1 -0
  241. package/dist/rpc/search-filters.d.ts +43 -0
  242. package/dist/rpc/search-filters.d.ts.map +1 -0
  243. package/dist/rpc/search-filters.js +92 -0
  244. package/dist/rpc/search-filters.js.map +1 -0
  245. package/dist/rpc/suggest-pb.d.ts +34 -0
  246. package/dist/rpc/suggest-pb.d.ts.map +1 -0
  247. package/dist/rpc/suggest-pb.js +42 -0
  248. package/dist/rpc/suggest-pb.js.map +1 -0
  249. package/dist/rpc/tiles-pb.d.ts +45 -0
  250. package/dist/rpc/tiles-pb.d.ts.map +1 -0
  251. package/dist/rpc/tiles-pb.js +71 -0
  252. package/dist/rpc/tiles-pb.js.map +1 -0
  253. package/dist/rpc/xsrf-bootstrap.d.ts +24 -0
  254. package/dist/rpc/xsrf-bootstrap.d.ts.map +1 -0
  255. package/dist/rpc/xsrf-bootstrap.js +63 -0
  256. package/dist/rpc/xsrf-bootstrap.js.map +1 -0
  257. package/dist/server/api-server.d.ts +9 -0
  258. package/dist/server/api-server.d.ts.map +1 -0
  259. package/dist/server/api-server.js +293 -0
  260. package/dist/server/api-server.js.map +1 -0
  261. package/dist/services/ask-maps.d.ts +91 -0
  262. package/dist/services/ask-maps.d.ts.map +1 -0
  263. package/dist/services/ask-maps.js +221 -0
  264. package/dist/services/ask-maps.js.map +1 -0
  265. package/dist/services/batch-url.d.ts +18 -0
  266. package/dist/services/batch-url.d.ts.map +1 -0
  267. package/dist/services/batch-url.js +30 -0
  268. package/dist/services/batch-url.js.map +1 -0
  269. package/dist/services/categories.d.ts +21 -0
  270. package/dist/services/categories.d.ts.map +1 -0
  271. package/dist/services/categories.js +43 -0
  272. package/dist/services/categories.js.map +1 -0
  273. package/dist/services/directions.d.ts +26 -0
  274. package/dist/services/directions.d.ts.map +1 -0
  275. package/dist/services/directions.js +104 -0
  276. package/dist/services/directions.js.map +1 -0
  277. package/dist/services/distance-matrix.d.ts +17 -0
  278. package/dist/services/distance-matrix.d.ts.map +1 -0
  279. package/dist/services/distance-matrix.js +144 -0
  280. package/dist/services/distance-matrix.js.map +1 -0
  281. package/dist/services/elevation.d.ts +30 -0
  282. package/dist/services/elevation.d.ts.map +1 -0
  283. package/dist/services/elevation.js +149 -0
  284. package/dist/services/elevation.js.map +1 -0
  285. package/dist/services/geocode.d.ts +20 -0
  286. package/dist/services/geocode.d.ts.map +1 -0
  287. package/dist/services/geocode.js +63 -0
  288. package/dist/services/geocode.js.map +1 -0
  289. package/dist/services/knowledge.d.ts +25 -0
  290. package/dist/services/knowledge.d.ts.map +1 -0
  291. package/dist/services/knowledge.js +58 -0
  292. package/dist/services/knowledge.js.map +1 -0
  293. package/dist/services/links.d.ts +22 -0
  294. package/dist/services/links.d.ts.map +1 -0
  295. package/dist/services/links.js +145 -0
  296. package/dist/services/links.js.map +1 -0
  297. package/dist/services/lists.d.ts +20 -0
  298. package/dist/services/lists.d.ts.map +1 -0
  299. package/dist/services/lists.js +74 -0
  300. package/dist/services/lists.js.map +1 -0
  301. package/dist/services/local-posts.d.ts +14 -0
  302. package/dist/services/local-posts.d.ts.map +1 -0
  303. package/dist/services/local-posts.js +32 -0
  304. package/dist/services/local-posts.js.map +1 -0
  305. package/dist/services/panorama.d.ts +39 -0
  306. package/dist/services/panorama.d.ts.map +1 -0
  307. package/dist/services/panorama.js +175 -0
  308. package/dist/services/panorama.js.map +1 -0
  309. package/dist/services/passiveassist.d.ts +21 -0
  310. package/dist/services/passiveassist.d.ts.map +1 -0
  311. package/dist/services/passiveassist.js +70 -0
  312. package/dist/services/passiveassist.js.map +1 -0
  313. package/dist/services/photos.d.ts +46 -0
  314. package/dist/services/photos.d.ts.map +1 -0
  315. package/dist/services/photos.js +341 -0
  316. package/dist/services/photos.js.map +1 -0
  317. package/dist/services/places.d.ts +58 -0
  318. package/dist/services/places.d.ts.map +1 -0
  319. package/dist/services/places.js +240 -0
  320. package/dist/services/places.js.map +1 -0
  321. package/dist/services/reveal.d.ts +15 -0
  322. package/dist/services/reveal.d.ts.map +1 -0
  323. package/dist/services/reveal.js +41 -0
  324. package/dist/services/reveal.js.map +1 -0
  325. package/dist/services/reviews.d.ts +70 -0
  326. package/dist/services/reviews.d.ts.map +1 -0
  327. package/dist/services/reviews.js +245 -0
  328. package/dist/services/reviews.js.map +1 -0
  329. package/dist/services/search.d.ts +25 -0
  330. package/dist/services/search.d.ts.map +1 -0
  331. package/dist/services/search.js +130 -0
  332. package/dist/services/search.js.map +1 -0
  333. package/dist/services/static-map.d.ts +14 -0
  334. package/dist/services/static-map.d.ts.map +1 -0
  335. package/dist/services/static-map.js +182 -0
  336. package/dist/services/static-map.js.map +1 -0
  337. package/dist/services/suggest.d.ts +12 -0
  338. package/dist/services/suggest.d.ts.map +1 -0
  339. package/dist/services/suggest.js +36 -0
  340. package/dist/services/suggest.js.map +1 -0
  341. package/dist/services/tiles.d.ts +19 -0
  342. package/dist/services/tiles.d.ts.map +1 -0
  343. package/dist/services/tiles.js +77 -0
  344. package/dist/services/tiles.js.map +1 -0
  345. package/dist/services/timezone.d.ts +19 -0
  346. package/dist/services/timezone.d.ts.map +1 -0
  347. package/dist/services/timezone.js +91 -0
  348. package/dist/services/timezone.js.map +1 -0
  349. package/dist/services/traffic.d.ts +12 -0
  350. package/dist/services/traffic.d.ts.map +1 -0
  351. package/dist/services/traffic.js +40 -0
  352. package/dist/services/traffic.js.map +1 -0
  353. package/dist/services/transit.d.ts +22 -0
  354. package/dist/services/transit.d.ts.map +1 -0
  355. package/dist/services/transit.js +62 -0
  356. package/dist/services/transit.js.map +1 -0
  357. package/dist/services/ugc-aggregates.d.ts +17 -0
  358. package/dist/services/ugc-aggregates.d.ts.map +1 -0
  359. package/dist/services/ugc-aggregates.js +46 -0
  360. package/dist/services/ugc-aggregates.js.map +1 -0
  361. package/dist/types/batch-url.d.ts +21 -0
  362. package/dist/types/batch-url.d.ts.map +1 -0
  363. package/dist/types/batch-url.js +2 -0
  364. package/dist/types/batch-url.js.map +1 -0
  365. package/dist/types/categories.d.ts +43 -0
  366. package/dist/types/categories.d.ts.map +1 -0
  367. package/dist/types/categories.js +2 -0
  368. package/dist/types/categories.js.map +1 -0
  369. package/dist/types/common.d.ts +538 -0
  370. package/dist/types/common.d.ts.map +1 -0
  371. package/dist/types/common.js +77 -0
  372. package/dist/types/common.js.map +1 -0
  373. package/dist/types/directions.d.ts +88 -0
  374. package/dist/types/directions.d.ts.map +1 -0
  375. package/dist/types/directions.js +2 -0
  376. package/dist/types/directions.js.map +1 -0
  377. package/dist/types/distance-matrix.d.ts +40 -0
  378. package/dist/types/distance-matrix.d.ts.map +1 -0
  379. package/dist/types/distance-matrix.js +2 -0
  380. package/dist/types/distance-matrix.js.map +1 -0
  381. package/dist/types/elevation.d.ts +59 -0
  382. package/dist/types/elevation.d.ts.map +1 -0
  383. package/dist/types/elevation.js +2 -0
  384. package/dist/types/elevation.js.map +1 -0
  385. package/dist/types/geocode.d.ts +60 -0
  386. package/dist/types/geocode.d.ts.map +1 -0
  387. package/dist/types/geocode.js +2 -0
  388. package/dist/types/geocode.js.map +1 -0
  389. package/dist/types/links.d.ts +74 -0
  390. package/dist/types/links.d.ts.map +1 -0
  391. package/dist/types/links.js +2 -0
  392. package/dist/types/links.js.map +1 -0
  393. package/dist/types/lists.d.ts +41 -0
  394. package/dist/types/lists.d.ts.map +1 -0
  395. package/dist/types/lists.js +2 -0
  396. package/dist/types/lists.js.map +1 -0
  397. package/dist/types/maps-urls.d.ts +78 -0
  398. package/dist/types/maps-urls.d.ts.map +1 -0
  399. package/dist/types/maps-urls.js +2 -0
  400. package/dist/types/maps-urls.js.map +1 -0
  401. package/dist/types/panorama.d.ts +74 -0
  402. package/dist/types/panorama.d.ts.map +1 -0
  403. package/dist/types/panorama.js +2 -0
  404. package/dist/types/panorama.js.map +1 -0
  405. package/dist/types/passiveassist.d.ts +50 -0
  406. package/dist/types/passiveassist.d.ts.map +1 -0
  407. package/dist/types/passiveassist.js +2 -0
  408. package/dist/types/passiveassist.js.map +1 -0
  409. package/dist/types/photos.d.ts +101 -0
  410. package/dist/types/photos.d.ts.map +1 -0
  411. package/dist/types/photos.js +75 -0
  412. package/dist/types/photos.js.map +1 -0
  413. package/dist/types/protobuf.d.ts +33 -0
  414. package/dist/types/protobuf.d.ts.map +1 -0
  415. package/dist/types/protobuf.js +25 -0
  416. package/dist/types/protobuf.js.map +1 -0
  417. package/dist/types/reveal.d.ts +46 -0
  418. package/dist/types/reveal.d.ts.map +1 -0
  419. package/dist/types/reveal.js +2 -0
  420. package/dist/types/reveal.js.map +1 -0
  421. package/dist/types/reviews.d.ts +79 -0
  422. package/dist/types/reviews.d.ts.map +1 -0
  423. package/dist/types/reviews.js +5 -0
  424. package/dist/types/reviews.js.map +1 -0
  425. package/dist/types/search-filters.d.ts +59 -0
  426. package/dist/types/search-filters.d.ts.map +1 -0
  427. package/dist/types/search-filters.js +35 -0
  428. package/dist/types/search-filters.js.map +1 -0
  429. package/dist/types/static-map.d.ts +61 -0
  430. package/dist/types/static-map.d.ts.map +1 -0
  431. package/dist/types/static-map.js +2 -0
  432. package/dist/types/static-map.js.map +1 -0
  433. package/dist/types/suggest.d.ts +57 -0
  434. package/dist/types/suggest.d.ts.map +1 -0
  435. package/dist/types/suggest.js +2 -0
  436. package/dist/types/suggest.js.map +1 -0
  437. package/dist/types/tiles.d.ts +65 -0
  438. package/dist/types/tiles.d.ts.map +1 -0
  439. package/dist/types/tiles.js +2 -0
  440. package/dist/types/tiles.js.map +1 -0
  441. package/dist/types/timezone.d.ts +36 -0
  442. package/dist/types/timezone.d.ts.map +1 -0
  443. package/dist/types/timezone.js +2 -0
  444. package/dist/types/timezone.js.map +1 -0
  445. package/dist/types/traffic.d.ts +22 -0
  446. package/dist/types/traffic.d.ts.map +1 -0
  447. package/dist/types/traffic.js +2 -0
  448. package/dist/types/traffic.js.map +1 -0
  449. package/dist/types/transit.d.ts +46 -0
  450. package/dist/types/transit.d.ts.map +1 -0
  451. package/dist/types/transit.js +3 -0
  452. package/dist/types/transit.js.map +1 -0
  453. package/dist/types/ugc-aggregates.d.ts +14 -0
  454. package/dist/types/ugc-aggregates.d.ts.map +1 -0
  455. package/dist/types/ugc-aggregates.js +2 -0
  456. package/dist/types/ugc-aggregates.js.map +1 -0
  457. package/dist/utils/chunked-decoder.d.ts +9 -0
  458. package/dist/utils/chunked-decoder.d.ts.map +1 -0
  459. package/dist/utils/chunked-decoder.js +175 -0
  460. package/dist/utils/chunked-decoder.js.map +1 -0
  461. package/dist/utils/directions-metrics.d.ts +5 -0
  462. package/dist/utils/directions-metrics.d.ts.map +1 -0
  463. package/dist/utils/directions-metrics.js +62 -0
  464. package/dist/utils/directions-metrics.js.map +1 -0
  465. package/dist/utils/encoded-polyline.d.ts +9 -0
  466. package/dist/utils/encoded-polyline.d.ts.map +1 -0
  467. package/dist/utils/encoded-polyline.js +67 -0
  468. package/dist/utils/encoded-polyline.js.map +1 -0
  469. package/dist/utils/feature-id.d.ts +2 -0
  470. package/dist/utils/feature-id.d.ts.map +1 -0
  471. package/dist/utils/feature-id.js +11 -0
  472. package/dist/utils/feature-id.js.map +1 -0
  473. package/dist/utils/geo.d.ts +18 -0
  474. package/dist/utils/geo.d.ts.map +1 -0
  475. package/dist/utils/geo.js +40 -0
  476. package/dist/utils/geo.js.map +1 -0
  477. package/dist/utils/ids.d.ts +23 -0
  478. package/dist/utils/ids.d.ts.map +1 -0
  479. package/dist/utils/ids.js +81 -0
  480. package/dist/utils/ids.js.map +1 -0
  481. package/dist/utils/load-env.d.ts +7 -0
  482. package/dist/utils/load-env.d.ts.map +1 -0
  483. package/dist/utils/load-env.js +49 -0
  484. package/dist/utils/load-env.js.map +1 -0
  485. package/dist/utils/photo-url.d.ts +4 -0
  486. package/dist/utils/photo-url.d.ts.map +1 -0
  487. package/dist/utils/photo-url.js +35 -0
  488. package/dist/utils/photo-url.js.map +1 -0
  489. package/dist/utils/plus-code.d.ts +11 -0
  490. package/dist/utils/plus-code.d.ts.map +1 -0
  491. package/dist/utils/plus-code.js +83 -0
  492. package/dist/utils/plus-code.js.map +1 -0
  493. package/dist/utils/png.d.ts +25 -0
  494. package/dist/utils/png.d.ts.map +1 -0
  495. package/dist/utils/png.js +314 -0
  496. package/dist/utils/png.js.map +1 -0
  497. package/dist/utils/pooled.d.ts +6 -0
  498. package/dist/utils/pooled.d.ts.map +1 -0
  499. package/dist/utils/pooled.js +19 -0
  500. package/dist/utils/pooled.js.map +1 -0
  501. package/dist/utils/request-scheduler.d.ts +28 -0
  502. package/dist/utils/request-scheduler.d.ts.map +1 -0
  503. package/dist/utils/request-scheduler.js +58 -0
  504. package/dist/utils/request-scheduler.js.map +1 -0
  505. package/dist/utils/response-parser.d.ts +7 -0
  506. package/dist/utils/response-parser.d.ts.map +1 -0
  507. package/dist/utils/response-parser.js +50 -0
  508. package/dist/utils/response-parser.js.map +1 -0
  509. package/dist/utils/retry-backoff.d.ts +5 -0
  510. package/dist/utils/retry-backoff.d.ts.map +1 -0
  511. package/dist/utils/retry-backoff.js +23 -0
  512. package/dist/utils/retry-backoff.js.map +1 -0
  513. package/dist/utils/safe-get.d.ts +6 -0
  514. package/dist/utils/safe-get.d.ts.map +1 -0
  515. package/dist/utils/safe-get.js +29 -0
  516. package/dist/utils/safe-get.js.map +1 -0
  517. package/dist/utils/static-map-grid.d.ts +71 -0
  518. package/dist/utils/static-map-grid.d.ts.map +1 -0
  519. package/dist/utils/static-map-grid.js +103 -0
  520. package/dist/utils/static-map-grid.js.map +1 -0
  521. package/dist/utils/throttle-detection.d.ts +17 -0
  522. package/dist/utils/throttle-detection.d.ts.map +1 -0
  523. package/dist/utils/throttle-detection.js +71 -0
  524. package/dist/utils/throttle-detection.js.map +1 -0
  525. package/package.json +85 -0
@@ -0,0 +1,112 @@
1
+ import { safeGet } from '../utils/safe-get.js';
2
+ /** Promoted-pin ad payloads on `/maps/preview/lp` — not owner posts. */
3
+ const AD_URL_MARKERS = ['simgad', 'googlesyndication.com', '/aclk', 'googleads', 'doubleclick.net'];
4
+ function containsAdMarker(value) {
5
+ const lower = value.toLowerCase();
6
+ return AD_URL_MARKERS.some((marker) => lower.includes(marker));
7
+ }
8
+ function entryLooksLikeAd(entry) {
9
+ if (!Array.isArray(entry))
10
+ return false;
11
+ const stack = [entry];
12
+ while (stack.length > 0) {
13
+ const node = stack.pop();
14
+ if (typeof node === 'string' && containsAdMarker(node))
15
+ return true;
16
+ if (Array.isArray(node)) {
17
+ for (const child of node)
18
+ stack.push(child);
19
+ }
20
+ }
21
+ return false;
22
+ }
23
+ function parsePost(entry) {
24
+ if (!Array.isArray(entry))
25
+ return null;
26
+ if (entryLooksLikeAd(entry))
27
+ return null;
28
+ const postId = typeof entry[0] === 'string' ? entry[0] : undefined;
29
+ const textBlock = entry[1];
30
+ let title;
31
+ let text;
32
+ if (Array.isArray(textBlock)) {
33
+ title = typeof textBlock[0] === 'string' ? textBlock[0] : undefined;
34
+ text = typeof textBlock[1] === 'string' ? textBlock[1] : undefined;
35
+ if (!text && typeof textBlock[0] === 'string' && textBlock[0].length > 40) {
36
+ text = textBlock[0];
37
+ title = undefined;
38
+ }
39
+ }
40
+ else if (typeof textBlock === 'string') {
41
+ text = textBlock;
42
+ }
43
+ const date = typeof entry[2] === 'string' ? entry[2] : safeGet(entry, 2, 0);
44
+ const media = entry[3];
45
+ let imageUrl;
46
+ if (Array.isArray(media)) {
47
+ const raw = media.find((m) => typeof m === 'string' &&
48
+ m.includes('googleusercontent.com') &&
49
+ !containsAdMarker(m));
50
+ if (typeof raw === 'string') {
51
+ imageUrl = raw.startsWith('//') ? `https:${raw}` : raw;
52
+ }
53
+ }
54
+ const ctaBlock = entry[4];
55
+ let ctaUrl;
56
+ let ctaLabel;
57
+ if (Array.isArray(ctaBlock)) {
58
+ ctaLabel = typeof ctaBlock[0] === 'string' ? ctaBlock[0] : undefined;
59
+ const rawCta = typeof ctaBlock[1] === 'string' ? ctaBlock[1] : undefined;
60
+ if (rawCta && !containsAdMarker(rawCta))
61
+ ctaUrl = rawCta;
62
+ }
63
+ if (ctaUrl && containsAdMarker(ctaUrl))
64
+ return null;
65
+ if (imageUrl && containsAdMarker(imageUrl))
66
+ return null;
67
+ if (!text && !title && !imageUrl)
68
+ return null;
69
+ return { postId, title, text, date, imageUrl, ctaUrl, ctaLabel };
70
+ }
71
+ /** Response roots whose elements are post rows (arrays), not bare strings. */
72
+ function postListRoots(data) {
73
+ const roots = [];
74
+ if (!Array.isArray(data) || data.length === 0)
75
+ return roots;
76
+ if (Array.isArray(data[0]))
77
+ roots.push(data);
78
+ const nested = safeGet(data, 0);
79
+ if (Array.isArray(nested) && Array.isArray(nested[0]) && nested !== data) {
80
+ roots.push(nested);
81
+ }
82
+ return roots;
83
+ }
84
+ /**
85
+ * Parse `/maps/preview/localposts` response.
86
+ *
87
+ * The field layout below is INFERRED, never validated against a real payload:
88
+ * the endpoint answered HTTP 200 with an empty `[]` for all 118 businesses
89
+ * sampled across IN/US/EU/JP/AE with a warmed session. Ad rejection, by contrast,
90
+ * is based on real captured `/maps/preview/lp` promoted-pin rows.
91
+ */
92
+ export function extractLocalPosts(data) {
93
+ if (!Array.isArray(data) || data.length === 0)
94
+ return [];
95
+ const posts = [];
96
+ for (const root of postListRoots(data)) {
97
+ for (const entry of root) {
98
+ const post = parsePost(entry);
99
+ if (post)
100
+ posts.push(post);
101
+ }
102
+ }
103
+ const seen = new Set();
104
+ return posts.filter((p) => {
105
+ const key = p.postId ?? `${p.title ?? ''}:${p.text?.slice(0, 40) ?? ''}`;
106
+ if (seen.has(key))
107
+ return false;
108
+ seen.add(key);
109
+ return true;
110
+ });
111
+ }
112
+ //# sourceMappingURL=local-posts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-posts.js","sourceRoot":"","sources":["../../src/parsers/local-posts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ParsedMapsUrl } from '../types/links.js';
2
+ /**
3
+ * Parse any Google Maps URL into structured identifiers for downstream SDK calls.
4
+ *
5
+ * Pure and synchronous — short links return `kind: 'shortLink'`; use
6
+ * {@link LinksService.resolve} to expand them first.
7
+ */
8
+ export declare function parseMapsUrl(input: string): ParsedMapsUrl;
9
+ /** Whether the URL is a short link host that requires network expansion. */
10
+ export declare function isShortMapsLink(input: string): boolean;
11
+ /** Validate that a string is a well-formed hex feature id (for tests and callers). */
12
+ export declare function isValidHexFeatureId(value: string): boolean;
13
+ /** Derive ChIJ place id from hex when possible. */
14
+ export declare function hexToPlaceId(hexId: string): string | undefined;
15
+ //# sourceMappingURL=maps-url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maps-url.d.ts","sourceRoot":"","sources":["../../src/parsers/maps-url.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,aAAa,EAMd,MAAM,mBAAmB,CAAC;AAsB3B;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAwCzD;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOtD;AAmRD,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED,mDAAmD;AACnD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM9D"}
@@ -0,0 +1,326 @@
1
+ import { featureIdToLudocid, featureIdToPlaceId, parseFeatureId, placeIdToFeatureId, } from '../utils/ids.js';
2
+ const HEX_ID_RE = /0x[0-9a-f]+:0x[0-9a-f]+/i;
3
+ const PLACE_ID_RE = /^(ChIJ|GhIJ|EhIJ)[\w-]+$/;
4
+ const VIEWPORT_RE = /@(-?\d+(?:\.\d+)?),(-?\d+(?:\.\d+)?),(\d+(?:\.\d+)?)(?:z|m)/;
5
+ const FTID_RE = /!16s([^!]+)/;
6
+ const PLACE_COORDS_RE = /!3d(-?\d+(?:\.\d+)?)!4d(-?\d+(?:\.\d+)?)/;
7
+ const DIRECTIONS_MODE_RE = /!3e(\d)/;
8
+ const TRAVEL_MODE_BY_CODE = {
9
+ 0: 'driving',
10
+ 1: 'bicycling',
11
+ 2: 'walking',
12
+ 3: 'transit',
13
+ };
14
+ /**
15
+ * Parse any Google Maps URL into structured identifiers for downstream SDK calls.
16
+ *
17
+ * Pure and synchronous — short links return `kind: 'shortLink'`; use
18
+ * {@link LinksService.resolve} to expand them first.
19
+ */
20
+ export function parseMapsUrl(input) {
21
+ const url = normalizeInputUrl(input);
22
+ let parsed;
23
+ try {
24
+ parsed = new URL(url);
25
+ }
26
+ catch {
27
+ return unknownResult(url);
28
+ }
29
+ const host = parsed.hostname.replace(/^www\./, '');
30
+ const shortLink = parseShortLink(parsed, url);
31
+ if (shortLink)
32
+ return shortLink;
33
+ const cid = parseCid(parsed, url);
34
+ if (cid)
35
+ return cid;
36
+ if (!isGoogleMapsHost(host)) {
37
+ return unknownResult(url);
38
+ }
39
+ const pathname = decodeURIComponent(parsed.pathname);
40
+ const list = parseListPath(pathname, url);
41
+ if (list)
42
+ return list;
43
+ const directions = parseDirectionsPath(pathname, parsed, url);
44
+ if (directions)
45
+ return directions;
46
+ const search = parseSearchPath(pathname, url);
47
+ if (search)
48
+ return search;
49
+ const place = parsePlacePath(pathname, parsed, url);
50
+ if (place)
51
+ return place;
52
+ const viewport = parseViewportOnly(pathname, url);
53
+ if (viewport)
54
+ return viewport;
55
+ return unknownResult(url);
56
+ }
57
+ /** Whether the URL is a short link host that requires network expansion. */
58
+ export function isShortMapsLink(input) {
59
+ try {
60
+ const parsed = new URL(normalizeInputUrl(input));
61
+ return parseShortLink(parsed, input) != null;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ function normalizeInputUrl(input) {
68
+ const trimmed = input.trim();
69
+ if (!trimmed)
70
+ return trimmed;
71
+ if (/^https?:\/\//i.test(trimmed))
72
+ return trimmed;
73
+ if (trimmed.startsWith('maps.app.goo.gl/') || trimmed.startsWith('goo.gl/')) {
74
+ return `https://${trimmed}`;
75
+ }
76
+ if (trimmed.startsWith('google.com/') || trimmed.startsWith('maps.google.com/')) {
77
+ return `https://${trimmed}`;
78
+ }
79
+ return trimmed;
80
+ }
81
+ function unknownResult(url) {
82
+ return { kind: 'unknown', url };
83
+ }
84
+ function isGoogleMapsHost(host) {
85
+ return (host === 'google.com' ||
86
+ host.endsWith('.google.com') &&
87
+ (host.startsWith('maps.') || host.startsWith('www.') || host === 'google.com'));
88
+ }
89
+ function parseShortLink(parsed, url) {
90
+ const host = parsed.hostname.replace(/^www\./, '');
91
+ if (host === 'maps.app.goo.gl') {
92
+ const code = parsed.pathname.replace(/^\//, '').split('/')[0];
93
+ if (!code)
94
+ return null;
95
+ return { kind: 'shortLink', url, code, host: 'maps.app.goo.gl' };
96
+ }
97
+ if (host === 'goo.gl' && parsed.pathname.startsWith('/maps/')) {
98
+ const code = parsed.pathname.slice('/maps/'.length).split('/')[0];
99
+ if (!code)
100
+ return null;
101
+ return { kind: 'shortLink', url, code, host: 'goo.gl' };
102
+ }
103
+ return null;
104
+ }
105
+ function parseCid(parsed, url) {
106
+ const cid = parsed.searchParams.get('cid');
107
+ if (!cid || !/^\d+$/.test(cid))
108
+ return null;
109
+ const host = parsed.hostname.replace(/^www\./, '');
110
+ if (host === 'maps.google.com') {
111
+ return { kind: 'cid', url, cid };
112
+ }
113
+ if (host === 'google.com' && parsed.pathname.startsWith('/maps')) {
114
+ return { kind: 'cid', url, cid };
115
+ }
116
+ return null;
117
+ }
118
+ function parseListPath(pathname, url) {
119
+ const match = pathname.match(/\/maps\/placelists\/list\/([a-zA-Z0-9_-]+)/);
120
+ if (!match)
121
+ return null;
122
+ return { kind: 'list', url, listId: match[1] };
123
+ }
124
+ function parseDirectionsPath(pathname, parsed, url) {
125
+ const match = pathname.match(/^\/maps\/dir\/([^/]+)\/([^/]+)/);
126
+ if (!match)
127
+ return null;
128
+ const origin = decodePathSegment(match[1]);
129
+ const destination = decodePathSegment(match[2]);
130
+ const viewport = extractViewport(url);
131
+ const dataBlob = extractDataBlob(parsed.hash, url);
132
+ let mode;
133
+ const modeMatch = dataBlob.match(DIRECTIONS_MODE_RE);
134
+ if (modeMatch) {
135
+ const code = Number(modeMatch[1]);
136
+ mode = TRAVEL_MODE_BY_CODE[code];
137
+ }
138
+ return {
139
+ kind: 'directions',
140
+ url,
141
+ origin,
142
+ destination,
143
+ mode,
144
+ lat: viewport?.lat,
145
+ lng: viewport?.lng,
146
+ zoom: viewport?.zoom,
147
+ };
148
+ }
149
+ function parseSearchPath(pathname, url) {
150
+ const match = pathname.match(/^\/maps\/search\/([^/@]+)/);
151
+ if (!match)
152
+ return null;
153
+ const query = decodePathSegment(match[1]);
154
+ const viewport = extractViewport(url);
155
+ return {
156
+ kind: 'search',
157
+ url,
158
+ query,
159
+ lat: viewport?.lat,
160
+ lng: viewport?.lng,
161
+ zoom: viewport?.zoom,
162
+ };
163
+ }
164
+ function parsePlacePath(pathname, parsed, url) {
165
+ const match = pathname.match(/^\/maps\/place\/([^/@]+)/);
166
+ if (!match)
167
+ return null;
168
+ const name = decodePathSegment(match[1]);
169
+ const viewport = extractViewport(url);
170
+ const dataBlob = extractDataBlob(parsed.hash, url);
171
+ const ids = extractPlaceIds(dataBlob, url);
172
+ const placeCoords = extractPlaceCoords(dataBlob);
173
+ const ftid = extractFtid(dataBlob);
174
+ const result = {
175
+ kind: 'place',
176
+ url,
177
+ name: name.length > 0 ? name : undefined,
178
+ lat: placeCoords?.lat ?? viewport?.lat,
179
+ lng: placeCoords?.lng ?? viewport?.lng,
180
+ zoom: viewport?.zoom,
181
+ ...ids,
182
+ featureId: ftid ?? ids.featureId,
183
+ };
184
+ if (result.hexId) {
185
+ if (!result.placeId) {
186
+ result.placeId = hexToPlaceId(result.hexId);
187
+ }
188
+ if (!result.cid) {
189
+ try {
190
+ result.cid = featureIdToLudocid(result.hexId);
191
+ }
192
+ catch {
193
+ // hex id malformed — skip cid derivation
194
+ }
195
+ }
196
+ }
197
+ return result;
198
+ }
199
+ function parseViewportOnly(pathname, url) {
200
+ if (!pathname.startsWith('/maps/@') && !pathname.match(/^\/maps\/@-?\d/)) {
201
+ const atOnly = url.match(/\/maps\/@(-?\d+(?:\.\d+)?),(-?\d+(?:\.\d+)?),(\d+(?:\.\d+)?)(?:z|m)/);
202
+ if (!atOnly)
203
+ return null;
204
+ return {
205
+ kind: 'viewport',
206
+ url,
207
+ lat: Number(atOnly[1]),
208
+ lng: Number(atOnly[2]),
209
+ zoom: Number(atOnly[3]),
210
+ };
211
+ }
212
+ const viewport = extractViewport(url);
213
+ if (!viewport)
214
+ return null;
215
+ const beforeAt = pathname.split('/@')[0] ?? '';
216
+ if (beforeAt !== '/maps' && beforeAt !== '/maps/') {
217
+ return null;
218
+ }
219
+ return {
220
+ kind: 'viewport',
221
+ url,
222
+ lat: viewport.lat,
223
+ lng: viewport.lng,
224
+ zoom: viewport.zoom,
225
+ };
226
+ }
227
+ function decodePathSegment(segment) {
228
+ return decodeURIComponent(segment.replace(/\+/g, ' '));
229
+ }
230
+ function extractViewport(url) {
231
+ const match = url.match(VIEWPORT_RE);
232
+ if (!match)
233
+ return null;
234
+ return {
235
+ lat: Number(match[1]),
236
+ lng: Number(match[2]),
237
+ zoom: Number(match[3]),
238
+ };
239
+ }
240
+ function extractDataBlob(hash, url) {
241
+ const fromHash = hash.replace(/^#/, '');
242
+ if (fromHash.includes('data=')) {
243
+ const dataIdx = fromHash.indexOf('data=');
244
+ return fromHash.slice(dataIdx);
245
+ }
246
+ const dataMatch = url.match(/data=([^&?#]+)/);
247
+ return dataMatch ? `data=${dataMatch[1]}` : url;
248
+ }
249
+ function extractPlaceIds(dataBlob, url) {
250
+ const result = {};
251
+ const hexMatches = [
252
+ ...dataBlob.matchAll(/!1s(0x[0-9a-f]+:0x[0-9a-f]+)/gi),
253
+ ...url.matchAll(/!1s(0x[0-9a-f]+:0x[0-9a-f]+)/gi),
254
+ ];
255
+ for (const m of hexMatches) {
256
+ result.hexId = m[1];
257
+ break;
258
+ }
259
+ if (!result.hexId) {
260
+ const looseHex = dataBlob.match(HEX_ID_RE) ?? url.match(HEX_ID_RE);
261
+ if (looseHex)
262
+ result.hexId = looseHex[0];
263
+ }
264
+ const placeIdMatches = [
265
+ ...dataBlob.matchAll(/!1s((?:ChIJ|GhIJ|EhIJ)[^!&]+)/g),
266
+ ...url.matchAll(/!1s((?:ChIJ|GhIJ|EhIJ)[^!&]+)/g),
267
+ ];
268
+ for (const m of placeIdMatches) {
269
+ const candidate = decodeURIComponent(m[1]);
270
+ if (PLACE_ID_RE.test(candidate)) {
271
+ result.placeId = candidate;
272
+ if (!result.hexId) {
273
+ try {
274
+ const hexFromPlace = placeIdToFeatureId(candidate);
275
+ if (hexFromPlace !== '0x0:0x0') {
276
+ result.hexId = hexFromPlace;
277
+ }
278
+ }
279
+ catch {
280
+ // not a decodable place id for our protobuf subset
281
+ }
282
+ }
283
+ break;
284
+ }
285
+ }
286
+ return result;
287
+ }
288
+ function extractPlaceCoords(dataBlob) {
289
+ const match = dataBlob.match(PLACE_COORDS_RE);
290
+ if (!match)
291
+ return null;
292
+ return { lat: Number(match[1]), lng: Number(match[2]) };
293
+ }
294
+ function extractFtid(dataBlob) {
295
+ const match = dataBlob.match(FTID_RE);
296
+ if (!match)
297
+ return undefined;
298
+ const decoded = decodeURIComponent(match[1]);
299
+ if (decoded.startsWith('/g/') || decoded.startsWith('/m/')) {
300
+ return decoded;
301
+ }
302
+ if (decoded.includes('%2Fg%2F') || decoded.includes('%2Fm%2F')) {
303
+ return decodeURIComponent(decoded);
304
+ }
305
+ return decoded.startsWith('/') ? decoded : `/${decoded}`;
306
+ }
307
+ /** Validate that a string is a well-formed hex feature id (for tests and callers). */
308
+ export function isValidHexFeatureId(value) {
309
+ try {
310
+ parseFeatureId(value);
311
+ return true;
312
+ }
313
+ catch {
314
+ return false;
315
+ }
316
+ }
317
+ /** Derive ChIJ place id from hex when possible. */
318
+ export function hexToPlaceId(hexId) {
319
+ try {
320
+ return featureIdToPlaceId(hexId);
321
+ }
322
+ catch {
323
+ return undefined;
324
+ }
325
+ }
326
+ //# sourceMappingURL=maps-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maps-url.js","sourceRoot":"","sources":["../../src/parsers/maps-url.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,SAAS,GAAG,0BAA0B,CAAC;AAC7C,MAAM,WAAW,GAAG,0BAA0B,CAAC;AAC/C,MAAM,WAAW,GAAG,6DAA6D,CAAC;AAClF,MAAM,OAAO,GAAG,aAAa,CAAC;AAC9B,MAAM,eAAe,GAAG,0CAA0C,CAAC;AACnE,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAErC,MAAM,mBAAmB,GAA+B;IACtD,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,SAAS;CACb,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAErC,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEnD,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAEhC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IAEpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAErD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9D,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACpD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAClD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,OAAO,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAC7B,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAClD,IAAI,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5E,OAAO,WAAW,OAAO,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAChF,OAAO,WAAW,OAAO,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,CACL,IAAI,KAAK,YAAY;QACrB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC1B,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,YAAY,CAAC,CACjF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAW,EAAE,GAAW;IAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEnD,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;IACnE,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC1D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,MAAW,EAAE,GAAW;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnD,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,GAAW;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC3E,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAgB,EAChB,MAAW,EACX,GAAW;IAEX,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEnD,IAAI,IAA4B,CAAC;IACjC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,GAAG;QACH,MAAM;QACN,WAAW;QACX,IAAI;QACJ,GAAG,EAAE,QAAQ,EAAE,GAAG;QAClB,GAAG,EAAE,QAAQ,EAAE,GAAG;QAClB,IAAI,EAAE,QAAQ,EAAE,IAAI;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE,GAAW;IACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAEtC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,GAAG;QACH,KAAK;QACL,GAAG,EAAE,QAAQ,EAAE,GAAG;QAClB,GAAG,EAAE,QAAQ,EAAE,GAAG;QAClB,IAAI,EAAE,QAAQ,EAAE,IAAI;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,QAAgB,EAChB,MAAW,EACX,GAAW;IAEX,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAmB;QAC7B,IAAI,EAAE,OAAO;QACb,GAAG;QACH,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACxC,GAAG,EAAE,WAAW,EAAE,GAAG,IAAI,QAAQ,EAAE,GAAG;QACtC,GAAG,EAAE,WAAW,EAAE,GAAG,IAAI,QAAQ,EAAE,GAAG;QACtC,IAAI,EAAE,QAAQ,EAAE,IAAI;QACpB,GAAG,GAAG;QACN,SAAS,EAAE,IAAI,IAAI,GAAG,CAAC,SAAS;KACjC,CAAC;IAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,yCAAyC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,GAAW;IACtD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAChG,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,GAAG;YACH,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACtB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACxB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,GAAG;QACH,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,IAAI,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,OAAO,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,GAAW;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC9C,OAAO,SAAS,CAAC,CAAC,CAAC,QAAQ,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CACtB,QAAgB,EAChB,GAAW;IAEX,MAAM,MAAM,GAA4D,EAAE,CAAC;IAE3E,MAAM,UAAU,GAAG;QACjB,GAAG,QAAQ,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACtD,GAAG,GAAG,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAClD,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM;IACR,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnE,IAAI,QAAQ;YAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;IAC5C,CAAC;IAED,MAAM,cAAc,GAAG;QACrB,GAAG,QAAQ,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACtD,GAAG,GAAG,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAClD,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QAC5C,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;oBACnD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;wBAC/B,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,mDAAmD;gBACrD,CAAC;YACH,CAAC;YACD,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3D,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/D,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AAC3D,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,CAAC;QACH,cAAc,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { PanoramaMetadata, PanoramaRef } from '../types/panorama.js';
2
+ /**
3
+ * Detect the ~74-byte photometa stub Google returns for invalid/expired pano ids.
4
+ *
5
+ * The stub echoes the id at `$[1][0][1][1]` but leaves indices 2–6 null — unlike a
6
+ * rich response which populates tile, address, attribution and navigation blocks.
7
+ */
8
+ export declare function isPanoramaMetadataStub(data: unknown): boolean;
9
+ /**
10
+ * Parse panoramas out of a `/maps/photometa/ac/v1` coverage tile.
11
+ *
12
+ * Coverage tiles are the more dependable lat/lng entry point: listentityphotos is abuse
13
+ * throttled and mixes user photos into its results, whereas a tile returns only official
14
+ * Street View panoramas with coordinates. Entries live at `$[1][1][i]`, with the id under
15
+ * `[0][0][1]` and the position under `[0][2][0]`.
16
+ */
17
+ export declare function extractCoveragePanoramas(data: unknown): PanoramaRef[];
18
+ /** Parse `$[0][i]` entries from listentityphotos. */
19
+ export declare function extractNearbyPanoramas(data: unknown): PanoramaRef[];
20
+ /** Parse full photometa payload; returns null for stub / not-found responses. */
21
+ export declare function extractPanoramaMetadata(data: unknown, options?: {
22
+ raw?: boolean;
23
+ }): PanoramaMetadata | null;
24
+ //# sourceMappingURL=panorama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panorama.d.ts","sourceRoot":"","sources":["../../src/parsers/panorama.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,gBAAgB,EAChB,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAkB9B;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAS7D;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,EAAE,CAsBrE;AAED,qDAAqD;AACrD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,EAAE,CAuBnE;AA8CD,iFAAiF;AACjF,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,gBAAgB,GAAG,IAAI,CA6CzB"}
@@ -0,0 +1,161 @@
1
+ import { buildThumbnailUrl } from '../rpc/panorama-pb.js';
2
+ import { safeGet } from '../utils/safe-get.js';
3
+ function asNumber(value) {
4
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
5
+ }
6
+ function asString(value) {
7
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
8
+ }
9
+ function formatCaptureDate(year, month) {
10
+ if (typeof year !== 'number' || typeof month !== 'number')
11
+ return undefined;
12
+ const mm = String(month).padStart(2, '0');
13
+ return `${year}-${mm}`;
14
+ }
15
+ /**
16
+ * Detect the ~74-byte photometa stub Google returns for invalid/expired pano ids.
17
+ *
18
+ * The stub echoes the id at `$[1][0][1][1]` but leaves indices 2–6 null — unlike a
19
+ * rich response which populates tile, address, attribution and navigation blocks.
20
+ */
21
+ export function isPanoramaMetadataStub(data) {
22
+ const block = safeGet(data, 1, 0);
23
+ if (!Array.isArray(block))
24
+ return true;
25
+ for (const idx of [2, 3, 4, 5, 6]) {
26
+ if (block[idx] != null)
27
+ return false;
28
+ }
29
+ return asString(safeGet(block, 1, 1)) != null;
30
+ }
31
+ /**
32
+ * Parse panoramas out of a `/maps/photometa/ac/v1` coverage tile.
33
+ *
34
+ * Coverage tiles are the more dependable lat/lng entry point: listentityphotos is abuse
35
+ * throttled and mixes user photos into its results, whereas a tile returns only official
36
+ * Street View panoramas with coordinates. Entries live at `$[1][1][i]`, with the id under
37
+ * `[0][0][1]` and the position under `[0][2][0]`.
38
+ */
39
+ export function extractCoveragePanoramas(data) {
40
+ const tiles = safeGet(data, 1, 1);
41
+ if (!Array.isArray(tiles))
42
+ return [];
43
+ const results = [];
44
+ for (const entry of tiles) {
45
+ if (!Array.isArray(entry))
46
+ continue;
47
+ const panoId = asString(safeGet(entry, 0, 0, 1));
48
+ if (!panoId)
49
+ continue;
50
+ results.push({
51
+ panoId,
52
+ lat: asNumber(safeGet(entry, 0, 2, 0, 2)),
53
+ lng: asNumber(safeGet(entry, 0, 2, 0, 3)),
54
+ heading: asNumber(safeGet(entry, 0, 2, 2, 0)),
55
+ thumbnailUrl: buildThumbnailUrl({ panoId }),
56
+ });
57
+ }
58
+ return results;
59
+ }
60
+ /** Parse `$[0][i]` entries from listentityphotos. */
61
+ export function extractNearbyPanoramas(data) {
62
+ const list = safeGet(data, 0);
63
+ if (!Array.isArray(list))
64
+ return [];
65
+ const results = [];
66
+ for (const item of list) {
67
+ if (!Array.isArray(item))
68
+ continue;
69
+ const panoId = asString(safeGet(item, 0));
70
+ if (!panoId)
71
+ continue;
72
+ results.push({
73
+ panoId,
74
+ thumbnailUrl: asString(safeGet(item, 6, 0)),
75
+ lng: asNumber(safeGet(item, 8, 0, 1)),
76
+ lat: asNumber(safeGet(item, 8, 0, 2)),
77
+ heading: asNumber(safeGet(item, 8, 1, 0)),
78
+ pitch: asNumber(safeGet(item, 8, 1, 1)),
79
+ });
80
+ }
81
+ return results;
82
+ }
83
+ function parsePanoramaLink(linkNode) {
84
+ const panoId = asString(safeGet(linkNode, 0, 1));
85
+ if (!panoId)
86
+ return undefined;
87
+ return {
88
+ panoId,
89
+ lat: asNumber(safeGet(linkNode, 2, 0, 2)),
90
+ lng: asNumber(safeGet(linkNode, 2, 0, 3)),
91
+ heading: asNumber(safeGet(linkNode, 2, 1, 0)),
92
+ };
93
+ }
94
+ function parseHistoricalCaptures(data) {
95
+ const list = safeGet(data, 1, 0, 5, 0, 8);
96
+ if (!Array.isArray(list))
97
+ return [];
98
+ const captures = [];
99
+ for (const entry of list) {
100
+ const year = asNumber(safeGet(entry, 1, 0));
101
+ const month = asNumber(safeGet(entry, 1, 1));
102
+ if (year == null || month == null)
103
+ continue;
104
+ captures.push({ year, month });
105
+ }
106
+ return captures;
107
+ }
108
+ function parseTileSizes(data) {
109
+ const zoomLevels = safeGet(data, 1, 0, 2, 3, 0);
110
+ if (!Array.isArray(zoomLevels))
111
+ return undefined;
112
+ const sizes = [];
113
+ for (const level of zoomLevels) {
114
+ const width = asNumber(safeGet(level, 0, 0));
115
+ const height = asNumber(safeGet(level, 0, 1));
116
+ if (width == null || height == null)
117
+ continue;
118
+ sizes.push([width, height]);
119
+ }
120
+ return sizes.length > 0 ? sizes : undefined;
121
+ }
122
+ /** Parse full photometa payload; returns null for stub / not-found responses. */
123
+ export function extractPanoramaMetadata(data, options) {
124
+ if (isPanoramaMetadataStub(data))
125
+ return null;
126
+ const panoId = asString(safeGet(data, 1, 0, 1, 1));
127
+ if (!panoId)
128
+ return null;
129
+ const maxWidth = asNumber(safeGet(data, 1, 0, 2, 2, 0));
130
+ const maxHeight = asNumber(safeGet(data, 1, 0, 2, 2, 1));
131
+ const faceWidth = asNumber(safeGet(data, 1, 0, 2, 3, 1, 0));
132
+ const faceHeight = asNumber(safeGet(data, 1, 0, 2, 3, 1, 1));
133
+ const linksList = safeGet(data, 1, 0, 5, 0, 3, 0);
134
+ const links = [];
135
+ if (Array.isArray(linksList)) {
136
+ for (let i = 1; i < linksList.length; i++) {
137
+ const link = parsePanoramaLink(linksList[i]);
138
+ if (link)
139
+ links.push(link);
140
+ }
141
+ }
142
+ const metadata = {
143
+ panoId,
144
+ lat: asNumber(safeGet(data, 1, 0, 5, 0, 1, 0, 2)),
145
+ lng: asNumber(safeGet(data, 1, 0, 5, 0, 1, 0, 3)),
146
+ captureDate: formatCaptureDate(safeGet(data, 1, 0, 6, 7, 0), safeGet(data, 1, 0, 6, 7, 1)),
147
+ copyright: asString(safeGet(data, 1, 0, 4, 0, 0, 0, 0)),
148
+ attribution: asString(safeGet(data, 1, 0, 4, 1, 0, 0, 0)),
149
+ address: asString(safeGet(data, 1, 0, 3, 2, 0, 0)),
150
+ tileSizes: parseTileSizes(data),
151
+ maxTileDimensions: maxWidth != null && maxHeight != null ? [maxWidth, maxHeight] : undefined,
152
+ tileFaceSize: faceWidth != null && faceHeight != null ? [faceWidth, faceHeight] : undefined,
153
+ links,
154
+ historicalCaptures: parseHistoricalCaptures(data),
155
+ };
156
+ if (options?.raw) {
157
+ metadata.raw = data;
158
+ }
159
+ return metadata;
160
+ }
161
+ //# sourceMappingURL=panorama.js.map