@mapbox/mcp-server 0.12.7 → 0.13.0-dev

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 (369) hide show
  1. package/dist/commonjs/config/toolConfig.d.ts +0 -10
  2. package/dist/commonjs/config/toolConfig.d.ts.map +1 -1
  3. package/dist/commonjs/config/toolConfig.js +0 -36
  4. package/dist/commonjs/config/toolConfig.js.map +1 -1
  5. package/dist/commonjs/resources/compute/ComputeResource.d.ts +20 -0
  6. package/dist/commonjs/resources/compute/ComputeResource.d.ts.map +1 -0
  7. package/dist/commonjs/resources/compute/ComputeResource.js +49 -0
  8. package/dist/commonjs/resources/compute/ComputeResource.js.map +1 -0
  9. package/dist/commonjs/resources/inline-payload/InlinePayloadResource.d.ts +17 -0
  10. package/dist/commonjs/resources/inline-payload/InlinePayloadResource.d.ts.map +1 -0
  11. package/dist/commonjs/resources/inline-payload/InlinePayloadResource.js +46 -0
  12. package/dist/commonjs/resources/inline-payload/InlinePayloadResource.js.map +1 -0
  13. package/dist/commonjs/resources/resourceRegistry.d.ts +4 -2
  14. package/dist/commonjs/resources/resourceRegistry.d.ts.map +1 -1
  15. package/dist/commonjs/resources/resourceRegistry.js +16 -6
  16. package/dist/commonjs/resources/resourceRegistry.js.map +1 -1
  17. package/dist/commonjs/resources/ui-apps/MapAppUIResource.d.ts +27 -0
  18. package/dist/commonjs/resources/ui-apps/MapAppUIResource.d.ts.map +1 -0
  19. package/dist/commonjs/resources/ui-apps/{DirectionsAppUIResource.js → MapAppUIResource.js} +15 -17
  20. package/dist/commonjs/resources/ui-apps/MapAppUIResource.js.map +1 -0
  21. package/dist/commonjs/resources/ui-apps/mapAppHtml.d.ts +19 -0
  22. package/dist/commonjs/resources/ui-apps/mapAppHtml.d.ts.map +1 -0
  23. package/dist/commonjs/resources/ui-apps/mapAppHtml.js +1621 -0
  24. package/dist/commonjs/resources/ui-apps/mapAppHtml.js.map +1 -0
  25. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.d.ts.map +1 -1
  26. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.js +46 -41
  27. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.js.map +1 -1
  28. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.output.schema.d.ts +6 -3
  29. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.output.schema.d.ts.map +1 -1
  30. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.output.schema.js +3 -1
  31. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.output.schema.js.map +1 -1
  32. package/dist/commonjs/tools/category-search-tool/buildCategorySearchRequestUrl.d.ts +30 -0
  33. package/dist/commonjs/tools/category-search-tool/buildCategorySearchRequestUrl.d.ts.map +1 -0
  34. package/dist/commonjs/tools/category-search-tool/buildCategorySearchRequestUrl.js +39 -0
  35. package/dist/commonjs/tools/category-search-tool/buildCategorySearchRequestUrl.js.map +1 -0
  36. package/dist/commonjs/tools/difference-tool/DifferenceTool.d.ts.map +1 -1
  37. package/dist/commonjs/tools/difference-tool/DifferenceTool.js +19 -3
  38. package/dist/commonjs/tools/difference-tool/DifferenceTool.js.map +1 -1
  39. package/dist/commonjs/tools/difference-tool/DifferenceTool.output.schema.d.ts +4 -1
  40. package/dist/commonjs/tools/difference-tool/DifferenceTool.output.schema.d.ts.map +1 -1
  41. package/dist/commonjs/tools/difference-tool/DifferenceTool.output.schema.js +7 -3
  42. package/dist/commonjs/tools/difference-tool/DifferenceTool.output.schema.js.map +1 -1
  43. package/dist/commonjs/tools/directions-tool/DirectionsTool.d.ts +0 -9
  44. package/dist/commonjs/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
  45. package/dist/commonjs/tools/directions-tool/DirectionsTool.input.schema.d.ts.map +1 -1
  46. package/dist/commonjs/tools/directions-tool/DirectionsTool.input.schema.js +9 -4
  47. package/dist/commonjs/tools/directions-tool/DirectionsTool.input.schema.js.map +1 -1
  48. package/dist/commonjs/tools/directions-tool/DirectionsTool.js +40 -78
  49. package/dist/commonjs/tools/directions-tool/DirectionsTool.js.map +1 -1
  50. package/dist/commonjs/tools/directions-tool/DirectionsTool.output.schema.d.ts +4 -1
  51. package/dist/commonjs/tools/directions-tool/DirectionsTool.output.schema.d.ts.map +1 -1
  52. package/dist/commonjs/tools/directions-tool/DirectionsTool.output.schema.js +10 -4
  53. package/dist/commonjs/tools/directions-tool/DirectionsTool.output.schema.js.map +1 -1
  54. package/dist/commonjs/tools/directions-tool/buildDirectionsRequestUrl.d.ts +2 -2
  55. package/dist/commonjs/tools/directions-tool/buildDirectionsRequestUrl.d.ts.map +1 -1
  56. package/dist/commonjs/tools/directions-tool/buildDirectionsRequestUrl.js +4 -12
  57. package/dist/commonjs/tools/directions-tool/buildDirectionsRequestUrl.js.map +1 -1
  58. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.d.ts.map +1 -1
  59. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.js +52 -18
  60. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.js.map +1 -1
  61. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts +4 -1
  62. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts.map +1 -1
  63. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.js +7 -3
  64. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.js.map +1 -1
  65. package/dist/commonjs/tools/ground-location-tool/buildReverseGeocodeUrl.d.ts +19 -0
  66. package/dist/commonjs/tools/ground-location-tool/buildReverseGeocodeUrl.d.ts.map +1 -0
  67. package/dist/commonjs/tools/ground-location-tool/buildReverseGeocodeUrl.js +26 -0
  68. package/dist/commonjs/tools/ground-location-tool/buildReverseGeocodeUrl.js.map +1 -0
  69. package/dist/commonjs/tools/intersect-tool/IntersectTool.d.ts.map +1 -1
  70. package/dist/commonjs/tools/intersect-tool/IntersectTool.js +19 -3
  71. package/dist/commonjs/tools/intersect-tool/IntersectTool.js.map +1 -1
  72. package/dist/commonjs/tools/intersect-tool/IntersectTool.output.schema.d.ts +4 -1
  73. package/dist/commonjs/tools/intersect-tool/IntersectTool.output.schema.d.ts.map +1 -1
  74. package/dist/commonjs/tools/intersect-tool/IntersectTool.output.schema.js +7 -3
  75. package/dist/commonjs/tools/intersect-tool/IntersectTool.output.schema.js.map +1 -1
  76. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.d.ts.map +1 -1
  77. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.js +51 -47
  78. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.js.map +1 -1
  79. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.output.schema.d.ts +4 -5
  80. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.output.schema.d.ts.map +1 -1
  81. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.output.schema.js +7 -3
  82. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.output.schema.js.map +1 -1
  83. package/dist/commonjs/tools/isochrone-tool/buildIsochroneRequestUrl.d.ts +28 -0
  84. package/dist/commonjs/tools/isochrone-tool/buildIsochroneRequestUrl.d.ts.map +1 -0
  85. package/dist/commonjs/tools/isochrone-tool/buildIsochroneRequestUrl.js +44 -0
  86. package/dist/commonjs/tools/isochrone-tool/buildIsochroneRequestUrl.js.map +1 -0
  87. package/dist/commonjs/tools/map-matching-tool/MapMatchingTool.d.ts.map +1 -1
  88. package/dist/commonjs/tools/map-matching-tool/MapMatchingTool.js +61 -34
  89. package/dist/commonjs/tools/map-matching-tool/MapMatchingTool.js.map +1 -1
  90. package/dist/commonjs/tools/map-matching-tool/MapMatchingTool.output.schema.d.ts +8 -5
  91. package/dist/commonjs/tools/map-matching-tool/MapMatchingTool.output.schema.d.ts.map +1 -1
  92. package/dist/commonjs/tools/map-matching-tool/MapMatchingTool.output.schema.js +11 -5
  93. package/dist/commonjs/tools/map-matching-tool/MapMatchingTool.output.schema.js.map +1 -1
  94. package/dist/commonjs/tools/map-matching-tool/buildMapMatchingRequestUrl.d.ts +25 -0
  95. package/dist/commonjs/tools/map-matching-tool/buildMapMatchingRequestUrl.d.ts.map +1 -0
  96. package/dist/commonjs/tools/map-matching-tool/buildMapMatchingRequestUrl.js +33 -0
  97. package/dist/commonjs/tools/map-matching-tool/buildMapMatchingRequestUrl.js.map +1 -0
  98. package/dist/commonjs/tools/optimization-tool/OptimizationTool.d.ts.map +1 -1
  99. package/dist/commonjs/tools/optimization-tool/OptimizationTool.input.schema.d.ts.map +1 -1
  100. package/dist/commonjs/tools/optimization-tool/OptimizationTool.input.schema.js +19 -4
  101. package/dist/commonjs/tools/optimization-tool/OptimizationTool.input.schema.js.map +1 -1
  102. package/dist/commonjs/tools/optimization-tool/OptimizationTool.js +32 -33
  103. package/dist/commonjs/tools/optimization-tool/OptimizationTool.js.map +1 -1
  104. package/dist/commonjs/tools/optimization-tool/OptimizationTool.output.schema.d.ts +3 -5
  105. package/dist/commonjs/tools/optimization-tool/OptimizationTool.output.schema.d.ts.map +1 -1
  106. package/dist/commonjs/tools/optimization-tool/OptimizationTool.output.schema.js +6 -1
  107. package/dist/commonjs/tools/optimization-tool/OptimizationTool.output.schema.js.map +1 -1
  108. package/dist/commonjs/tools/optimization-tool/buildOptimizationRequestUrl.d.ts +30 -0
  109. package/dist/commonjs/tools/optimization-tool/buildOptimizationRequestUrl.d.ts.map +1 -0
  110. package/dist/commonjs/tools/optimization-tool/buildOptimizationRequestUrl.js +45 -0
  111. package/dist/commonjs/tools/optimization-tool/buildOptimizationRequestUrl.js.map +1 -0
  112. package/dist/commonjs/tools/render-map-tool/RenderMapTool.d.ts +60 -0
  113. package/dist/commonjs/tools/render-map-tool/RenderMapTool.d.ts.map +1 -0
  114. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.d.ts +41 -0
  115. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.d.ts.map +1 -0
  116. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.js +99 -0
  117. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.js.map +1 -0
  118. package/dist/commonjs/tools/render-map-tool/RenderMapTool.js +246 -0
  119. package/dist/commonjs/tools/render-map-tool/RenderMapTool.js.map +1 -0
  120. package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.d.ts +97 -0
  121. package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.d.ts.map +1 -0
  122. package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.js +35 -0
  123. package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.js.map +1 -0
  124. package/dist/commonjs/tools/reverse-geocode-tool/ReverseGeocodeTool.input.schema.d.ts +1 -1
  125. package/dist/commonjs/tools/reverse-geocode-tool/ReverseGeocodeTool.output.schema.d.ts +3 -3
  126. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts +10 -0
  127. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
  128. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +58 -48
  129. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
  130. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.output.schema.d.ts +3 -0
  131. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.output.schema.d.ts.map +1 -1
  132. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.output.schema.js +3 -1
  133. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.output.schema.js.map +1 -1
  134. package/dist/commonjs/tools/search-and-geocode-tool/buildSearchAndGeocodeRequestUrl.d.ts +37 -0
  135. package/dist/commonjs/tools/search-and-geocode-tool/buildSearchAndGeocodeRequestUrl.d.ts.map +1 -0
  136. package/dist/commonjs/tools/search-and-geocode-tool/buildSearchAndGeocodeRequestUrl.js +51 -0
  137. package/dist/commonjs/tools/search-and-geocode-tool/buildSearchAndGeocodeRequestUrl.js.map +1 -0
  138. package/dist/commonjs/tools/shared/polygonSchema.d.ts +15 -0
  139. package/dist/commonjs/tools/shared/polygonSchema.d.ts.map +1 -1
  140. package/dist/commonjs/tools/shared/polygonSchema.js +23 -2
  141. package/dist/commonjs/tools/shared/polygonSchema.js.map +1 -1
  142. package/dist/commonjs/tools/toolRegistry.d.ts +3 -2
  143. package/dist/commonjs/tools/toolRegistry.d.ts.map +1 -1
  144. package/dist/commonjs/tools/toolRegistry.js +2 -0
  145. package/dist/commonjs/tools/toolRegistry.js.map +1 -1
  146. package/dist/commonjs/tools/union-tool/UnionTool.d.ts.map +1 -1
  147. package/dist/commonjs/tools/union-tool/UnionTool.js +22 -3
  148. package/dist/commonjs/tools/union-tool/UnionTool.js.map +1 -1
  149. package/dist/commonjs/tools/union-tool/UnionTool.output.schema.d.ts +4 -1
  150. package/dist/commonjs/tools/union-tool/UnionTool.output.schema.d.ts.map +1 -1
  151. package/dist/commonjs/tools/union-tool/UnionTool.output.schema.js +7 -3
  152. package/dist/commonjs/tools/union-tool/UnionTool.output.schema.js.map +1 -1
  153. package/dist/commonjs/tools/union-tool/buildPolygonOpsMapPayload.d.ts +21 -0
  154. package/dist/commonjs/tools/union-tool/buildPolygonOpsMapPayload.d.ts.map +1 -0
  155. package/dist/commonjs/tools/union-tool/buildPolygonOpsMapPayload.js +72 -0
  156. package/dist/commonjs/tools/union-tool/buildPolygonOpsMapPayload.js.map +1 -0
  157. package/dist/commonjs/utils/computeRef.d.ts +38 -0
  158. package/dist/commonjs/utils/computeRef.d.ts.map +1 -0
  159. package/dist/commonjs/utils/computeRef.js +116 -0
  160. package/dist/commonjs/utils/computeRef.js.map +1 -0
  161. package/dist/commonjs/utils/inlinePayloadRef.d.ts +32 -0
  162. package/dist/commonjs/utils/inlinePayloadRef.d.ts.map +1 -0
  163. package/dist/commonjs/utils/inlinePayloadRef.js +56 -0
  164. package/dist/commonjs/utils/inlinePayloadRef.js.map +1 -0
  165. package/dist/commonjs/utils/mapAppPayload.d.ts +206 -0
  166. package/dist/commonjs/utils/mapAppPayload.d.ts.map +1 -0
  167. package/dist/commonjs/utils/mapAppPayload.js +129 -0
  168. package/dist/commonjs/utils/mapAppPayload.js.map +1 -0
  169. package/dist/commonjs/utils/selfFetchRef.d.ts +25 -0
  170. package/dist/commonjs/utils/selfFetchRef.d.ts.map +1 -0
  171. package/dist/commonjs/utils/selfFetchRef.js +75 -0
  172. package/dist/commonjs/utils/selfFetchRef.js.map +1 -0
  173. package/dist/commonjs/utils/storeMapPayload.d.ts +71 -0
  174. package/dist/commonjs/utils/storeMapPayload.d.ts.map +1 -0
  175. package/dist/commonjs/utils/storeMapPayload.js +153 -0
  176. package/dist/commonjs/utils/storeMapPayload.js.map +1 -0
  177. package/dist/commonjs/version.json +3 -3
  178. package/dist/esm/config/toolConfig.d.ts +0 -10
  179. package/dist/esm/config/toolConfig.d.ts.map +1 -1
  180. package/dist/esm/config/toolConfig.js +0 -35
  181. package/dist/esm/config/toolConfig.js.map +1 -1
  182. package/dist/esm/resources/compute/ComputeResource.d.ts +20 -0
  183. package/dist/esm/resources/compute/ComputeResource.d.ts.map +1 -0
  184. package/dist/esm/resources/compute/ComputeResource.js +45 -0
  185. package/dist/esm/resources/compute/ComputeResource.js.map +1 -0
  186. package/dist/esm/resources/inline-payload/InlinePayloadResource.d.ts +17 -0
  187. package/dist/esm/resources/inline-payload/InlinePayloadResource.d.ts.map +1 -0
  188. package/dist/esm/resources/inline-payload/InlinePayloadResource.js +42 -0
  189. package/dist/esm/resources/inline-payload/InlinePayloadResource.js.map +1 -0
  190. package/dist/esm/resources/resourceRegistry.d.ts +4 -2
  191. package/dist/esm/resources/resourceRegistry.d.ts.map +1 -1
  192. package/dist/esm/resources/resourceRegistry.js +16 -6
  193. package/dist/esm/resources/resourceRegistry.js.map +1 -1
  194. package/dist/esm/resources/ui-apps/MapAppUIResource.d.ts +27 -0
  195. package/dist/esm/resources/ui-apps/MapAppUIResource.d.ts.map +1 -0
  196. package/dist/esm/resources/ui-apps/{DirectionsAppUIResource.js → MapAppUIResource.js} +13 -15
  197. package/dist/esm/resources/ui-apps/MapAppUIResource.js.map +1 -0
  198. package/dist/esm/resources/ui-apps/mapAppHtml.d.ts +19 -0
  199. package/dist/esm/resources/ui-apps/mapAppHtml.d.ts.map +1 -0
  200. package/dist/esm/resources/ui-apps/mapAppHtml.js +1617 -0
  201. package/dist/esm/resources/ui-apps/mapAppHtml.js.map +1 -0
  202. package/dist/esm/tools/category-search-tool/CategorySearchTool.d.ts.map +1 -1
  203. package/dist/esm/tools/category-search-tool/CategorySearchTool.js +46 -41
  204. package/dist/esm/tools/category-search-tool/CategorySearchTool.js.map +1 -1
  205. package/dist/esm/tools/category-search-tool/CategorySearchTool.output.schema.d.ts +6 -3
  206. package/dist/esm/tools/category-search-tool/CategorySearchTool.output.schema.d.ts.map +1 -1
  207. package/dist/esm/tools/category-search-tool/CategorySearchTool.output.schema.js +3 -1
  208. package/dist/esm/tools/category-search-tool/CategorySearchTool.output.schema.js.map +1 -1
  209. package/dist/esm/tools/category-search-tool/buildCategorySearchRequestUrl.d.ts +30 -0
  210. package/dist/esm/tools/category-search-tool/buildCategorySearchRequestUrl.d.ts.map +1 -0
  211. package/dist/esm/tools/category-search-tool/buildCategorySearchRequestUrl.js +36 -0
  212. package/dist/esm/tools/category-search-tool/buildCategorySearchRequestUrl.js.map +1 -0
  213. package/dist/esm/tools/difference-tool/DifferenceTool.d.ts.map +1 -1
  214. package/dist/esm/tools/difference-tool/DifferenceTool.js +19 -3
  215. package/dist/esm/tools/difference-tool/DifferenceTool.js.map +1 -1
  216. package/dist/esm/tools/difference-tool/DifferenceTool.output.schema.d.ts +4 -1
  217. package/dist/esm/tools/difference-tool/DifferenceTool.output.schema.d.ts.map +1 -1
  218. package/dist/esm/tools/difference-tool/DifferenceTool.output.schema.js +7 -3
  219. package/dist/esm/tools/difference-tool/DifferenceTool.output.schema.js.map +1 -1
  220. package/dist/esm/tools/directions-tool/DirectionsTool.d.ts +0 -9
  221. package/dist/esm/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
  222. package/dist/esm/tools/directions-tool/DirectionsTool.input.schema.d.ts.map +1 -1
  223. package/dist/esm/tools/directions-tool/DirectionsTool.input.schema.js +9 -4
  224. package/dist/esm/tools/directions-tool/DirectionsTool.input.schema.js.map +1 -1
  225. package/dist/esm/tools/directions-tool/DirectionsTool.js +41 -79
  226. package/dist/esm/tools/directions-tool/DirectionsTool.js.map +1 -1
  227. package/dist/esm/tools/directions-tool/DirectionsTool.output.schema.d.ts +4 -1
  228. package/dist/esm/tools/directions-tool/DirectionsTool.output.schema.d.ts.map +1 -1
  229. package/dist/esm/tools/directions-tool/DirectionsTool.output.schema.js +10 -4
  230. package/dist/esm/tools/directions-tool/DirectionsTool.output.schema.js.map +1 -1
  231. package/dist/esm/tools/directions-tool/buildDirectionsRequestUrl.d.ts +2 -2
  232. package/dist/esm/tools/directions-tool/buildDirectionsRequestUrl.d.ts.map +1 -1
  233. package/dist/esm/tools/directions-tool/buildDirectionsRequestUrl.js +4 -12
  234. package/dist/esm/tools/directions-tool/buildDirectionsRequestUrl.js.map +1 -1
  235. package/dist/esm/tools/ground-location-tool/GroundLocationTool.d.ts.map +1 -1
  236. package/dist/esm/tools/ground-location-tool/GroundLocationTool.js +52 -18
  237. package/dist/esm/tools/ground-location-tool/GroundLocationTool.js.map +1 -1
  238. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts +4 -1
  239. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts.map +1 -1
  240. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.js +7 -3
  241. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.js.map +1 -1
  242. package/dist/esm/tools/ground-location-tool/buildReverseGeocodeUrl.d.ts +19 -0
  243. package/dist/esm/tools/ground-location-tool/buildReverseGeocodeUrl.d.ts.map +1 -0
  244. package/dist/esm/tools/ground-location-tool/buildReverseGeocodeUrl.js +23 -0
  245. package/dist/esm/tools/ground-location-tool/buildReverseGeocodeUrl.js.map +1 -0
  246. package/dist/esm/tools/intersect-tool/IntersectTool.d.ts.map +1 -1
  247. package/dist/esm/tools/intersect-tool/IntersectTool.js +19 -3
  248. package/dist/esm/tools/intersect-tool/IntersectTool.js.map +1 -1
  249. package/dist/esm/tools/intersect-tool/IntersectTool.output.schema.d.ts +4 -1
  250. package/dist/esm/tools/intersect-tool/IntersectTool.output.schema.d.ts.map +1 -1
  251. package/dist/esm/tools/intersect-tool/IntersectTool.output.schema.js +7 -3
  252. package/dist/esm/tools/intersect-tool/IntersectTool.output.schema.js.map +1 -1
  253. package/dist/esm/tools/isochrone-tool/IsochroneTool.d.ts.map +1 -1
  254. package/dist/esm/tools/isochrone-tool/IsochroneTool.js +51 -47
  255. package/dist/esm/tools/isochrone-tool/IsochroneTool.js.map +1 -1
  256. package/dist/esm/tools/isochrone-tool/IsochroneTool.output.schema.d.ts +4 -5
  257. package/dist/esm/tools/isochrone-tool/IsochroneTool.output.schema.d.ts.map +1 -1
  258. package/dist/esm/tools/isochrone-tool/IsochroneTool.output.schema.js +7 -3
  259. package/dist/esm/tools/isochrone-tool/IsochroneTool.output.schema.js.map +1 -1
  260. package/dist/esm/tools/isochrone-tool/buildIsochroneRequestUrl.d.ts +28 -0
  261. package/dist/esm/tools/isochrone-tool/buildIsochroneRequestUrl.d.ts.map +1 -0
  262. package/dist/esm/tools/isochrone-tool/buildIsochroneRequestUrl.js +41 -0
  263. package/dist/esm/tools/isochrone-tool/buildIsochroneRequestUrl.js.map +1 -0
  264. package/dist/esm/tools/map-matching-tool/MapMatchingTool.d.ts.map +1 -1
  265. package/dist/esm/tools/map-matching-tool/MapMatchingTool.js +61 -34
  266. package/dist/esm/tools/map-matching-tool/MapMatchingTool.js.map +1 -1
  267. package/dist/esm/tools/map-matching-tool/MapMatchingTool.output.schema.d.ts +8 -5
  268. package/dist/esm/tools/map-matching-tool/MapMatchingTool.output.schema.d.ts.map +1 -1
  269. package/dist/esm/tools/map-matching-tool/MapMatchingTool.output.schema.js +11 -5
  270. package/dist/esm/tools/map-matching-tool/MapMatchingTool.output.schema.js.map +1 -1
  271. package/dist/esm/tools/map-matching-tool/buildMapMatchingRequestUrl.d.ts +25 -0
  272. package/dist/esm/tools/map-matching-tool/buildMapMatchingRequestUrl.d.ts.map +1 -0
  273. package/dist/esm/tools/map-matching-tool/buildMapMatchingRequestUrl.js +30 -0
  274. package/dist/esm/tools/map-matching-tool/buildMapMatchingRequestUrl.js.map +1 -0
  275. package/dist/esm/tools/optimization-tool/OptimizationTool.d.ts.map +1 -1
  276. package/dist/esm/tools/optimization-tool/OptimizationTool.input.schema.d.ts.map +1 -1
  277. package/dist/esm/tools/optimization-tool/OptimizationTool.input.schema.js +19 -4
  278. package/dist/esm/tools/optimization-tool/OptimizationTool.input.schema.js.map +1 -1
  279. package/dist/esm/tools/optimization-tool/OptimizationTool.js +32 -33
  280. package/dist/esm/tools/optimization-tool/OptimizationTool.js.map +1 -1
  281. package/dist/esm/tools/optimization-tool/OptimizationTool.output.schema.d.ts +3 -5
  282. package/dist/esm/tools/optimization-tool/OptimizationTool.output.schema.d.ts.map +1 -1
  283. package/dist/esm/tools/optimization-tool/OptimizationTool.output.schema.js +6 -1
  284. package/dist/esm/tools/optimization-tool/OptimizationTool.output.schema.js.map +1 -1
  285. package/dist/esm/tools/optimization-tool/buildOptimizationRequestUrl.d.ts +30 -0
  286. package/dist/esm/tools/optimization-tool/buildOptimizationRequestUrl.d.ts.map +1 -0
  287. package/dist/esm/tools/optimization-tool/buildOptimizationRequestUrl.js +42 -0
  288. package/dist/esm/tools/optimization-tool/buildOptimizationRequestUrl.js.map +1 -0
  289. package/dist/esm/tools/render-map-tool/RenderMapTool.d.ts +60 -0
  290. package/dist/esm/tools/render-map-tool/RenderMapTool.d.ts.map +1 -0
  291. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.d.ts +41 -0
  292. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.d.ts.map +1 -0
  293. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.js +96 -0
  294. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.js.map +1 -0
  295. package/dist/esm/tools/render-map-tool/RenderMapTool.js +242 -0
  296. package/dist/esm/tools/render-map-tool/RenderMapTool.js.map +1 -0
  297. package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.d.ts +97 -0
  298. package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.d.ts.map +1 -0
  299. package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.js +32 -0
  300. package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.js.map +1 -0
  301. package/dist/esm/tools/reverse-geocode-tool/ReverseGeocodeTool.input.schema.d.ts +1 -1
  302. package/dist/esm/tools/reverse-geocode-tool/ReverseGeocodeTool.output.schema.d.ts +3 -3
  303. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts +10 -0
  304. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
  305. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +58 -48
  306. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
  307. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.output.schema.d.ts +3 -0
  308. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.output.schema.d.ts.map +1 -1
  309. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.output.schema.js +3 -1
  310. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.output.schema.js.map +1 -1
  311. package/dist/esm/tools/search-and-geocode-tool/buildSearchAndGeocodeRequestUrl.d.ts +37 -0
  312. package/dist/esm/tools/search-and-geocode-tool/buildSearchAndGeocodeRequestUrl.d.ts.map +1 -0
  313. package/dist/esm/tools/search-and-geocode-tool/buildSearchAndGeocodeRequestUrl.js +48 -0
  314. package/dist/esm/tools/search-and-geocode-tool/buildSearchAndGeocodeRequestUrl.js.map +1 -0
  315. package/dist/esm/tools/shared/polygonSchema.d.ts +15 -0
  316. package/dist/esm/tools/shared/polygonSchema.d.ts.map +1 -1
  317. package/dist/esm/tools/shared/polygonSchema.js +23 -2
  318. package/dist/esm/tools/shared/polygonSchema.js.map +1 -1
  319. package/dist/esm/tools/toolRegistry.d.ts +3 -2
  320. package/dist/esm/tools/toolRegistry.d.ts.map +1 -1
  321. package/dist/esm/tools/toolRegistry.js +2 -0
  322. package/dist/esm/tools/toolRegistry.js.map +1 -1
  323. package/dist/esm/tools/union-tool/UnionTool.d.ts.map +1 -1
  324. package/dist/esm/tools/union-tool/UnionTool.js +22 -3
  325. package/dist/esm/tools/union-tool/UnionTool.js.map +1 -1
  326. package/dist/esm/tools/union-tool/UnionTool.output.schema.d.ts +4 -1
  327. package/dist/esm/tools/union-tool/UnionTool.output.schema.d.ts.map +1 -1
  328. package/dist/esm/tools/union-tool/UnionTool.output.schema.js +7 -3
  329. package/dist/esm/tools/union-tool/UnionTool.output.schema.js.map +1 -1
  330. package/dist/esm/tools/union-tool/buildPolygonOpsMapPayload.d.ts +21 -0
  331. package/dist/esm/tools/union-tool/buildPolygonOpsMapPayload.d.ts.map +1 -0
  332. package/dist/esm/tools/union-tool/buildPolygonOpsMapPayload.js +69 -0
  333. package/dist/esm/tools/union-tool/buildPolygonOpsMapPayload.js.map +1 -0
  334. package/dist/esm/utils/computeRef.d.ts +38 -0
  335. package/dist/esm/utils/computeRef.d.ts.map +1 -0
  336. package/dist/esm/utils/computeRef.js +111 -0
  337. package/dist/esm/utils/computeRef.js.map +1 -0
  338. package/dist/esm/utils/inlinePayloadRef.d.ts +32 -0
  339. package/dist/esm/utils/inlinePayloadRef.d.ts.map +1 -0
  340. package/dist/esm/utils/inlinePayloadRef.js +51 -0
  341. package/dist/esm/utils/inlinePayloadRef.js.map +1 -0
  342. package/dist/esm/utils/mapAppPayload.d.ts +206 -0
  343. package/dist/esm/utils/mapAppPayload.d.ts.map +1 -0
  344. package/dist/esm/utils/mapAppPayload.js +124 -0
  345. package/dist/esm/utils/mapAppPayload.js.map +1 -0
  346. package/dist/esm/utils/selfFetchRef.d.ts +25 -0
  347. package/dist/esm/utils/selfFetchRef.d.ts.map +1 -0
  348. package/dist/esm/utils/selfFetchRef.js +70 -0
  349. package/dist/esm/utils/selfFetchRef.js.map +1 -0
  350. package/dist/esm/utils/storeMapPayload.d.ts +71 -0
  351. package/dist/esm/utils/storeMapPayload.d.ts.map +1 -0
  352. package/dist/esm/utils/storeMapPayload.js +145 -0
  353. package/dist/esm/utils/storeMapPayload.js.map +1 -0
  354. package/dist/esm/version.json +3 -3
  355. package/package.json +2 -2
  356. package/dist/commonjs/resources/ui-apps/DirectionsAppUIResource.d.ts +0 -29
  357. package/dist/commonjs/resources/ui-apps/DirectionsAppUIResource.d.ts.map +0 -1
  358. package/dist/commonjs/resources/ui-apps/DirectionsAppUIResource.js.map +0 -1
  359. package/dist/commonjs/resources/ui-apps/directionsAppHtml.d.ts +0 -45
  360. package/dist/commonjs/resources/ui-apps/directionsAppHtml.d.ts.map +0 -1
  361. package/dist/commonjs/resources/ui-apps/directionsAppHtml.js +0 -640
  362. package/dist/commonjs/resources/ui-apps/directionsAppHtml.js.map +0 -1
  363. package/dist/esm/resources/ui-apps/DirectionsAppUIResource.d.ts +0 -29
  364. package/dist/esm/resources/ui-apps/DirectionsAppUIResource.d.ts.map +0 -1
  365. package/dist/esm/resources/ui-apps/DirectionsAppUIResource.js.map +0 -1
  366. package/dist/esm/resources/ui-apps/directionsAppHtml.d.ts +0 -45
  367. package/dist/esm/resources/ui-apps/directionsAppHtml.d.ts.map +0 -1
  368. package/dist/esm/resources/ui-apps/directionsAppHtml.js +0 -636
  369. package/dist/esm/resources/ui-apps/directionsAppHtml.js.map +0 -1
@@ -1,640 +0,0 @@
1
- "use strict";
2
- // Copyright (c) Mapbox, Inc.
3
- // Licensed under the MIT License.
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.MAPBOX_GL_VERSION = void 0;
6
- exports.renderDirectionsAppHtml = renderDirectionsAppHtml;
7
- /**
8
- * Render the directions MCP App HTML.
9
- *
10
- * The same template is consumed by two ingress paths:
11
- *
12
- * 1. **MCP Apps spec** — `DirectionsAppUIResource` reads this resource at
13
- * `ui://mapbox/directions-app/index.html`. The iframe loads, the agent's
14
- * tool result is delivered via the `ui/notifications/tool-result`
15
- * postMessage event, and `extractRoute()` pulls the route out of
16
- * `structuredContent.routes[0]`.
17
- *
18
- * 2. **Legacy MCP-UI spec** — `directions_tool` inlines a `rawHtml`
19
- * UIResource into its content array (gated by `isMcpUiEnabled()`). The
20
- * HTML is generated at tool-execute time with the call's input params
21
- * baked in as an `initialData` script block; the iframe uses those params
22
- * to self-fetch the route from the Directions API, so it never depends on
23
- * the host delivering the tool result.
24
- *
25
- * One source of truth for the rendering logic; two slim entry conditions.
26
- */
27
- exports.MAPBOX_GL_VERSION = '3.12.0';
28
- function renderDirectionsAppHtml(params) {
29
- const { publicToken, apiEndpoint, initialData } = params;
30
- const glVersion = params.glVersion ?? exports.MAPBOX_GL_VERSION;
31
- const initialDataScript = initialData
32
- ? `<script id="initial-data" type="application/json">${escapeForScript(JSON.stringify(initialData))}</script>`
33
- : '';
34
- return `<!DOCTYPE html>
35
- <html lang="en">
36
- <head>
37
- <meta charset="UTF-8">
38
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
39
- <title>Directions Preview</title>
40
- <link href="https://api.mapbox.com/mapbox-gl-js/v${glVersion}/mapbox-gl.css" rel="stylesheet">
41
- <script src="https://api.mapbox.com/mapbox-gl-js/v${glVersion}/mapbox-gl.js"></script>
42
- <style>
43
- * { margin: 0; padding: 0; box-sizing: border-box; }
44
- html, body { width: 100%; height: 100%; overflow: hidden;
45
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; }
46
- #map { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
47
- #summary {
48
- position: absolute; top: 12px; left: 12px; z-index: 10;
49
- background: rgba(15, 23, 42, 0.88); color: #f1f5f9;
50
- padding: 8px 12px; border-radius: 6px;
51
- font-size: 13px; font-weight: 500;
52
- box-shadow: 0 2px 8px rgba(0,0,0,0.3);
53
- max-width: calc(100% - 24px);
54
- }
55
- #loading {
56
- position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
57
- color: #666; font-size: 16px; z-index: 10; pointer-events: none;
58
- }
59
- #error {
60
- position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
61
- color: #d32f2f; background: #ffebee; border-radius: 8px;
62
- padding: 20px; max-width: 400px; text-align: center; z-index: 10;
63
- }
64
- </style>
65
- </head>
66
- <body>
67
- <div id="map"></div>
68
- <div id="summary" style="display:none"></div>
69
- <div id="loading">Loading directions…</div>
70
- <div id="error" style="display:none"></div>
71
- ${initialDataScript}
72
-
73
- <script>
74
- (function() {
75
- var TOKEN = ${JSON.stringify(publicToken)};
76
- var API_ENDPOINT = ${JSON.stringify(apiEndpoint)};
77
-
78
- var loadingEl = document.getElementById('loading');
79
- var errorEl = document.getElementById('error');
80
- var summaryEl = document.getElementById('summary');
81
-
82
- var map = null;
83
- var mapLoaded = false;
84
- var pendingRoute = null;
85
- var currentDisplayMode = 'inline';
86
- // Track markers across re-renders so we can remove them before drawing the
87
- // next route — otherwise a second tool-result delivery stacks pins.
88
- var routeMarkers = [];
89
- // One render "cycle" per tool call delivered to this iframe. A new
90
- // tool-input (or baked initial-data) delivery starts a new cycle by
91
- // bumping \`generation\`; async callbacks that captured an older value are
92
- // stale and must not touch the UI. This dedupes self-fetch vs tool-result
93
- // within one call WITHOUT permanently blocking later calls that reuse
94
- // this same iframe instance.
95
- var generation = 0;
96
- var renderedGeneration = -1; // generation whose route is on screen (-1 = none)
97
- var selfFetchGeneration = -1; // generation that started a self-fetch (-1 = none)
98
-
99
- // -------------------------------------------------------------------------
100
- // Self-fetch: build a Directions API request directly from the tool call's
101
- // input parameters and fetch the route ourselves, so this map never
102
- // depends on the tool response carrying geometries="geojson".
103
- //
104
- // Mirrors src/tools/directions-tool/buildDirectionsRequestUrl.ts — kept in
105
- // sync by the parity test in
106
- // test/tools/directions-tool/directionsUrlParity.test.ts. Always forces
107
- // geometries=geojson regardless of what the tool call itself requested.
108
- // -------------------------------------------------------------------------
109
- function formatIsoDateTimeClient(dateTime) {
110
- var noTzWithSeconds = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$/;
111
- if (noTzWithSeconds.test(dateTime)) {
112
- return dateTime.substring(0, dateTime.lastIndexOf(':'));
113
- }
114
- return dateTime;
115
- }
116
-
117
- function encodeExcludeClient(value) {
118
- return value
119
- .replace(/,/g, '%2C')
120
- .replace(/\\(/g, '%28')
121
- .replace(/\\)/g, '%29')
122
- .replace(/ /g, '%20');
123
- }
124
-
125
- function buildDirectionsApiUrl(params, publicToken, apiEndpoint) {
126
- var coords = params.coordinates
127
- .map(function(c) { return c.longitude + ',' + c.latitude; })
128
- .join(';');
129
- var encodedCoords = encodeURIComponent(coords);
130
- var profile = params.routing_profile || 'mapbox/driving-traffic';
131
-
132
- var qp = new URLSearchParams();
133
- qp.append('access_token', publicToken);
134
- qp.append('geometries', 'geojson');
135
- qp.append('alternatives', params.alternatives ? 'true' : 'false');
136
- qp.append(
137
- 'annotations',
138
- profile === 'mapbox/driving-traffic'
139
- ? 'distance,congestion,speed'
140
- : 'distance,speed'
141
- );
142
- qp.append('overview', 'full');
143
-
144
- if (params.depart_at) {
145
- qp.append('depart_at', formatIsoDateTimeClient(params.depart_at));
146
- } else if (params.arrive_by) {
147
- qp.append('arrive_by', formatIsoDateTimeClient(params.arrive_by));
148
- }
149
- if (params.max_height !== undefined && params.max_height !== null) {
150
- qp.append('max_height', String(params.max_height));
151
- }
152
- if (params.max_width !== undefined && params.max_width !== null) {
153
- qp.append('max_width', String(params.max_width));
154
- }
155
- if (params.max_weight !== undefined && params.max_weight !== null) {
156
- qp.append('max_weight', String(params.max_weight));
157
- }
158
- qp.append('steps', 'true');
159
-
160
- var queryString = qp.toString();
161
- if (params.exclude) {
162
- queryString += '&exclude=' + encodeExcludeClient(params.exclude);
163
- }
164
-
165
- return apiEndpoint + 'directions/v5/' + profile + '/' + encodedCoords + '?' + queryString;
166
- }
167
- // Exposed so the parity test (Node vm sandbox) can call this in isolation.
168
- window.__buildDirectionsApiUrl = buildDirectionsApiUrl;
169
-
170
- // Params arrive via postMessage and are untrusted: they get interpolated
171
- // into the request URL, so validate the pieces our encoding does not
172
- // neutralize. routing_profile is spliced into the URL path unencoded, and
173
- // encodeExcludeClient only escapes ',', '(', ')' and spaces — characters
174
- // like '&' or '../' path segments would otherwise let a hostile sibling
175
- // frame reshape the request. Server-side input is zod-validated before it
176
- // reaches buildDirectionsRequestUrl; this mirrors those guarantees for
177
- // the client copy.
178
- function isSafeDirectionsParams(params) {
179
- if (!params || !Array.isArray(params.coordinates)) return false;
180
- if (params.coordinates.length < 2) return false;
181
- for (var i = 0; i < params.coordinates.length; i++) {
182
- var c = params.coordinates[i];
183
- if (!c || typeof c.longitude !== 'number' || !isFinite(c.longitude)) return false;
184
- if (typeof c.latitude !== 'number' || !isFinite(c.latitude)) return false;
185
- }
186
- if (params.routing_profile !== undefined && params.routing_profile !== null) {
187
- if (typeof params.routing_profile !== 'string') return false;
188
- if (!/^mapbox\\/[a-z-]+$/.test(params.routing_profile)) return false;
189
- }
190
- if (params.exclude !== undefined && params.exclude !== null) {
191
- if (typeof params.exclude !== 'string') return false;
192
- if (!/^[A-Za-z0-9_,.() -]+$/.test(params.exclude)) return false;
193
- }
194
- return true;
195
- }
196
-
197
- function fetchRouteFromDirectionsApi(params) {
198
- // Every delivery (tool-input notification or baked initial-data) starts
199
- // a new render cycle, even when the guard below prevents the fetch from
200
- // actually running — the new call must still invalidate the previous
201
- // cycle's in-flight callbacks and error-suppression state.
202
- generation++;
203
- if (!TOKEN || !isSafeDirectionsParams(params)) return;
204
- var gen = generation; // captured by the callbacks below
205
- selfFetchGeneration = gen; // marked only when the fetch actually proceeds
206
- var url = buildDirectionsApiUrl(params, TOKEN, API_ENDPOINT);
207
- fetch(url)
208
- .then(function(res) {
209
- if (!res.ok) {
210
- return res
211
- .json()
212
- .catch(function() { return null; })
213
- .then(function(body) {
214
- var msg =
215
- body && body.message
216
- ? body.message
217
- : 'Directions API error (' + res.status + ')';
218
- throw new Error(msg);
219
- });
220
- }
221
- return res.json();
222
- })
223
- .then(function(data) {
224
- if (gen !== generation) return; // stale: a newer call started
225
- if (renderedGeneration === gen) return; // cycle already drawn (tool-result won)
226
- var route = data && data.routes && data.routes[0];
227
- var picked = route ? pickRouteGeometry(route) : null;
228
- if (picked) {
229
- renderRoute(picked);
230
- } else {
231
- showError('Directions API returned no route.');
232
- }
233
- })
234
- .catch(function(err) {
235
- if (gen !== generation) return;
236
- if (renderedGeneration === gen) return;
237
- showError(
238
- 'Could not fetch route: ' + (err && err.message ? err.message : err)
239
- );
240
- });
241
- }
242
-
243
- // -------------------------------------------------------------------------
244
- // MCP App postMessage protocol (skipped silently in MCP-UI rawHtml mode)
245
- // -------------------------------------------------------------------------
246
- var messageId = 0;
247
- var pendingRequests = new Map();
248
-
249
- function sendRequest(method, params) {
250
- var id = ++messageId;
251
- try { window.parent.postMessage({ jsonrpc: '2.0', id: id, method: method, params: params || {} }, '*'); } catch (_) {}
252
- return new Promise(function(resolve, reject) {
253
- pendingRequests.set(id, { resolve: resolve, reject: reject });
254
- });
255
- }
256
- function sendNotification(method, params) {
257
- try { window.parent.postMessage({ jsonrpc: '2.0', method: method, params: params || {} }, '*'); } catch (_) {}
258
- }
259
- function requestSizeToFit() {
260
- if (currentDisplayMode !== 'inline') return;
261
- sendNotification('ui/notifications/size-changed', { height: 500 });
262
- }
263
-
264
- window.addEventListener('message', function(event) {
265
- // Only the embedding host (parent frame) is a legitimate sender. Any
266
- // frame in the page can obtain this window's reference and postMessage
267
- // crafted notifications; pinning the source window blocks that while
268
- // staying host-agnostic — the host's origin is unknowable at
269
- // HTML-generation time, so an origin allowlist isn't possible for a
270
- // portable MCP App. (Standalone/top-level, window.parent === window,
271
- // so self-posted messages still work for manual testing.)
272
- if (event.source !== window.parent) return;
273
- var message = event.data;
274
- if (!message || typeof message !== 'object') return;
275
-
276
- if (message.id !== undefined && pendingRequests.has(message.id)) {
277
- var handlers = pendingRequests.get(message.id);
278
- pendingRequests.delete(message.id);
279
- if (message.error) handlers.reject(new Error(message.error.message));
280
- else handlers.resolve(message.result);
281
- return;
282
- }
283
- if (message.method === 'ui/notifications/tool-input' && message.params) {
284
- fetchRouteFromDirectionsApi(message.params.arguments);
285
- }
286
- if (message.method === 'ui/notifications/tool-result' && message.params) {
287
- handleToolResult(message.params);
288
- }
289
- if (message.method === 'ui/notifications/host-context-changed' && message.params) {
290
- var ctx = message.params;
291
- if (ctx.displayMode) {
292
- currentDisplayMode = ctx.displayMode;
293
- if (map) setTimeout(function() { map.resize(); }, 100);
294
- }
295
- }
296
- });
297
-
298
- sendRequest('ui/initialize', {
299
- protocolVersion: '2026-01-26',
300
- appCapabilities: {},
301
- appInfo: { name: 'Directions Preview', version: '1.0.0' }
302
- }).then(function() {
303
- sendNotification('ui/notifications/initialized', {});
304
- }, function() {
305
- sendNotification('ui/notifications/initialized', {});
306
- });
307
-
308
- // -------------------------------------------------------------------------
309
- // Map init
310
- // -------------------------------------------------------------------------
311
- function initMap() {
312
- if (!TOKEN) {
313
- loadingEl.style.display = 'none';
314
- errorEl.textContent = 'No Mapbox public token available. Set MAPBOX_PUBLIC_TOKEN or grant tokens:read to the OAuth client.';
315
- errorEl.style.display = 'block';
316
- return;
317
- }
318
- if (typeof mapboxgl === 'undefined') {
319
- loadingEl.style.display = 'none';
320
- errorEl.textContent = 'Mapbox GL JS failed to load.';
321
- errorEl.style.display = 'block';
322
- return;
323
- }
324
-
325
- mapboxgl.accessToken = TOKEN;
326
- map = new mapboxgl.Map({
327
- container: 'map',
328
- style: 'mapbox://styles/mapbox/streets-v12',
329
- center: [0, 20],
330
- zoom: 1.5
331
- });
332
- map.addControl(new mapboxgl.NavigationControl(), 'top-left');
333
- map.on('load', function() {
334
- mapLoaded = true;
335
- if (pendingRoute) {
336
- drawRoute(pendingRoute);
337
- pendingRoute = null;
338
- } else {
339
- consumeInitialData();
340
- }
341
- });
342
- map.on('error', function(e) {
343
- console.error('Mapbox error:', e && e.error && e.error.message ? e.error.message : e);
344
- });
345
- }
346
- initMap();
347
-
348
- // -------------------------------------------------------------------------
349
- // Initial data path (MCP-UI rawHtml): the tool call's input params were
350
- // baked in server-side. Self-fetch the route from the Directions API
351
- // rather than relying on baked-in geometry from the tool response.
352
- // -------------------------------------------------------------------------
353
- function consumeInitialData() {
354
- var el = document.getElementById('initial-data');
355
- if (!el || !el.textContent) return;
356
- try {
357
- var data = JSON.parse(el.textContent);
358
- if (!data || !data.params) return;
359
- fetchRouteFromDirectionsApi(data.params);
360
- } catch (_) { /* ignore */ }
361
- }
362
-
363
- function handleToolResult(result) {
364
- // A tool-result that isn't paired with this cycle's self-fetch (no
365
- // tool-input was delivered for it — e.g. hosts that only send
366
- // tool-result) represents a new tool call, so it starts its own render
367
- // cycle. A paired result belongs to the cycle its tool-input opened;
368
- // bumping for it would wrongly invalidate the in-flight self-fetch.
369
- if (selfFetchGeneration !== generation) generation++;
370
- var route = extractRoute(result);
371
- if (route) {
372
- // Authoritative geometry: always (re)render — drawRoute removes the
373
- // previous route's layers/markers, which is what lets a host reuse
374
- // one iframe across sequential directions_tool calls.
375
- renderRoute(route);
376
- return;
377
- }
378
-
379
- // Fallback: large directions responses are stored as a temporary resource
380
- // (mapbox://temp/directions-id) and the structuredContent is stripped of
381
- // geometry to keep the agent context light. Read it back via the
382
- // MCP Apps host resources/read bridge.
383
- var tempUri = findTempResourceUri(result);
384
- if (tempUri) {
385
- var gen = generation;
386
- loadingEl.textContent = 'Fetching full route…';
387
- sendRequest('resources/read', { uri: tempUri }).then(
388
- function(rr) {
389
- if (gen !== generation) return; // stale: a newer call started
390
- var fetched = readResourceJson(rr);
391
- var fetchedRoute = fetched ? extractRoute({ structuredContent: fetched }) : null;
392
- if (fetchedRoute) {
393
- renderRoute(fetchedRoute);
394
- } else if (renderedGeneration !== gen) {
395
- showError('Could not parse route from the temporary resource.');
396
- }
397
- },
398
- function(err) {
399
- if (gen !== generation || renderedGeneration === gen) return;
400
- showError('Could not read temporary resource: ' + (err && err.message ? err.message : err));
401
- }
402
- );
403
- return;
404
- }
405
-
406
- // No geometry in this result. Suppress the hard error only when this
407
- // cycle's self-fetch is handling it (in flight, already rendered, or it
408
- // already reported its own error via its .catch() handler). An unpaired
409
- // result opened a fresh cycle above, so a route left over from an
410
- // earlier call never suppresses this error.
411
- if (selfFetchGeneration === generation) return;
412
-
413
- showError('Could not find route data in tool result.');
414
- }
415
-
416
- function renderRoute(route) {
417
- renderedGeneration = generation;
418
- if (route.summary) {
419
- summaryEl.textContent = route.summary;
420
- summaryEl.style.display = 'block';
421
- }
422
- if (!map) { loadingEl.style.display = 'none'; return; }
423
- if (mapLoaded) drawRoute(route);
424
- else pendingRoute = route;
425
- }
426
-
427
- function showError(message) {
428
- loadingEl.style.display = 'none';
429
- errorEl.textContent = message;
430
- errorEl.style.display = 'block';
431
- }
432
-
433
- // Mapbox MCP server emits the URI in the summary text content of large
434
- // responses: "Resource URI: mapbox://temp/directions-<hex>".
435
- function findTempResourceUri(result) {
436
- if (!result || !Array.isArray(result.content)) return null;
437
- for (var i = 0; i < result.content.length; i++) {
438
- var c = result.content[i];
439
- if (c && c.type === 'text' && typeof c.text === 'string') {
440
- var m = c.text.match(/mapbox:\\/\\/temp\\/directions-[0-9a-fA-F]+/);
441
- if (m) return m[0];
442
- }
443
- }
444
- return null;
445
- }
446
-
447
- // resources/read responses have shape: { contents: [{ text: "<json>", ... }] }
448
- function readResourceJson(rr) {
449
- if (!rr || !Array.isArray(rr.contents) || rr.contents.length === 0) return null;
450
- var first = rr.contents[0];
451
- if (!first || typeof first.text !== 'string') return null;
452
- try { return JSON.parse(first.text); } catch (_) { return null; }
453
- }
454
-
455
- function extractRoute(result) {
456
- var sc = result && result.structuredContent;
457
- if (sc && Array.isArray(sc.routes) && sc.routes.length > 0) {
458
- var picked = pickRouteGeometry(sc.routes[0]);
459
- if (picked) return picked;
460
- }
461
- if (result && Array.isArray(result.content)) {
462
- for (var i = 0; i < result.content.length; i++) {
463
- var c = result.content[i];
464
- if (c && c.type === 'text' && typeof c.text === 'string') {
465
- try {
466
- var parsed = JSON.parse(c.text);
467
- if (parsed && Array.isArray(parsed.routes) && parsed.routes[0]) {
468
- var picked2 = pickRouteGeometry(parsed.routes[0]);
469
- if (picked2) return picked2;
470
- }
471
- if (parsed && parsed.geometry && parsed.geometry.coordinates) {
472
- return parsed;
473
- }
474
- } catch (_) { /* not JSON */ }
475
- }
476
- }
477
- }
478
- return null;
479
- }
480
-
481
- // Mapbox Directions can return geometry in 3 shapes:
482
- // - GeoJSON : { type: 'LineString', coordinates: [[lng,lat], ...] }
483
- // - polyline : "encoded_string" (precision 5, default)
484
- // - polyline6: "encoded_string" (precision 6)
485
- // We accept all three and normalize to GeoJSON for rendering.
486
- function pickRouteGeometry(route) {
487
- if (!route || !route.geometry) return null;
488
- var g = route.geometry;
489
- if (typeof g === 'object' && Array.isArray(g.coordinates) && g.coordinates.length) {
490
- return { geometry: g, summary: buildSummary(route) };
491
- }
492
- if (typeof g === 'string' && g.length > 0) {
493
- // Pick precision: polyline6 strings often contain '_' / '@'-like density
494
- // but the response usually carries a hint at top level. Try 6 first if
495
- // the response object says so, else 5.
496
- var coords = decodePolyline(g, 5);
497
- if (coords.length > 0 && coordsLookSane(coords)) {
498
- return {
499
- geometry: { type: 'LineString', coordinates: coords },
500
- summary: buildSummary(route)
501
- };
502
- }
503
- coords = decodePolyline(g, 6);
504
- if (coords.length > 0 && coordsLookSane(coords)) {
505
- return {
506
- geometry: { type: 'LineString', coordinates: coords },
507
- summary: buildSummary(route)
508
- };
509
- }
510
- }
511
- return null;
512
- }
513
-
514
- function coordsLookSane(coords) {
515
- for (var i = 0; i < coords.length; i++) {
516
- var c = coords[i];
517
- if (!Array.isArray(c) || c.length !== 2) return false;
518
- if (c[0] < -180 || c[0] > 180 || c[1] < -90 || c[1] > 90) return false;
519
- }
520
- return true;
521
- }
522
-
523
- // Standard Google/Mapbox polyline decoder. Precision = 5 (default) or 6.
524
- function decodePolyline(str, precision) {
525
- precision = precision || 5;
526
- var factor = Math.pow(10, precision);
527
- var coords = [];
528
- var lat = 0;
529
- var lng = 0;
530
- var i = 0;
531
- while (i < str.length) {
532
- var shift = 0;
533
- var result = 0;
534
- var b;
535
- do {
536
- b = str.charCodeAt(i++) - 63;
537
- result |= (b & 0x1f) << shift;
538
- shift += 5;
539
- } while (b >= 0x20 && i < str.length);
540
- lat += (result & 1) ? ~(result >> 1) : (result >> 1);
541
- shift = 0;
542
- result = 0;
543
- do {
544
- b = str.charCodeAt(i++) - 63;
545
- result |= (b & 0x1f) << shift;
546
- shift += 5;
547
- } while (b >= 0x20 && i < str.length);
548
- lng += (result & 1) ? ~(result >> 1) : (result >> 1);
549
- coords.push([lng / factor, lat / factor]);
550
- }
551
- return coords;
552
- }
553
-
554
- function buildSummary(route) {
555
- var parts = [];
556
- if (typeof route.distance === 'number') {
557
- parts.push((route.distance / 1609.34).toFixed(1) + ' mi');
558
- }
559
- if (typeof route.duration === 'number') {
560
- parts.push(Math.round(route.duration / 60) + ' min');
561
- }
562
- return parts.length ? 'Route: ' + parts.join(', ') : 'Route';
563
- }
564
-
565
- function drawRoute(route) {
566
- if (!route.geometry || !route.geometry.coordinates || !route.geometry.coordinates.length) {
567
- loadingEl.style.display = 'none';
568
- errorEl.textContent = 'Route geometry is empty.';
569
- errorEl.style.display = 'block';
570
- return;
571
- }
572
-
573
- errorEl.style.display = 'none';
574
-
575
- if (route.summary && summaryEl.style.display === 'none') {
576
- summaryEl.textContent = route.summary;
577
- summaryEl.style.display = 'block';
578
- }
579
-
580
- if (map.getLayer('route-line')) map.removeLayer('route-line');
581
- if (map.getSource('route')) map.removeSource('route');
582
- // Remove any markers from a prior render so we don't stack pins.
583
- for (var mi = 0; mi < routeMarkers.length; mi++) {
584
- routeMarkers[mi].remove();
585
- }
586
- routeMarkers = [];
587
-
588
- map.addSource('route', {
589
- type: 'geojson',
590
- data: { type: 'Feature', geometry: route.geometry, properties: {} }
591
- });
592
- map.addLayer({
593
- id: 'route-line',
594
- type: 'line',
595
- source: 'route',
596
- layout: { 'line-join': 'round', 'line-cap': 'round' },
597
- paint: { 'line-color': '#3b82f6', 'line-width': 5, 'line-opacity': 0.85 }
598
- });
599
-
600
- var coords = route.geometry.coordinates;
601
- routeMarkers.push(
602
- new mapboxgl.Marker({ color: '#22c55e' })
603
- .setLngLat(coords[0])
604
- .setPopup(new mapboxgl.Popup().setText('Start'))
605
- .addTo(map)
606
- );
607
- routeMarkers.push(
608
- new mapboxgl.Marker({ color: '#ef4444' })
609
- .setLngLat(coords[coords.length - 1])
610
- .setPopup(new mapboxgl.Popup().setText('End'))
611
- .addTo(map)
612
- );
613
-
614
- var lngs = coords.map(function(c) { return c[0]; });
615
- var lats = coords.map(function(c) { return c[1]; });
616
- var bounds = [
617
- [Math.min.apply(null, lngs), Math.min.apply(null, lats)],
618
- [Math.max.apply(null, lngs), Math.max.apply(null, lats)]
619
- ];
620
-
621
- loadingEl.style.display = 'none';
622
- requestSizeToFit();
623
- setTimeout(function() {
624
- map.resize();
625
- map.fitBounds(bounds, {
626
- padding: { top: 70, bottom: 30, left: 30, right: 30 },
627
- duration: 600
628
- });
629
- }, 60);
630
- }
631
- })();
632
- </script>
633
- </body>
634
- </html>`;
635
- }
636
- function escapeForScript(s) {
637
- // Prevent </script> inside JSON from breaking out of the script tag.
638
- return s.replace(/<\/script>/gi, '<\\/script>');
639
- }
640
- //# sourceMappingURL=directionsAppHtml.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"directionsAppHtml.js","sourceRoot":"","sources":["../../../../src/resources/ui-apps/directionsAppHtml.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,kCAAkC;;;AAyClC,0DAwmBC;AA/oBD;;;;;;;;;;;;;;;;;;;GAmBG;AAEU,QAAA,iBAAiB,GAAG,QAAQ,CAAC;AAkB1C,SAAgB,uBAAuB,CAAC,MAKvC;IACC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,yBAAiB,CAAC;IAExD,MAAM,iBAAiB,GAAG,WAAW;QACnC,CAAC,CAAC,qDAAqD,eAAe,CAClE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAC5B,WAAW;QACd,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;;mDAM0C,SAAS;oDACR,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8B3D,iBAAiB;;;;gBAIH,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;uBACpB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8iB1C,CAAC;AACT,CAAC;AAED,SAAS,eAAe,CAAC,CAAS;IAChC,qEAAqE;IACrE,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC"}
@@ -1,29 +0,0 @@
1
- import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
2
- import type { ReadResourceResult, ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';
3
- import { BaseResource } from '../BaseResource.js';
4
- import type { HttpRequest } from '../../utils/types.js';
5
- /**
6
- * MCP Apps resource for `directions_tool` — serves the HTML at
7
- * `ui://mapbox/directions-app/index.html`. The iframe waits for the host to
8
- * deliver the tool result via the `ui/notifications/tool-result` postMessage
9
- * event and renders the route from `structuredContent.routes[0]`.
10
- *
11
- * The legacy MCP-UI pathway (inline `rawHtml` on the tool result) uses the
12
- * same HTML template via `renderDirectionsAppHtml` with the call's input
13
- * params baked in at tool-execute time; the iframe self-fetches the route
14
- * from the Directions API using those params.
15
- */
16
- export declare class DirectionsAppUIResource extends BaseResource {
17
- readonly name = "Directions App UI";
18
- readonly uri = "ui://mapbox/directions-app/index.html";
19
- readonly description = "Interactive UI for visualizing a Mapbox directions route with Mapbox GL JS (MCP Apps)";
20
- readonly mimeType = "text/html;profile=mcp-app";
21
- private readonly httpRequest;
22
- private readonly apiEndpoint;
23
- constructor(params: {
24
- httpRequest: HttpRequest;
25
- apiEndpoint?: () => string;
26
- });
27
- read(_uri: string, extra?: RequestHandlerExtra<ServerRequest, ServerNotification>): Promise<ReadResourceResult>;
28
- }
29
- //# sourceMappingURL=DirectionsAppUIResource.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DirectionsAppUIResource.d.ts","sourceRoot":"","sources":["../../../../src/resources/ui-apps/DirectionsAppUIResource.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,SAAQ,YAAY;IACvD,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,GAAG,2CAA2C;IACvD,QAAQ,CAAC,WAAW,2FACsE;IAC1F,QAAQ,CAAC,QAAQ,+BAAsB;IAEvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;gBAE/B,MAAM,EAAE;QAClB,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;KAC5B;IAQK,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,GAC7D,OAAO,CAAC,kBAAkB,CAAC;CAwC/B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DirectionsAppUIResource.js","sourceRoot":"","sources":["../../../../src/resources/ui-apps/DirectionsAppUIResource.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,MAAM,OAAO,uBAAwB,SAAQ,YAAY;IAC9C,IAAI,GAAG,mBAAmB,CAAC;IAC3B,GAAG,GAAG,uCAAuC,CAAC;IAC9C,WAAW,GAClB,uFAAuF,CAAC;IACjF,QAAQ,GAAG,kBAAkB,CAAC;IAEtB,WAAW,CAAc;IACzB,WAAW,CAAe;IAE3C,YAAY,MAGX;QACC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,WAAW;YACd,MAAM,CAAC,WAAW;gBAClB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,yBAAyB,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,IAAI,CACR,IAAY,EACZ,KAA8D;QAE9D,MAAM,WAAW,GACd,KAAK,EAAE,QAAQ,EAAE,KAA4B;YAC9C,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAC/B,EAAE,CAAC;QAEL,MAAM,WAAW,GAAG,MAAM,wBAAwB,CAAC;YACjD,WAAW;YACX,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,uBAAuB,CAAC;YACnC,WAAW,EAAE,WAAW,IAAI,EAAE;YAC9B,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;SAChC,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI;oBACV,KAAK,EAAE;wBACL,EAAE,EAAE;4BACF,GAAG,EAAE;gCACH,cAAc,EAAE;oCACd,sBAAsB;oCACtB,2BAA2B;iCAC5B;gCACD,eAAe,EAAE,CAAC,wBAAwB,CAAC;gCAC3C,aAAa,EAAE,CAAC,OAAO,CAAC;6BACzB;4BACD,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;yBAC5C;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF"}