diff --git a/src/app/api/webhooks/saleor/route.ts b/src/app/api/webhooks/saleor/route.ts index 5893a1c..db9fdf9 100644 --- a/src/app/api/webhooks/saleor/route.ts +++ b/src/app/api/webhooks/saleor/route.ts @@ -5,10 +5,18 @@ import { OrderConfirmation } from "@/emails/OrderConfirmation"; import { OrderShipped } from "@/emails/OrderShipped"; import { OrderCancelled } from "@/emails/OrderCancelled"; import { OrderPaid } from "@/emails/OrderPaid"; +import { OpenPanel } from "@openpanel/nextjs"; const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL || "https://dev.manoonoils.com"; const DASHBOARD_URL = process.env.DASHBOARD_URL || "https://dashboard.manoonoils.com"; +// Initialize OpenPanel for server-side tracking +const op = new OpenPanel({ + clientId: process.env.NEXT_PUBLIC_OPENPANEL_CLIENT_ID || "", + clientSecret: process.env.OPENPANEL_CLIENT_SECRET || "", + apiUrl: process.env.OPENPANEL_API_URL || "https://op.nodecrew.me/api", +}); + interface SaleorWebhookHeaders { "saleor-event": string; "saleor-domain": string; @@ -295,6 +303,24 @@ async function handleOrderConfirmed(order: SaleorOrder, eventType: string) { eventType: "ORDER_CONFIRMED", orderId: order.id, }); + + // Track order in OpenPanel + op.track("order_received", { + order_id: order.id, + order_number: order.number, + total: order.total.gross.amount, + currency: order.total.gross.currency, + item_count: order.lines.reduce((sum, line) => sum + line.quantity, 0), + customer_email: customerEmail, + event_type: eventType, + }); + + // Track revenue using OpenPanel's revenue method + op.revenue(order.total.gross.amount, { + currency: order.total.gross.currency, + order_id: order.id, + order_number: order.number, + }); } async function handleOrderFulfilled(order: SaleorOrder) {