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 * `InitiateMultipartUpload` request with `accountId` and `vaultName` injected from the bound
8 * {@link Vault}.
9 */
10export interface InitiateMultipartUploadRequest extends Omit<
11 glacier.InitiateMultipartUploadInput,
12 "accountId" | "vaultName"
13> {}
14
15/**
16 * Runtime binding for the `InitiateMultipartUpload` operation (IAM action
17 * `glacier:InitiateMultipartUpload` on the vault ARN).
18 *
19 * Starts a multipart upload to the bound {@link Vault} and returns the
20 * `uploadId` to use with {@link UploadMultipartPart} and
21 * {@link CompleteMultipartUpload}. `partSize` must be a power-of-two
22 * multiple of 1 MiB (as a string of bytes).
23 * Provide the implementation with
24 * `Effect.provide(AWS.Glacier.InitiateMultipartUploadHttp)`.
25 * ### Uploading Archives
26 * **Example:** Start a multipart upload
27 * ```typescript
28 * const initiateMultipartUpload =
29 * yield* AWS.Glacier.InitiateMultipartUpload(vault);
30 *
31 * const { uploadId } = yield* initiateMultipartUpload({
32 * archiveDescription: "large backup",
33 * partSize: String(8 * 1024 * 1024),
34 * });
35 * ```
36 *
37 * @binding
38 */
39export interface InitiateMultipartUpload extends Binding.Service<
40 InitiateMultipartUpload,
41 "AWS.Glacier.InitiateMultipartUpload",
42 (
43 vault: Vault,
44 ) => Effect.Effect<
45 (
46 request?: InitiateMultipartUploadRequest,
47 ) => Effect.Effect<
48 glacier.InitiateMultipartUploadOutput,
49 glacier.InitiateMultipartUploadError
50 >
51 >
52> {}
53export const InitiateMultipartUpload = Binding.Service<InitiateMultipartUpload>(
54 "AWS.Glacier.InitiateMultipartUpload",
55);