/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */
import { encodeFormQuery, encodeJSON, encodeSimple } from "../lib/encodings.js";
import * as M from "../lib/matchers.js";
import { safeParse } from "../lib/schemas.js";
import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js";
import { pathToFunc } from "../lib/url.js";
import { AssignAliasRequest$outboundSchema, AssignAliasResponseBody$inboundSchema, } from "../models/assignaliasop.js";
import { VercelBadRequestError$inboundSchema, } from "../models/vercelbadrequesterror.js";
import { VercelForbiddenError$inboundSchema, } from "../models/vercelforbiddenerror.js";
import { VercelNotFoundError$inboundSchema, } from "../models/vercelnotfounderror.js";
/**
 * Assign an Alias
 *
 * @remarks
 * Creates a new alias for the deployment with the given deployment ID. The authenticated user or team must own this deployment. If the desired alias is already assigned to another deployment, then it will be removed from the old deployment and assigned to the new one.
 */
export async function aliasesAssignAlias(client, request, options) {
    const parsed = safeParse(request, (value) => AssignAliasRequest$outboundSchema.parse(value), "Input validation failed");
    if (!parsed.ok) {
        return parsed;
    }
    const payload = parsed.value;
    const body = encodeJSON("body", payload.RequestBody, { explode: true });
    const pathParams = {
        id: encodeSimple("id", payload.id, {
            explode: false,
            charEncoding: "percent",
        }),
    };
    const path = pathToFunc("/v2/deployments/{id}/aliases")(pathParams);
    const query = encodeFormQuery({
        "slug": payload.slug,
        "teamId": payload.teamId,
    });
    const headers = new Headers({
        "Content-Type": "application/json",
        Accept: "application/json",
    });
    const secConfig = await extractSecurity(client._options.bearerToken);
    const securityInput = secConfig == null ? {} : { bearerToken: secConfig };
    const requestSecurity = resolveGlobalSecurity(securityInput);
    const context = {
        operationID: "assignAlias",
        oAuth2Scopes: [],
        resolvedSecurity: requestSecurity,
        securitySource: client._options.bearerToken,
        retryConfig: options?.retries
            || client._options.retryConfig
            || { strategy: "none" },
        retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"],
    };
    const requestRes = client._createRequest(context, {
        security: requestSecurity,
        method: "POST",
        baseURL: options?.serverURL,
        path: path,
        headers: headers,
        query: query,
        body: body,
        timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1,
    }, options);
    if (!requestRes.ok) {
        return requestRes;
    }
    const req = requestRes.value;
    const doResult = await client._do(req, {
        context,
        errorCodes: ["400", "401", "402", "403", "404", "409", "4XX", "5XX"],
        retryConfig: context.retryConfig,
        retryCodes: context.retryCodes,
    });
    if (!doResult.ok) {
        return doResult;
    }
    const response = doResult.value;
    const responseFields = {
        HttpMeta: { Response: response, Request: req },
    };
    const [result] = await M.match(M.json(200, AssignAliasResponseBody$inboundSchema), M.jsonErr(400, VercelBadRequestError$inboundSchema), M.jsonErr(401, VercelForbiddenError$inboundSchema), M.fail([402, 403, 409, "4XX", "5XX"]), M.jsonErr(404, VercelNotFoundError$inboundSchema))(response, { extraFields: responseFields });
    if (!result.ok) {
        return result;
    }
    return result;
}
//# sourceMappingURL=aliasesAssignAlias.js.map