Commit Graph

2214 Commits

Author SHA1 Message Date
Nicolas Gorga
8055a79c52 fix(core-flows): conditionally create customer on order email update if unset (#14264)
* Find or create customer on order email update when order email is unset

* Tests

* Add changeset
2026-01-05 16:12:42 +01:00
Nicolas Gorga
a464e9d907 fix(core-flows): Avoid checking inventory items on fulfillment cancel for unmanaged inventory variants (#14177)
* Avoid checking existent inventory item on fulfillment cancellation for variants without managed inventory

* Add changeset

* Dismiss existent variant inventory links when updating to unmanaged inventory

* Update input type and step name

* Dismiss inventory when variant is updated to unmanaged inventory

* Review changes

* Fix

* Fix

* Comments

* Include Map to avoid iterating unnecessarily
2026-01-05 16:11:23 +01:00
Riqwan Thamir
43305a562c feat(medusa,utils,core-flows): add reset password metdata (#14417)
## Summary

**What**

Adds metadata field for reset password route that allows passing data from caller that can be found in the subscriber. 

## Checklist

Please ensure the following before requesting a review:

- [x] 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
- [x] The changes are covered by relevant **tests**
- [x] I have verified the code works as intended locally
- [ ] I have linked the related issue(s) if applicable


---

> [!NOTE]
> Introduces optional request `metadata` for reset-password and propagates it through to event subscribers.
> 
> - Accepts `metadata` in `ResetPasswordRequest` validator and `reset-password` route; forwards it to `generateResetPasswordTokenWorkflow`
> - Workflow now accepts `metadata` and includes it in emitted `auth.password_reset` event data
> - Updates event docs to mention `metadata` field
> - Adds integration test verifying `metadata` is emitted in the password reset event
> 
> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 7f9855feabed284336e8872eebfb18fe3bd320db. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>
2026-01-02 12:41:26 +00:00
Frane Polić
d06729d0d1 fix(dashboard): form reset for across allocation (#14369)
**What**
- fix an issue where switching between `across` promotion types in the create form wouldn't set `max_quantity` to null which would cause the create request to fail

---

CLOSES https://github.com/medusajs/medusa/issues/14365


---

> [!NOTE]
> Prevents invalid `max_quantity` when switching templates to an *across* allocation in the promotion creation flow.
> 
> - In `create-promotion-form.tsx`, after applying template defaults, explicitly sets `application_method.max_quantity` to `null` if `application_method.allocation` is `"across"` to avoid resetting it to `1`
> - Adds a changeset entry for `@medusajs/dashboard` patch release
> 
> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 5b08c77fee741ec5de399b4f1f9e245ba69b5bee. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>


Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
2026-01-02 10:46:50 +00:00
Nicolas Gorga
242f1d7d7f feat(dashboard,draft-order): Remove hardcoded strings and replace with translations in draft orders list page (#14400)
## Summary

**What** — What changes are introduced in this PR?

Add translations management to draft orders list page.

**Why** — Why are these changes relevant or necessary?  

We were using hardcoded English strings.

**How** — How have these changes been implemented?

Remove hardcoded strings and replace them with dynamic translations.

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

*Please provide answer here*

---

## 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.

```ts
// Example usage
```

---

## Checklist

Please ensure the following before requesting a review:

- [x] 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**
- [x] I have verified the code works as intended locally
- [x] 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 #14377
2026-01-02 10:44:42 +00:00
Nicolas Gorga
bf4cc12545 feat(core-flows,utils): Shipping options workflow events emission (#14388)
* Shipping options workflow events type

* Emit shipping options workflow events

* add changeset
2026-01-02 11:28:29 +01:00
Oli Juhl
7e3ed913a6 chore: Create publishable API key as part of the defaults (#14356)
* wip

* chore: fix tests

* Create tiny-carrots-bathe.md
2026-01-02 11:27:03 +01:00
Nicolas Gorga
11de7e3e34 feat(translation,core-flows): translate remaining core entities and sync shipping option <> method translations (#14358)
* Get translated shipping options step

* Apply translations on shipping options list methods.

* Pass shipping option naem when refreshing cart shipping methods, so if locale changed, we update the name

* Update translatable fields config

* Cart shipping method update translation tests

* Shipping options translations tests

* Add changeset

* Update order shipping method translations on update

* Remove unnecessary workflow and use step instead

* Translate shipping method on order edit

* Use new update shipping methods tranlsations step

* Draft order shipping method translation sync

* Translate shipping method on order exchange

* Translate returns shipping methods

* Translate claims shipping methods

* Remove unnecessary check

* Early return

* Fix import

---------

Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
2026-01-02 11:26:06 +01:00
Oli Juhl
5f807ee657 chore: Ensure isolated order deletion (#14405)
## Summary

Ensure that address deletion during order deletion is handled correctly with respect to cascading deletes. Currently, when deleting an order that does not have a shipping or billing address, we incorrectly attempt to delete all order addresses. This happens because `undefined` address IDs are not handled properly during deletion.

More specifically, when deleting an order without addresses, the following method is called with these arguments:
```ts
await deleteOrderAddresses([undefined, undefined])
```
This triggers deletion of all order addresses.

To make matters worse, because we have a cascade delete defined from order addresses to orders, the same call also deletes all associated orders.

The root cause is the following filtering logic:
```ts
const orderAddressIds = orders
      .map((order) => [order.shipping_address_id, order.billing_address_id])
      .flat(1)
```

For orders without addresses, this produces `[undefined, undefined]` as input filter, which our delete methods interpret as:
```ts
await delete({ '$or': [ { id: undefined }, { id: undefined } ] })
```

This effectively translates to “delete all addresses.”

In this PR, we make two changes to prevent this going forward:
1. Filter out undefined address IDs before attempting deletion
2. Remove the cascade delete from address to order, as this is an aggressive constraint

The latter change is open for discussion, but cascading deletes from a child entity to a parent is slightly off IMO. Let me know your thoughts.

## Checklist

Please ensure the following before requesting a review:

- [x] 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
- [x] The changes are covered by relevant **tests**
- [x] 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.


---

> [!NOTE]
> Strengthens order deletion to avoid unintended cascades and validates behavior with tests.
> 
> - Update FK constraints in migration to `ON DELETE SET NULL` for `order.shipping_address_id` and `order.billing_address_id` (was `CASCADE`)
> - In `order-module-service.ts` `deleteOrders`, filter falsy address IDs and conditionally batch-delete `order_address`/`order_change` via `promiseAll`
> - Add integration tests `integration-tests/__tests__/delete-order.spec.ts` covering deletion of orders and associated entities, deleting orders without addresses (no cross-order impact), and address deletion setting `NULL` on the order
> - Add changeset marking `@medusajs/order` patch
> 
> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 8e4ab59af407ec865f73fbf286ec93e710915c8e. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>
2026-01-02 10:16:29 +00:00
Pedro Guzman
001923da2b feat: add Medusa Cloud OAuth provider (#14395)
* feat: add Medusa Cloud OAuth provider

* add Cloud login button

* fetch whether cloud auth is enabled through api

* allow unregistered to get session

* handle existing users

* address PR comments

* prevent double execution

* a few more fixes

* fix callback url

* fix spelling

* refresh session

* 200 instead of 201

* only allow cloud identities to create user

* fix condition
2025-12-30 17:30:10 +01:00
Shahed Nasser
4ac7b72d10 fix(dashboard): fix customer details page crashing when their order is refunded (#14413)
1. Fix the customer details page crashing when a customer's order is fully refunded. The error was originating from the payment collections of the order not being retrieved, since they're being used to calculate the refunded total.
2. Other: fix country not showing as well due to incorrectly trying to retrieving and access the shipping address's country

Closes #14409
2025-12-29 09:38:21 +00:00
Shahed Nasser
89a0adc612 fix(types): add missing completed_at property for carts (#14412) 2025-12-29 11:08:37 +02:00
Carlos R. L. Rodrigues
d347e369ce fix(medusa,framework): HMR file watch (#14390) 2025-12-27 15:52:38 +01:00
Nicolas Gorga
caa561badf feat(dashboard): Add first and last name inputs to update order shipping and billing address forms (#14394)
* Add first_name and last_name to order edit addresses forms

* Add changeset
2025-12-27 15:49:50 +01:00
Shahed Nasser
6380c1fdf4 fix(medusa): allow passing null to cart API routes (#14381)
Allow passing `null` as the locale for cart API route, as `optional` only allow passing `undefined`.
2025-12-22 08:51:01 +00:00
Adrien de Peretti
b21a599d11 feat(): Translation settings + user configuration + admin hook and js sdk + dashboard (#14355)
* feat(): Translation settings + user configuration

* feat(): Translation settings + user configuration

* Create gentle-bees-grow.md

* add entities end point

* add entities end point

* add admin hook and js sdk method

* update changeset

* fix tests

* fix tests

* rm unnecessary copy

* update dashboard to use the new resources

* update dashboard to use the new resources

* update dashboard to use the new resources

* allow type inference through interface augmentation in the defineConfig of medusa-config

* allow type inference through interface augmentation in the defineConfig of medusa-config

* exclude id and _id props

---------

Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
2025-12-19 15:29:48 +01:00
Irakli
1c89acc536 feat: added ka-GE to the default list of locales (#14364) 2025-12-19 12:48:57 +01:00
Adrien de Peretti
ee8d7221da Revert "add generated .medusa/types to local plugins (#13777)" (#14361)
This reverts commit 125694626e.
2025-12-19 11:10:38 +01:00
Adrien de Peretti
181d5fa671 feat(): Auto generated types generation upon build (#14337)
* feat(): Auto generated types generation upon build

* Create happy-steaks-cheer.md

* test(): default types true

* improvements

* improvements

* improvements

* improvements

* improvements
2025-12-19 10:13:17 +01:00
Leonardo Benini
125694626e add generated .medusa/types to local plugins (#13777)
Co-authored-by: Adrien de Peretti <adrien.deperetti@gmail.com>
2025-12-19 07:01:15 +01:00
Adrien de Peretti
fb6a6b52fa fix(order): Prevent fetching all db adjustments when no items are pre… (#14351)
* fix(order): Prevent fetching all db adjustments when no items are present

* Create funny-suns-think.md
2025-12-18 15:21:32 +01:00
0xFl4g
0277062fec fix(translation): prevent duplicate locale error on server restart (#14345)
The translation module's defaults loader throws a warning on every server
restart after the first run because the upsert method uses `id` as the
unique key, but defaultLocales only contains `code` and `name`.

This causes the upsert to always attempt creation, which fails on the
unique `code` constraint with: "Locale with code: en-US, already exists."

Fix: Fetch existing locales first and map their IDs into defaultLocales
so upsert can properly identify existing records and update them.
2025-12-18 11:56:18 +01:00
Shahed Nasser
92d240d749 fix(medusa): fix type of product variant request param (#14342)
Fix type argument for requests which is necessary for generating OpenAPI specs

## Why

The `StoreVariantListRequest` type used in the `/store/product-variants` route doesn't match the convention of other routes since it doesn't accept a type parameter for the query (or body, but here that's not necessary). This makes it difficult for us to infer the query parameter type of the request.

This change would adapt the `StoreVariantListRequest` to match other conventions in our API routes so that we can generate correct OAS for docs
2025-12-17 16:20:54 +00:00
Shahed Nasser
c0ec54fc15 fix(core-flows): fix type of getTranslatedLineItemsStep (#14338)
Fix the return type of the `getTranslatedLineItemsStep`, otherwise our reference generator can't pick up the step's typing correctly
2025-12-17 15:56:38 +00:00
github-actions[bot]
cfa38871cb Version Packages (#13978)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-17 13:55:25 +01:00
Nicolas Gorga
9f8da1e2e0 fix(dashboard): Remove unused translation property (#14330)
* Remove unused translation key

* Add changeset
2025-12-17 13:53:53 +01:00
Adrien de Peretti
1743ed7f04 fix(): Cart translation sync (#14327) 2025-12-17 10:07:17 +00:00
olivermrbl
21e3bdb8ae chore: Update changeset from minor to patch 2025-12-16 19:30:09 +01:00
Nicolas Gorga
b5edbb9940 fix(pricing,dashboard): update min_quantity/max_quantity to decimal in price model (#14045) 2025-12-16 13:38:53 -03:00
Adrien de Peretti
8c29d85f0f feat(): remove status from translatable fields (#14321)
* feat(): remove status from translatable fields

* Create tender-mugs-shave.md

* feat(): remove status from translatable fields
2025-12-16 14:57:06 +01:00
Adrien de Peretti
6815b3d7db chore(): Apply translation feature flag broaderly (#14319)
* chore(): Apply translation feature flag broaderly

* chore(): Apply translation feature flag broaderly

* Create rich-oranges-report.md
2025-12-16 12:45:37 +01:00
Adrien de Peretti
f5ec359c4c fix: Readonly link feature flag conditional (#14316)
* chore(): Improve readonly link disability

* chore(): Improve readonly link disability

* Create soft-rockets-chew.md

* fix
2025-12-16 11:25:56 +01:00
Adrien de Peretti
191e647eec chore(): js-sdk set locale in server environment (#14313)
**What**
Prevent guess work in server environment and warn user when they try to set the locale on the sdk
2025-12-16 10:25:03 +00:00
Shahed Nasser
accb778039 feat(js-sdk,types,medusa): add list locales store method to JS SDK (#14314)
* feat(js-sdk,types,medusa): add list locales store method to JS SDK

* add missing locale parameter
2025-12-16 11:11:49 +01:00
Adrien de Peretti
d813fc4ff9 chore(): Migration generator fix generated import (#14315)
* chore(): Migration generator fix generated import

* Create two-olives-try.md

* feedback
2025-12-16 11:11:02 +01:00
Adrien de Peretti
c8a7122ba9 chore(): Update locale header usage (#14318)
* chore(): Update locale header usage

* Create three-kiwis-shave.md

* chore(): Update locale header usage
2025-12-16 10:39:40 +01:00
Adrien de Peretti
e94e1a4676 feat(): Add more translatable core entity (#14311)
* feat(): Add product type and collection translation support

* Create sharp-poets-give.md

* feat(): Add product type and collection translation support

* feat(): Add product type and collection translation support

* options

* options

* shipping options/type

* return reason

* fix

* leave out shipping and return reason

* leave out shipping and return reason

* leave out shipping and return reason
2025-12-15 17:13:32 +01:00
Adrien de Peretti
ba6ed8d9dd feat(): Translation statistics (#14299)
* chore(): Translation statistics

* chore(): improve statistics performances

* add end point to get statistics

* add tests

* Create spicy-games-unite.md

* feat(): add material and fix tests

* feat(): add translatable api

* feat(): add translatable api

* fix tests

* fix tests

* fix tests

* feedback
2025-12-15 14:11:49 +01:00
Adrien de Peretti
0f1566c644 feat(): Add support for store locales end point (#14307)
**What**
Add support for `store/locales` which return the configured supported locales
2025-12-15 13:10:43 +00:00
Adrien de Peretti
665b80adb1 feat(): Add support for locale to the js sdk (#14306)
* feat(): Add support for locale to the js sdk

* Create great-icons-thank.md
2025-12-15 13:36:39 +01:00
Adrien de Peretti
7b4dda5a17 chore(): apply locale middleware to all store routes (#14305)
* chore(): apply locale middleware to all store routes

* Create pink-papayas-brush.md
2025-12-15 13:36:01 +01:00
Nicolas Gorga
8964a03fa1 chore(): Remove default_locale from StoreLocale (#14300)
## Summary

**What** — What changes are introduced in this PR?

Remove `default_locale` from Store <> Locale relation

**Why** — Why are these changes relevant or necessary?  

*Please provide answer here*

**How** — How have these changes been implemented?

*Please provide answer here*

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

*Please provide answer here*

---

## 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.

```ts
// 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.


Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
2025-12-15 09:05:46 +00:00
Nicolas Gorga
dd3eb10b1a fix(link-modules): export store locale link definition (#14293)
## Summary

**What** — What changes are introduced in this PR?

Export missing store locale link definition.

**Why** — Why are these changes relevant or necessary?  

*Please provide answer here*

**How** — How have these changes been implemented?

*Please provide answer here*

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

*Please provide answer here*

---

## 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.

```ts
// 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.
2025-12-14 11:15:44 +00:00
Carlos R. L. Rodrigues
e199f1eb01 fix(index): detect enum field (#14298)
## Summary

**What** — What changes are introduced in this PR?

Fixes Enum fields detection on Index module
2025-12-13 20:35:07 +00:00
Frane Polić
a43eb11d65 chore: sync Figma resources (#14297)
* chore: sync icons

* chore: changesets

* fix: linear component
2025-12-12 17:27:02 +01:00
Carlos R. L. Rodrigues
b3cb904e9b chore(utils): currency epsilon (#14225)
* chore(utils): currency epsilon

* pending diff

* getEpsilonFromDecimalPrecision
2025-12-12 10:46:07 +01:00
Shahed Nasser
8bb2ac654c fix(types): add locale to the query parameters of product query types (#14282) 2025-12-12 11:11:44 +02:00
Shahed Nasser
31a057558c fix(types,translations): fix types for translation and locale updates (#14278)
* fix(types,translations): fix types for translation and locale updates

* remove array type
2025-12-12 10:11:01 +01:00
Adrien de Peretti
f13c23a4b7 feat(): Sync order translations (#14267)
* feat(): Sync order translations

* feat(): Sync order translations

* tests

* Create tender-melons-develop.md

* fix tests

* cleanup

* cleanup
2025-12-11 15:40:11 +01:00
Nicolas Gorga
70929ecac3 fix(dashboard,medusa,types): improve performance for price list prices retrieval (#14138)
## Summary

**What** — What changes are introduced in this PR?

Price lists prices didn't have a dedicated method to query them and instead, relied on being returned as part of price lists. This, however, introduces optimization issues that for price lists with many prices, could cause crashes. The reason being that relations are not paginated and thus, all prices linked to the price list would be returned.

This PR aims to solve this by introducing a dedicated endpoint and avoiding returning the `prices` as part of price lists by default. The idea being that it is up to the user to explicitly express this, which, for small price lists no issues will arise, but for bigger ones, they will easily recognize the performance impact.

**Why** — Why are these changes relevant or necessary?  

Users with large enough price lists would have serious performance issues or even crashes when querying the `/admin/price-lists` endpoints. This is also true when navigating to the price list section of the Admin UI since it queries this same endpoints.

**How** — How have these changes been implemented?

- Removed the `prices` relation to be part of the default fields returned by the `/admin/price-lists/` endpoints. User may still request it by passing it in `fields` query param.
- Added new `/admin/price-lists/[id]/prices` GET endpoint to be able to retrieve a price list prices with pagination.

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

Integration tests.

---

## 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.

```ts
// Example usage
```

---

## Checklist

Please ensure the following before requesting a review:

- [x] 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
- [x] The changes are covered by relevant **tests**
- [x] I have verified the code works as intended locally
- [x] I have linked the related issue(s) if applicable

---

## Additional Context

The current state of the PR fixes the issue on the price list list and detail component. It still doesn't solve the issue for the following screens: Edit Prices & Add Prices

All the prices are still retrieved from the `/admin/price-lists/` endpoint for these. I want first some feedback before changing it to the new endpoint, since the current DataGrid implementation doesn't support pagination and it seems we are passing a default limit for the products to show there, an arbitrarily large number 9999 and there is also a TODO comment of changing that.

This previous point, though, could be implemented in a later PR, so we can already fix the issue in the price list list and detail pages, so at least for large price lists these screens don't explode and smaller price lists can still have its product prices edited, while only large ones will explode when trying to perform this action. @adrien2p @fPolic thoughts?

closes ENTSUP-265, CORE-1239
2025-12-11 13:13:08 +00:00