@mapbox/mcp-server 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/README.md +111 -14
  2. package/dist/commonjs/cli.d.ts.map +1 -1
  3. package/dist/commonjs/cli.js +5 -2
  4. package/dist/commonjs/cli.js.map +1 -1
  5. package/dist/commonjs/index.js +38 -1
  6. package/dist/commonjs/index.js.map +1 -1
  7. package/dist/commonjs/resources/BaseResource.d.ts +18 -0
  8. package/dist/commonjs/resources/BaseResource.d.ts.map +1 -1
  9. package/dist/commonjs/resources/BaseResource.js +26 -4
  10. package/dist/commonjs/resources/BaseResource.js.map +1 -1
  11. package/dist/commonjs/resources/resourceRegistry.d.ts +1 -2
  12. package/dist/commonjs/resources/resourceRegistry.d.ts.map +1 -1
  13. package/dist/commonjs/resources/resourceRegistry.js +0 -2
  14. package/dist/commonjs/resources/resourceRegistry.js.map +1 -1
  15. package/dist/commonjs/resources/temporary/TemporaryDataResource.d.ts.map +1 -1
  16. package/dist/commonjs/resources/temporary/TemporaryDataResource.js +20 -10
  17. package/dist/commonjs/resources/temporary/TemporaryDataResource.js.map +1 -1
  18. package/dist/commonjs/resources/ui-apps/MapAppUIResource.d.ts.map +1 -1
  19. package/dist/commonjs/resources/ui-apps/MapAppUIResource.js +2 -8
  20. package/dist/commonjs/resources/ui-apps/MapAppUIResource.js.map +1 -1
  21. package/dist/commonjs/resources/ui-apps/mapAppCsp.d.ts +22 -0
  22. package/dist/commonjs/resources/ui-apps/mapAppCsp.d.ts.map +1 -0
  23. package/dist/commonjs/resources/ui-apps/mapAppCsp.js +39 -0
  24. package/dist/commonjs/resources/ui-apps/mapAppCsp.js.map +1 -0
  25. package/dist/commonjs/resources/ui-apps/mapAppHtml.d.ts +3 -3
  26. package/dist/commonjs/resources/ui-apps/mapAppHtml.d.ts.map +1 -1
  27. package/dist/commonjs/resources/ui-apps/mapAppHtml.js +89 -13
  28. package/dist/commonjs/resources/ui-apps/mapAppHtml.js.map +1 -1
  29. package/dist/commonjs/tools/BaseTool.d.ts +19 -0
  30. package/dist/commonjs/tools/BaseTool.d.ts.map +1 -1
  31. package/dist/commonjs/tools/BaseTool.js +25 -3
  32. package/dist/commonjs/tools/BaseTool.js.map +1 -1
  33. package/dist/commonjs/tools/directions-tool/DirectionsTool.d.ts +16 -0
  34. package/dist/commonjs/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
  35. package/dist/commonjs/tools/directions-tool/DirectionsTool.js +107 -2
  36. package/dist/commonjs/tools/directions-tool/DirectionsTool.js.map +1 -1
  37. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.d.ts.map +1 -1
  38. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.js +7 -4
  39. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.js.map +1 -1
  40. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts +4 -0
  41. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts.map +1 -1
  42. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.js +9 -1
  43. package/dist/commonjs/tools/ground-location-tool/GroundLocationTool.output.schema.js.map +1 -1
  44. package/dist/commonjs/tools/isochrone-tool/IsochroneTool.js +1 -1
  45. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.d.ts +11 -1
  46. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.d.ts.map +1 -1
  47. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.js +3 -3
  48. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.js.map +1 -1
  49. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.js +134 -139
  50. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.js.map +1 -1
  51. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts +71 -10
  52. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts.map +1 -1
  53. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.js +86 -10
  54. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.js.map +1 -1
  55. package/dist/commonjs/tools/render-map-tool/RenderMapTool.d.ts +2 -4
  56. package/dist/commonjs/tools/render-map-tool/RenderMapTool.d.ts.map +1 -1
  57. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.d.ts +50 -0
  58. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.d.ts.map +1 -1
  59. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.js +51 -2
  60. package/dist/commonjs/tools/render-map-tool/RenderMapTool.input.schema.js.map +1 -1
  61. package/dist/commonjs/tools/render-map-tool/RenderMapTool.js +50 -18
  62. package/dist/commonjs/tools/render-map-tool/RenderMapTool.js.map +1 -1
  63. package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.d.ts +50 -0
  64. package/dist/commonjs/tools/render-map-tool/RenderMapTool.output.schema.d.ts.map +1 -1
  65. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
  66. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.d.ts.map +1 -1
  67. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js +2 -2
  68. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js.map +1 -1
  69. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +6 -3
  70. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
  71. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
  72. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.input.schema.d.ts +3 -3
  73. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.input.schema.d.ts.map +1 -1
  74. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.input.schema.js +16 -2
  75. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.input.schema.js.map +1 -1
  76. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js +17 -6
  77. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
  78. package/dist/commonjs/utils/index.d.ts +2 -0
  79. package/dist/commonjs/utils/index.d.ts.map +1 -1
  80. package/dist/commonjs/utils/index.js +8 -1
  81. package/dist/commonjs/utils/index.js.map +1 -1
  82. package/dist/commonjs/utils/jsonSchema2020.d.ts +26 -0
  83. package/dist/commonjs/utils/jsonSchema2020.d.ts.map +1 -0
  84. package/dist/commonjs/utils/jsonSchema2020.js +143 -0
  85. package/dist/commonjs/utils/jsonSchema2020.js.map +1 -0
  86. package/dist/commonjs/utils/jwtUtils.d.ts +48 -0
  87. package/dist/commonjs/utils/jwtUtils.d.ts.map +1 -1
  88. package/dist/commonjs/utils/jwtUtils.js +63 -0
  89. package/dist/commonjs/utils/jwtUtils.js.map +1 -1
  90. package/dist/commonjs/utils/mapAppPayload.d.ts +109 -0
  91. package/dist/commonjs/utils/mapAppPayload.d.ts.map +1 -1
  92. package/dist/commonjs/utils/mapAppPayload.js +38 -2
  93. package/dist/commonjs/utils/mapAppPayload.js.map +1 -1
  94. package/dist/commonjs/utils/redactToken.d.ts +3 -0
  95. package/dist/commonjs/utils/redactToken.d.ts.map +1 -0
  96. package/dist/commonjs/utils/redactToken.js +55 -0
  97. package/dist/commonjs/utils/redactToken.js.map +1 -0
  98. package/dist/commonjs/utils/redactingSpanExporter.d.ts +24 -0
  99. package/dist/commonjs/utils/redactingSpanExporter.d.ts.map +1 -0
  100. package/dist/commonjs/utils/redactingSpanExporter.js +97 -0
  101. package/dist/commonjs/utils/redactingSpanExporter.js.map +1 -0
  102. package/dist/commonjs/utils/selfFetchRef.d.ts.map +1 -1
  103. package/dist/commonjs/utils/selfFetchRef.js +31 -0
  104. package/dist/commonjs/utils/selfFetchRef.js.map +1 -1
  105. package/dist/commonjs/utils/serverInstructions.d.ts +12 -0
  106. package/dist/commonjs/utils/serverInstructions.d.ts.map +1 -0
  107. package/dist/commonjs/utils/serverInstructions.js +28 -0
  108. package/dist/commonjs/utils/serverInstructions.js.map +1 -0
  109. package/dist/commonjs/utils/storeMapPayload.d.ts +11 -11
  110. package/dist/commonjs/utils/storeMapPayload.d.ts.map +1 -1
  111. package/dist/commonjs/utils/storeMapPayload.js +14 -13
  112. package/dist/commonjs/utils/storeMapPayload.js.map +1 -1
  113. package/dist/commonjs/utils/temporaryResourceManager.d.ts +10 -4
  114. package/dist/commonjs/utils/temporaryResourceManager.d.ts.map +1 -1
  115. package/dist/commonjs/utils/temporaryResourceManager.js.map +1 -1
  116. package/dist/commonjs/utils/tracing.d.ts +4 -0
  117. package/dist/commonjs/utils/tracing.d.ts.map +1 -1
  118. package/dist/commonjs/utils/tracing.js +24 -1
  119. package/dist/commonjs/utils/tracing.js.map +1 -1
  120. package/dist/commonjs/utils/urlSafety.d.ts +23 -7
  121. package/dist/commonjs/utils/urlSafety.d.ts.map +1 -1
  122. package/dist/commonjs/utils/urlSafety.js +84 -66
  123. package/dist/commonjs/utils/urlSafety.js.map +1 -1
  124. package/dist/commonjs/version.json +3 -3
  125. package/dist/esm/cli.d.ts.map +1 -1
  126. package/dist/esm/cli.js +5 -2
  127. package/dist/esm/cli.js.map +1 -1
  128. package/dist/esm/index.js +39 -2
  129. package/dist/esm/index.js.map +1 -1
  130. package/dist/esm/resources/BaseResource.d.ts +18 -0
  131. package/dist/esm/resources/BaseResource.d.ts.map +1 -1
  132. package/dist/esm/resources/BaseResource.js +26 -4
  133. package/dist/esm/resources/BaseResource.js.map +1 -1
  134. package/dist/esm/resources/resourceRegistry.d.ts +1 -2
  135. package/dist/esm/resources/resourceRegistry.d.ts.map +1 -1
  136. package/dist/esm/resources/resourceRegistry.js +0 -2
  137. package/dist/esm/resources/resourceRegistry.js.map +1 -1
  138. package/dist/esm/resources/temporary/TemporaryDataResource.d.ts.map +1 -1
  139. package/dist/esm/resources/temporary/TemporaryDataResource.js +21 -11
  140. package/dist/esm/resources/temporary/TemporaryDataResource.js.map +1 -1
  141. package/dist/esm/resources/ui-apps/MapAppUIResource.d.ts.map +1 -1
  142. package/dist/esm/resources/ui-apps/MapAppUIResource.js +2 -8
  143. package/dist/esm/resources/ui-apps/MapAppUIResource.js.map +1 -1
  144. package/dist/esm/resources/ui-apps/mapAppCsp.d.ts +22 -0
  145. package/dist/esm/resources/ui-apps/mapAppCsp.d.ts.map +1 -0
  146. package/dist/esm/resources/ui-apps/mapAppCsp.js +36 -0
  147. package/dist/esm/resources/ui-apps/mapAppCsp.js.map +1 -0
  148. package/dist/esm/resources/ui-apps/mapAppHtml.d.ts +3 -3
  149. package/dist/esm/resources/ui-apps/mapAppHtml.d.ts.map +1 -1
  150. package/dist/esm/resources/ui-apps/mapAppHtml.js +89 -13
  151. package/dist/esm/resources/ui-apps/mapAppHtml.js.map +1 -1
  152. package/dist/esm/tools/BaseTool.d.ts +19 -0
  153. package/dist/esm/tools/BaseTool.d.ts.map +1 -1
  154. package/dist/esm/tools/BaseTool.js +25 -3
  155. package/dist/esm/tools/BaseTool.js.map +1 -1
  156. package/dist/esm/tools/directions-tool/DirectionsTool.d.ts +16 -0
  157. package/dist/esm/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
  158. package/dist/esm/tools/directions-tool/DirectionsTool.js +108 -3
  159. package/dist/esm/tools/directions-tool/DirectionsTool.js.map +1 -1
  160. package/dist/esm/tools/ground-location-tool/GroundLocationTool.d.ts.map +1 -1
  161. package/dist/esm/tools/ground-location-tool/GroundLocationTool.js +7 -4
  162. package/dist/esm/tools/ground-location-tool/GroundLocationTool.js.map +1 -1
  163. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts +4 -0
  164. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.d.ts.map +1 -1
  165. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.js +9 -1
  166. package/dist/esm/tools/ground-location-tool/GroundLocationTool.output.schema.js.map +1 -1
  167. package/dist/esm/tools/isochrone-tool/IsochroneTool.js +2 -2
  168. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.d.ts +11 -1
  169. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.d.ts.map +1 -1
  170. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.js +3 -3
  171. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.js.map +1 -1
  172. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.js +135 -140
  173. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.js.map +1 -1
  174. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts +71 -10
  175. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts.map +1 -1
  176. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.js +85 -9
  177. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.js.map +1 -1
  178. package/dist/esm/tools/render-map-tool/RenderMapTool.d.ts +2 -4
  179. package/dist/esm/tools/render-map-tool/RenderMapTool.d.ts.map +1 -1
  180. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.d.ts +50 -0
  181. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.d.ts.map +1 -1
  182. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.js +51 -2
  183. package/dist/esm/tools/render-map-tool/RenderMapTool.input.schema.js.map +1 -1
  184. package/dist/esm/tools/render-map-tool/RenderMapTool.js +51 -19
  185. package/dist/esm/tools/render-map-tool/RenderMapTool.js.map +1 -1
  186. package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.d.ts +50 -0
  187. package/dist/esm/tools/render-map-tool/RenderMapTool.output.schema.d.ts.map +1 -1
  188. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
  189. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.d.ts.map +1 -1
  190. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js +2 -2
  191. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.js.map +1 -1
  192. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +6 -3
  193. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
  194. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
  195. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.input.schema.d.ts +3 -3
  196. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.input.schema.d.ts.map +1 -1
  197. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.input.schema.js +17 -3
  198. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.input.schema.js.map +1 -1
  199. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js +18 -7
  200. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
  201. package/dist/esm/utils/index.d.ts +2 -0
  202. package/dist/esm/utils/index.d.ts.map +1 -1
  203. package/dist/esm/utils/index.js +5 -0
  204. package/dist/esm/utils/index.js.map +1 -1
  205. package/dist/esm/utils/jsonSchema2020.d.ts +26 -0
  206. package/dist/esm/utils/jsonSchema2020.d.ts.map +1 -0
  207. package/dist/esm/utils/jsonSchema2020.js +138 -0
  208. package/dist/esm/utils/jsonSchema2020.js.map +1 -0
  209. package/dist/esm/utils/jwtUtils.d.ts +48 -0
  210. package/dist/esm/utils/jwtUtils.d.ts.map +1 -1
  211. package/dist/esm/utils/jwtUtils.js +61 -0
  212. package/dist/esm/utils/jwtUtils.js.map +1 -1
  213. package/dist/esm/utils/mapAppPayload.d.ts +109 -0
  214. package/dist/esm/utils/mapAppPayload.d.ts.map +1 -1
  215. package/dist/esm/utils/mapAppPayload.js +38 -2
  216. package/dist/esm/utils/mapAppPayload.js.map +1 -1
  217. package/dist/esm/utils/redactToken.d.ts +3 -0
  218. package/dist/esm/utils/redactToken.d.ts.map +1 -0
  219. package/dist/esm/utils/redactToken.js +52 -0
  220. package/dist/esm/utils/redactToken.js.map +1 -0
  221. package/dist/esm/utils/redactingSpanExporter.d.ts +24 -0
  222. package/dist/esm/utils/redactingSpanExporter.d.ts.map +1 -0
  223. package/dist/esm/utils/redactingSpanExporter.js +93 -0
  224. package/dist/esm/utils/redactingSpanExporter.js.map +1 -0
  225. package/dist/esm/utils/selfFetchRef.d.ts.map +1 -1
  226. package/dist/esm/utils/selfFetchRef.js +31 -0
  227. package/dist/esm/utils/selfFetchRef.js.map +1 -1
  228. package/dist/esm/utils/serverInstructions.d.ts +12 -0
  229. package/dist/esm/utils/serverInstructions.d.ts.map +1 -0
  230. package/dist/esm/utils/serverInstructions.js +25 -0
  231. package/dist/esm/utils/serverInstructions.js.map +1 -0
  232. package/dist/esm/utils/storeMapPayload.d.ts +11 -11
  233. package/dist/esm/utils/storeMapPayload.d.ts.map +1 -1
  234. package/dist/esm/utils/storeMapPayload.js +14 -13
  235. package/dist/esm/utils/storeMapPayload.js.map +1 -1
  236. package/dist/esm/utils/temporaryResourceManager.d.ts +10 -4
  237. package/dist/esm/utils/temporaryResourceManager.d.ts.map +1 -1
  238. package/dist/esm/utils/temporaryResourceManager.js.map +1 -1
  239. package/dist/esm/utils/tracing.d.ts +4 -0
  240. package/dist/esm/utils/tracing.d.ts.map +1 -1
  241. package/dist/esm/utils/tracing.js +23 -1
  242. package/dist/esm/utils/tracing.js.map +1 -1
  243. package/dist/esm/utils/urlSafety.d.ts +23 -7
  244. package/dist/esm/utils/urlSafety.d.ts.map +1 -1
  245. package/dist/esm/utils/urlSafety.js +80 -66
  246. package/dist/esm/utils/urlSafety.js.map +1 -1
  247. package/dist/esm/version.json +3 -3
  248. package/package.json +3 -2
  249. package/patches/{@modelcontextprotocol+sdk+1.29.0.patch → @modelcontextprotocol+sdk+1.30.0.patch} +6 -2
  250. package/dist/commonjs/resources/ui-apps/StaticMapUIResource.d.ts +0 -15
  251. package/dist/commonjs/resources/ui-apps/StaticMapUIResource.d.ts.map +0 -1
  252. package/dist/commonjs/resources/ui-apps/StaticMapUIResource.js +0 -262
  253. package/dist/commonjs/resources/ui-apps/StaticMapUIResource.js.map +0 -1
  254. package/dist/esm/resources/ui-apps/StaticMapUIResource.d.ts +0 -15
  255. package/dist/esm/resources/ui-apps/StaticMapUIResource.d.ts.map +0 -1
  256. package/dist/esm/resources/ui-apps/StaticMapUIResource.js +0 -258
  257. package/dist/esm/resources/ui-apps/StaticMapUIResource.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"StaticMapUIResource.d.ts","sourceRoot":"","sources":["../../../../src/resources/ui-apps/StaticMapUIResource.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;AAElD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,GAAG,uCAAuC;IACnD,QAAQ,CAAC,WAAW,gEAC2C;IAC/D,QAAQ,CAAC,QAAQ,+BAAsB;IAEjC,IAAI,CAER,IAAI,EAAE,MAAM,EAEZ,MAAM,CAAC,EAAE,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,GAC9D,OAAO,CAAC,kBAAkB,CAAC;CAgP/B"}
@@ -1,262 +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.StaticMapUIResource = void 0;
6
- const server_1 = require("@modelcontextprotocol/ext-apps/server");
7
- const BaseResource_js_1 = require("../BaseResource.js");
8
- /**
9
- * Serves UI App HTML for Static Map Preview
10
- * Implements MCP Apps pattern with ui:// scheme
11
- */
12
- class StaticMapUIResource extends BaseResource_js_1.BaseResource {
13
- name = 'Static Map Preview UI';
14
- uri = 'ui://mapbox/static-map/index.html';
15
- description = 'Interactive UI for previewing static map images (MCP Apps)';
16
- mimeType = server_1.RESOURCE_MIME_TYPE;
17
- async read(
18
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
19
- _uri,
20
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
21
- _extra) {
22
- // Generate HTML for static map visualization with MCP Apps protocol support
23
- const html = `<!DOCTYPE html>
24
- <html>
25
- <head>
26
- <meta charset="UTF-8">
27
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
28
- <title>Static Map Preview</title>
29
- <style>
30
- * { margin: 0; padding: 0; box-sizing: border-box; }
31
- body {
32
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
33
- background: #000;
34
- }
35
- #toolbar {
36
- display: none;
37
- align-items: center;
38
- justify-content: flex-end;
39
- padding: 6px 10px;
40
- background: rgba(0, 0, 0, 0.7);
41
- gap: 8px;
42
- }
43
- #toolbar.visible { display: flex; }
44
- #fullscreen-btn {
45
- background: rgba(255, 255, 255, 0.15);
46
- border: 1px solid rgba(255, 255, 255, 0.3);
47
- color: #fff;
48
- padding: 4px 12px;
49
- border-radius: 4px;
50
- cursor: pointer;
51
- font-size: 12px;
52
- }
53
- #fullscreen-btn:hover { background: rgba(255, 255, 255, 0.25); }
54
- #image-container {
55
- position: relative;
56
- }
57
- #preview-image {
58
- display: none;
59
- max-width: 100%;
60
- width: 100%;
61
- cursor: zoom-in;
62
- }
63
- #preview-image.zoomed {
64
- cursor: zoom-out;
65
- max-width: none;
66
- width: auto;
67
- }
68
- #loading {
69
- padding: 20px;
70
- color: #fff;
71
- font-size: 16px;
72
- }
73
- #error {
74
- padding: 20px;
75
- color: #ff6b6b;
76
- text-align: center;
77
- }
78
- </style>
79
- </head>
80
- <body>
81
- <div id="toolbar">
82
- <button id="fullscreen-btn">⛶ Fullscreen</button>
83
- </div>
84
- <div id="image-container">
85
- <div id="loading">Loading static map preview...</div>
86
- <img id="preview-image" alt="Static Map Preview">
87
- <div id="error" style="display:none"></div>
88
- </div>
89
-
90
- <script type="module">
91
- const image = document.getElementById('preview-image');
92
- const loading = document.getElementById('loading');
93
- const errorDiv = document.getElementById('error');
94
- const toolbar = document.getElementById('toolbar');
95
- const fullscreenBtn = document.getElementById('fullscreen-btn');
96
-
97
- let isZoomed = false;
98
- let currentDisplayMode = 'inline';
99
- let canFullscreen = false;
100
-
101
- image.addEventListener('click', () => {
102
- isZoomed = !isZoomed;
103
- image.classList.toggle('zoomed', isZoomed);
104
- });
105
-
106
- let messageId = 0;
107
- const pendingRequests = new Map();
108
-
109
- function sendRequest(method, params = {}) {
110
- const id = ++messageId;
111
- window.parent.postMessage({ jsonrpc: '2.0', id, method, params }, '*');
112
- return new Promise((resolve, reject) => {
113
- pendingRequests.set(id, { resolve, reject });
114
- });
115
- }
116
-
117
- function sendNotification(method, params = {}) {
118
- window.parent.postMessage({ jsonrpc: '2.0', method, params }, '*');
119
- }
120
-
121
- function requestSizeToFit() {
122
- if (currentDisplayMode !== 'inline') return;
123
- // Use requestAnimationFrame to measure after layout so we get the
124
- // actual rendered height (constrained by max-width:100%), not natural px
125
- requestAnimationFrame(() => {
126
- const toolbarHeight = canFullscreen ? toolbar.offsetHeight : 0;
127
- sendNotification('ui/notifications/size-changed', {
128
- height: Math.round(image.getBoundingClientRect().height) + toolbarHeight
129
- });
130
- });
131
- }
132
-
133
- function updateFullscreenButton() {
134
- fullscreenBtn.textContent =
135
- currentDisplayMode === 'fullscreen' ? '⊟ Exit Fullscreen' : '⛶ Fullscreen';
136
- }
137
-
138
- async function toggleFullscreen() {
139
- const newMode = currentDisplayMode === 'fullscreen' ? 'inline' : 'fullscreen';
140
- try {
141
- const result = await sendRequest('ui/request-display-mode', { mode: newMode });
142
- currentDisplayMode = result?.mode ?? newMode;
143
- updateFullscreenButton();
144
- if (currentDisplayMode === 'inline') requestSizeToFit();
145
- } catch (e) {
146
- console.error('Failed to change display mode:', e);
147
- }
148
- }
149
-
150
- fullscreenBtn.addEventListener('click', toggleFullscreen);
151
-
152
- window.addEventListener('message', (event) => {
153
- const message = event.data;
154
- if (!message || typeof message !== 'object') return;
155
-
156
- if (message.id !== undefined && pendingRequests.has(message.id)) {
157
- const { resolve, reject } = pendingRequests.get(message.id);
158
- pendingRequests.delete(message.id);
159
- if (message.error) reject(new Error(message.error.message));
160
- else resolve(message.result);
161
- return;
162
- }
163
-
164
- if (message.method === 'ui/notifications/tool-result') {
165
- if (message.params) handleToolResult(message.params);
166
- }
167
-
168
- if (message.method === 'ui/notifications/host-context-changed') {
169
- const ctx = message.params;
170
- if (ctx?.displayMode) {
171
- currentDisplayMode = ctx.displayMode;
172
- updateFullscreenButton();
173
- if (currentDisplayMode === 'inline' && image.style.display !== 'none') {
174
- requestSizeToFit();
175
- }
176
- }
177
- }
178
- });
179
-
180
- async function handleToolResult(result) {
181
- const textContent = result.content?.find(c => c.type === 'text');
182
- if (!textContent?.text) {
183
- loading.style.display = 'none';
184
- errorDiv.textContent = 'No URL found in tool result';
185
- errorDiv.style.display = 'block';
186
- return;
187
- }
188
-
189
- const url = textContent.text;
190
- if (!url.includes('api.mapbox.com/styles/') || !url.includes('/static/')) {
191
- loading.style.display = 'none';
192
- errorDiv.textContent = 'Unsupported URL format';
193
- errorDiv.style.display = 'block';
194
- return;
195
- }
196
-
197
- loading.textContent = 'Fetching map from Mapbox...';
198
- try {
199
- const response = await fetch(url);
200
- if (!response.ok) throw new Error('HTTP ' + response.status);
201
- const blob = await response.blob();
202
- const blobUrl = URL.createObjectURL(blob);
203
-
204
- image.onload = () => {
205
- loading.style.display = 'none';
206
- image.style.display = 'block';
207
- if (canFullscreen) toolbar.classList.add('visible');
208
- requestSizeToFit();
209
- };
210
- image.src = blobUrl;
211
- } catch (error) {
212
- loading.style.display = 'none';
213
- errorDiv.textContent = 'Failed to load image: ' + error.message;
214
- errorDiv.style.display = 'block';
215
- }
216
- }
217
-
218
- async function init() {
219
- try {
220
- const result = await sendRequest('ui/initialize', {
221
- protocolVersion: '2026-01-26',
222
- appCapabilities: {},
223
- appInfo: { name: 'Static Map Preview', version: '1.0.0' }
224
- });
225
-
226
- sendNotification('ui/notifications/initialized', {});
227
-
228
- const hostContext = result?.hostContext;
229
- currentDisplayMode = hostContext?.displayMode ?? 'inline';
230
- canFullscreen = hostContext?.availableDisplayModes?.includes('fullscreen') ?? false;
231
- } catch (error) {
232
- console.error('Failed to connect to MCP host:', error);
233
- loading.textContent = 'Failed to connect: ' + error.message;
234
- loading.style.color = '#cc0000';
235
- }
236
- }
237
-
238
- init();
239
- </script>
240
- </body>
241
- </html>`;
242
- return {
243
- contents: [
244
- {
245
- uri: this.uri,
246
- mimeType: server_1.RESOURCE_MIME_TYPE,
247
- text: html,
248
- _meta: {
249
- ui: {
250
- csp: {
251
- connectDomains: ['https://api.mapbox.com'],
252
- resourceDomains: ['https://api.mapbox.com']
253
- }
254
- }
255
- }
256
- }
257
- ]
258
- };
259
- }
260
- }
261
- exports.StaticMapUIResource = StaticMapUIResource;
262
- //# sourceMappingURL=StaticMapUIResource.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StaticMapUIResource.js","sourceRoot":"","sources":["../../../../src/resources/ui-apps/StaticMapUIResource.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,kCAAkC;;;AAQlC,kEAA2E;AAC3E,wDAAkD;AAElD;;;GAGG;AACH,MAAa,mBAAoB,SAAQ,8BAAY;IAC1C,IAAI,GAAG,uBAAuB,CAAC;IAC/B,GAAG,GAAG,mCAAmC,CAAC;IAC1C,WAAW,GAClB,4DAA4D,CAAC;IACtD,QAAQ,GAAG,2BAAkB,CAAC;IAEvC,KAAK,CAAC,IAAI;IACR,6DAA6D;IAC7D,IAAY;IACZ,6DAA6D;IAC7D,MAA+D;QAE/D,4EAA4E;QAC5E,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0NT,CAAC;QAEL,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,QAAQ,EAAE,2BAAkB;oBAC5B,IAAI,EAAE,IAAI;oBACV,KAAK,EAAE;wBACL,EAAE,EAAE;4BACF,GAAG,EAAE;gCACH,cAAc,EAAE,CAAC,wBAAwB,CAAC;gCAC1C,eAAe,EAAE,CAAC,wBAAwB,CAAC;6BAC5C;yBACF;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF;AA5PD,kDA4PC"}
@@ -1,15 +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
- /**
5
- * Serves UI App HTML for Static Map Preview
6
- * Implements MCP Apps pattern with ui:// scheme
7
- */
8
- export declare class StaticMapUIResource extends BaseResource {
9
- readonly name = "Static Map Preview UI";
10
- readonly uri = "ui://mapbox/static-map/index.html";
11
- readonly description = "Interactive UI for previewing static map images (MCP Apps)";
12
- readonly mimeType = "text/html;profile=mcp-app";
13
- read(_uri: string, _extra?: RequestHandlerExtra<ServerRequest, ServerNotification>): Promise<ReadResourceResult>;
14
- }
15
- //# sourceMappingURL=StaticMapUIResource.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StaticMapUIResource.d.ts","sourceRoot":"","sources":["../../../../src/resources/ui-apps/StaticMapUIResource.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;AAElD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,GAAG,uCAAuC;IACnD,QAAQ,CAAC,WAAW,gEAC2C;IAC/D,QAAQ,CAAC,QAAQ,+BAAsB;IAEjC,IAAI,CAER,IAAI,EAAE,MAAM,EAEZ,MAAM,CAAC,EAAE,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,GAC9D,OAAO,CAAC,kBAAkB,CAAC;CAgP/B"}
@@ -1,258 +0,0 @@
1
- // Copyright (c) Mapbox, Inc.
2
- // Licensed under the MIT License.
3
- import { RESOURCE_MIME_TYPE } from '@modelcontextprotocol/ext-apps/server';
4
- import { BaseResource } from '../BaseResource.js';
5
- /**
6
- * Serves UI App HTML for Static Map Preview
7
- * Implements MCP Apps pattern with ui:// scheme
8
- */
9
- export class StaticMapUIResource extends BaseResource {
10
- name = 'Static Map Preview UI';
11
- uri = 'ui://mapbox/static-map/index.html';
12
- description = 'Interactive UI for previewing static map images (MCP Apps)';
13
- mimeType = RESOURCE_MIME_TYPE;
14
- async read(
15
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
16
- _uri,
17
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
18
- _extra) {
19
- // Generate HTML for static map visualization with MCP Apps protocol support
20
- const html = `<!DOCTYPE html>
21
- <html>
22
- <head>
23
- <meta charset="UTF-8">
24
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
25
- <title>Static Map Preview</title>
26
- <style>
27
- * { margin: 0; padding: 0; box-sizing: border-box; }
28
- body {
29
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
30
- background: #000;
31
- }
32
- #toolbar {
33
- display: none;
34
- align-items: center;
35
- justify-content: flex-end;
36
- padding: 6px 10px;
37
- background: rgba(0, 0, 0, 0.7);
38
- gap: 8px;
39
- }
40
- #toolbar.visible { display: flex; }
41
- #fullscreen-btn {
42
- background: rgba(255, 255, 255, 0.15);
43
- border: 1px solid rgba(255, 255, 255, 0.3);
44
- color: #fff;
45
- padding: 4px 12px;
46
- border-radius: 4px;
47
- cursor: pointer;
48
- font-size: 12px;
49
- }
50
- #fullscreen-btn:hover { background: rgba(255, 255, 255, 0.25); }
51
- #image-container {
52
- position: relative;
53
- }
54
- #preview-image {
55
- display: none;
56
- max-width: 100%;
57
- width: 100%;
58
- cursor: zoom-in;
59
- }
60
- #preview-image.zoomed {
61
- cursor: zoom-out;
62
- max-width: none;
63
- width: auto;
64
- }
65
- #loading {
66
- padding: 20px;
67
- color: #fff;
68
- font-size: 16px;
69
- }
70
- #error {
71
- padding: 20px;
72
- color: #ff6b6b;
73
- text-align: center;
74
- }
75
- </style>
76
- </head>
77
- <body>
78
- <div id="toolbar">
79
- <button id="fullscreen-btn">⛶ Fullscreen</button>
80
- </div>
81
- <div id="image-container">
82
- <div id="loading">Loading static map preview...</div>
83
- <img id="preview-image" alt="Static Map Preview">
84
- <div id="error" style="display:none"></div>
85
- </div>
86
-
87
- <script type="module">
88
- const image = document.getElementById('preview-image');
89
- const loading = document.getElementById('loading');
90
- const errorDiv = document.getElementById('error');
91
- const toolbar = document.getElementById('toolbar');
92
- const fullscreenBtn = document.getElementById('fullscreen-btn');
93
-
94
- let isZoomed = false;
95
- let currentDisplayMode = 'inline';
96
- let canFullscreen = false;
97
-
98
- image.addEventListener('click', () => {
99
- isZoomed = !isZoomed;
100
- image.classList.toggle('zoomed', isZoomed);
101
- });
102
-
103
- let messageId = 0;
104
- const pendingRequests = new Map();
105
-
106
- function sendRequest(method, params = {}) {
107
- const id = ++messageId;
108
- window.parent.postMessage({ jsonrpc: '2.0', id, method, params }, '*');
109
- return new Promise((resolve, reject) => {
110
- pendingRequests.set(id, { resolve, reject });
111
- });
112
- }
113
-
114
- function sendNotification(method, params = {}) {
115
- window.parent.postMessage({ jsonrpc: '2.0', method, params }, '*');
116
- }
117
-
118
- function requestSizeToFit() {
119
- if (currentDisplayMode !== 'inline') return;
120
- // Use requestAnimationFrame to measure after layout so we get the
121
- // actual rendered height (constrained by max-width:100%), not natural px
122
- requestAnimationFrame(() => {
123
- const toolbarHeight = canFullscreen ? toolbar.offsetHeight : 0;
124
- sendNotification('ui/notifications/size-changed', {
125
- height: Math.round(image.getBoundingClientRect().height) + toolbarHeight
126
- });
127
- });
128
- }
129
-
130
- function updateFullscreenButton() {
131
- fullscreenBtn.textContent =
132
- currentDisplayMode === 'fullscreen' ? '⊟ Exit Fullscreen' : '⛶ Fullscreen';
133
- }
134
-
135
- async function toggleFullscreen() {
136
- const newMode = currentDisplayMode === 'fullscreen' ? 'inline' : 'fullscreen';
137
- try {
138
- const result = await sendRequest('ui/request-display-mode', { mode: newMode });
139
- currentDisplayMode = result?.mode ?? newMode;
140
- updateFullscreenButton();
141
- if (currentDisplayMode === 'inline') requestSizeToFit();
142
- } catch (e) {
143
- console.error('Failed to change display mode:', e);
144
- }
145
- }
146
-
147
- fullscreenBtn.addEventListener('click', toggleFullscreen);
148
-
149
- window.addEventListener('message', (event) => {
150
- const message = event.data;
151
- if (!message || typeof message !== 'object') return;
152
-
153
- if (message.id !== undefined && pendingRequests.has(message.id)) {
154
- const { resolve, reject } = pendingRequests.get(message.id);
155
- pendingRequests.delete(message.id);
156
- if (message.error) reject(new Error(message.error.message));
157
- else resolve(message.result);
158
- return;
159
- }
160
-
161
- if (message.method === 'ui/notifications/tool-result') {
162
- if (message.params) handleToolResult(message.params);
163
- }
164
-
165
- if (message.method === 'ui/notifications/host-context-changed') {
166
- const ctx = message.params;
167
- if (ctx?.displayMode) {
168
- currentDisplayMode = ctx.displayMode;
169
- updateFullscreenButton();
170
- if (currentDisplayMode === 'inline' && image.style.display !== 'none') {
171
- requestSizeToFit();
172
- }
173
- }
174
- }
175
- });
176
-
177
- async function handleToolResult(result) {
178
- const textContent = result.content?.find(c => c.type === 'text');
179
- if (!textContent?.text) {
180
- loading.style.display = 'none';
181
- errorDiv.textContent = 'No URL found in tool result';
182
- errorDiv.style.display = 'block';
183
- return;
184
- }
185
-
186
- const url = textContent.text;
187
- if (!url.includes('api.mapbox.com/styles/') || !url.includes('/static/')) {
188
- loading.style.display = 'none';
189
- errorDiv.textContent = 'Unsupported URL format';
190
- errorDiv.style.display = 'block';
191
- return;
192
- }
193
-
194
- loading.textContent = 'Fetching map from Mapbox...';
195
- try {
196
- const response = await fetch(url);
197
- if (!response.ok) throw new Error('HTTP ' + response.status);
198
- const blob = await response.blob();
199
- const blobUrl = URL.createObjectURL(blob);
200
-
201
- image.onload = () => {
202
- loading.style.display = 'none';
203
- image.style.display = 'block';
204
- if (canFullscreen) toolbar.classList.add('visible');
205
- requestSizeToFit();
206
- };
207
- image.src = blobUrl;
208
- } catch (error) {
209
- loading.style.display = 'none';
210
- errorDiv.textContent = 'Failed to load image: ' + error.message;
211
- errorDiv.style.display = 'block';
212
- }
213
- }
214
-
215
- async function init() {
216
- try {
217
- const result = await sendRequest('ui/initialize', {
218
- protocolVersion: '2026-01-26',
219
- appCapabilities: {},
220
- appInfo: { name: 'Static Map Preview', version: '1.0.0' }
221
- });
222
-
223
- sendNotification('ui/notifications/initialized', {});
224
-
225
- const hostContext = result?.hostContext;
226
- currentDisplayMode = hostContext?.displayMode ?? 'inline';
227
- canFullscreen = hostContext?.availableDisplayModes?.includes('fullscreen') ?? false;
228
- } catch (error) {
229
- console.error('Failed to connect to MCP host:', error);
230
- loading.textContent = 'Failed to connect: ' + error.message;
231
- loading.style.color = '#cc0000';
232
- }
233
- }
234
-
235
- init();
236
- </script>
237
- </body>
238
- </html>`;
239
- return {
240
- contents: [
241
- {
242
- uri: this.uri,
243
- mimeType: RESOURCE_MIME_TYPE,
244
- text: html,
245
- _meta: {
246
- ui: {
247
- csp: {
248
- connectDomains: ['https://api.mapbox.com'],
249
- resourceDomains: ['https://api.mapbox.com']
250
- }
251
- }
252
- }
253
- }
254
- ]
255
- };
256
- }
257
- }
258
- //# sourceMappingURL=StaticMapUIResource.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StaticMapUIResource.js","sourceRoot":"","sources":["../../../../src/resources/ui-apps/StaticMapUIResource.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IAC1C,IAAI,GAAG,uBAAuB,CAAC;IAC/B,GAAG,GAAG,mCAAmC,CAAC;IAC1C,WAAW,GAClB,4DAA4D,CAAC;IACtD,QAAQ,GAAG,kBAAkB,CAAC;IAEvC,KAAK,CAAC,IAAI;IACR,6DAA6D;IAC7D,IAAY;IACZ,6DAA6D;IAC7D,MAA+D;QAE/D,4EAA4E;QAC5E,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0NT,CAAC;QAEL,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,CAAC,wBAAwB,CAAC;gCAC1C,eAAe,EAAE,CAAC,wBAAwB,CAAC;6BAC5C;yBACF;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF"}