Skip to content

Commit 70c0af3

Browse files
committed
chore(repo): apply staged updates
1 parent acbd2b2 commit 70c0af3

2 files changed

Lines changed: 44 additions & 7 deletions

File tree

packages/expo/src/provider/__tests__/ClerkProvider.nativeClientSync.test.tsx

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,48 @@ describe('ClerkProvider native client sync', () => {
456456
expect(mocks.configure).toHaveBeenCalledTimes(2);
457457
});
458458

459+
test('does not wait for an active native refresh after switching publishable keys', async () => {
460+
const obsoleteRefresh = rejectableDeferred();
461+
const obsoleteRefreshError = new Error('obsolete native refresh failed');
462+
463+
const { rerender } = render(
464+
<ClerkProvider
465+
publishableKey='pk_test_123'
466+
tokenCache={mocks.tokenCache}
467+
/>,
468+
);
469+
470+
await waitFor(() => expect(mocks.configure).toHaveBeenCalledWith('pk_test_123', null));
471+
await waitForPendingJsToNativeSync();
472+
473+
mocks.syncClientStateFromJs.mockReturnValueOnce(obsoleteRefresh.promise);
474+
await act(async () => {
475+
await mocks.clerkOptions?.tokenCache?.saveToken(CLERK_CLIENT_JWT_KEY, 'obsolete-client-token');
476+
});
477+
await waitFor(() => {
478+
expect(mocks.syncClientStateFromJs).toHaveBeenCalledWith(
479+
'obsolete-client-token',
480+
expect.any(String),
481+
false,
482+
true,
483+
);
484+
});
485+
486+
rerender(
487+
<ClerkProvider
488+
publishableKey='pk_test_456'
489+
tokenCache={mocks.tokenCache}
490+
/>,
491+
);
492+
493+
await waitFor(() => expect(mocks.configure).toHaveBeenCalledWith('pk_test_456', null));
494+
await expect(waitForPendingJsToNativeSync()).resolves.toBeUndefined();
495+
496+
obsoleteRefresh.reject(obsoleteRefreshError);
497+
await Promise.resolve();
498+
await expect(waitForPendingJsToNativeSync()).resolves.toBeUndefined();
499+
});
500+
459501
test('retries a transient native configure failure', async () => {
460502
const consoleError = vi.spyOn(console, 'error').mockImplementation(() => undefined);
461503
const configureError = new Error('transient native refresh failure');

packages/expo/src/provider/nativeClientSync.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -828,13 +828,8 @@ export function NativeClientSync({
828828
}, [enabled, queueNativeRefreshFromJs]);
829829

830830
useEffect(() => {
831-
return () => {
832-
pendingNativeRefreshBeforeReadyRef.current = null;
833-
pendingNativeRefreshBeforeReadyCompletionRef.current?.invalidateTracking();
834-
pendingNativeRefreshBeforeReadyCompletionRef.current?.resolve();
835-
pendingNativeRefreshBeforeReadyCompletionRef.current = null;
836-
};
837-
}, []);
831+
return cancelNativeRefreshFromJs;
832+
}, [cancelNativeRefreshFromJs]);
838833

839834
useEffect(() => {
840835
const listener: DeviceTokenCacheListener = deviceToken => {

0 commit comments

Comments
 (0)