/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import { SDKCore } from "../core.js"; import { encodeJSON as encodeJSON$ } from "../lib/encodings.js"; import * as m$ from "../lib/matchers.js"; import * as schemas$ from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { pathToFunc } from "../lib/url.js"; import { ConnectionError, InvalidRequestError, RequestAbortedError, RequestTimeoutError, UnexpectedClientError, } from "../sdk/models/errors/httpclienterrors.js"; import { SDKError } from "../sdk/models/errors/sdkerror.js"; import { SDKValidationError } from "../sdk/models/errors/sdkvalidationerror.js"; import * as operations from "../sdk/models/operations/index.js"; import { Result } from "../sdk/types/fp.js"; /** * Generates batches of presigned URLs for multipart parts * * @remarks * Multipart uploads are uploaded in chunks or parts to individual presigned * URLs, similar to the one generated by /generate-presigned-put. The part * numbers provided must be between 1 and 10000. The total number of parts * will depend on the chunk size in bytes that you intend to use to upload * each chunk. For example a 12MB file may have 2 5MB chunks and a final * 2MB chunk, for part numbers 1, 2, and 3. * * This endpoint will return a presigned URL for each part number provided, * which you can then use to send PUT requests for the binary chunk corresponding * to that part. When the part is uploaded, the provider should return an * ETag for the part, and this should be stored along with the part number, * because this is needed to complete the multipart upload. * * You must have the correct permissions and CORS settings configured in your * external provider. We support AWS S3 as the default. See: * * https://meta.discourse.org/t/-/210469#s3-multipart-direct-uploads-4. * * An external file store must be set up and `enable_direct_s3_uploads` must * be set to true for this endpoint to function. */ export async function uploadsBatchPresignMultipartParts( client$: SDKCore, request?: operations.BatchPresignMultipartPartsRequestBody | undefined, options?: RequestOptions, ): Promise< Result< operations.BatchPresignMultipartPartsResponseBody, | SDKError | SDKValidationError | UnexpectedClientError | InvalidRequestError | RequestAbortedError | RequestTimeoutError | ConnectionError > > { const input$ = request; const parsed$ = schemas$.safeParse( input$, (value$) => operations.BatchPresignMultipartPartsRequestBody$outboundSchema.optional() .parse(value$), "Input validation failed", ); if (!parsed$.ok) { return parsed$; } const payload$ = parsed$.value; const body$ = payload$ === undefined ? null : encodeJSON$("body", payload$, { explode: true }); const path$ = pathToFunc("/uploads/batch-presign-multipart-parts.json")(); const headers$ = new Headers({ "Content-Type": "application/json", Accept: "application/json", }); const context = { operationID: "batchPresignMultipartParts", oAuth2Scopes: [], securitySource: null, }; const requestRes = client$.createRequest$(context, { method: "POST", path: path$, headers: headers$, body: body$, timeoutMs: options?.timeoutMs || client$.options$.timeoutMs || -1, }, options); if (!requestRes.ok) { return requestRes; } const request$ = requestRes.value; const doResult = await client$.do$(request$, { context, errorCodes: [], retryConfig: options?.retries || client$.options$.retryConfig, retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], }); if (!doResult.ok) { return doResult; } const response = doResult.value; const [result$] = await m$.match< operations.BatchPresignMultipartPartsResponseBody, | SDKError | SDKValidationError | UnexpectedClientError | InvalidRequestError | RequestAbortedError | RequestTimeoutError | ConnectionError >( m$.json( 200, operations.BatchPresignMultipartPartsResponseBody$inboundSchema, ), )(response); if (!result$.ok) { return result$; } return result$; }