Skip to content

Commit b4e79c1

Browse files
dimklnikosdouvlis
andauthored
feat(backend): Use User-Agent header with package name and version in BAPI requests (clerk#2558)
* fix(backend): Use tsup bundling in tests * chore(backend): Rename Clerk-Backend-SDK BAPI request header to User-Agent * feat(backend): Add package version in User-Agent header of BAPI requests * feat(nextjs): Add package@version to BAPI requests User-Agent header * feat(fastify): Add package@version to BAPI requests User-Agent header * feat(gatsby-plugin-clerk): Add package@version to BAPI requests User-Agent header * feat(remix): Add package@version to BAPI requests User-Agent header * feat(clerk-sdk-node): Add package@version to BAPI requests User-Agent header * chore(repo): Add changeset * fix(backend): Extract test-specific build config to tsup.config.test.ts --------- Co-authored-by: Nikos Douvlis <nikosdouvlis@gmail.com>
1 parent 41f8832 commit b4e79c1

15 files changed

Lines changed: 75 additions & 21 deletions

File tree

.changeset/thin-coats-serve.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
'gatsby-plugin-clerk': minor
3+
'@clerk/clerk-sdk-node': minor
4+
'@clerk/backend': minor
5+
'@clerk/fastify': minor
6+
'@clerk/nextjs': minor
7+
'@clerk/remix': minor
8+
---
9+
10+
Replace the `Clerk-Backend-SDK` header with `User-Agent` in BAPI requests and update it's value to contain both the package name and the package version of the clerk package
11+
executing the request. Eg request from `@clerk/nextjs` to BAPI with append `User-Agent: @clerk/nextjs@5.0.0-alpha-v5.16` using the latest version.
12+
13+
Miscellaneous changes: The backend test build changed to use tsup.

packages/backend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
"build:declarations": "tsc -p tsconfig.declarations.json",
8282
"publish:local": "npx yalc push --replace --sig",
8383
"build:lib": "tsup --env.NODE_ENV production",
84-
"build:tests": "tsc -p tsconfig.test.json",
84+
"build:tests": "tsup --config tsup.config.test.ts",
8585
"build:runtime": "cpy 'src/runtime/**/*.{mjs,js,cjs}' dist/runtime",
8686
"clean": "rimraf ./dist",
8787
"clean:tests": "rimraf ./tests/dist",

packages/backend/src/api/__tests__/factory.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export default (QUnit: QUnit) => {
5454
headers: {
5555
Authorization: 'Bearer deadbeef',
5656
'Content-Type': 'application/json',
57-
'Clerk-Backend-SDK': '@clerk/backend',
57+
'User-Agent': '@clerk/backend@0.0.0-test',
5858
},
5959
}),
6060
);
@@ -82,7 +82,7 @@ export default (QUnit: QUnit) => {
8282
headers: {
8383
Authorization: 'Bearer deadbeef',
8484
'Content-Type': 'application/json',
85-
'Clerk-Backend-SDK': '@clerk/backend',
85+
'User-Agent': '@clerk/backend@0.0.0-test',
8686
},
8787
}),
8888
);
@@ -115,7 +115,7 @@ export default (QUnit: QUnit) => {
115115
headers: {
116116
Authorization: 'Bearer deadbeef',
117117
'Content-Type': 'application/json',
118-
'Clerk-Backend-SDK': '@clerk/backend',
118+
'User-Agent': '@clerk/backend@0.0.0-test',
119119
},
120120
}),
121121
);
@@ -145,7 +145,7 @@ export default (QUnit: QUnit) => {
145145
headers: {
146146
Authorization: 'Bearer deadbeef',
147147
'Content-Type': 'application/json',
148-
'Clerk-Backend-SDK': '@clerk/backend',
148+
'User-Agent': '@clerk/backend@0.0.0-test',
149149
},
150150
}),
151151
);
@@ -173,7 +173,7 @@ export default (QUnit: QUnit) => {
173173
headers: {
174174
Authorization: 'Bearer deadbeef',
175175
'Content-Type': 'application/json',
176-
'Clerk-Backend-SDK': '@clerk/backend',
176+
'User-Agent': '@clerk/backend@0.0.0-test',
177177
},
178178
body: JSON.stringify({
179179
first_name: 'John',
@@ -214,7 +214,7 @@ export default (QUnit: QUnit) => {
214214
headers: {
215215
Authorization: 'Bearer deadbeef',
216216
'Content-Type': 'application/json',
217-
'Clerk-Backend-SDK': '@clerk/backend',
217+
'User-Agent': '@clerk/backend@0.0.0-test',
218218
},
219219
}),
220220
);
@@ -237,7 +237,7 @@ export default (QUnit: QUnit) => {
237237
headers: {
238238
Authorization: 'Bearer deadbeef',
239239
'Content-Type': 'application/json',
240-
'Clerk-Backend-SDK': '@clerk/backend',
240+
'User-Agent': '@clerk/backend@0.0.0-test',
241241
},
242242
}),
243243
);
@@ -262,7 +262,7 @@ export default (QUnit: QUnit) => {
262262
headers: {
263263
Authorization: 'Bearer deadbeef',
264264
'Content-Type': 'application/json',
265-
'Clerk-Backend-SDK': '@clerk/backend',
265+
'User-Agent': '@clerk/backend@0.0.0-test',
266266
},
267267
}),
268268
);

packages/backend/src/api/request.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export function buildRequest(options: BuildRequestOptions) {
8080
// Build headers
8181
const headers: Record<string, any> = {
8282
Authorization: `Bearer ${secretKey}`,
83-
'Clerk-Backend-SDK': userAgent,
83+
'User-Agent': userAgent,
8484
...headerParams,
8585
};
8686

packages/backend/src/constants.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
export const API_URL = 'https://api.clerk.com';
22
export const API_VERSION = 'v1';
33

4-
// TODO: Get information from package.json or define them from ESBuild
5-
export const USER_AGENT = `@clerk/backend`;
4+
export const USER_AGENT = `${PACKAGE_NAME}@${PACKAGE_VERSION}`;
65
export const MAX_CACHE_LAST_UPDATED_AT_SECONDS = 5 * 60;
76
export const JWKS_CACHE_TTL_MS = 1000 * 60 * 60;
87

packages/backend/src/tokens/__tests__/keys.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export default (QUnit: QUnit) => {
6767
headers: {
6868
Authorization: 'Bearer deadbeef',
6969
'Content-Type': 'application/json',
70-
'Clerk-Backend-SDK': '@clerk/backend',
70+
'User-Agent': '@clerk/backend@0.0.0-test',
7171
},
7272
});
7373
assert.propEqual(jwk, mockRsaJwk);
@@ -87,7 +87,7 @@ export default (QUnit: QUnit) => {
8787
headers: {
8888
Authorization: 'Bearer sk_test_deadbeef',
8989
'Content-Type': 'application/json',
90-
'Clerk-Backend-SDK': '@clerk/backend',
90+
'User-Agent': '@clerk/backend@0.0.0-test',
9191
},
9292
});
9393
assert.propEqual(jwk, mockRsaJwk);

packages/backend/src/tokens/__tests__/verify.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export default (QUnit: QUnit) => {
4949
headers: {
5050
Authorization: 'Bearer a-valid-key',
5151
'Content-Type': 'application/json',
52-
'Clerk-Backend-SDK': '@clerk/backend',
52+
'User-Agent': '@clerk/backend@0.0.0-test',
5353
},
5454
});
5555
assert.propEqual(data, mockJwtPayload);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { defineConfig } from 'tsup';
2+
3+
// @ts-ignore
4+
import { name } from './package.json';
5+
6+
export default defineConfig(overrideOptions => {
7+
const isWatch = !!overrideOptions.watch;
8+
9+
return {
10+
entry: ['./src/**/*.{ts,js}'],
11+
outDir: 'tests/dist/',
12+
define: {
13+
PACKAGE_NAME: `"${name}"`,
14+
// use "test" instead of actual package version to avoid updating the tests
15+
// depending on it (eg userAgent related) on every version bump
16+
PACKAGE_VERSION: `"0.0.0-test"`,
17+
__DEV__: `${isWatch}`,
18+
},
19+
external: ['#crypto'],
20+
clean: true,
21+
minify: false,
22+
tsconfig: 'tsconfig.test.json',
23+
format: 'cjs',
24+
};
25+
});

packages/fastify/src/__snapshots__/clerkClient.test.ts.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ exports[`clerk initializes clerk with constants 1`] = `
1212
"version": "0.0.0-test",
1313
},
1414
"secretKey": "TEST_SECRET_KEY",
15+
"userAgent": "@clerk/fastify@0.0.0-test",
1516
},
1617
],
1718
]

packages/fastify/src/clerkClient.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ export const clerkClient = createClerkClient({
99
apiUrl: API_URL,
1010
apiVersion: API_VERSION,
1111
jwtKey: JWT_KEY,
12+
userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}`,
1213
sdkMetadata: SDK_METADATA,
1314
});

0 commit comments

Comments
 (0)