import {z} from 'zod' export type GetApiV1LocationsLocationDnsDnsNameResolveConnectSettingsArgs = {location: string, dnsName: string}; export type GetApiV1LocationsLocationDnsDnsNameResolveConnectSettingsOptions = {baseUrl?: string | undefined, Oauth2?: string | undefined, Oauth2c?: string | undefined, fetch?: typeof fetch | undefined}; export const dnsNameMapping = z.object({connectionType: z.enum(["CONNECTION_TYPE_UNSPECIFIED", "PUBLIC", "PRIVATE_SERVICES_ACCESS", "PRIVATE_SERVICE_CONNECT"]).optional(), dnsScope: z.enum(["DNS_SCOPE_UNSPECIFIED", "INSTANCE", "CLUSTER"]).optional(), name: z.string().optional(), recordManager: z.enum(["RECORD_MANAGER_UNSPECIFIED", "CUSTOMER", "CLOUD_SQL_AUTOMATION"]).optional()}); export const ipMapping = z.object({ipAddress: z.string().optional(), timeToRetire: z.string().optional(), type: z.enum(["SQL_IP_ADDRESS_TYPE_UNSPECIFIED", "PRIMARY", "OUTGOING", "PRIVATE", "MIGRATED_1ST_GEN"]).optional()}); export const connectPoolNodeConfig = z.object({dnsName: z.string().optional(), dnsNames: z.array(dnsNameMapping).optional(), ipAddresses: z.array(ipMapping).optional(), name: z.string().optional()}); export const sslCert = z.object({cert: z.string().optional(), certSerialNumber: z.string().optional(), commonName: z.string().optional(), createTime: z.string().optional(), expirationTime: z.string().optional(), instance: z.string().optional(), kind: z.string().optional(), selfLink: z.string().optional(), sha1Fingerprint: z.string().optional()}); export const connectSettings = z.object({backendType: z.enum(["SQL_BACKEND_TYPE_UNSPECIFIED", "FIRST_GEN", "SECOND_GEN", "EXTERNAL"]).optional(), connectionName: z.string().optional(), customSubjectAlternativeNames: z.array(z.string()).optional(), databaseVersion: z.enum(["SQL_DATABASE_VERSION_UNSPECIFIED", "MYSQL_5_1", "MYSQL_5_5", "MYSQL_5_6", "MYSQL_5_7", "MYSQL_8_0", "MYSQL_8_0_18", "MYSQL_8_0_26", "MYSQL_8_0_27", "MYSQL_8_0_28", "MYSQL_8_0_29", "MYSQL_8_0_30", "MYSQL_8_0_31", "MYSQL_8_0_32", "MYSQL_8_0_33", "MYSQL_8_0_34", "MYSQL_8_0_35", "MYSQL_8_0_36", "MYSQL_8_0_37", "MYSQL_8_0_39", "MYSQL_8_0_40", "MYSQL_8_0_41", "MYSQL_8_0_42", "MYSQL_8_0_43", "MYSQL_8_0_44", "MYSQL_8_0_45", "MYSQL_8_0_46", "MYSQL_8_4", "MYSQL_9_7", "SQLSERVER_2017_STANDARD", "SQLSERVER_2017_ENTERPRISE", "SQLSERVER_2017_EXPRESS", "SQLSERVER_2017_WEB", "POSTGRES_9_6", "POSTGRES_10", "POSTGRES_11", "POSTGRES_12", "POSTGRES_13", "POSTGRES_14", "POSTGRES_15", "POSTGRES_16", "POSTGRES_17", "POSTGRES_18", "POSTGRES_19", "POSTGRES_20", "SQLSERVER_2019_STANDARD", "SQLSERVER_2019_ENTERPRISE", "SQLSERVER_2019_EXPRESS", "SQLSERVER_2019_WEB", "SQLSERVER_2022_STANDARD", "SQLSERVER_2022_ENTERPRISE", "SQLSERVER_2022_EXPRESS", "SQLSERVER_2022_WEB", "SQLSERVER_2025_STANDARD", "SQLSERVER_2025_ENTERPRISE", "SQLSERVER_2025_EXPRESS"]).optional(), dnsName: z.string().optional(), dnsNames: z.array(dnsNameMapping).optional(), ipAddresses: z.array(ipMapping).optional(), kind: z.string().optional(), mdxProtocolSupport: z.array(z.enum(["MDX_PROTOCOL_SUPPORT_UNSPECIFIED", "CLIENT_PROTOCOL_TYPE"])).optional(), nodeCount: z.number().int().optional(), nodes: z.array(connectPoolNodeConfig).optional(), pscEnabled: z.boolean().optional(), region: z.string().optional(), serverCaCert: sslCert.optional(), serverCaMode: z.enum(["CA_MODE_UNSPECIFIED", "GOOGLE_MANAGED_INTERNAL_CA", "GOOGLE_MANAGED_CAS_CA", "CUSTOMER_MANAGED_CAS_CA"]).optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Retrieves connect settings about a Cloud SQL instance using the instance DNS name. * * GET /v1/locations/{location}/dns/{dnsName}:resolveConnectSettings * * Also accepts auth: Oauth2 + Oauth2c */ export const getApiV1LocationsLocationDnsDnsNameResolveConnectSettings = async (args: GetApiV1LocationsLocationDnsDnsNameResolveConnectSettingsArgs, options?: GetApiV1LocationsLocationDnsDnsNameResolveConnectSettingsOptions) => { const {baseUrl = "https://sqladmin.googleapis.com", fetch: fetchFn = fetch, Oauth2, Oauth2c} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (Oauth2 !== undefined) headers.set('authorization', `Bearer ${Oauth2}`) if (Oauth2c !== undefined) headers.set('authorization', `Bearer ${Oauth2c}`) const url = `${baseUrl.replace(/\/+$/, '')}/v1/locations/${encodeURIComponent(String(args.location))}/dns/${encodeURIComponent(String(args.dnsName))}:resolveConnectSettings${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(connectSettings, await res.json()) };