Skip to content

Conversation

@NicolasGorga
Copy link
Contributor

Summary

What — What changes are introduced in this PR?

Updates MedusaRequest generics in /store/currencies get endpoints.

Why — Why are these changes relevant or necessary?

To align the body and query types to what is actually expected.

How — How have these changes been implemented?

Corrected MedusaRequest generics adding undefined as the first type parameter so the already passed type is correctly mapped to query instead of body.

Testing — How have these changes been tested, or how can the reviewer test the feature?


Examples

Provide examples or code snippets that demonstrate how this feature works, or how it can be used in practice.
This helps with documentation and ensures maintainers can quickly understand and verify the change.

// Example usage

Checklist

Please ensure the following before requesting a review:

  • I have added a changeset for this PR
    • Every non-breaking change should be marked as a patch
    • To add a changeset, run yarn changeset and follow the prompts
  • The changes are covered by relevant tests
  • I have verified the code works as intended locally
  • I have linked the related issue(s) if applicable

Additional Context

Add any additional context, related issues, or references that might help the reviewer understand this PR.

closes ENTSUP-279

@NicolasGorga NicolasGorga requested a review from a team as a code owner November 20, 2025 16:15
@cursor
Copy link

cursor bot commented Nov 20, 2025

You have run out of free Bugbot PR reviews for this billing cycle. This will reset on December 17.

To receive reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

@changeset-bot
Copy link

changeset-bot bot commented Nov 20, 2025

🦋 Changeset detected

Latest commit: 39aeddf

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 74 packages
Name Type
@medusajs/medusa Patch
@medusajs/test-utils Patch
@medusajs/medusa-oas-cli Patch
integration-tests-http Patch
@medusajs/analytics Patch
@medusajs/api-key Patch
@medusajs/auth Patch
@medusajs/caching Patch
@medusajs/cart Patch
@medusajs/currency Patch
@medusajs/customer Patch
@medusajs/file Patch
@medusajs/fulfillment Patch
@medusajs/index Patch
@medusajs/inventory Patch
@medusajs/link-modules Patch
@medusajs/locking Patch
@medusajs/notification Patch
@medusajs/order Patch
@medusajs/payment Patch
@medusajs/pricing Patch
@medusajs/product Patch
@medusajs/promotion Patch
@medusajs/region Patch
@medusajs/sales-channel Patch
@medusajs/settings Patch
@medusajs/stock-location Patch
@medusajs/store Patch
@medusajs/tax Patch
@medusajs/user Patch
@medusajs/workflow-engine-inmemory Patch
@medusajs/workflow-engine-redis Patch
@medusajs/draft-order Patch
@medusajs/oas-github-ci Patch
@medusajs/cache-inmemory Patch
@medusajs/cache-redis Patch
@medusajs/event-bus-local Patch
@medusajs/event-bus-redis Patch
@medusajs/analytics-local Patch
@medusajs/analytics-posthog Patch
@medusajs/auth-emailpass Patch
@medusajs/auth-github Patch
@medusajs/auth-google Patch
@medusajs/caching-redis Patch
@medusajs/file-local Patch
@medusajs/file-s3 Patch
@medusajs/fulfillment-manual Patch
@medusajs/locking-postgres Patch
@medusajs/locking-redis Patch
@medusajs/notification-local Patch
@medusajs/notification-sendgrid Patch
@medusajs/payment-stripe Patch
@medusajs/core-flows Patch
@medusajs/framework Patch
@medusajs/js-sdk Patch
@medusajs/modules-sdk Patch
@medusajs/orchestration Patch
@medusajs/types Patch
@medusajs/utils Patch
@medusajs/workflows-sdk Patch
@medusajs/cli Patch
@medusajs/deps Patch
@medusajs/telemetry Patch
@medusajs/admin-bundler Patch
@medusajs/admin-sdk Patch
@medusajs/admin-shared Patch
@medusajs/admin-vite-plugin Patch
@medusajs/dashboard Patch
@medusajs/icons Patch
@medusajs/toolbox Patch
@medusajs/ui-preset Patch
create-medusa-app Patch
medusa-dev-cli Patch
@medusajs/ui Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel
Copy link

vercel bot commented Nov 20, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

8 Skipped Deployments
Project Deployment Preview Comments Updated (UTC)
api-reference Ignored Ignored Nov 27, 2025 4:34pm
api-reference-v2 Ignored Ignored Preview Nov 27, 2025 4:34pm
cloud-docs Ignored Ignored Preview Nov 27, 2025 4:34pm
docs-ui Ignored Ignored Preview Nov 27, 2025 4:34pm
docs-v2 Ignored Ignored Preview Nov 27, 2025 4:34pm
medusa-docs Ignored Ignored Preview Nov 27, 2025 4:34pm
resources-docs Ignored Ignored Preview Nov 27, 2025 4:34pm
user-guide Ignored Ignored Preview Nov 27, 2025 4:34pm

Copy link
Contributor

@olivermrbl olivermrbl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pretty sure we have done this all over the place; are you sure this is correct? if so, maybe we need to update more places

@NicolasGorga
Copy link
Contributor Author

pretty sure we have done this all over the place; are you sure this is correct? if so, maybe we need to update more places

I'm positive. Included fixes to all the incorrect usages.

Copy link
Member

@adrien2p adrien2p left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it is fine, I am just wondering if it would make sense to do something like this

export interface AuthenticatedMedusaRequest<
  BodyOrQueryFields = unknown,
  QueryFields extends Record<string, unknown> = {}
> extends MedusaRequest<
    {} extends QueryFields ? undefined : BodyOrQueryFields,
    {} extends QueryFields
      ? BodyOrQueryFields & Record<string, unknown>
      : QueryFields
  > {
  auth_context: AuthContext
  publishable_key_context?: PublishableKeyContext
}
export interface MedusaRequest<
  Body = unknown,
  QueryFields extends Record<string, unknown> = {}
> extends Request<
    { [key: string]: string },
    any,
    {} extends QueryFields ? Body : undefined
  > {
  validatedBody: {} extends QueryFields ? undefined : Body
  validatedQuery: {} extends QueryFields
    ? RequestQueryFields
    : RequestQueryFields & QueryFields
//...

Here we would allow for

  • single template args -> query fields
  • both -> body, fields

Let me know if that makes sense guys (cc @olivermrbl)

@NicolasGorga
Copy link
Contributor Author

I think it is fine, I am just wondering if it would make sense to do something like this

export interface AuthenticatedMedusaRequest<
  BodyOrQueryFields = unknown,
  QueryFields extends Record<string, unknown> = {}
> extends MedusaRequest<
    {} extends QueryFields ? undefined : BodyOrQueryFields,
    {} extends QueryFields
      ? BodyOrQueryFields & Record<string, unknown>
      : QueryFields
  > {
  auth_context: AuthContext
  publishable_key_context?: PublishableKeyContext
}
export interface MedusaRequest<
  Body = unknown,
  QueryFields extends Record<string, unknown> = {}
> extends Request<
    { [key: string]: string },
    any,
    {} extends QueryFields ? Body : undefined
  > {
  validatedBody: {} extends QueryFields ? undefined : Body
  validatedQuery: {} extends QueryFields
    ? RequestQueryFields
    : RequestQueryFields & QueryFields
//...

Here we would allow for

  • single template args -> query fields
  • both -> body, fields

Let me know if that makes sense guys (cc @olivermrbl)

I like this since I think users might not consistently understand that they should put undefined as the first type parameter for requests without a body. Additionally, it is more convenient not to have to do this in these cases and simply specify the query parameter type. Let me know wyt Oli, and I'll proceed with the update.

@NicolasGorga NicolasGorga changed the title fix(medusa): Correct MedusaRequest generics in /store/currencies endpoint fix(medusa): Correct MedusaRequest query type Nov 26, 2025
@NicolasGorga
Copy link
Contributor Author

Hey @adrien2p I've updated the types with your suggestion, with a small correction on the MedusaRequest type if you could check?

Also, if you could help me know how we could handle the following error when building in packages/core/framework/src

src/http/utils/validate-body.ts:31:7 - error TS2322: Type 'ZodRawShape' is not assignable to type 'undefined'.

31       req.validatedBody = await zodValidator(schema, req.body)
         ~~~~~~~~~~~~~~~~~


Found 1 error.

This happens when not providing any types. QueryFields is the default value, which treats the Body param as the query one and evaluates to undefined.

olivermrbl
olivermrbl previously approved these changes Nov 27, 2025
Copy link
Contributor

@olivermrbl olivermrbl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Neat

@olivermrbl olivermrbl dismissed their stale review November 27, 2025 10:33

didn't see the discussion, I think adrien's suggestion makes sense to incorporate if its feasible

@NicolasGorga
Copy link
Contributor Author

Yes, added the changes to the type as per Adrien suggestion, though that introduces the issue I mentioned in my last comment when we don't pass the types and use defaults, while try to assign to validatedBody, since in these cases it is treated as undefined (as per the "if only one type provided, we assume no body and only query"). I will wait for his input :)

@adrien2p
Copy link
Member

Yes, added the changes to the type as per Adrien suggestion, though that introduces the issue I mentioned in my last comment when we don't pass the types and use defaults, while try to assign to validatedBody, since in these cases it is treated as undefined (as per the "if only one type provided, we assume no body and only query"). I will wait for his input :)

Yeah I ve suggeted undefined but it can be a record or unknown or something like that, the main idea is to route the correct template args to the correct location 👍

@NicolasGorga
Copy link
Contributor Author

I am still having build issues, thinking of how to solve this with the changes we did

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants