import {z} from 'zod' export type GetApiV1b3ProjectsProjectIdJobsArgs = {projectId: string, 'createTimeRange.endTime'?: unknown | undefined, 'createTimeRange.startTime'?: unknown | undefined, filter?: ('UNKNOWN' | 'ALL' | 'TERMINATED' | 'ACTIVE') | undefined, location?: string | undefined, name?: string | undefined, pageSize?: number | undefined, pageToken?: string | undefined, regionalFanoutRequested?: boolean | undefined, 'terminationTimeRange.endTime'?: unknown | undefined, 'terminationTimeRange.startTime'?: unknown | undefined, view?: ('JOB_VIEW_UNKNOWN' | 'JOB_VIEW_SUMMARY' | 'JOB_VIEW_ALL' | 'JOB_VIEW_DESCRIPTION') | undefined}; export type GetApiV1b3ProjectsProjectIdJobsOptions = {baseUrl?: string | undefined, Oauth2?: string | undefined, Oauth2c?: string | undefined, fetch?: typeof fetch | undefined}; export const failedLocation = z.object({name: z.string().optional()}); export const dataSamplingConfig = z.object({behaviors: z.array(z.enum(["DATA_SAMPLING_BEHAVIOR_UNSPECIFIED", "DISABLED", "ALWAYS_ON", "EXCEPTIONS"])).optional()}); export const debugOptions = z.object({dataSampling: dataSamplingConfig.optional(), enableHotKeyLogging: z.boolean().optional()}); export const autoscalingSettings = z.object({algorithm: z.enum(["AUTOSCALING_ALGORITHM_UNKNOWN", "AUTOSCALING_ALGORITHM_NONE", "AUTOSCALING_ALGORITHM_BASIC"]).optional(), maxNumWorkers: z.number().int().optional()}); export const disk = z.object({diskType: z.string().optional(), mountPoint: z.string().optional(), sizeGb: z.number().int().optional()}); export const package = z.object({location: z.string().optional(), name: z.string().optional(), sha256: z.string().optional()}); export const sdkHarnessContainerImage = z.object({capabilities: z.array(z.string()).optional(), containerImage: z.string().optional(), environmentId: z.string().optional(), useSingleCorePerContainer: z.boolean().optional()}); export const workerSettings = z.object({baseUrl: z.string().optional(), reportingEnabled: z.boolean().optional(), servicePath: z.string().optional(), shuffleServicePath: z.string().optional(), tempStoragePrefix: z.string().optional(), workerId: z.string().optional()}); export const taskRunnerSettings = z.object({alsologtostderr: z.boolean().optional(), baseTaskDir: z.string().optional(), baseUrl: z.string().optional(), commandlinesFileName: z.string().optional(), continueOnException: z.boolean().optional(), dataflowApiVersion: z.string().optional(), harnessCommand: z.string().optional(), languageHint: z.string().optional(), logDir: z.string().optional(), logToSerialconsole: z.boolean().optional(), logUploadLocation: z.string().optional(), oauthScopes: z.array(z.string()).optional(), parallelWorkerSettings: workerSettings.optional(), streamingWorkerMainClass: z.string().optional(), taskGroup: z.string().optional(), taskUser: z.string().optional(), tempStoragePrefix: z.string().optional(), vmId: z.string().optional(), workflowFileName: z.string().optional()}); export const workerPool = z.object({autoscalingSettings: autoscalingSettings.optional(), dataDisks: z.array(disk).optional(), defaultPackageSet: z.enum(["DEFAULT_PACKAGE_SET_UNKNOWN", "DEFAULT_PACKAGE_SET_NONE", "DEFAULT_PACKAGE_SET_JAVA", "DEFAULT_PACKAGE_SET_PYTHON"]).optional(), diskProvisionedIops: z.string().optional(), diskProvisionedThroughputMibps: z.string().optional(), diskSizeGb: z.number().int().optional(), diskSourceImage: z.string().optional(), diskType: z.string().optional(), ipConfiguration: z.enum(["WORKER_IP_UNSPECIFIED", "WORKER_IP_PUBLIC", "WORKER_IP_PRIVATE"]).optional(), kind: z.string().optional(), machineType: z.string().optional(), metadata: z.record(z.string(), z.string()).optional(), network: z.string().optional(), numThreadsPerWorker: z.number().int().optional(), numWorkers: z.number().int().optional(), onHostMaintenance: z.string().optional(), packages: z.array(package).optional(), poolArgs: z.record(z.string(), z.unknown()).optional(), sdkHarnessContainerImages: z.array(sdkHarnessContainerImage).optional(), subnetwork: z.string().optional(), taskrunnerSettings: taskRunnerSettings.optional(), teardownPolicy: z.enum(["TEARDOWN_POLICY_UNKNOWN", "TEARDOWN_ALWAYS", "TEARDOWN_ON_SUCCESS", "TEARDOWN_NEVER"]).optional(), workerHarnessContainerImage: z.string().optional(), zone: z.string().optional()}); export const environment = z.object({clusterManagerApiService: z.string().optional(), dataset: z.string().optional(), debugOptions: debugOptions.optional(), experiments: z.array(z.string()).optional(), flexResourceSchedulingGoal: z.enum(["FLEXRS_UNSPECIFIED", "FLEXRS_SPEED_OPTIMIZED", "FLEXRS_COST_OPTIMIZED"]).optional(), internalExperiments: z.record(z.string(), z.unknown()).optional(), sdkPipelineOptions: z.record(z.string(), z.unknown()).optional(), serviceAccountEmail: z.string().optional(), serviceKmsKeyName: z.string().optional(), serviceOptions: z.array(z.string()).optional(), shuffleMode: z.enum(["SHUFFLE_MODE_UNSPECIFIED", "VM_BASED", "SERVICE_BASED"]).optional(), streamingMode: z.enum(["STREAMING_MODE_UNSPECIFIED", "STREAMING_MODE_EXACTLY_ONCE", "STREAMING_MODE_AT_LEAST_ONCE"]).optional(), tempStoragePrefix: z.string().optional(), usePublicIps: z.boolean().optional(), useStreamingEngineResourceBasedBilling: z.boolean().optional(), userAgent: z.record(z.string(), z.unknown()).optional(), version: z.record(z.string(), z.unknown()).optional(), workerPools: z.array(workerPool).optional(), workerRegion: z.string().optional(), workerZone: z.string().optional()}); export const jobExecutionStageInfo = z.object({stepName: z.array(z.string()).optional()}); export const jobExecutionInfo = z.object({stages: z.record(z.string(), jobExecutionStageInfo).optional()}); export const bigTableIODetails = z.object({instanceId: z.string().optional(), projectId: z.string().optional(), tableId: z.string().optional()}); export const bigQueryIODetails = z.object({dataset: z.string().optional(), projectId: z.string().optional(), query: z.string().optional(), table: z.string().optional()}); export const datastoreIODetails = z.object({namespace: z.string().optional(), projectId: z.string().optional()}); export const fileIODetails = z.object({filePattern: z.string().optional()}); export const pubSubIODetails = z.object({subscription: z.string().optional(), topic: z.string().optional()}); export const sdkBug = z.object({severity: z.enum(["SEVERITY_UNSPECIFIED", "NOTICE", "WARNING", "SEVERE"]).optional(), type: z.enum(["TYPE_UNSPECIFIED", "GENERAL", "PERFORMANCE", "DATALOSS"]).optional(), uri: z.string().optional()}); export const sdkVersion = z.object({bugs: z.array(sdkBug).optional(), sdkSupportStatus: z.enum(["UNKNOWN", "SUPPORTED", "STALE", "DEPRECATED", "UNSUPPORTED"]).optional(), version: z.string().optional(), versionDisplayName: z.string().optional()}); export const spannerIODetails = z.object({databaseId: z.string().optional(), instanceId: z.string().optional(), projectId: z.string().optional()}); export const jobMetadata = z.object({bigTableDetails: z.array(bigTableIODetails).optional(), bigqueryDetails: z.array(bigQueryIODetails).optional(), datastoreDetails: z.array(datastoreIODetails).optional(), fileDetails: z.array(fileIODetails).optional(), pubsubDetails: z.array(pubSubIODetails).optional(), sdkVersion: sdkVersion.optional(), spannerDetails: z.array(spannerIODetails).optional(), userDisplayProperties: z.record(z.string(), z.string()).optional()}); export const displayData = z.object({boolValue: z.boolean().optional(), durationValue: z.string().optional(), floatValue: z.number().optional(), int64Value: z.string().optional(), javaClassValue: z.string().optional(), key: z.string().optional(), label: z.string().optional(), namespace: z.string().optional(), shortStrValue: z.string().optional(), strValue: z.string().optional(), timestampValue: z.string().optional(), url: z.string().optional()}); export const componentSource = z.object({name: z.string().optional(), originalTransformOrCollection: z.string().optional(), userName: z.string().optional()}); export const componentTransform = z.object({name: z.string().optional(), originalTransform: z.string().optional(), userName: z.string().optional()}); export const stageSource = z.object({name: z.string().optional(), originalTransformOrCollection: z.string().optional(), sizeBytes: z.string().optional(), userName: z.string().optional()}); export const executionStageSummary = z.object({componentSource: z.array(componentSource).optional(), componentTransform: z.array(componentTransform).optional(), id: z.string().optional(), inputSource: z.array(stageSource).optional(), kind: z.enum(["UNKNOWN_KIND", "PAR_DO_KIND", "GROUP_BY_KEY_KIND", "FLATTEN_KIND", "READ_KIND", "WRITE_KIND", "CONSTANT_KIND", "SINGLETON_KIND", "SHUFFLE_KIND"]).optional(), name: z.string().optional(), outputSource: z.array(stageSource).optional(), prerequisiteStage: z.array(z.string()).optional()}); export const transformSummary = z.object({displayData: z.array(displayData).optional(), id: z.string().optional(), inputCollectionName: z.array(z.string()).optional(), kind: z.enum(["UNKNOWN_KIND", "PAR_DO_KIND", "GROUP_BY_KEY_KIND", "FLATTEN_KIND", "READ_KIND", "WRITE_KIND", "CONSTANT_KIND", "SINGLETON_KIND", "SHUFFLE_KIND"]).optional(), name: z.string().optional(), outputCollectionName: z.array(z.string()).optional()}); export const pipelineDescription = z.object({displayData: z.array(displayData).optional(), executionPipelineStage: z.array(executionStageSummary).optional(), originalPipelineTransform: z.array(transformSummary).optional(), stepNamesHash: z.string().optional()}); export const parameters = z.object({cpuUtilizationTarget: z.number().optional(), latencyTarget: z.string().optional(), maxWorkerCount: z.number().int().optional(), minWorkerCount: z.number().int().optional()}); export const autoscalingSchedule = z.object({crontab: z.string().optional(), duration: z.string().optional(), name: z.string().optional(), parameters: parameters.optional(), priority: z.string().optional(), timeZone: z.string().optional(), updateTime: z.string().optional()}); export const runtimeUpdatableParams = z.object({acceptableBacklogDuration: z.string().optional(), autoscalingTier: z.string().optional(), latencyTier: z.string().optional(), maxNumWorkers: z.number().int().optional(), minNumWorkers: z.number().int().optional(), schedules: z.array(autoscalingSchedule).optional(), workerUtilizationHint: z.number().optional()}); export const serviceResources = z.object({zones: z.array(z.string()).optional()}); export const executionStageState = z.object({currentStateTime: z.string().optional(), executionStageName: z.string().optional(), executionStageState: z.enum(["JOB_STATE_UNKNOWN", "JOB_STATE_STOPPED", "JOB_STATE_RUNNING", "JOB_STATE_DONE", "JOB_STATE_FAILED", "JOB_STATE_CANCELLED", "JOB_STATE_UPDATED", "JOB_STATE_DRAINING", "JOB_STATE_DRAINED", "JOB_STATE_PENDING", "JOB_STATE_CANCELLING", "JOB_STATE_QUEUED", "JOB_STATE_RESOURCE_CLEANING_UP", "JOB_STATE_PAUSING", "JOB_STATE_PAUSED"]).optional()}); export const step = z.object({kind: z.string().optional(), name: z.string().optional(), properties: z.record(z.string(), z.unknown()).optional()}); export const job = z.object({clientRequestId: z.string().optional(), createTime: z.string().optional(), createdFromSnapshotId: z.string().optional(), currentState: z.enum(["JOB_STATE_UNKNOWN", "JOB_STATE_STOPPED", "JOB_STATE_RUNNING", "JOB_STATE_DONE", "JOB_STATE_FAILED", "JOB_STATE_CANCELLED", "JOB_STATE_UPDATED", "JOB_STATE_DRAINING", "JOB_STATE_DRAINED", "JOB_STATE_PENDING", "JOB_STATE_CANCELLING", "JOB_STATE_QUEUED", "JOB_STATE_RESOURCE_CLEANING_UP", "JOB_STATE_PAUSING", "JOB_STATE_PAUSED"]).optional(), currentStateTime: z.string().optional(), environment: environment.optional(), executionInfo: jobExecutionInfo.optional(), id: z.string().optional(), jobMetadata: jobMetadata.optional(), labels: z.record(z.string(), z.string()).optional(), location: z.string().optional(), name: z.string().optional(), pausable: z.boolean().optional(), pipelineDescription: pipelineDescription.optional(), projectId: z.string().optional(), replaceJobId: z.string().optional(), replacedByJobId: z.string().optional(), requestedState: z.enum(["JOB_STATE_UNKNOWN", "JOB_STATE_STOPPED", "JOB_STATE_RUNNING", "JOB_STATE_DONE", "JOB_STATE_FAILED", "JOB_STATE_CANCELLED", "JOB_STATE_UPDATED", "JOB_STATE_DRAINING", "JOB_STATE_DRAINED", "JOB_STATE_PENDING", "JOB_STATE_CANCELLING", "JOB_STATE_QUEUED", "JOB_STATE_RESOURCE_CLEANING_UP", "JOB_STATE_PAUSING", "JOB_STATE_PAUSED"]).optional(), runtimeUpdatableParams: runtimeUpdatableParams.optional(), satisfiesPzi: z.boolean().optional(), satisfiesPzs: z.boolean().optional(), serviceResources: serviceResources.optional(), stageStates: z.array(executionStageState).optional(), startTime: z.string().optional(), steps: z.array(step).optional(), stepsLocation: z.string().optional(), tempFiles: z.array(z.string()).optional(), transformNameMapping: z.record(z.string(), z.string()).optional(), type: z.enum(["JOB_TYPE_UNKNOWN", "JOB_TYPE_BATCH", "JOB_TYPE_STREAMING"]).optional()}); export const listJobsResponse = z.object({failedLocation: z.array(failedLocation).optional(), jobs: z.array(job).optional(), nextPageToken: z.string().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 }; /** * List the jobs of a project. To list the jobs of a project in a region, we recommend using `projects.locations.jobs.list` with a [regional endpoint] (https://cloud.google.com/dataflow/docs/concepts/regional-endpoints). To list the all jobs across all regions, use `projects.jobs.aggregated`. Using `projects.jobs.list` is not recommended, because you can only get the list of jobs that are running in `us-central1`. `projects.locations.jobs.list` and `projects.jobs.list` support filtering the list of jobs by name. Filtering by name isn't supported by `projects.jobs.aggregated`. # IAM Permissions Requires the `dataflow.jobs.list` permission on the project. * * GET /v1b3/projects/{projectId}/jobs * * Also accepts auth: Oauth2 + Oauth2c */ export const getApiV1b3ProjectsProjectIdJobs = async (args: GetApiV1b3ProjectsProjectIdJobsArgs, options?: GetApiV1b3ProjectsProjectIdJobsOptions) => { const {baseUrl = "https://dataflow.googleapis.com", fetch: fetchFn = fetch, Oauth2, Oauth2c} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args['createTimeRange.endTime'] != null) query.append("createTimeRange.endTime", String(args['createTimeRange.endTime'])) if (args['createTimeRange.startTime'] != null) query.append("createTimeRange.startTime", String(args['createTimeRange.startTime'])) if (args.filter != null) query.append("filter", String(args.filter)) if (args.location != null) query.append("location", String(args.location)) if (args.name != null) query.append("name", String(args.name)) if (args.pageSize != null) query.append("pageSize", String(args.pageSize)) if (args.pageToken != null) query.append("pageToken", String(args.pageToken)) if (args.regionalFanoutRequested != null) query.append("regionalFanoutRequested", String(args.regionalFanoutRequested)) if (args['terminationTimeRange.endTime'] != null) query.append("terminationTimeRange.endTime", String(args['terminationTimeRange.endTime'])) if (args['terminationTimeRange.startTime'] != null) query.append("terminationTimeRange.startTime", String(args['terminationTimeRange.startTime'])) if (args.view != null) query.append("view", String(args.view)) if (Oauth2 !== undefined) headers.set('authorization', `Bearer ${Oauth2}`) if (Oauth2c !== undefined) headers.set('authorization', `Bearer ${Oauth2c}`) const url = `${baseUrl.replace(/\/+$/, '')}/v1b3/projects/${encodeURIComponent(String(args.projectId))}/jobs${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(listJobsResponse, await res.json()) };