Skip to content

Commit 288e7b3

Browse files
authored
feat(electron): Report SDK version to FAPI via query param (#8847)
1 parent abef47c commit 288e7b3

5 files changed

Lines changed: 30 additions & 4 deletions

File tree

‎packages/electron/src/global.d.ts‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import type { TokenCache } from './shared/types';
22

3-
declare const PACKAGE_NAME: string;
4-
declare const PACKAGE_VERSION: string;
5-
declare const __DEV__: boolean;
6-
73
declare global {
4+
const PACKAGE_NAME: string;
5+
const PACKAGE_VERSION: string;
6+
const __DEV__: boolean;
7+
88
interface Window {
99
__clerk_internal_electron?: {
1010
tokenCache: TokenCache;

‎packages/electron/src/react/__tests__/ClerkProvider.test.tsx‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,25 @@ describe('Electron ClerkProvider', () => {
9090

9191
expect(request.credentials).toBe('omit');
9292
expect(request.url.searchParams.get('_is_native')).toBe('1');
93+
expect(request.url.searchParams.get('_electron_sdk_version')).toBe('0.0.0-test');
9394
expect(request.headers.get('Authorization')).toBe('Bearer client-jwt');
9495
expect(tokenCache.getToken).toHaveBeenCalledWith('__clerk_client_jwt');
9596
});
9697

98+
it('adds the Electron SDK version query param when there is no cached token', async () => {
99+
tokenCache.getToken.mockResolvedValue(null);
100+
renderToStaticMarkup(<ClerkProvider publishableKey='pk_test_version_header'>App</ClerkProvider>);
101+
102+
const request = {
103+
headers: new Headers(),
104+
url: new URL('https://api.clerk.test/v1/client'),
105+
};
106+
await beforeRequest?.(request);
107+
108+
expect(request.url.searchParams.get('_electron_sdk_version')).toBe('0.0.0-test');
109+
expect(request.headers.has('Authorization')).toBe(false);
110+
});
111+
97112
it('stores Authorization response headers in the Electron token cache', async () => {
98113
renderToStaticMarkup(<ClerkProvider publishableKey='pk_test_after_response'>App</ClerkProvider>);
99114

‎packages/electron/src/react/create-clerk-instance.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export function createClerkInstance(publishableKey: string): ClerkInstance {
1616
clerk.__internal_onBeforeRequest(async request => {
1717
request.credentials = 'omit';
1818
request.url?.searchParams.append('_is_native', '1');
19+
request.url?.searchParams.append('_electron_sdk_version', PACKAGE_VERSION);
1920

2021
const token = await window.__clerk_internal_electron?.tokenCache.getToken(CLERK_CLIENT_JWT_KEY);
2122
if (token) {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { defineConfig } from 'vitest/config';
2+
3+
export default defineConfig({
4+
test: {
5+
setupFiles: './vitest.setup.mts',
6+
},
7+
});

‎packages/electron/vitest.setup.mts‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
globalThis.PACKAGE_NAME = '@clerk/electron';
2+
globalThis.PACKAGE_VERSION = '0.0.0-test';
3+
globalThis.__DEV__ = false;

0 commit comments

Comments
 (0)