@frontmcp/sdk 0.4.0 → 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 +111 -10
  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
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  <div align="center">
2
2
 
3
3
  <picture>
4
- <source width="400" media="(prefers-color-scheme: dark)" srcset="docs/assets/logo/frontmcp.dark.svg">
5
- <source width="400" media="(prefers-color-scheme: light)" srcset="docs/assets/logo/frontmcp.light.svg">
6
- <img width="400" alt="FrontMCP Logo" src="docs/assets/logo/frontmcp.light.svg">
4
+ <source width="400" media="(prefers-color-scheme: dark)" srcset="docs/live/assets/logo/frontmcp.dark.svg">
5
+ <source width="400" media="(prefers-color-scheme: light)" srcset="docs/live/assets/logo/frontmcp.light.svg">
6
+ <img width="400" alt="FrontMCP Logo" src="docs/live/assets/logo/frontmcp.light.svg">
7
7
  </picture>
8
8
  <hr>
9
9
 
@@ -84,7 +84,13 @@ export default class Server {}
84
84
 
85
85
  ## Installation
86
86
 
87
- **Prereqs:** Node.js ≥ 22, npm ≥ 10. ([Installation - FrontMCP][1])
87
+ **Prerequisites:**
88
+
89
+ - **Node.js**: Minimum version 22 (LTS) | Recommended version 24 (Active LTS)
90
+ - _This framework is developed and tested on Node.js 24_
91
+ - **npm**: ≥ 10 (or pnpm/yarn equivalent)
92
+
93
+ For detailed setup instructions, see the [Installation Guide][1].
88
94
 
89
95
  ### Option A — New project (recommended)
90
96
 
@@ -98,7 +104,7 @@ installs required dev deps. ([Installation - FrontMCP][1])
98
104
  ### Option B — Add to an existing project
99
105
 
100
106
  ```bash
101
- npm i -D frontmcp @types/node@^20
107
+ npm i -D frontmcp @types/node@^22
102
108
  npx frontmcp init
103
109
  ```
104
110
 
@@ -295,31 +301,37 @@ FrontMCP][3])
295
301
 
296
302
  ### Servers
297
303
 
298
- `@FrontMcp({...})` defines **info**, **apps**, **http**, **logging**, **session**, and optional **auth**. Keep it
299
- minimal or scale up with providers and plugins. ([The FrontMCP Server - FrontMCP][5])
304
+ The FrontMCP server is defined with a single decorator: `@FrontMcp({...})`. It configures **info**, **apps**, **http**,
305
+ **logging**, **session**, and optional **auth**. Start minimal and scale up with providers and plugins.
306
+ ([The FrontMCP Server - FrontMCP][5])
300
307
 
301
308
  ### Apps
302
309
 
303
- Use `@App` to group **tools**, **resources**, **prompts**, plus **providers**, **adapters**, and **plugins**. With
304
- `splitByApp: true`, each app gets its own scope/base path and, if needed, its own auth surface. ([Apps - FrontMCP][6])
310
+ Apps are the **organizational units** for capabilities. Each app groups related **tools**, **resources**, and **prompts**
311
+ into a cohesive domain, along with **providers**, **adapters**, and **plugins**. With `splitByApp: true`, apps get
312
+ isolated scopes and auth surfaces. ([Apps - FrontMCP][6])
305
313
 
306
314
  ### Tools
307
315
 
308
- Typed actions with schemas (class `@Tool` or inline `tool({...})(handler)`). Use the Zod‑field **shape** style for
309
- `inputSchema`. ([Tools - FrontMCP][4])
316
+ Tools are **typed actions** that execute operations with side effects. They're the primary way to enable an AI model to
317
+ interact with external systems—calling APIs, modifying data, performing calculations, or triggering workflows. Use the
318
+ class `@Tool` decorator or inline `tool({...})(handler)` with Zod schemas. ([Tools - FrontMCP][4])
310
319
 
311
320
  ### Resources
312
321
 
313
- Readable data by URI or RFC6570 template (see `@Resource` / `@ResourceTemplate`). ([Resources - FrontMCP][7])
322
+ Resources expose **readable data** to an AI model's context. Unlike tools that execute actions with side effects,
323
+ resources are designed for read-only data retrieval—configuration files, user profiles, documents, or any content
324
+ the model needs to reference. ([Resources - FrontMCP][7])
314
325
 
315
326
  ### Prompts
316
327
 
317
- Reusable templates returning MCP `GetPromptResult`, with typed arguments. ([Prompts - FrontMCP][8])
328
+ Prompts provide **reusable message templates** for AI interactions. They return MCP `GetPromptResult` with typed
329
+ arguments, enabling consistent conversation patterns. ([Prompts - FrontMCP][8])
318
330
 
319
331
  ### Providers / Adapters / Plugins
320
332
 
321
- Inject shared services, generate tools from OpenAPI, and add cross‑cutting behavior like caching and hooks. ([Add
322
- OpenAPI Adapter - FrontMCP][9])
333
+ Inject shared services, generate tools from OpenAPI specs, and add cross‑cutting behavior like caching and hooks.
334
+ ([Add OpenAPI Adapter - FrontMCP][9])
323
335
 
324
336
  ---
325
337
 
@@ -442,7 +454,7 @@ See [LICENSE](./LICENSE).
442
454
  [7]: https://docs.agentfront.dev/docs/servers/resources 'Resources - FrontMCP'
443
455
  [8]: https://docs.agentfront.dev/docs/servers/prompts 'Prompts - FrontMCP'
444
456
  [9]: https://docs.agentfront.dev/docs/guides/add-openapi-adapter 'Add OpenAPI Adapter - FrontMCP'
445
- [10]: https://docs.agentfront.dev/docs/servers/authentication/overview 'Authentication - FrontMCP'
446
- [11]: https://docs.agentfront.dev/docs/servers/authentication/remote 'Remote OAuth - FrontMCP'
447
- [12]: https://docs.agentfront.dev/docs/servers/authentication/local 'Local OAuth - FrontMCP'
457
+ [10]: https://docs.agentfront.dev/docs/authentication/overview 'Authentication - FrontMCP'
458
+ [11]: https://docs.agentfront.dev/docs/authentication/remote 'Remote OAuth - FrontMCP'
459
+ [12]: https://docs.agentfront.dev/docs/authentication/local 'Local OAuth - FrontMCP'
448
460
  [13]: https://docs.agentfront.dev/docs/deployment/production-build 'Production Build - FrontMCP'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontmcp/sdk",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "FrontMCP SDK",
5
5
  "author": "AgentFront <info@agentfront.dev>",
6
6
  "homepage": "https://docs.agentfront.dev",
@@ -31,21 +31,36 @@
31
31
  "types": "./src/index.d.ts",
32
32
  "import": "./src/index.js",
33
33
  "default": "./src/index.js"
34
+ },
35
+ "./mcp-apps": {
36
+ "types": "./src/mcp-apps/index.d.ts",
37
+ "import": "./src/mcp-apps/index.js",
38
+ "default": "./src/mcp-apps/index.js"
34
39
  }
35
40
  },
36
41
  "peerDependencies": {
37
- "zod": "^3.25.76"
42
+ "zod": "^4.0.0",
43
+ "react": "^18.0.0 || ^19.0.0",
44
+ "react-dom": "^18.0.0 || ^19.0.0"
45
+ },
46
+ "peerDependenciesMeta": {
47
+ "react": {
48
+ "optional": true
49
+ },
50
+ "react-dom": {
51
+ "optional": true
52
+ }
38
53
  },
39
54
  "dependencies": {
40
- "@modelcontextprotocol/sdk": "^1.22.0",
55
+ "@frontmcp/ui": "0.5.0",
56
+ "@modelcontextprotocol/sdk": "1.23.0",
41
57
  "axios": "^1.6.0",
42
58
  "ioredis": "^5.8.0",
43
59
  "jose": "^6.1.0",
44
60
  "openapi-mcp-generator": "^3.2.0",
45
61
  "reflect-metadata": "^0.2.2",
46
62
  "rxjs": "^7.8.0",
47
- "json-schema-to-zod-v3": "1.0.0",
48
- "zod-to-json-schema": "^3.25.0",
63
+ "vectoriadb": "1.0.0",
49
64
  "tslib": "^2.3.0"
50
65
  },
51
66
  "devDependencies": {
@@ -1,9 +1,10 @@
1
1
  import 'reflect-metadata';
2
- import { AppType, AppEntry, AppRecord } from '../common';
2
+ import { AppType, AppEntry, AppRecord, EntryOwnerRef } from '../common';
3
3
  import ProviderRegistry from '../provider/provider.registry';
4
4
  import { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';
5
5
  export default class AppRegistry extends RegistryAbstract<AppEntry, AppRecord, AppType[]> {
6
- constructor(globalProviders: ProviderRegistry, list: AppType[]);
6
+ private readonly owner;
7
+ constructor(globalProviders: ProviderRegistry, list: AppType[], owner: EntryOwnerRef);
7
8
  protected buildMap(list: AppType[]): RegistryBuildMapResult<AppRecord>;
8
9
  protected buildGraph(): void;
9
10
  /** Instantiate adapters, run fetch/transform, and populate registries. */
@@ -7,8 +7,10 @@ const regsitry_1 = require("../regsitry");
7
7
  const token_utils_1 = require("../utils/token.utils");
8
8
  const instances_1 = require("./instances");
9
9
  class AppRegistry extends regsitry_1.RegistryAbstract {
10
- constructor(globalProviders, list) {
10
+ owner;
11
+ constructor(globalProviders, list, owner) {
11
12
  super('AppRegistry', globalProviders, list);
13
+ this.owner = owner;
12
14
  }
13
15
  buildMap(list) {
14
16
  const tokens = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"app.registry.js","sourceRoot":"","sources":["../../../src/app/app.registry.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata';\nimport { AppType, Token, AppEntry, AppKind, AppRecord } from '../common';\nimport { appDiscoveryDeps, normalizeApp } from './app.utils';\nimport ProviderRegistry from '../provider/provider.registry';\nimport { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';\nimport { tokenName } from '../utils/token.utils';\nimport { AppLocalInstance, AppRemoteInstance } from './instances';\n\nexport default class AppRegistry extends RegistryAbstract<AppEntry, AppRecord, AppType[]> {\n\n constructor(\n globalProviders: ProviderRegistry,\n list: AppType[],\n ) {\n super('AppRegistry', globalProviders, list);\n }\n\n\n protected buildMap(list: AppType[]): RegistryBuildMapResult<AppRecord> {\n const tokens = new Set<Token>();\n const defs = new Map<Token, AppRecord>();\n const graph = new Map<Token, Set<Token>>();\n for (const raw of list) {\n const rec = normalizeApp(raw);\n const provide = rec.provide;\n tokens.add(provide);\n defs.set(provide, rec);\n graph.set(provide, new Set());\n }\n return { tokens, defs, graph };\n }\n\n protected buildGraph() {\n for (const token of this.tokens) {\n const rec = this.defs.get(token)!;\n const deps = appDiscoveryDeps(rec);\n for (const d of deps) {\n if (!this.providers.get(d)) {\n throw new Error(`App ${tokenName(token)} depends on ${tokenName(d)}, which is not registered.`);\n }\n this.graph.get(token)!.add(d);\n }\n }\n }\n\n /** Instantiate adapters, run fetch/transform, and populate registries. */\n protected async initialize(): Promise<void> {\n const readyArr: Promise<void>[] = [];\n for (const token of this.tokens) {\n const rec = this.defs.get(token)!;\n\n let app: AppEntry;\n if (rec.kind === AppKind.LOCAL_CLASS) {\n app = new AppLocalInstance(rec, this.providers);\n } else if (rec.kind === AppKind.REMOTE_VALUE) {\n app = new AppRemoteInstance(rec, this.providers);\n } else {\n // TODO: use specific error class\n throw Error('Invalid adapter kind');\n }\n\n this.instances.set(token, app);\n readyArr.push(app.ready);\n }\n await Promise.all(readyArr);\n }\n\n\n getApps(): AppEntry[] {\n return [...this.instances.values()];\n }\n}\n"]}
1
+ {"version":3,"file":"app.registry.js","sourceRoot":"","sources":["../../../src/app/app.registry.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata';\nimport { AppType, Token, AppEntry, AppKind, AppRecord, EntryOwnerRef } from '../common';\nimport { appDiscoveryDeps, normalizeApp } from './app.utils';\nimport ProviderRegistry from '../provider/provider.registry';\nimport { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';\nimport { tokenName } from '../utils/token.utils';\nimport { AppLocalInstance, AppRemoteInstance } from './instances';\n\nexport default class AppRegistry extends RegistryAbstract<AppEntry, AppRecord, AppType[]> {\n private readonly owner: EntryOwnerRef;\n\n constructor(globalProviders: ProviderRegistry, list: AppType[], owner: EntryOwnerRef) {\n super('AppRegistry', globalProviders, list);\n this.owner = owner;\n }\n\n protected buildMap(list: AppType[]): RegistryBuildMapResult<AppRecord> {\n const tokens = new Set<Token>();\n const defs = new Map<Token, AppRecord>();\n const graph = new Map<Token, Set<Token>>();\n for (const raw of list) {\n const rec = normalizeApp(raw);\n const provide = rec.provide;\n tokens.add(provide);\n defs.set(provide, rec);\n graph.set(provide, new Set());\n }\n return { tokens, defs, graph };\n }\n\n protected buildGraph() {\n for (const token of this.tokens) {\n const rec = this.defs.get(token)!;\n const deps = appDiscoveryDeps(rec);\n for (const d of deps) {\n if (!this.providers.get(d)) {\n throw new Error(`App ${tokenName(token)} depends on ${tokenName(d)}, which is not registered.`);\n }\n this.graph.get(token)!.add(d);\n }\n }\n }\n\n /** Instantiate adapters, run fetch/transform, and populate registries. */\n protected async initialize(): Promise<void> {\n const readyArr: Promise<void>[] = [];\n for (const token of this.tokens) {\n const rec = this.defs.get(token)!;\n\n let app: AppEntry;\n if (rec.kind === AppKind.LOCAL_CLASS) {\n app = new AppLocalInstance(rec, this.providers);\n } else if (rec.kind === AppKind.REMOTE_VALUE) {\n app = new AppRemoteInstance(rec, this.providers);\n } else {\n // TODO: use specific error class\n throw Error('Invalid adapter kind');\n }\n\n this.instances.set(token, app);\n readyArr.push(app.ready);\n }\n await Promise.all(readyArr);\n }\n\n getApps(): AppEntry[] {\n return [...this.instances.values()];\n }\n}\n"]}
@@ -40,8 +40,8 @@ class AppLocalInstance extends common_1.AppEntry {
40
40
  this.appAdapters = new adapter_regsitry_1.default(this.appProviders, this.metadata.adapters ?? []);
41
41
  await this.appAdapters.ready;
42
42
  this.appTools = new tool_registry_1.default(this.appProviders, this.metadata.tools ?? [], appOwner);
43
- this.appResources = new resource_registry_1.default(this.appProviders, this.metadata.resources ?? []);
44
- this.appPrompts = new prompt_registry_1.default(this.appProviders, this.metadata.prompts ?? []);
43
+ this.appResources = new resource_registry_1.default(this.appProviders, this.metadata.resources ?? [], appOwner);
44
+ this.appPrompts = new prompt_registry_1.default(this.appProviders, this.metadata.prompts ?? [], appOwner);
45
45
  await Promise.all([this.appTools.ready, this.appResources.ready, this.appPrompts.ready]);
46
46
  }
47
47
  get providers() {
@@ -1 +1 @@
1
- {"version":3,"file":"app.local.instance.js","sourceRoot":"","sources":["../../../../src/app/instances/app.local.instance.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppEntry, AppRecord, LocalAppMetadata } from '../../common';\nimport { idFromString } from '../../utils/string.utils';\nimport ProviderRegistry from '../../provider/provider.registry';\nimport ToolRegistry from '../../tool/tool.registry';\nimport ResourceRegistry from '../../resource/resource.registry';\nimport PromptRegistry from '../../prompt/prompt.registry';\nimport AdapterRegistry from '../../adapter/adapter.regsitry';\nimport PluginRegistry from '../../plugin/plugin.registry';\n\nexport class AppLocalInstance extends AppEntry<LocalAppMetadata> {\n override readonly id: string;\n\n private scopeProviders: ProviderRegistry;\n private appProviders: ProviderRegistry;\n private appPlugins: PluginRegistry;\n private appAdapters: AdapterRegistry;\n private appTools: ToolRegistry;\n private appResources: ResourceRegistry;\n private appPrompts: PromptRegistry;\n\n constructor(record: AppRecord, scopeProviders: ProviderRegistry) {\n super(record);\n this.scopeProviders = scopeProviders;\n this.id = this.metadata.id ?? idFromString(this.metadata.name);\n this.ready = this.initialize();\n }\n\n protected async initialize() {\n this.appProviders = new ProviderRegistry(this.metadata.providers ?? [], this.scopeProviders);\n await this.appProviders.ready; // wait for providers to be ready\n // this.authProviders = new AuthRegistry(this.providers, this.metadata.authProviders ?? []);\n // await this.authProviders.ready; // wait for providers to be ready\n\n const appOwner = {\n kind: 'app' as const,\n id: this.id,\n ref: this.token,\n };\n\n this.appPlugins = new PluginRegistry(this.appProviders, this.metadata.plugins ?? [], appOwner);\n await this.appPlugins.ready; // wait for plugins and it's providers/adapters/tools/resource/prompts to be ready\n\n this.appAdapters = new AdapterRegistry(this.appProviders, this.metadata.adapters ?? []);\n await this.appAdapters.ready;\n\n this.appTools = new ToolRegistry(this.appProviders, this.metadata.tools ?? [], appOwner);\n this.appResources = new ResourceRegistry(this.appProviders, this.metadata.resources ?? []);\n this.appPrompts = new PromptRegistry(this.appProviders, this.metadata.prompts ?? []);\n\n await Promise.all([this.appTools.ready, this.appResources.ready, this.appPrompts.ready]);\n }\n\n get providers(): Readonly<ProviderRegistry> {\n return this.appProviders;\n }\n\n get adapters(): Readonly<AdapterRegistry> {\n return this.appAdapters;\n }\n\n get plugins(): Readonly<PluginRegistry> {\n return this.appPlugins;\n }\n\n get tools(): Readonly<ToolRegistry> {\n return this.appTools;\n }\n\n get resources(): Readonly<ResourceRegistry> {\n return this.appResources;\n }\n\n get prompts(): Readonly<PromptRegistry> {\n return this.appPrompts;\n }\n}\n"]}
1
+ {"version":3,"file":"app.local.instance.js","sourceRoot":"","sources":["../../../../src/app/instances/app.local.instance.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppEntry, AppRecord, LocalAppMetadata } from '../../common';\nimport { idFromString } from '../../utils/string.utils';\nimport ProviderRegistry from '../../provider/provider.registry';\nimport ToolRegistry from '../../tool/tool.registry';\nimport ResourceRegistry from '../../resource/resource.registry';\nimport PromptRegistry from '../../prompt/prompt.registry';\nimport AdapterRegistry from '../../adapter/adapter.regsitry';\nimport PluginRegistry from '../../plugin/plugin.registry';\n\nexport class AppLocalInstance extends AppEntry<LocalAppMetadata> {\n override readonly id: string;\n\n private scopeProviders: ProviderRegistry;\n private appProviders: ProviderRegistry;\n private appPlugins: PluginRegistry;\n private appAdapters: AdapterRegistry;\n private appTools: ToolRegistry;\n private appResources: ResourceRegistry;\n private appPrompts: PromptRegistry;\n\n constructor(record: AppRecord, scopeProviders: ProviderRegistry) {\n super(record);\n this.scopeProviders = scopeProviders;\n this.id = this.metadata.id ?? idFromString(this.metadata.name);\n this.ready = this.initialize();\n }\n\n protected async initialize() {\n this.appProviders = new ProviderRegistry(this.metadata.providers ?? [], this.scopeProviders);\n await this.appProviders.ready; // wait for providers to be ready\n // this.authProviders = new AuthRegistry(this.providers, this.metadata.authProviders ?? []);\n // await this.authProviders.ready; // wait for providers to be ready\n\n const appOwner = {\n kind: 'app' as const,\n id: this.id,\n ref: this.token,\n };\n\n this.appPlugins = new PluginRegistry(this.appProviders, this.metadata.plugins ?? [], appOwner);\n await this.appPlugins.ready; // wait for plugins and it's providers/adapters/tools/resource/prompts to be ready\n\n this.appAdapters = new AdapterRegistry(this.appProviders, this.metadata.adapters ?? []);\n await this.appAdapters.ready;\n\n this.appTools = new ToolRegistry(this.appProviders, this.metadata.tools ?? [], appOwner);\n this.appResources = new ResourceRegistry(this.appProviders, this.metadata.resources ?? [], appOwner);\n this.appPrompts = new PromptRegistry(this.appProviders, this.metadata.prompts ?? [], appOwner);\n\n await Promise.all([this.appTools.ready, this.appResources.ready, this.appPrompts.ready]);\n }\n\n get providers(): Readonly<ProviderRegistry> {\n return this.appProviders;\n }\n\n get adapters(): Readonly<AdapterRegistry> {\n return this.appAdapters;\n }\n\n get plugins(): Readonly<PluginRegistry> {\n return this.appPlugins;\n }\n\n get tools(): Readonly<ToolRegistry> {\n return this.appTools;\n }\n\n get resources(): Readonly<ResourceRegistry> {\n return this.appResources;\n }\n\n get prompts(): Readonly<PromptRegistry> {\n return this.appPrompts;\n }\n}\n"]}
@@ -1,10 +1,42 @@
1
1
  import 'reflect-metadata';
2
2
  import { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';
3
3
  import ProviderRegistry from '../provider/provider.registry';
4
- import { AuthOptions, FrontMcpAuth, AuthProviderType, AuthProviderEntry, AuthRegistryInterface, AuthProviderRecord, EntryOwnerRef, ScopeEntry } from '../common';
4
+ import { FrontMcpAuth, AuthProviderType, AuthProviderEntry, AuthRegistryInterface, AuthProviderRecord, EntryOwnerRef, ScopeEntry, AuthOptionsInput } from '../common';
5
+ import { AuthProviderDetectionResult } from './detection';
5
6
  export declare class AuthRegistry extends RegistryAbstract<AuthProviderEntry, AuthProviderRecord, AuthProviderType[]> implements AuthRegistryInterface {
6
7
  private readonly primary?;
7
- constructor(scope: ScopeEntry, providers: ProviderRegistry, metadata: AuthProviderType[], owner: EntryOwnerRef, primary?: AuthOptions);
8
+ private readonly parsedOptions;
9
+ private readonly logger;
10
+ private readonly owner;
11
+ /**
12
+ * Detection result for auth providers across the scope hierarchy
13
+ */
14
+ readonly detection: AuthProviderDetectionResult;
15
+ /**
16
+ * Whether this scope requires orchestrated mode
17
+ */
18
+ readonly requiresOrchestration: boolean;
19
+ constructor(scope: ScopeEntry, providers: ProviderRegistry, metadata: AuthProviderType[], owner: EntryOwnerRef, primaryInput?: AuthOptionsInput);
20
+ /**
21
+ * Extract AppAuthInfo from scope metadata
22
+ */
23
+ private extractAppAuthInfo;
24
+ /**
25
+ * Get app metadata from AppType (handles both class and value types)
26
+ */
27
+ private getAppMetadata;
28
+ /**
29
+ * Log detection results for debugging
30
+ */
31
+ private logDetectionResults;
32
+ /**
33
+ * Validate configuration and throw if invalid
34
+ */
35
+ private validateConfiguration;
36
+ /**
37
+ * Create the appropriate primary auth provider based on parsed options
38
+ */
39
+ private createPrimaryAuth;
8
40
  protected buildMap(list: AuthProviderType[]): RegistryBuildMapResult<AuthProviderRecord>;
9
41
  protected buildGraph(): void;
10
42
  protected initialize(): Promise<void>;
@@ -6,39 +6,167 @@ require("reflect-metadata");
6
6
  const regsitry_1 = require("../regsitry");
7
7
  const common_1 = require("../common");
8
8
  const auth_utils_1 = require("./auth.utils");
9
- const token_utils_1 = require("../utils/token.utils");
9
+ const utils_1 = require("../utils");
10
10
  const instance_remote_primary_auth_1 = require("./instances/instance.remote-primary-auth");
11
11
  const instance_local_primary_auth_1 = require("./instances/instance.local-primary-auth");
12
+ const detection_1 = require("./detection");
13
+ const errors_1 = require("../errors");
14
+ /**
15
+ * Default auth options when none provided - public mode with all tools open
16
+ */
17
+ const DEFAULT_AUTH_OPTIONS = {
18
+ mode: 'orchestrated',
19
+ type: 'local',
20
+ allowDefaultPublic: true,
21
+ };
12
22
  class AuthRegistry extends regsitry_1.RegistryAbstract {
13
23
  primary;
14
- constructor(scope, providers, metadata, owner, primary) {
24
+ parsedOptions;
25
+ logger;
26
+ owner;
27
+ /**
28
+ * Detection result for auth providers across the scope hierarchy
29
+ */
30
+ detection;
31
+ /**
32
+ * Whether this scope requires orchestrated mode
33
+ */
34
+ requiresOrchestration;
35
+ constructor(scope, providers, metadata, owner, primaryInput) {
15
36
  super('AuthRegistry', providers, metadata, false);
16
- let primaryRecord;
17
- if (primary) {
18
- this.primary = primary.type === 'remote' ? new instance_remote_primary_auth_1.RemotePrimaryAuth(scope, providers, primary) : new instance_local_primary_auth_1.LocalPrimaryAuth(scope, providers, primary);
19
- primaryRecord = {
20
- kind: common_1.AuthProviderKind.PRIMARY,
21
- provide: common_1.FrontMcpAuth,
22
- useValue: this.primary,
23
- metadata: primary,
24
- };
25
- }
26
- else {
27
- const defaultMetadata = { type: 'local', id: 'local', name: 'default-auth', allowAnonymous: true };
28
- this.primary = new instance_local_primary_auth_1.LocalPrimaryAuth(scope, providers, defaultMetadata);
29
- primaryRecord = {
30
- kind: common_1.AuthProviderKind.PRIMARY,
31
- provide: common_1.FrontMcpAuth,
32
- useValue: this.primary,
33
- metadata: defaultMetadata,
34
- };
35
- }
37
+ this.owner = owner;
38
+ this.logger = providers.get(common_1.FrontMcpLogger).child('AuthRegistry');
39
+ // Parse input with defaults applied
40
+ this.parsedOptions = (0, common_1.parseAuthOptions)(primaryInput ?? DEFAULT_AUTH_OPTIONS);
41
+ // Detect auth providers across all apps in this scope
42
+ const appAuthInfos = this.extractAppAuthInfo(scope);
43
+ this.detection = (0, detection_1.detectAuthProviders)(this.parsedOptions, appAuthInfos);
44
+ this.requiresOrchestration = this.detection.requiresOrchestration;
45
+ // Log detection results
46
+ this.logDetectionResults();
47
+ // Validate configuration and throw if invalid
48
+ this.validateConfiguration();
49
+ // Create the appropriate primary auth provider based on mode
50
+ this.primary = this.createPrimaryAuth(scope, providers, this.parsedOptions);
51
+ const primaryRecord = {
52
+ kind: common_1.AuthProviderKind.PRIMARY,
53
+ provide: common_1.FrontMcpAuth,
54
+ useValue: this.primary,
55
+ metadata: this.parsedOptions,
56
+ };
36
57
  this.tokens.add(common_1.FrontMcpAuth);
37
58
  this.defs.set(common_1.FrontMcpAuth, primaryRecord);
38
59
  this.graph.set(common_1.FrontMcpAuth, new Set());
39
60
  this.buildGraph();
40
61
  this.ready = this.initialize();
41
62
  }
63
+ /**
64
+ * Extract AppAuthInfo from scope metadata
65
+ */
66
+ extractAppAuthInfo(scope) {
67
+ const apps = scope.metadata.apps || [];
68
+ const result = [];
69
+ for (const app of apps) {
70
+ // Handle both class-based and value-based app definitions
71
+ const appMeta = this.getAppMetadata(app);
72
+ if (appMeta) {
73
+ result.push({
74
+ id: appMeta.id || appMeta.name,
75
+ name: appMeta.name,
76
+ auth: appMeta.auth,
77
+ });
78
+ }
79
+ }
80
+ return result;
81
+ }
82
+ /**
83
+ * Get app metadata from AppType (handles both class and value types)
84
+ */
85
+ getAppMetadata(app) {
86
+ // Value type: has metadata directly
87
+ if (typeof app === 'object' && 'name' in app) {
88
+ const appValue = app;
89
+ return {
90
+ id: appValue.id,
91
+ name: appValue.name,
92
+ auth: appValue.auth,
93
+ };
94
+ }
95
+ // Class type: check for metadata decorator
96
+ if (typeof app === 'function') {
97
+ const metadata = Reflect.getMetadata('frontmcp:app', app);
98
+ if (metadata) {
99
+ return {
100
+ id: metadata.id,
101
+ name: metadata.name,
102
+ auth: metadata.auth,
103
+ };
104
+ }
105
+ }
106
+ return undefined;
107
+ }
108
+ /**
109
+ * Log detection results for debugging
110
+ */
111
+ logDetectionResults() {
112
+ const { providers, uniqueProviderCount, requiresOrchestration, warnings } = this.detection;
113
+ if (uniqueProviderCount > 1) {
114
+ this.logger.info(`Detected ${uniqueProviderCount} unique auth providers: ${[...providers.keys()].join(', ')}`);
115
+ }
116
+ if (requiresOrchestration) {
117
+ this.logger.info(`Orchestration required: Multiple auth providers detected across apps`);
118
+ }
119
+ // Log warnings
120
+ for (const warning of warnings) {
121
+ this.logger.warn(warning);
122
+ }
123
+ }
124
+ /**
125
+ * Validate configuration and throw if invalid
126
+ */
127
+ validateConfiguration() {
128
+ const { validationErrors } = this.detection;
129
+ if (validationErrors.length > 0) {
130
+ // Log all errors
131
+ for (const error of validationErrors) {
132
+ this.logger.error(`[AuthRegistry] ${error}`);
133
+ }
134
+ // Throw with first error (most important)
135
+ throw new errors_1.AuthConfigurationError(`Invalid auth configuration: ${validationErrors[0]}`, {
136
+ errors: validationErrors,
137
+ suggestion: `1. Change your parent auth mode from 'transparent' to 'orchestrated'\n` +
138
+ `2. Example:\n` +
139
+ ` auth: {\n` +
140
+ ` mode: 'orchestrated',\n` +
141
+ ` type: 'local', // or 'remote' with your provider config\n` +
142
+ ` }`,
143
+ });
144
+ }
145
+ }
146
+ /**
147
+ * Create the appropriate primary auth provider based on parsed options
148
+ */
149
+ createPrimaryAuth(scope, providers, options) {
150
+ if ((0, common_1.isPublicMode)(options)) {
151
+ return new instance_local_primary_auth_1.LocalPrimaryAuth(scope, providers, options);
152
+ }
153
+ if ((0, common_1.isTransparentMode)(options)) {
154
+ return new instance_remote_primary_auth_1.RemotePrimaryAuth(scope, providers, options);
155
+ }
156
+ if ((0, common_1.isOrchestratedMode)(options)) {
157
+ if ((0, common_1.isOrchestratedLocal)(options)) {
158
+ return new instance_local_primary_auth_1.LocalPrimaryAuth(scope, providers, options);
159
+ }
160
+ else {
161
+ // Orchestrated remote: local auth server proxying to remote provider
162
+ // TODO: Store remote config for upstream OAuth flows
163
+ return new instance_local_primary_auth_1.LocalPrimaryAuth(scope, providers, options);
164
+ }
165
+ }
166
+ // Fallback (should never reach here) - create public mode with defaults
167
+ const defaultOptions = (0, common_1.parseAuthOptions)({ mode: 'public' });
168
+ return new instance_local_primary_auth_1.LocalPrimaryAuth(scope, providers, defaultOptions);
169
+ }
42
170
  buildMap(list) {
43
171
  const tokens = new Set();
44
172
  const defs = new Map();
@@ -55,12 +183,19 @@ class AuthRegistry extends regsitry_1.RegistryAbstract {
55
183
  buildGraph() {
56
184
  for (const token of this.tokens) {
57
185
  const rec = this.defs.get(token);
186
+ if (!rec) {
187
+ throw new errors_1.DependencyNotFoundError('AuthRegistry', (0, utils_1.tokenName)(token));
188
+ }
58
189
  const deps = (0, auth_utils_1.authDiscoveryDeps)(rec);
59
190
  for (const d of deps) {
60
191
  if (!this.providers.get(d)) {
61
- throw new Error(`AuthProvider ${(0, token_utils_1.tokenName)(token)} depends on ${(0, token_utils_1.tokenName)(d)}, which is not registered.`);
192
+ throw new errors_1.DependencyNotFoundError('AuthRegistry', `${(0, utils_1.tokenName)(d)} (required by ${(0, utils_1.tokenName)(token)})`);
193
+ }
194
+ const graphEntry = this.graph.get(token);
195
+ if (!graphEntry) {
196
+ throw new errors_1.DependencyNotFoundError('AuthRegistry', `graph entry for ${(0, utils_1.tokenName)(token)}`);
62
197
  }
63
- this.graph.get(token).add(d);
198
+ graphEntry.add(d);
64
199
  }
65
200
  }
66
201
  }
@@ -71,6 +206,9 @@ class AuthRegistry extends regsitry_1.RegistryAbstract {
71
206
  return Promise.resolve();
72
207
  }
73
208
  getPrimary() {
209
+ if (!this.primary) {
210
+ throw new errors_1.DependencyNotFoundError('AuthRegistry', 'primary auth provider');
211
+ }
74
212
  return this.primary;
75
213
  }
76
214
  getAuthProviders() {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.registry.js","sourceRoot":"","sources":["../../../src/auth/auth.registry.ts"],"names":[],"mappings":"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","sourcesContent":["// auth/auth.registry.ts\nimport 'reflect-metadata';\nimport {RegistryAbstract, RegistryBuildMapResult} from '../regsitry';\nimport ProviderRegistry from '../provider/provider.registry';\nimport {\n AuthOptions,\n FrontMcpAuth,\n AuthProviderType,\n Token, AuthProviderEntry, AuthRegistryInterface, AuthProviderRecord, AuthProviderKind, EntryOwnerRef,\n PrimaryAuthRecord, ScopeEntry,\n} from '../common';\nimport {authDiscoveryDeps, normalizeAuth} from './auth.utils';\nimport {tokenName} from '../utils/token.utils';\nimport {RemotePrimaryAuth} from './instances/instance.remote-primary-auth';\nimport {LocalPrimaryAuth} from './instances/instance.local-primary-auth';\n\nexport class AuthRegistry extends RegistryAbstract<AuthProviderEntry, AuthProviderRecord, AuthProviderType[]> implements AuthRegistryInterface {\n private readonly primary?: FrontMcpAuth;\n\n constructor(scope: ScopeEntry, providers: ProviderRegistry, metadata: AuthProviderType[], owner: EntryOwnerRef, primary?: AuthOptions) {\n super('AuthRegistry', providers, metadata, false);\n\n let primaryRecord: PrimaryAuthRecord;\n if (primary) {\n this.primary = primary.type === 'remote' ? new RemotePrimaryAuth(scope,providers, primary) : new LocalPrimaryAuth(scope,providers, primary);\n primaryRecord = {\n kind: AuthProviderKind.PRIMARY,\n provide: FrontMcpAuth,\n useValue: this.primary,\n metadata: primary,\n }\n } else {\n const defaultMetadata: AuthOptions = {type: 'local', id: 'local', name: 'default-auth', allowAnonymous: true}\n this.primary = new LocalPrimaryAuth(scope,providers, defaultMetadata);\n primaryRecord = {\n kind: AuthProviderKind.PRIMARY,\n provide: FrontMcpAuth,\n useValue: this.primary,\n metadata: defaultMetadata,\n }\n }\n this.tokens.add(FrontMcpAuth);\n this.defs.set(FrontMcpAuth, primaryRecord)\n this.graph.set(FrontMcpAuth, new Set())\n\n this.buildGraph();\n this.ready = this.initialize();\n }\n\n protected override buildMap(list: AuthProviderType[]): RegistryBuildMapResult<AuthProviderRecord> {\n const tokens = new Set<Token>();\n const defs = new Map<Token, AuthProviderRecord>();\n const graph = new Map<Token, Set<Token>>();\n\n for (const raw of list) {\n const rec = normalizeAuth(raw);\n const provide = rec.provide;\n tokens.add(provide);\n defs.set(provide, rec);\n graph.set(provide, new Set());\n }\n\n return {tokens, defs, graph};\n }\n\n protected buildGraph() {\n for (const token of this.tokens) {\n const rec = this.defs.get(token)!;\n const deps = authDiscoveryDeps(rec);\n\n for (const d of deps) {\n if (!this.providers.get(d)) {\n throw new Error(`AuthProvider ${tokenName(token)} depends on ${tokenName(d)}, which is not registered.`);\n }\n this.graph.get(token)!.add(d);\n }\n }\n }\n\n protected async initialize(): Promise<void> {\n if (this.primary) {\n await this.primary.ready;\n }\n return Promise.resolve();\n }\n\n\n getPrimary(): FrontMcpAuth {\n return this.primary!;\n }\n\n getAuthProviders(): AuthProviderEntry[] {\n return [...this.instances.values()];\n }\n}\n"]}
1
+ {"version":3,"file":"auth.registry.js","sourceRoot":"","sources":["../../../src/auth/auth.registry.ts"],"names":[],"mappings":";;;AAAA,wBAAwB;AACxB,4BAA0B;AAC1B,0CAAuE;AAEvE,sCAqBmB;AACnB,6CAAgE;AAChE,oCAAqC;AACrC,2FAA6E;AAC7E,yFAA2E;AAC3E,2CAA4F;AAC5F,sCAA4E;AAE5E;;GAEG;AACH,MAAM,oBAAoB,GAAqB;IAC7C,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,OAAO;IACb,kBAAkB,EAAE,IAAI;CACzB,CAAC;AAEF,MAAa,YACX,SAAQ,2BAA2E;IAGlE,OAAO,CAAgB;IACvB,aAAa,CAAc;IAC3B,MAAM,CAAiB;IACvB,KAAK,CAAgB;IAEtC;;OAEG;IACM,SAAS,CAA8B;IAEhD;;OAEG;IACM,qBAAqB,CAAU;IAExC,YACE,KAAiB,EACjB,SAA2B,EAC3B,QAA4B,EAC5B,KAAoB,EACpB,YAA+B;QAE/B,KAAK,CAAC,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAElD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,uBAAc,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAElE,oCAAoC;QACpC,IAAI,CAAC,aAAa,GAAG,IAAA,yBAAgB,EAAC,YAAY,IAAI,oBAAoB,CAAC,CAAC;QAE5E,sDAAsD;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAA,+BAAmB,EAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QACvE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC;QAElE,wBAAwB;QACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,8CAA8C;QAC9C,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,6DAA6D;QAC7D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAE5E,MAAM,aAAa,GAAsB;YACvC,IAAI,EAAE,yBAAgB,CAAC,OAAO;YAC9B,OAAO,EAAE,qBAAY;YACrB,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,QAAQ,EAAE,IAAI,CAAC,aAAa;SAC7B,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAY,EAAE,aAAa,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAY,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAExC,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,KAAiB;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;QACvC,MAAM,MAAM,GAAkB,EAAE,CAAC;QAEjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,0DAA0D;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI;oBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,GAAY;QACjC,oCAAoC;QACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,GAAwD,CAAC;YAC1E,OAAO;gBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB,CAAC;QACJ,CAAC;QAED,2CAA2C;QAC3C,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YAC1D,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO;oBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;iBACpB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAE3F,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,mBAAmB,2BAA2B,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjH,CAAC;QAED,IAAI,qBAAqB,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QAC3F,CAAC;QAED,eAAe;QACf,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAE5C,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,iBAAiB;YACjB,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;YAC/C,CAAC;YAED,0CAA0C;YAC1C,MAAM,IAAI,+BAAsB,CAAC,+BAA+B,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrF,MAAM,EAAE,gBAAgB;gBACxB,UAAU,EACR,wEAAwE;oBACxE,eAAe;oBACf,cAAc;oBACd,8BAA8B;oBAC9B,gEAAgE;oBAChE,MAAM;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,KAAiB,EAAE,SAA2B,EAAE,OAAoB;QAC5F,IAAI,IAAA,qBAAY,EAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,8CAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,IAAA,0BAAiB,EAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,gDAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,IAAA,2BAAkB,EAAC,OAAO,CAAC,EAAE,CAAC;YAChC,IAAI,IAAA,4BAAmB,EAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAI,8CAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,qEAAqE;gBACrE,qDAAqD;gBACrD,OAAO,IAAI,8CAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,MAAM,cAAc,GAAG,IAAA,yBAAgB,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAsB,CAAC;QACjF,OAAO,IAAI,8CAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;IAEkB,QAAQ,CAAC,IAAwB;QAClD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAS,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAA6B,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;QAE3C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,IAAA,0BAAa,EAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACvB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;IAES,UAAU;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,gCAAuB,CAAC,cAAc,EAAE,IAAA,iBAAS,EAAC,KAAK,CAAC,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,IAAI,GAAG,IAAA,8BAAiB,EAAC,GAAG,CAAC,CAAC;YAEpC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,gCAAuB,CAAC,cAAc,EAAE,GAAG,IAAA,iBAAS,EAAC,CAAC,CAAC,iBAAiB,IAAA,iBAAS,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzG,CAAC;gBACD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACzC,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,IAAI,gCAAuB,CAAC,cAAc,EAAE,mBAAmB,IAAA,iBAAS,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC3F,CAAC;gBACD,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAES,KAAK,CAAC,UAAU;QACxB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3B,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,gCAAuB,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,gBAAgB;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,CAAC;CACF;AAjPD,oCAiPC","sourcesContent":["// auth/auth.registry.ts\nimport 'reflect-metadata';\nimport { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';\nimport ProviderRegistry from '../provider/provider.registry';\nimport {\n FrontMcpAuth,\n FrontMcpLogger,\n AuthProviderType,\n Token,\n AuthProviderEntry,\n AuthRegistryInterface,\n AuthProviderRecord,\n AuthProviderKind,\n EntryOwnerRef,\n PrimaryAuthRecord,\n ScopeEntry,\n AuthOptions,\n AuthOptionsInput,\n parseAuthOptions,\n isPublicMode,\n isTransparentMode,\n isOrchestratedMode,\n isOrchestratedLocal,\n PublicAuthOptions,\n AppType,\n} from '../common';\nimport { authDiscoveryDeps, normalizeAuth } from './auth.utils';\nimport { tokenName } from '../utils';\nimport { RemotePrimaryAuth } from './instances/instance.remote-primary-auth';\nimport { LocalPrimaryAuth } from './instances/instance.local-primary-auth';\nimport { detectAuthProviders, AuthProviderDetectionResult, AppAuthInfo } from './detection';\nimport { DependencyNotFoundError, AuthConfigurationError } from '../errors';\n\n/**\n * Default auth options when none provided - public mode with all tools open\n */\nconst DEFAULT_AUTH_OPTIONS: AuthOptionsInput = {\n mode: 'orchestrated',\n type: 'local',\n allowDefaultPublic: true,\n};\n\nexport class AuthRegistry\n extends RegistryAbstract<AuthProviderEntry, AuthProviderRecord, AuthProviderType[]>\n implements AuthRegistryInterface\n{\n private readonly primary?: FrontMcpAuth;\n private readonly parsedOptions: AuthOptions;\n private readonly logger: FrontMcpLogger;\n private readonly owner: EntryOwnerRef;\n\n /**\n * Detection result for auth providers across the scope hierarchy\n */\n readonly detection: AuthProviderDetectionResult;\n\n /**\n * Whether this scope requires orchestrated mode\n */\n readonly requiresOrchestration: boolean;\n\n constructor(\n scope: ScopeEntry,\n providers: ProviderRegistry,\n metadata: AuthProviderType[],\n owner: EntryOwnerRef,\n primaryInput?: AuthOptionsInput,\n ) {\n super('AuthRegistry', providers, metadata, false);\n\n this.owner = owner;\n this.logger = providers.get(FrontMcpLogger).child('AuthRegistry');\n\n // Parse input with defaults applied\n this.parsedOptions = parseAuthOptions(primaryInput ?? DEFAULT_AUTH_OPTIONS);\n\n // Detect auth providers across all apps in this scope\n const appAuthInfos = this.extractAppAuthInfo(scope);\n this.detection = detectAuthProviders(this.parsedOptions, appAuthInfos);\n this.requiresOrchestration = this.detection.requiresOrchestration;\n\n // Log detection results\n this.logDetectionResults();\n\n // Validate configuration and throw if invalid\n this.validateConfiguration();\n\n // Create the appropriate primary auth provider based on mode\n this.primary = this.createPrimaryAuth(scope, providers, this.parsedOptions);\n\n const primaryRecord: PrimaryAuthRecord = {\n kind: AuthProviderKind.PRIMARY,\n provide: FrontMcpAuth,\n useValue: this.primary,\n metadata: this.parsedOptions,\n };\n\n this.tokens.add(FrontMcpAuth);\n this.defs.set(FrontMcpAuth, primaryRecord);\n this.graph.set(FrontMcpAuth, new Set());\n\n this.buildGraph();\n this.ready = this.initialize();\n }\n\n /**\n * Extract AppAuthInfo from scope metadata\n */\n private extractAppAuthInfo(scope: ScopeEntry): AppAuthInfo[] {\n const apps = scope.metadata.apps || [];\n const result: AppAuthInfo[] = [];\n\n for (const app of apps) {\n // Handle both class-based and value-based app definitions\n const appMeta = this.getAppMetadata(app);\n if (appMeta) {\n result.push({\n id: appMeta.id || appMeta.name,\n name: appMeta.name,\n auth: appMeta.auth,\n });\n }\n }\n\n return result;\n }\n\n /**\n * Get app metadata from AppType (handles both class and value types)\n */\n private getAppMetadata(app: AppType): { id?: string; name: string; auth?: AuthOptions } | undefined {\n // Value type: has metadata directly\n if (typeof app === 'object' && 'name' in app) {\n const appValue = app as { id?: string; name: string; auth?: AuthOptions };\n return {\n id: appValue.id,\n name: appValue.name,\n auth: appValue.auth,\n };\n }\n\n // Class type: check for metadata decorator\n if (typeof app === 'function') {\n const metadata = Reflect.getMetadata('frontmcp:app', app);\n if (metadata) {\n return {\n id: metadata.id,\n name: metadata.name,\n auth: metadata.auth,\n };\n }\n }\n\n return undefined;\n }\n\n /**\n * Log detection results for debugging\n */\n private logDetectionResults(): void {\n const { providers, uniqueProviderCount, requiresOrchestration, warnings } = this.detection;\n\n if (uniqueProviderCount > 1) {\n this.logger.info(`Detected ${uniqueProviderCount} unique auth providers: ${[...providers.keys()].join(', ')}`);\n }\n\n if (requiresOrchestration) {\n this.logger.info(`Orchestration required: Multiple auth providers detected across apps`);\n }\n\n // Log warnings\n for (const warning of warnings) {\n this.logger.warn(warning);\n }\n }\n\n /**\n * Validate configuration and throw if invalid\n */\n private validateConfiguration(): void {\n const { validationErrors } = this.detection;\n\n if (validationErrors.length > 0) {\n // Log all errors\n for (const error of validationErrors) {\n this.logger.error(`[AuthRegistry] ${error}`);\n }\n\n // Throw with first error (most important)\n throw new AuthConfigurationError(`Invalid auth configuration: ${validationErrors[0]}`, {\n errors: validationErrors,\n suggestion:\n `1. Change your parent auth mode from 'transparent' to 'orchestrated'\\n` +\n `2. Example:\\n` +\n ` auth: {\\n` +\n ` mode: 'orchestrated',\\n` +\n ` type: 'local', // or 'remote' with your provider config\\n` +\n ` }`,\n });\n }\n }\n\n /**\n * Create the appropriate primary auth provider based on parsed options\n */\n private createPrimaryAuth(scope: ScopeEntry, providers: ProviderRegistry, options: AuthOptions): FrontMcpAuth {\n if (isPublicMode(options)) {\n return new LocalPrimaryAuth(scope, providers, options);\n }\n\n if (isTransparentMode(options)) {\n return new RemotePrimaryAuth(scope, providers, options);\n }\n\n if (isOrchestratedMode(options)) {\n if (isOrchestratedLocal(options)) {\n return new LocalPrimaryAuth(scope, providers, options);\n } else {\n // Orchestrated remote: local auth server proxying to remote provider\n // TODO: Store remote config for upstream OAuth flows\n return new LocalPrimaryAuth(scope, providers, options);\n }\n }\n\n // Fallback (should never reach here) - create public mode with defaults\n const defaultOptions = parseAuthOptions({ mode: 'public' }) as PublicAuthOptions;\n return new LocalPrimaryAuth(scope, providers, defaultOptions);\n }\n\n protected override buildMap(list: AuthProviderType[]): RegistryBuildMapResult<AuthProviderRecord> {\n const tokens = new Set<Token>();\n const defs = new Map<Token, AuthProviderRecord>();\n const graph = new Map<Token, Set<Token>>();\n\n for (const raw of list) {\n const rec = normalizeAuth(raw);\n const provide = rec.provide;\n tokens.add(provide);\n defs.set(provide, rec);\n graph.set(provide, new Set());\n }\n\n return { tokens, defs, graph };\n }\n\n protected buildGraph() {\n for (const token of this.tokens) {\n const rec = this.defs.get(token);\n if (!rec) {\n throw new DependencyNotFoundError('AuthRegistry', tokenName(token));\n }\n const deps = authDiscoveryDeps(rec);\n\n for (const d of deps) {\n if (!this.providers.get(d)) {\n throw new DependencyNotFoundError('AuthRegistry', `${tokenName(d)} (required by ${tokenName(token)})`);\n }\n const graphEntry = this.graph.get(token);\n if (!graphEntry) {\n throw new DependencyNotFoundError('AuthRegistry', `graph entry for ${tokenName(token)}`);\n }\n graphEntry.add(d);\n }\n }\n }\n\n protected async initialize(): Promise<void> {\n if (this.primary) {\n await this.primary.ready;\n }\n return Promise.resolve();\n }\n\n getPrimary(): FrontMcpAuth {\n if (!this.primary) {\n throw new DependencyNotFoundError('AuthRegistry', 'primary auth provider');\n }\n return this.primary;\n }\n\n getAuthProviders(): AuthProviderEntry[] {\n return [...this.instances.values()];\n }\n}\n"]}
@@ -4,18 +4,17 @@ exports.collectAuthMetadata = collectAuthMetadata;
4
4
  exports.normalizeAuth = normalizeAuth;
5
5
  exports.authDiscoveryDeps = authDiscoveryDeps;
6
6
  // auth/auth.utils.ts
7
- const token_utils_1 = require("../utils/token.utils");
7
+ const utils_1 = require("../utils");
8
8
  const common_1 = require("../common");
9
- const metadata_utils_1 = require("../utils/metadata.utils");
10
9
  function collectAuthMetadata(cls) {
11
10
  return Object.entries(common_1.FrontMcpAuthProviderTokens).reduce((metadata, [key, token]) => {
12
11
  return Object.assign(metadata, {
13
- [key]: (0, metadata_utils_1.getMetadata)(token, cls),
12
+ [key]: (0, utils_1.getMetadata)(token, cls),
14
13
  });
15
14
  }, {});
16
15
  }
17
16
  function normalizeAuth(item) {
18
- if ((0, token_utils_1.isClass)(item)) {
17
+ if ((0, utils_1.isClass)(item)) {
19
18
  // read McpAuthMetadata from class
20
19
  const metadata = collectAuthMetadata(item);
21
20
  return { kind: common_1.AuthProviderKind.CLASS_TOKEN, provide: item, metadata };
@@ -27,8 +26,8 @@ function normalizeAuth(item) {
27
26
  throw new Error(`Auth '${name}' is missing 'provide'.`);
28
27
  }
29
28
  if (useClass) {
30
- if (!(0, token_utils_1.isClass)(useClass)) {
31
- throw new Error(`'useClass' on auth '${(0, token_utils_1.tokenName)(provide)}' must be a class.`);
29
+ if (!(0, utils_1.isClass)(useClass)) {
30
+ throw new Error(`'useClass' on auth '${(0, utils_1.tokenName)(provide)}' must be a class.`);
32
31
  }
33
32
  return {
34
33
  kind: common_1.AuthProviderKind.CLASS,
@@ -39,7 +38,7 @@ function normalizeAuth(item) {
39
38
  }
40
39
  if (useFactory) {
41
40
  if (typeof useFactory !== 'function') {
42
- throw new Error(`'useFactory' on auth '${(0, token_utils_1.tokenName)(provide)}' must be a function.`);
41
+ throw new Error(`'useFactory' on auth '${(0, utils_1.tokenName)(provide)}' must be a function.`);
43
42
  }
44
43
  const inj = typeof inject === 'function' ? inject : () => [];
45
44
  return {
@@ -77,9 +76,9 @@ function authDiscoveryDeps(rec) {
77
76
  return [...rec.inject()];
78
77
  }
79
78
  case common_1.AuthProviderKind.CLASS:
80
- return (0, token_utils_1.depsOfClass)(rec.useClass, 'discovery');
79
+ return (0, utils_1.depsOfClass)(rec.useClass, 'discovery');
81
80
  case common_1.AuthProviderKind.CLASS_TOKEN:
82
- return (0, token_utils_1.depsOfClass)(rec.provide, 'discovery');
81
+ return (0, utils_1.depsOfClass)(rec.provide, 'discovery');
83
82
  }
84
83
  }
85
84
  //# sourceMappingURL=auth.utils.js.map