Medusa plugins
W
Webhooks
A Medusa plugin that enables webhook management and integration, allowing you to configure and manage outgoing webhooks for your e-commerce events.
npm install @lambdacurry/medusa-webhooks
Category
other
Built by
lambdacurry
Type
unknown
Last updated
5 months ago
Monthly downloads
356
@lambdacurry/medusa-webhooks
Add webhook functionality to your Medusa e-commerce server, allowing you to send real-time notifications to external services when specific events occur in your system. The plugin seamlessly integrates with Medusa's event system and provides a simple way to manage webhooks for various events.
Features
- Event-Based Webhooks: Automatically trigger webhooks based on Medusa events like product creation, updates, and more
- Flexible Configuration: Easy setup and configuration through Medusa's plugin system
- Built-in Event Support: Pre-configured support for common Medusa events
- Workflow Integration: Seamlessly integrates with Medusa's workflow system for reliable webhook processing
Installation
- Install the plugin using your preferred package manager:
npm install @lambdacurry/medusa-webhooks# oryarn add @lambdacurry/medusa-webhooks
- Add the plugin to your :
const plugins = [// ... other plugins{resolve: "@lambdacurry/medusa-webhooks",options: {// Add here the subcribers you will definesubscriptions: ["product.created", "product.updated"],},},];
- Run migrations:
yarn medusa db:migrate
Usage
Creating a Webhook Subscriber
The plugin provides three different workflows for handling webhooks:
- : Retrieves active webhook subscriptions for a specific event
- : Sends webhook events to the subscribed endpoints
- : Combines both workflows to handle the complete webhook process
Here's an example of how to use these workflows in your subscriber:
import {SubscriberArgs,SubscriberConfig,} from "@medusajs/framework/subscribers";import {getWebhooksSubscriptionsWorkflow,sendWebhooksEventsWorkflow,fullWebhooksSubscriptionsWorkflow,} from "@lambdacurry/medusa-webhooks/workflows";export const config: SubscriberConfig = {event: ["product.created", "product.updated"],context: {subscriberId: "product-added",},};export default async function handleProductAdded({event: { name },container,}: SubscriberArgs<{ id: string }>): Promise<void> {const query = container.resolve("query");const logger = container.resolve("logger");// Fetch product dataconst { data: productResult } = await query.graph({entity: "product",fields: ["*"],});const product = productResult[0];if (!product) {logger.error("Product not found");return;}// Option 1: Use the full workflow (recommended for most cases)const fullResult = await fullWebhooksSubscriptionsWorkflow(container).run({input: {eventName: name,eventData: product,},});// Option 2: Use separate workflows for more controlconst { results: webhooks } = await getWebhooksSubscriptionsWorkflow(container).run({input: {eventName: name,eventData: product,},});const sendResult = await sendWebhooksEventsWorkflow(container).run({input: {webhooks,eventData: product,},});console.log(fullResult);// orconsole.log(sendResult);}
Development
To contribute to this plugin:
- Clone the repository
- Install dependencies:
- Run the plugin:
Please read more about how to run the plugin in dev mode: https://docs.medusajs.com/learn/fundamentals/plugins/create
License
MIT License