Hi ${customer.company_name},
We have received your payment of $${amount.toFixed(2)} toward order ${order.invoice_number ?? orderId.slice(0, 8)}.
`, - p_body_text: `Deposit of $${amount.toFixed(2)} received for order ${order.invoice_number ?? orderId.slice(0, 8)}. Thank you!`, - }), - } - ); - - if (adminEmail) { - await fetch( - `${supabaseUrl}/rest/v1/rpc/enqueue_wholesale_notification`, - { - method: "POST", - headers: { ...svcHeaders(supabaseKey), "Content-Type": "application/json" }, - body: JSON.stringify({ - p_brand_id: brandId, - p_customer_id: customerId, - p_order_id: orderId, - p_type: "deposit_received", - p_email_to: adminEmail, - p_subject: `[Admin] Deposit Received — Order ${order.invoice_number ?? orderId.slice(0, 8)}`, - p_body_html: `A payment of $${amount.toFixed(2)} has been received from ${customer.company_name} for order ${order.invoice_number ?? orderId.slice(0, 8)}.
`, - p_body_text: `Deposit of $${amount.toFixed(2)} received from ${customer.company_name} for order ${order.invoice_number ?? orderId.slice(0, 8)}.`, - }), - } + + // Return 500 for other errors + return Response.json( + { error: "Webhook processing failed" }, + { status: 500 } ); } } -async function enqueueWholesaleWebhookForDepositRecorded(orderId: string, amount: number, brandId: string) { - const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL!; - const supabaseKey = process.env.SUPABASE_SERVICE_ROLE_KEY!; - await fetch(`${supabaseUrl}/rest/v1/rpc/enqueue_wholesale_webhook`, { - method: "POST", - headers: { ...svcHeaders(supabaseKey), "Content-Type": "application/json" }, - body: JSON.stringify({ - p_event_type: "deposit_recorded", - p_order_id: orderId, - p_brand_id: brandId, - p_payload: { order_id: orderId, amount, source: "stripe_checkout" }, - }), - }).catch(() => { /* webhook enqueue failed silently */ }); -} - -async function maybeFireOrderPaidWebhook(orderId: string, brandId: string) { - const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL!; - const supabaseKey = process.env.SUPABASE_SERVICE_ROLE_KEY!; - - const res = await fetch( - `${supabaseUrl}/rest/v1/wholesale_orders?id=eq.${orderId}&select=balance_due,invoice_number`, - { ...svcHeaders(supabaseKey) } - ); - if (!res.ok) return; - const orders = await res.json() as Array<{ balance_due: number; invoice_number: string | null }>; - const order = orders[0]; - if (!order) return; - - if (Number(order.balance_due) <= 0) { - await fetch(`${supabaseUrl}/rest/v1/rpc/enqueue_wholesale_webhook`, { - method: "POST", - headers: { ...svcHeaders(supabaseKey), "Content-Type": "application/json" }, - body: JSON.stringify({ - p_event_type: "order_paid", - p_order_id: orderId, - p_brand_id: brandId, - p_payload: { order_id: orderId, brand_id: brandId, invoice_number: order.invoice_number }, - }), - }).catch(() => { /* webhook enqueue failed silently */ }); - } -} - -async function getAdminEmail(brandId: string): Promise{title}
++ {typeof value === "number" ? value.toLocaleString() : value} +
+$192,230
+$53.40
+| Product | +Sales | +Revenue | +Trend | +
|---|---|---|---|
|
+
+
+
+ 🍎
+
+ {product.name}
+ |
+ {product.sales} | +${product.revenue.toFixed(2)} | ++ + {product.trend === "up" ? "↑" : product.trend === "down" ? "↓" : "→"} + + | +
| Order | +Customer | +Amount | +Status | +Date | +
|---|---|---|---|---|
| + {order.id} + | +{order.customer} | +${order.amount.toFixed(2)} | ++ + {order.status} + + | +{formatDate(order.date)} | +
1,254
+Total
++156
+New
+87%
+Retention
+Track your business performance and growth
+Stay updated with the latest features and improvements
++ Released {formatDate(new Date(changelog.released_at))} +
++ v{changelog.version} - {changelog.title} +
+ ++ You're ready to start growing your wholesale business. +
+ +{step.description}
++ We encountered an unexpected error. Please try refreshing the page. +
++ {this.state.error.message} +
+Loading...
++ Share Route Commerce with other farms and earn rewards for each successful signup. +
+{selectedCode.code}
+