@mapbox/mcp-server 0.2.4 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/LICENSE.md +17 -9
  2. package/README.md +24 -6
  3. package/dist/commonjs/config/toolConfig.d.ts +8 -0
  4. package/dist/commonjs/config/toolConfig.d.ts.map +1 -0
  5. package/dist/commonjs/config/toolConfig.js +40 -0
  6. package/dist/commonjs/config/toolConfig.js.map +1 -0
  7. package/dist/commonjs/index.d.ts +2 -0
  8. package/dist/{index.d.ts.map → commonjs/index.d.ts.map} +1 -1
  9. package/dist/commonjs/index.js +39 -0
  10. package/dist/commonjs/index.js.map +1 -0
  11. package/dist/{cjs → commonjs}/package.json +1 -1
  12. package/dist/{tools → commonjs/tools}/MapboxApiBasedTool.d.ts +11 -9
  13. package/dist/commonjs/tools/MapboxApiBasedTool.d.ts.map +1 -0
  14. package/dist/commonjs/tools/MapboxApiBasedTool.js +111 -0
  15. package/dist/commonjs/tools/MapboxApiBasedTool.js.map +1 -0
  16. package/dist/commonjs/tools/category-list-tool/CategoryListTool.d.ts +28 -0
  17. package/dist/commonjs/tools/category-list-tool/CategoryListTool.d.ts.map +1 -0
  18. package/dist/commonjs/tools/category-list-tool/CategoryListTool.js +68 -0
  19. package/dist/commonjs/tools/category-list-tool/CategoryListTool.js.map +1 -0
  20. package/dist/{tools → commonjs/tools}/category-search-tool/CategorySearchTool.d.ts +6 -5
  21. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.d.ts.map +1 -0
  22. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.js +188 -0
  23. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.js.map +1 -0
  24. package/dist/{tools → commonjs/tools}/directions-tool/DirectionsTool.d.ts +3 -2
  25. package/dist/commonjs/tools/directions-tool/DirectionsTool.d.ts.map +1 -0
  26. package/dist/commonjs/tools/directions-tool/DirectionsTool.js +385 -0
  27. package/dist/commonjs/tools/directions-tool/DirectionsTool.js.map +1 -0
  28. package/dist/{tools → commonjs/tools}/directions-tool/cleanResponseData.d.ts +2 -2
  29. package/dist/commonjs/tools/directions-tool/cleanResponseData.d.ts.map +1 -0
  30. package/dist/commonjs/tools/directions-tool/cleanResponseData.js +178 -0
  31. package/dist/commonjs/tools/directions-tool/cleanResponseData.js.map +1 -0
  32. package/dist/commonjs/tools/directions-tool/formatIsoDateTime.d.ts.map +1 -0
  33. package/dist/commonjs/tools/directions-tool/formatIsoDateTime.js +21 -0
  34. package/dist/commonjs/tools/directions-tool/formatIsoDateTime.js.map +1 -0
  35. package/dist/{tools → commonjs/tools}/forward-geocode-tool/ForwardGeocodeTool.d.ts +5 -4
  36. package/dist/commonjs/tools/forward-geocode-tool/ForwardGeocodeTool.d.ts.map +1 -0
  37. package/dist/commonjs/tools/forward-geocode-tool/ForwardGeocodeTool.js +212 -0
  38. package/dist/commonjs/tools/forward-geocode-tool/ForwardGeocodeTool.js.map +1 -0
  39. package/dist/{tools → commonjs/tools}/isochrone-tool/IsochroneTool.d.ts +3 -2
  40. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.d.ts.map +1 -0
  41. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.js +118 -0
  42. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.js.map +1 -0
  43. package/dist/{tools → commonjs/tools}/matrix-tool/MatrixTool.d.ts +3 -2
  44. package/dist/commonjs/tools/matrix-tool/MatrixTool.d.ts.map +1 -0
  45. package/dist/commonjs/tools/matrix-tool/MatrixTool.js +202 -0
  46. package/dist/commonjs/tools/matrix-tool/MatrixTool.js.map +1 -0
  47. package/dist/{tools → commonjs/tools}/poi-search-tool/PoiSearchTool.d.ts +5 -4
  48. package/dist/commonjs/tools/poi-search-tool/PoiSearchTool.d.ts.map +1 -0
  49. package/dist/commonjs/tools/poi-search-tool/PoiSearchTool.js +231 -0
  50. package/dist/commonjs/tools/poi-search-tool/PoiSearchTool.js.map +1 -0
  51. package/dist/{tools → commonjs/tools}/reverse-geocode-tool/ReverseGeocodeTool.d.ts +5 -4
  52. package/dist/commonjs/tools/reverse-geocode-tool/ReverseGeocodeTool.d.ts.map +1 -0
  53. package/dist/commonjs/tools/reverse-geocode-tool/ReverseGeocodeTool.js +148 -0
  54. package/dist/commonjs/tools/reverse-geocode-tool/ReverseGeocodeTool.js.map +1 -0
  55. package/dist/{tools → commonjs/tools}/static-map-image-tool/StaticMapImageTool.d.ts +3 -2
  56. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -0
  57. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js +416 -0
  58. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -0
  59. package/dist/{tools → commonjs/tools}/toolRegistry.d.ts +2 -1
  60. package/dist/commonjs/tools/toolRegistry.d.ts.map +1 -0
  61. package/dist/commonjs/tools/toolRegistry.js +37 -0
  62. package/dist/commonjs/tools/toolRegistry.js.map +1 -0
  63. package/dist/{tools → commonjs/tools}/version-tool/VersionTool.d.ts +1 -1
  64. package/dist/commonjs/tools/version-tool/VersionTool.d.ts.map +1 -0
  65. package/dist/commonjs/tools/version-tool/VersionTool.js +52 -0
  66. package/dist/commonjs/tools/version-tool/VersionTool.js.map +1 -0
  67. package/dist/commonjs/utils/fetchRequest.d.ts +38 -0
  68. package/dist/commonjs/utils/fetchRequest.d.ts.map +1 -0
  69. package/dist/commonjs/utils/fetchRequest.js +110 -0
  70. package/dist/commonjs/utils/fetchRequest.js.map +1 -0
  71. package/dist/commonjs/utils/versionUtils-cjs.cjs.map +1 -0
  72. package/dist/commonjs/utils/versionUtils-cjs.d.cts.map +1 -0
  73. package/dist/commonjs/utils/versionUtils.d.ts +9 -0
  74. package/dist/commonjs/utils/versionUtils.js +46 -0
  75. package/dist/commonjs/version.json +6 -0
  76. package/dist/esm/config/toolConfig.d.ts +8 -0
  77. package/dist/esm/config/toolConfig.d.ts.map +1 -0
  78. package/dist/esm/config/toolConfig.js +36 -0
  79. package/dist/esm/config/toolConfig.js.map +1 -0
  80. package/dist/esm/index.d.ts +2 -0
  81. package/dist/esm/index.d.ts.map +1 -0
  82. package/dist/esm/index.js +37 -0
  83. package/dist/esm/index.js.map +1 -0
  84. package/dist/esm/package.json +1 -1
  85. package/dist/esm/tools/MapboxApiBasedTool.d.ts +84 -0
  86. package/dist/esm/tools/MapboxApiBasedTool.d.ts.map +1 -0
  87. package/dist/{tools → esm/tools}/MapboxApiBasedTool.js +20 -13
  88. package/dist/esm/tools/MapboxApiBasedTool.js.map +1 -0
  89. package/dist/esm/tools/category-list-tool/CategoryListTool.d.ts +28 -0
  90. package/dist/esm/tools/category-list-tool/CategoryListTool.d.ts.map +1 -0
  91. package/dist/esm/tools/category-list-tool/CategoryListTool.js +64 -0
  92. package/dist/esm/tools/category-list-tool/CategoryListTool.js.map +1 -0
  93. package/dist/esm/tools/category-search-tool/CategorySearchTool.d.ts +89 -0
  94. package/dist/esm/tools/category-search-tool/CategorySearchTool.d.ts.map +1 -0
  95. package/dist/esm/tools/category-search-tool/CategorySearchTool.js +184 -0
  96. package/dist/esm/tools/category-search-tool/CategorySearchTool.js.map +1 -0
  97. package/dist/esm/tools/directions-tool/DirectionsTool.d.ts +44 -0
  98. package/dist/esm/tools/directions-tool/DirectionsTool.d.ts.map +1 -0
  99. package/dist/{tools → esm/tools}/directions-tool/DirectionsTool.js +10 -9
  100. package/dist/esm/tools/directions-tool/DirectionsTool.js.map +1 -0
  101. package/dist/esm/tools/directions-tool/cleanResponseData.d.ts +11 -0
  102. package/dist/esm/tools/directions-tool/cleanResponseData.d.ts.map +1 -0
  103. package/dist/esm/tools/directions-tool/cleanResponseData.js.map +1 -0
  104. package/dist/esm/tools/directions-tool/formatIsoDateTime.d.ts +8 -0
  105. package/dist/esm/tools/directions-tool/formatIsoDateTime.d.ts.map +1 -0
  106. package/dist/esm/tools/directions-tool/formatIsoDateTime.js.map +1 -0
  107. package/dist/esm/tools/forward-geocode-tool/ForwardGeocodeTool.d.ts +98 -0
  108. package/dist/esm/tools/forward-geocode-tool/ForwardGeocodeTool.d.ts.map +1 -0
  109. package/dist/{tools → esm/tools}/forward-geocode-tool/ForwardGeocodeTool.js +9 -6
  110. package/dist/esm/tools/forward-geocode-tool/ForwardGeocodeTool.js.map +1 -0
  111. package/dist/esm/tools/isochrone-tool/IsochroneTool.d.ts +60 -0
  112. package/dist/esm/tools/isochrone-tool/IsochroneTool.d.ts.map +1 -0
  113. package/dist/{tools → esm/tools}/isochrone-tool/IsochroneTool.js +8 -5
  114. package/dist/esm/tools/isochrone-tool/IsochroneTool.js.map +1 -0
  115. package/dist/esm/tools/matrix-tool/MatrixTool.d.ts +51 -0
  116. package/dist/esm/tools/matrix-tool/MatrixTool.d.ts.map +1 -0
  117. package/dist/{tools → esm/tools}/matrix-tool/MatrixTool.js +9 -6
  118. package/dist/{tools → esm/tools}/matrix-tool/MatrixTool.js.map +1 -1
  119. package/dist/esm/tools/poi-search-tool/PoiSearchTool.d.ts +119 -0
  120. package/dist/esm/tools/poi-search-tool/PoiSearchTool.d.ts.map +1 -0
  121. package/dist/{tools → esm/tools}/poi-search-tool/PoiSearchTool.js +9 -6
  122. package/dist/esm/tools/poi-search-tool/PoiSearchTool.js.map +1 -0
  123. package/dist/esm/tools/reverse-geocode-tool/ReverseGeocodeTool.d.ts +46 -0
  124. package/dist/esm/tools/reverse-geocode-tool/ReverseGeocodeTool.d.ts.map +1 -0
  125. package/dist/{tools → esm/tools}/reverse-geocode-tool/ReverseGeocodeTool.js +8 -5
  126. package/dist/esm/tools/reverse-geocode-tool/ReverseGeocodeTool.js.map +1 -0
  127. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts +179 -0
  128. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -0
  129. package/dist/{tools → esm/tools}/static-map-image-tool/StaticMapImageTool.js +7 -4
  130. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -0
  131. package/dist/esm/tools/toolRegistry.d.ts +15 -0
  132. package/dist/esm/tools/toolRegistry.d.ts.map +1 -0
  133. package/dist/{tools → esm/tools}/toolRegistry.js +2 -0
  134. package/dist/esm/tools/toolRegistry.js.map +1 -0
  135. package/dist/esm/tools/version-tool/VersionTool.d.ts +18 -0
  136. package/dist/esm/tools/version-tool/VersionTool.d.ts.map +1 -0
  137. package/dist/{tools → esm/tools}/version-tool/VersionTool.js +2 -4
  138. package/dist/esm/tools/version-tool/VersionTool.js.map +1 -0
  139. package/dist/esm/utils/fetchRequest.d.ts +38 -0
  140. package/dist/esm/utils/fetchRequest.d.ts.map +1 -0
  141. package/dist/esm/utils/fetchRequest.js +104 -0
  142. package/dist/esm/utils/fetchRequest.js.map +1 -0
  143. package/dist/esm/utils/versionUtils.d.ts.map +1 -0
  144. package/dist/{utils → esm/utils}/versionUtils.js +9 -7
  145. package/dist/esm/utils/versionUtils.js.map +1 -0
  146. package/dist/esm/version.json +6 -0
  147. package/package.json +49 -30
  148. package/dist/index.d.ts +0 -2
  149. package/dist/index.js +0 -25
  150. package/dist/index.js.map +0 -1
  151. package/dist/tools/MapboxApiBasedTool.d.ts.map +0 -1
  152. package/dist/tools/MapboxApiBasedTool.js.map +0 -1
  153. package/dist/tools/MapboxApiBasedTool.test.d.ts +0 -2
  154. package/dist/tools/MapboxApiBasedTool.test.d.ts.map +0 -1
  155. package/dist/tools/MapboxApiBasedTool.test.js +0 -143
  156. package/dist/tools/MapboxApiBasedTool.test.js.map +0 -1
  157. package/dist/tools/category-search-tool/CategorySearchTool.d.ts.map +0 -1
  158. package/dist/tools/category-search-tool/CategorySearchTool.js +0 -666
  159. package/dist/tools/category-search-tool/CategorySearchTool.js.map +0 -1
  160. package/dist/tools/category-search-tool/CategorySearchTool.test.d.ts +0 -2
  161. package/dist/tools/category-search-tool/CategorySearchTool.test.d.ts.map +0 -1
  162. package/dist/tools/category-search-tool/CategorySearchTool.test.js +0 -369
  163. package/dist/tools/category-search-tool/CategorySearchTool.test.js.map +0 -1
  164. package/dist/tools/directions-tool/DirectionsTool.d.ts.map +0 -1
  165. package/dist/tools/directions-tool/DirectionsTool.js.map +0 -1
  166. package/dist/tools/directions-tool/DirectionsTool.test.d.ts +0 -2
  167. package/dist/tools/directions-tool/DirectionsTool.test.d.ts.map +0 -1
  168. package/dist/tools/directions-tool/DirectionsTool.test.js +0 -822
  169. package/dist/tools/directions-tool/DirectionsTool.test.js.map +0 -1
  170. package/dist/tools/directions-tool/cleanResponseData.d.ts.map +0 -1
  171. package/dist/tools/directions-tool/cleanResponseData.js.map +0 -1
  172. package/dist/tools/directions-tool/cleanResponseData.test.d.ts +0 -2
  173. package/dist/tools/directions-tool/cleanResponseData.test.d.ts.map +0 -1
  174. package/dist/tools/directions-tool/cleanResponseData.test.js +0 -295
  175. package/dist/tools/directions-tool/cleanResponseData.test.js.map +0 -1
  176. package/dist/tools/directions-tool/formatIsoDateTime.d.ts.map +0 -1
  177. package/dist/tools/directions-tool/formatIsoDateTime.js.map +0 -1
  178. package/dist/tools/directions-tool/formatIsoDateTime.test.d.ts +0 -2
  179. package/dist/tools/directions-tool/formatIsoDateTime.test.d.ts.map +0 -1
  180. package/dist/tools/directions-tool/formatIsoDateTime.test.js +0 -26
  181. package/dist/tools/directions-tool/formatIsoDateTime.test.js.map +0 -1
  182. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.d.ts.map +0 -1
  183. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.js.map +0 -1
  184. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.d.ts +0 -2
  185. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.d.ts.map +0 -1
  186. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.js +0 -415
  187. package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.js.map +0 -1
  188. package/dist/tools/isochrone-tool/IsochroneTool.d.ts.map +0 -1
  189. package/dist/tools/isochrone-tool/IsochroneTool.js.map +0 -1
  190. package/dist/tools/isochrone-tool/IsochroneTool.test.d.ts +0 -2
  191. package/dist/tools/isochrone-tool/IsochroneTool.test.d.ts.map +0 -1
  192. package/dist/tools/isochrone-tool/IsochroneTool.test.js +0 -111
  193. package/dist/tools/isochrone-tool/IsochroneTool.test.js.map +0 -1
  194. package/dist/tools/matrix-tool/MatrixTool.d.ts.map +0 -1
  195. package/dist/tools/matrix-tool/MatrixTool.test.d.ts +0 -2
  196. package/dist/tools/matrix-tool/MatrixTool.test.d.ts.map +0 -1
  197. package/dist/tools/matrix-tool/MatrixTool.test.js +0 -816
  198. package/dist/tools/matrix-tool/MatrixTool.test.js.map +0 -1
  199. package/dist/tools/poi-search-tool/PoiSearchTool.d.ts.map +0 -1
  200. package/dist/tools/poi-search-tool/PoiSearchTool.js.map +0 -1
  201. package/dist/tools/poi-search-tool/PoiSearchTool.test.d.ts +0 -2
  202. package/dist/tools/poi-search-tool/PoiSearchTool.test.d.ts.map +0 -1
  203. package/dist/tools/poi-search-tool/PoiSearchTool.test.js +0 -418
  204. package/dist/tools/poi-search-tool/PoiSearchTool.test.js.map +0 -1
  205. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.d.ts.map +0 -1
  206. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.js.map +0 -1
  207. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.d.ts +0 -2
  208. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.d.ts.map +0 -1
  209. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.js +0 -403
  210. package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.js.map +0 -1
  211. package/dist/tools/schema-validation.test.d.ts +0 -2
  212. package/dist/tools/schema-validation.test.d.ts.map +0 -1
  213. package/dist/tools/schema-validation.test.js +0 -75
  214. package/dist/tools/schema-validation.test.js.map +0 -1
  215. package/dist/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +0 -1
  216. package/dist/tools/static-map-image-tool/StaticMapImageTool.js.map +0 -1
  217. package/dist/tools/static-map-image-tool/StaticMapImageTool.test.d.ts +0 -2
  218. package/dist/tools/static-map-image-tool/StaticMapImageTool.test.d.ts.map +0 -1
  219. package/dist/tools/static-map-image-tool/StaticMapImageTool.test.js +0 -441
  220. package/dist/tools/static-map-image-tool/StaticMapImageTool.test.js.map +0 -1
  221. package/dist/tools/tool-naming-convention.test.d.ts +0 -2
  222. package/dist/tools/tool-naming-convention.test.d.ts.map +0 -1
  223. package/dist/tools/tool-naming-convention.test.js +0 -43
  224. package/dist/tools/tool-naming-convention.test.js.map +0 -1
  225. package/dist/tools/toolRegistry.d.ts.map +0 -1
  226. package/dist/tools/toolRegistry.js.map +0 -1
  227. package/dist/tools/version-tool/VersionTool.d.ts.map +0 -1
  228. package/dist/tools/version-tool/VersionTool.js.map +0 -1
  229. package/dist/tools/version-tool/VersionTool.test.d.ts +0 -2
  230. package/dist/tools/version-tool/VersionTool.test.d.ts.map +0 -1
  231. package/dist/tools/version-tool/VersionTool.test.js +0 -49
  232. package/dist/tools/version-tool/VersionTool.test.js.map +0 -1
  233. package/dist/utils/requestUtils.d.ts +0 -6
  234. package/dist/utils/requestUtils.d.ts.map +0 -1
  235. package/dist/utils/requestUtils.js +0 -60
  236. package/dist/utils/requestUtils.js.map +0 -1
  237. package/dist/utils/requestUtils.test-helpers.d.ts +0 -3
  238. package/dist/utils/requestUtils.test-helpers.d.ts.map +0 -1
  239. package/dist/utils/requestUtils.test-helpers.js +0 -32
  240. package/dist/utils/requestUtils.test-helpers.js.map +0 -1
  241. package/dist/utils/requestUtils.test.d.ts +0 -2
  242. package/dist/utils/requestUtils.test.d.ts.map +0 -1
  243. package/dist/utils/requestUtils.test.js +0 -115
  244. package/dist/utils/requestUtils.test.js.map +0 -1
  245. package/dist/utils/versionUtils.d.ts.map +0 -1
  246. package/dist/utils/versionUtils.js.map +0 -1
  247. package/dist/version.json +0 -6
  248. /package/dist/{tools → commonjs/tools}/directions-tool/formatIsoDateTime.d.ts +0 -0
  249. /package/dist/{tools → esm/tools}/directions-tool/cleanResponseData.js +0 -0
  250. /package/dist/{tools → esm/tools}/directions-tool/formatIsoDateTime.js +0 -0
  251. /package/dist/{utils → esm/utils}/versionUtils.d.ts +0 -0
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cleanResponseData = cleanResponseData;
4
+ /**
5
+ * Cleans up the API response to reduce token count while preserving useful data.
6
+ *
7
+ * @param input The original input parameters used for the request
8
+ * @param data The raw response data from the Mapbox Directions API
9
+ * @returns Cleaned data with reduced token count
10
+ */
11
+ function cleanResponseData(input, data) {
12
+ // Remove unnecessary keys to reduce token count
13
+ if ('uuid' in data) {
14
+ delete data.uuid;
15
+ }
16
+ if ('code' in data) {
17
+ delete data.code;
18
+ }
19
+ if ('waypoints' in data) {
20
+ // rename each waypoint's location to `snap_location` and distance to `snap_distance`
21
+ // this is not really necessary, but hopefully agents will find this more obvious that we have snapping
22
+ data.waypoints = data.waypoints.map((waypoint) => {
23
+ const updatedWaypoint = { ...waypoint };
24
+ if ('location' in updatedWaypoint) {
25
+ updatedWaypoint.snap_location = updatedWaypoint.location;
26
+ delete updatedWaypoint.location;
27
+ }
28
+ if ('distance' in updatedWaypoint) {
29
+ updatedWaypoint.snap_distance = Math.round(updatedWaypoint.distance);
30
+ delete updatedWaypoint.distance;
31
+ }
32
+ return updatedWaypoint;
33
+ });
34
+ }
35
+ if (!('routes' in data)) {
36
+ // lets return early because there is nothing more we could do here
37
+ return data;
38
+ }
39
+ data.routes.forEach((route) => {
40
+ // Round duration and distance to integers if they exist
41
+ if (route.duration !== undefined) {
42
+ route.duration = Math.round(route.duration);
43
+ }
44
+ if (route.distance !== undefined) {
45
+ route.distance = Math.round(route.distance);
46
+ }
47
+ delete route.weight_name;
48
+ delete route.weight;
49
+ // Handle the case where geometry is not included (when geometries='none')
50
+ if (input.geometries === 'none' && route.geometry) {
51
+ delete route.geometry;
52
+ }
53
+ route.leg_summaries = route.legs.map((leg) => leg.summary);
54
+ // Collect all unique admins across all legs of this route
55
+ const routeUniqueIsoCodes = new Set();
56
+ // Collect all unique notification messages across all legs of this route
57
+ const routeUniqueNotificationMessages = new Set();
58
+ // Collect all incidents across all legs of this route
59
+ const routeIncidents = [];
60
+ // Collect voice instruction announcements from all steps
61
+ const routeAnnouncements = [];
62
+ let totalDistanceWeightedSpeed = 0; // Sum of (speed × distance) for each segment
63
+ let sumDistanceMeters = 0;
64
+ // Object to track distance by congestion type
65
+ const congestionTypeToDistance = {
66
+ severe: 0,
67
+ heavy: 0,
68
+ moderate: 0,
69
+ low: 0
70
+ };
71
+ route.legs.forEach((leg) => {
72
+ if (leg.annotation && leg.annotation.speed && leg.annotation.distance) {
73
+ leg.annotation.speed.forEach((speed, index) => {
74
+ const speedValue = parseFloat(String(speed));
75
+ const distance = parseFloat(String(leg.annotation.distance[index]));
76
+ // Calculate the weighted speed (speed * distance)
77
+ totalDistanceWeightedSpeed += speedValue * distance;
78
+ sumDistanceMeters += distance;
79
+ });
80
+ }
81
+ if (leg.annotation &&
82
+ leg.annotation.congestion &&
83
+ leg.annotation.distance) {
84
+ // iterate every congestion string in leg.annotation.congestion
85
+ // each string is one of `severe, heavy, moderate, low, unknown`
86
+ // keep track of total distance by type of congestion
87
+ leg.annotation.congestion.forEach((congestion, index) => {
88
+ const distance = parseFloat(String(leg.annotation.distance[index]));
89
+ if (congestion === 'severe' ||
90
+ congestion === 'heavy' ||
91
+ congestion === 'moderate' ||
92
+ congestion === 'low') {
93
+ congestionTypeToDistance[congestion] += distance;
94
+ }
95
+ // Skip 'unknown' congestion type
96
+ });
97
+ }
98
+ if (leg.admins && Array.isArray(leg.admins)) {
99
+ // Extract unique ISO codes from this leg
100
+ leg.admins.forEach((admin) => {
101
+ if (admin.iso_3166_1_alpha3) {
102
+ routeUniqueIsoCodes.add(admin.iso_3166_1_alpha3);
103
+ }
104
+ });
105
+ }
106
+ // Process notifications if they exist
107
+ if (leg.notifications && Array.isArray(leg.notifications)) {
108
+ // Extract unique notification messages from this leg
109
+ leg.notifications.forEach((notification) => {
110
+ if (notification.details && notification.details.message) {
111
+ routeUniqueNotificationMessages.add(notification.details.message);
112
+ }
113
+ });
114
+ }
115
+ // Process incidents if they exist
116
+ if (leg.incidents && Array.isArray(leg.incidents)) {
117
+ leg.incidents.forEach((incident) => {
118
+ // Extract only the specified fields for each incident
119
+ routeIncidents.push({
120
+ type: incident.type,
121
+ end_time: incident.end_time,
122
+ long_description: incident.long_description,
123
+ impact: incident.impact,
124
+ affected_road_names: incident.affected_road_names,
125
+ length: incident.length
126
+ });
127
+ });
128
+ }
129
+ // Process steps if they exist to collect voice instructions
130
+ if (leg.steps && Array.isArray(leg.steps)) {
131
+ leg.steps.forEach((step) => {
132
+ if (step.voiceInstructions && Array.isArray(step.voiceInstructions)) {
133
+ step.voiceInstructions.forEach((instruction) => {
134
+ if (instruction.announcement) {
135
+ routeAnnouncements.push(instruction.announcement);
136
+ }
137
+ });
138
+ }
139
+ });
140
+ }
141
+ }); // Add all unique admins as a new property on the route
142
+ route.intersecting_admins = Array.from(routeUniqueIsoCodes);
143
+ // Add all unique notification messages as a new property on the route
144
+ route.notifications_summary = Array.from(routeUniqueNotificationMessages);
145
+ // Add all incidents with the specified fields as a new property on the route
146
+ route.incidents_summary = routeIncidents;
147
+ // Add voice instruction announcements only if there are 1 to 10 of them
148
+ // If there are more than 10, it's just too many, and if there is 0 then we don't have them.
149
+ if (routeAnnouncements.length >= 1 && routeAnnouncements.length <= 10) {
150
+ route.instructions = routeAnnouncements;
151
+ }
152
+ route.num_legs = route.legs.length;
153
+ // Add congestion distance information to route
154
+ route.congestion_information = {
155
+ length_low: Math.round(congestionTypeToDistance.low),
156
+ length_moderate: Math.round(congestionTypeToDistance.moderate),
157
+ length_heavy: Math.round(congestionTypeToDistance.heavy),
158
+ length_severe: Math.round(congestionTypeToDistance.severe)
159
+ };
160
+ // Calculate and add average speed in km/h
161
+ if (sumDistanceMeters > 0 && totalDistanceWeightedSpeed > 0) {
162
+ // Calculate distance-weighted average speed
163
+ const averageMetersPerSecond = totalDistanceWeightedSpeed / sumDistanceMeters;
164
+ // Convert m/s to km/h (multiply by 3.6) and round to integer
165
+ route.average_speed_kph = Math.round(averageMetersPerSecond * 3.6);
166
+ }
167
+ if (route.duration_typical) {
168
+ route.duration_under_typical_traffic_conditions = Math.round(route.duration_typical);
169
+ delete route.duration_typical;
170
+ }
171
+ if (route.weight_typical) {
172
+ delete route.weight_typical;
173
+ }
174
+ delete route.legs;
175
+ });
176
+ return data;
177
+ }
178
+ //# sourceMappingURL=cleanResponseData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanResponseData.js","sourceRoot":"","sources":["../../../../src/tools/directions-tool/cleanResponseData.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatIsoDateTime.d.ts","sourceRoot":"","sources":["../../../../src/tools/directions-tool/formatIsoDateTime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,KAAG,MAWpD,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatIsoDateTime = void 0;
4
+ /**
5
+ * Helper function to format ISO datetime strings according to Mapbox API requirements.
6
+ * It converts the format YYYY-MM-DDThh:mm:ss (with seconds but no timezone) to
7
+ * YYYY-MM-DDThh:mm (no seconds, no timezone) by removing the seconds part.
8
+ * Other valid formats are left unchanged.
9
+ */
10
+ const formatIsoDateTime = (dateTime) => {
11
+ // Regex for matching YYYY-MM-DDThh:mm:ss format (with seconds but no timezone)
12
+ const dateWithSecondsNoTz = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/;
13
+ if (dateWithSecondsNoTz.test(dateTime)) {
14
+ // Extract up to the minutes part only, dropping the seconds
15
+ return dateTime.substring(0, dateTime.lastIndexOf(':'));
16
+ }
17
+ // Return unchanged if it's already in a valid format
18
+ return dateTime;
19
+ };
20
+ exports.formatIsoDateTime = formatIsoDateTime;
21
+ //# sourceMappingURL=formatIsoDateTime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatIsoDateTime.js","sourceRoot":"","sources":["../../../../src/tools/directions-tool/formatIsoDateTime.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC5D,+EAA+E;IAC/E,MAAM,mBAAmB,GAAG,uCAAuC,CAAC;IAEpE,IAAI,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,4DAA4D;QAC5D,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,qDAAqD;IACrD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAXW,QAAA,iBAAiB,qBAW5B"}
@@ -46,7 +46,6 @@ declare const ForwardGeocodeInputSchema: z.ZodObject<{
46
46
  permanent: boolean;
47
47
  autocomplete: boolean;
48
48
  worldview: "us" | "cn" | "jp" | "in";
49
- country?: string[] | undefined;
50
49
  language?: string | undefined;
51
50
  proximity?: "ip" | {
52
51
  longitude: number;
@@ -61,10 +60,10 @@ declare const ForwardGeocodeInputSchema: z.ZodObject<{
61
60
  maxLongitude: number;
62
61
  maxLatitude: number;
63
62
  } | undefined;
63
+ country?: string[] | undefined;
64
64
  types?: ("country" | "region" | "postcode" | "district" | "place" | "locality" | "neighborhood" | "address")[] | undefined;
65
65
  }, {
66
66
  q: string;
67
- country?: string[] | undefined;
68
67
  language?: string | undefined;
69
68
  limit?: number | undefined;
70
69
  proximity?: string | {
@@ -77,6 +76,7 @@ declare const ForwardGeocodeInputSchema: z.ZodObject<{
77
76
  maxLongitude: number;
78
77
  maxLatitude: number;
79
78
  } | undefined;
79
+ country?: string[] | undefined;
80
80
  format?: "json_string" | "formatted_text" | undefined;
81
81
  permanent?: boolean | undefined;
82
82
  autocomplete?: boolean | undefined;
@@ -84,11 +84,12 @@ declare const ForwardGeocodeInputSchema: z.ZodObject<{
84
84
  worldview?: "us" | "cn" | "jp" | "in" | undefined;
85
85
  }>;
86
86
  export declare class ForwardGeocodeTool extends MapboxApiBasedTool<typeof ForwardGeocodeInputSchema> {
87
+ private fetch;
87
88
  name: string;
88
89
  description: string;
89
- constructor();
90
+ constructor(fetch?: typeof globalThis.fetch);
90
91
  private formatGeoJsonToText;
91
- protected execute(input: z.infer<typeof ForwardGeocodeInputSchema>): Promise<{
92
+ protected execute(input: z.infer<typeof ForwardGeocodeInputSchema>, accessToken: string): Promise<{
92
93
  type: 'text';
93
94
  text: string;
94
95
  }>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForwardGeocodeTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/forward-geocode-tool/ForwardGeocodeTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiI7B,CAAC;AAEH,qBAAa,kBAAmB,SAAQ,kBAAkB,CACxD,OAAO,yBAAyB,CACjC;IAKa,OAAO,CAAC,KAAK;IAJzB,IAAI,SAA0B;IAC9B,WAAW,SAC4Z;gBAEnZ,KAAK,GAAE,OAAO,UAAU,CAAC,KAAmB;IAIhE,OAAO,CAAC,mBAAmB;cA+CX,OAAO,CACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,EAChD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAmE3C"}
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ForwardGeocodeTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const MapboxApiBasedTool_js_1 = require("../MapboxApiBasedTool.js");
6
+ const fetchRequest_js_1 = require("../../utils/fetchRequest.js");
7
+ const ForwardGeocodeInputSchema = zod_1.z.object({
8
+ q: zod_1.z
9
+ .string()
10
+ .max(256)
11
+ .refine((val) => !val.includes(';'), 'Search text cannot contain semicolons')
12
+ .refine((val) => val.split(/\s+/).length <= 20, 'Search text cannot exceed 20 words')
13
+ .describe('Search text to geocode. Max 256 characters, 20 words, no semicolons.'),
14
+ permanent: zod_1.z
15
+ .boolean()
16
+ .optional()
17
+ .default(false)
18
+ .describe('Whether results can be stored permanently'),
19
+ autocomplete: zod_1.z
20
+ .boolean()
21
+ .optional()
22
+ .default(true)
23
+ .describe('Return partial/suggested results for partial queries'),
24
+ bbox: zod_1.z
25
+ .object({
26
+ minLongitude: zod_1.z.number().min(-180).max(180),
27
+ minLatitude: zod_1.z.number().min(-90).max(90),
28
+ maxLongitude: zod_1.z.number().min(-180).max(180),
29
+ maxLatitude: zod_1.z.number().min(-90).max(90)
30
+ })
31
+ .optional()
32
+ .describe('Bounding box to limit results within specified bounds'),
33
+ country: zod_1.z
34
+ .array(zod_1.z.string().length(2))
35
+ .optional()
36
+ .describe('Array of ISO 3166 alpha 2 country codes to limit results'),
37
+ format: zod_1.z
38
+ .enum(['json_string', 'formatted_text'])
39
+ .optional()
40
+ .default('formatted_text')
41
+ .describe('Output format: "json_string" returns raw GeoJSON data as a JSON string that can be parsed; "formatted_text" returns human-readable text with place names, addresses, and coordinates. Both return as text content but json_string contains parseable JSON data while formatted_text is for display.'),
42
+ language: zod_1.z
43
+ .string()
44
+ .optional()
45
+ .describe('IETF language tag for the response (e.g., "en", "es", "fr", "de", "ja")'),
46
+ limit: zod_1.z
47
+ .number()
48
+ .min(1)
49
+ .max(10)
50
+ .optional()
51
+ .default(5)
52
+ .describe('Maximum number of results to return (1-10)'),
53
+ proximity: zod_1.z
54
+ .union([
55
+ zod_1.z.object({
56
+ longitude: zod_1.z.number().min(-180).max(180),
57
+ latitude: zod_1.z.number().min(-90).max(90)
58
+ }),
59
+ zod_1.z.string().transform((val) => {
60
+ // Handle special case of 'ip'
61
+ if (val === 'ip') {
62
+ return 'ip';
63
+ }
64
+ // Handle JSON-stringified object: "{\"longitude\": -82.458107, \"latitude\": 27.937259}"
65
+ if (val.startsWith('{') && val.endsWith('}')) {
66
+ try {
67
+ const parsed = JSON.parse(val);
68
+ if (typeof parsed === 'object' &&
69
+ parsed !== null &&
70
+ typeof parsed.longitude === 'number' &&
71
+ typeof parsed.latitude === 'number') {
72
+ return { longitude: parsed.longitude, latitude: parsed.latitude };
73
+ }
74
+ }
75
+ catch {
76
+ // Fall back to other formats
77
+ }
78
+ }
79
+ // Handle string that looks like an array: "[-82.451668, 27.942964]"
80
+ if (val.startsWith('[') && val.endsWith(']')) {
81
+ const coords = val
82
+ .slice(1, -1)
83
+ .split(',')
84
+ .map((s) => Number(s.trim()));
85
+ if (coords.length === 2 && !isNaN(coords[0]) && !isNaN(coords[1])) {
86
+ return { longitude: coords[0], latitude: coords[1] };
87
+ }
88
+ }
89
+ // Handle comma-separated string: "-82.451668,27.942964"
90
+ const parts = val.split(',').map((s) => Number(s.trim()));
91
+ if (parts.length === 2 && !isNaN(parts[0]) && !isNaN(parts[1])) {
92
+ return { longitude: parts[0], latitude: parts[1] };
93
+ }
94
+ throw new Error('Invalid proximity format. Expected {longitude, latitude}, "longitude,latitude", or "ip"');
95
+ })
96
+ ])
97
+ .optional()
98
+ .describe('Location to bias results towards. Either [longitude, latitude] coordinates or "ip" for IP-based location. Can help get more relevant results when searching in a specific area.'),
99
+ types: zod_1.z
100
+ .array(zod_1.z.enum([
101
+ 'country',
102
+ 'region',
103
+ 'postcode',
104
+ 'district',
105
+ 'place',
106
+ 'locality',
107
+ 'neighborhood',
108
+ 'address'
109
+ ]))
110
+ .optional()
111
+ .describe('Array of feature types to filter results'),
112
+ worldview: zod_1.z
113
+ .enum(['us', 'cn', 'jp', 'in'])
114
+ .optional()
115
+ .default('us')
116
+ .describe('Returns features from a specific regional perspective')
117
+ });
118
+ class ForwardGeocodeTool extends MapboxApiBasedTool_js_1.MapboxApiBasedTool {
119
+ fetch;
120
+ name = 'forward_geocode_tool';
121
+ description = 'This tool converts addresses, cities, towns, neighborhoods, districts, postcodes, regions, and countries into geographic coordinates using Mapbox Geocoding API v6. Setting a proximity point helps to bias results towards a specific area for more relevant results. Do not use this tool for geocoding points of interest like businesses, landmarks, historic sites, museums, etc. Supports both JSON and text output formats.';
122
+ constructor(fetch = fetchRequest_js_1.fetchClient) {
123
+ super({ inputSchema: ForwardGeocodeInputSchema });
124
+ this.fetch = fetch;
125
+ }
126
+ formatGeoJsonToText(geoJsonResponse) {
127
+ if (!geoJsonResponse ||
128
+ !geoJsonResponse.features ||
129
+ geoJsonResponse.features.length === 0) {
130
+ return 'No results found.';
131
+ }
132
+ const results = geoJsonResponse.features.map((feature, index) => {
133
+ const props = feature.properties || {};
134
+ const geom = feature.geometry || {};
135
+ let result = `${index + 1}. `;
136
+ // Place name
137
+ result += `${props.name}`;
138
+ if (props.name_preferred) {
139
+ result += ` (${props.name_preferred})`;
140
+ }
141
+ // Full address
142
+ if (props.full_address) {
143
+ result += `\n Address: ${props.full_address}`;
144
+ }
145
+ else if (props.place_formatted) {
146
+ result += `\n Address: ${props.place_formatted}`;
147
+ }
148
+ // Geographic coordinates
149
+ if (geom.coordinates && Array.isArray(geom.coordinates)) {
150
+ const [lng, lat] = geom.coordinates;
151
+ result += `\n Coordinates: ${lat}, ${lng}`;
152
+ }
153
+ // Feature type
154
+ if (props.feature_type) {
155
+ result += `\n Type: ${props.feature_type}`;
156
+ }
157
+ return result;
158
+ });
159
+ return results.join('\n\n');
160
+ }
161
+ async execute(input, accessToken) {
162
+ const url = new URL(`${MapboxApiBasedTool_js_1.MapboxApiBasedTool.mapboxApiEndpoint}search/geocode/v6/forward`);
163
+ // Required parameters
164
+ url.searchParams.append('q', input.q);
165
+ url.searchParams.append('access_token', accessToken);
166
+ // Optional parameters
167
+ url.searchParams.append('permanent', input.permanent.toString());
168
+ url.searchParams.append('autocomplete', input.autocomplete.toString());
169
+ url.searchParams.append('format', 'geojson');
170
+ url.searchParams.append('limit', input.limit.toString());
171
+ url.searchParams.append('worldview', input.worldview);
172
+ if (input.bbox) {
173
+ const { minLongitude, minLatitude, maxLongitude, maxLatitude } = input.bbox;
174
+ url.searchParams.append('bbox', `${minLongitude},${minLatitude},${maxLongitude},${maxLatitude}`);
175
+ }
176
+ if (input.country && input.country.length > 0) {
177
+ url.searchParams.append('country', input.country.join(','));
178
+ }
179
+ if (input.language) {
180
+ url.searchParams.append('language', input.language);
181
+ }
182
+ if (input.proximity) {
183
+ if (input.proximity === 'ip') {
184
+ url.searchParams.append('proximity', 'ip');
185
+ }
186
+ else {
187
+ const { longitude, latitude } = input.proximity;
188
+ url.searchParams.append('proximity', `${longitude},${latitude}`);
189
+ }
190
+ }
191
+ if (input.types && input.types.length > 0) {
192
+ url.searchParams.append('types', input.types.join(','));
193
+ }
194
+ const response = await this.fetch(url.toString());
195
+ if (!response.ok) {
196
+ throw new Error(`Failed to geocode: ${response.status} ${response.statusText}`);
197
+ }
198
+ const data = (await response.json());
199
+ // Check if the response has features
200
+ if (!data || !data.features || data.features.length === 0) {
201
+ return { type: 'text', text: 'No results found.' };
202
+ }
203
+ if (input.format === 'json_string') {
204
+ return { type: 'text', text: JSON.stringify(data, null, 2) };
205
+ }
206
+ else {
207
+ return { type: 'text', text: this.formatGeoJsonToText(data) };
208
+ }
209
+ }
210
+ }
211
+ exports.ForwardGeocodeTool = ForwardGeocodeTool;
212
+ //# sourceMappingURL=ForwardGeocodeTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForwardGeocodeTool.js","sourceRoot":"","sources":["../../../../src/tools/forward-geocode-tool/ForwardGeocodeTool.ts"],"names":[],"mappings":"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"}
@@ -52,8 +52,9 @@ declare const IsochroneInputSchema: z.ZodObject<{
52
52
  export declare class IsochroneTool extends MapboxApiBasedTool<typeof IsochroneInputSchema> {
53
53
  name: string;
54
54
  description: string;
55
- constructor();
56
- protected execute(input: z.infer<typeof IsochroneInputSchema>): Promise<any>;
55
+ private fetch;
56
+ constructor(fetch?: typeof globalThis.fetch);
57
+ protected execute(input: z.infer<typeof IsochroneInputSchema>, accessToken: string): Promise<any>;
57
58
  }
58
59
  export {};
59
60
  //# sourceMappingURL=IsochroneTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IsochroneTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/isochrone-tool/IsochroneTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgFxB,CAAC;AAEH,qBAAa,aAAc,SAAQ,kBAAkB,CACnD,OAAO,oBAAoB,CAC5B;IACC,IAAI,SAAoB;IACxB,WAAW,SAIuD;IAElE,OAAO,CAAC,KAAK,CAA0B;gBAE3B,KAAK,GAAE,OAAO,UAAU,CAAC,KAAmB;cAKxC,OAAO,CACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,EAC3C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,GAAG,CAAC;CA0DhB"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsochroneTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const MapboxApiBasedTool_js_1 = require("../MapboxApiBasedTool.js");
6
+ const fetchRequest_js_1 = require("../../utils/fetchRequest.js");
7
+ const IsochroneInputSchema = zod_1.z.object({
8
+ profile: zod_1.z
9
+ .enum([
10
+ 'mapbox/driving-traffic',
11
+ 'mapbox/driving',
12
+ 'mapbox/cycling',
13
+ 'mapbox/walking'
14
+ ])
15
+ .default('mapbox/driving-traffic')
16
+ .describe('Mode of travel.'),
17
+ coordinates: zod_1.z
18
+ .object({
19
+ longitude: zod_1.z.number().min(-180).max(180),
20
+ latitude: zod_1.z.number().min(-90).max(90)
21
+ })
22
+ .describe('A coordinate object with longitude and latitude properties around which to center the isochrone lines. Longitude: -180 to 180, Latitude: -85.0511 to 85.0511'),
23
+ contours_minutes: zod_1.z
24
+ .array(zod_1.z.number().int().min(1).max(60))
25
+ .max(4)
26
+ .optional()
27
+ .describe('Contour times in minutes. Times must be in increasing order. Must be specified either contours_minutes or contours_meters.'),
28
+ contours_meters: zod_1.z
29
+ .array(zod_1.z.number().int().min(1).max(100000))
30
+ .max(4)
31
+ .optional()
32
+ .describe('Distances in meters. Distances must be in increasing order. Must be specified either contours_minutes or contours_meters.'),
33
+ contours_colors: zod_1.z
34
+ .array(zod_1.z.string().regex(/^[0-9a-fA-F]{6}$/))
35
+ .max(4)
36
+ .optional()
37
+ .describe('Contour colors as hex strings without starting # (for example ff0000 for red. must match contours_minutes or contours_meters length if provided).'),
38
+ polygons: zod_1.z
39
+ .boolean()
40
+ .default(false)
41
+ .optional()
42
+ .describe('Whether to return Polygons (true) or LineStrings (false).'),
43
+ denoise: zod_1.z
44
+ .number()
45
+ .min(0)
46
+ .max(1)
47
+ .default(1)
48
+ .optional()
49
+ .describe('A floating point value that can be used to remove smaller contours. A value of 1.0 will only return the largest contour for a given value.'),
50
+ generalize: zod_1.z
51
+ .number()
52
+ .min(0)
53
+ .describe(`Positive number in meters that is used to simplify geometries.
54
+ - Walking: use 0-500. Prefer 50-200 for short contours (minutes < 10 or meters < 5000), 300-500 as they grow.
55
+ - Driving: use 1000-5000. Start at 2000, use 3000 if minutes > 10 or meters > 20000. Use 4000-5000 if near 60 minutes or 100000 meters.
56
+ `.trim()),
57
+ exclude: zod_1.z
58
+ .array(zod_1.z.enum(['motorway', 'toll', 'ferry', 'unpaved', 'cash_only_tolls']))
59
+ .optional()
60
+ .describe('Exclude certain road types and custom locations from routing.'),
61
+ depart_at: zod_1.z
62
+ .string()
63
+ .optional()
64
+ .describe('An ISO 8601 date-time string representing the time to depart (format string: YYYY-MM-DDThh:mmss±hh:mm).')
65
+ });
66
+ class IsochroneTool extends MapboxApiBasedTool_js_1.MapboxApiBasedTool {
67
+ name = 'isochrone_tool';
68
+ description = `Computes areas that are reachable within a specified amount of time from a location, and returns the reachable regions as contours of Polygons or LineStrings in GeoJSON format that you can display on a map.
69
+ Common use cases:
70
+ - Show a user how far they can travel in X minutes from their current location
71
+ - Determine whether a destination is within a certain travel time threshold
72
+ - Compare travel ranges for different modes of transportation'`;
73
+ fetch;
74
+ constructor(fetch = fetchRequest_js_1.fetchClient) {
75
+ super({ inputSchema: IsochroneInputSchema });
76
+ this.fetch = fetch;
77
+ }
78
+ async execute(input, accessToken) {
79
+ const url = new URL(`${MapboxApiBasedTool_js_1.MapboxApiBasedTool.mapboxApiEndpoint}isochrone/v1/${input.profile}/${input.coordinates.longitude}%2C${input.coordinates.latitude}`);
80
+ url.searchParams.append('access_token', accessToken);
81
+ if ((!input.contours_minutes || input.contours_minutes.length === 0) &&
82
+ (!input.contours_meters || input.contours_meters.length === 0)) {
83
+ throw new Error("At least one of 'contours_minutes' or 'contours_meters' must be provided");
84
+ }
85
+ if (input.contours_minutes && input.contours_minutes.length > 0) {
86
+ url.searchParams.append('contours_minutes', input.contours_minutes.join(','));
87
+ }
88
+ if (input.contours_meters && input.contours_meters.length > 0) {
89
+ url.searchParams.append('contours_meters', input.contours_meters?.join(','));
90
+ }
91
+ if (input.contours_colors && input.contours_colors.length > 0) {
92
+ url.searchParams.append('contours_colors', input.contours_colors.join(','));
93
+ }
94
+ if (input.polygons) {
95
+ url.searchParams.append('polygons', String(input.polygons));
96
+ }
97
+ if (input.denoise) {
98
+ url.searchParams.append('denoise', String(input.denoise));
99
+ }
100
+ if (input.generalize) {
101
+ url.searchParams.append('generalize', String(input.generalize));
102
+ }
103
+ if (input.exclude && input.exclude.length > 0) {
104
+ url.searchParams.append('exclude', input.exclude.join(','));
105
+ }
106
+ if (input.depart_at) {
107
+ url.searchParams.append('depart_at', input.depart_at);
108
+ }
109
+ const response = await this.fetch(url);
110
+ if (!response.ok) {
111
+ throw new Error(`Failed to calculate isochrones: ${response.status} ${response.statusText}`);
112
+ }
113
+ const data = await response.json();
114
+ return data;
115
+ }
116
+ }
117
+ exports.IsochroneTool = IsochroneTool;
118
+ //# sourceMappingURL=IsochroneTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IsochroneTool.js","sourceRoot":"","sources":["../../../../src/tools/isochrone-tool/IsochroneTool.ts"],"names":[],"mappings":"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"}