From 6e4821cef574fecbbd93b07dc9245a367b4f63ea Mon Sep 17 00:00:00 2001 From: Taesu <166604494+bytaesu@users.noreply.github.com> Date: Fri, 2 Jan 2026 13:26:58 +0900 Subject: [PATCH] fix(stripe): pass metadata to subscription object in upgrade method (#7090) --- packages/stripe/src/routes.ts | 10 ++++- packages/stripe/src/stripe.test.ts | 65 ++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/packages/stripe/src/routes.ts b/packages/stripe/src/routes.ts index fa7deefcf3..f814b0dadc 100644 --- a/packages/stripe/src/routes.ts +++ b/packages/stripe/src/routes.ts @@ -532,15 +532,23 @@ export const upgradeSubscription = (options: StripeOptions) => { ], subscription_data: { ...freeTrial, + metadata: { + ...ctx.body.metadata, + ...params?.params?.subscription_data?.metadata, + userId: user.id, + subscriptionId: subscription.id, + referenceId, + }, }, mode: "subscription", client_reference_id: referenceId, ...params?.params, metadata: { + ...ctx.body.metadata, + ...params?.params?.metadata, userId: user.id, subscriptionId: subscription.id, referenceId, - ...params?.params?.metadata, }, }, params?.options, diff --git a/packages/stripe/src/stripe.test.ts b/packages/stripe/src/stripe.test.ts index a9caf915e3..d8f34e539e 100644 --- a/packages/stripe/src/stripe.test.ts +++ b/packages/stripe/src/stripe.test.ts @@ -329,6 +329,71 @@ describe("stripe", () => { expect(mockStripe.subscriptions.update).not.toHaveBeenCalled(); }); + it("should pass metadata to subscription when upgrading", async () => { + const { client, sessionSetter } = await getTestInstance( + { + database: memory, + plugins: [stripe(stripeOptions)], + }, + { + disableTestUser: true, + clientOptions: { + plugins: [ + stripeClient({ + subscription: true, + }), + ], + }, + }, + ); + + await client.signUp.email( + { + ...testUser, + email: "metadata-test@email.com", + }, + { + throw: true, + }, + ); + + const headers = new Headers(); + await client.signIn.email( + { + ...testUser, + email: "metadata-test@email.com", + }, + { + throw: true, + onSuccess: sessionSetter(headers), + }, + ); + + const customMetadata = { + customField: "customValue", + organizationId: "org_123", + projectId: "proj_456", + }; + + await client.subscription.upgrade({ + plan: "starter", + metadata: customMetadata, + fetchOptions: { + headers, + }, + }); + + expect(mockStripe.checkout.sessions.create).toHaveBeenCalledWith( + expect.objectContaining({ + subscription_data: expect.objectContaining({ + metadata: expect.objectContaining(customMetadata), + }), + metadata: expect.objectContaining(customMetadata), + }), + undefined, + ); + }); + it("should list active subscriptions", async () => { const { client, auth, sessionSetter } = await getTestInstance( {