{
  "repo": "tidbcloud/tidb-management-service",
  "binary": "tempo-proxy",
  "binary_path": "tempo-proxy/cmd/tempo-proxy/main.go",
  "surface_kind": "mixed_service",
  "type": "mixed_service",
  "services": [
    {
      "name": "TempoProxyLifecycle",
      "package": "main",
      "methods": [
        {
          "name": "Startup",
          "name_key": "TempoProxyLifecycle.Startup",
          "input": "config file path",
          "output": "running gRPC proxy server",
          "type": "local"
        },
        {
          "name": "BuildProxyServer",
          "name_key": "TempoProxyLifecycle.BuildProxyServer",
          "input": "Config + downstream gRPC addresses + allowlist config",
          "output": "grpc.Server exposing filtered CoreService methods",
          "type": "local"
        }
      ]
    },
    {
      "name": "CoreService",
      "package": "github.com/tidbcloud/core-svc/idl/pbgen/proto/core",
      "methods": [
        {
          "name": "CreateCluster",
          "name_key": "CoreService.CreateCluster",
          "input": "CreateClusterReq",
          "output": "CreateClusterResp"
        },
        {
          "name": "ChangeClusterPasswd",
          "name_key": "CoreService.ChangeClusterPasswd",
          "input": "ChangeClusterPasswdReq",
          "output": "ChangeClusterPasswdResp"
        },
        {
          "name": "SetClusterAuthPubKey",
          "name_key": "CoreService.SetClusterAuthPubKey",
          "input": "SetClusterAuthPubKeyReq",
          "output": "SetClusterAuthPubKeyResp"
        },
        {
          "name": "GetClusterConfidentialInfo",
          "name_key": "CoreService.GetClusterConfidentialInfo",
          "input": "GetClusterConfidentialInfoReq",
          "output": "GetClusterConfidentialInfoResp"
        },
        {
          "name": "CleanClusters",
          "name_key": "CoreService.CleanClusters",
          "input": "CleanClustersReq",
          "output": "CleanClustersResp"
        },
        {
          "name": "ClearCluster",
          "name_key": "CoreService.ClearCluster",
          "input": "ClearClusterReq",
          "output": "ClearClusterResp"
        },
        {
          "name": "ScaleCluster",
          "name_key": "CoreService.ScaleCluster",
          "input": "ScaleClusterReq",
          "output": "ScaleClusterResp"
        },
        {
          "name": "PauseCluster",
          "name_key": "CoreService.PauseCluster",
          "input": "PauseClusterReq",
          "output": "PauseClusterResp"
        },
        {
          "name": "ResumeCluster",
          "name_key": "CoreService.ResumeCluster",
          "input": "ResumeClusterReq",
          "output": "ResumeClusterResp"
        },
        {
          "name": "GetClusterCACertificate",
          "name_key": "CoreService.GetClusterCACertificate",
          "input": "GetClusterCACertificateReq",
          "output": "GetClusterCACertificateResp"
        },
        {
          "name": "QueryAccessPoints",
          "name_key": "CoreService.QueryAccessPoints",
          "input": "QueryAccessPointsReq",
          "output": "QueryAccessPointsResp"
        },
        {
          "name": "QueryCidrs",
          "name_key": "CoreService.QueryCidrs",
          "input": "QueryCidrsRequest",
          "output": "QueryCidrsResponse"
        },
        {
          "name": "CreateClusterJob",
          "name_key": "CoreService.CreateClusterJob",
          "input": "CreateClusterJobReq",
          "output": "CreateClusterJobResp"
        },
        {
          "name": "DeleteClusterJob",
          "name_key": "CoreService.DeleteClusterJob",
          "input": "DeleteClusterJobReq",
          "output": "DeleteClusterJobResp"
        },
        {
          "name": "IsClusterJobRegistered",
          "name_key": "CoreService.IsClusterJobRegistered",
          "input": "IsClusterJobRegisteredReq",
          "output": "IsClusterJobRegisteredResp"
        },
        {
          "name": "ListClusterJobs",
          "name_key": "CoreService.ListClusterJobs",
          "input": "ListClusterJobsReq",
          "output": "ListClusterJobsResp"
        },
        {
          "name": "CreateClusterSnapshot",
          "name_key": "CoreService.CreateClusterSnapshot",
          "input": "CreateClusterSnapshotReq",
          "output": "CreateClusterSnapshotResp"
        },
        {
          "name": "ListClusterSnapshots",
          "name_key": "CoreService.ListClusterSnapshots",
          "input": "ListClusterSnapshotsReq",
          "output": "ListClusterSnapshotsResp"
        },
        {
          "name": "GetAwsCmek",
          "name_key": "CoreService.GetAwsCmek",
          "input": "GetAwsCmekReq",
          "output": "GetAwsCmekResp"
        },
        {
          "name": "CountClusters",
          "name_key": "CoreService.CountClusters",
          "input": "CountClustersReq",
          "output": "CountClustersResp"
        },
        {
          "name": "ExecuteCtlCommand",
          "name_key": "CoreService.ExecuteCtlCommand",
          "input": "ExecuteCtlCommandReq",
          "output": "ExecuteCtlCommandResp"
        },
        {
          "name": "GetClusterTopology",
          "name_key": "CoreService.GetClusterTopology",
          "input": "GetClusterTopologyReq",
          "output": "GetClusterTopologyResp"
        },
        {
          "name": "CreateDBUser",
          "name_key": "CoreService.CreateDBUser",
          "input": "CreateDBUserReq",
          "output": "CreateDBUserResp"
        },
        {
          "name": "UpdateDBUser",
          "name_key": "CoreService.UpdateDBUser",
          "input": "UpdateDBUserReq",
          "output": "UpdateDBUserResp"
        },
        {
          "name": "ListDBUsers",
          "name_key": "CoreService.ListDBUsers",
          "input": "ListDBUsersReq",
          "output": "ListDBUsersResp"
        },
        {
          "name": "DeleteDBUser",
          "name_key": "CoreService.DeleteDBUser",
          "input": "DeleteDBUserReq",
          "output": "DeleteDBUserResp"
        },
        {
          "name": "GetDBUser",
          "name_key": "CoreService.GetDBUser",
          "input": "GetDBUserReq",
          "output": "GetDBUserResp"
        },
        {
          "name": "IsDBUserExisting",
          "name_key": "CoreService.IsDBUserExisting",
          "input": "IsDBUserExistingReq",
          "output": "IsDBUserExistingResp"
        },
        {
          "name": "CreateDBRole",
          "name_key": "CoreService.CreateDBRole",
          "input": "CreateDBRoleReq",
          "output": "CreateDBRoleResp"
        },
        {
          "name": "UpdateDBRole",
          "name_key": "CoreService.UpdateDBRole",
          "input": "UpdateDBRoleReq",
          "output": "UpdateDBRoleResp"
        },
        {
          "name": "ListClusters",
          "name_key": "CoreService.ListClusters",
          "input": "ListClustersReq",
          "output": "ListClustersResp"
        },
        {
          "name": "GetMaintenanceWindowByProjectID",
          "name_key": "CoreService.GetMaintenanceWindowByProjectID",
          "input": "GetMaintenanceWindowByProjectIDReq",
          "output": "GetMaintenanceWindowByProjectIDResp"
        },
        {
          "name": "UpdateMaintenanceWindow",
          "name_key": "CoreService.UpdateMaintenanceWindow",
          "input": "UpdateMaintenanceWindowReq",
          "output": "UpdateMaintenanceWindowResp"
        },
        {
          "name": "CreateMaintenanceTask",
          "name_key": "CoreService.CreateMaintenanceTask",
          "input": "CreateMaintenanceTaskReq",
          "output": "CreateMaintenanceTaskResp"
        },
        {
          "name": "SyncMaintenanceWindow",
          "name_key": "CoreService.SyncMaintenanceWindow",
          "input": "SyncMaintenanceWindowReq",
          "output": "SyncMaintenanceWindowResp"
        },
        {
          "name": "DeferMaintenanceTask",
          "name_key": "CoreService.DeferMaintenanceTask",
          "input": "DeferMaintenanceTaskReq",
          "output": "DeferMaintenanceTaskResp"
        },
        {
          "name": "UpdateMaintenanceTaskStatus",
          "name_key": "CoreService.UpdateMaintenanceTaskStatus",
          "input": "UpdateMaintenanceTaskStatusReq",
          "output": "UpdateMaintenanceTaskStatusResp"
        },
        {
          "name": "UpdateMaintenanceTaskExecutionStatus",
          "name_key": "CoreService.UpdateMaintenanceTaskExecutionStatus",
          "input": "UpdateMaintenanceTaskExecutionStatusReq",
          "output": "UpdateMaintenanceTaskExecutionStatusResp"
        },
        {
          "name": "QueryMaintenanceTasks",
          "name_key": "CoreService.QueryMaintenanceTasks",
          "input": "QueryMaintenanceTasksReq",
          "output": "QueryMaintenanceTasksResp"
        },
        {
          "name": "CountMaintenanceTasks",
          "name_key": "CoreService.CountMaintenanceTasks",
          "input": "CountMaintenanceTasksReq",
          "output": "CountMaintenanceTasksResp"
        },
        {
          "name": "QueryMaintenanceTaskExecutions",
          "name_key": "CoreService.QueryMaintenanceTaskExecutions",
          "input": "QueryMaintenanceTaskExecutionsReq",
          "output": "QueryMaintenanceTaskExecutionsResp"
        },
        {
          "name": "CreateNetworkPeer",
          "name_key": "CoreService.CreateNetworkPeer",
          "input": "CreateNetworkPeerReq",
          "output": "CreateNetworkPeerResp"
        },
        {
          "name": "DeleteNetworkPeer",
          "name_key": "CoreService.DeleteNetworkPeer",
          "input": "DeleteNetworkPeerReq",
          "output": "DeleteNetworkPeerResp"
        },
        {
          "name": "ListNetworkPeer",
          "name_key": "CoreService.ListNetworkPeer",
          "input": "ListNetworkPeerReq",
          "output": "ListNetworkPeerResp"
        },
        {
          "name": "GetPrivateLinkService",
          "name_key": "CoreService.GetPrivateLinkService",
          "input": "GetPrivateLinkServiceReq",
          "output": "GetPrivateLinkServiceResp"
        },
        {
          "name": "CreatePrivateLinkEndpoint",
          "name_key": "CoreService.CreatePrivateLinkEndpoint",
          "input": "CreatePrivateLinkEndpointReq",
          "output": "CreatePrivateLinkEndpointResp"
        },
        {
          "name": "ListPrivateLinkEndpoints",
          "name_key": "CoreService.ListPrivateLinkEndpoints",
          "input": "ListPrivateLinkEndpointsReq",
          "output": "ListPrivateLinkEndpointsResp"
        },
        {
          "name": "UpdateTenantQuota",
          "name_key": "CoreService.UpdateTenantQuota",
          "input": "UpdateTenantQuotaReq",
          "output": "UpdateTenantQuotaResp"
        },
        {
          "name": "ListTenantQuota",
          "name_key": "CoreService.ListTenantQuota",
          "input": "ListTenantQuotaReq",
          "output": "ListTenantQuotaResp"
        },
        {
          "name": "ListCloudRegions",
          "name_key": "CoreService.ListCloudRegions",
          "input": "ListCloudRegionsReq",
          "output": "ListCloudRegionsResp"
        },
        {
          "name": "ListCloudProviders",
          "name_key": "CoreService.ListCloudProviders",
          "input": "ListCloudProvidersReq",
          "output": "ListCloudProvidersResp"
        },
        {
          "name": "ListRegionCIDROfProject",
          "name_key": "CoreService.ListRegionCIDROfProject",
          "input": "ListRegionCIDROfProjectReq",
          "output": "ListRegionCIDROfProjectResp"
        }
      ]
    }
  ],
  "extensions": {
    "notes": [
      "The effective CoreService exposure is configuration-dependent: RegisterCoreServiceServer only registers methods listed in cfg.Server.ForwardMethods.",
      "pprof and gRPC reflection are always enabled when the proxy server is built."
    ]
  }
}
