From 4a885bcc047f7e78db491d120dec8fa2f596ed51 Mon Sep 17 00:00:00 2001 From: Bereket Engida Date: Mon, 2 Dec 2024 15:43:50 +0300 Subject: [PATCH] fix(organization): On update, organization metadata shouldn't be stringified unless it's already an object. --- packages/better-auth/src/client/config.ts | 4 ++-- packages/better-auth/src/client/parser.ts | 6 +++--- packages/better-auth/src/plugins/organization/adapter.ts | 8 ++++++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/better-auth/src/client/config.ts b/packages/better-auth/src/client/config.ts index b737a69c58..c51aa4f519 100644 --- a/packages/better-auth/src/client/config.ts +++ b/packages/better-auth/src/client/config.ts @@ -4,7 +4,7 @@ import { type WritableAtom } from "nanostores"; import type { AtomListener, ClientOptions } from "./types"; import { addCurrentURL, redirectPlugin } from "./fetch-plugins"; import { getSessionAtom } from "./session-atom"; -import { betterJSON } from "./parser"; +import { parseJSON } from "./parser"; export const getClientConfig = (options?: O) => { /* check if the credentials property is supported. Useful for cf workers */ @@ -19,7 +19,7 @@ export const getClientConfig = (options?: O) => { ...(isCredentialsSupported ? { credentials: "include" } : {}), method: "GET", jsonParser(text) { - return betterJSON(text, { + return parseJSON(text, { strict: false, }); }, diff --git a/packages/better-auth/src/client/parser.ts b/packages/better-auth/src/client/parser.ts index e76713f16f..3f5f3204b6 100644 --- a/packages/better-auth/src/client/parser.ts +++ b/packages/better-auth/src/client/parser.ts @@ -78,7 +78,7 @@ function parseISODate(value: string): Date | null { return isValidDate(date) ? date : null; } -export function betterJSONParse( +function betterJSONParse( value: unknown, options: ParseOptions = {}, ): T { @@ -169,11 +169,11 @@ export function betterJSONParse( } } -export function betterJSON( +export function parseJSON( value: unknown, options: ParseOptions = { strict: true }, ): T { return betterJSONParse(value, options); } -export default betterJSON; +export default parseJSON; diff --git a/packages/better-auth/src/plugins/organization/adapter.ts b/packages/better-auth/src/plugins/organization/adapter.ts index 967328f5b9..94a325ad34 100644 --- a/packages/better-auth/src/plugins/organization/adapter.ts +++ b/packages/better-auth/src/plugins/organization/adapter.ts @@ -11,6 +11,7 @@ import type { } from "./schema"; import { BetterAuthError } from "../../error"; import type { AuthContext } from "../../types"; +import parseJSON from "../../client/parser"; export const getOrgAdapter = ( context: AuthContext, @@ -239,7 +240,10 @@ export const getOrgAdapter = ( ], update: { ...data, - metadata: data.metadata ? JSON.stringify(data.metadata) : undefined, + metadata: + typeof data.metadata === "object" + ? JSON.stringify(data.metadata) + : data.metadata, }, }); if (!organization) { @@ -248,7 +252,7 @@ export const getOrgAdapter = ( return { ...organization, metadata: organization.metadata - ? JSON.parse(organization.metadata) + ? parseJSON(organization.metadata) : undefined, }; },