UNPKG

@alphabite/medusa-wishlist

Version:
170 lines (121 loc) β€’ 6.22 kB
# πŸ§žβ€β™‚οΈ 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 --- ## πŸ“š 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 πŸ›οΈ