@frontmcp/sdk 0.4.1 → 0.5.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 (558) hide show
  1. package/README.md +30 -18
  2. package/package.json +20 -5
  3. package/src/app/app.registry.d.ts +3 -2
  4. package/src/app/app.registry.js +3 -1
  5. package/src/app/app.registry.js.map +1 -1
  6. package/src/app/instances/app.local.instance.js +2 -2
  7. package/src/app/instances/app.local.instance.js.map +1 -1
  8. package/src/auth/auth.registry.d.ts +34 -2
  9. package/src/auth/auth.registry.js +162 -24
  10. package/src/auth/auth.registry.js.map +1 -1
  11. package/src/auth/auth.utils.js +8 -9
  12. package/src/auth/auth.utils.js.map +1 -1
  13. package/src/auth/authorization/authorization.class.d.ts +125 -0
  14. package/src/auth/authorization/authorization.class.js +224 -0
  15. package/src/auth/authorization/authorization.class.js.map +1 -0
  16. package/src/auth/authorization/authorization.types.d.ts +300 -0
  17. package/src/auth/authorization/authorization.types.js +79 -0
  18. package/src/auth/authorization/authorization.types.js.map +1 -0
  19. package/src/auth/authorization/index.d.ts +5 -0
  20. package/src/auth/authorization/index.js +19 -0
  21. package/src/auth/authorization/index.js.map +1 -0
  22. package/src/auth/authorization/orchestrated.authorization.d.ts +242 -0
  23. package/src/auth/authorization/orchestrated.authorization.js +306 -0
  24. package/src/auth/authorization/orchestrated.authorization.js.map +1 -0
  25. package/src/auth/authorization/public.authorization.d.ts +91 -0
  26. package/src/auth/authorization/public.authorization.js +132 -0
  27. package/src/auth/authorization/public.authorization.js.map +1 -0
  28. package/src/auth/authorization/transparent.authorization.d.ts +130 -0
  29. package/src/auth/authorization/transparent.authorization.js +147 -0
  30. package/src/auth/authorization/transparent.authorization.js.map +1 -0
  31. package/src/auth/consent/consent.types.d.ts +111 -0
  32. package/src/auth/consent/consent.types.js +119 -0
  33. package/src/auth/consent/consent.types.js.map +1 -0
  34. package/src/auth/consent/index.d.ts +1 -0
  35. package/src/auth/consent/index.js +13 -0
  36. package/src/auth/consent/index.js.map +1 -0
  37. package/src/auth/detection/auth-provider-detection.d.ts +84 -0
  38. package/src/auth/detection/auth-provider-detection.js +230 -0
  39. package/src/auth/detection/auth-provider-detection.js.map +1 -0
  40. package/src/auth/detection/index.d.ts +1 -0
  41. package/src/auth/detection/index.js +15 -0
  42. package/src/auth/detection/index.js.map +1 -0
  43. package/src/auth/flows/auth.verify.flow.d.ts +110 -0
  44. package/src/auth/flows/auth.verify.flow.js +379 -0
  45. package/src/auth/flows/auth.verify.flow.js.map +1 -0
  46. package/src/auth/flows/oauth.authorize.flow.d.ts +118 -164
  47. package/src/auth/flows/oauth.authorize.flow.js +701 -33
  48. package/src/auth/flows/oauth.authorize.flow.js.map +1 -1
  49. package/src/auth/flows/oauth.callback.flow.d.ts +117 -0
  50. package/src/auth/flows/oauth.callback.flow.js +357 -0
  51. package/src/auth/flows/oauth.callback.flow.js.map +1 -0
  52. package/src/auth/flows/oauth.register.flow.d.ts +32 -125
  53. package/src/auth/flows/oauth.token.flow.d.ts +52 -154
  54. package/src/auth/flows/oauth.token.flow.js +193 -55
  55. package/src/auth/flows/oauth.token.flow.js.map +1 -1
  56. package/src/auth/flows/session.verify.flow.d.ts +66 -321
  57. package/src/auth/flows/session.verify.flow.js +107 -18
  58. package/src/auth/flows/session.verify.flow.js.map +1 -1
  59. package/src/auth/flows/well-known.jwks.flow.d.ts +34 -205
  60. package/src/auth/flows/well-known.jwks.flow.js +15 -8
  61. package/src/auth/flows/well-known.jwks.flow.js.map +1 -1
  62. package/src/auth/flows/well-known.oauth-authorization-server.flow.d.ts +48 -223
  63. package/src/auth/flows/well-known.oauth-authorization-server.flow.js +2 -3
  64. package/src/auth/flows/well-known.oauth-authorization-server.flow.js.map +1 -1
  65. package/src/auth/flows/well-known.prm.flow.d.ts +19 -120
  66. package/src/auth/flows/well-known.prm.flow.js +3 -4
  67. package/src/auth/flows/well-known.prm.flow.js.map +1 -1
  68. package/src/auth/instances/instance.local-primary-auth.d.ts +91 -4
  69. package/src/auth/instances/instance.local-primary-auth.js +236 -6
  70. package/src/auth/instances/instance.local-primary-auth.js.map +1 -1
  71. package/src/auth/instances/instance.remote-primary-auth.d.ts +4 -3
  72. package/src/auth/instances/instance.remote-primary-auth.js +2 -2
  73. package/src/auth/instances/instance.remote-primary-auth.js.map +1 -1
  74. package/src/auth/session/authorization-vault.d.ts +611 -0
  75. package/src/auth/session/authorization-vault.js +817 -0
  76. package/src/auth/session/authorization-vault.js.map +1 -0
  77. package/src/auth/session/authorization.store.d.ts +301 -0
  78. package/src/auth/session/authorization.store.js +323 -0
  79. package/src/auth/session/authorization.store.js.map +1 -0
  80. package/src/auth/session/encrypted-authorization-vault.d.ts +181 -0
  81. package/src/auth/session/encrypted-authorization-vault.js +493 -0
  82. package/src/auth/session/encrypted-authorization-vault.js.map +1 -0
  83. package/src/auth/session/index.d.ts +4 -4
  84. package/src/auth/session/index.js +11 -7
  85. package/src/auth/session/index.js.map +1 -1
  86. package/src/auth/session/session.schema.d.ts +1 -1
  87. package/src/auth/session/session.service.d.ts +1 -1
  88. package/src/auth/session/transport-session.manager.d.ts +101 -0
  89. package/src/auth/session/transport-session.manager.js +300 -0
  90. package/src/auth/session/transport-session.manager.js.map +1 -0
  91. package/src/auth/session/transport-session.types.d.ts +457 -0
  92. package/src/auth/session/transport-session.types.js +110 -0
  93. package/src/auth/session/transport-session.types.js.map +1 -0
  94. package/src/auth/session/utils/session-id.utils.d.ts +14 -2
  95. package/src/auth/session/utils/session-id.utils.js +68 -19
  96. package/src/auth/session/utils/session-id.utils.js.map +1 -1
  97. package/src/auth/session/vault-encryption.d.ts +189 -0
  98. package/src/auth/session/vault-encryption.js +263 -0
  99. package/src/auth/session/vault-encryption.js.map +1 -0
  100. package/src/auth/ui/base-layout.d.ts +188 -0
  101. package/src/auth/ui/base-layout.js +292 -0
  102. package/src/auth/ui/base-layout.js.map +1 -0
  103. package/src/auth/ui/htmx-templates.d.ts +135 -0
  104. package/src/auth/ui/htmx-templates.js +433 -0
  105. package/src/auth/ui/htmx-templates.js.map +1 -0
  106. package/src/auth/ui/index.d.ts +11 -0
  107. package/src/auth/ui/index.js +35 -0
  108. package/src/auth/ui/index.js.map +1 -0
  109. package/src/auth/utils/audience.validator.d.ts +129 -0
  110. package/src/auth/utils/audience.validator.js +196 -0
  111. package/src/auth/utils/audience.validator.js.map +1 -0
  112. package/src/auth/utils/index.d.ts +2 -0
  113. package/src/auth/utils/index.js +7 -0
  114. package/src/auth/utils/index.js.map +1 -0
  115. package/src/auth/utils/www-authenticate.utils.d.ts +97 -0
  116. package/src/auth/utils/www-authenticate.utils.js +183 -0
  117. package/src/auth/utils/www-authenticate.utils.js.map +1 -0
  118. package/src/common/common.schema.d.ts +2 -16
  119. package/src/common/constants.d.ts +3 -0
  120. package/src/common/constants.js +6 -1
  121. package/src/common/constants.js.map +1 -1
  122. package/src/common/decorators/decorator-utils.d.ts +131 -0
  123. package/src/common/decorators/decorator-utils.js +195 -0
  124. package/src/common/decorators/decorator-utils.js.map +1 -0
  125. package/src/common/decorators/front-mcp.decorator.js +3 -2
  126. package/src/common/decorators/front-mcp.decorator.js.map +1 -1
  127. package/src/common/decorators/hook.decorator.d.ts +58 -2
  128. package/src/common/decorators/hook.decorator.js +127 -17
  129. package/src/common/decorators/hook.decorator.js.map +1 -1
  130. package/src/common/decorators/plugin.decorator.d.ts +1 -1
  131. package/src/common/decorators/plugin.decorator.js +11 -10
  132. package/src/common/decorators/plugin.decorator.js.map +1 -1
  133. package/src/common/decorators/resource.decorator.d.ts +32 -3
  134. package/src/common/decorators/resource.decorator.js +46 -4
  135. package/src/common/decorators/resource.decorator.js.map +1 -1
  136. package/src/common/decorators/tool.decorator.d.ts +54 -5
  137. package/src/common/decorators/tool.decorator.js.map +1 -1
  138. package/src/common/dynamic/dynamic.plugin.d.ts +22 -11
  139. package/src/common/dynamic/dynamic.plugin.js +7 -1
  140. package/src/common/dynamic/dynamic.plugin.js.map +1 -1
  141. package/src/common/entries/prompt.entry.d.ts +46 -2
  142. package/src/common/entries/prompt.entry.js +10 -0
  143. package/src/common/entries/prompt.entry.js.map +1 -1
  144. package/src/common/entries/resource.entry.d.ts +69 -6
  145. package/src/common/entries/resource.entry.js +27 -3
  146. package/src/common/entries/resource.entry.js.map +1 -1
  147. package/src/common/entries/scope.entry.d.ts +5 -1
  148. package/src/common/entries/scope.entry.js +3 -3
  149. package/src/common/entries/scope.entry.js.map +1 -1
  150. package/src/common/flow/flow.utils.d.ts +56 -0
  151. package/src/common/flow/flow.utils.js +96 -0
  152. package/src/common/flow/flow.utils.js.map +1 -0
  153. package/src/common/index.d.ts +2 -2
  154. package/src/common/index.js +2 -2
  155. package/src/common/index.js.map +1 -1
  156. package/src/common/interfaces/execution-context.interface.d.ts +59 -0
  157. package/src/common/interfaces/execution-context.interface.js +81 -0
  158. package/src/common/interfaces/execution-context.interface.js.map +1 -0
  159. package/src/common/interfaces/flow.interface.d.ts +1 -1
  160. package/src/common/interfaces/flow.interface.js.map +1 -1
  161. package/src/common/interfaces/index.d.ts +1 -0
  162. package/src/common/interfaces/index.js +1 -0
  163. package/src/common/interfaces/index.js.map +1 -1
  164. package/src/common/interfaces/internal/primary-auth-provider.interface.d.ts +17 -2
  165. package/src/common/interfaces/internal/primary-auth-provider.interface.js +52 -4
  166. package/src/common/interfaces/internal/primary-auth-provider.interface.js.map +1 -1
  167. package/src/common/interfaces/internal/registry.interface.d.ts +16 -2
  168. package/src/common/interfaces/internal/registry.interface.js.map +1 -1
  169. package/src/common/interfaces/plugin.interface.js.map +1 -1
  170. package/src/common/interfaces/prompt.interface.d.ts +53 -4
  171. package/src/common/interfaces/prompt.interface.js +78 -0
  172. package/src/common/interfaces/prompt.interface.js.map +1 -1
  173. package/src/common/interfaces/resource.interface.d.ts +47 -17
  174. package/src/common/interfaces/resource.interface.js +53 -0
  175. package/src/common/interfaces/resource.interface.js.map +1 -1
  176. package/src/common/interfaces/tool.interface.d.ts +39 -22
  177. package/src/common/interfaces/tool.interface.js +61 -34
  178. package/src/common/interfaces/tool.interface.js.map +1 -1
  179. package/src/common/metadata/adapter.metadata.d.ts +1 -9
  180. package/src/common/metadata/app.metadata.d.ts +425 -730
  181. package/src/common/metadata/auth-provider.metadata.d.ts +2 -12
  182. package/src/common/metadata/flow.metadata.d.ts +10 -25
  183. package/src/common/metadata/front-mcp.metadata.d.ts +602 -1023
  184. package/src/common/metadata/front-mcp.metadata.js +6 -4
  185. package/src/common/metadata/front-mcp.metadata.js.map +1 -1
  186. package/src/common/metadata/hook.metadata.d.ts +1 -1
  187. package/src/common/metadata/hook.metadata.js.map +1 -1
  188. package/src/common/metadata/index.d.ts +1 -0
  189. package/src/common/metadata/index.js +1 -0
  190. package/src/common/metadata/index.js.map +1 -1
  191. package/src/common/metadata/logger.metadata.d.ts +1 -9
  192. package/src/common/metadata/plugin.metadata.d.ts +8 -30
  193. package/src/common/metadata/prompt.metadata.d.ts +4 -161
  194. package/src/common/metadata/provider.metadata.d.ts +2 -12
  195. package/src/common/metadata/resource.metadata.d.ts +6 -98
  196. package/src/common/metadata/resource.metadata.js +15 -6
  197. package/src/common/metadata/resource.metadata.js.map +1 -1
  198. package/src/common/metadata/tool-ui.metadata.d.ts +10 -0
  199. package/src/common/metadata/tool-ui.metadata.js +12 -0
  200. package/src/common/metadata/tool-ui.metadata.js.map +1 -0
  201. package/src/common/metadata/tool.metadata.d.ts +78 -199
  202. package/src/common/metadata/tool.metadata.js +11 -14
  203. package/src/common/metadata/tool.metadata.js.map +1 -1
  204. package/src/common/providers/base-config.provider.d.ts +84 -0
  205. package/src/common/providers/base-config.provider.js +128 -0
  206. package/src/common/providers/base-config.provider.js.map +1 -0
  207. package/src/common/records/plugin.record.d.ts +5 -6
  208. package/src/common/records/plugin.record.js.map +1 -1
  209. package/src/common/records/prompt.record.js.map +1 -1
  210. package/src/common/records/resource.record.d.ts +17 -1
  211. package/src/common/records/resource.record.js +12 -6
  212. package/src/common/records/resource.record.js.map +1 -1
  213. package/src/common/records/tool.record.js.map +1 -1
  214. package/src/common/schemas/annotated-class.schema.d.ts +9 -9
  215. package/src/common/schemas/annotated-class.schema.js +92 -27
  216. package/src/common/schemas/annotated-class.schema.js.map +1 -1
  217. package/src/common/schemas/http-input.schema.d.ts +6 -30
  218. package/src/common/schemas/http-output.schema.d.ts +326 -1630
  219. package/src/common/schemas/http-output.schema.js +39 -1
  220. package/src/common/schemas/http-output.schema.js.map +1 -1
  221. package/src/common/tokens/front-mcp.tokens.js +4 -1
  222. package/src/common/tokens/front-mcp.tokens.js.map +1 -1
  223. package/src/common/tokens/resource.tokens.d.ts +2 -0
  224. package/src/common/tokens/resource.tokens.js +4 -1
  225. package/src/common/tokens/resource.tokens.js.map +1 -1
  226. package/src/common/tokens/tool.tokens.d.ts +2 -0
  227. package/src/common/tokens/tool.tokens.js +2 -0
  228. package/src/common/tokens/tool.tokens.js.map +1 -1
  229. package/src/common/types/auth/jwt.types.d.ts +5 -31
  230. package/src/common/types/auth/session.types.d.ts +97 -192
  231. package/src/common/types/auth/session.types.js +24 -11
  232. package/src/common/types/auth/session.types.js.map +1 -1
  233. package/src/common/types/options/auth.options.d.ts +1013 -490
  234. package/src/common/types/options/auth.options.js +554 -36
  235. package/src/common/types/options/auth.options.js.map +1 -1
  236. package/src/common/types/options/http.options.d.ts +1 -9
  237. package/src/common/types/options/logging.options.d.ts +7 -13
  238. package/src/common/types/options/logging.options.js +4 -0
  239. package/src/common/types/options/logging.options.js.map +1 -1
  240. package/src/common/types/options/server-info.options.d.ts +3 -31
  241. package/src/common/types/options/session.options.d.ts +90 -10
  242. package/src/common/types/options/session.options.js +26 -3
  243. package/src/common/types/options/session.options.js.map +1 -1
  244. package/src/common/utils/decide-request-intent.utils.d.ts +8 -46
  245. package/src/common/utils/decide-request-intent.utils.js +88 -23
  246. package/src/common/utils/decide-request-intent.utils.js.map +1 -1
  247. package/src/completion/flows/complete.flow.d.ts +74 -0
  248. package/src/completion/flows/complete.flow.js +199 -0
  249. package/src/completion/flows/complete.flow.js.map +1 -0
  250. package/src/errors/authorization-required.error.d.ts +189 -0
  251. package/src/errors/authorization-required.error.js +274 -0
  252. package/src/errors/authorization-required.error.js.map +1 -0
  253. package/src/errors/index.d.ts +2 -1
  254. package/src/errors/index.js +17 -1
  255. package/src/errors/index.js.map +1 -1
  256. package/src/errors/mcp.error.d.ts +101 -1
  257. package/src/errors/mcp.error.js +147 -2
  258. package/src/errors/mcp.error.js.map +1 -1
  259. package/src/flows/flow.instance.js +4 -3
  260. package/src/flows/flow.instance.js.map +1 -1
  261. package/src/flows/flow.registry.js.map +1 -1
  262. package/src/flows/flow.stages.js +14 -11
  263. package/src/flows/flow.stages.js.map +1 -1
  264. package/src/front-mcp/front-mcp.providers.d.ts +464 -102
  265. package/src/front-mcp/front-mcp.providers.js +3 -5
  266. package/src/front-mcp/front-mcp.providers.js.map +1 -1
  267. package/src/hooks/hook.instance.d.ts +1 -1
  268. package/src/hooks/hook.instance.js +5 -2
  269. package/src/hooks/hook.instance.js.map +1 -1
  270. package/src/hooks/hook.registry.js +7 -5
  271. package/src/hooks/hook.registry.js.map +1 -1
  272. package/src/index.d.ts +28 -9
  273. package/src/index.js +5 -1
  274. package/src/index.js.map +1 -1
  275. package/src/logger/instances/instance.logger.js +3 -2
  276. package/src/logger/instances/instance.logger.js.map +1 -1
  277. package/src/logger/logger.registry.js +7 -2
  278. package/src/logger/logger.registry.js.map +1 -1
  279. package/src/logging/flows/set-level.flow.d.ts +62 -0
  280. package/src/logging/flows/set-level.flow.js +108 -0
  281. package/src/logging/flows/set-level.flow.js.map +1 -0
  282. package/src/mcp-apps/csp.d.ts +111 -0
  283. package/src/mcp-apps/csp.js +267 -0
  284. package/src/mcp-apps/csp.js.map +1 -0
  285. package/src/mcp-apps/index.d.ts +23 -0
  286. package/src/mcp-apps/index.js +91 -0
  287. package/src/mcp-apps/index.js.map +1 -0
  288. package/src/mcp-apps/schemas.d.ts +403 -0
  289. package/src/mcp-apps/schemas.js +345 -0
  290. package/src/mcp-apps/schemas.js.map +1 -0
  291. package/src/mcp-apps/template.d.ts +94 -0
  292. package/src/mcp-apps/template.js +419 -0
  293. package/src/mcp-apps/template.js.map +1 -0
  294. package/src/mcp-apps/types.d.ts +323 -0
  295. package/src/mcp-apps/types.js +59 -0
  296. package/src/mcp-apps/types.js.map +1 -0
  297. package/src/notification/index.d.ts +1 -0
  298. package/src/notification/index.js +13 -0
  299. package/src/notification/index.js.map +1 -0
  300. package/src/notification/notification.service.d.ts +378 -0
  301. package/src/notification/notification.service.js +727 -0
  302. package/src/notification/notification.service.js.map +1 -0
  303. package/src/plugin/plugin.registry.js +12 -9
  304. package/src/plugin/plugin.registry.js.map +1 -1
  305. package/src/prompt/flows/get-prompt.flow.d.ts +153 -0
  306. package/src/prompt/flows/get-prompt.flow.js +214 -0
  307. package/src/prompt/flows/get-prompt.flow.js.map +1 -0
  308. package/src/prompt/flows/prompts-list.flow.d.ts +67 -0
  309. package/src/prompt/flows/prompts-list.flow.js +176 -0
  310. package/src/prompt/flows/prompts-list.flow.js.map +1 -0
  311. package/src/prompt/index.d.ts +7 -0
  312. package/src/prompt/index.js +17 -0
  313. package/src/prompt/index.js.map +1 -0
  314. package/src/prompt/prompt.events.d.ts +17 -0
  315. package/src/prompt/prompt.events.js +25 -0
  316. package/src/prompt/prompt.events.js.map +1 -0
  317. package/src/prompt/prompt.instance.d.ts +30 -0
  318. package/src/prompt/prompt.instance.js +120 -0
  319. package/src/prompt/prompt.instance.js.map +1 -0
  320. package/src/prompt/prompt.registry.d.ts +79 -12
  321. package/src/prompt/prompt.registry.js +360 -15
  322. package/src/prompt/prompt.registry.js.map +1 -1
  323. package/src/prompt/prompt.types.d.ts +26 -0
  324. package/src/prompt/prompt.types.js +11 -0
  325. package/src/prompt/prompt.types.js.map +1 -0
  326. package/src/prompt/prompt.utils.d.ts +26 -0
  327. package/src/prompt/prompt.utils.js +136 -0
  328. package/src/prompt/prompt.utils.js.map +1 -0
  329. package/src/provider/provider.registry.d.ts +12 -5
  330. package/src/provider/provider.registry.js +30 -138
  331. package/src/provider/provider.registry.js.map +1 -1
  332. package/src/regsitry/registry.base.d.ts +1 -1
  333. package/src/regsitry/registry.base.js.map +1 -1
  334. package/src/resource/flows/read-resource.flow.d.ts +91 -0
  335. package/src/resource/flows/read-resource.flow.js +270 -0
  336. package/src/resource/flows/read-resource.flow.js.map +1 -0
  337. package/src/resource/flows/resource-templates-list.flow.d.ts +64 -0
  338. package/src/resource/flows/resource-templates-list.flow.js +191 -0
  339. package/src/resource/flows/resource-templates-list.flow.js.map +1 -0
  340. package/src/resource/flows/resources-list.flow.d.ts +64 -0
  341. package/src/resource/flows/resources-list.flow.js +196 -0
  342. package/src/resource/flows/resources-list.flow.js.map +1 -0
  343. package/src/resource/flows/subscribe-resource.flow.d.ts +45 -0
  344. package/src/resource/flows/subscribe-resource.flow.js +123 -0
  345. package/src/resource/flows/subscribe-resource.flow.js.map +1 -0
  346. package/src/resource/flows/unsubscribe-resource.flow.d.ts +44 -0
  347. package/src/resource/flows/unsubscribe-resource.flow.js +107 -0
  348. package/src/resource/flows/unsubscribe-resource.flow.js.map +1 -0
  349. package/src/resource/index.d.ts +8 -0
  350. package/src/resource/index.js +20 -0
  351. package/src/resource/index.js.map +1 -0
  352. package/src/resource/resource.events.d.ts +24 -0
  353. package/src/resource/resource.events.js +17 -0
  354. package/src/resource/resource.events.js.map +1 -0
  355. package/src/resource/resource.instance.d.ts +35 -0
  356. package/src/resource/resource.instance.js +163 -0
  357. package/src/resource/resource.instance.js.map +1 -0
  358. package/src/resource/resource.registry.d.ts +106 -12
  359. package/src/resource/resource.registry.js +449 -13
  360. package/src/resource/resource.registry.js.map +1 -1
  361. package/src/resource/resource.types.d.ts +35 -0
  362. package/src/resource/resource.types.js +11 -0
  363. package/src/resource/resource.types.js.map +1 -0
  364. package/src/resource/resource.utils.d.ts +30 -0
  365. package/src/resource/resource.utils.js +151 -0
  366. package/src/resource/resource.utils.js.map +1 -0
  367. package/src/scope/flows/http.request.flow.d.ts +48 -330
  368. package/src/scope/flows/http.request.flow.js +306 -78
  369. package/src/scope/flows/http.request.flow.js.map +1 -1
  370. package/src/scope/scope.instance.d.ts +12 -0
  371. package/src/scope/scope.instance.js +145 -15
  372. package/src/scope/scope.instance.js.map +1 -1
  373. package/src/tool/flows/call-tool.flow.d.ts +64 -1110
  374. package/src/tool/flows/call-tool.flow.js +303 -15
  375. package/src/tool/flows/call-tool.flow.js.map +1 -1
  376. package/src/tool/flows/tools-list.flow.d.ts +32 -473
  377. package/src/tool/flows/tools-list.flow.js +121 -40
  378. package/src/tool/flows/tools-list.flow.js.map +1 -1
  379. package/src/tool/tool.events.d.ts +8 -1
  380. package/src/tool/tool.events.js.map +1 -1
  381. package/src/tool/tool.instance.d.ts +3 -1
  382. package/src/tool/tool.instance.js +17 -3
  383. package/src/tool/tool.instance.js.map +1 -1
  384. package/src/tool/tool.registry.d.ts +7 -1
  385. package/src/tool/tool.registry.js +26 -10
  386. package/src/tool/tool.registry.js.map +1 -1
  387. package/src/tool/tool.types.d.ts +4 -4
  388. package/src/tool/tool.types.js.map +1 -1
  389. package/src/tool/tool.utils.d.ts +3 -12
  390. package/src/tool/tool.utils.js +39 -193
  391. package/src/tool/tool.utils.js.map +1 -1
  392. package/src/tool/ui/index.d.ts +22 -0
  393. package/src/tool/ui/index.js +63 -0
  394. package/src/tool/ui/index.js.map +1 -0
  395. package/src/tool/ui/platform-adapters.d.ts +10 -0
  396. package/src/tool/ui/platform-adapters.js +18 -0
  397. package/src/tool/ui/platform-adapters.js.map +1 -0
  398. package/src/tool/ui/template-helpers.d.ts +46 -0
  399. package/src/tool/ui/template-helpers.js +112 -0
  400. package/src/tool/ui/template-helpers.js.map +1 -0
  401. package/src/tool/ui/ui-resource-template.d.ts +34 -0
  402. package/src/tool/ui/ui-resource-template.js +64 -0
  403. package/src/tool/ui/ui-resource-template.js.map +1 -0
  404. package/src/tool/ui/ui-resource.handler.d.ts +74 -0
  405. package/src/tool/ui/ui-resource.handler.js +129 -0
  406. package/src/tool/ui/ui-resource.handler.js.map +1 -0
  407. package/src/transport/adapters/transport.local.adapter.d.ts +2 -2
  408. package/src/transport/adapters/transport.local.adapter.js +28 -7
  409. package/src/transport/adapters/transport.local.adapter.js.map +1 -1
  410. package/src/transport/adapters/transport.sse.adapter.d.ts +2 -2
  411. package/src/transport/adapters/transport.sse.adapter.js +4 -3
  412. package/src/transport/adapters/transport.sse.adapter.js.map +1 -1
  413. package/src/transport/adapters/transport.streamable-http.adapter.d.ts +10 -3
  414. package/src/transport/adapters/transport.streamable-http.adapter.js +54 -8
  415. package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
  416. package/src/transport/flows/handle.sse.flow.d.ts +29 -63
  417. package/src/transport/flows/handle.sse.flow.js +78 -10
  418. package/src/transport/flows/handle.sse.flow.js.map +1 -1
  419. package/src/transport/flows/handle.stateless-http.flow.d.ts +29 -0
  420. package/src/transport/flows/handle.stateless-http.flow.js +102 -0
  421. package/src/transport/flows/handle.stateless-http.flow.js.map +1 -0
  422. package/src/transport/flows/handle.streamable-http.flow.d.ts +32 -64
  423. package/src/transport/flows/handle.streamable-http.flow.js +158 -26
  424. package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
  425. package/src/transport/legacy/legacy.sse.tranporter.d.ts +9 -0
  426. package/src/transport/legacy/legacy.sse.tranporter.js +17 -2
  427. package/src/transport/legacy/legacy.sse.tranporter.js.map +1 -1
  428. package/src/transport/mcp-handlers/call-tool-request.handler.js +27 -1
  429. package/src/transport/mcp-handlers/call-tool-request.handler.js.map +1 -1
  430. package/src/transport/mcp-handlers/complete-request.handler.d.ts +69 -0
  431. package/src/transport/mcp-handlers/complete-request.handler.js +11 -0
  432. package/src/transport/mcp-handlers/complete-request.handler.js.map +1 -0
  433. package/src/transport/mcp-handlers/get-prompt-request.handler.d.ts +87 -0
  434. package/src/transport/mcp-handlers/get-prompt-request.handler.js +11 -0
  435. package/src/transport/mcp-handlers/get-prompt-request.handler.js.map +1 -0
  436. package/src/transport/mcp-handlers/index.d.ts +517 -208
  437. package/src/transport/mcp-handlers/index.js +39 -2
  438. package/src/transport/mcp-handlers/index.js.map +1 -1
  439. package/src/transport/mcp-handlers/initialize-request.handler.d.ts +1 -1
  440. package/src/transport/mcp-handlers/initialize-request.handler.js +73 -7
  441. package/src/transport/mcp-handlers/initialize-request.handler.js.map +1 -1
  442. package/src/transport/mcp-handlers/list-prompts-request.handler.d.ts +54 -0
  443. package/src/transport/mcp-handlers/list-prompts-request.handler.js +11 -0
  444. package/src/transport/mcp-handlers/list-prompts-request.handler.js.map +1 -0
  445. package/src/transport/mcp-handlers/list-resource-templates-request.handler.d.ts +51 -0
  446. package/src/transport/mcp-handlers/list-resource-templates-request.handler.js +12 -0
  447. package/src/transport/mcp-handlers/list-resource-templates-request.handler.js.map +1 -0
  448. package/src/transport/mcp-handlers/list-resources-request.handler.d.ts +51 -0
  449. package/src/transport/mcp-handlers/list-resources-request.handler.js +12 -0
  450. package/src/transport/mcp-handlers/list-resources-request.handler.js.map +1 -0
  451. package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +19 -146
  452. package/src/transport/mcp-handlers/logging-set-level-request.handler.d.ts +46 -0
  453. package/src/transport/mcp-handlers/logging-set-level-request.handler.js +34 -0
  454. package/src/transport/mcp-handlers/logging-set-level-request.handler.js.map +1 -0
  455. package/src/transport/mcp-handlers/mcp-handlers.types.d.ts +3 -7
  456. package/src/transport/mcp-handlers/mcp-handlers.types.js.map +1 -1
  457. package/src/transport/mcp-handlers/read-resource-request.handler.d.ts +46 -0
  458. package/src/transport/mcp-handlers/read-resource-request.handler.js +12 -0
  459. package/src/transport/mcp-handlers/read-resource-request.handler.js.map +1 -0
  460. package/src/transport/mcp-handlers/roots-list-changed-notification.handler.d.ts +11 -0
  461. package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js +26 -0
  462. package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js.map +1 -0
  463. package/src/transport/mcp-handlers/subscribe-request.handler.d.ts +37 -0
  464. package/src/transport/mcp-handlers/subscribe-request.handler.js +34 -0
  465. package/src/transport/mcp-handlers/subscribe-request.handler.js.map +1 -0
  466. package/src/transport/mcp-handlers/unsubscribe-request.handler.d.ts +37 -0
  467. package/src/transport/mcp-handlers/unsubscribe-request.handler.js +34 -0
  468. package/src/transport/mcp-handlers/unsubscribe-request.handler.js.map +1 -0
  469. package/src/transport/transport.local.js +7 -2
  470. package/src/transport/transport.local.js.map +1 -1
  471. package/src/transport/transport.registry.d.ts +30 -0
  472. package/src/transport/transport.registry.js +84 -1
  473. package/src/transport/transport.registry.js.map +1 -1
  474. package/src/transport/transport.types.d.ts +3 -3
  475. package/src/transport/transport.types.js.map +1 -1
  476. package/src/utils/content.utils.d.ts +48 -0
  477. package/src/utils/content.utils.js +194 -0
  478. package/src/utils/content.utils.js.map +1 -0
  479. package/src/utils/index.d.ts +8 -0
  480. package/src/utils/index.js +55 -0
  481. package/src/utils/index.js.map +1 -0
  482. package/src/utils/lineage.utils.d.ts +40 -0
  483. package/src/utils/lineage.utils.js +82 -0
  484. package/src/utils/lineage.utils.js.map +1 -0
  485. package/src/utils/naming.utils.d.ts +46 -0
  486. package/src/utils/naming.utils.js +136 -0
  487. package/src/utils/naming.utils.js.map +1 -0
  488. package/src/utils/types.utils.d.ts +2 -2
  489. package/src/utils/types.utils.js.map +1 -1
  490. package/src/utils/uri-template.utils.d.ts +57 -0
  491. package/src/utils/uri-template.utils.js +113 -0
  492. package/src/utils/uri-template.utils.js.map +1 -0
  493. package/src/utils/uri-validation.utils.d.ts +40 -0
  494. package/src/utils/uri-validation.utils.js +76 -0
  495. package/src/utils/uri-validation.utils.js.map +1 -0
  496. package/src/__test-utils__/fixtures/hook.fixtures.d.ts +0 -46
  497. package/src/__test-utils__/fixtures/hook.fixtures.js +0 -114
  498. package/src/__test-utils__/fixtures/hook.fixtures.js.map +0 -1
  499. package/src/__test-utils__/fixtures/index.d.ts +0 -7
  500. package/src/__test-utils__/fixtures/index.js +0 -11
  501. package/src/__test-utils__/fixtures/index.js.map +0 -1
  502. package/src/__test-utils__/fixtures/plugin.fixtures.d.ts +0 -46
  503. package/src/__test-utils__/fixtures/plugin.fixtures.js +0 -127
  504. package/src/__test-utils__/fixtures/plugin.fixtures.js.map +0 -1
  505. package/src/__test-utils__/fixtures/provider.fixtures.d.ts +0 -69
  506. package/src/__test-utils__/fixtures/provider.fixtures.js +0 -131
  507. package/src/__test-utils__/fixtures/provider.fixtures.js.map +0 -1
  508. package/src/__test-utils__/fixtures/scope.fixtures.d.ts +0 -14
  509. package/src/__test-utils__/fixtures/scope.fixtures.js +0 -59
  510. package/src/__test-utils__/fixtures/scope.fixtures.js.map +0 -1
  511. package/src/__test-utils__/fixtures/tool.fixtures.d.ts +0 -36
  512. package/src/__test-utils__/fixtures/tool.fixtures.js +0 -91
  513. package/src/__test-utils__/fixtures/tool.fixtures.js.map +0 -1
  514. package/src/__test-utils__/helpers/assertion.helpers.d.ts +0 -45
  515. package/src/__test-utils__/helpers/assertion.helpers.js +0 -153
  516. package/src/__test-utils__/helpers/assertion.helpers.js.map +0 -1
  517. package/src/__test-utils__/helpers/async.helpers.d.ts +0 -48
  518. package/src/__test-utils__/helpers/async.helpers.js +0 -112
  519. package/src/__test-utils__/helpers/async.helpers.js.map +0 -1
  520. package/src/__test-utils__/helpers/index.d.ts +0 -6
  521. package/src/__test-utils__/helpers/index.js +0 -10
  522. package/src/__test-utils__/helpers/index.js.map +0 -1
  523. package/src/__test-utils__/helpers/setup.helpers.d.ts +0 -54
  524. package/src/__test-utils__/helpers/setup.helpers.js +0 -106
  525. package/src/__test-utils__/helpers/setup.helpers.js.map +0 -1
  526. package/src/__test-utils__/index.d.ts +0 -9
  527. package/src/__test-utils__/index.js +0 -14
  528. package/src/__test-utils__/index.js.map +0 -1
  529. package/src/__test-utils__/mocks/flow-instance.mock.d.ts +0 -50
  530. package/src/__test-utils__/mocks/flow-instance.mock.js +0 -72
  531. package/src/__test-utils__/mocks/flow-instance.mock.js.map +0 -1
  532. package/src/__test-utils__/mocks/hook-registry.mock.d.ts +0 -25
  533. package/src/__test-utils__/mocks/hook-registry.mock.js +0 -65
  534. package/src/__test-utils__/mocks/hook-registry.mock.js.map +0 -1
  535. package/src/__test-utils__/mocks/index.d.ts +0 -8
  536. package/src/__test-utils__/mocks/index.js +0 -12
  537. package/src/__test-utils__/mocks/index.js.map +0 -1
  538. package/src/__test-utils__/mocks/plugin-registry.mock.d.ts +0 -43
  539. package/src/__test-utils__/mocks/plugin-registry.mock.js +0 -70
  540. package/src/__test-utils__/mocks/plugin-registry.mock.js.map +0 -1
  541. package/src/__test-utils__/mocks/provider-registry.mock.d.ts +0 -39
  542. package/src/__test-utils__/mocks/provider-registry.mock.js +0 -72
  543. package/src/__test-utils__/mocks/provider-registry.mock.js.map +0 -1
  544. package/src/__test-utils__/mocks/tool-registry.mock.d.ts +0 -43
  545. package/src/__test-utils__/mocks/tool-registry.mock.js +0 -79
  546. package/src/__test-utils__/mocks/tool-registry.mock.js.map +0 -1
  547. package/src/auth/path.utils.d.ts +0 -20
  548. package/src/auth/path.utils.js +0 -71
  549. package/src/auth/path.utils.js.map +0 -1
  550. package/src/common/decorators-old/async-with.decorator.d.ts +0 -10
  551. package/src/common/decorators-old/async-with.decorator.js +0 -24
  552. package/src/common/decorators-old/async-with.decorator.js.map +0 -1
  553. package/src/common/decorators-old/auth-hook.decorator.d.ts +0 -14
  554. package/src/common/decorators-old/auth-hook.decorator.js +0 -27
  555. package/src/common/decorators-old/auth-hook.decorator.js.map +0 -1
  556. package/src/common/decorators-old/session-hook.decorator.d.ts +0 -14
  557. package/src/common/decorators-old/session-hook.decorator.js +0 -27
  558. package/src/common/decorators-old/session-hook.decorator.js.map +0 -1
@@ -11,7 +11,13 @@ const flow_registry_1 = tslib_1.__importDefault(require("../flows/flow.registry"
11
11
  const http_request_flow_1 = tslib_1.__importDefault(require("./flows/http.request.flow"));
12
12
  const transport_registry_1 = require("../transport/transport.registry");
13
13
  const tool_registry_1 = tslib_1.__importDefault(require("../tool/tool.registry"));
14
+ const resource_registry_1 = tslib_1.__importDefault(require("../resource/resource.registry"));
14
15
  const hook_registry_1 = tslib_1.__importDefault(require("../hooks/hook.registry"));
16
+ const prompt_registry_1 = tslib_1.__importDefault(require("../prompt/prompt.registry"));
17
+ const notification_1 = require("../notification");
18
+ const set_level_flow_1 = tslib_1.__importDefault(require("../logging/flows/set-level.flow"));
19
+ const complete_flow_1 = tslib_1.__importDefault(require("../completion/flows/complete.flow"));
20
+ const ui_1 = require("../tool/ui");
15
21
  class Scope extends common_1.ScopeEntry {
16
22
  id;
17
23
  globalProviders;
@@ -22,7 +28,11 @@ class Scope extends common_1.ScopeEntry {
22
28
  scopeApps;
23
29
  scopeHooks;
24
30
  scopeTools;
31
+ scopeResources;
32
+ scopePrompts;
25
33
  transportService; // TODO: migrate transport service to transport.registry
34
+ notificationService;
35
+ toolUIRegistry;
26
36
  entryPath;
27
37
  routeBase;
28
38
  orchestrated = false;
@@ -45,50 +55,158 @@ class Scope extends common_1.ScopeEntry {
45
55
  }
46
56
  async initialize() {
47
57
  await this.scopeProviders.ready;
48
- this.scopeHooks = new hook_registry_1.default(this.scopeProviders, []);
58
+ const scopeRef = { kind: 'scope', id: this.id, ref: Scope };
59
+ const scopeProviders = this.scopeProviders;
60
+ this.scopeHooks = new hook_registry_1.default(scopeProviders, []);
49
61
  await this.scopeHooks.ready;
50
- this.scopeFlows = new flow_registry_1.default(this.scopeProviders, [http_request_flow_1.default]);
62
+ this.scopeFlows = new flow_registry_1.default(scopeProviders, [http_request_flow_1.default]);
51
63
  await this.scopeFlows.ready;
52
64
  this.transportService = new transport_registry_1.TransportService(this);
53
- this.scopeAuth = new auth_registry_1.AuthRegistry(this, this.scopeProviders, [], {
54
- kind: 'scope',
55
- id: this.id,
56
- ref: common_1.ScopeEntry,
57
- }, this.metadata.auth);
65
+ this.scopeAuth = new auth_registry_1.AuthRegistry(this, scopeProviders, [], scopeRef, this.metadata.auth);
58
66
  await this.scopeAuth.ready;
59
- this.scopeApps = new app_registry_1.default(this.scopeProviders, this.metadata.apps);
67
+ this.scopeApps = new app_registry_1.default(this.scopeProviders, this.metadata.apps, scopeRef);
60
68
  await this.scopeApps.ready;
61
- this.scopeTools = new tool_registry_1.default(this.scopeProviders, [], { kind: 'scope', id: this.id, ref: Scope });
69
+ this.scopeTools = new tool_registry_1.default(this.scopeProviders, [], scopeRef);
62
70
  await this.scopeTools.ready;
71
+ this.toolUIRegistry = new ui_1.ToolUIRegistry();
72
+ this.scopeResources = new resource_registry_1.default(this.scopeProviders, [], scopeRef);
73
+ await this.scopeResources.ready;
74
+ // Register UI resource templates if any tools have UI configs
75
+ // This enables resource capabilities to be advertised when tools have UI
76
+ const toolsWithUI = this.scopeTools.getTools(true).filter((t) => (0, ui_1.hasUIConfig)(t.metadata));
77
+ if (toolsWithUI.length > 0) {
78
+ // Register static widget template for OpenAI discovery (ui://widget/{toolName}.html)
79
+ this.scopeResources.registerDynamicResource(ui_1.StaticWidgetResourceTemplate);
80
+ this.logger.verbose(`Registered UI resource template for ${toolsWithUI.length} tool(s) with UI configs`);
81
+ // Pre-compile static widgets for tools with servingMode: 'static'
82
+ // This is done at server startup so that the static widget HTML is immediately
83
+ // available when OpenAI fetches it via resources/read (at tools/list time).
84
+ // The static widget reads data from the FrontMCP Bridge at runtime.
85
+ const staticModeTools = toolsWithUI.filter((t) => t.metadata.ui && t.metadata.ui.servingMode === 'static' && t.metadata.ui.template);
86
+ if (staticModeTools.length > 0) {
87
+ // Compile all static widgets in parallel
88
+ let staticCompiledCount = 0;
89
+ await Promise.all(staticModeTools.map(async (tool) => {
90
+ const uiConfig = tool.metadata.ui;
91
+ if (!uiConfig?.template) {
92
+ this.logger.warn(`Skipping static widget pre-compile for tool "${tool.metadata.name}" due to missing ui.template`);
93
+ return;
94
+ }
95
+ try {
96
+ await this.toolUIRegistry.compileStaticWidgetAsync({
97
+ toolName: tool.metadata.name,
98
+ template: uiConfig.template,
99
+ uiConfig,
100
+ });
101
+ staticCompiledCount++;
102
+ this.logger.verbose(`Compiled static widget for tool: ${tool.metadata.name}`);
103
+ }
104
+ catch (error) {
105
+ // Log error but don't fail server startup
106
+ const errorMessage = error instanceof Error ? error.message : String(error);
107
+ this.logger.error(`Failed to compile static widget for tool "${tool.metadata.name}": ${errorMessage}`);
108
+ }
109
+ }));
110
+ this.logger.info(`Pre-compiled ${staticCompiledCount}/${staticModeTools.length} static widget(s) for static mode tools`);
111
+ }
112
+ // Pre-compile lean widget shells for inline mode tools
113
+ // These are minimal HTML shells (no React/JS) that OpenAI caches at discovery
114
+ // The actual React widget comes in each tool response with embedded data
115
+ const inlineTools = toolsWithUI.filter((t) => t.metadata.ui &&
116
+ (t.metadata.ui.servingMode === 'inline' || !t.metadata.ui.servingMode) &&
117
+ t.metadata.ui.template);
118
+ if (inlineTools.length > 0) {
119
+ let inlineCompiledCount = 0;
120
+ await Promise.all(inlineTools.map(async (tool) => {
121
+ const uiConfig = tool.metadata.ui;
122
+ if (!uiConfig) {
123
+ this.logger.warn(`Skipping lean widget pre-compile for tool "${tool.metadata.name}" due to missing ui config`);
124
+ return;
125
+ }
126
+ try {
127
+ await this.toolUIRegistry.compileLeanWidgetAsync({
128
+ toolName: tool.metadata.name,
129
+ uiConfig,
130
+ });
131
+ inlineCompiledCount++;
132
+ this.logger.verbose(`Compiled lean widget shell for tool: ${tool.metadata.name}`);
133
+ }
134
+ catch (error) {
135
+ const errorMessage = error instanceof Error ? error.message : String(error);
136
+ this.logger.error(`Failed to compile lean widget shell for tool "${tool.metadata.name}": ${errorMessage}`);
137
+ }
138
+ }));
139
+ this.logger.info(`Pre-compiled ${inlineCompiledCount}/${inlineTools.length} lean widget shell(s) for inline mode tools`);
140
+ }
141
+ // Pre-compile hybrid widget shells for hybrid mode tools
142
+ // These contain React runtime + Bridge + dynamic renderer, but NO component code
143
+ // The component code is delivered per-request in _meta['ui/component']
144
+ const hybridTools = toolsWithUI.filter((t) => t.metadata.ui && t.metadata.ui.servingMode === 'hybrid' && t.metadata.ui.template);
145
+ if (hybridTools.length > 0) {
146
+ let hybridCompiledCount = 0;
147
+ await Promise.all(hybridTools.map(async (tool) => {
148
+ const uiConfig = tool.metadata.ui;
149
+ if (!uiConfig) {
150
+ this.logger.warn(`Skipping hybrid widget pre-compile for tool "${tool.metadata.name}" due to missing ui config`);
151
+ return;
152
+ }
153
+ try {
154
+ await this.toolUIRegistry.compileHybridWidgetAsync({
155
+ toolName: tool.metadata.name,
156
+ uiConfig,
157
+ });
158
+ hybridCompiledCount++;
159
+ this.logger.verbose(`Compiled hybrid widget shell for tool: ${tool.metadata.name}`);
160
+ }
161
+ catch (error) {
162
+ const errorMessage = error instanceof Error ? error.message : String(error);
163
+ this.logger.error(`Failed to compile hybrid widget shell for tool "${tool.metadata.name}": ${errorMessage}`);
164
+ }
165
+ }));
166
+ this.logger.info(`Pre-compiled ${hybridCompiledCount}/${hybridTools.length} hybrid widget shell(s) for hybrid mode tools`);
167
+ }
168
+ }
169
+ this.scopePrompts = new prompt_registry_1.default(this.scopeProviders, [], scopeRef);
170
+ await this.scopePrompts.ready;
171
+ // Initialize notification service after all registries are ready
172
+ this.notificationService = new notification_1.NotificationService(this);
173
+ await this.notificationService.initialize();
174
+ // Register logging and completion flows
175
+ await this.scopeFlows.registryFlows([set_level_flow_1.default, complete_flow_1.default]);
63
176
  await this.auth.ready;
64
177
  this.logger.info('Initializing multi-app scope', this.metadata);
65
178
  if (!this.metadata.auth) {
66
- // log large warning about using FrontMcp without authentication
179
+ // log a large warning about using FrontMcp without authentication
67
180
  this.logger.warn(`\n\n*******************************\n WARNING: FrontMcp is running without authentication. \n This is a security risk and should only be used in development environments. \n*******************************\n\n`);
68
181
  }
69
182
  }
70
183
  get defaultScopeProviders() {
71
- return [{
184
+ return [
185
+ {
72
186
  scope: common_1.ProviderScope.GLOBAL,
73
187
  name: 'ScopeEntry',
74
188
  provide: common_1.ScopeEntry,
75
189
  useValue: this,
76
- }, {
190
+ },
191
+ {
77
192
  scope: common_1.ProviderScope.GLOBAL,
78
193
  name: 'Scope',
79
194
  provide: Scope,
80
195
  useValue: this,
81
- }, {
196
+ },
197
+ {
82
198
  scope: common_1.ProviderScope.GLOBAL,
83
199
  name: 'FrontMcpLogger',
84
200
  provide: common_1.FrontMcpLogger,
85
201
  useValue: this.logger,
86
- }, {
202
+ },
203
+ {
87
204
  scope: common_1.ProviderScope.SESSION,
88
205
  name: 'SessionProvider',
89
206
  provide: common_1.SessionProvider,
90
207
  useClass: common_1.SessionProvider,
91
- }];
208
+ },
209
+ ];
92
210
  }
93
211
  get auth() {
94
212
  return this.scopeAuth.getPrimary();
@@ -108,6 +226,18 @@ class Scope extends common_1.ScopeEntry {
108
226
  get tools() {
109
227
  return this.scopeTools;
110
228
  }
229
+ get toolUI() {
230
+ return this.toolUIRegistry;
231
+ }
232
+ get resources() {
233
+ return this.scopeResources;
234
+ }
235
+ get prompts() {
236
+ return this.scopePrompts;
237
+ }
238
+ get notifications() {
239
+ return this.notificationService;
240
+ }
111
241
  registryFlows(...flows) {
112
242
  return this.scopeFlows.registryFlows(flows);
113
243
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scope.instance.js","sourceRoot":"","sources":["../../../src/scope/scope.instance.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata';\nimport {\n FlowInputOf,\n FlowName, FlowOutputOf,\n FlowType,\n FrontMcpAuth,\n FrontMcpLogger,\n FrontMcpServer, HookRegistryInterface,\n ProviderScope,\n ScopeEntry,\n ScopeRecord,\n SessionProvider,\n Token,\n Type,\n} from '../common';\nimport AppRegistry from '../app/app.registry';\nimport ProviderRegistry from '../provider/provider.registry';\nimport {AuthRegistry} from '../auth/auth.registry';\nimport FlowRegistry from '../flows/flow.registry';\nimport HttpRequestFlow from './flows/http.request.flow';\nimport {TransportService} from '../transport/transport.registry';\nimport ToolRegistry from '../tool/tool.registry';\nimport HookRegistry from \"../hooks/hook.registry\";\n\n\nexport class Scope extends ScopeEntry {\n readonly id: string;\n private readonly globalProviders: ProviderRegistry;\n readonly logger: FrontMcpLogger;\n\n private readonly scopeProviders: ProviderRegistry;\n private scopeAuth: AuthRegistry;\n private scopeFlows: FlowRegistry;\n private scopeApps: AppRegistry;\n private scopeHooks: HookRegistry;\n private scopeTools: ToolRegistry;\n\n transportService: TransportService; // TODO: migrate transport service to transport.registry\n readonly entryPath: string;\n readonly routeBase: string;\n readonly orchestrated: boolean = false;\n\n readonly server: FrontMcpServer;\n\n constructor(rec: ScopeRecord, globalProviders: ProviderRegistry) {\n super(rec, rec.provide);\n this.id = rec.metadata.id;\n this.logger = globalProviders.get(FrontMcpLogger).child('FrontMcp.MultiAppScope');\n this.globalProviders = globalProviders;\n this.server = this.globalProviders.get(FrontMcpServer);\n this.entryPath = rec.metadata.http?.entryPath ?? '';\n\n if(rec.kind === 'SPLIT_BY_APP'){\n this.routeBase = `/${rec.metadata.id}`\n }else {\n this.routeBase = '';\n }\n\n this.scopeProviders = new ProviderRegistry(this.defaultScopeProviders, globalProviders);\n this.ready = this.initialize();\n }\n\n protected async initialize(): Promise<void> {\n await this.scopeProviders.ready;\n\n this.scopeHooks = new HookRegistry(this.scopeProviders, []);\n await this.scopeHooks.ready;\n\n this.scopeFlows = new FlowRegistry(this.scopeProviders, [HttpRequestFlow]);\n await this.scopeFlows.ready;\n\n this.transportService = new TransportService(this);\n\n this.scopeAuth = new AuthRegistry(this, this.scopeProviders, [], {\n kind: 'scope',\n id: this.id,\n ref: ScopeEntry,\n }, this.metadata.auth);\n await this.scopeAuth.ready\n\n this.scopeApps = new AppRegistry(this.scopeProviders, this.metadata.apps);\n await this.scopeApps.ready;\n\n this.scopeTools = new ToolRegistry(this.scopeProviders, [], {kind: 'scope', id: this.id, ref: Scope});\n await this.scopeTools.ready;\n\n\n await this.auth.ready;\n this.logger.info('Initializing multi-app scope', this.metadata);\n if (!this.metadata.auth) {\n // log large warning about using FrontMcp without authentication\n this.logger.warn(`\\n\\n*******************************\\n WARNING: FrontMcp is running without authentication. \\n This is a security risk and should only be used in development environments. \\n*******************************\\n\\n`);\n }\n }\n\n private get defaultScopeProviders() {\n return [{\n scope: ProviderScope.GLOBAL,\n name: 'ScopeEntry',\n provide: ScopeEntry,\n useValue: this,\n }, {\n scope: ProviderScope.GLOBAL,\n name: 'Scope',\n provide: Scope,\n useValue: this,\n }, {\n scope: ProviderScope.GLOBAL,\n name: 'FrontMcpLogger',\n provide: FrontMcpLogger,\n useValue: this.logger,\n }, {\n scope: ProviderScope.SESSION,\n name: 'SessionProvider',\n provide: SessionProvider,\n useClass: SessionProvider,\n }];\n }\n\n get auth(): FrontMcpAuth {\n return this.scopeAuth.getPrimary();\n }\n\n get hooks(): HookRegistryInterface {\n return this.scopeHooks;\n }\n\n get authProviders(): AuthRegistry {\n return this.scopeAuth;\n }\n\n get providers() {\n return this.scopeProviders;\n }\n\n get apps(): AppRegistry {\n return this.scopeApps;\n }\n\n get tools(): ToolRegistry {\n return this.scopeTools;\n }\n\n\n registryFlows(...flows: FlowType[]) {\n return this.scopeFlows.registryFlows(flows);\n }\n\n runFlow<Name extends FlowName>(name: Name, input: FlowInputOf<Name>, deps?: Map<Token, Type>): Promise<FlowOutputOf<Name> | undefined> {\n return this.scopeFlows.runFlow(name, input, deps);\n }\n\n async runFlowForOutput<Name extends FlowName>(name: Name, input: FlowInputOf<Name>, deps?: Map<Token, Type>): Promise<FlowOutputOf<Name>> {\n const result = await this.scopeFlows.runFlow(name, input, deps);\n if (result) {\n return result;\n }\n throw new Error(`flow exist without output`);\n }\n}\n"]}
1
+ {"version":3,"file":"scope.instance.js","sourceRoot":"","sources":["../../../src/scope/scope.instance.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata';\nimport {\n EntryOwnerRef,\n FlowInputOf,\n FlowName,\n FlowOutputOf,\n FlowType,\n FrontMcpAuth,\n FrontMcpLogger,\n FrontMcpServer,\n HookRegistryInterface,\n ProviderScope,\n ScopeEntry,\n ScopeRecord,\n SessionProvider,\n Token,\n Type,\n} from '../common';\nimport AppRegistry from '../app/app.registry';\nimport ProviderRegistry from '../provider/provider.registry';\nimport { AuthRegistry } from '../auth/auth.registry';\nimport FlowRegistry from '../flows/flow.registry';\nimport HttpRequestFlow from './flows/http.request.flow';\nimport { TransportService } from '../transport/transport.registry';\nimport ToolRegistry from '../tool/tool.registry';\nimport ResourceRegistry from '../resource/resource.registry';\nimport HookRegistry from '../hooks/hook.registry';\nimport PromptRegistry from '../prompt/prompt.registry';\nimport { NotificationService } from '../notification';\nimport SetLevelFlow from '../logging/flows/set-level.flow';\nimport CompleteFlow from '../completion/flows/complete.flow';\nimport { ToolUIRegistry, StaticWidgetResourceTemplate, hasUIConfig } from '../tool/ui';\n\nexport class Scope extends ScopeEntry {\n readonly id: string;\n private readonly globalProviders: ProviderRegistry;\n readonly logger: FrontMcpLogger;\n\n private readonly scopeProviders: ProviderRegistry;\n private scopeAuth: AuthRegistry;\n private scopeFlows: FlowRegistry;\n private scopeApps: AppRegistry;\n private scopeHooks: HookRegistry;\n private scopeTools: ToolRegistry;\n private scopeResources: ResourceRegistry;\n private scopePrompts: PromptRegistry;\n\n transportService: TransportService; // TODO: migrate transport service to transport.registry\n notificationService: NotificationService;\n private toolUIRegistry: ToolUIRegistry;\n readonly entryPath: string;\n readonly routeBase: string;\n readonly orchestrated: boolean = false;\n\n readonly server: FrontMcpServer;\n\n constructor(rec: ScopeRecord, globalProviders: ProviderRegistry) {\n super(rec, rec.provide);\n this.id = rec.metadata.id;\n this.logger = globalProviders.get(FrontMcpLogger).child('FrontMcp.MultiAppScope');\n this.globalProviders = globalProviders;\n this.server = this.globalProviders.get(FrontMcpServer);\n this.entryPath = rec.metadata.http?.entryPath ?? '';\n\n if (rec.kind === 'SPLIT_BY_APP') {\n this.routeBase = `/${rec.metadata.id}`;\n } else {\n this.routeBase = '';\n }\n\n this.scopeProviders = new ProviderRegistry(this.defaultScopeProviders, globalProviders);\n this.ready = this.initialize();\n }\n\n protected async initialize(): Promise<void> {\n await this.scopeProviders.ready;\n\n const scopeRef: EntryOwnerRef = { kind: 'scope', id: this.id, ref: Scope };\n const scopeProviders = this.scopeProviders;\n\n this.scopeHooks = new HookRegistry(scopeProviders, []);\n await this.scopeHooks.ready;\n\n this.scopeFlows = new FlowRegistry(scopeProviders, [HttpRequestFlow]);\n await this.scopeFlows.ready;\n\n this.transportService = new TransportService(this);\n\n this.scopeAuth = new AuthRegistry(this, scopeProviders, [], scopeRef, this.metadata.auth);\n await this.scopeAuth.ready;\n\n this.scopeApps = new AppRegistry(this.scopeProviders, this.metadata.apps, scopeRef);\n await this.scopeApps.ready;\n\n this.scopeTools = new ToolRegistry(this.scopeProviders, [], scopeRef);\n await this.scopeTools.ready;\n\n this.toolUIRegistry = new ToolUIRegistry();\n\n this.scopeResources = new ResourceRegistry(this.scopeProviders, [], scopeRef);\n await this.scopeResources.ready;\n\n // Register UI resource templates if any tools have UI configs\n // This enables resource capabilities to be advertised when tools have UI\n const toolsWithUI = this.scopeTools.getTools(true).filter((t) => hasUIConfig(t.metadata));\n if (toolsWithUI.length > 0) {\n // Register static widget template for OpenAI discovery (ui://widget/{toolName}.html)\n this.scopeResources.registerDynamicResource(StaticWidgetResourceTemplate);\n this.logger.verbose(`Registered UI resource template for ${toolsWithUI.length} tool(s) with UI configs`);\n\n // Pre-compile static widgets for tools with servingMode: 'static'\n // This is done at server startup so that the static widget HTML is immediately\n // available when OpenAI fetches it via resources/read (at tools/list time).\n // The static widget reads data from the FrontMCP Bridge at runtime.\n const staticModeTools = toolsWithUI.filter(\n (t) => t.metadata.ui && t.metadata.ui.servingMode === 'static' && t.metadata.ui.template,\n );\n\n if (staticModeTools.length > 0) {\n // Compile all static widgets in parallel\n let staticCompiledCount = 0;\n await Promise.all(\n staticModeTools.map(async (tool) => {\n const uiConfig = tool.metadata.ui;\n if (!uiConfig?.template) {\n this.logger.warn(\n `Skipping static widget pre-compile for tool \"${tool.metadata.name}\" due to missing ui.template`,\n );\n return;\n }\n try {\n await this.toolUIRegistry.compileStaticWidgetAsync({\n toolName: tool.metadata.name,\n template: uiConfig.template,\n uiConfig,\n });\n staticCompiledCount++;\n this.logger.verbose(`Compiled static widget for tool: ${tool.metadata.name}`);\n } catch (error) {\n // Log error but don't fail server startup\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.logger.error(`Failed to compile static widget for tool \"${tool.metadata.name}\": ${errorMessage}`);\n }\n }),\n );\n this.logger.info(\n `Pre-compiled ${staticCompiledCount}/${staticModeTools.length} static widget(s) for static mode tools`,\n );\n }\n\n // Pre-compile lean widget shells for inline mode tools\n // These are minimal HTML shells (no React/JS) that OpenAI caches at discovery\n // The actual React widget comes in each tool response with embedded data\n const inlineTools = toolsWithUI.filter(\n (t) =>\n t.metadata.ui &&\n (t.metadata.ui.servingMode === 'inline' || !t.metadata.ui.servingMode) &&\n t.metadata.ui.template,\n );\n\n if (inlineTools.length > 0) {\n let inlineCompiledCount = 0;\n await Promise.all(\n inlineTools.map(async (tool) => {\n const uiConfig = tool.metadata.ui;\n if (!uiConfig) {\n this.logger.warn(\n `Skipping lean widget pre-compile for tool \"${tool.metadata.name}\" due to missing ui config`,\n );\n return;\n }\n try {\n await this.toolUIRegistry.compileLeanWidgetAsync({\n toolName: tool.metadata.name,\n uiConfig,\n });\n inlineCompiledCount++;\n this.logger.verbose(`Compiled lean widget shell for tool: ${tool.metadata.name}`);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.logger.error(\n `Failed to compile lean widget shell for tool \"${tool.metadata.name}\": ${errorMessage}`,\n );\n }\n }),\n );\n this.logger.info(\n `Pre-compiled ${inlineCompiledCount}/${inlineTools.length} lean widget shell(s) for inline mode tools`,\n );\n }\n\n // Pre-compile hybrid widget shells for hybrid mode tools\n // These contain React runtime + Bridge + dynamic renderer, but NO component code\n // The component code is delivered per-request in _meta['ui/component']\n const hybridTools = toolsWithUI.filter(\n (t) => t.metadata.ui && t.metadata.ui.servingMode === 'hybrid' && t.metadata.ui.template,\n );\n\n if (hybridTools.length > 0) {\n let hybridCompiledCount = 0;\n await Promise.all(\n hybridTools.map(async (tool) => {\n const uiConfig = tool.metadata.ui;\n if (!uiConfig) {\n this.logger.warn(\n `Skipping hybrid widget pre-compile for tool \"${tool.metadata.name}\" due to missing ui config`,\n );\n return;\n }\n try {\n await this.toolUIRegistry.compileHybridWidgetAsync({\n toolName: tool.metadata.name,\n uiConfig,\n });\n hybridCompiledCount++;\n this.logger.verbose(`Compiled hybrid widget shell for tool: ${tool.metadata.name}`);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.logger.error(\n `Failed to compile hybrid widget shell for tool \"${tool.metadata.name}\": ${errorMessage}`,\n );\n }\n }),\n );\n this.logger.info(\n `Pre-compiled ${hybridCompiledCount}/${hybridTools.length} hybrid widget shell(s) for hybrid mode tools`,\n );\n }\n }\n\n this.scopePrompts = new PromptRegistry(this.scopeProviders, [], scopeRef);\n await this.scopePrompts.ready;\n\n // Initialize notification service after all registries are ready\n this.notificationService = new NotificationService(this);\n await this.notificationService.initialize();\n\n // Register logging and completion flows\n await this.scopeFlows.registryFlows([SetLevelFlow, CompleteFlow]);\n\n await this.auth.ready;\n this.logger.info('Initializing multi-app scope', this.metadata);\n if (!this.metadata.auth) {\n // log a large warning about using FrontMcp without authentication\n this.logger.warn(\n `\\n\\n*******************************\\n WARNING: FrontMcp is running without authentication. \\n This is a security risk and should only be used in development environments. \\n*******************************\\n\\n`,\n );\n }\n }\n\n private get defaultScopeProviders() {\n return [\n {\n scope: ProviderScope.GLOBAL,\n name: 'ScopeEntry',\n provide: ScopeEntry,\n useValue: this,\n },\n {\n scope: ProviderScope.GLOBAL,\n name: 'Scope',\n provide: Scope,\n useValue: this,\n },\n {\n scope: ProviderScope.GLOBAL,\n name: 'FrontMcpLogger',\n provide: FrontMcpLogger,\n useValue: this.logger,\n },\n {\n scope: ProviderScope.SESSION,\n name: 'SessionProvider',\n provide: SessionProvider,\n useClass: SessionProvider,\n },\n ];\n }\n\n get auth(): FrontMcpAuth {\n return this.scopeAuth.getPrimary();\n }\n\n get hooks(): HookRegistryInterface {\n return this.scopeHooks;\n }\n\n get authProviders(): AuthRegistry {\n return this.scopeAuth;\n }\n\n get providers() {\n return this.scopeProviders;\n }\n\n get apps(): AppRegistry {\n return this.scopeApps;\n }\n\n get tools(): ToolRegistry {\n return this.scopeTools;\n }\n\n get toolUI(): ToolUIRegistry {\n return this.toolUIRegistry;\n }\n\n get resources(): ResourceRegistry {\n return this.scopeResources;\n }\n\n get prompts(): PromptRegistry {\n return this.scopePrompts;\n }\n\n get notifications(): NotificationService {\n return this.notificationService;\n }\n\n registryFlows(...flows: FlowType[]) {\n return this.scopeFlows.registryFlows(flows);\n }\n\n runFlow<Name extends FlowName>(\n name: Name,\n input: FlowInputOf<Name>,\n deps?: Map<Token, Type>,\n ): Promise<FlowOutputOf<Name> | undefined> {\n return this.scopeFlows.runFlow(name, input, deps);\n }\n\n async runFlowForOutput<Name extends FlowName>(\n name: Name,\n input: FlowInputOf<Name>,\n deps?: Map<Token, Type>,\n ): Promise<FlowOutputOf<Name>> {\n const result = await this.scopeFlows.runFlow(name, input, deps);\n if (result) {\n return result;\n }\n throw new Error(`flow exist without output`);\n }\n}\n"]}