1import type * as glacier from "@distilled.cloud/aws/glacier";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { Vault } from "./Vault.ts";
5
6/**
7 * `InitiateJob` request with `accountId` and `vaultName` injected from the bound
8 * {@link Vault}.
9 */
10export interface InitiateJobRequest extends Omit<
11 glacier.InitiateJobInput,
12 "accountId" | "vaultName"
13> {}
14
15/**
16 * Runtime binding for the `InitiateJob` operation (IAM action
17 * `glacier:InitiateJob` on the vault ARN).
18 *
19 * Initiates an archive-retrieval, inventory-retrieval, or select job
20 * against the bound {@link Vault}. Retrieval is asynchronous — poll the
21 * returned `jobId` with {@link DescribeJob} and fetch the result with
22 * {@link GetJobOutput} once it completes (typically 3–5 hours for standard
23 * tier, minutes for expedited).
24 * Provide the implementation with
25 * `Effect.provide(AWS.Glacier.InitiateJobHttp)`.
26 * ### Retrieving Archives
27 * **Example:** Start an inventory-retrieval job
28 * ```typescript
29 * const initiateJob = yield* AWS.Glacier.InitiateJob(vault);
30 *
31 * const { jobId } = yield* initiateJob({
32 * jobParameters: { Type: "inventory-retrieval" },
33 * });
34 * ```
35 *
36 * @binding
37 */
38export interface InitiateJob extends Binding.Service<
39 InitiateJob,
40 "AWS.Glacier.InitiateJob",
41 (
42 vault: Vault,
43 ) => Effect.Effect<
44 (
45 request?: InitiateJobRequest,
46 ) => Effect.Effect<glacier.InitiateJobOutput, glacier.InitiateJobError>
47 >
48> {}
49export const InitiateJob = Binding.Service<InitiateJob>(
50 "AWS.Glacier.InitiateJob",
51);