Skip to content

Commit f18c61f

Browse files
tmilewskioctoper
authored andcommitted
chore(backend): Replace Clerk with createClerkClient [SDK-1058] (#2317)
* chore(backend): Replace `Clerk` with `createClerkClient` [SDK-1058] * chore(*): Update changeset package name * chore(*): Add individual changesets * chore(*): Update .changesets * chore(*): Update integration tests
1 parent 754ebe3 commit f18c61f

23 files changed

+157
-55
lines changed

.changeset/eight-badgers-speak.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
'@clerk/clerk-sdk-node': major
3+
---
4+
5+
(Note: This is only relevant if, in the unlikely case, you are using `Clerk` from `@clerk/clerk-sdk-node` directly. If not, you can safely ignore this change.)
6+
7+
Remove the named `Clerk` import from `@clerk/clerk-sdk-node` and import `createClerkClient` instead. The latter is a factory method to create a Clerk client instance for you. This update aligns usage across our SDKs and will enable us to ship DX improvements better in the future.
8+
9+
```js
10+
import { Clerk } from '@clerk/clerk-sdk-node';
11+
const clerk = Clerk({ secretKey: '...' });
12+
```
13+
14+
You need to rename the import from `Clerk` to `createClerkClient` and change its usage:
15+
16+
```js
17+
import { createClerkClient } from '@clerk/clerk-sdk-node';
18+
const clerk = createClerkClient({ secretKey: '...' });
19+
```

.changeset/fuzzy-years-taste.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
'@clerk/backend': major
3+
---
4+
5+
Remove the named `Clerk` import from `@clerk/backend` and import `createClerkClient` instead. The latter is a factory method that will create a Clerk client instance for you. This aligns usage across our SDKs and will enable us to better ship DX improvements in the future.
6+
7+
8+
Inside your code, search for occurrences like these:
9+
10+
```js
11+
import { Clerk } from '@clerk/backend';
12+
const clerk = Clerk({ secretKey: '...' });
13+
```
14+
15+
You need to rename the import from `Clerk` to `createClerkClient` and change its usage:
16+
17+
```js
18+
import { createClerkClient } from '@clerk/backend';
19+
const clerk = createClerkClient({ secretKey: '...' });
20+
```

.changeset/metal-ears-cheat.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
'gatsby-plugin-clerk': major
3+
---
4+
5+
Remove the named `Clerk` import from `gatsby-plugin-clerk` and import `createClerkClient` instead. The latter is a factory method to create a Clerk client instance for you. This update aligns usage across our SDKs and will enable us to ship DX improvements better in the future.
6+
7+
Inside your code, search for occurrences like these:
8+
9+
```js
10+
import { Clerk } from 'gatsby-plugin-clerk';
11+
const clerk = Clerk({ secretKey: '...' });
12+
```
13+
14+
You need to rename the import from `Clerk` to `createClerkClient` and change its usage:
15+
16+
```js
17+
import { createClerkClient } from 'gatsby-plugin-clerk';
18+
const clerk = createClerkClient({ secretKey: '...' });
19+
```

.changeset/shiny-pumas-share.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
'@clerk/remix': major
3+
---
4+
5+
(Note: This is only relevant if, in the unlikely case, you are using `Clerk` from `@clerk/remix` directly. If not, you can safely ignore this change.)
6+
7+
Remove the named `Clerk` import from `@clerk/remix` and import `createClerkClient` instead. The latter is a factory method to create a Clerk client instance for you. This update aligns usage across our SDKs and will enable us to ship DX improvements better in the future.
8+
9+
```js
10+
import { Clerk } from '@clerk/remix';
11+
const clerk = Clerk({ secretKey: '...' });
12+
```
13+
14+
You need to rename the import from `Clerk` to `createClerkClient` and change its usage:
15+
16+
```js
17+
import { createClerkClient } from '@clerk/remix';
18+
const clerk = createClerkClient({ secretKey: '...' });
19+
```
20+

.changeset/small-cats-check.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
'@clerk/fastify': major
3+
---
4+
5+
(Note: This is only relevant if, in the unlikely case, you are using `Clerk` from `@clerk/fastify` directly. If not, you can safely ignore this change.)
6+
7+
Remove the named `Clerk` import from `@clerk/fastify` and import `createClerkClient` instead. The latter is a factory method to create a Clerk client instance for you. This update aligns usage across our SDKs and will enable us to ship DX improvements better in the future.
8+
9+
10+
```js
11+
import { Clerk } from '@clerk/fastify';
12+
const clerk = Clerk({ secretKey: '...' });
13+
```
14+
15+
You need to rename the import from `Clerk` to `createClerkClient` and change its usage:
16+
17+
```js
18+
import { createClerkClient } from '@clerk/fastify';
19+
const clerk = createClerkClient({ secretKey: '...' });
20+
```
21+

.changeset/sour-avocados-sin.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
'@clerk/nextjs': major
3+
---
4+
5+
(Note: This is only relevant if, in the unlikely case, you are using `Clerk` from `@clerk/nextjs` directly. If not, you can safely ignore this change.)
6+
7+
Remove the named `Clerk` import from `@clerk/nextjs` and import `createClerkClient` instead. The latter is a factory method to create a Clerk client instance for you. This update aligns usage across our SDKs and will enable us to ship DX improvements better in the future.
8+
9+
```js
10+
import { Clerk } from '@clerk/nextjs';
11+
const clerk = Clerk({ secretKey: '...' });
12+
```
13+
14+
You need to rename the import from `Clerk` to `createClerkClient` and change its usage:
15+
16+
```js
17+
import { createClerkClient } from '@clerk/nextjs';
18+
const clerk = createClerkClient({ secretKey: '...' });
19+
```
20+

integration/cleanup/cleanup.setup.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { User } from '@clerk/backend';
2-
import { Clerk } from '@clerk/backend';
2+
import { createClerkClient } from '@clerk/backend';
33
import { test as setup } from '@playwright/test';
44

55
import { appConfigs } from '../presets/';
@@ -13,7 +13,7 @@ setup('cleanup instances ', async () => {
1313

1414
for (const secretKey of secretKeys) {
1515
console.log(`Cleanup for ${secretKey.replace(/(sk_test_)(.+)(...)/, '$1***$3')}`);
16-
const clerkClient = Clerk({ secretKey });
16+
const clerkClient = createClerkClient({ secretKey });
1717
const { data: users, errors } = await clerkClient.users.getUserList({
1818
orderBy: '-created_at',
1919
query: 'clerkcookie',

integration/testUtils/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Clerk } from '@clerk/backend';
1+
import { createClerkClient as backendCreateClerkClient } from '@clerk/backend';
22
import type { Browser, BrowserContext, Page } from '@playwright/test';
33

44
import type { Application } from '../models/application';
@@ -13,7 +13,7 @@ import { createUserService } from './usersService';
1313

1414
export type { FakeUser };
1515
const createClerkClient = (app: Application) => {
16-
return Clerk({
16+
return backendCreateClerkClient({
1717
secretKey: app.env.privateVariables.get('CLERK_SECRET_KEY'),
1818
publishableKey: app.env.publicVariables.get('CLERK_PUBLISHABLE_KEY'),
1919
});

packages/backend/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,23 +55,23 @@ npm install @clerk/backend
5555
```
5656

5757
```
58-
import { Clerk } from '@clerk/backend';
58+
import { createClerkClient } from '@clerk/backend';
5959
60-
const clerk = Clerk({ secretKey: '...' });
60+
const clerk = createClerkClient({ secretKey: '...' });
6161
6262
await clerk.users.getUser("user_...");
6363
```
6464

6565
### API
6666

67-
#### Clerk(options: ClerkOptions)
67+
#### createClerkClient(options: ClerkOptions)
6868

6969
Create Clerk SDK that includes an HTTP Rest client for the Backend API and session verification helpers. The clerk object contains the following APIs and methods:
7070

7171
```js
72-
import { Clerk } from '@clerk/backend';
72+
import { createClerkClient } from '@clerk/backend';
7373

74-
const clerk = Clerk({ secretKey: '...' });
74+
const clerk = createClerkClient({ secretKey: '...' });
7575

7676
await clerk.users.getUser('user_...');
7777

packages/backend/src/api/endpoints/InvitationApi.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ type GetInvitationListParams = {
1919
* @example
2020
* get all revoked invitations
2121
*
22-
* import { Clerk } from '@clerk/backend';
23-
* const clerkClient = Clerk(...)
22+
* import { createClerkClient } from '@clerk/backend';
23+
* const clerkClient = createClerkClient(...)
2424
* await clerkClient.invitations.getInvitationList({ status: 'revoked })
2525
*
2626
*/

packages/backend/src/exports.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ export default (QUnit: QUnit) => {
1010
const exportedApiKeys = [
1111
'AllowlistIdentifier',
1212
'AuthStatus',
13-
'Clerk',
1413
'Client',
1514
'DeletedObject',
1615
'Email',
@@ -37,6 +36,7 @@ export default (QUnit: QUnit) => {
3736
'buildRequestUrl',
3837
'constants',
3938
'createAuthenticateRequest',
39+
'createClerkClient',
4040
'createIsomorphicRequest',
4141
'debugRequestState',
4242
'decodeJwt',

packages/backend/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export type ClerkOptions = CreateBackendApiOptions &
2525
>
2626
> & { sdkMetadata?: SDKMetadata; telemetry?: Pick<TelemetryCollectorOptions, 'disabled' | 'debug'> };
2727

28-
export function Clerk(options: ClerkOptions) {
28+
export function createClerkClient(options: ClerkOptions) {
2929
const opts = { ...options };
3030
const apiClient = createBackendApiClient(opts);
3131
const requestState = createAuthenticateRequest({ options: opts, apiClient });

packages/fastify/src/clerkClient.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
const ClerkMock = jest.fn(() => {
1+
const createClerkClientMock = jest.fn(() => {
22
return 'clerkClient';
33
});
44

55
jest.mock('@clerk/backend', () => {
66
return {
77
...jest.requireActual('@clerk/backend'),
8-
Clerk: ClerkMock,
8+
createClerkClient: createClerkClientMock,
99
};
1010
});
1111

@@ -17,7 +17,7 @@ describe('clerk', () => {
1717
});
1818

1919
test('initializes clerk with constants', () => {
20-
expect(ClerkMock.mock.calls).toMatchSnapshot();
20+
expect(createClerkClientMock.mock.calls).toMatchSnapshot();
2121
expect(clerkClient).toEqual('clerkClient');
2222
});
2323
});

packages/fastify/src/clerkClient.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { Clerk } from '@clerk/backend';
1+
import { createClerkClient } from '@clerk/backend';
22

33
import { API_URL, API_VERSION, JWT_KEY, SDK_METADATA, SECRET_KEY } from './constants';
44

5-
export const createClerkClient = Clerk;
5+
export { createClerkClient };
66

77
export const clerkClient = createClerkClient({
88
secretKey: SECRET_KEY,

packages/fastify/src/withClerkMiddleware.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const localInterstitialMock = jest.fn();
99
jest.mock('@clerk/backend', () => {
1010
return {
1111
...jest.requireActual('@clerk/backend'),
12-
Clerk: () => {
12+
createClerkClient: () => {
1313
return {
1414
authenticateRequest: (...args: any) => authenticateRequestMock(...args),
1515
localInterstitial: (...args: any) => localInterstitialMock(...args),
Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { Clerk } from '@clerk/backend';
1+
import { createClerkClient } from '@clerk/backend';
22

33
import { API_URL, API_VERSION, SDK_METADATA, SECRET_KEY, TELEMETRY_DEBUG, TELEMETRY_DISABLED } from '../constants';
44

5-
const clerkClient = Clerk({
5+
const clerkClient = createClerkClient({
66
secretKey: SECRET_KEY,
77
apiUrl: API_URL,
88
apiVersion: API_VERSION,
@@ -15,10 +15,5 @@ const clerkClient = Clerk({
1515
},
1616
});
1717

18-
const createClerkClient = Clerk;
19-
20-
// eslint-disable-next-line import/export
21-
export { Clerk, clerkClient, createClerkClient };
22-
23-
// eslint-disable-next-line import/export
18+
export { clerkClient };
2419
export * from '@clerk/backend';

packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ exports[`/server public exports should not include a breaking change 1`] = `
44
[
55
"AllowlistIdentifier",
66
"AuthStatus",
7-
"Clerk",
87
"Client",
98
"DeletedObject",
109
"Email",

packages/nextjs/src/server/clerkClient.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Clerk } from '@clerk/backend';
1+
import { createClerkClient } from '@clerk/backend';
22

33
import {
44
API_URL,
@@ -12,7 +12,7 @@ import {
1212
TELEMETRY_DISABLED,
1313
} from './constants';
1414

15-
const clerkClient = Clerk({
15+
const clerkClient = createClerkClient({
1616
secretKey: SECRET_KEY,
1717
apiUrl: API_URL,
1818
apiVersion: API_VERSION,
@@ -28,10 +28,5 @@ const clerkClient = Clerk({
2828
},
2929
});
3030

31-
const createClerkClient = Clerk;
32-
33-
// eslint-disable-next-line import/export
34-
export { Clerk, clerkClient, createClerkClient };
35-
36-
// eslint-disable-next-line import/export
31+
export { clerkClient };
3732
export * from '@clerk/backend';

packages/remix/src/api/index.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1 @@
1-
import { Clerk } from '@clerk/backend';
2-
3-
const createClerkClient = Clerk;
4-
5-
export { createClerkClient };
6-
71
export * from '@clerk/backend';

packages/remix/src/ssr/authenticateRequest.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { RequestState } from '@clerk/backend';
2-
import { buildRequestUrl, Clerk } from '@clerk/backend';
2+
import { buildRequestUrl, createClerkClient } from '@clerk/backend';
33
import { apiUrlFromPublishableKey } from '@clerk/shared/apiUrlFromPublishableKey';
44
import { handleValueOrFn } from '@clerk/shared/handleValueOrFn';
55
import { isDevelopmentFromSecretKey } from '@clerk/shared/keys';
@@ -73,7 +73,7 @@ export function authenticateRequest(args: LoaderFunctionArgs, opts: RootAuthLoad
7373
throw new Error(satelliteAndMissingSignInUrl);
7474
}
7575

76-
return Clerk({ apiUrl, secretKey, jwtKey, proxyUrl, isSatellite, domain }).authenticateRequest({
76+
return createClerkClient({ apiUrl, secretKey, jwtKey, proxyUrl, isSatellite, domain }).authenticateRequest({
7777
audience,
7878
secretKey,
7979
jwtKey,

packages/sdk-node/src/clerkClient.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import type { ClerkOptions, VerifyTokenOptions } from '@clerk/backend';
2-
import { Clerk as _Clerk, verifyToken as _verifyToken } from '@clerk/backend';
2+
import { createClerkClient, verifyToken as _verifyToken } from '@clerk/backend';
33

44
import { createClerkExpressRequireAuth } from './clerkExpressRequireAuth';
55
import { createClerkExpressWithAuth } from './clerkExpressWithAuth';
66
import { loadApiEnv, loadClientEnv } from './utils';
77

8-
type ExtendedClerk = ReturnType<typeof _Clerk> & {
8+
type ExtendedClerk = ReturnType<typeof createClerkClient> & {
99
expressWithAuth: ReturnType<typeof createClerkExpressWithAuth>;
1010
expressRequireAuth: ReturnType<typeof createClerkExpressRequireAuth>;
1111
verifyToken: (token: string, verifyOpts?: Parameters<typeof _verifyToken>[1]) => ReturnType<typeof _verifyToken>;
@@ -17,7 +17,7 @@ type ExtendedClerk = ReturnType<typeof _Clerk> & {
1717
* Arrow functions can never be called with the new keyword because they do not have the [[Construct]] method
1818
*/
1919
export function Clerk(options: ClerkOptions): ExtendedClerk {
20-
const clerkClient = _Clerk(options);
20+
const clerkClient = createClerkClient(options);
2121
const expressWithAuth = createClerkExpressWithAuth({ ...options, clerkClient });
2222
const expressRequireAuth = createClerkExpressRequireAuth({ ...options, clerkClient });
2323
const verifyToken = (token: string, verifyOpts?: VerifyTokenOptions) => {
@@ -32,26 +32,26 @@ export function Clerk(options: ClerkOptions): ExtendedClerk {
3232
});
3333
}
3434

35-
export const createClerkClient = Clerk;
35+
export { createClerkClient } from '@clerk/backend';
3636

3737
let clerkClientSingleton = {} as unknown as ReturnType<typeof Clerk>;
3838

3939
export const clerkClient = new Proxy(clerkClientSingleton, {
4040
get(_target, property) {
4141
const hasBeenInitialised = !!clerkClientSingleton.authenticateRequest;
4242
if (hasBeenInitialised) {
43-
// @ts-expect-error
43+
// @ts-expect-error - Element implicitly has an 'any' type because expression of type 'string | symbol' can't be used to index type 'ExtendedClerk'.
4444
return clerkClientSingleton[property];
4545
}
4646

4747
const env = { ...loadApiEnv(), ...loadClientEnv() };
4848
if (env.secretKey) {
4949
clerkClientSingleton = Clerk({ ...env, userAgent: '@clerk/clerk-sdk-node' });
50-
// @ts-expect-error
50+
// @ts-expect-error - Element implicitly has an 'any' type because expression of type 'string | symbol' can't be used to index type 'ExtendedClerk'.
5151
return clerkClientSingleton[property];
5252
}
5353

54-
// @ts-expect-error
54+
// @ts-expect-error - Element implicitly has an 'any' type because expression of type 'string | symbol' can't be used to index type 'ExtendedClerk'.
5555
return Clerk({ ...env, userAgent: '@clerk/clerk-sdk-node' })[property];
5656
},
5757
set() {

0 commit comments

Comments
 (0)