import { loadConfig } from "@aws-sdk/node-config-provider"; import { platform, release } from "os"; import { env, versions } from "process"; import { isCrtAvailable } from "./is-crt-available"; export const UA_APP_ID_ENV_NAME = "AWS_SDK_UA_APP_ID"; export const UA_APP_ID_INI_NAME = "sdk-ua-app-id"; export const defaultUserAgent = ({ serviceId, clientVersion }) => { const sections = [ ["aws-sdk-js", clientVersion], [`os/${platform()}`, release()], ["lang/js"], ["md/nodejs", `${versions.node}`], ]; const crtAvailable = isCrtAvailable(); if (crtAvailable) { sections.push(crtAvailable); } if (serviceId) { sections.push([`api/${serviceId}`, clientVersion]); } if (env.AWS_EXECUTION_ENV) { sections.push([`exec-env/${env.AWS_EXECUTION_ENV}`]); } const appIdPromise = loadConfig({ environmentVariableSelector: (env) => env[UA_APP_ID_ENV_NAME], configFileSelector: (profile) => profile[UA_APP_ID_INI_NAME], default: undefined, })(); let resolvedUserAgent = undefined; return async () => { if (!resolvedUserAgent) { const appId = await appIdPromise; resolvedUserAgent = appId ? [...sections, [`app/${appId}`]] : [...sections]; } return resolvedUserAgent; }; };