@alphabite/medusa-wishlist
Version:
Alphabite's Medusa Wishlist Plugin
202 lines (142 loc) β’ 8.69 kB
Markdown
# π§ββοΈ Wishlist Plugin for Medusa
The **Alphabite Wishlist Plugin** is the most feature-complete wishlist system for [MedusaJS](https://medusajs.com). It supports both authenticated and guest users, multiple wishlists per user, and a full-featured SDK client for frontend integration.
This plugin ships with:
- π A fully typed JS SDK plugin
- π A Postman collection
- β
Support for guest & authenticated customers
## β οΈ Version Compatibility
Please install the plugin version that matches your Medusa version:
| Medusa Version | Plugin Version | Install Command |
| ------------------ | -------------- | ---------------------------------------------- |
| `2.14.*` and above | `latest` | `npm install @alphabite/medusa-wishlist` |
| `2.13.*` | `0.5.8` | `npm install @alphabite/medusa-wishlist@0.5.8` |
| Below `2.13.0` | `0.5.7` | `npm install @alphabite/medusa-wishlist@0.5.7` |
### Installing the latest version (Medusa 2.14.\* and above)
```bash
npm install @alphabite/medusa-wishlist
```
### Installing version 0.5.8 (Medusa 2.13.\*)
```bash
npm install @alphabite/medusa-wishlist@0.5.8
```
### Installing version 0.5.7 (Medusa versions below 2.13.0)
```bash
npm install @alphabite/medusa-wishlist@0.5.7
```
> βΉοΈ Using a mismatched version may result in compatibility issues. Make sure to check your Medusa version (`npm list @medusajs/medusa`) before installing.
## π Table of Contents
- [β¨ Features](#-features)
- [π¦ Installation](#-installation)
- [π§ Plugin Options](#-plugin-options)
- [π¦ API Endpoints](#-api-endpoints)
- [π§βπ» SDK Usage](#-sdk-usage)
- [π§ͺ Guest Wishlist Flow](#-guest-wishlist-flow)
- [π§© Requirements](#-requirements)
- [π Postman Collection](#-postman-collection)
- [π€ Contributing](#-contributing)
## β¨ Features
- β
Multiple wishlists per customer
- β
Add/remove items to/from any wishlist
- β
Guest wishlist supported + transfer when registered
- β
Fully typed Medusa JS SDK integration with our SDK client
- β
Pagination and filtering built-in
## π¦ Installation
Install the plugin via npm:
```bash
npm install @alphabite/medusa-wishlist
```
In your `medusa-config.js`, register the plugin:
```js
const plugins = [
{
resolve: "@alphabite/medusa-wishlist",
options: {
// all are optional, read bellow about default values
wishlistFields: [],
wishlistItemsFields: [],
includeWishlistItems: true,
includeWishlistItemsTake: 5,
allowGuestWishlist: true,
},
},
];
```
## π§ Plugin Options
| Option | Type | Default | Description |
| -------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `wishlistFields` | `string[]` | `["items.*", "items.product_variant.*", "items.product_variant.prices.*", "items.product_variant.product.thumbnail", "items.product_variant.product.id"]` | Selectively include Medusa product or product variant fields on wishlist list/retrieve endpoints that have wishlist items included |
| `wishlistItemsFields` | `string[]` | `["id", "product_id", "wishlist_id", "created_at", "wishlist.customer_id", "updated_at", "deleted_at", "product_variant.*", "product_variant.prices.*", "product_variant.calculated_price", "product_variant.product.thumbnail",]` | Selectively include Medusa product or product variant fields on wishlist items list/retrieve endpoints |
| `includeWishlistItems` | `boolean` | `false` | Automatically populate wishlist items in `GET /store/wishlists` |
| `includeWishlistItemsTake` | `number` | `5` | Limit number of items if `includeWishlistItems` is true |
| `allowGuestWishlist` | `boolean` | `false` | Enables wishlist creation & usage without authentication (cookie-based) |
## π¦ API Endpoints
All endpoints are available under `/store/wishlists`.
| Method | Endpoint | Auth | Description |
| ------ | ------------------------------------- | ------------- | ----------------------------------------- |
| GET | `/store/wishlists` | β
| List wishlists for the current customer |
| POST | `/store/wishlists` | β (optional) | Create a new wishlist |
| GET | `/store/wishlists/:id` | β (optional) | Retrieve a wishlist by ID |
| PUT | `/store/wishlists/:id` | β
| Update wishlist metadata |
| DELETE | `/store/wishlists/:id` | β
| Delete a wishlist |
| POST | `/store/wishlists/:id/transfer` | β
| Transfer guest wishlist to logged-in user |
| GET | `/store/wishlists/:id/items` | β (optional) | Get items in a wishlist |
| POST | `/store/wishlists/:id/add-item` | β (optional) | Add an item to the wishlist |
| DELETE | `/store/wishlists/:id/items/:item_id` | β (optional) | Remove an item from the wishlist |
## π§βπ» SDK Usage
βββ[Read more about our Medusa compatible SDK here](https://github.com/alphabite-dev/medusa-client/tree/main)
```ts
import { AlphabiteMedusaClient, wishlistPlugin } from '@alphabite/sdk'
const sdk = new AlphabiteMedusaClient({
{
baseUrl,
debug: process.env.NODE_ENV === "development",
publishableKey: process.env.NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY,
},
[wishlistPlugin],
{
getAuthHeader: () => { return { authorization: `Bearer ${customerJwt}` } },
}
})
// Create wishlist
await sdk.alphabite.wishlist.create({ name: 'My Sneakers' })
// Add item
await sdk.alphabite.wishlist.addItem({
id: 'wishlist_id',
product_variant_id: 'variant_id',
})
// List items
const { data } = await sdk.alphabite.wishlist.listItems({ id: 'wishlist_id' })
```
## π§ͺ Guest Wishlist Flow
Guest wishlists work like guest carts:
1. Create a wishlist (no auth required)
2. Save the `id` in a cookie
3. Use that ID for listing/adding/removing items
4. When the user signs up or logs in, call the `transfer` endpoint to associate it:
```ts
await medusa.alphabite.wishlist.transfer({ id: wishlistId });
```
After that, the cookie is no longer needed.
## π§© Requirements
- Medusa v2.5.0+
- Works with both `@medusajs/types` and `@medusajs/framework`
## π Postman Collection
Youβll find the ready-to-import Postman collection at:
```
docs/postman/WishlistPlugin.postman_collection.json
```
Use it to explore and test all endpoints interactively.
## π€ Contributing
We welcome issues, feedback, and PRs. Fork it, build it, improve it.
Letβs make commerce more personalized ποΈ