skybridge 0.0.0-dev.98080a8 → 0.0.0-dev.980fb5d

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 (533) hide show
  1. package/README.md +126 -116
  2. package/dist/cli/build-helpers.d.ts +13 -0
  3. package/dist/cli/build-helpers.js +129 -0
  4. package/dist/cli/build-helpers.js.map +1 -0
  5. package/dist/cli/build-helpers.test.js +168 -0
  6. package/dist/cli/build-helpers.test.js.map +1 -0
  7. package/dist/cli/build-steps.d.ts +2 -0
  8. package/dist/cli/build-steps.js +84 -0
  9. package/dist/cli/build-steps.js.map +1 -0
  10. package/dist/cli/build-steps.test.js +72 -0
  11. package/dist/cli/build-steps.test.js.map +1 -0
  12. package/dist/cli/detect-port.d.ts +2 -2
  13. package/dist/cli/detect-port.js +8 -20
  14. package/dist/cli/detect-port.js.map +1 -1
  15. package/dist/cli/header.d.ts +1 -1
  16. package/dist/cli/header.js +1 -1
  17. package/dist/cli/header.js.map +1 -1
  18. package/dist/cli/resolve-skybridge-config.d.ts +6 -0
  19. package/dist/cli/resolve-skybridge-config.js +28 -0
  20. package/dist/cli/resolve-skybridge-config.js.map +1 -0
  21. package/dist/cli/run-command.js.map +1 -1
  22. package/dist/cli/run-plain.d.ts +18 -0
  23. package/dist/cli/run-plain.js +90 -0
  24. package/dist/cli/run-plain.js.map +1 -0
  25. package/dist/cli/telemetry.js +2 -0
  26. package/dist/cli/telemetry.js.map +1 -1
  27. package/dist/cli/tunnel-control-server.d.ts +9 -0
  28. package/dist/cli/tunnel-control-server.js +31 -0
  29. package/dist/cli/tunnel-control-server.js.map +1 -0
  30. package/dist/cli/tunnel-control-server.test.js +39 -0
  31. package/dist/cli/tunnel-control-server.test.js.map +1 -0
  32. package/dist/cli/tunnel-handler.d.ts +3 -0
  33. package/dist/cli/tunnel-handler.js +48 -0
  34. package/dist/cli/tunnel-handler.js.map +1 -0
  35. package/dist/cli/tunnel-handler.test.js +105 -0
  36. package/dist/cli/tunnel-handler.test.js.map +1 -0
  37. package/dist/cli/tunnel.d.ts +57 -0
  38. package/dist/cli/tunnel.js +154 -0
  39. package/dist/cli/tunnel.js.map +1 -0
  40. package/dist/cli/tunnel.test.js +190 -0
  41. package/dist/cli/tunnel.test.js.map +1 -0
  42. package/dist/cli/types.d.ts +5 -0
  43. package/dist/cli/types.js +2 -0
  44. package/dist/cli/types.js.map +1 -0
  45. package/dist/cli/use-execute-steps.d.ts +1 -1
  46. package/dist/cli/use-execute-steps.js.map +1 -1
  47. package/dist/cli/use-messages.d.ts +3 -0
  48. package/dist/cli/use-messages.js +11 -0
  49. package/dist/cli/use-messages.js.map +1 -0
  50. package/dist/cli/use-nodemon.d.ts +26 -7
  51. package/dist/cli/use-nodemon.js +97 -67
  52. package/dist/cli/use-nodemon.js.map +1 -1
  53. package/dist/cli/use-open-browser.d.ts +1 -0
  54. package/dist/cli/use-open-browser.js +44 -0
  55. package/dist/cli/use-open-browser.js.map +1 -0
  56. package/dist/cli/use-tunnel.d.ts +14 -0
  57. package/dist/cli/use-tunnel.js +131 -0
  58. package/dist/cli/use-tunnel.js.map +1 -0
  59. package/dist/cli/use-typescript-check.d.ts +9 -2
  60. package/dist/cli/use-typescript-check.js +91 -51
  61. package/dist/cli/use-typescript-check.js.map +1 -1
  62. package/dist/commands/build.d.ts +0 -3
  63. package/dist/commands/build.js +3 -18
  64. package/dist/commands/build.js.map +1 -1
  65. package/dist/commands/create.d.ts +9 -0
  66. package/dist/commands/create.js +30 -0
  67. package/dist/commands/create.js.map +1 -0
  68. package/dist/commands/dev.d.ts +4 -1
  69. package/dist/commands/dev.js +95 -9
  70. package/dist/commands/dev.js.map +1 -1
  71. package/dist/commands/start.js +13 -10
  72. package/dist/commands/start.js.map +1 -1
  73. package/dist/commands/telemetry/disable.js.map +1 -1
  74. package/dist/commands/telemetry/enable.js.map +1 -1
  75. package/dist/commands/telemetry/status.js.map +1 -1
  76. package/dist/context-warnings.d.ts +5 -0
  77. package/dist/context-warnings.js +31 -0
  78. package/dist/context-warnings.js.map +1 -0
  79. package/dist/context-warnings.test.js +28 -0
  80. package/dist/context-warnings.test.js.map +1 -0
  81. package/dist/server/app.d.ts +211 -0
  82. package/dist/server/app.js +277 -0
  83. package/dist/server/app.js.map +1 -0
  84. package/dist/server/app.test.d.ts +1 -0
  85. package/dist/server/app.test.js +178 -0
  86. package/dist/server/app.test.js.map +1 -0
  87. package/dist/server/asset-base-url-transform-plugin.d.ts +6 -6
  88. package/dist/server/asset-base-url-transform-plugin.js +25 -11
  89. package/dist/server/asset-base-url-transform-plugin.js.map +1 -1
  90. package/dist/server/asset-base-url-transform-plugin.test.js +92 -14
  91. package/dist/server/asset-base-url-transform-plugin.test.js.map +1 -1
  92. package/dist/server/auth/discovery.d.ts +33 -0
  93. package/dist/server/auth/discovery.js +56 -0
  94. package/dist/server/auth/discovery.js.map +1 -0
  95. package/dist/server/auth/discovery.test.d.ts +1 -0
  96. package/dist/server/auth/discovery.test.js +93 -0
  97. package/dist/server/auth/discovery.test.js.map +1 -0
  98. package/dist/server/auth/index.d.ts +48 -0
  99. package/dist/server/auth/index.js +2 -0
  100. package/dist/server/auth/index.js.map +1 -0
  101. package/dist/server/auth/providers/auth0.d.ts +40 -0
  102. package/dist/server/auth/providers/auth0.js +36 -0
  103. package/dist/server/auth/providers/auth0.js.map +1 -0
  104. package/dist/server/auth/providers/auth0.test.d.ts +1 -0
  105. package/dist/server/auth/providers/auth0.test.js +50 -0
  106. package/dist/server/auth/providers/auth0.test.js.map +1 -0
  107. package/dist/server/auth/providers/authplane.d.ts +49 -0
  108. package/dist/server/auth/providers/authplane.js +57 -0
  109. package/dist/server/auth/providers/authplane.js.map +1 -0
  110. package/dist/server/auth/providers/authplane.test.d.ts +1 -0
  111. package/dist/server/auth/providers/authplane.test.js +143 -0
  112. package/dist/server/auth/providers/authplane.test.js.map +1 -0
  113. package/dist/server/auth/providers/clerk.d.ts +51 -0
  114. package/dist/server/auth/providers/clerk.js +19 -0
  115. package/dist/server/auth/providers/clerk.js.map +1 -0
  116. package/dist/server/auth/providers/clerk.test.d.ts +1 -0
  117. package/dist/server/auth/providers/clerk.test.js +30 -0
  118. package/dist/server/auth/providers/clerk.test.js.map +1 -0
  119. package/dist/server/auth/providers/custom.d.ts +42 -0
  120. package/dist/server/auth/providers/custom.js +59 -0
  121. package/dist/server/auth/providers/custom.js.map +1 -0
  122. package/dist/server/auth/providers/custom.test.d.ts +1 -0
  123. package/dist/server/auth/providers/custom.test.js +161 -0
  124. package/dist/server/auth/providers/custom.test.js.map +1 -0
  125. package/dist/server/auth/providers/descope.d.ts +44 -0
  126. package/dist/server/auth/providers/descope.js +44 -0
  127. package/dist/server/auth/providers/descope.js.map +1 -0
  128. package/dist/server/auth/providers/descope.test.d.ts +1 -0
  129. package/dist/server/auth/providers/descope.test.js +62 -0
  130. package/dist/server/auth/providers/descope.test.js.map +1 -0
  131. package/dist/server/auth/providers/shared.d.ts +2 -0
  132. package/dist/server/auth/providers/shared.js +6 -0
  133. package/dist/server/auth/providers/shared.js.map +1 -0
  134. package/dist/server/auth/providers/shared.test.d.ts +1 -0
  135. package/dist/server/auth/providers/shared.test.js +10 -0
  136. package/dist/server/auth/providers/shared.test.js.map +1 -0
  137. package/dist/server/auth/providers/stytch.d.ts +25 -0
  138. package/dist/server/auth/providers/stytch.js +16 -0
  139. package/dist/server/auth/providers/stytch.js.map +1 -0
  140. package/dist/server/auth/providers/verify-spy.d.ts +12 -0
  141. package/dist/server/auth/providers/verify-spy.js +21 -0
  142. package/dist/server/auth/providers/verify-spy.js.map +1 -0
  143. package/dist/server/auth/providers/workos.d.ts +34 -0
  144. package/dist/server/auth/providers/workos.js +16 -0
  145. package/dist/server/auth/providers/workos.js.map +1 -0
  146. package/dist/server/auth/security-schemes.d.ts +23 -0
  147. package/dist/server/auth/security-schemes.js +64 -0
  148. package/dist/server/auth/security-schemes.js.map +1 -0
  149. package/dist/server/auth/security-schemes.test.d.ts +1 -0
  150. package/dist/server/auth/security-schemes.test.js +99 -0
  151. package/dist/server/auth/security-schemes.test.js.map +1 -0
  152. package/dist/server/auth/setup.d.ts +6 -0
  153. package/dist/server/auth/setup.js +91 -0
  154. package/dist/server/auth/setup.js.map +1 -0
  155. package/dist/server/auth/setup.test.d.ts +1 -0
  156. package/dist/server/auth/setup.test.js +514 -0
  157. package/dist/server/auth/setup.test.js.map +1 -0
  158. package/dist/server/auth/verify.d.ts +48 -0
  159. package/dist/server/auth/verify.js +62 -0
  160. package/dist/server/auth/verify.js.map +1 -0
  161. package/dist/server/auth/verify.test.d.ts +1 -0
  162. package/dist/server/auth/verify.test.js +165 -0
  163. package/dist/server/auth/verify.test.js.map +1 -0
  164. package/dist/server/auth-extra.test-d.d.ts +1 -0
  165. package/dist/server/auth-extra.test-d.js +130 -0
  166. package/dist/server/auth-extra.test-d.js.map +1 -0
  167. package/dist/server/auth.d.ts +57 -0
  168. package/dist/server/auth.js +27 -0
  169. package/dist/server/auth.js.map +1 -0
  170. package/dist/server/build-manifest.test.d.ts +1 -0
  171. package/dist/server/build-manifest.test.js +28 -0
  172. package/dist/server/build-manifest.test.js.map +1 -0
  173. package/dist/server/content-helpers.d.ts +67 -0
  174. package/dist/server/content-helpers.js +79 -0
  175. package/dist/server/content-helpers.js.map +1 -0
  176. package/dist/server/content-helpers.test.d.ts +1 -0
  177. package/dist/server/content-helpers.test.js +70 -0
  178. package/dist/server/content-helpers.test.js.map +1 -0
  179. package/dist/server/events.d.ts +113 -0
  180. package/dist/server/events.js +318 -0
  181. package/dist/server/events.js.map +1 -0
  182. package/dist/server/events.test.d.ts +1 -0
  183. package/dist/server/events.test.js +172 -0
  184. package/dist/server/events.test.js.map +1 -0
  185. package/dist/server/express.d.ts +28 -5
  186. package/dist/server/express.js +84 -43
  187. package/dist/server/express.js.map +1 -1
  188. package/dist/server/express.test.js +601 -22
  189. package/dist/server/express.test.js.map +1 -1
  190. package/dist/server/file-ref.d.ts +28 -0
  191. package/dist/server/file-ref.js +27 -0
  192. package/dist/server/file-ref.js.map +1 -0
  193. package/dist/server/form-input.d.ts +120 -0
  194. package/dist/server/form-input.js +89 -0
  195. package/dist/server/form-input.js.map +1 -0
  196. package/dist/server/host.d.ts +2 -0
  197. package/dist/server/host.js +11 -0
  198. package/dist/server/host.js.map +1 -0
  199. package/dist/server/host.test.d.ts +1 -0
  200. package/dist/server/host.test.js +13 -0
  201. package/dist/server/host.test.js.map +1 -0
  202. package/dist/server/index.d.ts +23 -4
  203. package/dist/server/index.js +19 -2
  204. package/dist/server/index.js.map +1 -1
  205. package/dist/server/inferUtilityTypes.d.ts +6 -6
  206. package/dist/server/inferUtilityTypes.js.map +1 -1
  207. package/dist/server/mcp-errors.test.d.ts +1 -0
  208. package/dist/server/mcp-errors.test.js +229 -0
  209. package/dist/server/mcp-errors.test.js.map +1 -0
  210. package/dist/server/metric.d.ts +16 -0
  211. package/dist/server/metric.js +62 -0
  212. package/dist/server/metric.js.map +1 -0
  213. package/dist/server/middleware.d.ts +80 -14
  214. package/dist/server/middleware.js +33 -0
  215. package/dist/server/middleware.js.map +1 -1
  216. package/dist/server/middleware.test-d.js +42 -19
  217. package/dist/server/middleware.test-d.js.map +1 -1
  218. package/dist/server/middleware.test.js +291 -73
  219. package/dist/server/middleware.test.js.map +1 -1
  220. package/dist/server/register-tool.test.d.ts +1 -0
  221. package/dist/server/register-tool.test.js +230 -0
  222. package/dist/server/register-tool.test.js.map +1 -0
  223. package/dist/server/requestOrigin.d.ts +7 -0
  224. package/dist/server/requestOrigin.js +25 -0
  225. package/dist/server/requestOrigin.js.map +1 -0
  226. package/dist/server/server.d.ts +611 -86
  227. package/dist/server/server.js +742 -202
  228. package/dist/server/server.js.map +1 -1
  229. package/dist/server/skills-integration.test.d.ts +1 -0
  230. package/dist/server/skills-integration.test.js +86 -0
  231. package/dist/server/skills-integration.test.js.map +1 -0
  232. package/dist/server/skills.d.ts +27 -0
  233. package/dist/server/skills.js +188 -0
  234. package/dist/server/skills.js.map +1 -0
  235. package/dist/server/skills.test.d.ts +1 -0
  236. package/dist/server/skills.test.js +243 -0
  237. package/dist/server/skills.test.js.map +1 -0
  238. package/dist/server/templateHelper.d.ts +2 -8
  239. package/dist/server/templateHelper.js +3 -22
  240. package/dist/server/templateHelper.js.map +1 -1
  241. package/dist/server/templates.generated.d.ts +4 -0
  242. package/dist/server/templates.generated.js +43 -0
  243. package/dist/server/templates.generated.js.map +1 -0
  244. package/dist/server/tool-extra.test.d.ts +1 -0
  245. package/dist/server/tool-extra.test.js +167 -0
  246. package/dist/server/tool-extra.test.js.map +1 -0
  247. package/dist/server/tunnel-proxy-router.d.ts +7 -0
  248. package/dist/server/tunnel-proxy-router.js +110 -0
  249. package/dist/server/tunnel-proxy-router.js.map +1 -0
  250. package/dist/server/tunnel-proxy-router.test.d.ts +1 -0
  251. package/dist/server/tunnel-proxy-router.test.js +229 -0
  252. package/dist/server/tunnel-proxy-router.test.js.map +1 -0
  253. package/dist/server/view-name.test-d.d.ts +1 -0
  254. package/dist/server/view-name.test-d.js +8 -0
  255. package/dist/server/view-name.test-d.js.map +1 -0
  256. package/dist/server/view-resource-resolution.test.d.ts +6 -0
  257. package/dist/server/view-resource-resolution.test.js +176 -0
  258. package/dist/server/view-resource-resolution.test.js.map +1 -0
  259. package/dist/server/viewsDevServer.d.ts +14 -0
  260. package/dist/server/viewsDevServer.js +48 -0
  261. package/dist/server/viewsDevServer.js.map +1 -0
  262. package/dist/test/utils.d.ts +21 -31
  263. package/dist/test/utils.js +222 -198
  264. package/dist/test/utils.js.map +1 -1
  265. package/dist/test/view.test.d.ts +1 -0
  266. package/dist/test/view.test.js +540 -0
  267. package/dist/test/view.test.js.map +1 -0
  268. package/dist/version.d.ts +1 -0
  269. package/dist/version.js +3 -0
  270. package/dist/version.js.map +1 -0
  271. package/dist/views/index.d.ts +10 -0
  272. package/dist/views/index.js +3 -0
  273. package/dist/views/index.js.map +1 -0
  274. package/dist/views/scan-views.d.ts +16 -0
  275. package/dist/views/scan-views.js +88 -0
  276. package/dist/views/scan-views.js.map +1 -0
  277. package/dist/views/scan-views.test.d.ts +1 -0
  278. package/dist/views/scan-views.test.js +99 -0
  279. package/dist/views/scan-views.test.js.map +1 -0
  280. package/dist/views/validate-view.d.ts +1 -0
  281. package/dist/views/validate-view.js +9 -0
  282. package/dist/views/validate-view.js.map +1 -0
  283. package/dist/views/validate-view.test.d.ts +1 -0
  284. package/dist/views/validate-view.test.js +24 -0
  285. package/dist/views/validate-view.test.js.map +1 -0
  286. package/dist/web/bridges/adaptor.d.ts +62 -0
  287. package/dist/web/bridges/adaptor.js +477 -0
  288. package/dist/web/bridges/adaptor.js.map +1 -0
  289. package/dist/web/bridges/adaptor.test.d.ts +1 -0
  290. package/dist/web/bridges/adaptor.test.js +281 -0
  291. package/dist/web/bridges/adaptor.test.js.map +1 -0
  292. package/dist/web/bridges/apps-sdk/bridge.d.ts +6 -1
  293. package/dist/web/bridges/apps-sdk/bridge.js +15 -3
  294. package/dist/web/bridges/apps-sdk/bridge.js.map +1 -1
  295. package/dist/web/bridges/apps-sdk/index.d.ts +0 -1
  296. package/dist/web/bridges/apps-sdk/index.js +0 -1
  297. package/dist/web/bridges/apps-sdk/index.js.map +1 -1
  298. package/dist/web/bridges/apps-sdk/types.d.ts +18 -7
  299. package/dist/web/bridges/apps-sdk/types.js.map +1 -1
  300. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.d.ts +11 -0
  301. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js +11 -0
  302. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js.map +1 -1
  303. package/dist/web/bridges/get-adaptor.d.ts +7 -0
  304. package/dist/web/bridges/get-adaptor.js +9 -7
  305. package/dist/web/bridges/get-adaptor.js.map +1 -1
  306. package/dist/web/bridges/get-adaptor.test.d.ts +1 -0
  307. package/dist/web/bridges/get-adaptor.test.js +32 -0
  308. package/dist/web/bridges/get-adaptor.test.js.map +1 -0
  309. package/dist/web/bridges/index.js.map +1 -1
  310. package/dist/web/bridges/mcp-app/bridge.d.ts +27 -31
  311. package/dist/web/bridges/mcp-app/bridge.js +118 -203
  312. package/dist/web/bridges/mcp-app/bridge.js.map +1 -1
  313. package/dist/web/bridges/mcp-app/bridge.test.d.ts +1 -0
  314. package/dist/web/bridges/mcp-app/bridge.test.js +17 -0
  315. package/dist/web/bridges/mcp-app/bridge.test.js.map +1 -0
  316. package/dist/web/bridges/mcp-app/index.d.ts +0 -1
  317. package/dist/web/bridges/mcp-app/index.js +0 -1
  318. package/dist/web/bridges/mcp-app/index.js.map +1 -1
  319. package/dist/web/bridges/mcp-app/types.d.ts +19 -2
  320. package/dist/web/bridges/mcp-app/types.js.map +1 -1
  321. package/dist/web/bridges/mcp-app/use-mcp-app-context.d.ts +17 -3
  322. package/dist/web/bridges/mcp-app/use-mcp-app-context.js +14 -2
  323. package/dist/web/bridges/mcp-app/use-mcp-app-context.js.map +1 -1
  324. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js +2 -42
  325. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js.map +1 -1
  326. package/dist/web/bridges/mcp-app/view-tools.test.d.ts +1 -0
  327. package/dist/web/bridges/mcp-app/view-tools.test.js +143 -0
  328. package/dist/web/bridges/mcp-app/view-tools.test.js.map +1 -0
  329. package/dist/web/bridges/types.d.ts +182 -12
  330. package/dist/web/bridges/types.js +14 -1
  331. package/dist/web/bridges/types.js.map +1 -1
  332. package/dist/web/bridges/types.test.d.ts +1 -0
  333. package/dist/web/bridges/types.test.js +19 -0
  334. package/dist/web/bridges/types.test.js.map +1 -0
  335. package/dist/web/bridges/use-host-context.d.ts +5 -0
  336. package/dist/web/bridges/use-host-context.js +5 -0
  337. package/dist/web/bridges/use-host-context.js.map +1 -1
  338. package/dist/web/components/modal-provider.d.ts +1 -1
  339. package/dist/web/components/modal-provider.js +5 -6
  340. package/dist/web/components/modal-provider.js.map +1 -1
  341. package/dist/web/create-store.d.ts +26 -0
  342. package/dist/web/create-store.js +43 -3
  343. package/dist/web/create-store.js.map +1 -1
  344. package/dist/web/create-store.test.js +27 -24
  345. package/dist/web/create-store.test.js.map +1 -1
  346. package/dist/web/data-llm.d.ts +35 -2
  347. package/dist/web/data-llm.js +34 -5
  348. package/dist/web/data-llm.js.map +1 -1
  349. package/dist/web/data-llm.test.js +49 -29
  350. package/dist/web/data-llm.test.js.map +1 -1
  351. package/dist/web/generate-helpers.d.ts +40 -32
  352. package/dist/web/generate-helpers.js +38 -30
  353. package/dist/web/generate-helpers.js.map +1 -1
  354. package/dist/web/generate-helpers.test-d.js +33 -31
  355. package/dist/web/generate-helpers.test-d.js.map +1 -1
  356. package/dist/web/generate-helpers.test.js +2 -2
  357. package/dist/web/generate-helpers.test.js.map +1 -1
  358. package/dist/web/helpers/state.d.ts +2 -2
  359. package/dist/web/helpers/state.js +11 -11
  360. package/dist/web/helpers/state.js.map +1 -1
  361. package/dist/web/helpers/state.test.js +9 -9
  362. package/dist/web/helpers/state.test.js.map +1 -1
  363. package/dist/web/hooks/index.d.ts +11 -2
  364. package/dist/web/hooks/index.js +11 -2
  365. package/dist/web/hooks/index.js.map +1 -1
  366. package/dist/web/hooks/openai-extensions.test.d.ts +1 -0
  367. package/dist/web/hooks/openai-extensions.test.js +107 -0
  368. package/dist/web/hooks/openai-extensions.test.js.map +1 -0
  369. package/dist/web/hooks/test/utils.d.ts +7 -2
  370. package/dist/web/hooks/test/utils.js +18 -3
  371. package/dist/web/hooks/test/utils.js.map +1 -1
  372. package/dist/web/hooks/use-call-tool.d.ts +47 -2
  373. package/dist/web/hooks/use-call-tool.js +43 -10
  374. package/dist/web/hooks/use-call-tool.js.map +1 -1
  375. package/dist/web/hooks/use-call-tool.test-d.js.map +1 -1
  376. package/dist/web/hooks/use-call-tool.test.js +75 -29
  377. package/dist/web/hooks/use-call-tool.test.js.map +1 -1
  378. package/dist/web/hooks/use-deep-link.d.ts +22 -0
  379. package/dist/web/hooks/use-deep-link.js +34 -0
  380. package/dist/web/hooks/use-deep-link.js.map +1 -0
  381. package/dist/web/hooks/use-display-mode.d.ts +20 -0
  382. package/dist/web/hooks/use-display-mode.js +20 -0
  383. package/dist/web/hooks/use-display-mode.js.map +1 -1
  384. package/dist/web/hooks/use-display-mode.test-d.js.map +1 -1
  385. package/dist/web/hooks/use-display-mode.test.js +57 -21
  386. package/dist/web/hooks/use-display-mode.test.js.map +1 -1
  387. package/dist/web/hooks/use-download.d.ts +3 -0
  388. package/dist/web/hooks/use-download.js +7 -0
  389. package/dist/web/hooks/use-download.js.map +1 -0
  390. package/dist/web/hooks/use-download.test.d.ts +1 -0
  391. package/dist/web/hooks/use-download.test.js +103 -0
  392. package/dist/web/hooks/use-download.test.js.map +1 -0
  393. package/dist/web/hooks/use-file-resource.d.ts +37 -0
  394. package/dist/web/hooks/use-file-resource.js +98 -0
  395. package/dist/web/hooks/use-file-resource.js.map +1 -0
  396. package/dist/web/hooks/use-file-resource.test.d.ts +1 -0
  397. package/dist/web/hooks/use-file-resource.test.js +65 -0
  398. package/dist/web/hooks/use-file-resource.test.js.map +1 -0
  399. package/dist/web/hooks/use-files.d.ts +34 -1
  400. package/dist/web/hooks/use-files.js +33 -0
  401. package/dist/web/hooks/use-files.js.map +1 -1
  402. package/dist/web/hooks/use-files.test.js +31 -3
  403. package/dist/web/hooks/use-files.test.js.map +1 -1
  404. package/dist/web/hooks/use-host.d.ts +44 -0
  405. package/dist/web/hooks/use-host.js +45 -0
  406. package/dist/web/hooks/use-host.js.map +1 -0
  407. package/dist/web/hooks/use-host.test.d.ts +1 -0
  408. package/dist/web/hooks/use-host.test.js +59 -0
  409. package/dist/web/hooks/use-host.test.js.map +1 -0
  410. package/dist/web/hooks/use-model-context.d.ts +44 -0
  411. package/dist/web/hooks/use-model-context.js +63 -0
  412. package/dist/web/hooks/use-model-context.js.map +1 -0
  413. package/dist/web/hooks/use-open-external.d.ts +17 -0
  414. package/dist/web/hooks/use-open-external.js +16 -0
  415. package/dist/web/hooks/use-open-external.js.map +1 -1
  416. package/dist/web/hooks/use-open-external.test.js +30 -15
  417. package/dist/web/hooks/use-open-external.test.js.map +1 -1
  418. package/dist/web/hooks/use-open-file.d.ts +20 -0
  419. package/dist/web/hooks/use-open-file.js +25 -0
  420. package/dist/web/hooks/use-open-file.js.map +1 -0
  421. package/dist/web/hooks/use-register-view-tool.d.ts +37 -0
  422. package/dist/web/hooks/use-register-view-tool.js +50 -0
  423. package/dist/web/hooks/use-register-view-tool.js.map +1 -0
  424. package/dist/web/hooks/use-request-close.d.ts +16 -0
  425. package/dist/web/hooks/use-request-close.js +21 -0
  426. package/dist/web/hooks/use-request-close.js.map +1 -0
  427. package/dist/web/hooks/use-request-close.test.d.ts +1 -0
  428. package/dist/web/hooks/use-request-close.test.js +47 -0
  429. package/dist/web/hooks/use-request-close.test.js.map +1 -0
  430. package/dist/web/hooks/use-request-modal.d.ts +16 -1
  431. package/dist/web/hooks/use-request-modal.js +19 -4
  432. package/dist/web/hooks/use-request-modal.js.map +1 -1
  433. package/dist/web/hooks/use-request-modal.test.js +16 -2
  434. package/dist/web/hooks/use-request-modal.test.js.map +1 -1
  435. package/dist/web/hooks/use-request-size.d.ts +20 -0
  436. package/dist/web/hooks/use-request-size.js +24 -0
  437. package/dist/web/hooks/use-request-size.js.map +1 -0
  438. package/dist/web/hooks/use-request-size.test.d.ts +1 -0
  439. package/dist/web/hooks/use-request-size.test.js +47 -0
  440. package/dist/web/hooks/use-request-size.test.js.map +1 -0
  441. package/dist/web/hooks/use-send-follow-up-message.d.ts +25 -1
  442. package/dist/web/hooks/use-send-follow-up-message.js +25 -2
  443. package/dist/web/hooks/use-send-follow-up-message.js.map +1 -1
  444. package/dist/web/hooks/use-set-open-in-app-url.d.ts +17 -0
  445. package/dist/web/hooks/use-set-open-in-app-url.js +17 -0
  446. package/dist/web/hooks/use-set-open-in-app-url.js.map +1 -1
  447. package/dist/web/hooks/use-set-open-in-app-url.test.js +26 -12
  448. package/dist/web/hooks/use-set-open-in-app-url.test.js.map +1 -1
  449. package/dist/web/hooks/use-tool-info.d.ts +46 -14
  450. package/dist/web/hooks/use-tool-info.js +29 -7
  451. package/dist/web/hooks/use-tool-info.js.map +1 -1
  452. package/dist/web/hooks/use-tool-info.test-d.js +11 -34
  453. package/dist/web/hooks/use-tool-info.test-d.js.map +1 -1
  454. package/dist/web/hooks/use-tool-info.test.js +43 -38
  455. package/dist/web/hooks/use-tool-info.test.js.map +1 -1
  456. package/dist/web/hooks/use-user.d.ts +5 -2
  457. package/dist/web/hooks/use-user.js +23 -4
  458. package/dist/web/hooks/use-user.js.map +1 -1
  459. package/dist/web/hooks/use-user.test.js +105 -29
  460. package/dist/web/hooks/use-user.test.js.map +1 -1
  461. package/dist/web/hooks/use-view-state.d.ts +25 -0
  462. package/dist/web/hooks/use-view-state.js +42 -0
  463. package/dist/web/hooks/use-view-state.js.map +1 -0
  464. package/dist/web/hooks/use-view-state.test.d.ts +1 -0
  465. package/dist/web/hooks/use-view-state.test.js +212 -0
  466. package/dist/web/hooks/use-view-state.test.js.map +1 -0
  467. package/dist/web/hooks/use-viewport.d.ts +20 -0
  468. package/dist/web/hooks/use-viewport.js +21 -0
  469. package/dist/web/hooks/use-viewport.js.map +1 -0
  470. package/dist/web/hooks/use-viewport.test.d.ts +1 -0
  471. package/dist/web/hooks/use-viewport.test.js +109 -0
  472. package/dist/web/hooks/use-viewport.test.js.map +1 -0
  473. package/dist/web/index.d.ts +1 -2
  474. package/dist/web/index.js +1 -2
  475. package/dist/web/index.js.map +1 -1
  476. package/dist/web/mount-view.d.ts +21 -0
  477. package/dist/web/mount-view.js +43 -0
  478. package/dist/web/mount-view.js.map +1 -0
  479. package/dist/web/proxy.js.map +1 -1
  480. package/dist/web/types.d.ts +4 -0
  481. package/dist/web/types.js.map +1 -1
  482. package/package.json +50 -28
  483. package/tsconfig.base.json +5 -0
  484. package/dist/server/const.d.ts +0 -1
  485. package/dist/server/const.js +0 -2
  486. package/dist/server/const.js.map +0 -1
  487. package/dist/server/templates/development.hbs +0 -67
  488. package/dist/server/templates/production.hbs +0 -6
  489. package/dist/server/widgetsDevServer.d.ts +0 -12
  490. package/dist/server/widgetsDevServer.js +0 -63
  491. package/dist/server/widgetsDevServer.js.map +0 -1
  492. package/dist/test/widget.test.js +0 -261
  493. package/dist/test/widget.test.js.map +0 -1
  494. package/dist/web/bridges/apps-sdk/adaptor.d.ts +0 -22
  495. package/dist/web/bridges/apps-sdk/adaptor.js +0 -75
  496. package/dist/web/bridges/apps-sdk/adaptor.js.map +0 -1
  497. package/dist/web/bridges/mcp-app/adaptor.d.ts +0 -36
  498. package/dist/web/bridges/mcp-app/adaptor.js +0 -190
  499. package/dist/web/bridges/mcp-app/adaptor.js.map +0 -1
  500. package/dist/web/hooks/use-layout.d.ts +0 -22
  501. package/dist/web/hooks/use-layout.js +0 -23
  502. package/dist/web/hooks/use-layout.js.map +0 -1
  503. package/dist/web/hooks/use-layout.test.js +0 -96
  504. package/dist/web/hooks/use-layout.test.js.map +0 -1
  505. package/dist/web/hooks/use-widget-state.d.ts +0 -4
  506. package/dist/web/hooks/use-widget-state.js +0 -32
  507. package/dist/web/hooks/use-widget-state.js.map +0 -1
  508. package/dist/web/hooks/use-widget-state.test.js +0 -64
  509. package/dist/web/hooks/use-widget-state.test.js.map +0 -1
  510. package/dist/web/mount-widget.d.ts +0 -1
  511. package/dist/web/mount-widget.js +0 -27
  512. package/dist/web/mount-widget.js.map +0 -1
  513. package/dist/web/plugin/data-llm.test.js +0 -81
  514. package/dist/web/plugin/data-llm.test.js.map +0 -1
  515. package/dist/web/plugin/plugin.d.ts +0 -2
  516. package/dist/web/plugin/plugin.js +0 -54
  517. package/dist/web/plugin/plugin.js.map +0 -1
  518. package/dist/web/plugin/transform-data-llm.d.ts +0 -12
  519. package/dist/web/plugin/transform-data-llm.js +0 -96
  520. package/dist/web/plugin/transform-data-llm.js.map +0 -1
  521. package/dist/web/plugin/transform-data-llm.test.js +0 -81
  522. package/dist/web/plugin/transform-data-llm.test.js.map +0 -1
  523. package/dist/web/plugin/validate-widget.d.ts +0 -5
  524. package/dist/web/plugin/validate-widget.js +0 -27
  525. package/dist/web/plugin/validate-widget.js.map +0 -1
  526. package/dist/web/plugin/validate-widget.test.js +0 -42
  527. package/dist/web/plugin/validate-widget.test.js.map +0 -1
  528. /package/dist/{test/widget.test.d.ts → cli/build-helpers.test.d.ts} +0 -0
  529. /package/dist/{web/hooks/use-layout.test.d.ts → cli/build-steps.test.d.ts} +0 -0
  530. /package/dist/{web/hooks/use-widget-state.test.d.ts → cli/tunnel-control-server.test.d.ts} +0 -0
  531. /package/dist/{web/plugin/data-llm.test.d.ts → cli/tunnel-handler.test.d.ts} +0 -0
  532. /package/dist/{web/plugin/transform-data-llm.test.d.ts → cli/tunnel.test.d.ts} +0 -0
  533. /package/dist/{web/plugin/validate-widget.test.d.ts → context-warnings.test.d.ts} +0 -0
@@ -1,46 +1,69 @@
1
1
  import { expectTypeOf, test } from "vitest";
2
2
  const server = null;
3
- test("request category narrows extra to McpExtra", () => {
4
- server.mcpMiddleware("request", (_request, extra, next) => {
3
+ test("request category narrows extra and next() result", () => {
4
+ server.mcpMiddleware("request", async (_request, extra, next) => {
5
5
  expectTypeOf(extra).toEqualTypeOf();
6
- extra.signal;
7
- return next();
6
+ extra.mcpReq.signal;
7
+ const result = await next();
8
+ expectTypeOf(result).toEqualTypeOf();
9
+ return result;
8
10
  });
9
11
  });
10
- test("notification category narrows extra to undefined", () => {
11
- server.mcpMiddleware("notification", (_request, extra, next) => {
12
+ test("notification category narrows extra and next() result", () => {
13
+ server.mcpMiddleware("notification", async (_request, extra, next) => {
12
14
  expectTypeOf(extra).toEqualTypeOf();
13
15
  // @ts-expect-error extra is undefined, cannot access .signal
14
16
  extra.signal;
15
- return next();
17
+ const result = await next();
18
+ expectTypeOf(result).toEqualTypeOf();
16
19
  });
17
20
  });
18
- test("exact method tools/call narrows params and extra", () => {
19
- server.mcpMiddleware("tools/call", (request, extra, next) => {
21
+ test("exact method tools/call narrows params, extra, and next() result", () => {
22
+ server.mcpMiddleware("tools/call", async (request, extra, next) => {
20
23
  expectTypeOf(request.params.name).toBeString();
21
24
  expectTypeOf(extra).toEqualTypeOf();
22
- return next();
25
+ const result = await next();
26
+ expectTypeOf(result).toEqualTypeOf();
27
+ return result;
23
28
  });
24
29
  });
25
- test("exact method tools/list narrows extra to McpExtra", () => {
26
- server.mcpMiddleware("tools/list", (_request, extra, next) => {
27
- expectTypeOf(extra).toEqualTypeOf();
28
- return next();
30
+ test("exact method tools/list narrows next() to ListToolsResult", () => {
31
+ server.mcpMiddleware("tools/list", async (_request, _extra, next) => {
32
+ const result = await next();
33
+ expectTypeOf(result).toEqualTypeOf();
34
+ return result;
29
35
  });
30
36
  });
31
- test("exact notification method narrows extra to undefined", () => {
32
- server.mcpMiddleware("notifications/initialized", (_request, extra, next) => {
37
+ test("exact notification method narrows extra and next() result", () => {
38
+ server.mcpMiddleware("notifications/initialized", async (_request, extra, next) => {
33
39
  expectTypeOf(extra).toEqualTypeOf();
34
40
  // @ts-expect-error extra is undefined
35
41
  extra.signal;
36
- return next();
42
+ const result = await next();
43
+ expectTypeOf(result).toEqualTypeOf();
37
44
  });
38
45
  });
39
- test("McpTypedMiddlewareFn narrows params and extra per method", () => {
40
- expectTypeOf().toBeFunction();
46
+ test("McpTypedMiddlewareFn narrows params, extra, and next() per method", () => {
41
47
  expectTypeOf().toBeString();
42
48
  expectTypeOf().toEqualTypeOf();
43
49
  expectTypeOf().toEqualTypeOf();
50
+ expectTypeOf().toEqualTypeOf();
51
+ expectTypeOf().toEqualTypeOf();
52
+ });
53
+ test("McpResultFor maps methods to correct result types", () => {
54
+ expectTypeOf().toEqualTypeOf();
55
+ expectTypeOf().toEqualTypeOf();
56
+ expectTypeOf().toEqualTypeOf();
57
+ });
58
+ test("wildcard tools/* narrows next() to union of tools result types", () => {
59
+ server.mcpMiddleware("tools/*", async (_request, _extra, next) => {
60
+ const result = await next();
61
+ expectTypeOf(result).toEqualTypeOf();
62
+ return result;
63
+ });
64
+ });
65
+ test("McpResultFor resolves wildcards to union of matching result types", () => {
66
+ expectTypeOf().toEqualTypeOf();
44
67
  });
45
68
  test("catch-all middleware has no narrowing on extra or params", () => {
46
69
  server.mcpMiddleware((_request, extra, next) => {
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.test-d.js","sourceRoot":"","sources":["../../src/server/middleware.test-d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAI5C,MAAM,MAAM,GAAG,IAA4B,CAAC;AAE5C,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;IACtD,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACxD,YAAY,CAAC,KAAK,CAAC,CAAC,aAAa,EAAY,CAAC;QAC9C,KAAK,CAAC,MAAM,CAAC;QACb,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC5D,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC7D,YAAY,CAAC,KAAK,CAAC,CAAC,aAAa,EAAa,CAAC;QAC/C,6DAA6D;QAC7D,KAAK,CAAC,MAAM,CAAC;QACb,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC5D,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC1D,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;QAC/C,YAAY,CAAC,KAAK,CAAC,CAAC,aAAa,EAAY,CAAC;QAC9C,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC7D,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3D,YAAY,CAAC,KAAK,CAAC,CAAC,aAAa,EAAY,CAAC;QAC9C,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAChE,MAAM,CAAC,aAAa,CAAC,2BAA2B,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC1E,YAAY,CAAC,KAAK,CAAC,CAAC,aAAa,EAAa,CAAC;QAC/C,sCAAsC;QACtC,KAAK,CAAC,MAAM,CAAC;QACb,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACpE,YAAY,EAAsC,CAAC,YAAY,EAAE,CAAC;IAClE,YAAY,EAET,CAAC,UAAU,EAAE,CAAC;IACjB,YAAY,EAET,CAAC,aAAa,EAAY,CAAC;IAC9B,YAAY,EAET,CAAC,aAAa,EAAa,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACpE,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC7C,YAAY,CAAC,KAAK,CAAC,CAAC,aAAa,EAAwB,CAAC;QAC1D,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,aAAa,EAA2B,CAAC;QACvE,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"middleware.test-d.js","sourceRoot":"","sources":["../../src/server/middleware.test-d.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CallToolResult,\n ListToolsResult,\n ServerResult,\n} from \"@modelcontextprotocol/server\";\nimport { expectTypeOf, test } from \"vitest\";\nimport type {\n McpExtra,\n McpResultFor,\n McpTypedMiddlewareFn,\n} from \"./middleware.js\";\nimport type { McpServer } from \"./server.js\";\n\nconst server = null as unknown as McpServer;\n\ntest(\"request category narrows extra and next() result\", () => {\n server.mcpMiddleware(\"request\", async (_request, extra, next) => {\n expectTypeOf(extra).toEqualTypeOf<McpExtra>();\n extra.mcpReq.signal;\n const result = await next();\n expectTypeOf(result).toEqualTypeOf<ServerResult>();\n return result;\n });\n});\n\ntest(\"notification category narrows extra and next() result\", () => {\n server.mcpMiddleware(\"notification\", async (_request, extra, next) => {\n expectTypeOf(extra).toEqualTypeOf<undefined>();\n // @ts-expect-error extra is undefined, cannot access .signal\n extra.signal;\n const result = await next();\n expectTypeOf(result).toEqualTypeOf<undefined>();\n });\n});\n\ntest(\"exact method tools/call narrows params, extra, and next() result\", () => {\n server.mcpMiddleware(\"tools/call\", async (request, extra, next) => {\n expectTypeOf(request.params.name).toBeString();\n expectTypeOf(extra).toEqualTypeOf<McpExtra>();\n const result = await next();\n expectTypeOf(result).toEqualTypeOf<CallToolResult>();\n return result;\n });\n});\n\ntest(\"exact method tools/list narrows next() to ListToolsResult\", () => {\n server.mcpMiddleware(\"tools/list\", async (_request, _extra, next) => {\n const result = await next();\n expectTypeOf(result).toEqualTypeOf<ListToolsResult>();\n return result;\n });\n});\n\ntest(\"exact notification method narrows extra and next() result\", () => {\n server.mcpMiddleware(\n \"notifications/initialized\",\n async (_request, extra, next) => {\n expectTypeOf(extra).toEqualTypeOf<undefined>();\n // @ts-expect-error extra is undefined\n extra.signal;\n const result = await next();\n expectTypeOf(result).toEqualTypeOf<undefined>();\n },\n );\n});\n\ntest(\"McpTypedMiddlewareFn narrows params, extra, and next() per method\", () => {\n expectTypeOf<\n Parameters<McpTypedMiddlewareFn<\"tools/call\">>[0][\"params\"][\"name\"]\n >().toBeString();\n expectTypeOf<\n Parameters<McpTypedMiddlewareFn<\"tools/call\">>[1]\n >().toEqualTypeOf<McpExtra>();\n expectTypeOf<\n Parameters<McpTypedMiddlewareFn<\"notifications/initialized\">>[1]\n >().toEqualTypeOf<undefined>();\n expectTypeOf<\n ReturnType<Parameters<McpTypedMiddlewareFn<\"tools/list\">>[2]>\n >().toEqualTypeOf<Promise<ListToolsResult>>();\n expectTypeOf<\n ReturnType<Parameters<McpTypedMiddlewareFn<\"notifications/initialized\">>[2]>\n >().toEqualTypeOf<Promise<undefined>>();\n});\n\ntest(\"McpResultFor maps methods to correct result types\", () => {\n expectTypeOf<McpResultFor<\"tools/list\">>().toEqualTypeOf<ListToolsResult>();\n expectTypeOf<McpResultFor<\"tools/call\">>().toEqualTypeOf<CallToolResult>();\n expectTypeOf<\n McpResultFor<\"notifications/initialized\">\n >().toEqualTypeOf<undefined>();\n});\n\ntest(\"wildcard tools/* narrows next() to union of tools result types\", () => {\n server.mcpMiddleware(\"tools/*\", async (_request, _extra, next) => {\n const result = await next();\n expectTypeOf(result).toEqualTypeOf<ListToolsResult | CallToolResult>();\n return result;\n });\n});\n\ntest(\"McpResultFor resolves wildcards to union of matching result types\", () => {\n expectTypeOf<McpResultFor<\"tools/*\">>().toEqualTypeOf<\n ListToolsResult | CallToolResult\n >();\n});\n\ntest(\"catch-all middleware has no narrowing on extra or params\", () => {\n server.mcpMiddleware((_request, extra, next) => {\n expectTypeOf(extra).toEqualTypeOf<McpExtra | undefined>();\n expectTypeOf(_request.params).toEqualTypeOf<Record<string, unknown>>();\n return next();\n });\n});\n"]}
@@ -1,9 +1,8 @@
1
- import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
- import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
1
+ import { Client, InMemoryTransport } from "@modelcontextprotocol/client";
3
2
  import { describe, expect, it, vi } from "vitest";
4
3
  import { z } from "zod";
5
- import { buildMiddlewareChain, getHandlerMaps, matchesFilter, } from "./middleware.js";
6
- import { McpServer } from "./server.js";
4
+ import { Skybridge } from "./app.js";
5
+ import { buildMiddlewareChain, getHandlerMaps, getToolError, matchesFilter, } from "./middleware.js";
7
6
  // ---------------------------------------------------------------------------
8
7
  // matchesFilter
9
8
  // ---------------------------------------------------------------------------
@@ -208,28 +207,42 @@ describe("McpServer.mcpMiddleware()", () => {
208
207
  return new Client({ name: "test-client", version: "1.0.0" });
209
208
  }
210
209
  it("returns this for chaining", () => {
211
- const server = new McpServer({ name: "test", version: "1.0.0" });
212
- const result = server.mcpMiddleware(async (_req, _extra, next) => next());
213
- expect(result).toBe(server);
210
+ new Skybridge({
211
+ name: "test",
212
+ version: "1.0.0",
213
+ handler: (server) => {
214
+ const result = server.mcpMiddleware(async (_req, _extra, next) => next());
215
+ expect(result).toBe(server);
216
+ return server;
217
+ },
218
+ });
214
219
  });
215
220
  it("intercepts tools/call and exposes request params", async () => {
216
221
  let capturedMethod = "";
217
222
  let capturedParams = {};
218
- const server = new McpServer({ name: "test", version: "1.0.0" });
219
- server.registerTool("greet", {
220
- description: "greet",
221
- inputSchema: { name: z.string() },
222
- }, (args) => ({
223
- content: [{ type: "text", text: `hi ${args.name}` }],
224
- }));
225
- server.mcpMiddleware("tools/call", async (request, _extra, next) => {
226
- capturedMethod = request.method;
227
- capturedParams = request.params;
228
- return next();
223
+ const app = new Skybridge({
224
+ name: "test",
225
+ version: "1.0.0",
226
+ handler: (server) => {
227
+ server.registerTool({
228
+ name: "greet",
229
+ description: "greet",
230
+ inputSchema: { name: z.string() },
231
+ }, (args) => ({
232
+ content: [{ type: "text", text: `hi ${args.name}` }],
233
+ }));
234
+ server.mcpMiddleware("tools/call", async (request, _extra, next) => {
235
+ capturedMethod = request.method;
236
+ capturedParams = request.params;
237
+ return next();
238
+ });
239
+ return server;
240
+ },
229
241
  });
230
242
  const client = createClient();
231
243
  const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
232
- await server.connect(serverTransport);
244
+ const instance = await app.createServerInstance();
245
+ await instance.connect(serverTransport);
233
246
  await client.connect(clientTransport);
234
247
  const result = await client.callTool({
235
248
  name: "greet",
@@ -242,59 +255,70 @@ describe("McpServer.mcpMiddleware()", () => {
242
255
  });
243
256
  expect(result.content).toEqual([{ type: "text", text: "hi World" }]);
244
257
  await client.close();
245
- await server.close();
258
+ await instance.close();
246
259
  });
247
260
  it("array filter works", async () => {
248
261
  const matchedMethods = [];
249
- const server = new McpServer({ name: "test", version: "1.0.0" });
250
- server.registerTool("t1", { description: "t1" }, () => ({
251
- content: [{ type: "text", text: "ok" }],
252
- }));
253
- server.mcpMiddleware(["tools/call", "tools/list"], async (request, _extra, next) => {
254
- matchedMethods.push(request.method);
255
- return next();
262
+ const app = new Skybridge({
263
+ name: "test",
264
+ version: "1.0.0",
265
+ handler: (server) => {
266
+ server.registerTool({ name: "t1", description: "t1" }, () => ({
267
+ content: [{ type: "text", text: "ok" }],
268
+ }));
269
+ server.mcpMiddleware(["tools/call", "tools/list"], async (request, _extra, next) => {
270
+ matchedMethods.push(request.method);
271
+ return next();
272
+ });
273
+ return server;
274
+ },
256
275
  });
257
276
  const client = createClient();
258
277
  const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
259
- await server.connect(serverTransport);
278
+ const instance = await app.createServerInstance();
279
+ await instance.connect(serverTransport);
260
280
  await client.connect(clientTransport);
261
281
  await client.listTools();
262
282
  await client.callTool({ name: "t1" });
263
283
  expect(matchedMethods).toEqual(["tools/list", "tools/call"]);
264
284
  await client.close();
265
- await server.close();
266
- });
267
- it("throws if registered after connect()", async () => {
268
- const server = new McpServer({ name: "test", version: "1.0.0" });
269
- const [_clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
270
- await server.connect(serverTransport);
271
- expect(() => server.mcpMiddleware(async (_req, _extra, next) => next())).toThrow("Cannot register MCP middleware after run() or connect()");
272
- await server.close();
285
+ await instance.close();
273
286
  });
274
- it("throws when filter provided without handler", () => {
275
- const server = new McpServer({ name: "test", version: "1.0.0" });
276
- expect(() =>
277
- // @ts-expect-error intentionally passing filter without handler
278
- server.mcpMiddleware("tools/call")).toThrow("mcpMiddleware requires a handler function");
287
+ it("throws when filter provided without handler", async () => {
288
+ const app = new Skybridge({
289
+ name: "test",
290
+ version: "1.0.0",
291
+ handler: (server) =>
292
+ // @ts-expect-error intentionally passing filter without handler
293
+ server.mcpMiddleware("tools/call"),
294
+ });
295
+ await expect(app.createServerInstance()).rejects.toThrow("mcpMiddleware requires a handler function");
279
296
  });
280
297
  it("catch-all middleware + filtered middleware stack correctly", async () => {
281
298
  const calls = [];
282
- const server = new McpServer({ name: "test", version: "1.0.0" });
283
- server.registerTool("t1", { description: "t1" }, () => ({
284
- content: [{ type: "text", text: "ok" }],
285
- }));
286
- server
287
- .mcpMiddleware(async (request, _extra, next) => {
288
- calls.push(`global:${request.method}`);
289
- return next();
290
- })
291
- .mcpMiddleware("tools/call", async (_req, _extra, next) => {
292
- calls.push("tools-only");
293
- return next();
299
+ const app = new Skybridge({
300
+ name: "test",
301
+ version: "1.0.0",
302
+ handler: (server) => {
303
+ server.registerTool({ name: "t1", description: "t1" }, () => ({
304
+ content: [{ type: "text", text: "ok" }],
305
+ }));
306
+ server
307
+ .mcpMiddleware(async (request, _extra, next) => {
308
+ calls.push(`global:${request.method}`);
309
+ return next();
310
+ })
311
+ .mcpMiddleware("tools/call", async (_req, _extra, next) => {
312
+ calls.push("tools-only");
313
+ return next();
314
+ });
315
+ return server;
316
+ },
294
317
  });
295
318
  const client = createClient();
296
319
  const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
297
- await server.connect(serverTransport);
320
+ const instance = await app.createServerInstance();
321
+ await instance.connect(serverTransport);
298
322
  await client.connect(clientTransport);
299
323
  await client.listTools();
300
324
  await client.callTool({ name: "t1" });
@@ -308,41 +332,235 @@ describe("McpServer.mcpMiddleware()", () => {
308
332
  const toolsCallIdx = calls.indexOf("global:tools/call");
309
333
  expect(calls[toolsCallIdx + 1]).toBe("tools-only");
310
334
  await client.close();
311
- await server.close();
335
+ await instance.close();
312
336
  });
313
337
  it("notification middleware receives extra as undefined", async () => {
314
338
  let capturedExtra = "sentinel";
315
- const server = new McpServer({ name: "test", version: "1.0.0" });
316
- server.registerTool("t1", { description: "t1" }, () => ({
317
- content: [{ type: "text", text: "ok" }],
318
- }));
319
- server.mcpMiddleware("notification", async (_request, extra, next) => {
320
- capturedExtra = extra;
321
- return next();
339
+ const app = new Skybridge({
340
+ name: "test",
341
+ version: "1.0.0",
342
+ handler: (server) => {
343
+ server.registerTool({ name: "t1", description: "t1" }, () => ({
344
+ content: [{ type: "text", text: "ok" }],
345
+ }));
346
+ server.mcpMiddleware("notification", async (_request, extra, next) => {
347
+ capturedExtra = extra;
348
+ return next();
349
+ });
350
+ return server;
351
+ },
322
352
  });
323
353
  const client = createClient();
324
354
  const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
325
- await server.connect(serverTransport);
355
+ const instance = await app.createServerInstance();
356
+ await instance.connect(serverTransport);
326
357
  await client.connect(clientTransport);
327
358
  // The client sends notifications/initialized automatically on connect.
328
359
  await client.listTools();
329
360
  expect(capturedExtra).toBeUndefined();
330
361
  await client.close();
331
- await server.close();
362
+ await instance.close();
363
+ });
364
+ it("wildcard filter intercepts matching methods only", async () => {
365
+ const matchedMethods = [];
366
+ const app = new Skybridge({
367
+ name: "test",
368
+ version: "1.0.0",
369
+ handler: (server) => {
370
+ server.registerTool({ name: "t1", description: "t1" }, () => ({
371
+ content: [{ type: "text", text: "ok" }],
372
+ }));
373
+ server.mcpMiddleware("tools/*", async (request, _extra, next) => {
374
+ matchedMethods.push(request.method);
375
+ return next();
376
+ });
377
+ return server;
378
+ },
379
+ });
380
+ const client = createClient();
381
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
382
+ const instance = await app.createServerInstance();
383
+ await instance.connect(serverTransport);
384
+ await client.connect(clientTransport);
385
+ await client.listTools();
386
+ await client.callTool({ name: "t1" });
387
+ expect(matchedMethods).toContain("tools/list");
388
+ expect(matchedMethods).toContain("tools/call");
389
+ // Should not match initialize or notifications
390
+ expect(matchedMethods).not.toContain("initialize");
391
+ expect(matchedMethods).not.toContain("notifications/initialized");
392
+ await client.close();
393
+ await instance.close();
394
+ });
395
+ it("middleware can modify tool result via Skybridge integration", async () => {
396
+ const app = new Skybridge({
397
+ name: "test",
398
+ version: "1.0.0",
399
+ handler: (server) => {
400
+ server.registerTool({
401
+ name: "greet",
402
+ description: "greet",
403
+ inputSchema: { name: z.string() },
404
+ }, (args) => ({
405
+ content: [{ type: "text", text: `hi ${args.name}` }],
406
+ }));
407
+ server.mcpMiddleware("tools/call", async (_req, _extra, next) => {
408
+ const result = (await next());
409
+ return {
410
+ ...result,
411
+ content: [
412
+ ...result.content,
413
+ { type: "text", text: " (modified)" },
414
+ ],
415
+ };
416
+ });
417
+ return server;
418
+ },
419
+ });
420
+ const client = createClient();
421
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
422
+ const instance = await app.createServerInstance();
423
+ await instance.connect(serverTransport);
424
+ await client.connect(clientTransport);
425
+ const result = await client.callTool({
426
+ name: "greet",
427
+ arguments: { name: "World" },
428
+ });
429
+ expect(result.content).toEqual([
430
+ { type: "text", text: "hi World" },
431
+ { type: "text", text: " (modified)" },
432
+ ]);
433
+ await client.close();
434
+ await instance.close();
435
+ });
436
+ it("middleware can short-circuit via Skybridge integration", async () => {
437
+ const handlerCalled = vi.fn();
438
+ const app = new Skybridge({
439
+ name: "test",
440
+ version: "1.0.0",
441
+ handler: (server) => {
442
+ server.registerTool({ name: "t1", description: "t1" }, () => {
443
+ handlerCalled();
444
+ return {
445
+ content: [{ type: "text", text: "original" }],
446
+ };
447
+ });
448
+ server.mcpMiddleware("tools/call", async () => ({
449
+ content: [{ type: "text", text: "short-circuited" }],
450
+ }));
451
+ return server;
452
+ },
453
+ });
454
+ const client = createClient();
455
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
456
+ const instance = await app.createServerInstance();
457
+ await instance.connect(serverTransport);
458
+ await client.connect(clientTransport);
459
+ const result = await client.callTool({ name: "t1" });
460
+ expect(result.content).toEqual([{ type: "text", text: "short-circuited" }]);
461
+ expect(handlerCalled).not.toHaveBeenCalled();
462
+ await client.close();
463
+ await instance.close();
464
+ });
465
+ it("exposes a thrown tool error to middleware via getToolError", async () => {
466
+ const schemaError = new Error("boom with schema");
467
+ const schemalessError = new Error("boom without schema");
468
+ let captured;
469
+ const app = new Skybridge({
470
+ name: "test",
471
+ version: "1.0.0",
472
+ handler: (server) => {
473
+ server.registerTool({
474
+ name: "withSchema",
475
+ description: "withSchema",
476
+ inputSchema: { name: z.string() },
477
+ }, () => {
478
+ throw schemaError;
479
+ });
480
+ server.registerTool({ name: "withoutSchema", description: "withoutSchema" }, () => {
481
+ throw schemalessError;
482
+ });
483
+ server.mcpMiddleware("tools/call", async (_request, extra, next) => {
484
+ const result = await next();
485
+ captured = getToolError(extra);
486
+ return result;
487
+ });
488
+ return server;
489
+ },
490
+ });
491
+ const client = createClient();
492
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
493
+ const instance = await app.createServerInstance();
494
+ await instance.connect(serverTransport);
495
+ await client.connect(clientTransport);
496
+ const withSchema = await client.callTool({
497
+ name: "withSchema",
498
+ arguments: { name: "World" },
499
+ });
500
+ expect(withSchema.isError).toBe(true);
501
+ expect(captured).toBe(schemaError);
502
+ const withoutSchema = await client.callTool({ name: "withoutSchema" });
503
+ expect(withoutSchema.isError).toBe(true);
504
+ expect(captured).toBe(schemalessError);
505
+ await client.close();
506
+ await instance.close();
507
+ });
508
+ it("middleware can mutate tool call params via Skybridge integration", async () => {
509
+ let receivedName = "";
510
+ const app = new Skybridge({
511
+ name: "test",
512
+ version: "1.0.0",
513
+ handler: (server) => {
514
+ server.registerTool({
515
+ name: "greet",
516
+ description: "greet",
517
+ inputSchema: { name: z.string() },
518
+ }, (args) => {
519
+ receivedName = args.name;
520
+ return {
521
+ content: [{ type: "text", text: `hi ${args.name}` }],
522
+ };
523
+ });
524
+ server.mcpMiddleware("tools/call", async (request, _extra, next) => {
525
+ request.params.arguments = { name: "Overridden" };
526
+ return next();
527
+ });
528
+ return server;
529
+ },
530
+ });
531
+ const client = createClient();
532
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
533
+ const instance = await app.createServerInstance();
534
+ await instance.connect(serverTransport);
535
+ await client.connect(clientTransport);
536
+ await client.callTool({
537
+ name: "greet",
538
+ arguments: { name: "Original" },
539
+ });
540
+ expect(receivedName).toBe("Overridden");
541
+ await client.close();
542
+ await instance.close();
332
543
  });
333
544
  it("category 'request' filter matches requests but not notifications", async () => {
334
545
  const matchedMethods = [];
335
- const server = new McpServer({ name: "test", version: "1.0.0" });
336
- server.registerTool("t1", { description: "t1" }, () => ({
337
- content: [{ type: "text", text: "ok" }],
338
- }));
339
- server.mcpMiddleware("request", async (request, _extra, next) => {
340
- matchedMethods.push(request.method);
341
- return next();
546
+ const app = new Skybridge({
547
+ name: "test",
548
+ version: "1.0.0",
549
+ handler: (server) => {
550
+ server.registerTool({ name: "t1", description: "t1" }, () => ({
551
+ content: [{ type: "text", text: "ok" }],
552
+ }));
553
+ server.mcpMiddleware("request", async (request, _extra, next) => {
554
+ matchedMethods.push(request.method);
555
+ return next();
556
+ });
557
+ return server;
558
+ },
342
559
  });
343
560
  const client = createClient();
344
561
  const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
345
- await server.connect(serverTransport);
562
+ const instance = await app.createServerInstance();
563
+ await instance.connect(serverTransport);
346
564
  await client.connect(clientTransport);
347
565
  await client.listTools();
348
566
  await client.callTool({ name: "t1" });
@@ -350,7 +568,7 @@ describe("McpServer.mcpMiddleware()", () => {
350
568
  expect(matchedMethods).toContain("tools/call");
351
569
  expect(matchedMethods).not.toContain("notifications/initialized");
352
570
  await client.close();
353
- await server.close();
571
+ await instance.close();
354
572
  });
355
573
  });
356
574
  // ---------------------------------------------------------------------------