Skip to content

Commit d94d3bf

Browse files
authored
chore(maintenance): set app sdk ua env variable when none is set (#3651)
1 parent cd1331e commit d94d3bf

File tree

3 files changed

+55
-14
lines changed

3 files changed

+55
-14
lines changed

packages/commons/src/awsSdkUtils.ts

+16-2
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,23 @@ const isSdkClient = (client: unknown): client is SdkClient =>
4747
const customUserAgentMiddleware = (feature: string) => {
4848
return <T extends MiddlewareArgsLike>(next: (arg0: T) => Promise<T>) =>
4949
async (args: T) => {
50-
const powertoolsUserAgent = `PT/${feature}/${PT_VERSION} PTEnv/${EXEC_ENV}`;
50+
const existingUserAgent = args.request.headers['user-agent'] || '';
51+
if (existingUserAgent.includes('PT/NO-OP')) {
52+
const featureSpecificUserAgent = existingUserAgent.replace(
53+
'PT/NO-OP',
54+
`PT/${feature}/${PT_VERSION} PTEnv/${EXEC_ENV}`
55+
);
56+
57+
args.request.headers['user-agent'] = featureSpecificUserAgent;
58+
return await next(args);
59+
}
60+
if (existingUserAgent.includes('PT/')) {
61+
return await next(args);
62+
}
5163
args.request.headers['user-agent'] =
52-
`${args.request.headers['user-agent']} ${powertoolsUserAgent}`;
64+
existingUserAgent === ''
65+
? `PT/${feature}/${PT_VERSION} PTEnv/${EXEC_ENV}`
66+
: `${existingUserAgent} PT/${feature}/${PT_VERSION} PTEnv/${EXEC_ENV}`;
5367

5468
return await next(args);
5569
};

packages/commons/src/index.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
import { PT_VERSION } from './version.js';
2+
if (!process.env.AWS_SDK_UA_APP_ID) {
3+
process.env.AWS_SDK_UA_APP_ID = `PT/NO-OP/${PT_VERSION}`;
4+
}
5+
export { PT_VERSION } from './version.js';
16
export {
27
isRecord,
38
isString,
@@ -19,4 +24,3 @@ export {
1924
METRICS_KEY,
2025
IDEMPOTENCY_KEY,
2126
} from './middleware/constants.js';
22-
export { PT_VERSION } from './version.js';

packages/commons/tests/unit/awsSdkUtils.test.ts

+34-11
Original file line numberDiff line numberDiff line change
@@ -96,26 +96,49 @@ describe('Helpers: awsSdk', () => {
9696
expect(middleware).toBeInstanceOf(Function);
9797
});
9898

99-
it('adds the Powertools UA to the request headers', async () => {
99+
const feature = 'my-feature';
100+
const middleware = customUserAgentMiddleware(feature);
101+
102+
it.each([
103+
{
104+
case: 'adds the feature-specific UA when none is present',
105+
headers: {},
106+
expected: `PT/my-feature/${version} PTEnv/NA`,
107+
},
108+
{
109+
case: 'concatenates the ua to existing ones',
110+
headers: {
111+
'user-agent': 'foo',
112+
},
113+
expected: `foo PT/my-feature/${version} PTEnv/NA`,
114+
},
115+
{
116+
case: 'replaces no-op UA with the feature-specific one',
117+
headers: {
118+
'user-agent': 'PT/NO-OP',
119+
},
120+
expected: `PT/my-feature/${version} PTEnv/NA`,
121+
},
122+
{
123+
case: 'leaves a feature-specific UA intact',
124+
headers: {
125+
'user-agent': 'PT/other-feature/1.0 PTEnv/NA',
126+
},
127+
expected: 'PT/other-feature/1.0 PTEnv/NA',
128+
},
129+
])('it $case', async ({ headers, expected }) => {
100130
// Prepare
101-
const feature = 'my-feature';
102-
const middleware = customUserAgentMiddleware(feature);
103-
const next = vi.fn();
104131
const args = {
105132
request: {
106-
headers: {
107-
'user-agent': 'foo',
108-
},
133+
headers,
109134
},
110135
};
111136

112137
// Act
113-
await middleware(next)(args);
138+
await middleware(vi.fn())(args);
114139

115140
// Assess
116-
expect(args.request.headers['user-agent']).toEqual(
117-
`foo PT/my-feature/${version} PTEnv/NA`
118-
);
141+
expect(args.request.headers['user-agent']).toEqual(expected);
119142
});
120143
});
121144

0 commit comments

Comments
 (0)