UNPKG

cdk-amazon-chime-resources

Version:

![Experimental](https://img.shields.io/badge/experimental-important.svg?style=for-the-badge)

60 lines (59 loc) 2.27 kB
import { HttpRequest } from "@aws-sdk/protocol-http"; import { getUserAgentPrefix } from "@aws-sdk/util-endpoints"; import { SPACE, UA_ESCAPE_REGEX, USER_AGENT, X_AMZ_USER_AGENT } from "./constants"; export const userAgentMiddleware = (options) => (next, context) => async (args) => { const { request } = args; if (!HttpRequest.isInstance(request)) return next(args); const { headers } = request; const userAgent = context?.userAgent?.map(escapeUserAgent) || []; const defaultUserAgent = (await options.defaultUserAgentProvider()).map(escapeUserAgent); const customUserAgent = options?.customUserAgent?.map(escapeUserAgent) || []; const prefix = getUserAgentPrefix(); const sdkUserAgentValue = (prefix ? [prefix] : []) .concat([...defaultUserAgent, ...userAgent, ...customUserAgent]) .join(SPACE); const normalUAValue = [ ...defaultUserAgent.filter((section) => section.startsWith("aws-sdk-")), ...customUserAgent, ].join(SPACE); if (options.runtime !== "browser") { if (normalUAValue) { headers[X_AMZ_USER_AGENT] = headers[X_AMZ_USER_AGENT] ? `${headers[USER_AGENT]} ${normalUAValue}` : normalUAValue; } headers[USER_AGENT] = sdkUserAgentValue; } else { headers[X_AMZ_USER_AGENT] = sdkUserAgentValue; } return next({ ...args, request, }); }; 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?.replace(UA_ESCAPE_REGEX, "_")) .join("/"); }; export const getUserAgentMiddlewareOptions = { name: "getUserAgentMiddleware", step: "build", priority: "low", tags: ["SET_USER_AGENT", "USER_AGENT"], override: true, }; export const getUserAgentPlugin = (config) => ({ applyToStack: (clientStack) => { clientStack.add(userAgentMiddleware(config), getUserAgentMiddlewareOptions); }, });