1import type * as glue from "@distilled.cloud/aws/glue";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { Job } from "./Job.ts";
5
6export interface StartJobRunRequest extends Omit<
7 glue.StartJobRunRequest,
8 "JobName"
9> {}
10
11/**
12 * Starts a run of a Glue job definition.
13 *
14 * Grants `glue:StartJobRun` and `glue:GetJobRun` on the bound job. Returns the
15 * `JobRunId`; poll `getJobRun` for the run's terminal state (`SUCCEEDED`,
16 * `FAILED`, `TIMEOUT`, …).
17 * ### Running Jobs
18 * Provide the `StartJobRunHttp` implementation layer on the Function effect
19 * (`.pipe(Effect.provide(AWS.Glue.StartJobRunHttp))`), bind the job in the
20 * init phase, then start runs at runtime.
21 *
22 * **Example:** Start a job run from a handler
23 * ```typescript
24 * // init
25 * const startJobRun = yield* AWS.Glue.StartJobRun(job);
26 *
27 * return {
28 * fetch: Effect.gen(function* () {
29 * // runtime
30 * const { JobRunId } = yield* startJobRun({
31 * Arguments: { "--input": "s3://my-bucket/input/" },
32 * });
33 * return HttpServerResponse.json({ JobRunId });
34 * }),
35 * };
36 * ```
37 *
38 * @binding
39 */
40export interface StartJobRun extends Binding.Service<
41 StartJobRun,
42 "AWS.Glue.StartJobRun",
43 (
44 job: Job,
45 ) => Effect.Effect<
46 (
47 request?: StartJobRunRequest,
48 ) => Effect.Effect<glue.StartJobRunResponse, glue.StartJobRunError>
49 >
50> {}
51
52export const StartJobRun = Binding.Service<StartJobRun>("AWS.Glue.StartJobRun");