import {z} from 'zod' export type ApiConfigHandler = {authFailAction?: ('AUTH_FAIL_ACTION_UNSPECIFIED' | 'AUTH_FAIL_ACTION_REDIRECT' | 'AUTH_FAIL_ACTION_UNAUTHORIZED') | undefined, login?: ('LOGIN_UNSPECIFIED' | 'LOGIN_OPTIONAL' | 'LOGIN_ADMIN' | 'LOGIN_REQUIRED') | undefined, script?: string | undefined, securityLevel?: ('SECURE_UNSPECIFIED' | 'SECURE_DEFAULT' | 'SECURE_NEVER' | 'SECURE_OPTIONAL' | 'SECURE_ALWAYS') | undefined, url?: string | undefined}; export type CpuUtilization = {aggregationWindowLength?: unknown | undefined, targetUtilization?: number | undefined}; export type DiskUtilization = {targetReadBytesPerSecond?: number | undefined, targetReadOpsPerSecond?: number | undefined, targetWriteBytesPerSecond?: number | undefined, targetWriteOpsPerSecond?: number | undefined}; export type NetworkUtilization = {targetReceivedBytesPerSecond?: number | undefined, targetReceivedPacketsPerSecond?: number | undefined, targetSentBytesPerSecond?: number | undefined, targetSentPacketsPerSecond?: number | undefined}; export type RequestUtilization = {targetConcurrentRequests?: number | undefined, targetRequestCountPerSecond?: number | undefined}; export type StandardSchedulerSettings = {maxInstances?: number | undefined, minInstances?: number | undefined, targetCpuUtilization?: number | undefined, targetThroughputUtilization?: number | undefined}; export type AutomaticScaling = {coolDownPeriod?: unknown | undefined, cpuUtilization?: CpuUtilization | undefined, diskUtilization?: DiskUtilization | undefined, maxConcurrentRequests?: number | undefined, maxIdleInstances?: number | undefined, maxPendingLatency?: unknown | undefined, maxTotalInstances?: number | undefined, minIdleInstances?: number | undefined, minPendingLatency?: unknown | undefined, minTotalInstances?: number | undefined, networkUtilization?: NetworkUtilization | undefined, requestUtilization?: RequestUtilization | undefined, standardSchedulerSettings?: StandardSchedulerSettings | undefined}; export type BasicScaling = {idleTimeout?: unknown | undefined, maxInstances?: number | undefined}; export type CloudBuildOptions = {appYamlPath?: string | undefined, cloudBuildTimeout?: unknown | undefined}; export type ContainerInfo = {image?: string | undefined}; export type FileInfo = {mimeType?: string | undefined, sha1Sum?: string | undefined, sourceUrl?: string | undefined}; export type ZipInfo = {filesCount?: number | undefined, sourceUrl?: string | undefined}; export type Deployment = {cloudBuildOptions?: CloudBuildOptions | undefined, container?: ContainerInfo | undefined, files?: {[key: string]: FileInfo} | undefined, zip?: ZipInfo | undefined}; export type EndpointsApiService = {configId?: string | undefined, disableTraceSampling?: boolean | undefined, name?: string | undefined, rolloutStrategy?: ('UNSPECIFIED_ROLLOUT_STRATEGY' | 'FIXED' | 'MANAGED') | undefined}; export type Entrypoint = {shell?: string | undefined}; export type ErrorHandler = {errorCode?: ('ERROR_CODE_UNSPECIFIED' | 'ERROR_CODE_DEFAULT' | 'ERROR_CODE_OVER_QUOTA' | 'ERROR_CODE_DOS_API_DENIAL' | 'ERROR_CODE_TIMEOUT') | undefined, mimeType?: string | undefined, staticFile?: string | undefined}; export type FlexibleRuntimeSettings = {operatingSystem?: string | undefined, runtimeVersion?: string | undefined}; export type ApiEndpointHandler = {scriptPath?: string | undefined}; export type ScriptHandler = {scriptPath?: string | undefined}; export type StaticFilesHandler = {applicationReadable?: boolean | undefined, expiration?: unknown | undefined, httpHeaders?: {[key: string]: string} | undefined, mimeType?: string | undefined, path?: string | undefined, requireMatchingFile?: boolean | undefined, uploadPathRegex?: string | undefined}; export type UrlMap = {apiEndpoint?: ApiEndpointHandler | undefined, authFailAction?: ('AUTH_FAIL_ACTION_UNSPECIFIED' | 'AUTH_FAIL_ACTION_REDIRECT' | 'AUTH_FAIL_ACTION_UNAUTHORIZED') | undefined, login?: ('LOGIN_UNSPECIFIED' | 'LOGIN_OPTIONAL' | 'LOGIN_ADMIN' | 'LOGIN_REQUIRED') | undefined, redirectHttpResponseCode?: ('REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED' | 'REDIRECT_HTTP_RESPONSE_CODE_301' | 'REDIRECT_HTTP_RESPONSE_CODE_302' | 'REDIRECT_HTTP_RESPONSE_CODE_303' | 'REDIRECT_HTTP_RESPONSE_CODE_307') | undefined, script?: ScriptHandler | undefined, securityLevel?: ('SECURE_UNSPECIFIED' | 'SECURE_DEFAULT' | 'SECURE_NEVER' | 'SECURE_OPTIONAL' | 'SECURE_ALWAYS') | undefined, staticFiles?: StaticFilesHandler | undefined, urlRegex?: string | undefined}; export type HealthCheck = {checkInterval?: unknown | undefined, disableHealthCheck?: boolean | undefined, healthyThreshold?: number | undefined, host?: string | undefined, restartThreshold?: number | undefined, timeout?: unknown | undefined, unhealthyThreshold?: number | undefined}; export type Library = {name?: string | undefined, version?: string | undefined}; export type LivenessCheck = {checkInterval?: unknown | undefined, failureThreshold?: number | undefined, host?: string | undefined, initialDelay?: unknown | undefined, path?: string | undefined, successThreshold?: number | undefined, timeout?: unknown | undefined}; export type ManualScaling = {instances?: number | undefined}; export type Network = {forwardedPorts?: Array | undefined, instanceIpMode?: ('INSTANCE_IP_MODE_UNSPECIFIED' | 'EXTERNAL' | 'INTERNAL') | undefined, instanceTag?: string | undefined, name?: string | undefined, sessionAffinity?: boolean | undefined, subnetworkName?: string | undefined}; export type ReadinessCheck = {appStartTimeout?: unknown | undefined, checkInterval?: unknown | undefined, failureThreshold?: number | undefined, host?: string | undefined, path?: string | undefined, successThreshold?: number | undefined, timeout?: unknown | undefined}; export type Volume = {name?: string | undefined, sizeGb?: number | undefined, volumeType?: string | undefined}; export type Resources = {cpu?: number | undefined, diskGb?: number | undefined, kmsKeyReference?: string | undefined, memoryGb?: number | undefined, volumes?: Array | undefined}; export type VpcNetworkInterface = {network?: string | undefined, subnet?: string | undefined, tags?: Array | undefined}; export type VpcAccess = {networkInterfaces?: Array | undefined, vpcEgress?: ('VPC_EGRESS_UNSPECIFIED' | 'ALL_TRAFFIC' | 'PRIVATE_IP_RANGES') | undefined}; export type VpcAccessConnector = {egressSetting?: ('EGRESS_SETTING_UNSPECIFIED' | 'ALL_TRAFFIC' | 'PRIVATE_IP_RANGES') | undefined, name?: string | undefined}; export type Version = {apiConfig?: ApiConfigHandler | undefined, appEngineApis?: boolean | undefined, appEngineBundledServices?: (Array<'BUNDLED_SERVICE_TYPE_UNSPECIFIED' | 'BUNDLED_SERVICE_TYPE_APP_IDENTITY_SERVICE' | 'BUNDLED_SERVICE_TYPE_BLOBSTORE' | 'BUNDLED_SERVICE_TYPE_CAPABILITY_SERVICE' | 'BUNDLED_SERVICE_TYPE_DATASTORE_V3' | 'BUNDLED_SERVICE_TYPE_DEFERRED' | 'BUNDLED_SERVICE_TYPE_IMAGES' | 'BUNDLED_SERVICE_TYPE_MAIL' | 'BUNDLED_SERVICE_TYPE_MEMCACHE' | 'BUNDLED_SERVICE_TYPE_MODULES' | 'BUNDLED_SERVICE_TYPE_NAMESPACES' | 'BUNDLED_SERVICE_TYPE_NDB' | 'BUNDLED_SERVICE_TYPE_SEARCH' | 'BUNDLED_SERVICE_TYPE_TASKQUEUES' | 'BUNDLED_SERVICE_TYPE_URLFETCH' | 'BUNDLED_SERVICE_TYPE_USERS'>) | undefined, automaticScaling?: AutomaticScaling | undefined, basicScaling?: BasicScaling | undefined, betaSettings?: {[key: string]: string} | undefined, buildEnvVariables?: {[key: string]: string} | undefined, createTime?: unknown | undefined, createdBy?: string | undefined, defaultExpiration?: unknown | undefined, deployment?: Deployment | undefined, diskUsageBytes?: unknown | undefined, endpointsApiService?: EndpointsApiService | undefined, entrypoint?: Entrypoint | undefined, env?: string | undefined, envVariables?: {[key: string]: string} | undefined, errorHandlers?: Array | undefined, flexibleRuntimeSettings?: FlexibleRuntimeSettings | undefined, generatedCustomerMetadata?: {[key: string]: unknown} | undefined, handlers?: Array | undefined, healthCheck?: HealthCheck | undefined, id?: string | undefined, inboundServices?: (Array<'INBOUND_SERVICE_UNSPECIFIED' | 'INBOUND_SERVICE_MAIL' | 'INBOUND_SERVICE_MAIL_BOUNCE' | 'INBOUND_SERVICE_XMPP_ERROR' | 'INBOUND_SERVICE_XMPP_MESSAGE' | 'INBOUND_SERVICE_XMPP_SUBSCRIBE' | 'INBOUND_SERVICE_XMPP_PRESENCE' | 'INBOUND_SERVICE_CHANNEL_PRESENCE' | 'INBOUND_SERVICE_WARMUP'>) | undefined, instanceClass?: string | undefined, libraries?: Array | undefined, livenessCheck?: LivenessCheck | undefined, manualScaling?: ManualScaling | undefined, name?: string | undefined, network?: Network | undefined, nobuildFilesRegex?: string | undefined, readinessCheck?: ReadinessCheck | undefined, resources?: Resources | undefined, runtime?: string | undefined, runtimeApiVersion?: string | undefined, runtimeChannel?: string | undefined, runtimeMainExecutablePath?: string | undefined, serviceAccount?: string | undefined, servingStatus?: ('SERVING_STATUS_UNSPECIFIED' | 'SERVING' | 'STOPPED') | undefined, threadsafe?: boolean | undefined, versionUrl?: string | undefined, vm?: boolean | undefined, vpcAccess?: VpcAccess | undefined, vpcAccessConnector?: VpcAccessConnector | undefined, zones?: Array | undefined}; export type PatchApiV1AppsAppsIdServicesServicesIdVersionsVersionsIdArgs = {appsId: string, servicesId: string, versionsId: string, updateMask?: unknown | undefined, body: Version}; export type PatchApiV1AppsAppsIdServicesServicesIdVersionsVersionsIdOptions = {baseUrl?: string | undefined, Oauth2?: string | undefined, Oauth2c?: string | undefined, fetch?: typeof fetch | undefined}; export const status = z.object({code: z.number().int().optional(), details: z.array(z.record(z.string(), z.unknown())).optional(), message: z.string().optional()}); export const operation = z.object({done: z.boolean().optional(), error: status.optional(), metadata: z.record(z.string(), z.unknown()).optional(), name: z.string().optional(), response: z.record(z.string(), z.unknown()).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 }; /** * Updates the specified Version resource. You can specify the following fields depending on the App Engine environment and type of scaling that the version resource uses:Standard environment instance_class (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.instance_class)automatic scaling in the standard environment: automatic_scaling.min_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling) automatic_scaling.max_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling) automaticScaling.standard_scheduler_settings.max_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings) automaticScaling.standard_scheduler_settings.min_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings) automaticScaling.standard_scheduler_settings.target_cpu_utilization (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings) automaticScaling.standard_scheduler_settings.target_throughput_utilization (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#StandardSchedulerSettings)basic scaling or manual scaling in the standard environment: serving_status (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status) manual_scaling.instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#manualscaling)Flexible environment serving_status (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.serving_status)automatic scaling in the flexible environment: automatic_scaling.min_total_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling) automatic_scaling.max_total_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling) automatic_scaling.cool_down_period_sec (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling) automatic_scaling.cpu_utilization.target_utilization (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#Version.FIELDS.automatic_scaling)manual scaling in the flexible environment: manual_scaling.instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions#manualscaling) * * PATCH /v1/apps/{appsId}/services/{servicesId}/versions/{versionsId} */ export const patchApiV1AppsAppsIdServicesServicesIdVersionsVersionsId = async (args: PatchApiV1AppsAppsIdServicesServicesIdVersionsVersionsIdArgs, options?: PatchApiV1AppsAppsIdServicesServicesIdVersionsVersionsIdOptions) => { const {baseUrl = "https://appengine.googleapis.com", fetch: fetchFn = fetch, Oauth2, Oauth2c} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (args.updateMask != null) query.append("updateMask", String(args.updateMask)) if (Oauth2 !== undefined) headers.set('authorization', `Bearer ${Oauth2}`) if (Oauth2c !== undefined) headers.set('authorization', `Bearer ${Oauth2c}`) const url = `${baseUrl.replace(/\/+$/, '')}/v1/apps/${encodeURIComponent(String(args.appsId))}/services/${encodeURIComponent(String(args.servicesId))}/versions/${encodeURIComponent(String(args.versionsId))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PATCH", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(operation, await res.json()) };