Skip to content

Commit de4971a

Browse files
octoperpanteliselef
authored andcommitted
feat(tanstack-start): Export @clerk/backend from server subpath (#4128)
Co-authored-by: panteliselef <panteliselef@outlook.com>
1 parent d9a4536 commit de4971a

File tree

6 files changed

+85
-15
lines changed

6 files changed

+85
-15
lines changed

.changeset/poor-months-share.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@clerk/tanstack-start": minor
3+
---
4+
5+
Introducing `clerkClient()` from `@clerk/tanstack-start/server` for accessing the `@clerk/backend` client
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { createClerkClient } from '@clerk/backend';
2+
3+
import {
4+
API_URL,
5+
API_VERSION,
6+
DOMAIN,
7+
IS_SATELLITE,
8+
PROXY_URL,
9+
PUBLISHABLE_KEY,
10+
SDK_METADATA,
11+
SECRET_KEY,
12+
TELEMETRY_DEBUG,
13+
TELEMETRY_DISABLED,
14+
} from './constants';
15+
16+
const clerkClient: typeof createClerkClient = options =>
17+
createClerkClient({
18+
secretKey: SECRET_KEY,
19+
publishableKey: PUBLISHABLE_KEY,
20+
apiUrl: API_URL,
21+
apiVersion: API_VERSION,
22+
userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}`,
23+
proxyUrl: PROXY_URL,
24+
domain: DOMAIN,
25+
isSatellite: IS_SATELLITE,
26+
sdkMetadata: SDK_METADATA,
27+
telemetry: {
28+
disabled: TELEMETRY_DISABLED,
29+
debug: TELEMETRY_DEBUG,
30+
},
31+
...options,
32+
});
33+
34+
export { clerkClient };
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { apiUrlFromPublishableKey } from '@clerk/shared/apiUrlFromPublishableKey';
2+
3+
import { getEnvVariable, getPublicEnvVariables } from '../utils/env';
4+
5+
export const CLERK_JS_VERSION = getPublicEnvVariables().clerkJsVersion || '';
6+
export const CLERK_JS_URL = getPublicEnvVariables().clerkJsUrl || '';
7+
export const API_VERSION = getEnvVariable('CLERK_API_VERSION') || 'v1';
8+
export const SECRET_KEY = getEnvVariable('CLERK_SECRET_KEY') || '';
9+
export const PUBLISHABLE_KEY = getPublicEnvVariables().publishableKey || '';
10+
export const ENCRYPTION_KEY = getEnvVariable('CLERK_ENCRYPTION_KEY') || '';
11+
export const API_URL = getEnvVariable('CLERK_API_URL') || apiUrlFromPublishableKey(PUBLISHABLE_KEY);
12+
export const DOMAIN = getPublicEnvVariables().domain || '';
13+
export const PROXY_URL = getPublicEnvVariables().proxyUrl || '';
14+
export const CLERK_JWT_KEY = getEnvVariable('CLERK_JWT_KEY') || '';
15+
export const IS_SATELLITE = getPublicEnvVariables().isSatellite || false;
16+
export const SIGN_IN_URL = getPublicEnvVariables().signInUrl || '';
17+
export const SIGN_UP_URL = getPublicEnvVariables().signUpUrl || '';
18+
export const SDK_METADATA = {
19+
name: PACKAGE_NAME,
20+
version: PACKAGE_VERSION,
21+
environment: getEnvVariable('NODE_ENV'),
22+
};
23+
24+
export const TELEMETRY_DISABLED = getPublicEnvVariables().telemetryDisabled;
25+
export const TELEMETRY_DEBUG = getPublicEnvVariables().telemetryDebug;

packages/tanstack-start/src/server/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export * from './middlewareHandler';
22

33
export * from './getAuth';
4+
export { clerkClient } from './clerkClient';
45

56
/**
67
* Re-export resource types from @clerk/backend

packages/tanstack-start/src/server/loadOptions.ts

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,34 @@ import { apiUrlFromPublishableKey } from '@clerk/shared/apiUrlFromPublishableKey
33
import { handleValueOrFn } from '@clerk/shared/handleValueOrFn';
44
import { isDevelopmentFromSecretKey } from '@clerk/shared/keys';
55
import { isHttpOrHttps, isProxyUrlRelative } from '@clerk/shared/proxy';
6-
import { isTruthy } from '@clerk/shared/underscore';
76

87
import { errorThrower } from '../utils';
98
import { getEnvVariable, getPublicEnvVariables } from '../utils/env';
9+
import {
10+
CLERK_JWT_KEY,
11+
DOMAIN,
12+
IS_SATELLITE,
13+
PROXY_URL,
14+
PUBLISHABLE_KEY,
15+
SECRET_KEY,
16+
SIGN_IN_URL,
17+
SIGN_UP_URL,
18+
} from './constants';
1019
import type { LoaderOptions } from './types';
1120
import { patchRequest } from './utils';
1221

1322
export const loadOptions = (request: Request, overrides: LoaderOptions = {}) => {
1423
const clerkRequest = createClerkRequest(patchRequest(request));
1524

16-
const secretKey = overrides.secretKey || overrides.secretKey || getEnvVariable('CLERK_SECRET_KEY');
17-
const publishableKey = overrides.publishableKey || getPublicEnvVariables().publishableKey;
18-
const jwtKey = overrides.jwtKey || getEnvVariable('CLERK_JWT_KEY');
25+
const secretKey = overrides.secretKey || SECRET_KEY;
26+
const publishableKey = overrides.publishableKey || PUBLISHABLE_KEY;
27+
const jwtKey = overrides.jwtKey || CLERK_JWT_KEY;
1928
const apiUrl = getEnvVariable('CLERK_API_URL') || apiUrlFromPublishableKey(publishableKey);
20-
const domain = handleValueOrFn(overrides.domain, new URL(request.url)) || getPublicEnvVariables().domain;
21-
const isSatellite =
22-
handleValueOrFn(overrides.isSatellite, new URL(request.url)) || isTruthy(getPublicEnvVariables().isSatellite);
23-
const relativeOrAbsoluteProxyUrl = handleValueOrFn(
24-
overrides?.proxyUrl,
25-
clerkRequest.clerkUrl,
26-
getPublicEnvVariables().proxyUrl,
27-
);
28-
const signInUrl = overrides.signInUrl || getPublicEnvVariables().signInUrl;
29-
const signUpUrl = overrides.signUpUrl || getPublicEnvVariables().signUpUrl;
29+
const domain = handleValueOrFn(overrides.domain, new URL(request.url)) || DOMAIN;
30+
const isSatellite = handleValueOrFn(overrides.isSatellite, new URL(request.url)) || IS_SATELLITE;
31+
const relativeOrAbsoluteProxyUrl = handleValueOrFn(overrides?.proxyUrl, clerkRequest.clerkUrl, PROXY_URL);
32+
const signInUrl = overrides.signInUrl || SIGN_IN_URL;
33+
const signUpUrl = overrides.signUpUrl || SIGN_UP_URL;
3034
const afterSignInUrl = overrides.afterSignInUrl || getPublicEnvVariables().afterSignInUrl;
3135
const afterSignUpUrl = overrides.afterSignUpUrl || getPublicEnvVariables().afterSignUpUrl;
3236

packages/tanstack-start/src/utils/env.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ export const getPublicEnvVariables = () => {
4242
clerkJsVersion: getEnvVariable('VITE_CLERK_JS_VERSION') || getEnvVariable('CLERK_JS_VERSION'),
4343
telemetryDisabled:
4444
isTruthy(getEnvVariable('VITE_CLERK_TELEMETRY_DISABLED')) || isTruthy(getEnvVariable('CLERK_TELEMETRY_DISABLED')),
45-
telemetryDebug: getEnvVariable('VITE_CLERK_TELEMETRY_DEBUG') || getEnvVariable('CLERK_TELEMETRY_DEBUG'),
45+
telemetryDebug:
46+
isTruthy(getEnvVariable('VITE_CLERK_TELEMETRY_DEBUG')) || isTruthy(getEnvVariable('CLERK_TELEMETRY_DEBUG')),
4647
afterSignInUrl: getEnvVariable('VITE_CLERK_AFTER_SIGN_IN_URL') || getEnvVariable('CLERK_AFTER_SIGN_IN_URL'),
4748
afterSignUpUrl: getEnvVariable('VITE_CLERK_AFTER_SIGN_UP_URL') || getEnvVariable('CLERK_AFTER_SIGN_UP_URL'),
4849
};

0 commit comments

Comments
 (0)