text: "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.getUserAgentPlugin = exports.getUserAgentMiddlewareOptions = exports.userAgentMiddleware = void 0;
  const protocol_http_1 = require("@aws-sdk/protocol-http");
  const constants_1 = require("./constants");
  const userAgentMiddleware = (options) => (next, context) => async (args) => {
      var _a, _b;
      const { request } = args;
      if (!protocol_http_1.HttpRequest.isInstance(request))
          return next(args);
      const { headers } = request;
      const userAgent = ((_a = context === null || context === void 0 ? void 0 : context.userAgent) === null || _a === void 0 ? void 0 : _a.map(escapeUserAgent)) || [];
      const defaultUserAgent = (await options.defaultUserAgentProvider()).map(escapeUserAgent);
      const customUserAgent = ((_b = options === null || options === void 0 ? void 0 : options.customUserAgent) === null || _b === void 0 ? void 0 : _b.map(escapeUserAgent)) || [];
      const sdkUserAgentValue = [...defaultUserAgent, ...userAgent, ...customUserAgent].join(constants_1.SPACE);
      const normalUAValue = [
          ...defaultUserAgent.filter((section) => section.startsWith("aws-sdk-")),
          ...customUserAgent,
      ].join(constants_1.SPACE);
      if (options.runtime !== "browser") {
          if (normalUAValue) {
              headers[constants_1.X_AMZ_USER_AGENT] = headers[constants_1.X_AMZ_USER_AGENT]
                  ? `${headers[constants_1.USER_AGENT]} ${normalUAValue}`
                  : normalUAValue;
          }
          headers[constants_1.USER_AGENT] = sdkUserAgentValue;
      }
      else {
          headers[constants_1.X_AMZ_USER_AGENT] = sdkUserAgentValue;
      }
      return next({
          ...args,
          request,
      });
  };
  exports.userAgentMiddleware = userAgentMiddleware;
  const escapeUserAgent = ([name, version]) => {
      const prefixSeparatorIndex = name.indexOf("/");
      const prefix = name.substring(0, prefixSeparatorIndex);
      let uaName = name.substring(prefixSeparatorIndex + 1);
      if (prefix === "api") {
          uaName = uaName.toLowerCase();
      }
      return [prefix, uaName, version]
          .filter((item) => item && item.length > 0)
          .map((item) => item === null || item === void 0 ? void 0 : item.replace(constants_1.UA_ESCAPE_REGEX, "_"))
          .join("/");
  };
  exports.getUserAgentMiddlewareOptions = {
      name: "getUserAgentMiddleware",
      step: "build",
      priority: "low",
      tags: ["SET_USER_AGENT", "USER_AGENT"],
      override: true,
  };
  const getUserAgentPlugin = (config) => ({
      applyToStack: (clientStack) => {
          clientStack.add(exports.userAgentMiddleware(config), exports.getUserAgentMiddlewareOptions);
      },
  });
  exports.getUserAgentPlugin = getUserAgentPlugin;
  