@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
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Authorization Required Error
3
+ *
4
+ * Thrown when a tool requires app-level authorization that the user has not granted.
5
+ * Used for progressive/incremental authorization flow where users can skip apps
6
+ * during initial auth and authorize later when needed.
7
+ *
8
+ * Behavior depends on session mode:
9
+ * - Stateful: Returns auth_url link for incremental authorization
10
+ * - Stateless: Returns unauthorized error (no link, must re-auth from scratch)
11
+ *
12
+ * Supports MCP elicit flow for clients that support it.
13
+ */
14
+ import { z } from 'zod';
15
+ import { PublicMcpError } from './mcp.error';
16
+ /**
17
+ * Session mode determines how authorization state is stored
18
+ */
19
+ export type SessionMode = 'stateful' | 'stateless';
20
+ /**
21
+ * Elicit response type for clients that support elicit flow
22
+ */
23
+ export declare const elicitResponseSchema: z.ZodObject<{
24
+ elicitId: z.ZodString;
25
+ authUrl: z.ZodString;
26
+ message: z.ZodString;
27
+ appId: z.ZodString;
28
+ toolId: z.ZodString;
29
+ }, z.core.$strip>;
30
+ export type ElicitResponse = z.infer<typeof elicitResponseSchema>;
31
+ /**
32
+ * Schema for authorization required response data (stateful mode with link)
33
+ */
34
+ export declare const authorizationRequiredDataSchema: z.ZodObject<{
35
+ error: z.ZodLiteral<"authorization_required">;
36
+ app: z.ZodString;
37
+ tool: z.ZodString;
38
+ auth_url: z.ZodOptional<z.ZodString>;
39
+ message: z.ZodString;
40
+ required_scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
41
+ session_mode: z.ZodOptional<z.ZodEnum<{
42
+ stateful: "stateful";
43
+ stateless: "stateless";
44
+ }>>;
45
+ elicit_id: z.ZodOptional<z.ZodString>;
46
+ supports_incremental: z.ZodOptional<z.ZodBoolean>;
47
+ }, z.core.$strip>;
48
+ /**
49
+ * Schema for authorization required error constructor params
50
+ */
51
+ export declare const authorizationRequiredParamsSchema: z.ZodObject<{
52
+ appId: z.ZodString;
53
+ toolId: z.ZodString;
54
+ authUrl: z.ZodOptional<z.ZodString>;
55
+ requiredScopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
56
+ message: z.ZodOptional<z.ZodString>;
57
+ sessionMode: z.ZodOptional<z.ZodEnum<{
58
+ stateful: "stateful";
59
+ stateless: "stateless";
60
+ }>>;
61
+ elicitId: z.ZodOptional<z.ZodString>;
62
+ vaultId: z.ZodOptional<z.ZodString>;
63
+ pendingAuthId: z.ZodOptional<z.ZodString>;
64
+ }, z.core.$strip>;
65
+ /**
66
+ * Schema for the _meta field in MCP error response
67
+ */
68
+ export declare const authorizationRequiredMetaSchema: z.ZodObject<{
69
+ errorId: z.ZodString;
70
+ code: z.ZodString;
71
+ timestamp: z.ZodString;
72
+ authorization_required: z.ZodLiteral<true>;
73
+ app: z.ZodString;
74
+ tool: z.ZodString;
75
+ auth_url: z.ZodOptional<z.ZodString>;
76
+ required_scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
77
+ session_mode: z.ZodEnum<{
78
+ stateful: "stateful";
79
+ stateless: "stateless";
80
+ }>;
81
+ supports_incremental: z.ZodBoolean;
82
+ elicit_id: z.ZodOptional<z.ZodString>;
83
+ pending_auth_id: z.ZodOptional<z.ZodString>;
84
+ }, z.core.$strip>;
85
+ /**
86
+ * Data structure for authorization required responses
87
+ */
88
+ export type AuthorizationRequiredData = z.infer<typeof authorizationRequiredDataSchema>;
89
+ /**
90
+ * Constructor params for AuthorizationRequiredError
91
+ */
92
+ export type AuthorizationRequiredParams = z.infer<typeof authorizationRequiredParamsSchema>;
93
+ /**
94
+ * Meta field type for MCP error response
95
+ */
96
+ export type AuthorizationRequiredMeta = z.infer<typeof authorizationRequiredMetaSchema>;
97
+ /**
98
+ * Error thrown when a tool's parent app requires authorization.
99
+ * This enables progressive authorization where users can authorize apps
100
+ * incrementally as needed rather than all at once.
101
+ *
102
+ * Behavior depends on session mode:
103
+ * - **Stateful**: Returns auth_url link for incremental authorization
104
+ * - User can click link to authorize without full re-authentication
105
+ * - Supports elicit flow for interactive authorization
106
+ * - **Stateless**: Returns unauthorized error only
107
+ * - No link provided (all state in JWT, cannot extend)
108
+ * - User must re-authenticate from scratch
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * // Stateful mode - can provide auth link
113
+ * throw new AuthorizationRequiredError({
114
+ * appId: 'slack',
115
+ * toolId: 'slack:send_message',
116
+ * authUrl: '/oauth/authorize?app=slack',
117
+ * sessionMode: 'stateful',
118
+ * message: 'Please authorize Slack to use this tool.',
119
+ * });
120
+ *
121
+ * // Stateless mode - no link, must re-auth
122
+ * throw new AuthorizationRequiredError({
123
+ * appId: 'slack',
124
+ * toolId: 'slack:send_message',
125
+ * sessionMode: 'stateless',
126
+ * message: 'You are not authorized to use this tool.',
127
+ * });
128
+ * ```
129
+ */
130
+ export declare class AuthorizationRequiredError extends PublicMcpError {
131
+ /** App ID that requires authorization */
132
+ readonly appId: string;
133
+ /** Tool ID that triggered the authorization requirement */
134
+ readonly toolId: string;
135
+ /** URL to authorize the app (only available in stateful mode) */
136
+ readonly authUrl?: string;
137
+ /** Scopes required by the tool (optional) */
138
+ readonly requiredScopes?: string[];
139
+ /** Session mode determines if incremental auth is supported */
140
+ readonly sessionMode: SessionMode;
141
+ /** Elicit ID if using elicit flow */
142
+ readonly elicitId?: string;
143
+ /** Vault ID for stateful sessions */
144
+ readonly vaultId?: string;
145
+ /** Pending auth ID for tracking */
146
+ readonly pendingAuthId?: string;
147
+ /** Whether incremental authorization is supported */
148
+ readonly supportsIncremental: boolean;
149
+ constructor(params: AuthorizationRequiredParams);
150
+ /**
151
+ * Convert to MCP error response format with authorization metadata.
152
+ * The _meta field includes structured data that AI agents can use
153
+ * to prompt users for authorization.
154
+ *
155
+ * In stateful mode: includes auth_url for AI to display
156
+ * In stateless mode: no auth_url, AI should inform user to re-authenticate
157
+ */
158
+ toMcpError(isDevelopment?: boolean): {
159
+ content: Array<{
160
+ type: 'text';
161
+ text: string;
162
+ }>;
163
+ isError: true;
164
+ _meta: AuthorizationRequiredMeta;
165
+ };
166
+ /**
167
+ * Convert to structured authorization required data
168
+ */
169
+ toAuthorizationRequiredData(): AuthorizationRequiredData;
170
+ /**
171
+ * Create an elicit response for clients that support it
172
+ * Only available in stateful mode
173
+ */
174
+ toElicitResponse(): ElicitResponse | null;
175
+ /**
176
+ * Check if this error can be resolved via incremental auth link
177
+ */
178
+ canUseIncrementalAuth(): boolean;
179
+ /**
180
+ * Get user-facing message based on mode
181
+ * - Stateful: includes link text
182
+ * - Stateless: tells user to re-authenticate
183
+ */
184
+ getUserFacingMessage(): string;
185
+ /**
186
+ * Get message for cancelled authorization
187
+ */
188
+ static getCancelledMessage(appId: string, toolId: string, authUrl?: string): string;
189
+ }
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthorizationRequiredError = exports.authorizationRequiredMetaSchema = exports.authorizationRequiredParamsSchema = exports.authorizationRequiredDataSchema = exports.elicitResponseSchema = void 0;
4
+ /**
5
+ * Authorization Required Error
6
+ *
7
+ * Thrown when a tool requires app-level authorization that the user has not granted.
8
+ * Used for progressive/incremental authorization flow where users can skip apps
9
+ * during initial auth and authorize later when needed.
10
+ *
11
+ * Behavior depends on session mode:
12
+ * - Stateful: Returns auth_url link for incremental authorization
13
+ * - Stateless: Returns unauthorized error (no link, must re-auth from scratch)
14
+ *
15
+ * Supports MCP elicit flow for clients that support it.
16
+ */
17
+ const zod_1 = require("zod");
18
+ const mcp_error_1 = require("./mcp.error");
19
+ /**
20
+ * Elicit response type for clients that support elicit flow
21
+ */
22
+ exports.elicitResponseSchema = zod_1.z.object({
23
+ /** Elicit request ID for tracking */
24
+ elicitId: zod_1.z.string(),
25
+ /** Authorization URL to display */
26
+ authUrl: zod_1.z.string().url(),
27
+ /** Message to display to user */
28
+ message: zod_1.z.string(),
29
+ /** App being authorized */
30
+ appId: zod_1.z.string(),
31
+ /** Tool that triggered auth */
32
+ toolId: zod_1.z.string(),
33
+ });
34
+ // ============================================
35
+ // Schemas
36
+ // ============================================
37
+ /**
38
+ * Schema for authorization required response data (stateful mode with link)
39
+ */
40
+ exports.authorizationRequiredDataSchema = zod_1.z.object({
41
+ /** Error type identifier */
42
+ error: zod_1.z.literal('authorization_required'),
43
+ /** App ID that requires authorization */
44
+ app: zod_1.z.string().min(1),
45
+ /** Tool ID that triggered the authorization requirement */
46
+ tool: zod_1.z.string().min(1),
47
+ /** URL to authorize the app (only in stateful mode) */
48
+ auth_url: zod_1.z.string().url().optional(),
49
+ /** Human-readable message */
50
+ message: zod_1.z.string(),
51
+ /** Scopes required by the tool (optional) */
52
+ required_scopes: zod_1.z.array(zod_1.z.string()).optional(),
53
+ /** Session mode that determines behavior */
54
+ session_mode: zod_1.z.enum(['stateful', 'stateless']).optional(),
55
+ /** Whether elicit flow is being used */
56
+ elicit_id: zod_1.z.string().optional(),
57
+ /** Whether client can use incremental auth link */
58
+ supports_incremental: zod_1.z.boolean().optional(),
59
+ });
60
+ /**
61
+ * Schema for authorization required error constructor params
62
+ */
63
+ exports.authorizationRequiredParamsSchema = zod_1.z.object({
64
+ appId: zod_1.z.string().min(1),
65
+ toolId: zod_1.z.string().min(1),
66
+ authUrl: zod_1.z.string().optional(),
67
+ requiredScopes: zod_1.z.array(zod_1.z.string()).optional(),
68
+ message: zod_1.z.string().optional(),
69
+ /** Session mode - determines if auth link is included */
70
+ sessionMode: zod_1.z.enum(['stateful', 'stateless']).optional(),
71
+ /** Elicit ID if using elicit flow */
72
+ elicitId: zod_1.z.string().optional(),
73
+ /** Vault ID for stateful sessions */
74
+ vaultId: zod_1.z.string().optional(),
75
+ /** Pending auth ID for tracking */
76
+ pendingAuthId: zod_1.z.string().optional(),
77
+ });
78
+ /**
79
+ * Schema for the _meta field in MCP error response
80
+ */
81
+ exports.authorizationRequiredMetaSchema = zod_1.z.object({
82
+ errorId: zod_1.z.string(),
83
+ code: zod_1.z.string(),
84
+ timestamp: zod_1.z.string(),
85
+ authorization_required: zod_1.z.literal(true),
86
+ app: zod_1.z.string(),
87
+ tool: zod_1.z.string(),
88
+ auth_url: zod_1.z.string().optional(),
89
+ required_scopes: zod_1.z.array(zod_1.z.string()).optional(),
90
+ session_mode: zod_1.z.enum(['stateful', 'stateless']),
91
+ supports_incremental: zod_1.z.boolean(),
92
+ elicit_id: zod_1.z.string().optional(),
93
+ pending_auth_id: zod_1.z.string().optional(),
94
+ });
95
+ // ============================================
96
+ // Error Class
97
+ // ============================================
98
+ /**
99
+ * Error thrown when a tool's parent app requires authorization.
100
+ * This enables progressive authorization where users can authorize apps
101
+ * incrementally as needed rather than all at once.
102
+ *
103
+ * Behavior depends on session mode:
104
+ * - **Stateful**: Returns auth_url link for incremental authorization
105
+ * - User can click link to authorize without full re-authentication
106
+ * - Supports elicit flow for interactive authorization
107
+ * - **Stateless**: Returns unauthorized error only
108
+ * - No link provided (all state in JWT, cannot extend)
109
+ * - User must re-authenticate from scratch
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * // Stateful mode - can provide auth link
114
+ * throw new AuthorizationRequiredError({
115
+ * appId: 'slack',
116
+ * toolId: 'slack:send_message',
117
+ * authUrl: '/oauth/authorize?app=slack',
118
+ * sessionMode: 'stateful',
119
+ * message: 'Please authorize Slack to use this tool.',
120
+ * });
121
+ *
122
+ * // Stateless mode - no link, must re-auth
123
+ * throw new AuthorizationRequiredError({
124
+ * appId: 'slack',
125
+ * toolId: 'slack:send_message',
126
+ * sessionMode: 'stateless',
127
+ * message: 'You are not authorized to use this tool.',
128
+ * });
129
+ * ```
130
+ */
131
+ class AuthorizationRequiredError extends mcp_error_1.PublicMcpError {
132
+ /** App ID that requires authorization */
133
+ appId;
134
+ /** Tool ID that triggered the authorization requirement */
135
+ toolId;
136
+ /** URL to authorize the app (only available in stateful mode) */
137
+ authUrl;
138
+ /** Scopes required by the tool (optional) */
139
+ requiredScopes;
140
+ /** Session mode determines if incremental auth is supported */
141
+ sessionMode;
142
+ /** Elicit ID if using elicit flow */
143
+ elicitId;
144
+ /** Vault ID for stateful sessions */
145
+ vaultId;
146
+ /** Pending auth ID for tracking */
147
+ pendingAuthId;
148
+ /** Whether incremental authorization is supported */
149
+ supportsIncremental;
150
+ constructor(params) {
151
+ const sessionMode = params.sessionMode ?? 'stateful';
152
+ const supportsIncremental = sessionMode === 'stateful';
153
+ // Message differs based on mode
154
+ const defaultMessage = supportsIncremental
155
+ ? `Authorization required for ${params.appId}. Please authorize to use ${params.toolId}.`
156
+ : `You are not authorized to use ${params.toolId}. Please re-authenticate to access this tool.`;
157
+ super(params.message || defaultMessage, 'AUTHORIZATION_REQUIRED', 403);
158
+ this.appId = params.appId;
159
+ this.toolId = params.toolId;
160
+ this.sessionMode = sessionMode;
161
+ this.supportsIncremental = supportsIncremental;
162
+ // Only set authUrl in stateful mode
163
+ if (supportsIncremental && params.authUrl) {
164
+ this.authUrl = params.authUrl;
165
+ }
166
+ this.requiredScopes = params.requiredScopes;
167
+ this.elicitId = params.elicitId;
168
+ this.vaultId = params.vaultId;
169
+ this.pendingAuthId = params.pendingAuthId;
170
+ }
171
+ /**
172
+ * Convert to MCP error response format with authorization metadata.
173
+ * The _meta field includes structured data that AI agents can use
174
+ * to prompt users for authorization.
175
+ *
176
+ * In stateful mode: includes auth_url for AI to display
177
+ * In stateless mode: no auth_url, AI should inform user to re-authenticate
178
+ */
179
+ toMcpError(isDevelopment) {
180
+ // Build content text based on mode
181
+ let contentText = this.getPublicMessage();
182
+ if (this.supportsIncremental && this.authUrl) {
183
+ contentText += `\n\nTo authorize, click: ${this.authUrl}`;
184
+ }
185
+ else if (!this.supportsIncremental) {
186
+ contentText += '\n\nPlease re-authenticate to access this tool.';
187
+ }
188
+ return {
189
+ content: [
190
+ {
191
+ type: 'text',
192
+ text: contentText,
193
+ },
194
+ ],
195
+ isError: true,
196
+ _meta: {
197
+ errorId: this.errorId,
198
+ code: this.code,
199
+ timestamp: new Date().toISOString(),
200
+ // Progressive auth specific fields for AI agents to use
201
+ authorization_required: true,
202
+ app: this.appId,
203
+ tool: this.toolId,
204
+ auth_url: this.authUrl,
205
+ required_scopes: this.requiredScopes,
206
+ session_mode: this.sessionMode,
207
+ supports_incremental: this.supportsIncremental,
208
+ elicit_id: this.elicitId,
209
+ pending_auth_id: this.pendingAuthId,
210
+ },
211
+ };
212
+ }
213
+ /**
214
+ * Convert to structured authorization required data
215
+ */
216
+ toAuthorizationRequiredData() {
217
+ return {
218
+ error: 'authorization_required',
219
+ app: this.appId,
220
+ tool: this.toolId,
221
+ auth_url: this.authUrl,
222
+ message: this.getPublicMessage(),
223
+ required_scopes: this.requiredScopes,
224
+ session_mode: this.sessionMode,
225
+ elicit_id: this.elicitId,
226
+ supports_incremental: this.supportsIncremental,
227
+ };
228
+ }
229
+ /**
230
+ * Create an elicit response for clients that support it
231
+ * Only available in stateful mode
232
+ */
233
+ toElicitResponse() {
234
+ if (!this.supportsIncremental || !this.authUrl || !this.elicitId) {
235
+ return null;
236
+ }
237
+ return {
238
+ elicitId: this.elicitId,
239
+ authUrl: this.authUrl,
240
+ message: this.getPublicMessage(),
241
+ appId: this.appId,
242
+ toolId: this.toolId,
243
+ };
244
+ }
245
+ /**
246
+ * Check if this error can be resolved via incremental auth link
247
+ */
248
+ canUseIncrementalAuth() {
249
+ return this.supportsIncremental && !!this.authUrl;
250
+ }
251
+ /**
252
+ * Get user-facing message based on mode
253
+ * - Stateful: includes link text
254
+ * - Stateless: tells user to re-authenticate
255
+ */
256
+ getUserFacingMessage() {
257
+ if (this.supportsIncremental && this.authUrl) {
258
+ return `${this.getPublicMessage()}\n\nClick here to authorize: ${this.authUrl}`;
259
+ }
260
+ return `${this.getPublicMessage()}\n\nYou are not authorized to use this tool. Please re-authenticate to access it.`;
261
+ }
262
+ /**
263
+ * Get message for cancelled authorization
264
+ */
265
+ static getCancelledMessage(appId, toolId, authUrl) {
266
+ const baseMsg = `Authorization was cancelled. You are not authorized to use ${toolId}.`;
267
+ if (authUrl) {
268
+ return `${baseMsg}\n\nIf you still want to use this tool, click this link to authorize: ${authUrl}\n\nThen re-prompt your request to try again.`;
269
+ }
270
+ return `${baseMsg}\n\nPlease re-authenticate and try again.`;
271
+ }
272
+ }
273
+ exports.AuthorizationRequiredError = AuthorizationRequiredError;
274
+ //# sourceMappingURL=authorization-required.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-required.error.js","sourceRoot":"","sources":["../../../src/errors/authorization-required.error.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;GAYG;AACH,6BAAwB;AACxB,2CAA6C;AAW7C;;GAEG;AACU,QAAA,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,qCAAqC;IACrC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,mCAAmC;IACnC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACzB,iCAAiC;IACjC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,2BAA2B;IAC3B,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,+BAA+B;IAC/B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAIH,+CAA+C;AAC/C,UAAU;AACV,+CAA+C;AAE/C;;GAEG;AACU,QAAA,+BAA+B,GAAG,OAAC,CAAC,MAAM,CAAC;IACtD,4BAA4B;IAC5B,KAAK,EAAE,OAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC;IAC1C,yCAAyC;IACzC,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,2DAA2D;IAC3D,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,uDAAuD;IACvD,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACrC,6BAA6B;IAC7B,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,6CAA6C;IAC7C,eAAe,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC/C,4CAA4C;IAC5C,YAAY,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1D,wCAAwC;IACxC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,mDAAmD;IACnD,oBAAoB,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AAEH;;GAEG;AACU,QAAA,iCAAiC,GAAG,OAAC,CAAC,MAAM,CAAC;IACxD,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,cAAc,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC9C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,yDAAyD;IACzD,WAAW,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzD,qCAAqC;IACrC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,qCAAqC;IACrC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,mCAAmC;IACnC,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAEH;;GAEG;AACU,QAAA,+BAA+B,GAAG,OAAC,CAAC,MAAM,CAAC;IACtD,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;IACrB,sBAAsB,EAAE,OAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACvC,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE;IACf,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,eAAe,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC/C,YAAY,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC/C,oBAAoB,EAAE,OAAC,CAAC,OAAO,EAAE;IACjC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAC;AAqBH,+CAA+C;AAC/C,cAAc;AACd,+CAA+C;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAa,0BAA2B,SAAQ,0BAAc;IAC5D,yCAAyC;IAChC,KAAK,CAAS;IAEvB,2DAA2D;IAClD,MAAM,CAAS;IAExB,iEAAiE;IACxD,OAAO,CAAU;IAE1B,6CAA6C;IACpC,cAAc,CAAY;IAEnC,+DAA+D;IACtD,WAAW,CAAc;IAElC,qCAAqC;IAC5B,QAAQ,CAAU;IAE3B,qCAAqC;IAC5B,OAAO,CAAU;IAE1B,mCAAmC;IAC1B,aAAa,CAAU;IAEhC,qDAAqD;IAC5C,mBAAmB,CAAU;IAEtC,YAAY,MAAmC;QAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,UAAU,CAAC;QACrD,MAAM,mBAAmB,GAAG,WAAW,KAAK,UAAU,CAAC;QAEvD,gCAAgC;QAChC,MAAM,cAAc,GAAG,mBAAmB;YACxC,CAAC,CAAC,8BAA8B,MAAM,CAAC,KAAK,6BAA6B,MAAM,CAAC,MAAM,GAAG;YACzF,CAAC,CAAC,iCAAiC,MAAM,CAAC,MAAM,+CAA+C,CAAC;QAElG,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,cAAc,EAAE,wBAAwB,EAAE,GAAG,CAAC,CAAC;QACvE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAE/C,oCAAoC;QACpC,IAAI,mBAAmB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC5C,CAAC;IAED;;;;;;;OAOG;IACM,UAAU,CAAC,aAAuB;QAKzC,mCAAmC;QACnC,IAAI,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7C,WAAW,IAAI,4BAA4B,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5D,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACrC,WAAW,IAAI,iDAAiD,CAAC;QACnE,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,WAAW;iBAClB;aACF;YACD,OAAO,EAAE,IAAa;YACtB,KAAK,EAAE;gBACL,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,wDAAwD;gBACxD,sBAAsB,EAAE,IAAa;gBACrC,GAAG,EAAE,IAAI,CAAC,KAAK;gBACf,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,QAAQ,EAAE,IAAI,CAAC,OAAO;gBACtB,eAAe,EAAE,IAAI,CAAC,cAAc;gBACpC,YAAY,EAAE,IAAI,CAAC,WAAW;gBAC9B,oBAAoB,EAAE,IAAI,CAAC,mBAAmB;gBAC9C,SAAS,EAAE,IAAI,CAAC,QAAQ;gBACxB,eAAe,EAAE,IAAI,CAAC,aAAa;aACpC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,2BAA2B;QACzB,OAAO;YACL,KAAK,EAAE,wBAAwB;YAC/B,GAAG,EAAE,IAAI,CAAC,KAAK;YACf,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAChC,eAAe,EAAE,IAAI,CAAC,cAAc;YACpC,YAAY,EAAE,IAAI,CAAC,WAAW;YAC9B,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,oBAAoB,EAAE,IAAI,CAAC,mBAAmB;SAC/C,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAChC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,OAAO,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACH,oBAAoB;QAClB,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7C,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,gCAAgC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClF,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,mFAAmF,CAAC;IACvH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAa,EAAE,MAAc,EAAE,OAAgB;QACxE,MAAM,OAAO,GAAG,8DAA8D,MAAM,GAAG,CAAC;QACxF,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,OAAO,yEAAyE,OAAO,+CAA+C,CAAC;QACnJ,CAAC;QACD,OAAO,GAAG,OAAO,2CAA2C,CAAC;IAC/D,CAAC;CACF;AArKD,gEAqKC","sourcesContent":["/**\n * Authorization Required Error\n *\n * Thrown when a tool requires app-level authorization that the user has not granted.\n * Used for progressive/incremental authorization flow where users can skip apps\n * during initial auth and authorize later when needed.\n *\n * Behavior depends on session mode:\n * - Stateful: Returns auth_url link for incremental authorization\n * - Stateless: Returns unauthorized error (no link, must re-auth from scratch)\n *\n * Supports MCP elicit flow for clients that support it.\n */\nimport { z } from 'zod';\nimport { PublicMcpError } from './mcp.error';\n\n// ============================================\n// Session Mode Types\n// ============================================\n\n/**\n * Session mode determines how authorization state is stored\n */\nexport type SessionMode = 'stateful' | 'stateless';\n\n/**\n * Elicit response type for clients that support elicit flow\n */\nexport const elicitResponseSchema = z.object({\n /** Elicit request ID for tracking */\n elicitId: z.string(),\n /** Authorization URL to display */\n authUrl: z.string().url(),\n /** Message to display to user */\n message: z.string(),\n /** App being authorized */\n appId: z.string(),\n /** Tool that triggered auth */\n toolId: z.string(),\n});\n\nexport type ElicitResponse = z.infer<typeof elicitResponseSchema>;\n\n// ============================================\n// Schemas\n// ============================================\n\n/**\n * Schema for authorization required response data (stateful mode with link)\n */\nexport const authorizationRequiredDataSchema = z.object({\n /** Error type identifier */\n error: z.literal('authorization_required'),\n /** App ID that requires authorization */\n app: z.string().min(1),\n /** Tool ID that triggered the authorization requirement */\n tool: z.string().min(1),\n /** URL to authorize the app (only in stateful mode) */\n auth_url: z.string().url().optional(),\n /** Human-readable message */\n message: z.string(),\n /** Scopes required by the tool (optional) */\n required_scopes: z.array(z.string()).optional(),\n /** Session mode that determines behavior */\n session_mode: z.enum(['stateful', 'stateless']).optional(),\n /** Whether elicit flow is being used */\n elicit_id: z.string().optional(),\n /** Whether client can use incremental auth link */\n supports_incremental: z.boolean().optional(),\n});\n\n/**\n * Schema for authorization required error constructor params\n */\nexport const authorizationRequiredParamsSchema = z.object({\n appId: z.string().min(1),\n toolId: z.string().min(1),\n authUrl: z.string().optional(),\n requiredScopes: z.array(z.string()).optional(),\n message: z.string().optional(),\n /** Session mode - determines if auth link is included */\n sessionMode: z.enum(['stateful', 'stateless']).optional(),\n /** Elicit ID if using elicit flow */\n elicitId: z.string().optional(),\n /** Vault ID for stateful sessions */\n vaultId: z.string().optional(),\n /** Pending auth ID for tracking */\n pendingAuthId: z.string().optional(),\n});\n\n/**\n * Schema for the _meta field in MCP error response\n */\nexport const authorizationRequiredMetaSchema = z.object({\n errorId: z.string(),\n code: z.string(),\n timestamp: z.string(),\n authorization_required: z.literal(true),\n app: z.string(),\n tool: z.string(),\n auth_url: z.string().optional(),\n required_scopes: z.array(z.string()).optional(),\n session_mode: z.enum(['stateful', 'stateless']),\n supports_incremental: z.boolean(),\n elicit_id: z.string().optional(),\n pending_auth_id: z.string().optional(),\n});\n\n// ============================================\n// Types (inferred from schemas)\n// ============================================\n\n/**\n * Data structure for authorization required responses\n */\nexport type AuthorizationRequiredData = z.infer<typeof authorizationRequiredDataSchema>;\n\n/**\n * Constructor params for AuthorizationRequiredError\n */\nexport type AuthorizationRequiredParams = z.infer<typeof authorizationRequiredParamsSchema>;\n\n/**\n * Meta field type for MCP error response\n */\nexport type AuthorizationRequiredMeta = z.infer<typeof authorizationRequiredMetaSchema>;\n\n// ============================================\n// Error Class\n// ============================================\n\n/**\n * Error thrown when a tool's parent app requires authorization.\n * This enables progressive authorization where users can authorize apps\n * incrementally as needed rather than all at once.\n *\n * Behavior depends on session mode:\n * - **Stateful**: Returns auth_url link for incremental authorization\n * - User can click link to authorize without full re-authentication\n * - Supports elicit flow for interactive authorization\n * - **Stateless**: Returns unauthorized error only\n * - No link provided (all state in JWT, cannot extend)\n * - User must re-authenticate from scratch\n *\n * @example\n * ```typescript\n * // Stateful mode - can provide auth link\n * throw new AuthorizationRequiredError({\n * appId: 'slack',\n * toolId: 'slack:send_message',\n * authUrl: '/oauth/authorize?app=slack',\n * sessionMode: 'stateful',\n * message: 'Please authorize Slack to use this tool.',\n * });\n *\n * // Stateless mode - no link, must re-auth\n * throw new AuthorizationRequiredError({\n * appId: 'slack',\n * toolId: 'slack:send_message',\n * sessionMode: 'stateless',\n * message: 'You are not authorized to use this tool.',\n * });\n * ```\n */\nexport class AuthorizationRequiredError extends PublicMcpError {\n /** App ID that requires authorization */\n readonly appId: string;\n\n /** Tool ID that triggered the authorization requirement */\n readonly toolId: string;\n\n /** URL to authorize the app (only available in stateful mode) */\n readonly authUrl?: string;\n\n /** Scopes required by the tool (optional) */\n readonly requiredScopes?: string[];\n\n /** Session mode determines if incremental auth is supported */\n readonly sessionMode: SessionMode;\n\n /** Elicit ID if using elicit flow */\n readonly elicitId?: string;\n\n /** Vault ID for stateful sessions */\n readonly vaultId?: string;\n\n /** Pending auth ID for tracking */\n readonly pendingAuthId?: string;\n\n /** Whether incremental authorization is supported */\n readonly supportsIncremental: boolean;\n\n constructor(params: AuthorizationRequiredParams) {\n const sessionMode = params.sessionMode ?? 'stateful';\n const supportsIncremental = sessionMode === 'stateful';\n\n // Message differs based on mode\n const defaultMessage = supportsIncremental\n ? `Authorization required for ${params.appId}. Please authorize to use ${params.toolId}.`\n : `You are not authorized to use ${params.toolId}. Please re-authenticate to access this tool.`;\n\n super(params.message || defaultMessage, 'AUTHORIZATION_REQUIRED', 403);\n this.appId = params.appId;\n this.toolId = params.toolId;\n this.sessionMode = sessionMode;\n this.supportsIncremental = supportsIncremental;\n\n // Only set authUrl in stateful mode\n if (supportsIncremental && params.authUrl) {\n this.authUrl = params.authUrl;\n }\n\n this.requiredScopes = params.requiredScopes;\n this.elicitId = params.elicitId;\n this.vaultId = params.vaultId;\n this.pendingAuthId = params.pendingAuthId;\n }\n\n /**\n * Convert to MCP error response format with authorization metadata.\n * The _meta field includes structured data that AI agents can use\n * to prompt users for authorization.\n *\n * In stateful mode: includes auth_url for AI to display\n * In stateless mode: no auth_url, AI should inform user to re-authenticate\n */\n override toMcpError(isDevelopment?: boolean): {\n content: Array<{ type: 'text'; text: string }>;\n isError: true;\n _meta: AuthorizationRequiredMeta;\n } {\n // Build content text based on mode\n let contentText = this.getPublicMessage();\n if (this.supportsIncremental && this.authUrl) {\n contentText += `\\n\\nTo authorize, click: ${this.authUrl}`;\n } else if (!this.supportsIncremental) {\n contentText += '\\n\\nPlease re-authenticate to access this tool.';\n }\n\n return {\n content: [\n {\n type: 'text' as const,\n text: contentText,\n },\n ],\n isError: true as const,\n _meta: {\n errorId: this.errorId,\n code: this.code,\n timestamp: new Date().toISOString(),\n // Progressive auth specific fields for AI agents to use\n authorization_required: true as const,\n app: this.appId,\n tool: this.toolId,\n auth_url: this.authUrl,\n required_scopes: this.requiredScopes,\n session_mode: this.sessionMode,\n supports_incremental: this.supportsIncremental,\n elicit_id: this.elicitId,\n pending_auth_id: this.pendingAuthId,\n },\n };\n }\n\n /**\n * Convert to structured authorization required data\n */\n toAuthorizationRequiredData(): AuthorizationRequiredData {\n return {\n error: 'authorization_required',\n app: this.appId,\n tool: this.toolId,\n auth_url: this.authUrl,\n message: this.getPublicMessage(),\n required_scopes: this.requiredScopes,\n session_mode: this.sessionMode,\n elicit_id: this.elicitId,\n supports_incremental: this.supportsIncremental,\n };\n }\n\n /**\n * Create an elicit response for clients that support it\n * Only available in stateful mode\n */\n toElicitResponse(): ElicitResponse | null {\n if (!this.supportsIncremental || !this.authUrl || !this.elicitId) {\n return null;\n }\n\n return {\n elicitId: this.elicitId,\n authUrl: this.authUrl,\n message: this.getPublicMessage(),\n appId: this.appId,\n toolId: this.toolId,\n };\n }\n\n /**\n * Check if this error can be resolved via incremental auth link\n */\n canUseIncrementalAuth(): boolean {\n return this.supportsIncremental && !!this.authUrl;\n }\n\n /**\n * Get user-facing message based on mode\n * - Stateful: includes link text\n * - Stateless: tells user to re-authenticate\n */\n getUserFacingMessage(): string {\n if (this.supportsIncremental && this.authUrl) {\n return `${this.getPublicMessage()}\\n\\nClick here to authorize: ${this.authUrl}`;\n }\n return `${this.getPublicMessage()}\\n\\nYou are not authorized to use this tool. Please re-authenticate to access it.`;\n }\n\n /**\n * Get message for cancelled authorization\n */\n static getCancelledMessage(appId: string, toolId: string, authUrl?: string): string {\n const baseMsg = `Authorization was cancelled. You are not authorized to use ${toolId}.`;\n if (authUrl) {\n return `${baseMsg}\\n\\nIf you still want to use this tool, click this link to authorize: ${authUrl}\\n\\nThen re-prompt your request to try again.`;\n }\n return `${baseMsg}\\n\\nPlease re-authenticate and try again.`;\n }\n}\n"]}
@@ -1,2 +1,3 @@
1
- export { McpError, PublicMcpError, InternalMcpError, ToolNotFoundError, InvalidInputError, InvalidOutputError, InvalidMethodError, ToolExecutionError, RateLimitError, QuotaExceededError, UnauthorizedError, GenericServerError, isPublicError, toMcpError, formatMcpErrorResponse, } from './mcp.error';
1
+ export { McpError, PublicMcpError, InternalMcpError, ToolNotFoundError, ResourceNotFoundError, ResourceReadError, InvalidResourceUriError, InvalidInputError, InvalidOutputError, InvalidMethodError, ToolExecutionError, RateLimitError, QuotaExceededError, UnauthorizedError, GenericServerError, DependencyNotFoundError, InvalidHookFlowError, AuthConfigurationError, PromptNotFoundError, PromptExecutionError, isPublicError, toMcpError, formatMcpErrorResponse, } from './mcp.error';
2
+ export { authorizationRequiredDataSchema, authorizationRequiredParamsSchema, authorizationRequiredMetaSchema, AuthorizationRequiredData, AuthorizationRequiredParams, AuthorizationRequiredMeta, AuthorizationRequiredError, } from './authorization-required.error';
2
3
  export { ErrorHandler, ErrorHandlerOptions, createErrorHandler, shouldStopExecution } from './error-handler';
@@ -1,12 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.shouldStopExecution = exports.createErrorHandler = exports.ErrorHandler = exports.formatMcpErrorResponse = exports.toMcpError = exports.isPublicError = exports.GenericServerError = exports.UnauthorizedError = exports.QuotaExceededError = exports.RateLimitError = exports.ToolExecutionError = exports.InvalidMethodError = exports.InvalidOutputError = exports.InvalidInputError = exports.ToolNotFoundError = exports.InternalMcpError = exports.PublicMcpError = exports.McpError = void 0;
3
+ exports.shouldStopExecution = exports.createErrorHandler = exports.ErrorHandler = exports.AuthorizationRequiredError = exports.authorizationRequiredMetaSchema = exports.authorizationRequiredParamsSchema = exports.authorizationRequiredDataSchema = exports.formatMcpErrorResponse = exports.toMcpError = exports.isPublicError = exports.PromptExecutionError = exports.PromptNotFoundError = exports.AuthConfigurationError = exports.InvalidHookFlowError = exports.DependencyNotFoundError = exports.GenericServerError = exports.UnauthorizedError = exports.QuotaExceededError = exports.RateLimitError = exports.ToolExecutionError = exports.InvalidMethodError = exports.InvalidOutputError = exports.InvalidInputError = exports.InvalidResourceUriError = exports.ResourceReadError = exports.ResourceNotFoundError = exports.ToolNotFoundError = exports.InternalMcpError = exports.PublicMcpError = exports.McpError = void 0;
4
4
  // Export all error classes
5
5
  var mcp_error_1 = require("./mcp.error");
6
6
  Object.defineProperty(exports, "McpError", { enumerable: true, get: function () { return mcp_error_1.McpError; } });
7
7
  Object.defineProperty(exports, "PublicMcpError", { enumerable: true, get: function () { return mcp_error_1.PublicMcpError; } });
8
8
  Object.defineProperty(exports, "InternalMcpError", { enumerable: true, get: function () { return mcp_error_1.InternalMcpError; } });
9
9
  Object.defineProperty(exports, "ToolNotFoundError", { enumerable: true, get: function () { return mcp_error_1.ToolNotFoundError; } });
10
+ Object.defineProperty(exports, "ResourceNotFoundError", { enumerable: true, get: function () { return mcp_error_1.ResourceNotFoundError; } });
11
+ Object.defineProperty(exports, "ResourceReadError", { enumerable: true, get: function () { return mcp_error_1.ResourceReadError; } });
12
+ Object.defineProperty(exports, "InvalidResourceUriError", { enumerable: true, get: function () { return mcp_error_1.InvalidResourceUriError; } });
10
13
  Object.defineProperty(exports, "InvalidInputError", { enumerable: true, get: function () { return mcp_error_1.InvalidInputError; } });
11
14
  Object.defineProperty(exports, "InvalidOutputError", { enumerable: true, get: function () { return mcp_error_1.InvalidOutputError; } });
12
15
  Object.defineProperty(exports, "InvalidMethodError", { enumerable: true, get: function () { return mcp_error_1.InvalidMethodError; } });
@@ -15,9 +18,22 @@ Object.defineProperty(exports, "RateLimitError", { enumerable: true, get: functi
15
18
  Object.defineProperty(exports, "QuotaExceededError", { enumerable: true, get: function () { return mcp_error_1.QuotaExceededError; } });
16
19
  Object.defineProperty(exports, "UnauthorizedError", { enumerable: true, get: function () { return mcp_error_1.UnauthorizedError; } });
17
20
  Object.defineProperty(exports, "GenericServerError", { enumerable: true, get: function () { return mcp_error_1.GenericServerError; } });
21
+ Object.defineProperty(exports, "DependencyNotFoundError", { enumerable: true, get: function () { return mcp_error_1.DependencyNotFoundError; } });
22
+ Object.defineProperty(exports, "InvalidHookFlowError", { enumerable: true, get: function () { return mcp_error_1.InvalidHookFlowError; } });
23
+ Object.defineProperty(exports, "AuthConfigurationError", { enumerable: true, get: function () { return mcp_error_1.AuthConfigurationError; } });
24
+ Object.defineProperty(exports, "PromptNotFoundError", { enumerable: true, get: function () { return mcp_error_1.PromptNotFoundError; } });
25
+ Object.defineProperty(exports, "PromptExecutionError", { enumerable: true, get: function () { return mcp_error_1.PromptExecutionError; } });
18
26
  Object.defineProperty(exports, "isPublicError", { enumerable: true, get: function () { return mcp_error_1.isPublicError; } });
19
27
  Object.defineProperty(exports, "toMcpError", { enumerable: true, get: function () { return mcp_error_1.toMcpError; } });
20
28
  Object.defineProperty(exports, "formatMcpErrorResponse", { enumerable: true, get: function () { return mcp_error_1.formatMcpErrorResponse; } });
29
+ // Export authorization required error for progressive auth
30
+ var authorization_required_error_1 = require("./authorization-required.error");
31
+ // Schemas
32
+ Object.defineProperty(exports, "authorizationRequiredDataSchema", { enumerable: true, get: function () { return authorization_required_error_1.authorizationRequiredDataSchema; } });
33
+ Object.defineProperty(exports, "authorizationRequiredParamsSchema", { enumerable: true, get: function () { return authorization_required_error_1.authorizationRequiredParamsSchema; } });
34
+ Object.defineProperty(exports, "authorizationRequiredMetaSchema", { enumerable: true, get: function () { return authorization_required_error_1.authorizationRequiredMetaSchema; } });
35
+ // Error class
36
+ Object.defineProperty(exports, "AuthorizationRequiredError", { enumerable: true, get: function () { return authorization_required_error_1.AuthorizationRequiredError; } });
21
37
  // Export error handler utilities
22
38
  var error_handler_1 = require("./error-handler");
23
39
  Object.defineProperty(exports, "ErrorHandler", { enumerable: true, get: function () { return error_handler_1.ErrorHandler; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AAC3B,yCAgBqB;AAfnB,qGAAA,QAAQ,OAAA;AACR,2GAAA,cAAc,OAAA;AACd,6GAAA,gBAAgB,OAAA;AAChB,8GAAA,iBAAiB,OAAA;AACjB,8GAAA,iBAAiB,OAAA;AACjB,+GAAA,kBAAkB,OAAA;AAClB,+GAAA,kBAAkB,OAAA;AAClB,+GAAA,kBAAkB,OAAA;AAClB,2GAAA,cAAc,OAAA;AACd,+GAAA,kBAAkB,OAAA;AAClB,8GAAA,iBAAiB,OAAA;AACjB,+GAAA,kBAAkB,OAAA;AAClB,0GAAA,aAAa,OAAA;AACb,uGAAA,UAAU,OAAA;AACV,mHAAA,sBAAsB,OAAA;AAGxB,iCAAiC;AACjC,iDAA6G;AAApG,6GAAA,YAAY,OAAA;AAAuB,mHAAA,kBAAkB,OAAA;AAAE,oHAAA,mBAAmB,OAAA","sourcesContent":["// Export all error classes\nexport {\n McpError,\n PublicMcpError,\n InternalMcpError,\n ToolNotFoundError,\n InvalidInputError,\n InvalidOutputError,\n InvalidMethodError,\n ToolExecutionError,\n RateLimitError,\n QuotaExceededError,\n UnauthorizedError,\n GenericServerError,\n isPublicError,\n toMcpError,\n formatMcpErrorResponse,\n} from './mcp.error';\n\n// Export error handler utilities\nexport { ErrorHandler, ErrorHandlerOptions, createErrorHandler, shouldStopExecution } from './error-handler';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AAC3B,yCAwBqB;AAvBnB,qGAAA,QAAQ,OAAA;AACR,2GAAA,cAAc,OAAA;AACd,6GAAA,gBAAgB,OAAA;AAChB,8GAAA,iBAAiB,OAAA;AACjB,kHAAA,qBAAqB,OAAA;AACrB,8GAAA,iBAAiB,OAAA;AACjB,oHAAA,uBAAuB,OAAA;AACvB,8GAAA,iBAAiB,OAAA;AACjB,+GAAA,kBAAkB,OAAA;AAClB,+GAAA,kBAAkB,OAAA;AAClB,+GAAA,kBAAkB,OAAA;AAClB,2GAAA,cAAc,OAAA;AACd,+GAAA,kBAAkB,OAAA;AAClB,8GAAA,iBAAiB,OAAA;AACjB,+GAAA,kBAAkB,OAAA;AAClB,oHAAA,uBAAuB,OAAA;AACvB,iHAAA,oBAAoB,OAAA;AACpB,mHAAA,sBAAsB,OAAA;AACtB,gHAAA,mBAAmB,OAAA;AACnB,iHAAA,oBAAoB,OAAA;AACpB,0GAAA,aAAa,OAAA;AACb,uGAAA,UAAU,OAAA;AACV,mHAAA,sBAAsB,OAAA;AAGxB,2DAA2D;AAC3D,+EAWwC;AAVtC,UAAU;AACV,+IAAA,+BAA+B,OAAA;AAC/B,iJAAA,iCAAiC,OAAA;AACjC,+IAAA,+BAA+B,OAAA;AAK/B,cAAc;AACd,0IAAA,0BAA0B,OAAA;AAG5B,iCAAiC;AACjC,iDAA6G;AAApG,6GAAA,YAAY,OAAA;AAAuB,mHAAA,kBAAkB,OAAA;AAAE,oHAAA,mBAAmB,OAAA","sourcesContent":["// Export all error classes\nexport {\n McpError,\n PublicMcpError,\n InternalMcpError,\n ToolNotFoundError,\n ResourceNotFoundError,\n ResourceReadError,\n InvalidResourceUriError,\n InvalidInputError,\n InvalidOutputError,\n InvalidMethodError,\n ToolExecutionError,\n RateLimitError,\n QuotaExceededError,\n UnauthorizedError,\n GenericServerError,\n DependencyNotFoundError,\n InvalidHookFlowError,\n AuthConfigurationError,\n PromptNotFoundError,\n PromptExecutionError,\n isPublicError,\n toMcpError,\n formatMcpErrorResponse,\n} from './mcp.error';\n\n// Export authorization required error for progressive auth\nexport {\n // Schemas\n authorizationRequiredDataSchema,\n authorizationRequiredParamsSchema,\n authorizationRequiredMetaSchema,\n // Types (inferred from schemas)\n AuthorizationRequiredData,\n AuthorizationRequiredParams,\n AuthorizationRequiredMeta,\n // Error class\n AuthorizationRequiredError,\n} from './authorization-required.error';\n\n// Export error handler utilities\nexport { ErrorHandler, ErrorHandlerOptions, createErrorHandler, shouldStopExecution } from './error-handler';\n"]}