feat: n8n endpoints federation surface (v0.13.0)

Sister of the MCP-client surface — four new HubAdmin RPCs
(`ListN8nEndpoints`, `RefreshN8nEndpoints`, `AddN8nEndpoint`,
`RemoveN8nEndpoint`) plus the matching typedefs so callers
read configuration off `N8nEndpointStatus` without importing
generated/.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-05-08 01:00:03 +02:00
parent f91f477230
commit 45f60ef77b
5 changed files with 427 additions and 1 deletions

View file

@ -60,6 +60,9 @@ typedef FetchModuleDocsResponse = pb.FetchModuleDocsResponse;
typedef ListMcpClientsResponse = pb.ListMcpClientsResponse;
typedef McpClientStatus = pb.McpClientStatus;
typedef McpClientConfigEntry = pb.McpClientConfigEntry;
typedef ListN8nEndpointsResponse = pb.ListN8nEndpointsResponse;
typedef N8nEndpointStatus = pb.N8nEndpointStatus;
typedef N8nEndpointConfigEntry = pb.N8nEndpointConfigEntry;
typedef ModuleInfoResponse = pb.ModuleInfoResponse;
typedef FlowSummary = pb.FlowSummary;
typedef StoreEntry = pb.StoreEntry;
@ -273,6 +276,30 @@ class HubClient {
return _admin.removeMcpClient(pb.RemoveMcpClientRequest(name: name));
}
/// Sister methods for n8n-endpoint federation. Same shape
/// as the MCP-client surface above; Studio's n8n editor
/// reuses the MCP editor patterns wholesale.
Future<ListN8nEndpointsResponse> listN8nEndpoints() =>
_admin.listN8nEndpoints(Empty());
Future<ListN8nEndpointsResponse> refreshN8nEndpoints() =>
_admin.refreshN8nEndpoints(Empty());
Future<ListN8nEndpointsResponse> addN8nEndpoint({
required String name,
required String baseUrl,
String apiKeyEnv = '',
String description = '',
}) {
return _admin.addN8nEndpoint(pb.N8nEndpointConfigEntry(
name: name,
baseUrl: baseUrl,
apiKeyEnv: apiKeyEnv,
description: description,
));
}
Future<ListN8nEndpointsResponse> removeN8nEndpoint(String name) {
return _admin.removeN8nEndpoint(pb.RemoveN8nEndpointRequest(name: name));
}
/// Read-only system-AI status. `enabled=false` lets Studio
/// render "configure in Settings" without making a request.
Future<SystemAiStatusResponse> systemAiStatus() {