@mapbox/mcp-server 0.14.0 → 0.15.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/README.md +11 -0
- package/dist/commonjs/index.js +38 -1
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/resources/BaseResource.d.ts +18 -0
- package/dist/commonjs/resources/BaseResource.d.ts.map +1 -1
- package/dist/commonjs/resources/BaseResource.js +26 -4
- package/dist/commonjs/resources/BaseResource.js.map +1 -1
- package/dist/commonjs/resources/temporary/TemporaryDataResource.d.ts.map +1 -1
- package/dist/commonjs/resources/temporary/TemporaryDataResource.js +20 -10
- package/dist/commonjs/resources/temporary/TemporaryDataResource.js.map +1 -1
- package/dist/commonjs/resources/ui-apps/MapAppUIResource.d.ts.map +1 -1
- package/dist/commonjs/resources/ui-apps/MapAppUIResource.js +2 -8
- package/dist/commonjs/resources/ui-apps/MapAppUIResource.js.map +1 -1
- package/dist/commonjs/resources/ui-apps/mapAppCsp.d.ts +22 -0
- package/dist/commonjs/resources/ui-apps/mapAppCsp.d.ts.map +1 -0
- package/dist/commonjs/resources/ui-apps/mapAppCsp.js +39 -0
- package/dist/commonjs/resources/ui-apps/mapAppCsp.js.map +1 -0
- package/dist/commonjs/resources/ui-apps/mapAppHtml.d.ts.map +1 -1
- package/dist/commonjs/resources/ui-apps/mapAppHtml.js +71 -9
- package/dist/commonjs/resources/ui-apps/mapAppHtml.js.map +1 -1
- package/dist/commonjs/tools/BaseTool.d.ts +19 -0
- package/dist/commonjs/tools/BaseTool.d.ts.map +1 -1
- package/dist/commonjs/tools/BaseTool.js +25 -3
- package/dist/commonjs/tools/BaseTool.js.map +1 -1
- package/dist/commonjs/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
- package/dist/commonjs/tools/directions-tool/DirectionsTool.js +4 -3
- package/dist/commonjs/tools/directions-tool/DirectionsTool.js.map +1 -1
- package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.d.ts.map +1 -1
- package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.js +7 -4
- package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.js.map +1 -1
- package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts +4 -0
- package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts.map +1 -1
- package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.js +9 -1
- package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.js.map +1 -1
- package/dist/commonjs/tools/isochrone-tool/IsochroneTool.js +1 -1
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.d.ts +11 -1
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.d.ts.map +1 -1
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.js +3 -3
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.js.map +1 -1
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.js +132 -141
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.js.map +1 -1
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts +71 -10
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts.map +1 -1
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.js +86 -10
- package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.js.map +1 -1
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.d.ts +2 -4
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.d.ts.map +1 -1
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.d.ts +50 -0
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.d.ts.map +1 -1
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.js +51 -2
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.js.map +1 -1
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.js +50 -18
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.js.map +1 -1
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.d.ts +50 -0
- package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.d.ts.map +1 -1
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.d.ts.map +1 -1
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js +2 -2
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js.map +1 -1
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +4 -3
- package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js +2 -2
- package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
- package/dist/commonjs/utils/jsonSchema2020.d.ts +26 -0
- package/dist/commonjs/utils/jsonSchema2020.d.ts.map +1 -0
- package/dist/commonjs/utils/jsonSchema2020.js +143 -0
- package/dist/commonjs/utils/jsonSchema2020.js.map +1 -0
- package/dist/commonjs/utils/jwtUtils.d.ts +48 -0
- package/dist/commonjs/utils/jwtUtils.d.ts.map +1 -1
- package/dist/commonjs/utils/jwtUtils.js +63 -0
- package/dist/commonjs/utils/jwtUtils.js.map +1 -1
- package/dist/commonjs/utils/mapAppPayload.d.ts +109 -0
- package/dist/commonjs/utils/mapAppPayload.d.ts.map +1 -1
- package/dist/commonjs/utils/mapAppPayload.js +38 -2
- package/dist/commonjs/utils/mapAppPayload.js.map +1 -1
- package/dist/commonjs/utils/selfFetchRef.d.ts.map +1 -1
- package/dist/commonjs/utils/selfFetchRef.js +31 -0
- package/dist/commonjs/utils/selfFetchRef.js.map +1 -1
- package/dist/commonjs/utils/serverInstructions.d.ts +12 -0
- package/dist/commonjs/utils/serverInstructions.d.ts.map +1 -0
- package/dist/commonjs/utils/serverInstructions.js +28 -0
- package/dist/commonjs/utils/serverInstructions.js.map +1 -0
- package/dist/commonjs/utils/storeMapPayload.d.ts +11 -11
- package/dist/commonjs/utils/storeMapPayload.d.ts.map +1 -1
- package/dist/commonjs/utils/storeMapPayload.js +14 -13
- package/dist/commonjs/utils/storeMapPayload.js.map +1 -1
- package/dist/commonjs/utils/temporaryResourceManager.d.ts +10 -4
- package/dist/commonjs/utils/temporaryResourceManager.d.ts.map +1 -1
- package/dist/commonjs/utils/temporaryResourceManager.js.map +1 -1
- package/dist/commonjs/utils/tracing.d.ts +4 -0
- package/dist/commonjs/utils/tracing.d.ts.map +1 -1
- package/dist/commonjs/utils/tracing.js +20 -0
- package/dist/commonjs/utils/tracing.js.map +1 -1
- package/dist/commonjs/version.json +3 -3
- package/dist/esm/index.js +39 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/resources/BaseResource.d.ts +18 -0
- package/dist/esm/resources/BaseResource.d.ts.map +1 -1
- package/dist/esm/resources/BaseResource.js +26 -4
- package/dist/esm/resources/BaseResource.js.map +1 -1
- package/dist/esm/resources/temporary/TemporaryDataResource.d.ts.map +1 -1
- package/dist/esm/resources/temporary/TemporaryDataResource.js +21 -11
- package/dist/esm/resources/temporary/TemporaryDataResource.js.map +1 -1
- package/dist/esm/resources/ui-apps/MapAppUIResource.d.ts.map +1 -1
- package/dist/esm/resources/ui-apps/MapAppUIResource.js +2 -8
- package/dist/esm/resources/ui-apps/MapAppUIResource.js.map +1 -1
- package/dist/esm/resources/ui-apps/mapAppCsp.d.ts +22 -0
- package/dist/esm/resources/ui-apps/mapAppCsp.d.ts.map +1 -0
- package/dist/esm/resources/ui-apps/mapAppCsp.js +36 -0
- package/dist/esm/resources/ui-apps/mapAppCsp.js.map +1 -0
- package/dist/esm/resources/ui-apps/mapAppHtml.d.ts.map +1 -1
- package/dist/esm/resources/ui-apps/mapAppHtml.js +71 -9
- package/dist/esm/resources/ui-apps/mapAppHtml.js.map +1 -1
- package/dist/esm/tools/BaseTool.d.ts +19 -0
- package/dist/esm/tools/BaseTool.d.ts.map +1 -1
- package/dist/esm/tools/BaseTool.js +25 -3
- package/dist/esm/tools/BaseTool.js.map +1 -1
- package/dist/esm/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
- package/dist/esm/tools/directions-tool/DirectionsTool.js +5 -4
- package/dist/esm/tools/directions-tool/DirectionsTool.js.map +1 -1
- package/dist/esm/tools/ground-location-tool/GroundLocationTool.d.ts.map +1 -1
- package/dist/esm/tools/ground-location-tool/GroundLocationTool.js +7 -4
- package/dist/esm/tools/ground-location-tool/GroundLocationTool.js.map +1 -1
- package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts +4 -0
- package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts.map +1 -1
- package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.js +9 -1
- package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.js.map +1 -1
- package/dist/esm/tools/isochrone-tool/IsochroneTool.js +2 -2
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.d.ts +11 -1
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.d.ts.map +1 -1
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.js +3 -3
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.js.map +1 -1
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.js +133 -142
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.js.map +1 -1
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts +71 -10
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts.map +1 -1
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.js +85 -9
- package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.js.map +1 -1
- package/dist/esm/tools/render-map-tool/RenderMapTool.d.ts +2 -4
- package/dist/esm/tools/render-map-tool/RenderMapTool.d.ts.map +1 -1
- package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.d.ts +50 -0
- package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.d.ts.map +1 -1
- package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.js +51 -2
- package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.js.map +1 -1
- package/dist/esm/tools/render-map-tool/RenderMapTool.js +51 -19
- package/dist/esm/tools/render-map-tool/RenderMapTool.js.map +1 -1
- package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.d.ts +50 -0
- package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.d.ts.map +1 -1
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.d.ts.map +1 -1
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js +2 -2
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js.map +1 -1
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +4 -3
- package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js +3 -3
- package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
- package/dist/esm/utils/jsonSchema2020.d.ts +26 -0
- package/dist/esm/utils/jsonSchema2020.d.ts.map +1 -0
- package/dist/esm/utils/jsonSchema2020.js +138 -0
- package/dist/esm/utils/jsonSchema2020.js.map +1 -0
- package/dist/esm/utils/jwtUtils.d.ts +48 -0
- package/dist/esm/utils/jwtUtils.d.ts.map +1 -1
- package/dist/esm/utils/jwtUtils.js +61 -0
- package/dist/esm/utils/jwtUtils.js.map +1 -1
- package/dist/esm/utils/mapAppPayload.d.ts +109 -0
- package/dist/esm/utils/mapAppPayload.d.ts.map +1 -1
- package/dist/esm/utils/mapAppPayload.js +38 -2
- package/dist/esm/utils/mapAppPayload.js.map +1 -1
- package/dist/esm/utils/selfFetchRef.d.ts.map +1 -1
- package/dist/esm/utils/selfFetchRef.js +31 -0
- package/dist/esm/utils/selfFetchRef.js.map +1 -1
- package/dist/esm/utils/serverInstructions.d.ts +12 -0
- package/dist/esm/utils/serverInstructions.d.ts.map +1 -0
- package/dist/esm/utils/serverInstructions.js +25 -0
- package/dist/esm/utils/serverInstructions.js.map +1 -0
- package/dist/esm/utils/storeMapPayload.d.ts +11 -11
- package/dist/esm/utils/storeMapPayload.d.ts.map +1 -1
- package/dist/esm/utils/storeMapPayload.js +14 -13
- package/dist/esm/utils/storeMapPayload.js.map +1 -1
- package/dist/esm/utils/temporaryResourceManager.d.ts +10 -4
- package/dist/esm/utils/temporaryResourceManager.d.ts.map +1 -1
- package/dist/esm/utils/temporaryResourceManager.js.map +1 -1
- package/dist/esm/utils/tracing.d.ts +4 -0
- package/dist/esm/utils/tracing.d.ts.map +1 -1
- package/dist/esm/utils/tracing.js +19 -0
- package/dist/esm/utils/tracing.js.map +1 -1
- package/dist/esm/version.json +3 -3
- package/package.json +2 -2
- package/patches/{@modelcontextprotocol+sdk+1.29.0.patch → @modelcontextprotocol+sdk+1.30.0.patch} +6 -2
|
@@ -18,8 +18,18 @@ export declare class PlaceDetailsTool extends MapboxApiBasedTool<typeof PlaceDet
|
|
|
18
18
|
constructor(params: {
|
|
19
19
|
httpRequest: HttpRequest;
|
|
20
20
|
});
|
|
21
|
-
|
|
21
|
+
/** `opening_hours` is an OSM opening_hours string, e.g. "Mo 09:00-23:45; Tu 09:00-23:45; ...". */
|
|
22
|
+
private formatOpeningHours;
|
|
22
23
|
private formatDetailsToText;
|
|
24
|
+
private errorResult;
|
|
25
|
+
private successResult;
|
|
26
|
+
/** Maps a legacy Details API `Feature` onto the flat Places API output shape. */
|
|
27
|
+
private normalizeLegacyFeature;
|
|
28
|
+
/**
|
|
29
|
+
* Calls the legacy Details API, the only way to resolve boundary/
|
|
30
|
+
* administrative mapbox_ids (and the source of enhanced Japan data).
|
|
31
|
+
*/
|
|
32
|
+
private fetchLegacyDetails;
|
|
23
33
|
protected execute(input: z.infer<typeof PlaceDetailsInputSchema>, accessToken: string, _context: ToolExecutionContext): Promise<CallToolResult>;
|
|
24
34
|
}
|
|
25
35
|
//# sourceMappingURL=PlaceDetailsTool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaceDetailsTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EACL,wBAAwB,
|
|
1
|
+
{"version":3,"file":"PlaceDetailsTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EACL,wBAAwB,EAIzB,MAAM,qCAAqC,CAAC;AAkB7C,qBAAa,gBAAiB,SAAQ,kBAAkB,CACtD,OAAO,uBAAuB,EAC9B,OAAO,wBAAwB,CAChC;IACC,IAAI,SAAwB;IAC5B,WAAW,SACgrB;IAC3rB,WAAW;;;;;;MAMT;gBAEU,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;IAQhD,kGAAkG;IAClG,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,mBAAmB;IA6D3B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IAQrB,iFAAiF;IACjF,OAAO,CAAC,sBAAsB;IAiC9B;;;OAGG;YACW,kBAAkB;cAqChB,OAAO,CACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,EAC9C,WAAW,EAAE,MAAM,EAEnB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,cAAc,CAAC;CA4B3B"}
|
|
@@ -11,14 +11,14 @@ export const PlaceDetailsInputSchema = z.object({
|
|
|
11
11
|
attribute_sets: z
|
|
12
12
|
.array(z.enum(['basic', 'photos', 'visit', 'venue']))
|
|
13
13
|
.optional()
|
|
14
|
-
.describe('Which attribute sets to include in
|
|
14
|
+
.describe('Only used when mapbox_id resolves via the legacy Details API fallback (boundaries, neighborhoods, cities, regions — see mapbox_id\'s description). Which attribute sets to include in that response. Options: "basic" (name/address/coordinates — always requested regardless of whether you list it here), "photos" (place photo URLs), "visit" (opening hours, rating, price level, popularity), "venue" (phone number, website URL, social media links). Ignored for POI lookups, which go through the Places API and have no equivalent parameter.'),
|
|
15
15
|
language: z
|
|
16
16
|
.string()
|
|
17
17
|
.optional()
|
|
18
|
-
.describe('BCP 47 language tag for localized results (e.g. "en", "fr", "de", "ja"). Affects place names and address formatting.'),
|
|
18
|
+
.describe('Only used when mapbox_id resolves via the legacy Details API fallback (see attribute_sets). BCP 47 language tag for localized results (e.g. "en", "fr", "de", "ja"). Affects place names and address formatting. Ignored for POI lookups.'),
|
|
19
19
|
worldview: z
|
|
20
20
|
.enum(['ar', 'cn', 'in', 'jp', 'ma', 'ru', 'tr', 'us'])
|
|
21
21
|
.optional()
|
|
22
|
-
.describe('Worldview for geopolitically sensitive content such as disputed borders. Options: "ar" (Argentina), "cn" (China), "in" (India), "jp" (Japan), "ma" (Morocco), "ru" (Russia), "tr" (Turkey), "us" (United States, default).')
|
|
22
|
+
.describe('Only used when mapbox_id resolves via the legacy Details API fallback (see attribute_sets). Worldview for geopolitically sensitive content such as disputed borders. Options: "ar" (Argentina), "cn" (China), "in" (India), "jp" (Japan), "ma" (Morocco), "ru" (Russia), "tr" (Turkey), "us" (United States, default). Ignored for POI lookups.')
|
|
23
23
|
});
|
|
24
24
|
//# sourceMappingURL=PlaceDetailsTool.input.schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaceDetailsTool.input.schema.js","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.input.schema.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,CACP,0MAA0M,CAC3M;IACH,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;SACpD,QAAQ,EAAE;SACV,QAAQ,CACP,
|
|
1
|
+
{"version":3,"file":"PlaceDetailsTool.input.schema.js","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.input.schema.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,CACP,0MAA0M,CAC3M;IACH,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;SACpD,QAAQ,EAAE;SACV,QAAQ,CACP,whBAAwhB,CACzhB;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,2OAA2O,CAC5O;IACH,SAAS,EAAE,CAAC;SACT,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SACtD,QAAQ,EAAE;SACV,QAAQ,CACP,iVAAiV,CAClV;CACJ,CAAC,CAAC"}
|
|
@@ -2,11 +2,25 @@
|
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
3
|
import { MapboxApiBasedTool } from '../MapboxApiBasedTool.js';
|
|
4
4
|
import { PlaceDetailsInputSchema } from './PlaceDetailsTool.input.schema.js';
|
|
5
|
-
import { PlaceDetailsOutputSchema } from './PlaceDetailsTool.output.schema.js';
|
|
6
|
-
// API Documentation: https://docs.mapbox.com/api/search/
|
|
5
|
+
import { PlaceDetailsOutputSchema, LegacyPlaceDetailsFeatureSchema } from './PlaceDetailsTool.output.schema.js';
|
|
6
|
+
// API Documentation: https://docs.mapbox.com/api/search/places/
|
|
7
|
+
//
|
|
8
|
+
// This calls the Places API's Details/Retrieve endpoint, not the older,
|
|
9
|
+
// separate Details API (docs.mapbox.com/api/search/details/) this tool used
|
|
10
|
+
// previously. The Places API is Public Preview: its default quota is 1,000
|
|
11
|
+
// records/month per account and 100 records/sec, and its response contract
|
|
12
|
+
// may change without notice.
|
|
13
|
+
//
|
|
14
|
+
// The Places API only covers POIs. It rejects boundary/administrative
|
|
15
|
+
// mapbox_ids (neighborhoods, cities, regions) with a 422
|
|
16
|
+
// "Invalid mapbox_id format" error — confirmed live against the API with a
|
|
17
|
+
// city's mapbox_id from search_and_geocode_tool. Those IDs, and the
|
|
18
|
+
// enhanced Japan data the legacy API alone provides, still need the legacy
|
|
19
|
+
// Details API, so this tool falls back to it on that specific error rather
|
|
20
|
+
// than losing that capability outright.
|
|
7
21
|
export class PlaceDetailsTool extends MapboxApiBasedTool {
|
|
8
22
|
name = 'place_details_tool';
|
|
9
|
-
description = 'Retrieve detailed information about a specific place using its Mapbox ID. Use after search_and_geocode_tool, category_search_tool, or reverse_geocode_tool to get additional details such as photos, opening hours,
|
|
23
|
+
description = 'Retrieve detailed information about a specific place using its Mapbox ID. Use after search_and_geocode_tool, category_search_tool, or reverse_geocode_tool to get additional details such as photos, opening hours, phone numbers, and website URLs. Requires the mapbox_id field from a previous search result. Primarily covers points of interest (businesses, addresses, buildings); mapbox_ids for neighborhoods, cities, or other administrative boundaries are also supported but return more limited data (name, address, coordinates — no photos, hours, or contact info). The primary POI lookup is Public Preview with a default quota of 1,000 requests/month; contact Mapbox if you need a higher volume.';
|
|
10
24
|
annotations = {
|
|
11
25
|
title: 'Place Details Tool',
|
|
12
26
|
readOnlyHint: true,
|
|
@@ -21,145 +35,114 @@ export class PlaceDetailsTool extends MapboxApiBasedTool {
|
|
|
21
35
|
httpRequest: params.httpRequest
|
|
22
36
|
});
|
|
23
37
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
'
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
'Friday',
|
|
32
|
-
'Saturday'
|
|
33
|
-
];
|
|
34
|
-
// Use weekday_text if the API provides it — already formatted per day
|
|
35
|
-
if (Array.isArray(openHours['weekday_text'])) {
|
|
36
|
-
const lines = openHours['weekday_text']
|
|
37
|
-
.map((line) => ` ${line}`)
|
|
38
|
-
.join('\n');
|
|
39
|
-
return `Hours:\n${lines}`;
|
|
40
|
-
}
|
|
41
|
-
// Fall back to parsing periods array
|
|
42
|
-
if (!Array.isArray(openHours['periods']))
|
|
38
|
+
/** `opening_hours` is an OSM opening_hours string, e.g. "Mo 09:00-23:45; Tu 09:00-23:45; ...". */
|
|
39
|
+
formatOpeningHours(openingHours) {
|
|
40
|
+
const parts = openingHours
|
|
41
|
+
.split(';')
|
|
42
|
+
.map((part) => part.trim())
|
|
43
|
+
.filter(Boolean);
|
|
44
|
+
if (parts.length === 0)
|
|
43
45
|
return '';
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
const m = hhmm.slice(2);
|
|
47
|
-
const period = h < 12 ? 'AM' : 'PM';
|
|
48
|
-
const hour = h % 12 || 12;
|
|
49
|
-
return m === '00' ? `${hour} ${period}` : `${hour}:${m} ${period}`;
|
|
50
|
-
};
|
|
51
|
-
// Group periods by open day
|
|
52
|
-
const byDay = new Map();
|
|
53
|
-
for (const period of openHours['periods']) {
|
|
54
|
-
const day = period.open.day;
|
|
55
|
-
const open = formatTime(period.open.time);
|
|
56
|
-
const close = period.close ? formatTime(period.close.time) : 'midnight';
|
|
57
|
-
const range = `${open} – ${close}`;
|
|
58
|
-
const existing = byDay.get(day);
|
|
59
|
-
if (existing) {
|
|
60
|
-
existing.push(range);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
byDay.set(day, [range]);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
const dayLines = DAY_NAMES.map((name, i) => {
|
|
67
|
-
const ranges = byDay.get(i);
|
|
68
|
-
return ` ${name}: ${ranges ? ranges.join(', ') : 'Closed'}`;
|
|
69
|
-
});
|
|
70
|
-
return `Hours:\n${dayLines.join('\n')}`;
|
|
46
|
+
const lines = parts.map((part) => ` ${part}`).join('\n');
|
|
47
|
+
return `Hours:\n${lines}`;
|
|
71
48
|
}
|
|
72
49
|
formatDetailsToText(data) {
|
|
73
|
-
const props = data.properties;
|
|
74
50
|
const lines = [];
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (props.full_address) {
|
|
79
|
-
lines.push(`Address: ${props.full_address}`);
|
|
51
|
+
lines.push(`Name: ${data.name}`);
|
|
52
|
+
if (data.full_address) {
|
|
53
|
+
lines.push(`Address: ${data.full_address}`);
|
|
80
54
|
}
|
|
81
|
-
|
|
82
|
-
lines.push(`
|
|
55
|
+
if (data.coordinates) {
|
|
56
|
+
lines.push(`Coordinates: ${data.coordinates.latitude}, ${data.coordinates.longitude}`);
|
|
83
57
|
}
|
|
84
|
-
|
|
85
|
-
lines.push(`
|
|
58
|
+
if (data.primary_category) {
|
|
59
|
+
lines.push(`Type: ${data.primary_category}`);
|
|
86
60
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const [lng, lat] = data.geometry.coordinates;
|
|
90
|
-
lines.push(`Coordinates: ${lat}, ${lng}`);
|
|
61
|
+
else if (data.feature_type) {
|
|
62
|
+
lines.push(`Type: ${data.feature_type}`);
|
|
91
63
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
lines.push(`Type: ${props.feature_type}`);
|
|
64
|
+
if (data.categories && data.categories.length > 0) {
|
|
65
|
+
lines.push(`Category: ${data.categories.join(', ')}`);
|
|
95
66
|
}
|
|
96
|
-
if (
|
|
97
|
-
lines.push(`
|
|
67
|
+
if (data.brand) {
|
|
68
|
+
lines.push(`Brand: ${data.brand}`);
|
|
98
69
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
lines.push(`Brand: ${props.brand.join(', ')}`);
|
|
70
|
+
if (data.phone) {
|
|
71
|
+
lines.push(`Phone: ${data.phone}`);
|
|
102
72
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
if (metadata['price']) {
|
|
123
|
-
lines.push(`Price: ${metadata['price']}`);
|
|
124
|
-
}
|
|
125
|
-
if (metadata['rating'] !== undefined) {
|
|
126
|
-
lines.push(`Rating: ${metadata['rating']}`);
|
|
127
|
-
}
|
|
128
|
-
if (metadata['review_count'] !== undefined) {
|
|
129
|
-
lines.push(`Reviews: ${metadata['review_count']}`);
|
|
130
|
-
}
|
|
131
|
-
if (metadata['popularity'] !== undefined) {
|
|
132
|
-
lines.push(`Popularity: ${Math.round(metadata['popularity'] * 100)}%`);
|
|
133
|
-
}
|
|
134
|
-
if (metadata['open_hours'] &&
|
|
135
|
-
typeof metadata['open_hours'] === 'object') {
|
|
136
|
-
const formatted = this.formatOpenHours(metadata['open_hours']);
|
|
137
|
-
if (formatted)
|
|
138
|
-
lines.push(formatted);
|
|
139
|
-
}
|
|
140
|
-
// Photos
|
|
141
|
-
if (Array.isArray(metadata['primary_photo'])) {
|
|
142
|
-
const photos = metadata['primary_photo'];
|
|
143
|
-
const photoUrls = photos
|
|
144
|
-
.map((p) => p['url'] || p['thumb_url'])
|
|
145
|
-
.filter(Boolean);
|
|
146
|
-
if (photoUrls.length > 0) {
|
|
147
|
-
lines.push(`Photos: ${photoUrls.join(', ')}`);
|
|
148
|
-
}
|
|
73
|
+
if (data.website) {
|
|
74
|
+
lines.push(`Website: ${data.website}`);
|
|
75
|
+
}
|
|
76
|
+
if (data.score?.popularity !== undefined &&
|
|
77
|
+
data.score?.popularity !== null) {
|
|
78
|
+
lines.push(`Popularity: ${Math.round(data.score.popularity * 100)}%`);
|
|
79
|
+
}
|
|
80
|
+
if (data.permanently_closed) {
|
|
81
|
+
lines.push('Status: Permanently closed');
|
|
82
|
+
}
|
|
83
|
+
if (data.opening_hours) {
|
|
84
|
+
const formatted = this.formatOpeningHours(data.opening_hours);
|
|
85
|
+
if (formatted)
|
|
86
|
+
lines.push(formatted);
|
|
87
|
+
}
|
|
88
|
+
if (data.photos && data.photos.length > 0) {
|
|
89
|
+
const urls = data.photos.map((photo) => photo.url).filter(Boolean);
|
|
90
|
+
if (urls.length > 0) {
|
|
91
|
+
lines.push(`Photos: ${urls.join(', ')}`);
|
|
149
92
|
}
|
|
150
93
|
}
|
|
151
94
|
return lines.join('\n');
|
|
152
95
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
96
|
+
errorResult(message) {
|
|
97
|
+
return {
|
|
98
|
+
content: [{ type: 'text', text: `Place Details API error: ${message}` }],
|
|
99
|
+
isError: true
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
successResult(data) {
|
|
103
|
+
return {
|
|
104
|
+
content: [{ type: 'text', text: this.formatDetailsToText(data) }],
|
|
105
|
+
structuredContent: data,
|
|
106
|
+
isError: false
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/** Maps a legacy Details API `Feature` onto the flat Places API output shape. */
|
|
110
|
+
normalizeLegacyFeature(feature) {
|
|
111
|
+
const props = feature.properties;
|
|
112
|
+
const metadata = props.metadata;
|
|
113
|
+
return this.validateOutput({
|
|
114
|
+
mapbox_id: props.mapbox_id,
|
|
115
|
+
name: props.name,
|
|
116
|
+
full_address: props.full_address ?? props.place_formatted ?? props.address,
|
|
117
|
+
feature_type: props.feature_type,
|
|
118
|
+
coordinates: props.coordinates ??
|
|
119
|
+
(feature.geometry?.coordinates
|
|
120
|
+
? {
|
|
121
|
+
longitude: feature.geometry.coordinates[0],
|
|
122
|
+
latitude: feature.geometry.coordinates[1]
|
|
123
|
+
}
|
|
124
|
+
: undefined),
|
|
125
|
+
bbox: props.bbox,
|
|
126
|
+
context: props.context,
|
|
127
|
+
categories: props.poi_category,
|
|
128
|
+
brand: props.brand && props.brand.length > 0
|
|
129
|
+
? props.brand.join(', ')
|
|
130
|
+
: undefined,
|
|
131
|
+
phone: metadata?.['phone'],
|
|
132
|
+
website: metadata?.['website'],
|
|
133
|
+
metadata
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Calls the legacy Details API, the only way to resolve boundary/
|
|
138
|
+
* administrative mapbox_ids (and the source of enhanced Japan data).
|
|
139
|
+
*/
|
|
140
|
+
async fetchLegacyDetails(input, accessToken) {
|
|
156
141
|
const url = new URL(`${MapboxApiBasedTool.mapboxApiEndpoint}search/details/v1/retrieve/${encodeURIComponent(input.mapbox_id)}`);
|
|
157
142
|
url.searchParams.append('access_token', accessToken);
|
|
158
|
-
// "basic" (name, feature_type, address, coordinates)
|
|
159
|
-
//
|
|
160
|
-
//
|
|
161
|
-
// must always be requested, even if the caller's attribute_sets omits
|
|
162
|
-
// it, or the API response fails output validation.
|
|
143
|
+
// "basic" (name, feature_type, address, coordinates) must always be
|
|
144
|
+
// requested — normalizeLegacyFeature() depends on those fields, even if
|
|
145
|
+
// the caller's attribute_sets omits it.
|
|
163
146
|
const attributeSets = new Set(['basic', ...(input.attribute_sets ?? [])]);
|
|
164
147
|
url.searchParams.append('attribute_sets', Array.from(attributeSets).join(','));
|
|
165
148
|
if (input.language) {
|
|
@@ -170,24 +153,32 @@ export class PlaceDetailsTool extends MapboxApiBasedTool {
|
|
|
170
153
|
}
|
|
171
154
|
const response = await this.httpRequest(url.toString());
|
|
172
155
|
if (!response.ok) {
|
|
173
|
-
|
|
174
|
-
return {
|
|
175
|
-
content: [
|
|
176
|
-
{
|
|
177
|
-
type: 'text',
|
|
178
|
-
text: `Place Details API error: ${errorMessage}`
|
|
179
|
-
}
|
|
180
|
-
],
|
|
181
|
-
isError: true
|
|
182
|
-
};
|
|
156
|
+
return { ok: false, errorMessage: await this.getErrorMessage(response) };
|
|
183
157
|
}
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
};
|
|
158
|
+
const rawFeature = LegacyPlaceDetailsFeatureSchema.parse(await response.json());
|
|
159
|
+
return { ok: true, data: this.normalizeLegacyFeature(rawFeature) };
|
|
160
|
+
}
|
|
161
|
+
async execute(input, accessToken,
|
|
162
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
163
|
+
_context) {
|
|
164
|
+
const url = new URL(`${MapboxApiBasedTool.mapboxApiEndpoint}places/v1/details/retrieve/${encodeURIComponent(input.mapbox_id)}`);
|
|
165
|
+
url.searchParams.append('access_token', accessToken);
|
|
166
|
+
const response = await this.httpRequest(url.toString());
|
|
167
|
+
if (response.ok) {
|
|
168
|
+
const data = this.validateOutput(await response.json());
|
|
169
|
+
return this.successResult(data);
|
|
170
|
+
}
|
|
171
|
+
// The Places API rejects non-POI mapbox_ids (boundaries/neighborhoods/
|
|
172
|
+
// cities/regions) with 422 "Invalid mapbox_id format" — fall back to the
|
|
173
|
+
// legacy Details API, which still resolves those, instead of erroring.
|
|
174
|
+
if (response.status === 422) {
|
|
175
|
+
const legacyResult = await this.fetchLegacyDetails(input, accessToken);
|
|
176
|
+
if (legacyResult.ok) {
|
|
177
|
+
return this.successResult(legacyResult.data);
|
|
178
|
+
}
|
|
179
|
+
return this.errorResult(legacyResult.errorMessage);
|
|
180
|
+
}
|
|
181
|
+
return this.errorResult(await this.getErrorMessage(response));
|
|
191
182
|
}
|
|
192
183
|
}
|
|
193
184
|
//# sourceMappingURL=PlaceDetailsTool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaceDetailsTool.js","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAI9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EACL,wBAAwB,
|
|
1
|
+
{"version":3,"file":"PlaceDetailsTool.js","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,77 @@ import { z } from 'zod';
|
|
|
2
2
|
/**
|
|
3
3
|
* Output schema for PlaceDetailsTool
|
|
4
4
|
*
|
|
5
|
-
* Models the
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Models the flat Place record returned by the Mapbox Places API's Details
|
|
6
|
+
* endpoint (`places/v1/details/retrieve`), currently in Public Preview.
|
|
7
|
+
* Nearly every field beyond `mapbox_id`/`name` is optional and every nested
|
|
8
|
+
* object uses .passthrough() — live responses observed during development
|
|
9
|
+
* varied in which fields were present (e.g. `building` and `opening_hours`
|
|
10
|
+
* only appear on some places), and a Public Preview API's contract can add
|
|
11
|
+
* fields without notice, so this schema is deliberately permissive rather
|
|
12
|
+
* than risk an output-validation failure like the one fixed for the
|
|
13
|
+
* previous Details API (see CHANGELOG).
|
|
14
|
+
*
|
|
15
|
+
* `feature_type`, `bbox`, `context`, and `metadata` are never populated by
|
|
16
|
+
* the Places API itself — they're only present when `mapbox_id` resolved via
|
|
17
|
+
* the legacy Details API fallback (boundaries/neighborhoods/cities/regions,
|
|
18
|
+
* which the Places API rejects). See `PlaceDetailsTool.ts`'s
|
|
19
|
+
* `normalizeLegacyFeature`.
|
|
8
20
|
*/
|
|
9
21
|
export declare const PlaceDetailsOutputSchema: z.ZodObject<{
|
|
22
|
+
mapbox_id: z.ZodString;
|
|
23
|
+
name: z.ZodString;
|
|
24
|
+
full_address: z.ZodOptional<z.ZodString>;
|
|
25
|
+
brand: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
26
|
+
primary_category: z.ZodOptional<z.ZodString>;
|
|
27
|
+
categories: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
28
|
+
feature_type: z.ZodOptional<z.ZodString>;
|
|
29
|
+
bbox: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
30
|
+
context: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
|
|
31
|
+
metadata: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
|
|
32
|
+
opening_hours: z.ZodOptional<z.ZodString>;
|
|
33
|
+
permanently_closed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
34
|
+
phone: z.ZodOptional<z.ZodString>;
|
|
35
|
+
website: z.ZodOptional<z.ZodString>;
|
|
36
|
+
status: z.ZodOptional<z.ZodString>;
|
|
37
|
+
created_at: z.ZodOptional<z.ZodString>;
|
|
38
|
+
updated_at: z.ZodOptional<z.ZodString>;
|
|
39
|
+
score: z.ZodOptional<z.ZodObject<{
|
|
40
|
+
closed: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
41
|
+
reality: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
42
|
+
popularity: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
43
|
+
}, z.core.$loose>>;
|
|
44
|
+
coordinates: z.ZodOptional<z.ZodObject<{
|
|
45
|
+
latitude: z.ZodNumber;
|
|
46
|
+
longitude: z.ZodNumber;
|
|
47
|
+
source: z.ZodOptional<z.ZodString>;
|
|
48
|
+
routable_points: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
49
|
+
name: z.ZodOptional<z.ZodString>;
|
|
50
|
+
latitude: z.ZodNumber;
|
|
51
|
+
longitude: z.ZodNumber;
|
|
52
|
+
}, z.core.$loose>>>;
|
|
53
|
+
}, z.core.$loose>>;
|
|
54
|
+
address: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
|
|
55
|
+
attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
56
|
+
building: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
|
|
57
|
+
photos: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
58
|
+
url: z.ZodString;
|
|
59
|
+
width: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
60
|
+
height: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
61
|
+
source: z.ZodOptional<z.ZodString>;
|
|
62
|
+
}, z.core.$loose>>>;
|
|
63
|
+
telemetry: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
|
|
64
|
+
}, z.core.$loose>;
|
|
65
|
+
/**
|
|
66
|
+
* Type inference for PlaceDetailsOutput
|
|
67
|
+
*/
|
|
68
|
+
export type PlaceDetailsOutput = z.infer<typeof PlaceDetailsOutputSchema>;
|
|
69
|
+
/**
|
|
70
|
+
* Raw GeoJSON `Feature` returned by the legacy Details API
|
|
71
|
+
* (`search/details/v1/retrieve`). Only used for the fallback path — see
|
|
72
|
+
* `PlaceDetailsTool.ts`'s `normalizeLegacyFeature`, which maps this into
|
|
73
|
+
* `PlaceDetailsOutput`.
|
|
74
|
+
*/
|
|
75
|
+
export declare const LegacyPlaceDetailsFeatureSchema: z.ZodObject<{
|
|
10
76
|
type: z.ZodLiteral<"Feature">;
|
|
11
77
|
geometry: z.ZodObject<{
|
|
12
78
|
type: z.ZodLiteral<"Point">;
|
|
@@ -25,18 +91,13 @@ export declare const PlaceDetailsOutputSchema: z.ZodObject<{
|
|
|
25
91
|
latitude: z.ZodNumber;
|
|
26
92
|
}, z.core.$loose>>;
|
|
27
93
|
bbox: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
28
|
-
language: z.ZodOptional<z.ZodString>;
|
|
29
|
-
maki: z.ZodOptional<z.ZodString>;
|
|
30
94
|
poi_category: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
31
|
-
poi_category_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
32
95
|
brand: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
33
|
-
brand_id: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
34
|
-
external_ids: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
35
96
|
metadata: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
|
|
36
97
|
}, z.core.$loose>;
|
|
37
98
|
}, z.core.$loose>;
|
|
38
99
|
/**
|
|
39
|
-
* Type inference for
|
|
100
|
+
* Type inference for LegacyPlaceDetailsFeature
|
|
40
101
|
*/
|
|
41
|
-
export type
|
|
102
|
+
export type LegacyPlaceDetailsFeature = z.infer<typeof LegacyPlaceDetailsFeatureSchema>;
|
|
42
103
|
//# sourceMappingURL=PlaceDetailsTool.output.schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaceDetailsTool.output.schema.d.ts","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.output.schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB
|
|
1
|
+
{"version":3,"file":"PlaceDetailsTool.output.schema.d.ts","sourceRoot":"","sources":["../../../../src/tools/place-details-tool/PlaceDetailsTool.output.schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmErB,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;iBAkC5B,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,+BAA+B,CACvC,CAAC"}
|