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.
- package/LICENSE +21 -0
- package/README.md +249 -0
- package/dist/auth/auth-status.d.ts +30 -0
- package/dist/auth/auth-status.d.ts.map +1 -0
- package/dist/auth/auth-status.js +169 -0
- package/dist/auth/auth-status.js.map +1 -0
- package/dist/auth/google-auth.d.ts +9 -0
- package/dist/auth/google-auth.d.ts.map +1 -0
- package/dist/auth/google-auth.js +40 -0
- package/dist/auth/google-auth.js.map +1 -0
- package/dist/auth/maps-tokens.d.ts +6 -0
- package/dist/auth/maps-tokens.d.ts.map +1 -0
- package/dist/auth/maps-tokens.js +18 -0
- package/dist/auth/maps-tokens.js.map +1 -0
- package/dist/auth/session.d.ts +28 -0
- package/dist/auth/session.d.ts.map +1 -0
- package/dist/auth/session.js +104 -0
- package/dist/auth/session.js.map +1 -0
- package/dist/client/gmaps-client.d.ts +92 -0
- package/dist/client/gmaps-client.d.ts.map +1 -0
- package/dist/client/gmaps-client.js +254 -0
- package/dist/client/gmaps-client.js.map +1 -0
- package/dist/client/http-client.d.ts +91 -0
- package/dist/client/http-client.d.ts.map +1 -0
- package/dist/client/http-client.js +393 -0
- package/dist/client/http-client.js.map +1 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +140 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +97 -0
- package/dist/internal.js.map +1 -0
- package/dist/known-surfaces.d.ts +280 -0
- package/dist/known-surfaces.d.ts.map +1 -0
- package/dist/known-surfaces.js +276 -0
- package/dist/known-surfaces.js.map +1 -0
- package/dist/parsers/batch-url.d.ts +13 -0
- package/dist/parsers/batch-url.d.ts.map +1 -0
- package/dist/parsers/batch-url.js +42 -0
- package/dist/parsers/batch-url.js.map +1 -0
- package/dist/parsers/boq-reviews.d.ts +8 -0
- package/dist/parsers/boq-reviews.d.ts.map +1 -0
- package/dist/parsers/boq-reviews.js +254 -0
- package/dist/parsers/boq-reviews.js.map +1 -0
- package/dist/parsers/categories.d.ts +14 -0
- package/dist/parsers/categories.d.ts.map +1 -0
- package/dist/parsers/categories.js +128 -0
- package/dist/parsers/categories.js.map +1 -0
- package/dist/parsers/directions.d.ts +6 -0
- package/dist/parsers/directions.d.ts.map +1 -0
- package/dist/parsers/directions.js +388 -0
- package/dist/parsers/directions.js.map +1 -0
- package/dist/parsers/elevation-directions.d.ts +18 -0
- package/dist/parsers/elevation-directions.d.ts.map +1 -0
- package/dist/parsers/elevation-directions.js +102 -0
- package/dist/parsers/elevation-directions.js.map +1 -0
- package/dist/parsers/geocode.d.ts +11 -0
- package/dist/parsers/geocode.d.ts.map +1 -0
- package/dist/parsers/geocode.js +104 -0
- package/dist/parsers/geocode.js.map +1 -0
- package/dist/parsers/knowledge.d.ts +13 -0
- package/dist/parsers/knowledge.d.ts.map +1 -0
- package/dist/parsers/knowledge.js +93 -0
- package/dist/parsers/knowledge.js.map +1 -0
- package/dist/parsers/lists.d.ts +23 -0
- package/dist/parsers/lists.d.ts.map +1 -0
- package/dist/parsers/lists.js +219 -0
- package/dist/parsers/lists.js.map +1 -0
- package/dist/parsers/local-posts.d.ts +12 -0
- package/dist/parsers/local-posts.d.ts.map +1 -0
- package/dist/parsers/local-posts.js +112 -0
- package/dist/parsers/local-posts.js.map +1 -0
- package/dist/parsers/maps-url.d.ts +15 -0
- package/dist/parsers/maps-url.d.ts.map +1 -0
- package/dist/parsers/maps-url.js +326 -0
- package/dist/parsers/maps-url.js.map +1 -0
- package/dist/parsers/panorama.d.ts +24 -0
- package/dist/parsers/panorama.d.ts.map +1 -0
- package/dist/parsers/panorama.js +161 -0
- package/dist/parsers/panorama.js.map +1 -0
- package/dist/parsers/passiveassist.d.ts +10 -0
- package/dist/parsers/passiveassist.d.ts.map +1 -0
- package/dist/parsers/passiveassist.js +61 -0
- package/dist/parsers/passiveassist.js.map +1 -0
- package/dist/parsers/photos.d.ts +21 -0
- package/dist/parsers/photos.d.ts.map +1 -0
- package/dist/parsers/photos.js +287 -0
- package/dist/parsers/photos.js.map +1 -0
- package/dist/parsers/place-attributes.d.ts +25 -0
- package/dist/parsers/place-attributes.d.ts.map +1 -0
- package/dist/parsers/place-attributes.js +266 -0
- package/dist/parsers/place-attributes.js.map +1 -0
- package/dist/parsers/place.d.ts +9 -0
- package/dist/parsers/place.d.ts.map +1 -0
- package/dist/parsers/place.js +291 -0
- package/dist/parsers/place.js.map +1 -0
- package/dist/parsers/reveal.d.ts +5 -0
- package/dist/parsers/reveal.d.ts.map +1 -0
- package/dist/parsers/reveal.js +99 -0
- package/dist/parsers/reveal.js.map +1 -0
- package/dist/parsers/review-aggregates.d.ts +7 -0
- package/dist/parsers/review-aggregates.d.ts.map +1 -0
- package/dist/parsers/review-aggregates.js +18 -0
- package/dist/parsers/review-aggregates.js.map +1 -0
- package/dist/parsers/review-client-filters.d.ts +8 -0
- package/dist/parsers/review-client-filters.d.ts.map +1 -0
- package/dist/parsers/review-client-filters.js +28 -0
- package/dist/parsers/review-client-filters.js.map +1 -0
- package/dist/parsers/reviews.d.ts +8 -0
- package/dist/parsers/reviews.d.ts.map +1 -0
- package/dist/parsers/reviews.js +55 -0
- package/dist/parsers/reviews.js.map +1 -0
- package/dist/parsers/search-client-filters.d.ts +7 -0
- package/dist/parsers/search-client-filters.d.ts.map +1 -0
- package/dist/parsers/search-client-filters.js +44 -0
- package/dist/parsers/search-client-filters.js.map +1 -0
- package/dist/parsers/search-pagination.d.ts +12 -0
- package/dist/parsers/search-pagination.d.ts.map +1 -0
- package/dist/parsers/search-pagination.js +34 -0
- package/dist/parsers/search-pagination.js.map +1 -0
- package/dist/parsers/search.d.ts +5 -0
- package/dist/parsers/search.d.ts.map +1 -0
- package/dist/parsers/search.js +187 -0
- package/dist/parsers/search.js.map +1 -0
- package/dist/parsers/shared.d.ts +24 -0
- package/dist/parsers/shared.d.ts.map +1 -0
- package/dist/parsers/shared.js +147 -0
- package/dist/parsers/shared.js.map +1 -0
- package/dist/parsers/suggest.d.ts +10 -0
- package/dist/parsers/suggest.d.ts.map +1 -0
- package/dist/parsers/suggest.js +153 -0
- package/dist/parsers/suggest.js.map +1 -0
- package/dist/parsers/tiles.d.ts +22 -0
- package/dist/parsers/tiles.d.ts.map +1 -0
- package/dist/parsers/tiles.js +70 -0
- package/dist/parsers/tiles.js.map +1 -0
- package/dist/parsers/timezone-geocode.d.ts +20 -0
- package/dist/parsers/timezone-geocode.d.ts.map +1 -0
- package/dist/parsers/timezone-geocode.js +96 -0
- package/dist/parsers/timezone-geocode.js.map +1 -0
- package/dist/parsers/traffic.d.ts +10 -0
- package/dist/parsers/traffic.d.ts.map +1 -0
- package/dist/parsers/traffic.js +38 -0
- package/dist/parsers/traffic.js.map +1 -0
- package/dist/parsers/transit.d.ts +12 -0
- package/dist/parsers/transit.d.ts.map +1 -0
- package/dist/parsers/transit.js +77 -0
- package/dist/parsers/transit.js.map +1 -0
- package/dist/parsers/ugc-aggregates.d.ts +9 -0
- package/dist/parsers/ugc-aggregates.d.ts.map +1 -0
- package/dist/parsers/ugc-aggregates.js +23 -0
- package/dist/parsers/ugc-aggregates.js.map +1 -0
- package/dist/rpc/app-options.d.ts +25 -0
- package/dist/rpc/app-options.d.ts.map +1 -0
- package/dist/rpc/app-options.js +147 -0
- package/dist/rpc/app-options.js.map +1 -0
- package/dist/rpc/batch-execute.d.ts +30 -0
- package/dist/rpc/batch-execute.d.ts.map +1 -0
- package/dist/rpc/batch-execute.js +217 -0
- package/dist/rpc/batch-execute.js.map +1 -0
- package/dist/rpc/batch-request-builders.d.ts +65 -0
- package/dist/rpc/batch-request-builders.d.ts.map +1 -0
- package/dist/rpc/batch-request-builders.js +174 -0
- package/dist/rpc/batch-request-builders.js.map +1 -0
- package/dist/rpc/batch-rpc.d.ts +34 -0
- package/dist/rpc/batch-rpc.d.ts.map +1 -0
- package/dist/rpc/batch-rpc.js +70 -0
- package/dist/rpc/batch-rpc.js.map +1 -0
- package/dist/rpc/batch-services.d.ts +38 -0
- package/dist/rpc/batch-services.d.ts.map +1 -0
- package/dist/rpc/batch-services.js +69 -0
- package/dist/rpc/batch-services.js.map +1 -0
- package/dist/rpc/batchexecute-args.d.ts +30 -0
- package/dist/rpc/batchexecute-args.d.ts.map +1 -0
- package/dist/rpc/batchexecute-args.js +35 -0
- package/dist/rpc/batchexecute-args.js.map +1 -0
- package/dist/rpc/boq-reviews.d.ts +16 -0
- package/dist/rpc/boq-reviews.d.ts.map +1 -0
- package/dist/rpc/boq-reviews.js +45 -0
- package/dist/rpc/boq-reviews.js.map +1 -0
- package/dist/rpc/descriptor-registry.d.ts +61 -0
- package/dist/rpc/descriptor-registry.d.ts.map +1 -0
- package/dist/rpc/descriptor-registry.js +47 -0
- package/dist/rpc/descriptor-registry.js.map +1 -0
- package/dist/rpc/feature-rpc.d.ts +27 -0
- package/dist/rpc/feature-rpc.d.ts.map +1 -0
- package/dist/rpc/feature-rpc.js +44 -0
- package/dist/rpc/feature-rpc.js.map +1 -0
- package/dist/rpc/lists-pb.d.ts +20 -0
- package/dist/rpc/lists-pb.d.ts.map +1 -0
- package/dist/rpc/lists-pb.js +20 -0
- package/dist/rpc/lists-pb.js.map +1 -0
- package/dist/rpc/maps-endpoint-registry.json +185 -0
- package/dist/rpc/maps-runtime.d.ts +42 -0
- package/dist/rpc/maps-runtime.d.ts.map +1 -0
- package/dist/rpc/maps-runtime.js +140 -0
- package/dist/rpc/maps-runtime.js.map +1 -0
- package/dist/rpc/maps-url-builders.d.ts +35 -0
- package/dist/rpc/maps-url-builders.d.ts.map +1 -0
- package/dist/rpc/maps-url-builders.js +266 -0
- package/dist/rpc/maps-url-builders.js.map +1 -0
- package/dist/rpc/nxa.d.ts +13 -0
- package/dist/rpc/nxa.d.ts.map +1 -0
- package/dist/rpc/nxa.js +44 -0
- package/dist/rpc/nxa.js.map +1 -0
- package/dist/rpc/panorama-pb.d.ts +60 -0
- package/dist/rpc/panorama-pb.d.ts.map +1 -0
- package/dist/rpc/panorama-pb.js +71 -0
- package/dist/rpc/panorama-pb.js.map +1 -0
- package/dist/rpc/passiveassist-pb.d.ts +21 -0
- package/dist/rpc/passiveassist-pb.d.ts.map +1 -0
- package/dist/rpc/passiveassist-pb.js +24 -0
- package/dist/rpc/passiveassist-pb.js.map +1 -0
- package/dist/rpc/pb-builders.d.ts +136 -0
- package/dist/rpc/pb-builders.d.ts.map +1 -0
- package/dist/rpc/pb-builders.js +290 -0
- package/dist/rpc/pb-builders.js.map +1 -0
- package/dist/rpc/photo-category-tokens.d.ts +29 -0
- package/dist/rpc/photo-category-tokens.d.ts.map +1 -0
- package/dist/rpc/photo-category-tokens.js +97 -0
- package/dist/rpc/photo-category-tokens.js.map +1 -0
- package/dist/rpc/photos-pb.d.ts +29 -0
- package/dist/rpc/photos-pb.d.ts.map +1 -0
- package/dist/rpc/photos-pb.js +73 -0
- package/dist/rpc/photos-pb.js.map +1 -0
- package/dist/rpc/reveal-pb.d.ts +26 -0
- package/dist/rpc/reveal-pb.d.ts.map +1 -0
- package/dist/rpc/reveal-pb.js +32 -0
- package/dist/rpc/reveal-pb.js.map +1 -0
- package/dist/rpc/rpc-client.d.ts +50 -0
- package/dist/rpc/rpc-client.d.ts.map +1 -0
- package/dist/rpc/rpc-client.js +136 -0
- package/dist/rpc/rpc-client.js.map +1 -0
- package/dist/rpc/rpc-descriptor-registry.json +776 -0
- package/dist/rpc/rpc-methods.d.ts +75 -0
- package/dist/rpc/rpc-methods.d.ts.map +1 -0
- package/dist/rpc/rpc-methods.js +130 -0
- package/dist/rpc/rpc-methods.js.map +1 -0
- package/dist/rpc/search-filters.d.ts +43 -0
- package/dist/rpc/search-filters.d.ts.map +1 -0
- package/dist/rpc/search-filters.js +92 -0
- package/dist/rpc/search-filters.js.map +1 -0
- package/dist/rpc/suggest-pb.d.ts +34 -0
- package/dist/rpc/suggest-pb.d.ts.map +1 -0
- package/dist/rpc/suggest-pb.js +42 -0
- package/dist/rpc/suggest-pb.js.map +1 -0
- package/dist/rpc/tiles-pb.d.ts +45 -0
- package/dist/rpc/tiles-pb.d.ts.map +1 -0
- package/dist/rpc/tiles-pb.js +71 -0
- package/dist/rpc/tiles-pb.js.map +1 -0
- package/dist/rpc/xsrf-bootstrap.d.ts +24 -0
- package/dist/rpc/xsrf-bootstrap.d.ts.map +1 -0
- package/dist/rpc/xsrf-bootstrap.js +63 -0
- package/dist/rpc/xsrf-bootstrap.js.map +1 -0
- package/dist/server/api-server.d.ts +9 -0
- package/dist/server/api-server.d.ts.map +1 -0
- package/dist/server/api-server.js +293 -0
- package/dist/server/api-server.js.map +1 -0
- package/dist/services/ask-maps.d.ts +91 -0
- package/dist/services/ask-maps.d.ts.map +1 -0
- package/dist/services/ask-maps.js +221 -0
- package/dist/services/ask-maps.js.map +1 -0
- package/dist/services/batch-url.d.ts +18 -0
- package/dist/services/batch-url.d.ts.map +1 -0
- package/dist/services/batch-url.js +30 -0
- package/dist/services/batch-url.js.map +1 -0
- package/dist/services/categories.d.ts +21 -0
- package/dist/services/categories.d.ts.map +1 -0
- package/dist/services/categories.js +43 -0
- package/dist/services/categories.js.map +1 -0
- package/dist/services/directions.d.ts +26 -0
- package/dist/services/directions.d.ts.map +1 -0
- package/dist/services/directions.js +104 -0
- package/dist/services/directions.js.map +1 -0
- package/dist/services/distance-matrix.d.ts +17 -0
- package/dist/services/distance-matrix.d.ts.map +1 -0
- package/dist/services/distance-matrix.js +144 -0
- package/dist/services/distance-matrix.js.map +1 -0
- package/dist/services/elevation.d.ts +30 -0
- package/dist/services/elevation.d.ts.map +1 -0
- package/dist/services/elevation.js +149 -0
- package/dist/services/elevation.js.map +1 -0
- package/dist/services/geocode.d.ts +20 -0
- package/dist/services/geocode.d.ts.map +1 -0
- package/dist/services/geocode.js +63 -0
- package/dist/services/geocode.js.map +1 -0
- package/dist/services/knowledge.d.ts +25 -0
- package/dist/services/knowledge.d.ts.map +1 -0
- package/dist/services/knowledge.js +58 -0
- package/dist/services/knowledge.js.map +1 -0
- package/dist/services/links.d.ts +22 -0
- package/dist/services/links.d.ts.map +1 -0
- package/dist/services/links.js +145 -0
- package/dist/services/links.js.map +1 -0
- package/dist/services/lists.d.ts +20 -0
- package/dist/services/lists.d.ts.map +1 -0
- package/dist/services/lists.js +74 -0
- package/dist/services/lists.js.map +1 -0
- package/dist/services/local-posts.d.ts +14 -0
- package/dist/services/local-posts.d.ts.map +1 -0
- package/dist/services/local-posts.js +32 -0
- package/dist/services/local-posts.js.map +1 -0
- package/dist/services/panorama.d.ts +39 -0
- package/dist/services/panorama.d.ts.map +1 -0
- package/dist/services/panorama.js +175 -0
- package/dist/services/panorama.js.map +1 -0
- package/dist/services/passiveassist.d.ts +21 -0
- package/dist/services/passiveassist.d.ts.map +1 -0
- package/dist/services/passiveassist.js +70 -0
- package/dist/services/passiveassist.js.map +1 -0
- package/dist/services/photos.d.ts +46 -0
- package/dist/services/photos.d.ts.map +1 -0
- package/dist/services/photos.js +341 -0
- package/dist/services/photos.js.map +1 -0
- package/dist/services/places.d.ts +58 -0
- package/dist/services/places.d.ts.map +1 -0
- package/dist/services/places.js +240 -0
- package/dist/services/places.js.map +1 -0
- package/dist/services/reveal.d.ts +15 -0
- package/dist/services/reveal.d.ts.map +1 -0
- package/dist/services/reveal.js +41 -0
- package/dist/services/reveal.js.map +1 -0
- package/dist/services/reviews.d.ts +70 -0
- package/dist/services/reviews.d.ts.map +1 -0
- package/dist/services/reviews.js +245 -0
- package/dist/services/reviews.js.map +1 -0
- package/dist/services/search.d.ts +25 -0
- package/dist/services/search.d.ts.map +1 -0
- package/dist/services/search.js +130 -0
- package/dist/services/search.js.map +1 -0
- package/dist/services/static-map.d.ts +14 -0
- package/dist/services/static-map.d.ts.map +1 -0
- package/dist/services/static-map.js +182 -0
- package/dist/services/static-map.js.map +1 -0
- package/dist/services/suggest.d.ts +12 -0
- package/dist/services/suggest.d.ts.map +1 -0
- package/dist/services/suggest.js +36 -0
- package/dist/services/suggest.js.map +1 -0
- package/dist/services/tiles.d.ts +19 -0
- package/dist/services/tiles.d.ts.map +1 -0
- package/dist/services/tiles.js +77 -0
- package/dist/services/tiles.js.map +1 -0
- package/dist/services/timezone.d.ts +19 -0
- package/dist/services/timezone.d.ts.map +1 -0
- package/dist/services/timezone.js +91 -0
- package/dist/services/timezone.js.map +1 -0
- package/dist/services/traffic.d.ts +12 -0
- package/dist/services/traffic.d.ts.map +1 -0
- package/dist/services/traffic.js +40 -0
- package/dist/services/traffic.js.map +1 -0
- package/dist/services/transit.d.ts +22 -0
- package/dist/services/transit.d.ts.map +1 -0
- package/dist/services/transit.js +62 -0
- package/dist/services/transit.js.map +1 -0
- package/dist/services/ugc-aggregates.d.ts +17 -0
- package/dist/services/ugc-aggregates.d.ts.map +1 -0
- package/dist/services/ugc-aggregates.js +46 -0
- package/dist/services/ugc-aggregates.js.map +1 -0
- package/dist/types/batch-url.d.ts +21 -0
- package/dist/types/batch-url.d.ts.map +1 -0
- package/dist/types/batch-url.js +2 -0
- package/dist/types/batch-url.js.map +1 -0
- package/dist/types/categories.d.ts +43 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +2 -0
- package/dist/types/categories.js.map +1 -0
- package/dist/types/common.d.ts +538 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +77 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/directions.d.ts +88 -0
- package/dist/types/directions.d.ts.map +1 -0
- package/dist/types/directions.js +2 -0
- package/dist/types/directions.js.map +1 -0
- package/dist/types/distance-matrix.d.ts +40 -0
- package/dist/types/distance-matrix.d.ts.map +1 -0
- package/dist/types/distance-matrix.js +2 -0
- package/dist/types/distance-matrix.js.map +1 -0
- package/dist/types/elevation.d.ts +59 -0
- package/dist/types/elevation.d.ts.map +1 -0
- package/dist/types/elevation.js +2 -0
- package/dist/types/elevation.js.map +1 -0
- package/dist/types/geocode.d.ts +60 -0
- package/dist/types/geocode.d.ts.map +1 -0
- package/dist/types/geocode.js +2 -0
- package/dist/types/geocode.js.map +1 -0
- package/dist/types/links.d.ts +74 -0
- package/dist/types/links.d.ts.map +1 -0
- package/dist/types/links.js +2 -0
- package/dist/types/links.js.map +1 -0
- package/dist/types/lists.d.ts +41 -0
- package/dist/types/lists.d.ts.map +1 -0
- package/dist/types/lists.js +2 -0
- package/dist/types/lists.js.map +1 -0
- package/dist/types/maps-urls.d.ts +78 -0
- package/dist/types/maps-urls.d.ts.map +1 -0
- package/dist/types/maps-urls.js +2 -0
- package/dist/types/maps-urls.js.map +1 -0
- package/dist/types/panorama.d.ts +74 -0
- package/dist/types/panorama.d.ts.map +1 -0
- package/dist/types/panorama.js +2 -0
- package/dist/types/panorama.js.map +1 -0
- package/dist/types/passiveassist.d.ts +50 -0
- package/dist/types/passiveassist.d.ts.map +1 -0
- package/dist/types/passiveassist.js +2 -0
- package/dist/types/passiveassist.js.map +1 -0
- package/dist/types/photos.d.ts +101 -0
- package/dist/types/photos.d.ts.map +1 -0
- package/dist/types/photos.js +75 -0
- package/dist/types/photos.js.map +1 -0
- package/dist/types/protobuf.d.ts +33 -0
- package/dist/types/protobuf.d.ts.map +1 -0
- package/dist/types/protobuf.js +25 -0
- package/dist/types/protobuf.js.map +1 -0
- package/dist/types/reveal.d.ts +46 -0
- package/dist/types/reveal.d.ts.map +1 -0
- package/dist/types/reveal.js +2 -0
- package/dist/types/reveal.js.map +1 -0
- package/dist/types/reviews.d.ts +79 -0
- package/dist/types/reviews.d.ts.map +1 -0
- package/dist/types/reviews.js +5 -0
- package/dist/types/reviews.js.map +1 -0
- package/dist/types/search-filters.d.ts +59 -0
- package/dist/types/search-filters.d.ts.map +1 -0
- package/dist/types/search-filters.js +35 -0
- package/dist/types/search-filters.js.map +1 -0
- package/dist/types/static-map.d.ts +61 -0
- package/dist/types/static-map.d.ts.map +1 -0
- package/dist/types/static-map.js +2 -0
- package/dist/types/static-map.js.map +1 -0
- package/dist/types/suggest.d.ts +57 -0
- package/dist/types/suggest.d.ts.map +1 -0
- package/dist/types/suggest.js +2 -0
- package/dist/types/suggest.js.map +1 -0
- package/dist/types/tiles.d.ts +65 -0
- package/dist/types/tiles.d.ts.map +1 -0
- package/dist/types/tiles.js +2 -0
- package/dist/types/tiles.js.map +1 -0
- package/dist/types/timezone.d.ts +36 -0
- package/dist/types/timezone.d.ts.map +1 -0
- package/dist/types/timezone.js +2 -0
- package/dist/types/timezone.js.map +1 -0
- package/dist/types/traffic.d.ts +22 -0
- package/dist/types/traffic.d.ts.map +1 -0
- package/dist/types/traffic.js +2 -0
- package/dist/types/traffic.js.map +1 -0
- package/dist/types/transit.d.ts +46 -0
- package/dist/types/transit.d.ts.map +1 -0
- package/dist/types/transit.js +3 -0
- package/dist/types/transit.js.map +1 -0
- package/dist/types/ugc-aggregates.d.ts +14 -0
- package/dist/types/ugc-aggregates.d.ts.map +1 -0
- package/dist/types/ugc-aggregates.js +2 -0
- package/dist/types/ugc-aggregates.js.map +1 -0
- package/dist/utils/chunked-decoder.d.ts +9 -0
- package/dist/utils/chunked-decoder.d.ts.map +1 -0
- package/dist/utils/chunked-decoder.js +175 -0
- package/dist/utils/chunked-decoder.js.map +1 -0
- package/dist/utils/directions-metrics.d.ts +5 -0
- package/dist/utils/directions-metrics.d.ts.map +1 -0
- package/dist/utils/directions-metrics.js +62 -0
- package/dist/utils/directions-metrics.js.map +1 -0
- package/dist/utils/encoded-polyline.d.ts +9 -0
- package/dist/utils/encoded-polyline.d.ts.map +1 -0
- package/dist/utils/encoded-polyline.js +67 -0
- package/dist/utils/encoded-polyline.js.map +1 -0
- package/dist/utils/feature-id.d.ts +2 -0
- package/dist/utils/feature-id.d.ts.map +1 -0
- package/dist/utils/feature-id.js +11 -0
- package/dist/utils/feature-id.js.map +1 -0
- package/dist/utils/geo.d.ts +18 -0
- package/dist/utils/geo.d.ts.map +1 -0
- package/dist/utils/geo.js +40 -0
- package/dist/utils/geo.js.map +1 -0
- package/dist/utils/ids.d.ts +23 -0
- package/dist/utils/ids.d.ts.map +1 -0
- package/dist/utils/ids.js +81 -0
- package/dist/utils/ids.js.map +1 -0
- package/dist/utils/load-env.d.ts +7 -0
- package/dist/utils/load-env.d.ts.map +1 -0
- package/dist/utils/load-env.js +49 -0
- package/dist/utils/load-env.js.map +1 -0
- package/dist/utils/photo-url.d.ts +4 -0
- package/dist/utils/photo-url.d.ts.map +1 -0
- package/dist/utils/photo-url.js +35 -0
- package/dist/utils/photo-url.js.map +1 -0
- package/dist/utils/plus-code.d.ts +11 -0
- package/dist/utils/plus-code.d.ts.map +1 -0
- package/dist/utils/plus-code.js +83 -0
- package/dist/utils/plus-code.js.map +1 -0
- package/dist/utils/png.d.ts +25 -0
- package/dist/utils/png.d.ts.map +1 -0
- package/dist/utils/png.js +314 -0
- package/dist/utils/png.js.map +1 -0
- package/dist/utils/pooled.d.ts +6 -0
- package/dist/utils/pooled.d.ts.map +1 -0
- package/dist/utils/pooled.js +19 -0
- package/dist/utils/pooled.js.map +1 -0
- package/dist/utils/request-scheduler.d.ts +28 -0
- package/dist/utils/request-scheduler.d.ts.map +1 -0
- package/dist/utils/request-scheduler.js +58 -0
- package/dist/utils/request-scheduler.js.map +1 -0
- package/dist/utils/response-parser.d.ts +7 -0
- package/dist/utils/response-parser.d.ts.map +1 -0
- package/dist/utils/response-parser.js +50 -0
- package/dist/utils/response-parser.js.map +1 -0
- package/dist/utils/retry-backoff.d.ts +5 -0
- package/dist/utils/retry-backoff.d.ts.map +1 -0
- package/dist/utils/retry-backoff.js +23 -0
- package/dist/utils/retry-backoff.js.map +1 -0
- package/dist/utils/safe-get.d.ts +6 -0
- package/dist/utils/safe-get.d.ts.map +1 -0
- package/dist/utils/safe-get.js +29 -0
- package/dist/utils/safe-get.js.map +1 -0
- package/dist/utils/static-map-grid.d.ts +71 -0
- package/dist/utils/static-map-grid.d.ts.map +1 -0
- package/dist/utils/static-map-grid.js +103 -0
- package/dist/utils/static-map-grid.js.map +1 -0
- package/dist/utils/throttle-detection.d.ts +17 -0
- package/dist/utils/throttle-detection.d.ts.map +1 -0
- package/dist/utils/throttle-detection.js +71 -0
- package/dist/utils/throttle-detection.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { extractLocalPosts } from '../parsers/local-posts.js';
|
|
2
|
+
import { extractEmbeddedReviews, extractPhotosDeep, extractPlaceDetails, } from '../parsers/place.js';
|
|
3
|
+
import { buildLocalPostsUrl, buildPlaceUrl } from '../rpc/pb-builders.js';
|
|
4
|
+
import { dedupePhotos } from '../utils/photo-url.js';
|
|
5
|
+
/**
|
|
6
|
+
* Detect the truncated place payload Google intermittently serves.
|
|
7
|
+
*
|
|
8
|
+
* Measured over repeated identical requests, responses come in two sizes: ~26 KB with
|
|
9
|
+
* one day of hours, 5 amenities and no review count, or ~130 KB with 7 days, 40
|
|
10
|
+
* amenities, the real review count and review snippets. A place that has a rating must
|
|
11
|
+
* also have a review count, so their disagreement identifies the short variant without
|
|
12
|
+
* penalising genuinely sparse listings.
|
|
13
|
+
*/
|
|
14
|
+
function isCompletePlacePayload(data) {
|
|
15
|
+
const details = extractPlaceDetails(data);
|
|
16
|
+
if (details.rating == null)
|
|
17
|
+
return true;
|
|
18
|
+
return details.reviewCount != null;
|
|
19
|
+
}
|
|
20
|
+
export class PlacesService {
|
|
21
|
+
http;
|
|
22
|
+
hl;
|
|
23
|
+
gl;
|
|
24
|
+
constructor(http, config) {
|
|
25
|
+
this.http = http;
|
|
26
|
+
this.hl = config.hl ?? 'en';
|
|
27
|
+
this.gl = config.gl ?? 'us';
|
|
28
|
+
}
|
|
29
|
+
/** Fetch raw place preview JSON (single HTTP round-trip). */
|
|
30
|
+
async fetchPreview(options) {
|
|
31
|
+
const requested = options.mode ?? 'live';
|
|
32
|
+
// buildPlaceUrl already falls back to live when coords/name are missing for detail/rich.
|
|
33
|
+
const mode = requested;
|
|
34
|
+
const url = buildPlaceUrl({
|
|
35
|
+
hexId: options.hexId,
|
|
36
|
+
name: options.name,
|
|
37
|
+
lat: options.lat,
|
|
38
|
+
lng: options.lng,
|
|
39
|
+
ftid: options.ftid,
|
|
40
|
+
hl: this.hl,
|
|
41
|
+
gl: this.gl,
|
|
42
|
+
mode,
|
|
43
|
+
psi: options.psi,
|
|
44
|
+
});
|
|
45
|
+
const start = performance.now();
|
|
46
|
+
const referer = options.name
|
|
47
|
+
? `https://www.google.com/maps/place/${options.name.replace(/ /g, '+')}/`
|
|
48
|
+
: 'https://www.google.com/maps/';
|
|
49
|
+
const data = await this.http.get(url, {
|
|
50
|
+
referer,
|
|
51
|
+
includeOrigin: true,
|
|
52
|
+
acceptResponse: options.skipIncompleteRetry ? undefined : isCompletePlacePayload,
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
data,
|
|
56
|
+
mode,
|
|
57
|
+
timingMs: performance.now() - start,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** Parse place details from an already-fetched preview response. */
|
|
61
|
+
parsePreview(data, overrides) {
|
|
62
|
+
const details = extractPlaceDetails(data);
|
|
63
|
+
if (overrides?.hexId)
|
|
64
|
+
details.hexId = details.hexId ?? overrides.hexId;
|
|
65
|
+
if (overrides?.ftid)
|
|
66
|
+
details.ftid = details.ftid ?? overrides.ftid;
|
|
67
|
+
details.photos = dedupePhotos(extractPhotosDeep(data, 50));
|
|
68
|
+
return details;
|
|
69
|
+
}
|
|
70
|
+
async get(options) {
|
|
71
|
+
const preview = await this.fetchPreview(options);
|
|
72
|
+
return this.parsePreview(preview.data, options);
|
|
73
|
+
}
|
|
74
|
+
async getMany(places, concurrency = 10) {
|
|
75
|
+
const results = [];
|
|
76
|
+
for (let i = 0; i < places.length; i += concurrency) {
|
|
77
|
+
const chunk = places.slice(i, i + concurrency);
|
|
78
|
+
const batch = await Promise.all(chunk.map((p) => this.get(p)));
|
|
79
|
+
results.push(...batch);
|
|
80
|
+
}
|
|
81
|
+
return results;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* End-to-end place profile: one preview fetch + Boq reviews + optional local posts.
|
|
85
|
+
* Defaults to `live` preview (~350 ms p50) — pass `richPreview: true` only when you
|
|
86
|
+
* need the richer pb template. Pass `reviewsService` to avoid circular imports.
|
|
87
|
+
*/
|
|
88
|
+
async getFull(options, reviewsService) {
|
|
89
|
+
const totalStart = performance.now();
|
|
90
|
+
const richPreview = options.richPreview === true;
|
|
91
|
+
const includeLocalPosts = options.includeLocalPosts !== false;
|
|
92
|
+
const meta = {
|
|
93
|
+
fetchedAt: new Date().toISOString(),
|
|
94
|
+
previewMode: richPreview ? 'rich' : 'live',
|
|
95
|
+
sources: {
|
|
96
|
+
preview: false,
|
|
97
|
+
reviewsBoq: false,
|
|
98
|
+
reviewsEmbedded: false,
|
|
99
|
+
reviewsRpc: false,
|
|
100
|
+
localPosts: false,
|
|
101
|
+
},
|
|
102
|
+
timingMs: {},
|
|
103
|
+
};
|
|
104
|
+
const placeOpts = {
|
|
105
|
+
hexId: options.hexId,
|
|
106
|
+
name: options.name,
|
|
107
|
+
lat: options.lat,
|
|
108
|
+
lng: options.lng,
|
|
109
|
+
ftid: options.ftid,
|
|
110
|
+
mode: richPreview ? 'rich' : 'live',
|
|
111
|
+
skipIncompleteRetry: options.skipIncompleteRetry,
|
|
112
|
+
};
|
|
113
|
+
const localPostsPromise = includeLocalPosts
|
|
114
|
+
? this.fetchLocalPosts(options).then((result) => {
|
|
115
|
+
meta.timingMs.localPosts = result.timingMs;
|
|
116
|
+
meta.sources.localPosts = result.posts.length > 0;
|
|
117
|
+
return result.posts;
|
|
118
|
+
})
|
|
119
|
+
: Promise.resolve(undefined);
|
|
120
|
+
// Boq reviews only need hexId — run in parallel with preview (saves ~180–400 ms).
|
|
121
|
+
const reviewsStart = performance.now();
|
|
122
|
+
const reviewsPromise = this.fetchReviewsBoqOnly(options, reviewsService).then((reviews) => {
|
|
123
|
+
meta.timingMs.reviews = performance.now() - reviewsStart;
|
|
124
|
+
return reviews;
|
|
125
|
+
});
|
|
126
|
+
const [preview, reviewsBoq] = await Promise.all([
|
|
127
|
+
this.fetchPreview(placeOpts),
|
|
128
|
+
reviewsPromise,
|
|
129
|
+
]);
|
|
130
|
+
meta.sources.preview = true;
|
|
131
|
+
meta.previewMode = preview.mode;
|
|
132
|
+
meta.timingMs.preview = preview.timingMs;
|
|
133
|
+
const details = this.parsePreview(preview.data, placeOpts);
|
|
134
|
+
const embedded = extractEmbeddedReviews(Array.isArray(preview.data[6])
|
|
135
|
+
? preview.data[6]
|
|
136
|
+
: []);
|
|
137
|
+
if (embedded.length > 0) {
|
|
138
|
+
meta.sources.reviewsEmbedded = true;
|
|
139
|
+
if (!details.reviewSnippets?.length) {
|
|
140
|
+
details.reviewSnippets = embedded;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
let reviews = reviewsBoq;
|
|
144
|
+
if (reviews.reviews.length === 0) {
|
|
145
|
+
const embeddedStart = performance.now();
|
|
146
|
+
reviews = await reviewsService.listEmbeddedFromPreview(preview.data, {
|
|
147
|
+
hexId: options.hexId,
|
|
148
|
+
name: options.name,
|
|
149
|
+
lat: options.lat,
|
|
150
|
+
lng: options.lng,
|
|
151
|
+
ftid: options.ftid,
|
|
152
|
+
limit: options.reviewLimit ?? 10,
|
|
153
|
+
sort: options.reviewSort,
|
|
154
|
+
});
|
|
155
|
+
meta.timingMs.reviews = (meta.timingMs.reviews ?? 0) + (performance.now() - embeddedStart);
|
|
156
|
+
}
|
|
157
|
+
meta.sources.reviewsBoq = reviews.reviews.some((r) => r.source === 'boq');
|
|
158
|
+
meta.sources.reviewsRpc = reviews.reviews.some((r) => r.source === 'rpc');
|
|
159
|
+
details.photos = this.mergePhotoSources(details.photos ?? [], reviews.reviews, preview.data);
|
|
160
|
+
if (!details.reviewCount) {
|
|
161
|
+
details.reviewCount = reviews.totalReviews ?? details.reviewSnippets?.length;
|
|
162
|
+
}
|
|
163
|
+
if (reviews.totalReviews == null && details.reviewCount) {
|
|
164
|
+
reviews.totalReviews = details.reviewCount;
|
|
165
|
+
}
|
|
166
|
+
const localPosts = await localPostsPromise;
|
|
167
|
+
meta.timingMs.total = performance.now() - totalStart;
|
|
168
|
+
return {
|
|
169
|
+
details,
|
|
170
|
+
reviews,
|
|
171
|
+
localPosts,
|
|
172
|
+
meta,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
async fetchReviewsBoqOnly(options, reviewsService) {
|
|
176
|
+
const maxPages = options.maxReviewPages ?? 1;
|
|
177
|
+
const reviewOpts = {
|
|
178
|
+
hexId: options.hexId,
|
|
179
|
+
name: options.name,
|
|
180
|
+
lat: options.lat,
|
|
181
|
+
lng: options.lng,
|
|
182
|
+
ftid: options.ftid,
|
|
183
|
+
limit: options.reviewLimit ?? 10,
|
|
184
|
+
sort: options.reviewSort,
|
|
185
|
+
};
|
|
186
|
+
if (maxPages <= 1) {
|
|
187
|
+
return reviewsService.listBoq(reviewOpts);
|
|
188
|
+
}
|
|
189
|
+
return reviewsService.listAll({
|
|
190
|
+
...reviewOpts,
|
|
191
|
+
maxPages,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
async fetchReviewsForPlace(options, reviewsService, previewData) {
|
|
195
|
+
const boq = await this.fetchReviewsBoqOnly(options, reviewsService);
|
|
196
|
+
if (boq.reviews.length > 0)
|
|
197
|
+
return boq;
|
|
198
|
+
return reviewsService.listEmbeddedFromPreview(previewData, {
|
|
199
|
+
hexId: options.hexId,
|
|
200
|
+
name: options.name,
|
|
201
|
+
lat: options.lat,
|
|
202
|
+
lng: options.lng,
|
|
203
|
+
ftid: options.ftid,
|
|
204
|
+
limit: options.reviewLimit ?? 10,
|
|
205
|
+
sort: options.reviewSort,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
mergePhotoSources(placePhotos, reviews, previewData) {
|
|
209
|
+
const fromReviews = reviews.flatMap((r) => [
|
|
210
|
+
...(r.photos ?? []),
|
|
211
|
+
...(r.authorPhoto ? [r.authorPhoto] : []),
|
|
212
|
+
]).filter((url) => typeof url === 'string' && !url.includes('/a-/'));
|
|
213
|
+
const deep = extractPhotosDeep(previewData, 50);
|
|
214
|
+
return dedupePhotos([...placePhotos, ...deep, ...fromReviews], 50);
|
|
215
|
+
}
|
|
216
|
+
async fetchLocalPosts(options) {
|
|
217
|
+
const url = buildLocalPostsUrl({
|
|
218
|
+
hexId: options.hexId,
|
|
219
|
+
ftid: options.ftid,
|
|
220
|
+
hl: this.hl,
|
|
221
|
+
gl: this.gl,
|
|
222
|
+
});
|
|
223
|
+
const start = performance.now();
|
|
224
|
+
try {
|
|
225
|
+
const data = await this.http.get(url, {
|
|
226
|
+
referer: 'https://www.google.com/maps/',
|
|
227
|
+
includeOrigin: true,
|
|
228
|
+
allowShortBody: true,
|
|
229
|
+
});
|
|
230
|
+
return {
|
|
231
|
+
posts: extractLocalPosts(data),
|
|
232
|
+
timingMs: performance.now() - start,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
return { posts: [], timingMs: performance.now() - start };
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=places.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"places.js","sourceRoot":"","sources":["../../src/services/places.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { HttpClient } from '../client/http-client.js';
|
|
2
|
+
import type { GMapsConfig } from '../types/common.js';
|
|
3
|
+
import type { RevealPlaceOptions, RevealPlaceResult } from '../types/reveal.js';
|
|
4
|
+
export declare class RevealService {
|
|
5
|
+
private http;
|
|
6
|
+
private hl;
|
|
7
|
+
private gl;
|
|
8
|
+
constructor(http: HttpClient, config: GMapsConfig);
|
|
9
|
+
/**
|
|
10
|
+
* Reveal a hidden POI at a map click location.
|
|
11
|
+
* Requires a feature id (`ftid`) from search/suggest or place preview.
|
|
12
|
+
*/
|
|
13
|
+
revealAtClick(options: RevealPlaceOptions): Promise<RevealPlaceResult>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=reveal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reveal.d.ts","sourceRoot":"","sources":["../../src/services/reveal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;gBAEP,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW;IAMjD;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA2B7E"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { extractRevealPlace } from '../parsers/reveal.js';
|
|
2
|
+
import { buildRevealUrl, normalizeRevealFtid } from '../rpc/reveal-pb.js';
|
|
3
|
+
export class RevealService {
|
|
4
|
+
http;
|
|
5
|
+
hl;
|
|
6
|
+
gl;
|
|
7
|
+
constructor(http, config) {
|
|
8
|
+
this.http = http;
|
|
9
|
+
this.hl = config.hl ?? 'en';
|
|
10
|
+
this.gl = config.gl ?? 'us';
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Reveal a hidden POI at a map click location.
|
|
14
|
+
* Requires a feature id (`ftid`) from search/suggest or place preview.
|
|
15
|
+
*/
|
|
16
|
+
async revealAtClick(options) {
|
|
17
|
+
if (!options.ftid) {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
const url = buildRevealUrl({
|
|
21
|
+
camLat: options.camLat,
|
|
22
|
+
camLng: options.camLng,
|
|
23
|
+
camZoom: options.camZoom,
|
|
24
|
+
hitLat: options.hitLat,
|
|
25
|
+
hitLng: options.hitLng,
|
|
26
|
+
ftid: normalizeRevealFtid(options.ftid),
|
|
27
|
+
width: options.width,
|
|
28
|
+
height: options.height,
|
|
29
|
+
tileX: options.tileX,
|
|
30
|
+
tileY: options.tileY,
|
|
31
|
+
hl: this.hl,
|
|
32
|
+
gl: this.gl,
|
|
33
|
+
});
|
|
34
|
+
const data = await this.http.get(url, {
|
|
35
|
+
referer: 'https://www.google.com/maps/',
|
|
36
|
+
includeOrigin: true,
|
|
37
|
+
});
|
|
38
|
+
return extractRevealPlace(data);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=reveal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reveal.js","sourceRoot":"","sources":["../../src/services/reveal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI1E,MAAM,OAAO,aAAa;IAChB,IAAI,CAAa;IACjB,EAAE,CAAS;IACX,EAAE,CAAS;IAEnB,YAAY,IAAgB,EAAE,MAAmB;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC;QAC5B,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,OAA2B;QAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,GAAG,GAAG,cAAc,CAAC;YACzB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC;YACvC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;YACpC,OAAO,EAAE,8BAA8B;YACvC,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEH,OAAO,kBAAkB,CAAC,IAA6C,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { HttpClient } from '../client/http-client.js';
|
|
2
|
+
import { sumRatingDistribution } from '../parsers/review-aggregates.js';
|
|
3
|
+
import type { GMapsConfig, ReviewSortOrder, ReviewsResult } from '../types/common.js';
|
|
4
|
+
import type { ReviewClientFilters } from '../types/reviews.js';
|
|
5
|
+
import type { PbNode } from '../types/protobuf.js';
|
|
6
|
+
export interface GetReviewsOptions {
|
|
7
|
+
hexId: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
lat?: number;
|
|
10
|
+
lng?: number;
|
|
11
|
+
ftid?: string;
|
|
12
|
+
limit?: number;
|
|
13
|
+
paginationToken?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Server-side sort via Boq reqpld slot [1]: 1=relevant, 2=newest, 3=highest, 4=lowest.
|
|
16
|
+
*/
|
|
17
|
+
sort?: ReviewSortOrder;
|
|
18
|
+
/**
|
|
19
|
+
* Filter parsed rows client-side. Anonymous Boq ignores server-side search/filter pb —
|
|
20
|
+
* See docs/internal/FINDINGS-endpoints.md for the reviews wire format.
|
|
21
|
+
*/
|
|
22
|
+
filters?: ReviewClientFilters;
|
|
23
|
+
/**
|
|
24
|
+
* Attach place-wide rating histogram from GetPlaceUgcPostAggregates (batchexecute).
|
|
25
|
+
* Sets `ratingDistribution`, `aggregateRating`, and `totalReviews` when available.
|
|
26
|
+
*/
|
|
27
|
+
includeAggregates?: boolean;
|
|
28
|
+
/** Override session psi for aggregates (scraped from Maps bootstrap when omitted). */
|
|
29
|
+
psi?: string;
|
|
30
|
+
}
|
|
31
|
+
export declare class ReviewsService {
|
|
32
|
+
private http;
|
|
33
|
+
private hl;
|
|
34
|
+
private gl;
|
|
35
|
+
private ugcAggregates;
|
|
36
|
+
constructor(http: HttpClient, config: GMapsConfig);
|
|
37
|
+
/**
|
|
38
|
+
* Fetch reviews from Google Maps internal surfaces:
|
|
39
|
+
* 1. GetLocalBoqProxy httpservice RPC (default)
|
|
40
|
+
* 2. Embedded snippets in place preview
|
|
41
|
+
*/
|
|
42
|
+
list(options: GetReviewsOptions): Promise<ReviewsResult>;
|
|
43
|
+
listAll(options: GetReviewsOptions & {
|
|
44
|
+
maxPages?: number;
|
|
45
|
+
}): Promise<ReviewsResult>;
|
|
46
|
+
/**
|
|
47
|
+
* Full paginated reviews via GetLocalBoqProxy httpservice RPC.
|
|
48
|
+
*
|
|
49
|
+
* Responses are cumulative: passing page 1's `nextPageToken` returns page 1's reviews
|
|
50
|
+
* plus the next batch. Callers paging manually should dedupe by `reviewId`, or use
|
|
51
|
+
* `listAll`, which does it for them.
|
|
52
|
+
*/
|
|
53
|
+
listBoq(options: GetReviewsOptions): Promise<ReviewsResult>;
|
|
54
|
+
/**
|
|
55
|
+
* Reviews embedded in place preview at place[31][1].
|
|
56
|
+
*
|
|
57
|
+
* A hex id alone is enough — buildPlaceUrl falls back to the hex-only template — so this
|
|
58
|
+
* no longer bails out when the caller has no name or coordinates. That also makes
|
|
59
|
+
* `totalReviews` reachable for hex-only lookups.
|
|
60
|
+
*/
|
|
61
|
+
listEmbedded(options: GetReviewsOptions): Promise<ReviewsResult>;
|
|
62
|
+
/** Parse embedded reviews from an existing place preview response (no extra HTTP). */
|
|
63
|
+
listEmbeddedFromPreview(data: PbNode, options: GetReviewsOptions): Promise<ReviewsResult>;
|
|
64
|
+
/** Full paginated reviews via /maps/rpc/listugcposts (requires SAPISID cookies). */
|
|
65
|
+
listRpc(options: GetReviewsOptions): Promise<ReviewsResult>;
|
|
66
|
+
private fetchAggregates;
|
|
67
|
+
private attachAggregates;
|
|
68
|
+
}
|
|
69
|
+
export { sumRatingDistribution };
|
|
70
|
+
//# sourceMappingURL=reviews.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviews.d.ts","sourceRoot":"","sources":["../../src/services/reviews.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,OAAO,EAEL,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sFAAsF;IACtF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,aAAa,CAAuB;gBAEhC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW;IAOjD;;;;OAIG;IACG,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IAUxD,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IA+GzF;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IAsBjE;;;;;;OAMG;IACG,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IAsBtE,sFAAsF;IAChF,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IAgB/F,oFAAoF;IAC9E,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;YA0BnD,eAAe;YAsBf,gBAAgB;CAe/B;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { extractBoqReviews } from '../parsers/boq-reviews.js';
|
|
2
|
+
import { applyReviewClientFilters } from '../parsers/review-client-filters.js';
|
|
3
|
+
import { placeAggregatesToRatingDistribution, sumRatingDistribution, } from '../parsers/review-aggregates.js';
|
|
4
|
+
import { extractEmbeddedReviews, extractPlaceDetails } from '../parsers/place.js';
|
|
5
|
+
import { extractListUgcReviews } from '../parsers/reviews.js';
|
|
6
|
+
import { buildBoqReviewsUrl } from '../rpc/boq-reviews.js';
|
|
7
|
+
import { buildPlaceUrl, buildReviewsUrl } from '../rpc/pb-builders.js';
|
|
8
|
+
import { UgcAggregatesService } from './ugc-aggregates.js';
|
|
9
|
+
import { asPlaceDataNode } from '../types/protobuf.js';
|
|
10
|
+
export class ReviewsService {
|
|
11
|
+
http;
|
|
12
|
+
hl;
|
|
13
|
+
gl;
|
|
14
|
+
ugcAggregates;
|
|
15
|
+
constructor(http, config) {
|
|
16
|
+
this.http = http;
|
|
17
|
+
this.hl = config.hl ?? 'en';
|
|
18
|
+
this.gl = config.gl ?? 'us';
|
|
19
|
+
this.ugcAggregates = new UgcAggregatesService(http, config);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Fetch reviews from Google Maps internal surfaces:
|
|
23
|
+
* 1. GetLocalBoqProxy httpservice RPC (default)
|
|
24
|
+
* 2. Embedded snippets in place preview
|
|
25
|
+
*/
|
|
26
|
+
async list(options) {
|
|
27
|
+
const boq = await this.listBoq(options);
|
|
28
|
+
if (boq.reviews.length > 0) {
|
|
29
|
+
return boq;
|
|
30
|
+
}
|
|
31
|
+
const embedded = await this.listEmbedded(options);
|
|
32
|
+
return embedded;
|
|
33
|
+
}
|
|
34
|
+
async listAll(options) {
|
|
35
|
+
const maxPages = options.maxPages ?? 10;
|
|
36
|
+
const allReviews = [];
|
|
37
|
+
let token = options.paginationToken;
|
|
38
|
+
let pages = 0;
|
|
39
|
+
let pageRatingDistribution;
|
|
40
|
+
let lastNextPageToken;
|
|
41
|
+
let ratingDistribution;
|
|
42
|
+
let aggregateRating;
|
|
43
|
+
let totalReviews;
|
|
44
|
+
if (options.includeAggregates) {
|
|
45
|
+
const aggregates = await this.fetchAggregates(options);
|
|
46
|
+
ratingDistribution = aggregates.ratingDistribution;
|
|
47
|
+
aggregateRating = aggregates.aggregateRating;
|
|
48
|
+
totalReviews = aggregates.totalReviews;
|
|
49
|
+
}
|
|
50
|
+
while (pages < maxPages) {
|
|
51
|
+
const page = await this.listBoq({ ...options, paginationToken: token, includeAggregates: false });
|
|
52
|
+
if (page.reviews.length === 0) {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
if (page.pageRatingDistribution) {
|
|
56
|
+
pageRatingDistribution = page.pageRatingDistribution;
|
|
57
|
+
}
|
|
58
|
+
for (const review of page.reviews) {
|
|
59
|
+
if (!allReviews.some((r) => r.reviewId && r.reviewId === review.reviewId)) {
|
|
60
|
+
allReviews.push(review);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (!page.nextPageToken) {
|
|
64
|
+
lastNextPageToken = undefined;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
token = page.nextPageToken;
|
|
68
|
+
lastNextPageToken = page.nextPageToken;
|
|
69
|
+
pages++;
|
|
70
|
+
}
|
|
71
|
+
if (allReviews.length > 0) {
|
|
72
|
+
if (totalReviews == null) {
|
|
73
|
+
const embedded = await this.listEmbedded(options);
|
|
74
|
+
totalReviews = embedded.totalReviews;
|
|
75
|
+
}
|
|
76
|
+
const filtered = applyReviewClientFilters({
|
|
77
|
+
reviewCount: allReviews.length,
|
|
78
|
+
reviews: allReviews,
|
|
79
|
+
totalReviews,
|
|
80
|
+
pageRatingDistribution,
|
|
81
|
+
ratingDistribution,
|
|
82
|
+
aggregateRating,
|
|
83
|
+
nextPageToken: lastNextPageToken,
|
|
84
|
+
}, options.filters);
|
|
85
|
+
return filtered;
|
|
86
|
+
}
|
|
87
|
+
const embedded = await this.listEmbedded(options);
|
|
88
|
+
totalReviews = embedded.totalReviews;
|
|
89
|
+
if (!this.http.hasAuthCookies()) {
|
|
90
|
+
return applyReviewClientFilters({ ...embedded, ratingDistribution, aggregateRating, totalReviews }, options.filters);
|
|
91
|
+
}
|
|
92
|
+
token = options.paginationToken;
|
|
93
|
+
pages = 0;
|
|
94
|
+
while (pages < maxPages) {
|
|
95
|
+
const page = await this.listRpc({ ...options, includeAggregates: false });
|
|
96
|
+
if (page.reviews.length === 0)
|
|
97
|
+
break;
|
|
98
|
+
for (const review of page.reviews) {
|
|
99
|
+
if (!allReviews.some((r) => r.reviewId && r.reviewId === review.reviewId)) {
|
|
100
|
+
allReviews.push(review);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (!page.nextPageToken)
|
|
104
|
+
break;
|
|
105
|
+
token = page.nextPageToken;
|
|
106
|
+
pages++;
|
|
107
|
+
}
|
|
108
|
+
if (allReviews.length === 0) {
|
|
109
|
+
return applyReviewClientFilters({ ...embedded, ratingDistribution, aggregateRating, totalReviews }, options.filters);
|
|
110
|
+
}
|
|
111
|
+
return applyReviewClientFilters({
|
|
112
|
+
reviewCount: allReviews.length,
|
|
113
|
+
reviews: allReviews,
|
|
114
|
+
totalReviews: totalReviews ?? embedded.totalReviews,
|
|
115
|
+
ratingDistribution,
|
|
116
|
+
aggregateRating,
|
|
117
|
+
}, options.filters);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Full paginated reviews via GetLocalBoqProxy httpservice RPC.
|
|
121
|
+
*
|
|
122
|
+
* Responses are cumulative: passing page 1's `nextPageToken` returns page 1's reviews
|
|
123
|
+
* plus the next batch. Callers paging manually should dedupe by `reviewId`, or use
|
|
124
|
+
* `listAll`, which does it for them.
|
|
125
|
+
*/
|
|
126
|
+
async listBoq(options) {
|
|
127
|
+
const url = buildBoqReviewsUrl({
|
|
128
|
+
hexId: options.hexId,
|
|
129
|
+
ftid: options.ftid,
|
|
130
|
+
limit: options.limit ?? 10,
|
|
131
|
+
sort: options.sort,
|
|
132
|
+
paginationToken: options.paginationToken,
|
|
133
|
+
});
|
|
134
|
+
try {
|
|
135
|
+
const data = await this.http.get(url, {
|
|
136
|
+
referer: 'https://www.google.com/maps/',
|
|
137
|
+
includeOrigin: true,
|
|
138
|
+
});
|
|
139
|
+
const parsed = extractBoqReviews(data);
|
|
140
|
+
const withAggregates = await this.attachAggregates(parsed, options);
|
|
141
|
+
return applyReviewClientFilters(withAggregates, options.filters);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return { reviewCount: 0, reviews: [] };
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Reviews embedded in place preview at place[31][1].
|
|
149
|
+
*
|
|
150
|
+
* A hex id alone is enough — buildPlaceUrl falls back to the hex-only template — so this
|
|
151
|
+
* no longer bails out when the caller has no name or coordinates. That also makes
|
|
152
|
+
* `totalReviews` reachable for hex-only lookups.
|
|
153
|
+
*/
|
|
154
|
+
async listEmbedded(options) {
|
|
155
|
+
const url = buildPlaceUrl({
|
|
156
|
+
hexId: options.hexId,
|
|
157
|
+
name: options.name,
|
|
158
|
+
lat: options.lat,
|
|
159
|
+
lng: options.lng,
|
|
160
|
+
ftid: options.ftid,
|
|
161
|
+
hl: this.hl,
|
|
162
|
+
gl: this.gl,
|
|
163
|
+
mode: options.lat != null && options.lng != null ? 'detail' : 'live',
|
|
164
|
+
});
|
|
165
|
+
const data = await this.http.get(url, {
|
|
166
|
+
referer: options.name
|
|
167
|
+
? `https://www.google.com/maps/place/${options.name.replace(/ /g, '+')}/`
|
|
168
|
+
: 'https://www.google.com/maps/',
|
|
169
|
+
includeOrigin: true,
|
|
170
|
+
});
|
|
171
|
+
return this.listEmbeddedFromPreview(data, options);
|
|
172
|
+
}
|
|
173
|
+
/** Parse embedded reviews from an existing place preview response (no extra HTTP). */
|
|
174
|
+
async listEmbeddedFromPreview(data, options) {
|
|
175
|
+
const placeData = asPlaceDataNode(Array.isArray(data) ? data[6] : undefined);
|
|
176
|
+
const reviews = placeData ? extractEmbeddedReviews(placeData) : [];
|
|
177
|
+
const details = extractPlaceDetails(data);
|
|
178
|
+
const base = {
|
|
179
|
+
reviewCount: reviews.length,
|
|
180
|
+
reviews: reviews.map((r) => ({ ...r, source: 'embedded' })),
|
|
181
|
+
totalReviews: details.reviewCount,
|
|
182
|
+
};
|
|
183
|
+
const withAggregates = await this.attachAggregates(base, options);
|
|
184
|
+
return applyReviewClientFilters(withAggregates, options.filters);
|
|
185
|
+
}
|
|
186
|
+
/** Full paginated reviews via /maps/rpc/listugcposts (requires SAPISID cookies). */
|
|
187
|
+
async listRpc(options) {
|
|
188
|
+
const url = buildReviewsUrl({
|
|
189
|
+
hexId: options.hexId,
|
|
190
|
+
limit: options.limit ?? 10,
|
|
191
|
+
paginationToken: options.paginationToken,
|
|
192
|
+
hl: this.hl,
|
|
193
|
+
gl: this.gl,
|
|
194
|
+
});
|
|
195
|
+
try {
|
|
196
|
+
const data = await this.http.get(url, {
|
|
197
|
+
referer: 'https://www.google.com/',
|
|
198
|
+
authenticated: true,
|
|
199
|
+
allowShortBody: true,
|
|
200
|
+
});
|
|
201
|
+
const result = extractListUgcReviews(data);
|
|
202
|
+
if (result.unauthenticated || result.reviews.length === 0) {
|
|
203
|
+
return { reviewCount: 0, reviews: [] };
|
|
204
|
+
}
|
|
205
|
+
const withAggregates = await this.attachAggregates(result, options);
|
|
206
|
+
return applyReviewClientFilters(withAggregates, options.filters);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return { reviewCount: 0, reviews: [] };
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async fetchAggregates(options) {
|
|
213
|
+
if (!options.includeAggregates) {
|
|
214
|
+
return {};
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
const aggregates = await this.ugcAggregates.getPlaceAggregates({
|
|
218
|
+
hexId: options.hexId,
|
|
219
|
+
psi: options.psi,
|
|
220
|
+
});
|
|
221
|
+
return {
|
|
222
|
+
ratingDistribution: placeAggregatesToRatingDistribution(aggregates),
|
|
223
|
+
aggregateRating: aggregates.rating,
|
|
224
|
+
totalReviews: aggregates.totalCount,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return {};
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
async attachAggregates(result, options) {
|
|
232
|
+
const aggregates = await this.fetchAggregates(options);
|
|
233
|
+
if (!aggregates.ratingDistribution && aggregates.totalReviews == null) {
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
return {
|
|
237
|
+
...result,
|
|
238
|
+
ratingDistribution: aggregates.ratingDistribution ?? result.ratingDistribution,
|
|
239
|
+
aggregateRating: aggregates.aggregateRating ?? result.aggregateRating,
|
|
240
|
+
totalReviews: result.totalReviews ?? aggregates.totalReviews,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
export { sumRatingDistribution };
|
|
245
|
+
//# sourceMappingURL=reviews.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviews.js","sourceRoot":"","sources":["../../src/services/reviews.ts"],"names":[],"mappings":"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"}
|