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.

Need customizations for this plugin?

Get in touch
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

  1. Install the plugin using your preferred package manager:
npm install @lambdacurry/medusa-webhooks
# or
yarn add @lambdacurry/medusa-webhooks
  1. Add the plugin to your :
const plugins = [
// ... other plugins
{
resolve: "@lambdacurry/medusa-webhooks",
options: {
// Add here the subcribers you will define
subscriptions: ["product.created", "product.updated"],
},
},
];
  1. Run migrations:
yarn medusa db:migrate

Usage

Creating a Webhook Subscriber

The plugin provides three different workflows for handling webhooks:

  1. : Retrieves active webhook subscriptions for a specific event
  2. : Sends webhook events to the subscribed endpoints
  3. : 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 data
const { 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 control
const { results: webhooks } = await getWebhooksSubscriptionsWorkflow(
container
).run({
input: {
eventName: name,
eventData: product,
},
});
const sendResult = await sendWebhooksEventsWorkflow(container).run({
input: {
webhooks,
eventData: product,
},
});
console.log(fullResult);
// or
console.log(sendResult);
}

Development

To contribute to this plugin:

  1. Clone the repository
  2. Install dependencies:
  3. 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