@lambdacurry/medusa-webhooks v1.1.4
@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
# or
yarn add @lambdacurry/medusa-webhooks- Add the plugin to your
medusa-config.js:
const plugins = [
// ... other plugins
{
resolve: "@lambdacurry/medusa-webhooks",
options: {
// Add here the subcribers you will define
subscriptions: ["product.created", "product.updated"],
},
},
];- Run migrations:
yarn medusa db:migrateUsage
Creating a Webhook Subscriber
The plugin provides three different workflows for handling webhooks:
getWebhooksSubscriptionsWorkflow: Retrieves active webhook subscriptions for a specific eventsendWebhooksEventsWorkflow: Sends webhook events to the subscribed endpointsfullWebhooksSubscriptionsWorkflow: 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:
- Clone the repository
- Install dependencies:
yarn install - Run the plugin:
yarn dev
Please read more about how to run the plugin in dev mode: https://docs.medusajs.com/learn/fundamentals/plugins/create
License
MIT License
9 months ago
9 months ago
9 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago