Commit Graph

9032 Commits

Author SHA1 Message Date
Nicolas Gorga
907fbc89a2 feat(medusa): include user_metadata in auth routes jwt (#13597)
**What**

Return provider specific user_metadata in jwt token returned by auth/[actor_type]/[auth_provider] routes.

**Why**

When implementing thrid party auth flows, to create the Medusa entity representing the actor type, you will need information obtained from the callback after the user consents. For google for example, you need the email, which so far is stored in the provider user_metadata property but is never returned in the http response.

This causes one to circumvent around this issue by creating an additional http route which gets the auth_identity from the auth_context object, to access the providers array and then look for the specific element matching the current auth_provider route.

**How**

Pass the auth_provider obtained from the route path param and pass it down to `generateJwtTokenForAuthIdentity` and inside it, find the provider matching the auth provider passed from route handler inside the auth identity `provider_identities` property. If found, assign its `user_metadata` value to the property of the same name in the payload of the token to be generated.

Now the user has the user_metadata property included in the obtained token and can use it's information to create the corresponding Medusa entity for the actor type in context. In the case of google and customer actor type, they would use `user_metadata.email` to call the create customer api endpoint.

**Testing**

Haven't found anywhere in the codebase where the http layer of /auth functionality is tested, but tested locally with debugger and test storefront to guarantee the user_metadata is returned as expected, all working correctly.

Fixes #13584 
CLOSES CORE-437 


---

> [!NOTE]
> Propagates auth provider to JWT generation and embeds provider-specific user_metadata in tokens returned by auth routes.
> 
> - **Auth JWT Payload**:
>   - `generateJwtTokenForAuthIdentity` now accepts optional `authProvider` and injects matching provider `user_metadata` into JWT payload.
> - **Auth Routes** (`auth/[actor_type]/[auth_provider]/*`):
>   - Pass `authProvider` from route params to JWT generator in `authenticate`, `register`, and `callback` handlers.
> - **Release**:
>   - Changeset adds patch for `@medusajs/medusa`.
> 
> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 4833faf84533ce7438bc37c15bd572f991988e69. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>
2025-10-02 18:21:50 +00:00
Shahed Nasser
4717ad9a59 docs: document preview limits in Cloud + general updates (#13661) 2025-10-02 19:17:50 +03:00
Adrien de Peretti
8734866eb1 fix(): Transform map (#13655)
**What**
It seems that for some reason the weak map fail in some scenario, but after investigation, the usage of map would not have a bad impact as it will be released after the Distributed transaction if finished. Therefore, falling back to Map instead

FIXES https://github.com/medusajs/medusa/issues/13654

NOTE: Waiting for the user feedback as he is also using node 18. We also use the exact same pattern in all our core flows without issues 🤔
2025-10-02 15:54:11 +00:00
Leonardo Benini
ea3d0100a9 feat(admin-bundler): forward env vars to plugin admin extensions (#13634)
* forward plugin envs

* mock process.env

* remove normalizedName

* strip prefix
2025-10-02 16:19:13 +02:00
Adrien de Peretti
76aa4a48b3 fix(): workflows concurrency (#13645) 2025-10-02 11:11:38 -03:00
Nicolas Gorga
ca334b7cc1 fix(inventory): delete reservation item inventory level required quantity (#13633)
Fixes #13625


---

> [!NOTE]
> Ensure `reserved_quantity` is adjusted when deleting reservation items via `deleteReservationItems`, with new integration tests covering deletion and inventory updates.
> 
> - **Inventory Module Service (`packages/modules/inventory/src/services/inventory-module.ts`)**:
>   - Add `deleteReservationItems` API (and transactional `_` variant) that hard-deletes reservations, then updates related inventory levels via `adjustInventoryLevelsForReservationsDeletion`.
>   - Wire through event emission/manager decorators consistent with existing patterns.
> - **Integration Tests (`packages/modules/inventory/integration-tests/__tests__/inventory-module-service.spec.ts`)**:
>   - Add tests for `deleteReservationItems` to verify deletion by id and `reserved_quantity` adjustments on inventory levels.
>   - Minor import update to include `ReservationItemDTO`.
> - **Changeset**:
>   - Patch release note for `@medusajs/inventory` documenting the fix.
> 
> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit ac6641a9ec9543115504407f708f81bd427c3444. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>
2025-10-02 12:59:13 +00:00
Leonardo Benini
9c957e1da0 chore(core-flows): only allow published products in addToCartWorkflow (#13182)
Closes #13163 

I have a few questions about expected behaviour, since this currently breaks some tests:

- Many tests use the productModule to create products, with default status == "draft", and use the addToCart workflow which now throws. Should I change all breaking tests to specify status == "published" whne creating the product? The alternative would be to check the status in the store API route before the workflow but 1. it would be an extra query and 2. the addToCart workflow is only used in the store currently, and even if it was to be used admin-side, it still doesn't make sense to add a draft product to cart

- After this PR an unpublished product would give the same error as a variant that doesn't exist. While imho this is correct, the thrown error (for both) is "Items  do not have a price" which doesn't make much sense(i believe the workflows goes through with an empty variants list and then errors at the price check point). Should I throw a different error when a variant doesn't exists/isn't published?


---

> [!NOTE]
> Enforces that only variants from published products can be added to carts, adds status fetching, refines errors, and updates tests to use ProductStatus.PUBLISHED.
> 
> - **Core Flows**:
>   - addToCart: Validate variants exist and belong to `product.status = PUBLISHED`; throw clear `INVALID_DATA` when not found/unpublished.
>   - Data fetching: Include `product.status` in `cart` and `order` variant field selections.
> - **Tests/Fixtures**:
>   - Update integration tests to set `status: ProductStatus.PUBLISHED` when creating products and import `ProductStatus` where needed.
>   - Add cases for unpublished products and non-existent variants producing the new error message.
> 
> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit ca72532e957964d2d8e6bcecbb0905054c677ded. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>
2025-10-02 12:31:53 +00:00
William Bouchard
bb08edd41f fix(medusa,file-local,file-s3,core-flows): fix csv parsing special characters (#13649)
* fix(): fix csv parsing special characters

* remove other tries

* tweak

* remove comments

* Create rude-mirrors-hang.md
2025-10-02 08:24:18 -04:00
Leonardo Benini
5c77b10fa6 fix(medusa): plugin:db:generate skip modules with no data models (#13652)
Currently the plugin:db:generate command panics if one of the modules doesn't define any data models. This makes it impossible to generate migrations if you have a mix of modules with and without data models.   
I added a simple check to skip these modules when creating the migrations.

Steps to repro:
```
npx create-medusa-app --plugin
cd my-medusa-plugin
# create a module with an empty service and no data models
npx medusa db:plugin:generate
```

Full error:
```
info:    Generating migrations...
info:    Generating migrations for module postmarkModuleService...
info:    ----------------------------------------------------------------------------
error:   defineMikroOrmCliConfig failed with: entities is required
Error: defineMikroOrmCliConfig failed with: entities is required
    at defineMikroOrmCliConfig (/Users/leonardo/dev/medusa-plugin-postmark/node_modules/@medusajs/utils/src/modules-sdk/mikro-orm-cli-config-builder.ts:41:11)
    at generateMigrations (/Users/leonardo/dev/medusa-plugin-postmark/node_modules/@medusajs/medusa/src/commands/plugin/db/generate.ts:124:26)
    at main (/Users/leonardo/dev/medusa-plugin-postmark/node_modules/@medusajs/medusa/src/commands/plugin/db/generate.ts:49:11)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
```

I didnt bother with writing an issue since I had the fix ready and it's very small, but lmk if I should in the future
2025-10-02 12:05:40 +00:00
Adrien de Peretti
8fb7e04be7 fix(): Fulfillment custom schema error on provider (#13656) 2025-10-02 14:01:54 +02:00
Riqwan Thamir
71014bafa6 fix(medusa): fixes db setup command to not load connection before creating db (#13653) 2025-10-02 13:49:22 +02:00
Shahed Nasser
762cd445e0 docs: setup PostHog (#13659) 2025-10-02 14:45:10 +03:00
Shahed Nasser
be651dd708 docs: fix typo in product feed guide (#13658) 2025-10-02 14:17:50 +03:00
martinerko
9361f9c25a fix(index): preserve existing fields configuration (#13639) (#13640)
Co-authored-by: William Bouchard <46496014+willbouch@users.noreply.github.com>
Co-authored-by: Adrien de Peretti <adrien.deperetti@gmail.com>
2025-10-02 11:53:56 +02:00
Adrien de Peretti
02b6d01382 chore(): Add instrumentation to deps (#13646)
* chore(): Add instrumentation to deps

* deps

* Create two-bikes-compare.md
2025-10-02 11:29:26 +02:00
Nicklas Gellner
0aad694e64 docs: update costs description (#13647) 2025-10-01 17:43:59 +03:00
Shahed Nasser
d1bbd8a7c1 docs: fix typo (#13643) 2025-10-01 17:41:18 +03:00
Shahed Nasser
01ac822e6b docs: update Cloud sign up link (#13648) 2025-10-01 17:29:17 +03:00
Shahed Nasser
30215e7292 docs: fix details about maximum quantity for promotions (#13642) 2025-10-01 13:37:28 +03:00
Shahed Nasser
05af008911 docs: add details about updating index module's data source (#13637)
* docs: add details about updating index module's data source

* small change
2025-10-01 10:26:11 +03:00
William Bouchard
d30806533c fix(dashboard): create refund form broken when no payment id defined (#13631)
* fix(dashboard): create refund form broken when no payment id defined

* Create funny-donuts-destroy.md
2025-09-30 13:17:43 -04:00
Adrien de Peretti
b9d6f73320 Feat(): distributed caching (#13435)
RESOLVES CORE-1153

**What**
- This pr mainly lay the foundation the caching layer. It comes with a modules (built in memory cache) and a redis provider.
- Apply caching to few touch point to test

Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com>
2025-09-30 16:19:06 +00:00
Adrien de Peretti
5b135a41fe fix(): workflow engine migration issue (#13629)
**What**
The extension creation have been pushed by mistake
2025-09-30 15:41:09 +00:00
Shahed Nasser
0c7cbfb2e7 feat(payment-stripe): Allow passing shared payment token in Stripe (#13632)
* feat(@medusajs/payment-stripe): Allow passing shared payment token in Stripe

* fix changeset
2025-09-30 18:40:36 +03:00
Shahed Nasser
a1dd2de0de docs: general changes to Cloud docs (#13616)
* docs: document self serve

* docs: Cloud docs changes

* vale fixes

* vale error fix

* fixes

* added new sections

* generate
2025-09-30 18:37:04 +03:00
Adrien de Peretti
70d855bd1b fix(): Module test runner lifecycle does not shutdown properly (#13628)
* fix(): Module test runner lifecycle does not shutdown properly

* Create late-feet-think.md
2025-09-30 17:06:05 +02:00
Adrien de Peretti
9c7c1d48c7 fix(): Pricing preference context loss (#13626)
**What**
The context reference is being mutated by the repository leading to an empty context. Also, the filter is built from the pricing context instead of pricing context -> context leading to always fetch all preferences all the time
2025-09-30 12:38:04 +00:00
William Bouchard
087887fefb feat(core-flows): support ad hoc returns (#13598)
* feat(core-flows): support ad hoc returns

* fix: missing transform

* handle edge case

* refactor

* replace gte for gt

* cleanup

* weird bug fix

* add test

* Create quick-nails-kick.md

* stop sending empty strings

* add code to refund reason

* fix build

* fix tests

* handle code in dashboard

* fix tests

* more tests failing

* add reference and reference id to credit lieng

* rework create refund form
2025-09-30 07:38:50 -04:00
Shahed Nasser
bd9ecd5e66 docs: updates to custom columns and build guides (#13624) 2025-09-30 10:01:58 +03:00
William Bouchard
9d3c71fefd fix(medusa): cart now returns 404 when not found (#13622)
FIXES #10218 
FIXES CORE-739
2025-09-30 06:49:17 +00:00
Shahed Nasser
f970e1355a docs: general updates and fixes (#13620) 2025-09-30 08:45:30 +03:00
Shahed Nasser
dda756dfaa docs: fix search not highlighting subheaders (#13619) 2025-09-29 15:24:39 +03:00
Shahed Nasser
4bbec480a9 docs: fix mobile menu not closing when clicking a link (#13618) 2025-09-29 15:23:50 +03:00
Shahed Nasser
97cc8fdc15 docs: fix pricing page on small devices (#13617) 2025-09-29 15:22:22 +03:00
Shahed Nasser
da411e351a add missing generated files (#13609) 2025-09-29 09:46:18 +03:00
William Bouchard
5346079d47 chore(): create default refund reasons (#13591)
* chore(): create default refund reasons

* Create great-donuts-swim.md

* woops

* woopsie

* woopsie

* tests

* tests

* woopsie

* fml

* fix: comment
2025-09-28 10:07:48 +02:00
Carlos R. L. Rodrigues
9d8ed70130 feat(cli): servers and workers in cluster mode (#13601)
* feat(cli): servers and workers in cluster mode

* allow percentage
2025-09-28 10:06:18 +02:00
Shahed Nasser
cbfe0a4e95 docs: improve docs contribution guidelines (#13605)
* docs: improve docs contribution guidelines

* fix build error

* fix build errors

* fix build

* fix build
2025-09-26 16:18:35 +03:00
Nicklas Gellner
ea94c8b7b3 Update README.md 2025-09-26 14:43:49 +02:00
Adrien de Peretti
fc67fd0b36 chore(utils): make upsert with replace more efficient (#13580)
PARTIALLY RESOLVES CORE-1156

**What**
Improve upsertWithReplace to batch as much as possible what can be batched. Performance of this method will be much greater specially for cases with maybe entities and batch (e.g we seen many cases where they bulk product with hundreds variants and options etc)
for example let take the following object:
- entity 1
  - entity 2 []
    - entity 3 []
  - entity 2 []
    - entity 3 []

here all entity 3 will be batched and all entity 2 will be batched

I ve also added a pretty detail test that check all the stage and what is batched or not with many comments so that it is less harder to consume and remember in the future


Also includes:
- mikro orm upgade (issues found and fixes)
- order module hooks fixes

**NOTE**
It was easier for now to do this instead of rewriting the different areas where it is being used, also, maybe it means that we will have closer performance to what we would expect to have natively

**NOTE 2**
Also fix the fact that integration tests of the core packages never ran 😂
2025-09-26 08:06:43 +00:00
Adrien de Peretti
5ea32aaa44 fix(): Cart workflow price calculation for different items but same variant (#13511)
RESOLVES CORE-1204

**What**
- Fix wrong price tier when multiple items are targetting the same variant
- fix type import from the wrong package

**Notes**
If you are struggling navigating the changes, you can focus on the following files:
```
integration-tests/http/__tests__/cart/store/cart.spec.ts
integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts
packages/core/core-flows/src/cart/steps/get-promotion-codes-to-apply.ts
packages/core/core-flows/src/cart/steps/get-variant-price-sets.ts
packages/core/core-flows/src/cart/workflows/add-to-cart.ts
packages/core/core-flows/src/cart/workflows/create-carts.ts
packages/core/core-flows/src/cart/workflows/get-variants-and-items-with-prices.ts
packages/core/core-flows/src/cart/workflows/refresh-cart-items.ts
packages/core/core-flows/src/order/workflows/add-line-items.ts
packages/core/core-flows/src/order/workflows/create-order.ts
```
2025-09-26 07:19:46 +00:00
Carlos R. L. Rodrigues
3960c80e9f fix(medusa): start cluster (#13599) 2025-09-25 16:07:22 -03:00
Frane Polić
c3ae529b40 fix(dashboard): payment providers select (#13592)
**What**
- use lazy loading for payment providers select on region create/edit
2025-09-25 17:54:07 +00:00
Bastien
9538df2eaf fix(dashboard): copy phone on order customer info (#13596)
In the order details page, clicking the copy button for customer phone number was incorrectly copying the email address instead of the phone number.

Co-authored-by: William Bouchard <46496014+willbouch@users.noreply.github.com>
2025-09-25 17:03:59 +00:00
Carlos R. L. Rodrigues
1b57e5c58a fix(core-flows): skip locking by default on subworkflows (#13594) 2025-09-25 09:39:14 -03:00
Aldo Román
45f180a2b5 fix: Correctly type Float properties (#13585)
* Update get-attribute.ts

* update test

* add changeset

* Update .changeset/cold-experts-breathe.md

---------

Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
2025-09-25 07:37:37 -04:00
Frane Polić
7af9e3224c fix(dashboard): improve inventory level location management (#13589)
**What**
- add InfiniteList on location selection for inventory level -> fixes issue with location pagination
- fix removal of location level for an inventory item
- refresh the levels table when locations are updated
- add search input for filtering locations

---

CLOSES CORE-1208
2025-09-24 18:00:45 +00:00
William Bouchard
edf29b3bd2 feat(dashboard): select refund reason in refund form (#13587)
CLOSES CORE-1211

This PR quickly allows the user to select a refund a reason when creating a refund

<img width="1106" height="1618" alt="CleanShot 2025-09-23 at 14 36 39@2x" src="https://github.com/user-attachments/assets/7cb9a53e-82ca-44d3-8267-874153f8d9ac" />


<img width="1870" height="1082" alt="CleanShot 2025-09-23 at 14 36 26@2x" src="https://github.com/user-attachments/assets/ea8d39b2-07e6-4295-ae52-da16b5d0d265" />
2025-09-24 12:06:42 +00:00
Frane Polić
294c37564c fix(dashboard): edit promotion campaign w/wo currrency (#13404)
**What**
- a promotion couldn't be added to a campaign without a currency budget (on promotion details screen)
- fix fetching campaigns pagination issue
- move select to Combobox
- fix currency restriction and move warning description to the label hint
2025-09-24 10:24:11 +00:00
Shahed Nasser
c4c2231a31 docs: create returns from storefront tutorial (#13522)
* docs: create returns from storefront tutorial

* small change

* generate llms

* add location ID
2025-09-24 12:06:26 +03:00