Skip to content

Commit

Permalink
fix(backend): strip experimental__has from serializable auth object (#…
Browse files Browse the repository at this point in the history
…2101)

* fix(backend): Add experimental__has to properties strip out by makeAuthObjectSerializable

* chore(backend): Add test case for makeAuthObjectSerializable

* chore(repo): Add changeset
  • Loading branch information
BRKalow authored Nov 9, 2023
1 parent f147664 commit a6451ae
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 1 deletion.
5 changes: 5 additions & 0 deletions .changeset/weak-elephants-grin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@clerk/backend': patch
---

Strip `experimental__has` from the auth object in `makeAuthObjectSerializable()`. This fixes an issue in Next.js where an error is being thrown when this function is passed to a client component as a prop.
18 changes: 18 additions & 0 deletions packages/backend/src/tokens/authObjects.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import type QUnit from 'qunit';

import { makeAuthObjectSerializable, signedOutAuthObject } from './authObjects';

export default (QUnit: QUnit) => {
const { module, test } = QUnit;

module('makeAuthObjectSerializable', () => {
test('removes non-serializable props', assert => {
const authObject = signedOutAuthObject();
const serializableAuthObject = makeAuthObjectSerializable(authObject);

for (const key in serializableAuthObject) {
assert.notStrictEqual(typeof serializableAuthObject[key], 'function');
}
});
});
};
2 changes: 1 addition & 1 deletion packages/backend/src/tokens/authObjects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ export function sanitizeAuthObject<T extends Record<any, any>>(authObject: T): T
export const makeAuthObjectSerializable = <T extends Record<string, unknown>>(obj: T): T => {
// remove any non-serializable props from the returned object

const { debug, getToken, ...rest } = obj as unknown as AuthObject;
const { debug, getToken, experimental__has, ...rest } = obj as unknown as AuthObject;
return rest as unknown as T;
};

Expand Down
2 changes: 2 additions & 0 deletions packages/backend/tests/suites.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import apiTest from './dist/api/factory.test.js';
import factoryTest from './dist/api/factory.test.js';
import exportsTest from './dist/exports.test.js';
import redirectTest from './dist/redirections.test.js';
import authObjectsTest from './dist/tokens/authObjects.test.js';
import interstitialRequestTest from './dist/tokens/interstitial.test.js';
import jwtAssertionsTest from './dist/tokens/jwt/assertions.test.js';
import cryptoKeysTest from './dist/tokens/jwt/cryptoKeys.test.js';
Expand All @@ -19,6 +20,7 @@ import utilsTest from './dist/utils.test.js';
// Add them to the suite array
const suites = [
apiTest,
authObjectsTest,
exportsTest,
jwtAssertionsTest,
requestTest,
Expand Down

0 comments on commit a6451ae

Please sign in to comment.