{
  "repo": "tidbcloud/tidb-management-service",
  "binary": "serverless-global-service",
  "binary_path": "serverless-global-service/cmd/serverless-global-service/main.go",
  "surface_kind": "mixed_service",
  "type": "mixed_service",
  "services": [
    {
      "name": "ServerlessGlobalLifecycle",
      "package": "main",
      "methods": [
        {
          "name": "Startup",
          "name_key": "ServerlessGlobalLifecycle.Startup",
          "input": "config + cobra command flags",
          "output": "running gRPC server + workflow/eventbus",
          "type": "local"
        },
        {
          "name": "SetupGRPCServer",
          "name_key": "ServerlessGlobalLifecycle.SetupGRPCServer",
          "input": "tiinf + DI graph",
          "output": "grpc.Server",
          "type": "local"
        },
        {
          "name": "RunDBMigrate",
          "name_key": "ServerlessGlobalLifecycle.RunDBMigrate",
          "input": "configured mysql",
          "output": "migrated schema",
          "type": "local"
        },
        {
          "name": "StartEventbus",
          "name_key": "ServerlessGlobalLifecycle.StartEventbus",
          "input": "eventbus proxy address + WAL watcher",
          "output": "running eventbus + watcher",
          "type": "local"
        },
        {
          "name": "StartWorkflow",
          "name_key": "ServerlessGlobalLifecycle.StartWorkflow",
          "input": "workflow engine",
          "output": "running workflow with metrics",
          "type": "local"
        }
      ]
    },
    {
      "name": "ServerlessService",
      "package": "global.serverless.v1",
      "proto_file": "api/spec/global/serverless/v1/services.proto",
      "methods": [
        {
          "name": "Create",
          "name_key": "ServerlessService.Create",
          "request": "ServerlessServiceCreateRequest",
          "response": "ServerlessServiceCreateResponse",
          "description": "Create a new serverless cluster"
        },
        {
          "name": "Update",
          "name_key": "ServerlessService.Update",
          "request": "ServerlessServiceUpdateRequest",
          "response": "ServerlessServiceUpdateResponse",
          "description": "Update an existing serverless cluster"
        },
        {
          "name": "List",
          "name_key": "ServerlessService.List",
          "request": "ServerlessServiceListRequest",
          "response": "ServerlessServiceListResponse",
          "description": "List serverless clusters with filters"
        },
        {
          "name": "Delete",
          "name_key": "ServerlessService.Delete",
          "request": "ServerlessServiceDeleteRequest",
          "response": "ServerlessServiceDeleteResponse",
          "description": "Delete a serverless cluster"
        },
        {
          "name": "GetEncryptedCloudAdminPwd",
          "name_key": "ServerlessService.GetEncryptedCloudAdminPwd",
          "request": "ServerlessServiceGetEncryptedCloudAdminPwdRequest",
          "response": "ServerlessServiceGetEncryptedCloudAdminPwdResponse",
          "description": "Get encrypted cloud admin password"
        },
        {
          "name": "CountClusters",
          "name_key": "ServerlessService.CountClusters",
          "request": "ServerlessServiceCountClustersRequest",
          "response": "ServerlessServiceCountClustersResponse",
          "description": "Count clusters matching filter criteria"
        },
        {
          "name": "CheckCloudStoragePermission",
          "name_key": "ServerlessService.CheckCloudStoragePermission",
          "request": "CheckCloudStoragePermissionRequest",
          "response": "CheckCloudStoragePermissionResponse",
          "description": "Check cloud storage permission for auditlog/export/changefeed"
        },
        {
          "name": "UpdateAuditLogConfig",
          "name_key": "ServerlessService.UpdateAuditLogConfig",
          "request": "UpdateAuditLogConfigRequest",
          "response": "UpdateAuditLogConfigResponse",
          "description": "Update audit log configuration"
        }
      ]
    },
    {
      "name": "SqlUserService",
      "package": "global.serverless.v1",
      "proto_file": "api/spec/global/serverless/v1/services.proto",
      "methods": [
        {
          "name": "ChangeSqlUserPasswd",
          "name_key": "SqlUserService.ChangeSqlUserPasswd",
          "request": "ChangeSqlUserPasswdRequest",
          "response": "ChangeSqlUserPasswdResponse",
          "description": "Change SQL user password"
        },
        {
          "name": "CreateSqlUser",
          "name_key": "SqlUserService.CreateSqlUser",
          "request": "SqlUserServiceCreateSqlUserRequest",
          "response": "SqlUserServiceCreateSqlUserResponse",
          "description": "Create a new SQL user"
        },
        {
          "name": "UpdateSqlUser",
          "name_key": "SqlUserService.UpdateSqlUser",
          "request": "SqlUserServiceUpdateSqlUserRequest",
          "response": "SqlUserServiceUpdateSqlUserResponse",
          "description": "Update an existing SQL user"
        },
        {
          "name": "DeleteSqlUser",
          "name_key": "SqlUserService.DeleteSqlUser",
          "request": "SqlUserServiceDeleteSqlUserRequest",
          "response": "SqlUserServiceDeleteSqlUserResponse",
          "description": "Delete a SQL user"
        },
        {
          "name": "GetSqlUser",
          "name_key": "SqlUserService.GetSqlUser",
          "request": "SqlUserServiceGetSqlUserRequest",
          "response": "SqlUserServiceGetSqlUserResponse",
          "description": "Get SQL user details"
        },
        {
          "name": "IsSqlUserExisting",
          "name_key": "SqlUserService.IsSqlUserExisting",
          "request": "SqlUserServiceIsSqlUserExistingRequest",
          "response": "SqlUserServiceIsSqlUserExistingResponse",
          "description": "Check if SQL user exists"
        },
        {
          "name": "CreateSqlRole",
          "name_key": "SqlUserService.CreateSqlRole",
          "request": "SqlUserServiceCreateSqlRoleRequest",
          "response": "SqlUserServiceCreateSqlRoleResponse",
          "description": "Create a SQL role"
        },
        {
          "name": "UpdateSqlRole",
          "name_key": "SqlUserService.UpdateSqlRole",
          "request": "SqlUserServiceUpdateSqlRoleRequest",
          "response": "SqlUserServiceUpdateSqlRoleResponse",
          "description": "Update a SQL role"
        },
        {
          "name": "ListSqlUsers",
          "name_key": "SqlUserService.ListSqlUsers",
          "request": "ListSqlUsersRequest",
          "response": "ListSqlUsersResponse",
          "description": "List SQL users with filters"
        }
      ]
    },
    {
      "name": "CloudProviderService",
      "package": "global.serverless.v1",
      "proto_file": "api/spec/global/serverless/v1/services.proto",
      "methods": [
        {
          "name": "Register",
          "name_key": "CloudProviderService.Register",
          "request": "CloudProviderServiceRegisterRequest",
          "response": "CloudProvider",
          "description": "Register a cloud provider"
        },
        {
          "name": "List",
          "name_key": "CloudProviderService.List",
          "request": "CloudProviderServiceListRequest",
          "response": "CloudProviderServiceListResponse",
          "description": "List cloud providers"
        }
      ]
    },
    {
      "name": "RegionService",
      "package": "global.serverless.v1",
      "proto_file": "api/spec/global/serverless/v1/services.proto",
      "methods": [
        {
          "name": "Register",
          "name_key": "RegionService.Register",
          "request": "RegionServiceRegisterRequest",
          "response": "Region",
          "description": "Register a region"
        },
        {
          "name": "List",
          "name_key": "RegionService.List",
          "request": "RegionServiceListRequest",
          "response": "RegionServiceListResponse",
          "description": "List regions"
        },
        {
          "name": "Update",
          "name_key": "RegionService.Update",
          "request": "RegionServiceUpdateRequest",
          "response": "Region",
          "description": "Update a region"
        },
        {
          "name": "Get",
          "name_key": "RegionService.Get",
          "request": "RegionServiceGetRequest",
          "response": "Region",
          "description": "Get region details"
        },
        {
          "name": "Delete",
          "name_key": "RegionService.Delete",
          "request": "RegionServiceDeleteRequest",
          "response": "google.protobuf.Empty",
          "description": "Delete a region"
        }
      ]
    },
    {
      "name": "ServerlessImportService",
      "package": "global.serverless.v1",
      "proto_file": "api/spec/global/serverless/v1/services.proto",
      "methods": [
        {
          "name": "CheckImportPermission",
          "name_key": "ServerlessImportService.CheckImportPermission",
          "request": "CheckImportPermissionRequest",
          "response": "CheckImportPermissionResponse",
          "description": "Check import permission for cloud storage"
        },
        {
          "name": "Precheck",
          "name_key": "ServerlessImportService.Precheck",
          "request": "PrecheckRequest",
          "response": "PrecheckResponse",
          "description": "Precheck before data import"
        }
      ]
    },
    {
      "name": "ServerlessDMService",
      "package": "global.serverless.v1",
      "proto_file": "api/spec/global/serverless/v1/services.proto",
      "methods": [
        {
          "name": "Precheck",
          "name_key": "ServerlessDMService.Precheck",
          "request": "ServerlessDMServicePrecheckRequest",
          "response": "ServerlessDMServicePrecheckResponse",
          "description": "DM precheck"
        },
        {
          "name": "CreateVpcEndpoint",
          "name_key": "ServerlessDMService.CreateVpcEndpoint",
          "request": "CreateVpcEndpointRequest",
          "response": "CreateVpcEndpointResponse",
          "description": "Create VPC endpoint for DM"
        },
        {
          "name": "DescribeVpcEndpoint",
          "name_key": "ServerlessDMService.DescribeVpcEndpoint",
          "request": "DescribeVpcEndpointRequest",
          "response": "DescribeVpcEndpointResponse",
          "description": "Describe VPC endpoint"
        },
        {
          "name": "DeleteVpcEndpoint",
          "name_key": "ServerlessDMService.DeleteVpcEndpoint",
          "request": "DeleteVpcEndpointRequest",
          "response": "google.protobuf.Empty",
          "description": "Delete VPC endpoint"
        },
        {
          "name": "ListVpcEndpointZones",
          "name_key": "ServerlessDMService.ListVpcEndpointZones",
          "request": "ListVpcEndpointZonesRequest",
          "response": "ListVpcEndpointZonesResponse",
          "description": "List VPC endpoint zones"
        },
        {
          "name": "RemoveZoneFromVpcEndpoint",
          "name_key": "ServerlessDMService.RemoveZoneFromVpcEndpoint",
          "request": "RemoveZoneFromVpcEndpointRequest",
          "response": "google.protobuf.Empty",
          "description": "Remove zone from VPC endpoint"
        }
      ]
    },
    {
      "name": "ServerlessPrivateLinkConnectionService",
      "package": "global.serverless.v1",
      "proto_file": "api/spec/global/serverless/v1/services.proto",
      "methods": [
        {
          "name": "CreateAWSVpcEndpoint",
          "name_key": "ServerlessPrivateLinkConnectionService.CreateAWSVpcEndpoint",
          "request": "CreateAWSVpcEndpointRequest",
          "response": "CreateAWSVpcEndpointResponse",
          "description": "Create AWS VPC endpoint"
        },
        {
          "name": "DescribeAWSVpcEndpoint",
          "name_key": "ServerlessPrivateLinkConnectionService.DescribeAWSVpcEndpoint",
          "request": "DescribeAWSVpcEndpointRequest",
          "response": "DescribeAWSVpcEndpointResponse",
          "description": "Describe AWS VPC endpoint"
        },
        {
          "name": "DeleteAWSVpcEndpoint",
          "name_key": "ServerlessPrivateLinkConnectionService.DeleteAWSVpcEndpoint",
          "request": "DeleteAWSVpcEndpointRequest",
          "response": "google.protobuf.Empty",
          "description": "Delete AWS VPC endpoint"
        },
        {
          "name": "CreateAliCloudVpcEndpoint",
          "name_key": "ServerlessPrivateLinkConnectionService.CreateAliCloudVpcEndpoint",
          "request": "CreateAliCloudVpcEndpointRequest",
          "response": "CreateAliCloudVpcEndpointResponse",
          "description": "Create AliCloud VPC endpoint"
        },
        {
          "name": "DescribeAliCloudVpcEndpoint",
          "name_key": "ServerlessPrivateLinkConnectionService.DescribeAliCloudVpcEndpoint",
          "request": "DescribeAliCloudVpcEndpointRequest",
          "response": "DescribeAliCloudVpcEndpointResponse",
          "description": "Describe AliCloud VPC endpoint"
        },
        {
          "name": "DeleteAliCloudVpcEndpoint",
          "name_key": "ServerlessPrivateLinkConnectionService.DeleteAliCloudVpcEndpoint",
          "request": "DeleteAliCloudVpcEndpointRequest",
          "response": "google.protobuf.Empty",
          "description": "Delete AliCloud VPC endpoint"
        },
        {
          "name": "GetZoneIds",
          "name_key": "ServerlessPrivateLinkConnectionService.GetZoneIds",
          "request": "GetZoneIdsRequest",
          "response": "GetZoneIdsResponse",
          "description": "Get zone IDs"
        },
        {
          "name": "ListAliCloudVpcEndpointZones",
          "name_key": "ServerlessPrivateLinkConnectionService.ListAliCloudVpcEndpointZones",
          "request": "ListAliCloudVpcEndpointZonesRequest",
          "response": "ListAliCloudVpcEndpointZonesResponse",
          "description": "List AliCloud VPC endpoint zones"
        },
        {
          "name": "RemoveAliCloudZoneFromVpcEndpoint",
          "name_key": "ServerlessPrivateLinkConnectionService.RemoveAliCloudZoneFromVpcEndpoint",
          "request": "RemoveAliCloudZoneFromVpcEndpointRequest",
          "response": "google.protobuf.Empty",
          "description": "Remove AliCloud zone from VPC endpoint"
        },
        {
          "name": "CreateAliCloudDNSRecord",
          "name_key": "ServerlessPrivateLinkConnectionService.CreateAliCloudDNSRecord",
          "request": "CreateAliCloudDNSRecordRequest",
          "response": "CreateAliCloudDNSRecordResponse",
          "description": "Create AliCloud DNS record"
        },
        {
          "name": "DeleteAliCloudDNSRecord",
          "name_key": "ServerlessPrivateLinkConnectionService.DeleteAliCloudDNSRecord",
          "request": "DeleteAliCloudDNSRecordRequest",
          "response": "google.protobuf.Empty",
          "description": "Delete AliCloud DNS record"
        },
        {
          "name": "CreateAWSRoute53Records",
          "name_key": "ServerlessPrivateLinkConnectionService.CreateAWSRoute53Records",
          "request": "CreateAWSRoute53RecordsRequest",
          "response": "CreateAWSRoute53RecordsResponse",
          "description": "Create AWS Route53 records"
        },
        {
          "name": "DeleteAWSRoute53Records",
          "name_key": "ServerlessPrivateLinkConnectionService.DeleteAWSRoute53Records",
          "request": "DeleteAWSRoute53RecordsRequest",
          "response": "DeleteAWSRoute53RecordsResponse",
          "description": "Delete AWS Route53 records"
        },
        {
          "name": "GetAWSRoute53Change",
          "name_key": "ServerlessPrivateLinkConnectionService.GetAWSRoute53Change",
          "request": "GetAWSRoute53ChangeRequest",
          "response": "GetAWSRoute53ChangeResponse",
          "description": "Get AWS Route53 change status"
        },
        {
          "name": "CreateAWSRoute53PrivateHostedZone",
          "name_key": "ServerlessPrivateLinkConnectionService.CreateAWSRoute53PrivateHostedZone",
          "request": "CreateAWSRoute53PrivateHostedZoneRequest",
          "response": "CreateAWSRoute53PrivateHostedZoneResponse",
          "description": "Create AWS Route53 private hosted zone"
        },
        {
          "name": "DeleteAWSRoute53PrivateHostedZone",
          "name_key": "ServerlessPrivateLinkConnectionService.DeleteAWSRoute53PrivateHostedZone",
          "request": "DeleteAWSRoute53PrivateHostedZoneRequest",
          "response": "DeleteAWSRoute53PrivateHostedZoneResponse",
          "description": "Delete AWS Route53 private hosted zone"
        },
        {
          "name": "CreateAliCloudDNSPrivateHostedZone",
          "name_key": "ServerlessPrivateLinkConnectionService.CreateAliCloudDNSPrivateHostedZone",
          "request": "CreateAliCloudDNSPrivateHostedZoneRequest",
          "response": "CreateAliCloudDNSPrivateHostedZoneResponse",
          "description": "Create AliCloud DNS private hosted zone"
        },
        {
          "name": "DeleteAliCloudDNSPrivateHostedZone",
          "name_key": "ServerlessPrivateLinkConnectionService.DeleteAliCloudDNSPrivateHostedZone",
          "request": "DeleteAliCloudDNSPrivateHostedZoneRequest",
          "response": "DeleteAliCloudDNSPrivateHostedZoneResponse",
          "description": "Delete AliCloud DNS private hosted zone"
        },
        {
          "name": "AttachVpcToAliCloudDNSPrivateHostedZone",
          "name_key": "ServerlessPrivateLinkConnectionService.AttachVpcToAliCloudDNSPrivateHostedZone",
          "request": "AttachVpcToAliCloudDNSPrivateHostedZoneRequest",
          "response": "AttachVpcToAliCloudDNSPrivateHostedZoneResponse",
          "description": "Attach VPC to AliCloud DNS private hosted zone"
        },
        {
          "name": "DetachVpcFromAliCloudDNSPrivateHostedZone",
          "name_key": "ServerlessPrivateLinkConnectionService.DetachVpcFromAliCloudDNSPrivateHostedZone",
          "request": "DetachVpcFromAliCloudDNSPrivateHostedZoneRequest",
          "response": "DetachVpcFromAliCloudDNSPrivateHostedZoneResponse",
          "description": "Detach VPC from AliCloud DNS private hosted zone"
        },
        {
          "name": "CreateMSKVPCConnection",
          "name_key": "ServerlessPrivateLinkConnectionService.CreateMSKVPCConnection",
          "request": "CreateMSKVPCConnectionRequest",
          "response": "CreateMSKVPCConnectionResponse",
          "description": "Create MSK VPC connection"
        },
        {
          "name": "DeleteMSKVPCConnection",
          "name_key": "ServerlessPrivateLinkConnectionService.DeleteMSKVPCConnection",
          "request": "DeleteMSKVPCConnectionRequest",
          "response": "DeleteMSKVPCConnectionResponse",
          "description": "Delete MSK VPC connection"
        },
        {
          "name": "GetMSKVPCConnection",
          "name_key": "ServerlessPrivateLinkConnectionService.GetMSKVPCConnection",
          "request": "GetMSKVPCConnectionRequest",
          "response": "GetMSKVPCConnectionResponse",
          "description": "Get MSK VPC connection"
        }
      ]
    }
  ],
  "extensions": {
    "notes": [
      "The binary always registers all seven gRPC services at startup, then conditionally runs DB migration, eventbus, and workflow bootstrap from setup().",
      "pprof is attached to the TiInf Gin engine in serve mode."
    ]
  }
}
