@ulearning/ai-vue-mcp 0.0.0-stage → 1.0.0-next.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.
- package/LICENSE +21 -0
- package/dist/_virtual/_rolldown/runtime.js +12 -0
- package/dist/auth/buildHeaders.d.ts +9 -0
- package/dist/auth/buildHeaders.d.ts.map +1 -0
- package/dist/auth/buildHeaders.js +16 -0
- package/dist/auth/buildHeaders.js.map +1 -0
- package/dist/auth/createOAuthProvider.d.ts +40 -0
- package/dist/auth/createOAuthProvider.d.ts.map +1 -0
- package/dist/auth/createOAuthProvider.js +301 -0
- package/dist/auth/createOAuthProvider.js.map +1 -0
- package/dist/auth/types.d.ts +15 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +0 -0
- package/dist/connector.d.ts +3 -0
- package/dist/connector.d.ts.map +1 -0
- package/dist/connector.js +9 -0
- package/dist/connector.js.map +1 -0
- package/dist/context/McpConnectorByIndexProvider.d.ts +9 -0
- package/dist/context/McpConnectorByIndexProvider.d.ts.map +1 -0
- package/dist/context/McpConnectorByIndexProvider.js +29 -0
- package/dist/context/McpConnectorByIndexProvider.js.map +1 -0
- package/dist/context/McpCustomServerByIndexProvider.d.ts +9 -0
- package/dist/context/McpCustomServerByIndexProvider.d.ts.map +1 -0
- package/dist/context/McpCustomServerByIndexProvider.js +29 -0
- package/dist/context/McpCustomServerByIndexProvider.js.map +1 -0
- package/dist/context/McpServerByIdProvider.d.ts +9 -0
- package/dist/context/McpServerByIdProvider.d.ts.map +1 -0
- package/dist/context/McpServerByIdProvider.js +26 -0
- package/dist/context/McpServerByIdProvider.js.map +1 -0
- package/dist/context/useMcpChildren.d.ts +3 -0
- package/dist/context/useMcpChildren.d.ts.map +1 -0
- package/dist/context/useMcpChildren.js +9 -0
- package/dist/context/useMcpChildren.js.map +1 -0
- package/dist/hooks/useMcpOAuthCallback.d.ts +23 -0
- package/dist/hooks/useMcpOAuthCallback.d.ts.map +1 -0
- package/dist/hooks/useMcpOAuthCallback.js +102 -0
- package/dist/hooks/useMcpOAuthCallback.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/mcp-scope.d.ts +151 -0
- package/dist/mcp-scope.d.ts.map +1 -0
- package/dist/mcp-scope.js +1 -0
- package/dist/primitives/addForm/McpAddFormAuthFields.d.ts +8 -0
- package/dist/primitives/addForm/McpAddFormAuthFields.d.ts.map +1 -0
- package/dist/primitives/addForm/McpAddFormAuthFields.js +30 -0
- package/dist/primitives/addForm/McpAddFormAuthFields.js.map +1 -0
- package/dist/primitives/addForm/McpAddFormAuthSelect.d.ts +16 -0
- package/dist/primitives/addForm/McpAddFormAuthSelect.d.ts.map +1 -0
- package/dist/primitives/addForm/McpAddFormAuthSelect.js +35 -0
- package/dist/primitives/addForm/McpAddFormAuthSelect.js.map +1 -0
- package/dist/primitives/addForm/McpAddFormBearerTokenField.d.ts +16 -0
- package/dist/primitives/addForm/McpAddFormBearerTokenField.d.ts.map +1 -0
- package/dist/primitives/addForm/McpAddFormBearerTokenField.js +32 -0
- package/dist/primitives/addForm/McpAddFormBearerTokenField.js.map +1 -0
- package/dist/primitives/addForm/McpAddFormCancel.d.ts +16 -0
- package/dist/primitives/addForm/McpAddFormCancel.d.ts.map +1 -0
- package/dist/primitives/addForm/McpAddFormCancel.js +34 -0
- package/dist/primitives/addForm/McpAddFormCancel.js.map +1 -0
- package/dist/primitives/addForm/McpAddFormError.d.ts +16 -0
- package/dist/primitives/addForm/McpAddFormError.d.ts.map +1 -0
- package/dist/primitives/addForm/McpAddFormError.js +36 -0
- package/dist/primitives/addForm/McpAddFormError.js.map +1 -0
- package/dist/primitives/addForm/McpAddFormNameField.d.ts +16 -0
- package/dist/primitives/addForm/McpAddFormNameField.d.ts.map +1 -0
- package/dist/primitives/addForm/McpAddFormNameField.js +35 -0
- package/dist/primitives/addForm/McpAddFormNameField.js.map +1 -0
- package/dist/primitives/addForm/McpAddFormRoot.d.ts +20 -0
- package/dist/primitives/addForm/McpAddFormRoot.d.ts.map +1 -0
- package/dist/primitives/addForm/McpAddFormRoot.js +158 -0
- package/dist/primitives/addForm/McpAddFormRoot.js.map +1 -0
- package/dist/primitives/addForm/McpAddFormScopesField.d.ts +16 -0
- package/dist/primitives/addForm/McpAddFormScopesField.d.ts.map +1 -0
- package/dist/primitives/addForm/McpAddFormScopesField.js +33 -0
- package/dist/primitives/addForm/McpAddFormScopesField.js.map +1 -0
- package/dist/primitives/addForm/McpAddFormSubmit.d.ts +16 -0
- package/dist/primitives/addForm/McpAddFormSubmit.d.ts.map +1 -0
- package/dist/primitives/addForm/McpAddFormSubmit.js +32 -0
- package/dist/primitives/addForm/McpAddFormSubmit.js.map +1 -0
- package/dist/primitives/addForm/McpAddFormUrlField.d.ts +16 -0
- package/dist/primitives/addForm/McpAddFormUrlField.d.ts.map +1 -0
- package/dist/primitives/addForm/McpAddFormUrlField.js +36 -0
- package/dist/primitives/addForm/McpAddFormUrlField.js.map +1 -0
- package/dist/primitives/addForm/context.d.ts +30 -0
- package/dist/primitives/addForm/context.d.ts.map +1 -0
- package/dist/primitives/addForm/context.js +11 -0
- package/dist/primitives/addForm/context.js.map +1 -0
- package/dist/primitives/addForm.d.ts +11 -0
- package/dist/primitives/addForm.d.ts.map +1 -0
- package/dist/primitives/addForm.js +27 -0
- package/dist/primitives/addForm.js.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveAccept.d.ts +16 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveAccept.d.ts.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveAccept.js +46 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveAccept.js.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveCancel.d.ts +16 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveCancel.d.ts.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveCancel.js +36 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveCancel.js.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveDecline.d.ts +16 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveDecline.d.ts.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveDecline.js +36 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveDecline.js.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveError.d.ts +16 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveError.d.ts.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveError.js +31 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveError.js.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveFields.d.ts +10 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveFields.d.ts.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveFields.js +39 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveFields.js.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveItems.d.ts +10 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveItems.d.ts.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveItems.js +36 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveItems.js.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveMessage.d.ts +16 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveMessage.d.ts.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveMessage.js +28 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveMessage.js.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveRoot.d.ts +16 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveRoot.d.ts.map +1 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveRoot.js +32 -0
- package/dist/primitives/elicitation/McpElicitationPrimitiveRoot.js.map +1 -0
- package/dist/primitives/elicitation/context.d.ts +19 -0
- package/dist/primitives/elicitation/context.d.ts.map +1 -0
- package/dist/primitives/elicitation/context.js +21 -0
- package/dist/primitives/elicitation/context.js.map +1 -0
- package/dist/primitives/elicitation/initialElicitationDraft.d.ts +2 -0
- package/dist/primitives/elicitation/initialElicitationDraft.d.ts.map +1 -0
- package/dist/primitives/elicitation/initialElicitationDraft.js +26 -0
- package/dist/primitives/elicitation/initialElicitationDraft.js.map +1 -0
- package/dist/primitives/elicitation/prepareElicitationContent.d.ts +6 -0
- package/dist/primitives/elicitation/prepareElicitationContent.d.ts.map +1 -0
- package/dist/primitives/elicitation/prepareElicitationContent.js +49 -0
- package/dist/primitives/elicitation/prepareElicitationContent.js.map +1 -0
- package/dist/primitives/elicitation.d.ts +9 -0
- package/dist/primitives/elicitation.d.ts.map +1 -0
- package/dist/primitives/elicitation.js +26 -0
- package/dist/primitives/elicitation.js.map +1 -0
- package/dist/primitives/manager/McpManagerAddCustomTrigger.d.ts +16 -0
- package/dist/primitives/manager/McpManagerAddCustomTrigger.d.ts.map +1 -0
- package/dist/primitives/manager/McpManagerAddCustomTrigger.js +30 -0
- package/dist/primitives/manager/McpManagerAddCustomTrigger.js.map +1 -0
- package/dist/primitives/manager/McpManagerConnectors.d.ts +11 -0
- package/dist/primitives/manager/McpManagerConnectors.d.ts.map +1 -0
- package/dist/primitives/manager/McpManagerConnectors.js +26 -0
- package/dist/primitives/manager/McpManagerConnectors.js.map +1 -0
- package/dist/primitives/manager/McpManagerCustomServers.d.ts +11 -0
- package/dist/primitives/manager/McpManagerCustomServers.d.ts.map +1 -0
- package/dist/primitives/manager/McpManagerCustomServers.js +26 -0
- package/dist/primitives/manager/McpManagerCustomServers.js.map +1 -0
- package/dist/primitives/manager/McpManagerRoot.d.ts +16 -0
- package/dist/primitives/manager/McpManagerRoot.d.ts.map +1 -0
- package/dist/primitives/manager/McpManagerRoot.js +32 -0
- package/dist/primitives/manager/McpManagerRoot.js.map +1 -0
- package/dist/primitives/manager.d.ts +5 -0
- package/dist/primitives/manager.d.ts.map +1 -0
- package/dist/primitives/manager.js +15 -0
- package/dist/primitives/manager.js.map +1 -0
- package/dist/primitives/server/McpServerConnectButton.d.ts +16 -0
- package/dist/primitives/server/McpServerConnectButton.d.ts.map +1 -0
- package/dist/primitives/server/McpServerConnectButton.js +42 -0
- package/dist/primitives/server/McpServerConnectButton.js.map +1 -0
- package/dist/primitives/server/McpServerDisconnectButton.d.ts +16 -0
- package/dist/primitives/server/McpServerDisconnectButton.d.ts.map +1 -0
- package/dist/primitives/server/McpServerDisconnectButton.js +41 -0
- package/dist/primitives/server/McpServerDisconnectButton.js.map +1 -0
- package/dist/primitives/server/McpServerError.d.ts +16 -0
- package/dist/primitives/server/McpServerError.d.ts.map +1 -0
- package/dist/primitives/server/McpServerError.js +29 -0
- package/dist/primitives/server/McpServerError.js.map +1 -0
- package/dist/primitives/server/McpServerIcon.d.ts +16 -0
- package/dist/primitives/server/McpServerIcon.d.ts.map +1 -0
- package/dist/primitives/server/McpServerIcon.js +38 -0
- package/dist/primitives/server/McpServerIcon.js.map +1 -0
- package/dist/primitives/server/McpServerName.d.ts +16 -0
- package/dist/primitives/server/McpServerName.d.ts.map +1 -0
- package/dist/primitives/server/McpServerName.js +28 -0
- package/dist/primitives/server/McpServerName.js.map +1 -0
- package/dist/primitives/server/McpServerOAuthLink.d.ts +16 -0
- package/dist/primitives/server/McpServerOAuthLink.d.ts.map +1 -0
- package/dist/primitives/server/McpServerOAuthLink.js +35 -0
- package/dist/primitives/server/McpServerOAuthLink.js.map +1 -0
- package/dist/primitives/server/McpServerRemoveButton.d.ts +16 -0
- package/dist/primitives/server/McpServerRemoveButton.d.ts.map +1 -0
- package/dist/primitives/server/McpServerRemoveButton.js +37 -0
- package/dist/primitives/server/McpServerRemoveButton.js.map +1 -0
- package/dist/primitives/server/McpServerRoot.d.ts +16 -0
- package/dist/primitives/server/McpServerRoot.d.ts.map +1 -0
- package/dist/primitives/server/McpServerRoot.js +40 -0
- package/dist/primitives/server/McpServerRoot.js.map +1 -0
- package/dist/primitives/server/McpServerStatus.d.ts +16 -0
- package/dist/primitives/server/McpServerStatus.d.ts.map +1 -0
- package/dist/primitives/server/McpServerStatus.js +29 -0
- package/dist/primitives/server/McpServerStatus.js.map +1 -0
- package/dist/primitives/server/McpServerToolName.d.ts +16 -0
- package/dist/primitives/server/McpServerToolName.d.ts.map +1 -0
- package/dist/primitives/server/McpServerToolName.js +29 -0
- package/dist/primitives/server/McpServerToolName.js.map +1 -0
- package/dist/primitives/server/McpServerTools.d.ts +10 -0
- package/dist/primitives/server/McpServerTools.d.ts.map +1 -0
- package/dist/primitives/server/McpServerTools.js +26 -0
- package/dist/primitives/server/McpServerTools.js.map +1 -0
- package/dist/primitives/server.d.ts +12 -0
- package/dist/primitives/server.d.ts.map +1 -0
- package/dist/primitives/server.js +30 -0
- package/dist/primitives/server.js.map +1 -0
- package/dist/resources/McpCustomServerPersistence.d.ts +17 -0
- package/dist/resources/McpCustomServerPersistence.d.ts.map +1 -0
- package/dist/resources/McpCustomServerPersistence.js +132 -0
- package/dist/resources/McpCustomServerPersistence.js.map +1 -0
- package/dist/resources/McpElicitationLifecycle.d.ts +12 -0
- package/dist/resources/McpElicitationLifecycle.d.ts.map +1 -0
- package/dist/resources/McpElicitationLifecycle.js +97 -0
- package/dist/resources/McpElicitationLifecycle.js.map +1 -0
- package/dist/resources/McpManagerResource.d.ts +15 -0
- package/dist/resources/McpManagerResource.d.ts.map +1 -0
- package/dist/resources/McpManagerResource.js +190 -0
- package/dist/resources/McpManagerResource.js.map +1 -0
- package/dist/resources/McpServerRemovalFence.d.ts +4 -0
- package/dist/resources/McpServerRemovalFence.d.ts.map +1 -0
- package/dist/resources/McpServerRemovalFence.js +10 -0
- package/dist/resources/McpServerRemovalFence.js.map +1 -0
- package/dist/resources/McpServerResource.d.ts +24 -0
- package/dist/resources/McpServerResource.d.ts.map +1 -0
- package/dist/resources/McpServerResource.js +445 -0
- package/dist/resources/McpServerResource.js.map +1 -0
- package/dist/resources/storage/McpCustomStorage.d.ts +3 -0
- package/dist/resources/storage/McpCustomStorage.d.ts.map +1 -0
- package/dist/resources/storage/McpCustomStorage.js +9 -0
- package/dist/resources/storage/McpCustomStorage.js.map +1 -0
- package/dist/resources/storage/McpLocalStorage.d.ts +17 -0
- package/dist/resources/storage/McpLocalStorage.d.ts.map +1 -0
- package/dist/resources/storage/McpLocalStorage.js +65 -0
- package/dist/resources/storage/McpLocalStorage.js.map +1 -0
- package/dist/resources/storage/McpMemoryStorage.d.ts +3 -0
- package/dist/resources/storage/McpMemoryStorage.d.ts.map +1 -0
- package/dist/resources/storage/McpMemoryStorage.js +25 -0
- package/dist/resources/storage/McpMemoryStorage.js.map +1 -0
- package/dist/resources/storage/McpStoredDataNormalization.d.ts +5 -0
- package/dist/resources/storage/McpStoredDataNormalization.d.ts.map +1 -0
- package/dist/resources/storage/McpStoredDataNormalization.js +94 -0
- package/dist/resources/storage/McpStoredDataNormalization.js.map +1 -0
- package/dist/resources/storage/types.d.ts +26 -0
- package/dist/resources/storage/types.d.ts.map +1 -0
- package/dist/resources/storage/types.js +1 -0
- package/dist/resources/validateElicitationContent.d.ts +7 -0
- package/dist/resources/validateElicitationContent.d.ts.map +1 -0
- package/dist/resources/validateElicitationContent.js +46 -0
- package/dist/resources/validateElicitationContent.js.map +1 -0
- package/dist/utils/createMcpId.d.ts +6 -0
- package/dist/utils/createMcpId.d.ts.map +1 -0
- package/dist/utils/createMcpId.js +10 -0
- package/dist/utils/createMcpId.js.map +1 -0
- package/dist/utils/invokeMcpCallback.d.ts +2 -0
- package/dist/utils/invokeMcpCallback.d.ts.map +1 -0
- package/dist/utils/invokeMcpCallback.js +8 -0
- package/dist/utils/invokeMcpCallback.js.map +1 -0
- package/dist/utils/serverId.d.ts +3 -0
- package/dist/utils/serverId.d.ts.map +1 -0
- package/dist/utils/serverId.js +16 -0
- package/dist/utils/serverId.js.map +1 -0
- package/dist/utils/serverUrl.d.ts +6 -0
- package/dist/utils/serverUrl.d.ts.map +1 -0
- package/dist/utils/serverUrl.js +28 -0
- package/dist/utils/serverUrl.js.map +1 -0
- package/dist/utils/toToolSchema.d.ts +11 -0
- package/dist/utils/toToolSchema.d.ts.map +1 -0
- package/dist/utils/toToolSchema.js +96 -0
- package/dist/utils/toToolSchema.js.map +1 -0
- package/dist/utils/toolName.d.ts +14 -0
- package/dist/utils/toolName.d.ts.map +1 -0
- package/dist/utils/toolName.js +25 -0
- package/dist/utils/toolName.js.map +1 -0
- package/package.json +82 -3
- package/src/__tests__/vue.ts +47 -0
- package/src/auth/buildHeaders.ts +19 -0
- package/src/auth/createOAuthProvider.test.ts +1029 -0
- package/src/auth/createOAuthProvider.ts +481 -0
- package/src/auth/types.ts +19 -0
- package/src/connector.ts +7 -0
- package/src/context/McpConnectorByIndexProvider.tsx +25 -0
- package/src/context/McpCustomServerByIndexProvider.tsx +25 -0
- package/src/context/McpServerByIdProvider.tsx +25 -0
- package/src/context/providers.children.test.tsx +135 -0
- package/src/context/useMcpChildren.ts +9 -0
- package/src/hooks/useMcpOAuthCallback.test.ts +446 -0
- package/src/hooks/useMcpOAuthCallback.tsx +157 -0
- package/src/index.ts +71 -0
- package/src/mcp-scope.ts +151 -0
- package/src/primitives/addForm/McpAddFormAccessibility.test.tsx +314 -0
- package/src/primitives/addForm/McpAddFormAuthFields.tsx +35 -0
- package/src/primitives/addForm/McpAddFormAuthSelect.tsx +49 -0
- package/src/primitives/addForm/McpAddFormBearerTokenField.tsx +53 -0
- package/src/primitives/addForm/McpAddFormCancel.tsx +39 -0
- package/src/primitives/addForm/McpAddFormError.tsx +57 -0
- package/src/primitives/addForm/McpAddFormNameField.tsx +50 -0
- package/src/primitives/addForm/McpAddFormRoot.test.tsx +217 -0
- package/src/primitives/addForm/McpAddFormRoot.tsx +177 -0
- package/src/primitives/addForm/McpAddFormScopesField.tsx +44 -0
- package/src/primitives/addForm/McpAddFormSubmit.disabled.test.tsx +171 -0
- package/src/primitives/addForm/McpAddFormSubmit.tsx +37 -0
- package/src/primitives/addForm/McpAddFormUrlField.tsx +58 -0
- package/src/primitives/addForm/context.tsx +48 -0
- package/src/primitives/addForm.ts +10 -0
- package/src/primitives/elicitation/McpElicitationPrimitiveAccept.tsx +55 -0
- package/src/primitives/elicitation/McpElicitationPrimitiveCancel.tsx +44 -0
- package/src/primitives/elicitation/McpElicitationPrimitiveDecline.tsx +44 -0
- package/src/primitives/elicitation/McpElicitationPrimitiveError.tsx +39 -0
- package/src/primitives/elicitation/McpElicitationPrimitiveFields.tsx +65 -0
- package/src/primitives/elicitation/McpElicitationPrimitiveItems.test.tsx +124 -0
- package/src/primitives/elicitation/McpElicitationPrimitiveItems.tsx +50 -0
- package/src/primitives/elicitation/McpElicitationPrimitiveMessage.tsx +39 -0
- package/src/primitives/elicitation/McpElicitationPrimitiveRoot.tsx +37 -0
- package/src/primitives/elicitation/context.tsx +45 -0
- package/src/primitives/elicitation/initialElicitationDraft.test.ts +34 -0
- package/src/primitives/elicitation/initialElicitationDraft.ts +39 -0
- package/src/primitives/elicitation/prepareElicitationContent.test.ts +415 -0
- package/src/primitives/elicitation/prepareElicitationContent.ts +118 -0
- package/src/primitives/elicitation.ts +14 -0
- package/src/primitives/manager/McpManagerAddCustomTrigger.tsx +37 -0
- package/src/primitives/manager/McpManagerConnectors.tsx +48 -0
- package/src/primitives/manager/McpManagerCustomServers.tsx +48 -0
- package/src/primitives/manager/McpManagerRoot.tsx +38 -0
- package/src/primitives/manager.ts +4 -0
- package/src/primitives/native-inheritance.test.tsx +495 -0
- package/src/primitives/server/McpServerConnectButton.tsx +46 -0
- package/src/primitives/server/McpServerDisconnectButton.tsx +44 -0
- package/src/primitives/server/McpServerError.tsx +38 -0
- package/src/primitives/server/McpServerIcon.tsx +42 -0
- package/src/primitives/server/McpServerName.tsx +37 -0
- package/src/primitives/server/McpServerOAuthLink.tsx +41 -0
- package/src/primitives/server/McpServerRemoveButton.test.tsx +88 -0
- package/src/primitives/server/McpServerRemoveButton.tsx +43 -0
- package/src/primitives/server/McpServerRoot.tsx +46 -0
- package/src/primitives/server/McpServerStatus.tsx +38 -0
- package/src/primitives/server/McpServerToolName.tsx +39 -0
- package/src/primitives/server/McpServerTools.tsx +56 -0
- package/src/primitives/server.ts +14 -0
- package/src/resources/McpCustomServerPersistence.test.ts +110 -0
- package/src/resources/McpCustomServerPersistence.ts +239 -0
- package/src/resources/McpElicitationLifecycle.test.ts +83 -0
- package/src/resources/McpElicitationLifecycle.ts +156 -0
- package/src/resources/McpManagerResource.test.ts +1399 -0
- package/src/resources/McpManagerResource.tools.test.ts +478 -0
- package/src/resources/McpManagerResource.ts +317 -0
- package/src/resources/McpServerRemovalFence.ts +21 -0
- package/src/resources/McpServerResource.test.ts +2394 -0
- package/src/resources/McpServerResource.ts +697 -0
- package/src/resources/storage/McpCustomStorage.ts +8 -0
- package/src/resources/storage/McpLocalStorage.test.ts +533 -0
- package/src/resources/storage/McpLocalStorage.ts +105 -0
- package/src/resources/storage/McpMemoryStorage.test.ts +114 -0
- package/src/resources/storage/McpMemoryStorage.ts +30 -0
- package/src/resources/storage/McpStoredDataNormalization.test.ts +24 -0
- package/src/resources/storage/McpStoredDataNormalization.ts +201 -0
- package/src/resources/storage/types.ts +30 -0
- package/src/resources/validateElicitationContent.test.ts +123 -0
- package/src/resources/validateElicitationContent.ts +79 -0
- package/src/utils/createMcpId.test.ts +25 -0
- package/src/utils/createMcpId.ts +10 -0
- package/src/utils/invokeMcpCallback.ts +9 -0
- package/src/utils/serverId.ts +31 -0
- package/src/utils/serverUrl.test.ts +96 -0
- package/src/utils/serverUrl.ts +49 -0
- package/src/utils/toToolSchema.test.ts +88 -0
- package/src/utils/toToolSchema.ts +141 -0
- package/src/utils/toolName.test.ts +51 -0
- package/src/utils/toolName.ts +32 -0
- package/README.md +0 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 AgentbaseAI Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// \0rolldown/runtime.js
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __exportAll = (all, no_symbols) => {
|
|
4
|
+
let target = {};
|
|
5
|
+
for (var name in all) __defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true
|
|
8
|
+
});
|
|
9
|
+
if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
10
|
+
return target;
|
|
11
|
+
};
|
|
12
|
+
export { __exportAll };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MCPAuthConfig } from "../mcp-scope.js";
|
|
2
|
+
import type { MCPPersistedAuthState } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Build request headers for the bearer/none flows. For bearer, prefer a token
|
|
5
|
+
* stored at add-form time (persisted), falling back to a static token on the
|
|
6
|
+
* config (used by connectors that hardcode a token, rare in practice).
|
|
7
|
+
*/
|
|
8
|
+
export declare function buildHeaders(auth: MCPAuthConfig, persisted: MCPPersistedAuthState | null): Record<string, string> | undefined;
|
|
9
|
+
//# sourceMappingURL=buildHeaders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildHeaders.d.ts","mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAc;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAS;AAEpD;;;;;AAKA,wBAAgB,YAAY,CAC1B,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,qBAAqB,GAAG,IAAI,GACtC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS","names":[],"ignoreList":[],"sources":["../../src/auth/buildHeaders.ts"],"sourcesContent":[null]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// src/auth/buildHeaders.ts
|
|
2
|
+
/**
|
|
3
|
+
* Build request headers for the bearer/none flows. For bearer, prefer a token
|
|
4
|
+
* stored at add-form time (persisted), falling back to a static token on the
|
|
5
|
+
* config (used by connectors that hardcode a token, rare in practice).
|
|
6
|
+
*/
|
|
7
|
+
function buildHeaders(auth, persisted) {
|
|
8
|
+
if (auth.type === "bearer") {
|
|
9
|
+
const token = persisted?.token ?? auth.token;
|
|
10
|
+
if (!token) return void 0;
|
|
11
|
+
return { Authorization: `Bearer ${token}` };
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export { buildHeaders };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=buildHeaders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildHeaders.js","names":[],"sources":["../../src/auth/buildHeaders.ts"],"sourcesContent":["import type { MCPAuthConfig } from \"../mcp-scope\";\nimport type { MCPPersistedAuthState } from \"./types\";\n\n/**\n * Build request headers for the bearer/none flows. For bearer, prefer a token\n * stored at add-form time (persisted), falling back to a static token on the\n * config (used by connectors that hardcode a token, rare in practice).\n */\nexport function buildHeaders(\n auth: MCPAuthConfig,\n persisted: MCPPersistedAuthState | null,\n): Record<string, string> | undefined {\n if (auth.type === \"bearer\") {\n const token = persisted?.token ?? auth.token;\n if (!token) return undefined;\n return { Authorization: `Bearer ${token}` };\n }\n return undefined;\n}\n"],"mappings":";;;;;;AAQA,SAAgB,aACd,MACA,WACoC;CACpC,IAAI,KAAK,SAAS,UAAU;EAC1B,MAAM,QAAQ,WAAW,SAAS,KAAK;EACvC,IAAI,CAAC,OAAO,OAAO,KAAA;EACnB,OAAO,EAAE,eAAe,UAAU,QAAQ;CAC5C;AAEF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { OAuthClientProvider, OAuthClientInformationFull, OAuthTokens } from "@modelcontextprotocol/client";
|
|
2
|
+
import type { MCPStorage } from "../resources/storage/types.js";
|
|
3
|
+
import type { MCPAuthConfig } from "../mcp-scope.js";
|
|
4
|
+
export declare function decodeServerIdFromState(state: string): string | null;
|
|
5
|
+
export type CreateOAuthProviderOptions = {
|
|
6
|
+
serverId: string;
|
|
7
|
+
serverUrl: string;
|
|
8
|
+
/** Must be `auth.type === "oauth"`. */
|
|
9
|
+
config: Extract<MCPAuthConfig, {
|
|
10
|
+
type: "oauth";
|
|
11
|
+
}>;
|
|
12
|
+
storage: MCPStorage;
|
|
13
|
+
redirectUri: string;
|
|
14
|
+
/** Called by the SDK to start the authorization redirect. */
|
|
15
|
+
onAuthorizationUrl: (url: URL) => void;
|
|
16
|
+
};
|
|
17
|
+
type OAuthConfig = Extract<MCPAuthConfig, {
|
|
18
|
+
type: "oauth";
|
|
19
|
+
}>;
|
|
20
|
+
type OAuthCredentialState = {
|
|
21
|
+
tokens?: OAuthTokens | undefined;
|
|
22
|
+
tokensClientId?: string | undefined;
|
|
23
|
+
clientInformation?: OAuthClientInformationFull | undefined;
|
|
24
|
+
clientInformationSource?: "registered" | undefined;
|
|
25
|
+
};
|
|
26
|
+
export declare const hasUsableOAuthTokens: (state: OAuthCredentialState | null | undefined, config: OAuthConfig) => boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Clears persisted OAuth state after the in-flight load and every queued write
|
|
29
|
+
* for that server have settled, so a discarded provider cannot recreate the
|
|
30
|
+
* record it was mid-save on.
|
|
31
|
+
*/
|
|
32
|
+
export declare const clearOAuthProviderAuthState: (storage: MCPStorage, serverId: string) => Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Builds an OAuthClientProvider for the MCP SDK, backed by MCPStorage.
|
|
35
|
+
* Token refresh and DCR are handled by the SDK; this provider only mediates
|
|
36
|
+
* load/save and the redirect step.
|
|
37
|
+
*/
|
|
38
|
+
export declare function createOAuthProvider(opts: CreateOAuthProviderOptions): OAuthClientProvider;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=createOAuthProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createOAuthProvider.d.ts","mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,0BAA0B,EAG1B,WAAW,EACZ,MAAM,8BAA8B;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA4B;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAc;AAyCjD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;AAgBrE,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,MAAM;IACjB;IACA,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE;QAAE,IAAI,EAAE,OAAO;KAAE,CAAC;IACjD,OAAO,EAAE,UAAU;IACnB,WAAW,EAAE,MAAM;IACnB;IACA,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI;CACvC;AAaD,KAAK,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE;IAAE,IAAI,EAAE,OAAO;CAAE,CAAC;AAE5D,KAAK,oBAAoB,GAAG;IAC1B,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS;IACnC,iBAAiB,CAAC,EAAE,0BAA0B,GAAG,SAAS;IAC1D,uBAAuB,CAAC,EAAE,YAAY,GAAG,SAAS;CACnD;AASD,eAAO,MAAM,oBAAoB,GAC/B,OAAO,oBAAoB,GAAG,IAAI,GAAG,SAAS,EAC9C,QAAQ,WAAW,KAClB,OAOF;AAqGD;;;;;AAKA,eAAO,MAAM,2BAA2B,GACtC,SAAS,UAAU,EACnB,UAAU,MAAM,KACf,OAAO,CAAC,IAAI,CAoBd;AAED;;;;;AAKA,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,0BAA0B,GAC/B,mBAAmB","names":[],"ignoreList":[],"sources":["../../src/auth/createOAuthProvider.ts"],"sourcesContent":[null]}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { isAuthStateForServerUrl, normalizeMcpServerUrl } from "../utils/serverUrl.js";
|
|
2
|
+
// src/auth/createOAuthProvider.ts
|
|
3
|
+
const STATE_PREFIX = "aui-mcp:";
|
|
4
|
+
function bytesToBase64Url(bytes) {
|
|
5
|
+
let s = "";
|
|
6
|
+
for (const b of bytes) s += String.fromCharCode(b);
|
|
7
|
+
return btoa(s).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
8
|
+
}
|
|
9
|
+
function base64UrlToBytes(b64url) {
|
|
10
|
+
const padded = b64url.replace(/-/g, "+").replace(/_/g, "/") + "=".repeat((4 - b64url.length % 4) % 4);
|
|
11
|
+
const bin = atob(padded);
|
|
12
|
+
const out = new Uint8Array(bin.length);
|
|
13
|
+
for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);
|
|
14
|
+
return out;
|
|
15
|
+
}
|
|
16
|
+
function encodeServerIdInState(serverId) {
|
|
17
|
+
const bytes = new TextEncoder().encode(serverId);
|
|
18
|
+
return `${STATE_PREFIX}${bytesToBase64Url(bytes)}`;
|
|
19
|
+
}
|
|
20
|
+
function createStateNonce() {
|
|
21
|
+
if (typeof crypto === "undefined") throw new Error("Web Crypto is required to start MCP OAuth");
|
|
22
|
+
if (typeof crypto.randomUUID === "function") return crypto.randomUUID();
|
|
23
|
+
if (typeof crypto.getRandomValues !== "function") throw new Error("Web Crypto is required to start MCP OAuth");
|
|
24
|
+
return bytesToBase64Url(crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(32)));
|
|
25
|
+
}
|
|
26
|
+
function decodeServerIdFromState(state) {
|
|
27
|
+
if (!state.startsWith(STATE_PREFIX)) return null;
|
|
28
|
+
const dot = state.indexOf(".", 8);
|
|
29
|
+
const encoded = dot === -1 ? state.slice(8) : state.slice(8, dot);
|
|
30
|
+
try {
|
|
31
|
+
return new TextDecoder("utf-8", { fatal: true }).decode(base64UrlToBytes(encoded));
|
|
32
|
+
} catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const registeredClientId = (state) => state?.clientInformationSource === "registered" ? state.clientInformation?.client_id : void 0;
|
|
37
|
+
const hasUsableOAuthTokens = (state, config) => {
|
|
38
|
+
const clientId = config.clientId ?? registeredClientId(state);
|
|
39
|
+
return clientId !== void 0 && state?.tokens !== void 0 && state.tokensClientId === clientId;
|
|
40
|
+
};
|
|
41
|
+
const hasUsableRegisteredClientInformation = (state, config) => {
|
|
42
|
+
const clientId = registeredClientId(state);
|
|
43
|
+
return clientId !== void 0 && (config.clientId === void 0 || config.clientId === clientId);
|
|
44
|
+
};
|
|
45
|
+
const anchorByStorage = /* @__PURE__ */ new WeakMap();
|
|
46
|
+
const anchorByScope = /* @__PURE__ */ new Map();
|
|
47
|
+
const anchorRegistry = new FinalizationRegistry((scopeId) => {
|
|
48
|
+
if (!anchorByScope.get(scopeId)?.deref()) anchorByScope.delete(scopeId);
|
|
49
|
+
});
|
|
50
|
+
const getStorageIdentity = (storage) => {
|
|
51
|
+
const existing = anchorByStorage.get(storage);
|
|
52
|
+
if (existing) return existing;
|
|
53
|
+
const { scopeId } = storage;
|
|
54
|
+
if (scopeId === void 0) return storage;
|
|
55
|
+
let anchor = anchorByScope.get(scopeId)?.deref();
|
|
56
|
+
if (!anchor) {
|
|
57
|
+
anchor = {};
|
|
58
|
+
anchorByScope.set(scopeId, new WeakRef(anchor));
|
|
59
|
+
anchorRegistry.register(anchor, scopeId);
|
|
60
|
+
}
|
|
61
|
+
anchorByStorage.set(storage, anchor);
|
|
62
|
+
return anchor;
|
|
63
|
+
};
|
|
64
|
+
const persistenceByIdentity = /* @__PURE__ */ new WeakMap();
|
|
65
|
+
const getPersistence = (storage, serverId, serverUrl) => {
|
|
66
|
+
const identity = getStorageIdentity(storage);
|
|
67
|
+
let byServerId = persistenceByIdentity.get(identity);
|
|
68
|
+
if (!byServerId) {
|
|
69
|
+
byServerId = /* @__PURE__ */ new Map();
|
|
70
|
+
persistenceByIdentity.set(identity, byServerId);
|
|
71
|
+
}
|
|
72
|
+
let persistence = byServerId.get(serverId);
|
|
73
|
+
if (!persistence) {
|
|
74
|
+
persistence = {
|
|
75
|
+
endpoint: null,
|
|
76
|
+
queue: Promise.resolve(),
|
|
77
|
+
invalidated: false
|
|
78
|
+
};
|
|
79
|
+
byServerId.set(serverId, persistence);
|
|
80
|
+
}
|
|
81
|
+
let endpoint = persistence.endpoint;
|
|
82
|
+
if (endpoint?.serverUrl !== serverUrl) {
|
|
83
|
+
if (endpoint) endpoint.invalidated = true;
|
|
84
|
+
endpoint = {
|
|
85
|
+
serverUrl,
|
|
86
|
+
cached: null,
|
|
87
|
+
cachePromise: null,
|
|
88
|
+
invalidated: false
|
|
89
|
+
};
|
|
90
|
+
persistence.endpoint = endpoint;
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
persistence,
|
|
94
|
+
endpoint
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Clears persisted OAuth state after the in-flight load and every queued write
|
|
99
|
+
* for that server have settled, so a discarded provider cannot recreate the
|
|
100
|
+
* record it was mid-save on.
|
|
101
|
+
*/
|
|
102
|
+
const clearOAuthProviderAuthState = async (storage, serverId) => {
|
|
103
|
+
const identity = getStorageIdentity(storage);
|
|
104
|
+
const byServerId = persistenceByIdentity.get(identity);
|
|
105
|
+
const persistence = byServerId?.get(serverId);
|
|
106
|
+
if (!byServerId || !persistence) {
|
|
107
|
+
await storage.clearAuthState(serverId);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
persistence.invalidated = true;
|
|
111
|
+
byServerId.delete(serverId);
|
|
112
|
+
if (byServerId.size === 0) persistenceByIdentity.delete(identity);
|
|
113
|
+
if (persistence.endpoint) persistence.endpoint.invalidated = true;
|
|
114
|
+
const cachePromise = persistence.endpoint?.cachePromise;
|
|
115
|
+
if (cachePromise) await Promise.allSettled([cachePromise]);
|
|
116
|
+
await persistence.queue;
|
|
117
|
+
await storage.clearAuthState(serverId);
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Builds an OAuthClientProvider for the MCP SDK, backed by MCPStorage.
|
|
121
|
+
* Token refresh and DCR are handled by the SDK; this provider only mediates
|
|
122
|
+
* load/save and the redirect step.
|
|
123
|
+
*/
|
|
124
|
+
function createOAuthProvider(opts) {
|
|
125
|
+
const { serverId, serverUrl, config, storage, redirectUri, onAuthorizationUrl } = opts;
|
|
126
|
+
const normalizedServerUrl = normalizeMcpServerUrl(serverUrl);
|
|
127
|
+
const { persistence, endpoint } = getPersistence(storage, serverId, normalizedServerUrl);
|
|
128
|
+
let pendingState;
|
|
129
|
+
const configuredClientInformation = () => {
|
|
130
|
+
if (!config.clientId) return void 0;
|
|
131
|
+
const ci = {
|
|
132
|
+
client_id: config.clientId,
|
|
133
|
+
redirect_uris: [redirectUri]
|
|
134
|
+
};
|
|
135
|
+
if (config.clientSecret) ci.client_secret = config.clientSecret;
|
|
136
|
+
return ci;
|
|
137
|
+
};
|
|
138
|
+
let clientInformationOverlay = configuredClientInformation();
|
|
139
|
+
const activeClientId = (cache) => clientInformationOverlay?.client_id ?? registeredClientId(cache);
|
|
140
|
+
const loadCache = () => {
|
|
141
|
+
if (endpoint.invalidated) return Promise.resolve({});
|
|
142
|
+
if (endpoint.cached) return Promise.resolve(endpoint.cached);
|
|
143
|
+
if (endpoint.cachePromise) return endpoint.cachePromise;
|
|
144
|
+
endpoint.cachePromise = persistence.queue.then(() => storage.loadAuthState(serverId)).then(async (persisted) => {
|
|
145
|
+
const initial = {};
|
|
146
|
+
let needsMigration = false;
|
|
147
|
+
if (endpoint.invalidated) return initial;
|
|
148
|
+
if (persisted && isAuthStateForServerUrl(persisted, normalizedServerUrl)) {
|
|
149
|
+
if (hasUsableRegisteredClientInformation(persisted, config) && persisted.clientInformation) {
|
|
150
|
+
initial.clientInformation = persisted.clientInformation;
|
|
151
|
+
initial.clientInformationSource = "registered";
|
|
152
|
+
} else if (persisted?.clientInformation || persisted?.clientInformationSource !== void 0) needsMigration = true;
|
|
153
|
+
if (hasUsableOAuthTokens(persisted, config)) {
|
|
154
|
+
initial.tokens = persisted.tokens;
|
|
155
|
+
initial.tokensClientId = persisted.tokensClientId;
|
|
156
|
+
} else if (persisted?.tokens || persisted?.tokensClientId !== void 0) needsMigration = true;
|
|
157
|
+
if (persisted?.token) initial.token = persisted.token;
|
|
158
|
+
if (persisted?.codeVerifier) initial.codeVerifier = persisted.codeVerifier;
|
|
159
|
+
if (persisted?.state) initial.state = persisted.state;
|
|
160
|
+
if (persisted?.discoveryState) initial.discoveryState = persisted.discoveryState;
|
|
161
|
+
}
|
|
162
|
+
endpoint.cached = initial;
|
|
163
|
+
if (needsMigration) await persist().catch(() => {});
|
|
164
|
+
return initial;
|
|
165
|
+
}, (error) => {
|
|
166
|
+
endpoint.cachePromise = null;
|
|
167
|
+
throw error;
|
|
168
|
+
});
|
|
169
|
+
return endpoint.cachePromise;
|
|
170
|
+
};
|
|
171
|
+
function persist() {
|
|
172
|
+
const task = persistence.queue.then(async () => {
|
|
173
|
+
if (persistence.invalidated || endpoint.invalidated) return;
|
|
174
|
+
const c = endpoint.cached;
|
|
175
|
+
if (!c) return;
|
|
176
|
+
const next = {};
|
|
177
|
+
if (hasUsableOAuthTokens(c, config) && c.tokens && c.tokensClientId) {
|
|
178
|
+
next.tokens = c.tokens;
|
|
179
|
+
next.tokensClientId = c.tokensClientId;
|
|
180
|
+
}
|
|
181
|
+
if (c.clientInformation && c.clientInformationSource === "registered") {
|
|
182
|
+
next.clientInformation = c.clientInformation;
|
|
183
|
+
next.clientInformationSource = "registered";
|
|
184
|
+
}
|
|
185
|
+
if (c.token) next.token = c.token;
|
|
186
|
+
if (c.codeVerifier) next.codeVerifier = c.codeVerifier;
|
|
187
|
+
if (c.state) next.state = c.state;
|
|
188
|
+
if (c.discoveryState) next.discoveryState = c.discoveryState;
|
|
189
|
+
next.serverUrl = normalizedServerUrl;
|
|
190
|
+
await storage.saveAuthState(serverId, next);
|
|
191
|
+
});
|
|
192
|
+
persistence.queue = task.catch(() => {});
|
|
193
|
+
return task;
|
|
194
|
+
}
|
|
195
|
+
const clientMetadata = {
|
|
196
|
+
client_name: "assistant-ui",
|
|
197
|
+
redirect_uris: [redirectUri],
|
|
198
|
+
grant_types: ["authorization_code", "refresh_token"],
|
|
199
|
+
response_types: ["code"],
|
|
200
|
+
token_endpoint_auth_method: "none",
|
|
201
|
+
scope: config.scopes?.join(" ")
|
|
202
|
+
};
|
|
203
|
+
return {
|
|
204
|
+
get redirectUrl() {
|
|
205
|
+
return redirectUri;
|
|
206
|
+
},
|
|
207
|
+
get clientMetadata() {
|
|
208
|
+
return clientMetadata;
|
|
209
|
+
},
|
|
210
|
+
state() {
|
|
211
|
+
const nonce = createStateNonce();
|
|
212
|
+
pendingState = `${encodeServerIdInState(serverId)}.${nonce}`;
|
|
213
|
+
return pendingState;
|
|
214
|
+
},
|
|
215
|
+
async clientInformation() {
|
|
216
|
+
const c = await loadCache();
|
|
217
|
+
if (clientInformationOverlay) return clientInformationOverlay;
|
|
218
|
+
if (c.clientInformationSource !== "registered") return void 0;
|
|
219
|
+
return c.clientInformation;
|
|
220
|
+
},
|
|
221
|
+
async saveClientInformation(info) {
|
|
222
|
+
if (clientInformationOverlay) {
|
|
223
|
+
clientInformationOverlay = info;
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const c = await loadCache();
|
|
227
|
+
c.clientInformation = info;
|
|
228
|
+
c.clientInformationSource = "registered";
|
|
229
|
+
if (c.tokensClientId !== c.clientInformation.client_id) {
|
|
230
|
+
delete c.tokens;
|
|
231
|
+
delete c.tokensClientId;
|
|
232
|
+
}
|
|
233
|
+
await persist();
|
|
234
|
+
},
|
|
235
|
+
async tokens() {
|
|
236
|
+
const c = await loadCache();
|
|
237
|
+
const clientId = activeClientId(c);
|
|
238
|
+
if (clientId === void 0 || c.tokensClientId !== clientId) return void 0;
|
|
239
|
+
return c.tokens;
|
|
240
|
+
},
|
|
241
|
+
async saveTokens(tokens) {
|
|
242
|
+
const c = await loadCache();
|
|
243
|
+
c.tokens = tokens;
|
|
244
|
+
const clientId = activeClientId(c);
|
|
245
|
+
if (clientId) c.tokensClientId = clientId;
|
|
246
|
+
else delete c.tokensClientId;
|
|
247
|
+
delete c.state;
|
|
248
|
+
await persist();
|
|
249
|
+
},
|
|
250
|
+
async redirectToAuthorization(url) {
|
|
251
|
+
onAuthorizationUrl(url);
|
|
252
|
+
},
|
|
253
|
+
async saveCodeVerifier(codeVerifier) {
|
|
254
|
+
const c = await loadCache();
|
|
255
|
+
c.codeVerifier = codeVerifier;
|
|
256
|
+
if (pendingState) {
|
|
257
|
+
c.state = pendingState;
|
|
258
|
+
pendingState = void 0;
|
|
259
|
+
}
|
|
260
|
+
await persist();
|
|
261
|
+
},
|
|
262
|
+
async codeVerifier() {
|
|
263
|
+
const c = await loadCache();
|
|
264
|
+
if (!c.codeVerifier) throw new Error("No code verifier saved for this OAuth flow");
|
|
265
|
+
return c.codeVerifier;
|
|
266
|
+
},
|
|
267
|
+
async saveDiscoveryState(discoveryState) {
|
|
268
|
+
const c = await loadCache();
|
|
269
|
+
c.discoveryState = discoveryState;
|
|
270
|
+
await persist();
|
|
271
|
+
},
|
|
272
|
+
async discoveryState() {
|
|
273
|
+
return (await loadCache()).discoveryState;
|
|
274
|
+
},
|
|
275
|
+
async invalidateCredentials(scope) {
|
|
276
|
+
const c = await loadCache();
|
|
277
|
+
if (scope === "all" || scope === "tokens") {
|
|
278
|
+
delete c.tokens;
|
|
279
|
+
delete c.tokensClientId;
|
|
280
|
+
}
|
|
281
|
+
if (scope === "all" || scope === "client") {
|
|
282
|
+
delete c.clientInformation;
|
|
283
|
+
delete c.clientInformationSource;
|
|
284
|
+
if (!config.clientId) {
|
|
285
|
+
delete c.tokens;
|
|
286
|
+
delete c.tokensClientId;
|
|
287
|
+
}
|
|
288
|
+
clientInformationOverlay = configuredClientInformation();
|
|
289
|
+
}
|
|
290
|
+
if (scope === "all" || scope === "verifier") {
|
|
291
|
+
delete c.codeVerifier;
|
|
292
|
+
delete c.state;
|
|
293
|
+
}
|
|
294
|
+
if (scope === "all" || scope === "discovery") delete c.discoveryState;
|
|
295
|
+
await persist();
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
export { clearOAuthProviderAuthState, createOAuthProvider, decodeServerIdFromState, hasUsableOAuthTokens };
|
|
300
|
+
|
|
301
|
+
//# sourceMappingURL=createOAuthProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createOAuthProvider.js","names":[],"sources":["../../src/auth/createOAuthProvider.ts"],"sourcesContent":["import type {\n OAuthClientProvider,\n OAuthClientInformationFull,\n OAuthClientMetadata,\n OAuthDiscoveryState,\n OAuthTokens,\n} from \"@modelcontextprotocol/client\";\nimport type { MCPStorage } from \"../resources/storage/types\";\nimport type { MCPAuthConfig } from \"../mcp-scope\";\nimport type { MCPPersistedAuthState } from \"./types\";\nimport {\n isAuthStateForServerUrl,\n normalizeMcpServerUrl,\n} from \"../utils/serverUrl\";\n\nconst STATE_PREFIX = \"aui-mcp:\";\n\nfunction bytesToBase64Url(bytes: Uint8Array): string {\n let s = \"\";\n for (const b of bytes) s += String.fromCharCode(b);\n return btoa(s).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n}\n\nfunction base64UrlToBytes(b64url: string): Uint8Array {\n const padded =\n b64url.replace(/-/g, \"+\").replace(/_/g, \"/\") +\n \"=\".repeat((4 - (b64url.length % 4)) % 4);\n const bin = atob(padded);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n}\n\nfunction encodeServerIdInState(serverId: string): string {\n const bytes = new TextEncoder().encode(serverId);\n return `${STATE_PREFIX}${bytesToBase64Url(bytes)}`;\n}\n\nfunction createStateNonce(): string {\n if (typeof crypto === \"undefined\") {\n throw new Error(\"Web Crypto is required to start MCP OAuth\");\n }\n if (typeof crypto.randomUUID === \"function\") return crypto.randomUUID();\n if (typeof crypto.getRandomValues !== \"function\") {\n throw new Error(\"Web Crypto is required to start MCP OAuth\");\n }\n return bytesToBase64Url(crypto.getRandomValues(new Uint8Array(32)));\n}\n\nexport function decodeServerIdFromState(state: string): string | null {\n if (!state.startsWith(STATE_PREFIX)) return null;\n const dot = state.indexOf(\".\", STATE_PREFIX.length);\n const encoded =\n dot === -1\n ? state.slice(STATE_PREFIX.length)\n : state.slice(STATE_PREFIX.length, dot);\n try {\n return new TextDecoder(\"utf-8\", { fatal: true }).decode(\n base64UrlToBytes(encoded),\n );\n } catch {\n return null;\n }\n}\n\nexport type CreateOAuthProviderOptions = {\n serverId: string;\n serverUrl: string;\n /** Must be `auth.type === \"oauth\"`. */\n config: Extract<MCPAuthConfig, { type: \"oauth\" }>;\n storage: MCPStorage;\n redirectUri: string;\n /** Called by the SDK to start the authorization redirect. */\n onAuthorizationUrl: (url: URL) => void;\n};\n\ntype OAuthProviderCache = {\n token?: string | undefined;\n tokens?: OAuthTokens | undefined;\n tokensClientId?: string | undefined;\n clientInformation?: OAuthClientInformationFull | undefined;\n clientInformationSource?: MCPPersistedAuthState[\"clientInformationSource\"];\n codeVerifier?: string | undefined;\n state?: string | undefined;\n discoveryState?: OAuthDiscoveryState | undefined;\n};\n\ntype OAuthConfig = Extract<MCPAuthConfig, { type: \"oauth\" }>;\n\ntype OAuthCredentialState = {\n tokens?: OAuthTokens | undefined;\n tokensClientId?: string | undefined;\n clientInformation?: OAuthClientInformationFull | undefined;\n clientInformationSource?: \"registered\" | undefined;\n};\n\nconst registeredClientId = (\n state: OAuthCredentialState | null | undefined,\n): string | undefined =>\n state?.clientInformationSource === \"registered\"\n ? state.clientInformation?.client_id\n : undefined;\n\nexport const hasUsableOAuthTokens = (\n state: OAuthCredentialState | null | undefined,\n config: OAuthConfig,\n): boolean => {\n const clientId = config.clientId ?? registeredClientId(state);\n return (\n clientId !== undefined &&\n state?.tokens !== undefined &&\n state.tokensClientId === clientId\n );\n};\n\nconst hasUsableRegisteredClientInformation = (\n state: OAuthCredentialState | null | undefined,\n config: OAuthConfig,\n): boolean => {\n const clientId = registeredClientId(state);\n return (\n clientId !== undefined &&\n (config.clientId === undefined || config.clientId === clientId)\n );\n};\n\ntype OAuthProviderEndpointCache = {\n serverUrl: string;\n cached: OAuthProviderCache | null;\n cachePromise: Promise<OAuthProviderCache> | null;\n invalidated: boolean;\n};\n\ntype OAuthProviderPersistence = {\n endpoint: OAuthProviderEndpointCache | null;\n queue: Promise<void>;\n invalidated: boolean;\n};\n\n// scopeId, not object identity, is what addresses the same persisted data, so\n// storages sharing one share an anchor and an unscoped storage is its own\n// identity. Every storage declaring a scope holds that scope's anchor, so the\n// coordination state below is collected once the last of them is gone.\nconst anchorByStorage = new WeakMap<MCPStorage, object>();\nconst anchorByScope = new Map<string, WeakRef<object>>();\nconst anchorRegistry = new FinalizationRegistry<string>((scopeId) => {\n if (!anchorByScope.get(scopeId)?.deref()) anchorByScope.delete(scopeId);\n});\n\nconst getStorageIdentity = (storage: MCPStorage): object => {\n const existing = anchorByStorage.get(storage);\n if (existing) return existing;\n\n const { scopeId } = storage;\n if (scopeId === undefined) return storage;\n\n let anchor = anchorByScope.get(scopeId)?.deref();\n if (!anchor) {\n anchor = {};\n anchorByScope.set(scopeId, new WeakRef(anchor));\n anchorRegistry.register(anchor, scopeId);\n }\n anchorByStorage.set(storage, anchor);\n return anchor;\n};\n\n// McpServerResource builds a fresh provider for every transport, so the cache,\n// the in-flight load, and the write queue have to outlive any one provider.\n// saveAuthState replaces the whole record, so two providers writing their own\n// snapshots concurrently would drop whichever field the loser had added.\nconst persistenceByIdentity = new WeakMap<\n object,\n Map<string, OAuthProviderPersistence>\n>();\n\nconst getPersistence = (\n storage: MCPStorage,\n serverId: string,\n serverUrl: string,\n): {\n persistence: OAuthProviderPersistence;\n endpoint: OAuthProviderEndpointCache;\n} => {\n const identity = getStorageIdentity(storage);\n let byServerId = persistenceByIdentity.get(identity);\n if (!byServerId) {\n byServerId = new Map();\n persistenceByIdentity.set(identity, byServerId);\n }\n\n let persistence = byServerId.get(serverId);\n if (!persistence) {\n persistence = {\n endpoint: null,\n queue: Promise.resolve(),\n invalidated: false,\n };\n byServerId.set(serverId, persistence);\n }\n\n let endpoint = persistence.endpoint;\n if (endpoint?.serverUrl !== serverUrl) {\n if (endpoint) endpoint.invalidated = true;\n endpoint = {\n serverUrl,\n cached: null,\n cachePromise: null,\n invalidated: false,\n };\n persistence.endpoint = endpoint;\n }\n return { persistence, endpoint };\n};\n\n/**\n * Clears persisted OAuth state after the in-flight load and every queued write\n * for that server have settled, so a discarded provider cannot recreate the\n * record it was mid-save on.\n */\nexport const clearOAuthProviderAuthState = async (\n storage: MCPStorage,\n serverId: string,\n): Promise<void> => {\n const identity = getStorageIdentity(storage);\n const byServerId = persistenceByIdentity.get(identity);\n const persistence = byServerId?.get(serverId);\n if (!byServerId || !persistence) {\n await storage.clearAuthState(serverId);\n return;\n }\n\n // Detaching the entry before awaiting keeps a provider built during the clear\n // on a fresh generation instead of inheriting the fenced one.\n persistence.invalidated = true;\n byServerId.delete(serverId);\n if (byServerId.size === 0) persistenceByIdentity.delete(identity);\n\n if (persistence.endpoint) persistence.endpoint.invalidated = true;\n const cachePromise = persistence.endpoint?.cachePromise;\n if (cachePromise) await Promise.allSettled([cachePromise]);\n await persistence.queue;\n await storage.clearAuthState(serverId);\n};\n\n/**\n * Builds an OAuthClientProvider for the MCP SDK, backed by MCPStorage.\n * Token refresh and DCR are handled by the SDK; this provider only mediates\n * load/save and the redirect step.\n */\nexport function createOAuthProvider(\n opts: CreateOAuthProviderOptions,\n): OAuthClientProvider {\n const {\n serverId,\n serverUrl,\n config,\n storage,\n redirectUri,\n onAuthorizationUrl,\n } = opts;\n const normalizedServerUrl = normalizeMcpServerUrl(serverUrl);\n const { persistence, endpoint } = getPersistence(\n storage,\n serverId,\n normalizedServerUrl,\n );\n let pendingState: string | undefined;\n\n // The cache is shared with every other provider for this storage, server id,\n // and server URL, so a statically configured client stays a read-time overlay\n // owned by this provider. Writing it into the cache would leak this provider's\n // registration to a replacement built for a different, or absent, clientId.\n // The SDK's write-backs, its issuer stamp included, replace the overlay.\n const configuredClientInformation = ():\n | OAuthClientInformationFull\n | undefined => {\n if (!config.clientId) return undefined;\n const ci: OAuthClientInformationFull = {\n client_id: config.clientId,\n redirect_uris: [redirectUri],\n };\n if (config.clientSecret) ci.client_secret = config.clientSecret;\n return ci;\n };\n let clientInformationOverlay = configuredClientInformation();\n\n const activeClientId = (cache: OAuthProviderCache): string | undefined =>\n clientInformationOverlay?.client_id ?? registeredClientId(cache);\n\n const loadCache = (): Promise<OAuthProviderCache> => {\n if (endpoint.invalidated) return Promise.resolve({});\n if (endpoint.cached) return Promise.resolve(endpoint.cached);\n if (endpoint.cachePromise) return endpoint.cachePromise;\n\n endpoint.cachePromise = persistence.queue\n .then(() => storage.loadAuthState(serverId))\n .then(\n async (persisted) => {\n const initial: OAuthProviderCache = {};\n let needsMigration = false;\n if (endpoint.invalidated) return initial;\n if (\n persisted &&\n isAuthStateForServerUrl(persisted, normalizedServerUrl)\n ) {\n if (\n hasUsableRegisteredClientInformation(persisted, config) &&\n persisted.clientInformation\n ) {\n initial.clientInformation = persisted.clientInformation;\n initial.clientInformationSource = \"registered\";\n } else if (\n persisted?.clientInformation ||\n persisted?.clientInformationSource !== undefined\n ) {\n needsMigration = true;\n }\n if (hasUsableOAuthTokens(persisted, config)) {\n initial.tokens = persisted.tokens;\n initial.tokensClientId = persisted.tokensClientId;\n } else if (\n persisted?.tokens ||\n persisted?.tokensClientId !== undefined\n ) {\n needsMigration = true;\n }\n if (persisted?.token) initial.token = persisted.token;\n if (persisted?.codeVerifier)\n initial.codeVerifier = persisted.codeVerifier;\n if (persisted?.state) initial.state = persisted.state;\n if (persisted?.discoveryState)\n initial.discoveryState = persisted.discoveryState;\n }\n endpoint.cached = initial;\n if (needsMigration) await persist().catch(() => {});\n return initial;\n },\n (error) => {\n endpoint.cachePromise = null;\n throw error;\n },\n );\n return endpoint.cachePromise;\n };\n\n function persist() {\n const task = persistence.queue.then(async () => {\n if (persistence.invalidated || endpoint.invalidated) return;\n const c = endpoint.cached;\n if (!c) return;\n const next: Parameters<typeof storage.saveAuthState>[1] = {};\n if (hasUsableOAuthTokens(c, config) && c.tokens && c.tokensClientId) {\n next.tokens = c.tokens;\n next.tokensClientId = c.tokensClientId;\n }\n if (c.clientInformation && c.clientInformationSource === \"registered\") {\n next.clientInformation = c.clientInformation;\n next.clientInformationSource = \"registered\";\n }\n if (c.token) next.token = c.token;\n if (c.codeVerifier) next.codeVerifier = c.codeVerifier;\n if (c.state) next.state = c.state;\n if (c.discoveryState) next.discoveryState = c.discoveryState;\n next.serverUrl = normalizedServerUrl;\n await storage.saveAuthState(serverId, next);\n });\n persistence.queue = task.catch(() => {});\n return task;\n }\n\n const clientMetadata: OAuthClientMetadata = {\n client_name: \"assistant-ui\",\n redirect_uris: [redirectUri],\n grant_types: [\"authorization_code\", \"refresh_token\"],\n response_types: [\"code\"],\n token_endpoint_auth_method: \"none\",\n scope: config.scopes?.join(\" \"),\n };\n\n return {\n get redirectUrl() {\n return redirectUri;\n },\n get clientMetadata() {\n return clientMetadata;\n },\n state() {\n // Embed the server id so the callback handler can route it back to the\n // right MCPServerResource without app-level wiring.\n const nonce = createStateNonce();\n pendingState = `${encodeServerIdInState(serverId)}.${nonce}`;\n return pendingState;\n },\n async clientInformation() {\n const c = await loadCache();\n if (clientInformationOverlay) return clientInformationOverlay;\n if (c.clientInformationSource !== \"registered\") return undefined;\n return c.clientInformation;\n },\n async saveClientInformation(info) {\n if (clientInformationOverlay) {\n clientInformationOverlay = info as OAuthClientInformationFull;\n return;\n }\n const c = await loadCache();\n c.clientInformation = info as OAuthClientInformationFull;\n c.clientInformationSource = \"registered\";\n if (c.tokensClientId !== c.clientInformation.client_id) {\n delete c.tokens;\n delete c.tokensClientId;\n }\n await persist();\n },\n async tokens() {\n const c = await loadCache();\n const clientId = activeClientId(c);\n if (clientId === undefined || c.tokensClientId !== clientId)\n return undefined;\n return c.tokens;\n },\n async saveTokens(tokens) {\n const c = await loadCache();\n c.tokens = tokens;\n const clientId = activeClientId(c);\n if (clientId) c.tokensClientId = clientId;\n else delete c.tokensClientId;\n delete c.state;\n await persist();\n },\n async redirectToAuthorization(url) {\n onAuthorizationUrl(url);\n },\n async saveCodeVerifier(codeVerifier) {\n const c = await loadCache();\n c.codeVerifier = codeVerifier;\n if (pendingState) {\n c.state = pendingState;\n pendingState = undefined;\n }\n await persist();\n },\n async codeVerifier() {\n const c = await loadCache();\n if (!c.codeVerifier) {\n throw new Error(\"No code verifier saved for this OAuth flow\");\n }\n return c.codeVerifier;\n },\n async saveDiscoveryState(discoveryState) {\n const c = await loadCache();\n c.discoveryState = discoveryState;\n await persist();\n },\n async discoveryState() {\n const c = await loadCache();\n return c.discoveryState;\n },\n async invalidateCredentials(scope) {\n const c = await loadCache();\n if (scope === \"all\" || scope === \"tokens\") {\n delete c.tokens;\n delete c.tokensClientId;\n }\n if (scope === \"all\" || scope === \"client\") {\n delete c.clientInformation;\n delete c.clientInformationSource;\n if (!config.clientId) {\n delete c.tokens;\n delete c.tokensClientId;\n }\n clientInformationOverlay = configuredClientInformation();\n }\n if (scope === \"all\" || scope === \"verifier\") {\n delete c.codeVerifier;\n delete c.state;\n }\n if (scope === \"all\" || scope === \"discovery\") delete c.discoveryState;\n await persist();\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { OAuthTokens, OAuthClientInformationFull, OAuthDiscoveryState } from "@modelcontextprotocol/client";
|
|
2
|
+
export type MCPPersistedAuthState = {
|
|
3
|
+
/** MCP server URL this authentication state belongs to. Required with credentials. */
|
|
4
|
+
serverUrl?: string;
|
|
5
|
+
tokens?: OAuthTokens;
|
|
6
|
+
tokensClientId?: string;
|
|
7
|
+
clientInformation?: OAuthClientInformationFull;
|
|
8
|
+
clientInformationSource?: "registered";
|
|
9
|
+
codeVerifier?: string;
|
|
10
|
+
state?: string;
|
|
11
|
+
discoveryState?: OAuthDiscoveryState;
|
|
12
|
+
/** Host-persisted bearer token. Must be paired with serverUrl. */
|
|
13
|
+
token?: string;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,0BAA0B,EAC1B,mBAAmB,EACpB,MAAM,8BAA8B;AAErC,MAAM,MAAM,qBAAqB,GAAG;IAClC;IACA,SAAS,CAAC,EAAE,MAAM;IAClB,MAAM,CAAC,EAAE,WAAW;IACpB,cAAc,CAAC,EAAE,MAAM;IACvB,iBAAiB,CAAC,EAAE,0BAA0B;IAC9C,uBAAuB,CAAC,EAAE,YAAY;IACtC,YAAY,CAAC,EAAE,MAAM;IACrB,KAAK,CAAC,EAAE,MAAM;IACd,cAAc,CAAC,EAAE,mBAAmB;IACpC;IACA,KAAK,CAAC,EAAE,MAAM;CACf","names":[],"ignoreList":[],"sources":["../../src/auth/types.ts"],"sourcesContent":[null]}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.d.ts","mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAa;AAG/C,wBAAgB,eAAe,CAAC,SAAS,EAAE,YAAY,GAAG,YAAY","names":[],"ignoreList":[],"sources":["../src/connector.ts"],"sourcesContent":[null]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.js","names":[],"sources":["../src/connector.ts"],"sourcesContent":["import type { MCPConnector } from \"./mcp-scope\";\nimport { assertValidServerId } from \"./utils/serverId\";\n\nexport function defineConnector(connector: MCPConnector): MCPConnector {\n assertValidServerId(connector.id);\n return connector;\n}\n"],"mappings":";;AAGA,SAAgB,gBAAgB,WAAuC;CACrE,oBAAoB,UAAU,EAAE;CAChC,OAAO;AACT"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type VNodeChild } from "vue";
|
|
2
|
+
export declare const McpConnectorByIndexProvider: import("vue").DefineSetupFnComponent<{
|
|
3
|
+
index: number;
|
|
4
|
+
children?: VNodeChild;
|
|
5
|
+
}, {}, {}, {
|
|
6
|
+
index: number;
|
|
7
|
+
children?: VNodeChild;
|
|
8
|
+
} & {}, import("vue").PublicProps>;
|
|
9
|
+
//# sourceMappingURL=McpConnectorByIndexProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpConnectorByIndexProvider.d.ts","mappings":"AACA,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,KAAK;AAEnE,eAAO,MAAM,2BAA2B;WACrB,MAAM;eAAa,UAAU;;WAA7B,MAAM;eAAa,UAAU;kCAoB/C","names":[],"ignoreList":[],"sources":["../../src/context/McpConnectorByIndexProvider.tsx"],"sourcesContent":[null]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useMcpChildren } from "./useMcpChildren.js";
|
|
2
|
+
import { computed, defineComponent, h } from "vue";
|
|
3
|
+
import { AuiConfig, AuiProvider, Derived, useAui } from "@ulearning/ai-store";
|
|
4
|
+
// src/context/McpConnectorByIndexProvider.tsx
|
|
5
|
+
const McpConnectorByIndexProvider = defineComponent((props, { slots }) => {
|
|
6
|
+
const children = useMcpChildren(() => props.children, slots);
|
|
7
|
+
const aui = useAui();
|
|
8
|
+
const config = computed(() => AuiConfig({ mcpServer: Derived({
|
|
9
|
+
source: "mcp",
|
|
10
|
+
query: {
|
|
11
|
+
kind: "connector",
|
|
12
|
+
index: props.index
|
|
13
|
+
},
|
|
14
|
+
get: (parent) => parent.mcp.connector({ index: props.index })
|
|
15
|
+
}) }));
|
|
16
|
+
return () => h(AuiProvider, {
|
|
17
|
+
extends: aui,
|
|
18
|
+
config: config.value
|
|
19
|
+
}, {
|
|
20
|
+
...slots,
|
|
21
|
+
default: children
|
|
22
|
+
});
|
|
23
|
+
}, {
|
|
24
|
+
name: "McpConnectorByIndexProvider",
|
|
25
|
+
props: ["index", "children"]
|
|
26
|
+
});
|
|
27
|
+
export { McpConnectorByIndexProvider };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=McpConnectorByIndexProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpConnectorByIndexProvider.js","names":["useMcpChildren","computed","defineComponent","h","VNodeChild","useAui","AuiConfig","AuiProvider","Derived","McpConnectorByIndexProvider","props","index","children","slots","aui","config","mcpServer","source","query","kind","get","parent","mcp","connector","extends","value","default","name"],"sources":["../../src/context/McpConnectorByIndexProvider.tsx"],"sourcesContent":["import { useMcpChildren } from \"./useMcpChildren\";\nimport { computed, defineComponent, h, type VNodeChild } from \"vue\";\nimport { useAui, AuiConfig, AuiProvider, Derived } from \"@ulearning/ai-store\";\nexport const McpConnectorByIndexProvider = defineComponent(\n (props: { index: number; children?: VNodeChild }, { slots }) => {\n const children = useMcpChildren(() => props.children, slots);\n const aui = useAui();\n const config = computed(() =>\n AuiConfig({\n mcpServer: Derived({\n source: \"mcp\",\n query: { kind: \"connector\", index: props.index },\n get: (parent) => parent.mcp.connector({ index: props.index }),\n }),\n }),\n );\n return () =>\n h(\n AuiProvider,\n { extends: aui, config: config.value },\n { ...slots, default: children },\n );\n },\n { name: \"McpConnectorByIndexProvider\", props: [\"index\", \"children\"] },\n);\n"],"mappings":";;;;AAGA,MAAaS,8BAA8BP,iBACxCQ,OAAiD,EAAEG,YAAY;CAC9D,MAAMD,WAAWZ,qBAAqBU,MAAME,UAAUC,KAAK;CAC3D,MAAMC,MAAMT,OAAO;CACnB,MAAMU,SAASd,eACbK,UAAU,EACRU,WAAWR,QAAQ;EACjBS,QAAQ;EACRC,OAAO;GAAEC,MAAM;GAAaR,OAAOD,MAAMC;EAAM;EAC/CS,MAAMC,WAAWA,OAAOC,IAAIC,UAAU,EAAEZ,OAAOD,MAAMC,MAAM,CAAC;CAC9D,CAAC,EACH,CAAC,CACH;CACA,aACER,EACEI,aACA;EAAEiB,SAASV;EAAKC,QAAQA,OAAOU;CAAM,GACrC;EAAE,GAAGZ;EAAOa,SAASd;CAAS,CAChC;AACJ,GACA;CAAEe,MAAM;CAA+BjB,OAAO,CAAC,SAAS,UAAU;AAAE,CACtE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type VNodeChild } from "vue";
|
|
2
|
+
export declare const McpCustomServerByIndexProvider: import("vue").DefineSetupFnComponent<{
|
|
3
|
+
index: number;
|
|
4
|
+
children?: VNodeChild;
|
|
5
|
+
}, {}, {}, {
|
|
6
|
+
index: number;
|
|
7
|
+
children?: VNodeChild;
|
|
8
|
+
} & {}, import("vue").PublicProps>;
|
|
9
|
+
//# sourceMappingURL=McpCustomServerByIndexProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpCustomServerByIndexProvider.d.ts","mappings":"AACA,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,KAAK;AAEnE,eAAO,MAAM,8BAA8B;WACxB,MAAM;eAAa,UAAU;;WAA7B,MAAM;eAAa,UAAU;kCAoB/C","names":[],"ignoreList":[],"sources":["../../src/context/McpCustomServerByIndexProvider.tsx"],"sourcesContent":[null]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useMcpChildren } from "./useMcpChildren.js";
|
|
2
|
+
import { computed, defineComponent, h } from "vue";
|
|
3
|
+
import { AuiConfig, AuiProvider, Derived, useAui } from "@ulearning/ai-store";
|
|
4
|
+
// src/context/McpCustomServerByIndexProvider.tsx
|
|
5
|
+
const McpCustomServerByIndexProvider = defineComponent((props, { slots }) => {
|
|
6
|
+
const children = useMcpChildren(() => props.children, slots);
|
|
7
|
+
const aui = useAui();
|
|
8
|
+
const config = computed(() => AuiConfig({ mcpServer: Derived({
|
|
9
|
+
source: "mcp",
|
|
10
|
+
query: {
|
|
11
|
+
kind: "custom",
|
|
12
|
+
index: props.index
|
|
13
|
+
},
|
|
14
|
+
get: (parent) => parent.mcp.customServer({ index: props.index })
|
|
15
|
+
}) }));
|
|
16
|
+
return () => h(AuiProvider, {
|
|
17
|
+
extends: aui,
|
|
18
|
+
config: config.value
|
|
19
|
+
}, {
|
|
20
|
+
...slots,
|
|
21
|
+
default: children
|
|
22
|
+
});
|
|
23
|
+
}, {
|
|
24
|
+
name: "McpCustomServerByIndexProvider",
|
|
25
|
+
props: ["index", "children"]
|
|
26
|
+
});
|
|
27
|
+
export { McpCustomServerByIndexProvider };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=McpCustomServerByIndexProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpCustomServerByIndexProvider.js","names":["useMcpChildren","computed","defineComponent","h","VNodeChild","useAui","AuiConfig","AuiProvider","Derived","McpCustomServerByIndexProvider","props","index","children","slots","aui","config","mcpServer","source","query","kind","get","parent","mcp","customServer","extends","value","default","name"],"sources":["../../src/context/McpCustomServerByIndexProvider.tsx"],"sourcesContent":["import { useMcpChildren } from \"./useMcpChildren\";\nimport { computed, defineComponent, h, type VNodeChild } from \"vue\";\nimport { useAui, AuiConfig, AuiProvider, Derived } from \"@ulearning/ai-store\";\nexport const McpCustomServerByIndexProvider = defineComponent(\n (props: { index: number; children?: VNodeChild }, { slots }) => {\n const children = useMcpChildren(() => props.children, slots);\n const aui = useAui();\n const config = computed(() =>\n AuiConfig({\n mcpServer: Derived({\n source: \"mcp\",\n query: { kind: \"custom\", index: props.index },\n get: (parent) => parent.mcp.customServer({ index: props.index }),\n }),\n }),\n );\n return () =>\n h(\n AuiProvider,\n { extends: aui, config: config.value },\n { ...slots, default: children },\n );\n },\n { name: \"McpCustomServerByIndexProvider\", props: [\"index\", \"children\"] },\n);\n"],"mappings":";;;;AAGA,MAAaS,iCAAiCP,iBAC3CQ,OAAiD,EAAEG,YAAY;CAC9D,MAAMD,WAAWZ,qBAAqBU,MAAME,UAAUC,KAAK;CAC3D,MAAMC,MAAMT,OAAO;CACnB,MAAMU,SAASd,eACbK,UAAU,EACRU,WAAWR,QAAQ;EACjBS,QAAQ;EACRC,OAAO;GAAEC,MAAM;GAAUR,OAAOD,MAAMC;EAAM;EAC5CS,MAAMC,WAAWA,OAAOC,IAAIC,aAAa,EAAEZ,OAAOD,MAAMC,MAAM,CAAC;CACjE,CAAC,EACH,CAAC,CACH;CACA,aACER,EACEI,aACA;EAAEiB,SAASV;EAAKC,QAAQA,OAAOU;CAAM,GACrC;EAAE,GAAGZ;EAAOa,SAASd;CAAS,CAChC;AACJ,GACA;CAAEe,MAAM;CAAkCjB,OAAO,CAAC,SAAS,UAAU;AAAE,CACzE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type VNodeChild } from "vue";
|
|
2
|
+
export declare const McpServerByIdProvider: import("vue").DefineSetupFnComponent<{
|
|
3
|
+
id: string;
|
|
4
|
+
children?: VNodeChild;
|
|
5
|
+
}, {}, {}, {
|
|
6
|
+
id: string;
|
|
7
|
+
children?: VNodeChild;
|
|
8
|
+
} & {}, import("vue").PublicProps>;
|
|
9
|
+
//# sourceMappingURL=McpServerByIdProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpServerByIdProvider.d.ts","mappings":"AACA,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,KAAK;AAEnE,eAAO,MAAM,qBAAqB;QAClB,MAAM;eAAa,UAAU;;QAA7B,MAAM;eAAa,UAAU;kCAoB5C","names":[],"ignoreList":[],"sources":["../../src/context/McpServerByIdProvider.tsx"],"sourcesContent":[null]}
|