@rovela-ai/sdk 0.1.18 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/api/auth.js +5 -11
- package/dist/admin/api/auth.js.map +1 -1
- package/dist/admin/api/categories.js +43 -50
- package/dist/admin/api/categories.js.map +1 -1
- package/dist/admin/api/check.js +6 -9
- package/dist/admin/api/check.js.map +1 -1
- package/dist/admin/api/customers.js +17 -21
- package/dist/admin/api/customers.js.map +1 -1
- package/dist/admin/api/index.js +10 -38
- package/dist/admin/api/index.js.map +1 -1
- package/dist/admin/api/orders.js +30 -35
- package/dist/admin/api/orders.js.map +1 -1
- package/dist/admin/api/products.js +56 -66
- package/dist/admin/api/products.js.map +1 -1
- package/dist/admin/api/refund.js +26 -29
- package/dist/admin/api/refund.js.map +1 -1
- package/dist/admin/api/settings.js +17 -21
- package/dist/admin/api/settings.js.map +1 -1
- package/dist/admin/api/setup.js +17 -20
- package/dist/admin/api/setup.js.map +1 -1
- package/dist/admin/api/stats.js +14 -17
- package/dist/admin/api/stats.js.map +1 -1
- package/dist/admin/components/AdminGuard.js +13 -17
- package/dist/admin/components/AdminGuard.js.map +1 -1
- package/dist/admin/components/AdminHeader.js +8 -11
- package/dist/admin/components/AdminHeader.js.map +1 -1
- package/dist/admin/components/AdminLayout.js +5 -8
- package/dist/admin/components/AdminLayout.js.map +1 -1
- package/dist/admin/components/AdminLoginForm.js +11 -14
- package/dist/admin/components/AdminLoginForm.js.map +1 -1
- package/dist/admin/components/AdminNav.js +11 -14
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/AdminSetupForm.js +11 -14
- package/dist/admin/components/AdminSetupForm.js.map +1 -1
- package/dist/admin/components/InventoryEditor.js +16 -19
- package/dist/admin/components/InventoryEditor.js.map +1 -1
- package/dist/admin/components/LowStockAlert.js +6 -9
- package/dist/admin/components/LowStockAlert.js.map +1 -1
- package/dist/admin/components/OrderDetails.js +15 -18
- package/dist/admin/components/OrderDetails.js.map +1 -1
- package/dist/admin/components/OrderTable.js +13 -16
- package/dist/admin/components/OrderTable.js.map +1 -1
- package/dist/admin/components/ProductForm.js +17 -20
- package/dist/admin/components/ProductForm.js.map +1 -1
- package/dist/admin/components/ProductTable.js +15 -18
- package/dist/admin/components/ProductTable.js.map +1 -1
- package/dist/admin/components/RecentOrders.js +6 -9
- package/dist/admin/components/RecentOrders.js.map +1 -1
- package/dist/admin/components/RefundDialog.js +12 -15
- package/dist/admin/components/RefundDialog.js.map +1 -1
- package/dist/admin/components/StatsCards.js +7 -10
- package/dist/admin/components/StatsCards.js.map +1 -1
- package/dist/admin/components/StoreSettings.js +10 -13
- package/dist/admin/components/StoreSettings.js.map +1 -1
- package/dist/admin/components/index.js +16 -35
- package/dist/admin/components/index.js.map +1 -1
- package/dist/admin/config.js +12 -54
- package/dist/admin/config.js.map +1 -1
- package/dist/admin/hooks/index.js +4 -11
- package/dist/admin/hooks/index.js.map +1 -1
- package/dist/admin/hooks/useAdminAuth.js +9 -12
- package/dist/admin/hooks/useAdminAuth.js.map +1 -1
- package/dist/admin/hooks/useAdminOrders.js +11 -14
- package/dist/admin/hooks/useAdminOrders.js.map +1 -1
- package/dist/admin/hooks/useAdminProducts.js +13 -16
- package/dist/admin/hooks/useAdminProducts.js.map +1 -1
- package/dist/admin/hooks/useAdminStats.js +11 -14
- package/dist/admin/hooks/useAdminStats.js.map +1 -1
- package/dist/admin/index.js +13 -66
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/server/admin-service.js +39 -83
- package/dist/admin/server/admin-service.js.map +1 -1
- package/dist/admin/server/index.js +3 -13
- package/dist/admin/server/index.js.map +1 -1
- package/dist/admin/types.js +1 -2
- package/dist/admin/types.js.map +1 -1
- package/dist/auth/api/auth.js +6 -14
- package/dist/auth/api/auth.js.map +1 -1
- package/dist/auth/api/forgot-password.js +8 -11
- package/dist/auth/api/forgot-password.js.map +1 -1
- package/dist/auth/api/index.js +6 -18
- package/dist/auth/api/index.js.map +1 -1
- package/dist/auth/api/register.js +17 -20
- package/dist/auth/api/register.js.map +1 -1
- package/dist/auth/api/resend-verification.js +9 -12
- package/dist/auth/api/resend-verification.js.map +1 -1
- package/dist/auth/api/reset-password.js +18 -22
- package/dist/auth/api/reset-password.js.map +1 -1
- package/dist/auth/api/verify-email.js +14 -18
- package/dist/auth/api/verify-email.js.map +1 -1
- package/dist/auth/components/AuthGuard.js +13 -17
- package/dist/auth/components/AuthGuard.js.map +1 -1
- package/dist/auth/components/ForgotPasswordForm.js +11 -14
- package/dist/auth/components/ForgotPasswordForm.js.map +1 -1
- package/dist/auth/components/ResetPasswordForm.js +18 -21
- package/dist/auth/components/ResetPasswordForm.js.map +1 -1
- package/dist/auth/components/SignInForm.js +13 -16
- package/dist/auth/components/SignInForm.js.map +1 -1
- package/dist/auth/components/SignUpForm.js +15 -18
- package/dist/auth/components/SignUpForm.js.map +1 -1
- package/dist/auth/components/UserMenu.js +13 -16
- package/dist/auth/components/UserMenu.js.map +1 -1
- package/dist/auth/components/VerifyEmailNotice.js +10 -13
- package/dist/auth/components/VerifyEmailNotice.js.map +1 -1
- package/dist/auth/components/index.js +7 -18
- package/dist/auth/components/index.js.map +1 -1
- package/dist/auth/config.js +9 -49
- package/dist/auth/config.js.map +1 -1
- package/dist/auth/hooks/index.js +1 -5
- package/dist/auth/hooks/index.js.map +1 -1
- package/dist/auth/hooks/useAuth.js +14 -17
- package/dist/auth/hooks/useAuth.js.map +1 -1
- package/dist/auth/index.js +15 -37
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/server/customer-service.js +39 -83
- package/dist/auth/server/customer-service.js.map +1 -1
- package/dist/auth/server/email-sender.js +11 -17
- package/dist/auth/server/email-sender.js.map +1 -1
- package/dist/auth/server/index.js +5 -36
- package/dist/auth/server/index.js.map +1 -1
- package/dist/auth/server/password-reset-service.js +30 -70
- package/dist/auth/server/password-reset-service.js.map +1 -1
- package/dist/auth/server/password.js +9 -18
- package/dist/auth/server/password.js.map +1 -1
- package/dist/auth/server/verification-service.js +35 -76
- package/dist/auth/server/verification-service.js.map +1 -1
- package/dist/auth/types.js +1 -2
- package/dist/auth/types.js.map +1 -1
- package/dist/cart/CartProvider.js +13 -17
- package/dist/cart/CartProvider.js.map +1 -1
- package/dist/cart/components/AddToCartButton.js +16 -19
- package/dist/cart/components/AddToCartButton.js.map +1 -1
- package/dist/cart/components/CartDrawer.js +17 -23
- package/dist/cart/components/CartDrawer.js.map +1 -1
- package/dist/cart/components/CartIcon.js +9 -12
- package/dist/cart/components/CartIcon.js.map +1 -1
- package/dist/cart/components/CartItem.js +7 -13
- package/dist/cart/components/CartItem.js.map +1 -1
- package/dist/cart/components/CartSummary.js +12 -15
- package/dist/cart/components/CartSummary.js.map +1 -1
- package/dist/cart/components/QuantitySelector.js +9 -12
- package/dist/cart/components/QuantitySelector.js.map +1 -1
- package/dist/cart/components/index.js +6 -15
- package/dist/cart/components/index.js.map +1 -1
- package/dist/cart/index.js +3 -17
- package/dist/cart/index.js.map +1 -1
- package/dist/cart/store.js +8 -13
- package/dist/cart/store.js.map +1 -1
- package/dist/checkout/api/checkout.js +12 -15
- package/dist/checkout/api/checkout.js.map +1 -1
- package/dist/checkout/api/index.js +2 -7
- package/dist/checkout/api/index.js.map +1 -1
- package/dist/checkout/api/webhook.js +8 -11
- package/dist/checkout/api/webhook.js.map +1 -1
- package/dist/checkout/components/CheckoutButton.js +8 -11
- package/dist/checkout/components/CheckoutButton.js.map +1 -1
- package/dist/checkout/components/CheckoutSuccess.js +11 -14
- package/dist/checkout/components/CheckoutSuccess.js.map +1 -1
- package/dist/checkout/components/OrderSummary.js +8 -11
- package/dist/checkout/components/OrderSummary.js.map +1 -1
- package/dist/checkout/components/ShippingForm.js +14 -17
- package/dist/checkout/components/ShippingForm.js.map +1 -1
- package/dist/checkout/components/index.js +4 -11
- package/dist/checkout/components/index.js.map +1 -1
- package/dist/checkout/hooks/index.js +1 -6
- package/dist/checkout/hooks/index.js.map +1 -1
- package/dist/checkout/hooks/useCheckout.js +10 -19
- package/dist/checkout/hooks/useCheckout.js.map +1 -1
- package/dist/checkout/index.js +7 -28
- package/dist/checkout/index.js.map +1 -1
- package/dist/checkout/server/create-checkout-session.js +11 -16
- package/dist/checkout/server/create-checkout-session.js.map +1 -1
- package/dist/checkout/server/handle-webhook.js +21 -24
- package/dist/checkout/server/handle-webhook.js.map +1 -1
- package/dist/checkout/server/index.js +3 -13
- package/dist/checkout/server/index.js.map +1 -1
- package/dist/checkout/server/order-service.js +11 -16
- package/dist/checkout/server/order-service.js.map +1 -1
- package/dist/checkout/stripe/client.js +13 -29
- package/dist/checkout/stripe/client.js.map +1 -1
- package/dist/checkout/stripe/index.js +1 -15
- package/dist/checkout/stripe/index.js.map +1 -1
- package/dist/checkout/types.js +1 -2
- package/dist/checkout/types.js.map +1 -1
- package/dist/core/config.js +12 -57
- package/dist/core/config.js.map +1 -1
- package/dist/core/db/client.js +16 -62
- package/dist/core/db/client.js.map +1 -1
- package/dist/core/db/index.js +14 -93
- package/dist/core/db/index.js.map +1 -1
- package/dist/core/db/queries.d.ts +6 -6
- package/dist/core/db/queries.js +207 -284
- package/dist/core/db/queries.js.map +1 -1
- package/dist/core/db/schema.js +179 -182
- package/dist/core/db/schema.js.map +1 -1
- package/dist/core/index.js +12 -42
- package/dist/core/index.js.map +1 -1
- package/dist/core/server/index.js +16 -68
- package/dist/core/server/index.js.map +1 -1
- package/dist/core/types.js +1 -2
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils.js +26 -51
- package/dist/core/utils.js.map +1 -1
- package/dist/emails/config.js +13 -21
- package/dist/emails/config.js.map +1 -1
- package/dist/emails/index.js +10 -72
- package/dist/emails/index.js.map +1 -1
- package/dist/emails/send/auth.js +26 -34
- package/dist/emails/send/auth.js.map +1 -1
- package/dist/emails/send/index.js +2 -21
- package/dist/emails/send/index.js.map +1 -1
- package/dist/emails/send/orders.js +38 -50
- package/dist/emails/send/orders.js.map +1 -1
- package/dist/emails/sender.js +7 -12
- package/dist/emails/sender.js.map +1 -1
- package/dist/emails/templates/base.js +37 -53
- package/dist/emails/templates/base.js.map +1 -1
- package/dist/emails/templates/email-verification.js +12 -16
- package/dist/emails/templates/email-verification.js.map +1 -1
- package/dist/emails/templates/index.js +9 -43
- package/dist/emails/templates/index.js.map +1 -1
- package/dist/emails/templates/order-cancelled.js +18 -22
- package/dist/emails/templates/order-cancelled.js.map +1 -1
- package/dist/emails/templates/order-confirmation.js +30 -34
- package/dist/emails/templates/order-confirmation.js.map +1 -1
- package/dist/emails/templates/order-delivered.js +20 -24
- package/dist/emails/templates/order-delivered.js.map +1 -1
- package/dist/emails/templates/order-shipped.js +19 -23
- package/dist/emails/templates/order-shipped.js.map +1 -1
- package/dist/emails/templates/password-reset.js +12 -16
- package/dist/emails/templates/password-reset.js.map +1 -1
- package/dist/emails/templates/refund-processed.js +17 -21
- package/dist/emails/templates/refund-processed.js.map +1 -1
- package/dist/emails/templates/welcome.js +11 -15
- package/dist/emails/templates/welcome.js.map +1 -1
- package/dist/emails/types.js +1 -2
- package/dist/emails/types.js.map +1 -1
- package/dist/emails/utils.js +9 -20
- package/dist/emails/utils.js.map +1 -1
- package/dist/index.js +24 -176
- package/dist/index.js.map +1 -1
- package/dist/products/api/categories.js +7 -10
- package/dist/products/api/categories.js.map +1 -1
- package/dist/products/api/index.js +3 -9
- package/dist/products/api/index.js.map +1 -1
- package/dist/products/api/product.js +10 -13
- package/dist/products/api/product.js.map +1 -1
- package/dist/products/api/products.js +8 -11
- package/dist/products/api/products.js.map +1 -1
- package/dist/products/components/CategoryNav.js +20 -26
- package/dist/products/components/CategoryNav.js.map +1 -1
- package/dist/products/components/ProductBreadcrumb.js +7 -13
- package/dist/products/components/ProductBreadcrumb.js.map +1 -1
- package/dist/products/components/ProductCard.js +6 -12
- package/dist/products/components/ProductCard.js.map +1 -1
- package/dist/products/components/ProductDetails.js +14 -17
- package/dist/products/components/ProductDetails.js.map +1 -1
- package/dist/products/components/ProductFilters.js +15 -18
- package/dist/products/components/ProductFilters.js.map +1 -1
- package/dist/products/components/ProductGallery.js +17 -23
- package/dist/products/components/ProductGallery.js.map +1 -1
- package/dist/products/components/ProductGrid.js +10 -13
- package/dist/products/components/ProductGrid.js.map +1 -1
- package/dist/products/components/ProductSearch.js +14 -17
- package/dist/products/components/ProductSearch.js.map +1 -1
- package/dist/products/components/ProductSort.js +8 -11
- package/dist/products/components/ProductSort.js.map +1 -1
- package/dist/products/components/VariantSelector.js +16 -19
- package/dist/products/components/VariantSelector.js.map +1 -1
- package/dist/products/components/index.js +10 -23
- package/dist/products/components/index.js.map +1 -1
- package/dist/products/hooks/index.js +4 -11
- package/dist/products/hooks/index.js.map +1 -1
- package/dist/products/hooks/useCategories.js +12 -15
- package/dist/products/hooks/useCategories.js.map +1 -1
- package/dist/products/hooks/useProduct.js +9 -12
- package/dist/products/hooks/useProduct.js.map +1 -1
- package/dist/products/hooks/useProductAttributes.js +10 -13
- package/dist/products/hooks/useProductAttributes.js.map +1 -1
- package/dist/products/hooks/useProducts.js +15 -18
- package/dist/products/hooks/useProducts.js.map +1 -1
- package/dist/products/index.js +6 -23
- package/dist/products/index.js.map +1 -1
- package/dist/theme/ThemeProvider.js +12 -14
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/colors.js +3 -8
- package/dist/theme/colors.js.map +1 -1
- package/dist/theme/defaults.js +27 -30
- package/dist/theme/defaults.js.map +1 -1
- package/dist/theme/fonts.js +12 -18
- package/dist/theme/fonts.js.map +1 -1
- package/dist/theme/generator.js +63 -69
- package/dist/theme/generator.js.map +1 -1
- package/dist/theme/hooks.js +11 -16
- package/dist/theme/hooks.js.map +1 -1
- package/dist/theme/index.js +6 -42
- package/dist/theme/index.js.map +1 -1
- package/package.json +31 -30
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/checkout/server/create-checkout-session
|
|
4
3
|
*
|
|
5
4
|
* Creates a Stripe Checkout session using Direct Charges.
|
|
6
5
|
* The payment is processed ON the connected account, not the platform.
|
|
7
6
|
*/
|
|
8
|
-
|
|
9
|
-
exports.createCheckoutSession = createCheckoutSession;
|
|
10
|
-
exports.deserializeItemsFromMetadata = deserializeItemsFromMetadata;
|
|
11
|
-
exports.getCheckoutSession = getCheckoutSession;
|
|
12
|
-
const client_1 = require("../stripe/client");
|
|
7
|
+
import { getStripe, getConnectedAccountId, calculateApplicationFee, getStoreCurrency, getAllowedShippingCountries, } from '../stripe/client';
|
|
13
8
|
// =============================================================================
|
|
14
9
|
// Main Function
|
|
15
10
|
// =============================================================================
|
|
@@ -35,10 +30,10 @@ const client_1 = require("../stripe/client");
|
|
|
35
30
|
* redirect(session.url)
|
|
36
31
|
* ```
|
|
37
32
|
*/
|
|
38
|
-
async function createCheckoutSession(request, options = {}) {
|
|
39
|
-
const stripe =
|
|
40
|
-
const connectedAccountId =
|
|
41
|
-
const currency =
|
|
33
|
+
export async function createCheckoutSession(request, options = {}) {
|
|
34
|
+
const stripe = getStripe();
|
|
35
|
+
const connectedAccountId = getConnectedAccountId();
|
|
36
|
+
const currency = getStoreCurrency();
|
|
42
37
|
const { collectShippingAddress = true, collectPhoneNumber = false, allowPromotionCodes = false, automaticTax = false, applicationFeeAmount, } = options;
|
|
43
38
|
// Validate request
|
|
44
39
|
if (!request.items || request.items.length === 0) {
|
|
@@ -49,7 +44,7 @@ async function createCheckoutSession(request, options = {}) {
|
|
|
49
44
|
}
|
|
50
45
|
// Calculate subtotal and application fee
|
|
51
46
|
const subtotal = request.items.reduce((sum, item) => sum + item.price * item.quantity, 0);
|
|
52
|
-
const appFee = applicationFeeAmount ??
|
|
47
|
+
const appFee = applicationFeeAmount ?? calculateApplicationFee(subtotal);
|
|
53
48
|
// Build line items for Stripe
|
|
54
49
|
const lineItems = request.items.map((item) => ({
|
|
55
50
|
price_data: {
|
|
@@ -98,7 +93,7 @@ async function createCheckoutSession(request, options = {}) {
|
|
|
98
93
|
// Collect shipping address if enabled
|
|
99
94
|
if (collectShippingAddress) {
|
|
100
95
|
sessionParams.shipping_address_collection = {
|
|
101
|
-
allowed_countries:
|
|
96
|
+
allowed_countries: getAllowedShippingCountries(),
|
|
102
97
|
};
|
|
103
98
|
}
|
|
104
99
|
// Collect phone number if enabled
|
|
@@ -148,7 +143,7 @@ function serializeItemsForMetadata(items) {
|
|
|
148
143
|
/**
|
|
149
144
|
* Deserialize items from Stripe metadata.
|
|
150
145
|
*/
|
|
151
|
-
function deserializeItemsFromMetadata(json) {
|
|
146
|
+
export function deserializeItemsFromMetadata(json) {
|
|
152
147
|
try {
|
|
153
148
|
const items = JSON.parse(json);
|
|
154
149
|
return items.map((item) => ({
|
|
@@ -171,9 +166,9 @@ function deserializeItemsFromMetadata(json) {
|
|
|
171
166
|
* Retrieve a checkout session by ID.
|
|
172
167
|
* Useful for the success page to get order details.
|
|
173
168
|
*/
|
|
174
|
-
async function getCheckoutSession(sessionId) {
|
|
175
|
-
const stripe =
|
|
176
|
-
const connectedAccountId =
|
|
169
|
+
export async function getCheckoutSession(sessionId) {
|
|
170
|
+
const stripe = getStripe();
|
|
171
|
+
const connectedAccountId = getConnectedAccountId();
|
|
177
172
|
try {
|
|
178
173
|
const session = await stripe.checkout.sessions.retrieve(sessionId, {
|
|
179
174
|
expand: ['line_items', 'payment_intent', 'customer'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-checkout-session.js","sourceRoot":"","sources":["../../../src/checkout/server/create-checkout-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-checkout-session.js","sourceRoot":"","sources":["../../../src/checkout/server/create-checkout-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/checkout/server/handle-webhook
|
|
4
3
|
*
|
|
5
4
|
* Stripe webhook handler for processing payment events.
|
|
6
5
|
* Handles events from both the platform account and connected accounts.
|
|
7
6
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const order_service_1 = require("./order-service");
|
|
12
|
-
const emails_1 = require("../../emails");
|
|
7
|
+
import { getStripe, getAllWebhookSecrets } from '../stripe/client';
|
|
8
|
+
import { createOrderFromCheckout, extractOrderParamsFromSession, handleRefund, } from './order-service';
|
|
9
|
+
import { sendOrderConfirmationAsync, sendRefundProcessedAsync, formatPrice, formatDate, formatOrderNumber, } from '../../emails';
|
|
13
10
|
// =============================================================================
|
|
14
11
|
// Main Webhook Handler
|
|
15
12
|
// =============================================================================
|
|
@@ -39,9 +36,9 @@ const emails_1 = require("../../emails");
|
|
|
39
36
|
* }
|
|
40
37
|
* ```
|
|
41
38
|
*/
|
|
42
|
-
async function handleStripeWebhook(payload, signature) {
|
|
43
|
-
const stripe =
|
|
44
|
-
const webhookSecrets =
|
|
39
|
+
export async function handleStripeWebhook(payload, signature) {
|
|
40
|
+
const stripe = getStripe();
|
|
41
|
+
const webhookSecrets = getAllWebhookSecrets();
|
|
45
42
|
// Try to verify with each webhook secret
|
|
46
43
|
// This handles both account webhooks and connect webhooks
|
|
47
44
|
let event = null;
|
|
@@ -128,9 +125,9 @@ async function handleCheckoutSessionCompleted(session) {
|
|
|
128
125
|
return { received: true, event: 'checkout.session.completed' };
|
|
129
126
|
}
|
|
130
127
|
// Extract order parameters from session
|
|
131
|
-
const orderParams =
|
|
128
|
+
const orderParams = extractOrderParamsFromSession(session);
|
|
132
129
|
// Create the order
|
|
133
|
-
const { orderId, isNew } = await
|
|
130
|
+
const { orderId, isNew } = await createOrderFromCheckout(orderParams);
|
|
134
131
|
console.log('[Webhook] Order', isNew ? 'created' : 'already exists', orderId);
|
|
135
132
|
// Send order confirmation email (fire-and-forget, don't block webhook response)
|
|
136
133
|
if (isNew && orderParams.email) {
|
|
@@ -192,7 +189,7 @@ async function handleChargeRefunded(charge) {
|
|
|
192
189
|
? charge.payment_intent
|
|
193
190
|
: charge.payment_intent?.id;
|
|
194
191
|
if (paymentIntentId) {
|
|
195
|
-
await
|
|
192
|
+
await handleRefund(paymentIntentId, charge.amount_refunded, charge.amount);
|
|
196
193
|
}
|
|
197
194
|
return { received: true, event: 'charge.refunded' };
|
|
198
195
|
}
|
|
@@ -227,7 +224,7 @@ function sendOrderConfirmationEmail(orderId, params, session) {
|
|
|
227
224
|
const items = params.items.map((item) => ({
|
|
228
225
|
name: item.name,
|
|
229
226
|
quantity: item.quantity,
|
|
230
|
-
price:
|
|
227
|
+
price: formatPrice(item.price), // Convert cents to formatted price
|
|
231
228
|
imageUrl: item.image, // Note: CheckoutLineItem uses 'image' not 'imageUrl'
|
|
232
229
|
}));
|
|
233
230
|
// Convert shipping address to email format
|
|
@@ -243,17 +240,17 @@ function sendOrderConfirmationEmail(orderId, params, session) {
|
|
|
243
240
|
// Build order tracking URL (store can customize this)
|
|
244
241
|
const storeUrl = process.env.NEXT_PUBLIC_APP_URL || '';
|
|
245
242
|
const orderTrackingUrl = `${storeUrl}/account/orders/${orderId}`;
|
|
246
|
-
|
|
243
|
+
sendOrderConfirmationAsync({
|
|
247
244
|
to: params.email,
|
|
248
245
|
customerName,
|
|
249
|
-
orderNumber:
|
|
250
|
-
orderDate:
|
|
246
|
+
orderNumber: formatOrderNumber(orderId),
|
|
247
|
+
orderDate: formatDate(new Date()),
|
|
251
248
|
paymentStatus: 'Paid',
|
|
252
249
|
items,
|
|
253
|
-
subtotal:
|
|
254
|
-
shippingCost: params.shipping > 0 ?
|
|
255
|
-
tax:
|
|
256
|
-
total:
|
|
250
|
+
subtotal: formatPrice(params.subtotal),
|
|
251
|
+
shippingCost: params.shipping > 0 ? formatPrice(params.shipping) : 'Free',
|
|
252
|
+
tax: formatPrice(params.tax),
|
|
253
|
+
total: formatPrice(params.total),
|
|
257
254
|
shippingAddress,
|
|
258
255
|
orderTrackingUrl,
|
|
259
256
|
});
|
|
@@ -264,12 +261,12 @@ function sendOrderConfirmationEmail(orderId, params, session) {
|
|
|
264
261
|
* This is fire-and-forget - errors are logged but don't block the webhook.
|
|
265
262
|
*/
|
|
266
263
|
function sendRefundEmail(email, customerName, orderNumber, refundAmount, paymentMethod) {
|
|
267
|
-
|
|
264
|
+
sendRefundProcessedAsync({
|
|
268
265
|
to: email,
|
|
269
266
|
customerName,
|
|
270
|
-
orderNumber:
|
|
271
|
-
refundAmount:
|
|
272
|
-
refundDate:
|
|
267
|
+
orderNumber: formatOrderNumber(orderNumber),
|
|
268
|
+
refundAmount: formatPrice(refundAmount),
|
|
269
|
+
refundDate: formatDate(new Date()),
|
|
273
270
|
paymentMethod,
|
|
274
271
|
estimatedArrival: '5-10 business days',
|
|
275
272
|
businessDays: '5-10',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-webhook.js","sourceRoot":"","sources":["../../../src/checkout/server/handle-webhook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handle-webhook.js","sourceRoot":"","sources":["../../../src/checkout/server/handle-webhook.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,YAAY,GACb,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,WAAW,EACX,UAAU,EACV,iBAAiB,GAClB,MAAM,cAAc,CAAA;AAGrB,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAwB,EACxB,SAAiB;IAEjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAA;IAE7C,yCAAyC;IACzC,0DAA0D;IAC1D,IAAI,KAAK,GAAwB,IAAI,CAAA;IACrC,IAAI,SAAS,GAAiB,IAAI,CAAA;IAElC,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;YAClE,yCAAyC;YACzC,MAAK;QACP,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;YACnE,kBAAkB;YAClB,SAAQ;QACV,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,SAAS,EAAE,OAAO,IAAI,yBAAyB,CAAA;QAC/D,OAAO,CAAC,KAAK,CAAC,2DAA2D,EAAE,OAAO,CAAC,CAAA;QACnF,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,0CAA0C,OAAO,EAAE;SAC3D,CAAA;IACH,CAAC;IAED,8BAA8B;IAC9B,OAAO,CAAC,GAAG,CACT,2BAA2B,EAC3B,KAAK,CAAC,IAAI,EACV,eAAe,EACf,KAAK,CAAC,OAAO,IAAI,UAAU,CAC5B,CAAA;IAED,+BAA+B;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAA;QAC7C,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;QACpE,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACvE,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,KAAK,EAAE,OAAO;SACf,CAAA;IACH,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,KAAmB;IAClD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,kBAAkB;QAClB,KAAK,4BAA4B;YAC/B,OAAO,8BAA8B,CACnC,KAAK,CAAC,IAAI,CAAC,MAAiC,CAC7C,CAAA;QAEH,KAAK,0BAA0B;YAC7B,OAAO,4BAA4B,CACjC,KAAK,CAAC,IAAI,CAAC,MAAiC,CAC7C,CAAA;QAEH,iBAAiB;QACjB,KAAK,0BAA0B;YAC7B,OAAO,4BAA4B,CACjC,KAAK,CAAC,IAAI,CAAC,MAA8B,CAC1C,CAAA;QAEH,KAAK,+BAA+B;YAClC,OAAO,yBAAyB,CAC9B,KAAK,CAAC,IAAI,CAAC,MAA8B,CAC1C,CAAA;QAEH,gBAAgB;QAChB,KAAK,iBAAiB;YACpB,OAAO,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,MAAuB,CAAC,CAAA;QAEjE,kCAAkC;QAClC,KAAK,iBAAiB;YACpB,OAAO,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,MAAwB,CAAC,CAAA;QAElE,yCAAyC;QACzC;YACE,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC1D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;IAChD,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAEhF;;;GAGG;AACH,KAAK,UAAU,8BAA8B,CAC3C,OAAgC;IAEhC,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAExD,0CAA0C;IAC1C,IAAI,OAAO,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CACT,sCAAsC,EACtC,OAAO,CAAC,cAAc,CACvB,CAAA;QACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAA;IAChE,CAAC;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAA;IAE1D,mBAAmB;IACnB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAA;IAErE,OAAO,CAAC,GAAG,CACT,iBAAiB,EACjB,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,EACpC,OAAO,CACR,CAAA;IAED,gFAAgF;IAChF,IAAI,KAAK,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;QAC/B,0BAA0B,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,4BAA4B;QACnC,OAAO;KACR,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,4BAA4B,CACzC,OAAgC;IAEhC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAEtD,qBAAqB;IACrB,8BAA8B;IAC9B,4BAA4B;IAC5B,cAAc;IAEd,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAA;AAC9D,CAAC;AAED,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF;;;GAGG;AACH,KAAK,UAAU,4BAA4B,CACzC,aAAmC;IAEnC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,aAAa,CAAC,EAAE,CAAC,CAAA;IAE7D,0EAA0E;IAC1E,2CAA2C;IAE3C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAA;AAC9D,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,yBAAyB,CACtC,aAAmC;IAEnC,OAAO,CAAC,GAAG,CACT,2BAA2B,EAC3B,aAAa,CAAC,EAAE,EAChB,aAAa,CAAC,kBAAkB,EAAE,OAAO,CAC1C,CAAA;IAED,qBAAqB;IACrB,yBAAyB;IACzB,0BAA0B;IAC1B,cAAc;IAEd,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAA;AACnE,CAAC;AAED,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF;;;GAGG;AACH,KAAK,UAAU,oBAAoB,CACjC,MAAqB;IAErB,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;IAEpD,MAAM,eAAe,GACnB,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ;QACvC,CAAC,CAAC,MAAM,CAAC,cAAc;QACvB,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,CAAA;IAE/B,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,YAAY,CAChB,eAAe,EACf,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,MAAM,CACd,CAAA;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAA;AACrD,CAAC;AAED,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF;;;GAGG;AACH,KAAK,UAAU,oBAAoB,CACjC,OAAuB;IAEvB,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAC5D,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAC5D,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAEhE,qBAAqB;IACrB,mDAAmD;IACnD,+CAA+C;IAC/C,6CAA6C;IAE7C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAA;AACrD,CAAC;AAQD;;;GAGG;AACH,SAAS,0BAA0B,CACjC,OAAe,EACf,MAAyB,EACzB,OAAgC;IAEhC,8CAA8C;IAC9C,MAAM,YAAY,GAChB,OAAO,CAAC,gBAAgB,EAAE,IAAI;QAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1B,UAAU,CAAA;IAEZ,sCAAsC;IACtC,MAAM,KAAK,GAAqB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,mCAAmC;QACnE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,qDAAqD;KAC5E,CAAC,CAAC,CAAA;IAEH,2CAA2C;IAC3C,MAAM,eAAe,GAAiB;QACpC,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE,IAAI,IAAI,YAAY;QACpD,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK;QACnC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK;QACnC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,IAAI;QACjC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK;QACnC,UAAU,EAAE,MAAM,CAAC,eAAe,CAAC,UAAU;QAC7C,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,OAAO;KACxC,CAAA;IAED,sDAAsD;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAA;IACtD,MAAM,gBAAgB,GAAG,GAAG,QAAQ,mBAAmB,OAAO,EAAE,CAAA;IAEhE,0BAA0B,CAAC;QACzB,EAAE,EAAE,MAAM,CAAC,KAAK;QAChB,YAAY;QACZ,WAAW,EAAE,iBAAiB,CAAC,OAAO,CAAC;QACvC,SAAS,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;QACjC,aAAa,EAAE,MAAM;QACrB,KAAK;QACL,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtC,YAAY,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM;QACzE,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;QAC5B,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAChC,eAAe;QACf,gBAAgB;KACjB,CAAC,CAAA;IAEF,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CACtB,KAAa,EACb,YAAoB,EACpB,WAAmB,EACnB,YAAoB,EACpB,aAAqB;IAErB,wBAAwB,CAAC;QACvB,EAAE,EAAE,KAAK;QACT,YAAY;QACZ,WAAW,EAAE,iBAAiB,CAAC,WAAW,CAAC;QAC3C,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC;QACvC,UAAU,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;QAClC,aAAa;QACb,gBAAgB,EAAE,oBAAoB;QACtC,YAAY,EAAE,MAAM;KACrB,CAAC,CAAA;IAEF,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAA;AAC1D,CAAC"}
|
|
@@ -1,19 +1,9 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/checkout/server
|
|
4
3
|
*
|
|
5
4
|
* Server-side checkout functions
|
|
6
5
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Object.defineProperty(exports, "createCheckoutSession", { enumerable: true, get: function () { return create_checkout_session_1.createCheckoutSession; } });
|
|
11
|
-
Object.defineProperty(exports, "getCheckoutSession", { enumerable: true, get: function () { return create_checkout_session_1.getCheckoutSession; } });
|
|
12
|
-
Object.defineProperty(exports, "deserializeItemsFromMetadata", { enumerable: true, get: function () { return create_checkout_session_1.deserializeItemsFromMetadata; } });
|
|
13
|
-
var handle_webhook_1 = require("./handle-webhook");
|
|
14
|
-
Object.defineProperty(exports, "handleStripeWebhook", { enumerable: true, get: function () { return handle_webhook_1.handleStripeWebhook; } });
|
|
15
|
-
var order_service_1 = require("./order-service");
|
|
16
|
-
Object.defineProperty(exports, "createOrderFromCheckout", { enumerable: true, get: function () { return order_service_1.createOrderFromCheckout; } });
|
|
17
|
-
Object.defineProperty(exports, "extractOrderParamsFromSession", { enumerable: true, get: function () { return order_service_1.extractOrderParamsFromSession; } });
|
|
18
|
-
Object.defineProperty(exports, "handleRefund", { enumerable: true, get: function () { return order_service_1.handleRefund; } });
|
|
6
|
+
export { createCheckoutSession, getCheckoutSession, deserializeItemsFromMetadata, } from './create-checkout-session';
|
|
7
|
+
export { handleStripeWebhook } from './handle-webhook';
|
|
8
|
+
export { createOrderFromCheckout, extractOrderParamsFromSession, handleRefund, } from './order-service';
|
|
19
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checkout/server/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checkout/server/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,4BAA4B,GAC7B,MAAM,2BAA2B,CAAA;AAIlC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,YAAY,GACb,MAAM,iBAAiB,CAAA"}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/checkout/server/order-service
|
|
4
3
|
*
|
|
5
4
|
* Order creation and management from Stripe Checkout sessions.
|
|
6
5
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
exports.extractOrderParamsFromSession = extractOrderParamsFromSession;
|
|
10
|
-
exports.handleRefund = handleRefund;
|
|
11
|
-
const queries_1 = require("../../core/db/queries");
|
|
12
|
-
const create_checkout_session_1 = require("./create-checkout-session");
|
|
6
|
+
import { createOrder, createOrderItems, findOrderByPaymentIntent, updateOrderStatus, } from '../../core/db/queries';
|
|
7
|
+
import { deserializeItemsFromMetadata } from './create-checkout-session';
|
|
13
8
|
// =============================================================================
|
|
14
9
|
// Order Creation
|
|
15
10
|
// =============================================================================
|
|
@@ -34,15 +29,15 @@ const create_checkout_session_1 = require("./create-checkout-session");
|
|
|
34
29
|
* })
|
|
35
30
|
* ```
|
|
36
31
|
*/
|
|
37
|
-
async function createOrderFromCheckout(params) {
|
|
32
|
+
export async function createOrderFromCheckout(params) {
|
|
38
33
|
// Idempotency check: don't create duplicate orders
|
|
39
|
-
const existingOrder = await
|
|
34
|
+
const existingOrder = await findOrderByPaymentIntent(params.stripePaymentIntentId);
|
|
40
35
|
if (existingOrder) {
|
|
41
36
|
console.log('[Order] Order already exists for payment intent:', params.stripePaymentIntentId);
|
|
42
37
|
return { orderId: existingOrder.id, isNew: false };
|
|
43
38
|
}
|
|
44
39
|
// Create the order
|
|
45
|
-
const order = await
|
|
40
|
+
const order = await createOrder({
|
|
46
41
|
email: params.email,
|
|
47
42
|
status: 'paid',
|
|
48
43
|
subtotal: centsToDecimal(params.subtotal),
|
|
@@ -65,7 +60,7 @@ async function createOrderFromCheckout(params) {
|
|
|
65
60
|
quantity: item.quantity,
|
|
66
61
|
attributes: item.attributes,
|
|
67
62
|
}));
|
|
68
|
-
await
|
|
63
|
+
await createOrderItems(orderItems);
|
|
69
64
|
}
|
|
70
65
|
console.log('[Order] Created order:', order.id, 'for session:', params.sessionId);
|
|
71
66
|
return { orderId: order.id, isNew: true };
|
|
@@ -77,10 +72,10 @@ async function createOrderFromCheckout(params) {
|
|
|
77
72
|
* Extract order parameters from a Stripe Checkout Session.
|
|
78
73
|
* Used to convert Stripe's session object to our CreateOrderParams.
|
|
79
74
|
*/
|
|
80
|
-
function extractOrderParamsFromSession(session) {
|
|
75
|
+
export function extractOrderParamsFromSession(session) {
|
|
81
76
|
// Parse items from metadata
|
|
82
77
|
const items = session.metadata?.items
|
|
83
|
-
?
|
|
78
|
+
? deserializeItemsFromMetadata(session.metadata.items)
|
|
84
79
|
: extractItemsFromLineItems(session.line_items?.data);
|
|
85
80
|
// Extract shipping address
|
|
86
81
|
// Note: In Stripe API v20+, shipping is accessed via collected_information or shipping_details
|
|
@@ -117,8 +112,8 @@ function extractOrderParamsFromSession(session) {
|
|
|
117
112
|
* Handle a refund event from Stripe.
|
|
118
113
|
* Updates the order status to 'refunded'.
|
|
119
114
|
*/
|
|
120
|
-
async function handleRefund(paymentIntentId, refundAmount, totalAmount) {
|
|
121
|
-
const order = await
|
|
115
|
+
export async function handleRefund(paymentIntentId, refundAmount, totalAmount) {
|
|
116
|
+
const order = await findOrderByPaymentIntent(paymentIntentId);
|
|
122
117
|
if (!order) {
|
|
123
118
|
console.warn('[Order] No order found for refund:', paymentIntentId);
|
|
124
119
|
return;
|
|
@@ -126,7 +121,7 @@ async function handleRefund(paymentIntentId, refundAmount, totalAmount) {
|
|
|
126
121
|
// Check if full or partial refund
|
|
127
122
|
const isFullRefund = refundAmount >= totalAmount;
|
|
128
123
|
if (isFullRefund) {
|
|
129
|
-
await
|
|
124
|
+
await updateOrderStatus(order.id, 'refunded');
|
|
130
125
|
console.log('[Order] Order refunded:', order.id);
|
|
131
126
|
}
|
|
132
127
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-service.js","sourceRoot":"","sources":["../../../src/checkout/server/order-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"order-service.js","sourceRoot":"","sources":["../../../src/checkout/server/order-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/checkout/stripe/client
|
|
4
3
|
*
|
|
5
4
|
* Stripe SDK initialization for server-side operations.
|
|
6
5
|
* Uses Direct Charges with connected accounts.
|
|
7
6
|
*/
|
|
8
|
-
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.getStripe = getStripe;
|
|
13
|
-
exports.getConnectedAccountId = getConnectedAccountId;
|
|
14
|
-
exports.hasConnectedAccount = hasConnectedAccount;
|
|
15
|
-
exports.getPlatformFeePercent = getPlatformFeePercent;
|
|
16
|
-
exports.calculateApplicationFee = calculateApplicationFee;
|
|
17
|
-
exports.getWebhookSecret = getWebhookSecret;
|
|
18
|
-
exports.getConnectWebhookSecret = getConnectWebhookSecret;
|
|
19
|
-
exports.getAllWebhookSecrets = getAllWebhookSecrets;
|
|
20
|
-
exports.getStoreCurrency = getStoreCurrency;
|
|
21
|
-
exports.getAllowedShippingCountries = getAllowedShippingCountries;
|
|
22
|
-
exports.getPublishableKey = getPublishableKey;
|
|
23
|
-
const stripe_1 = __importDefault(require("stripe"));
|
|
7
|
+
import Stripe from 'stripe';
|
|
24
8
|
// =============================================================================
|
|
25
9
|
// Singleton Stripe Client
|
|
26
10
|
// =============================================================================
|
|
@@ -31,7 +15,7 @@ let stripeClient = null;
|
|
|
31
15
|
*
|
|
32
16
|
* @throws Error if STRIPE_SECRET_KEY is not set
|
|
33
17
|
*/
|
|
34
|
-
function getStripe() {
|
|
18
|
+
export function getStripe() {
|
|
35
19
|
if (!stripeClient) {
|
|
36
20
|
const secretKey = process.env.STRIPE_SECRET_KEY;
|
|
37
21
|
if (!secretKey) {
|
|
@@ -39,7 +23,7 @@ function getStripe() {
|
|
|
39
23
|
'Please add your Stripe secret key to .env.local:\n' +
|
|
40
24
|
'STRIPE_SECRET_KEY=sk_test_xxx');
|
|
41
25
|
}
|
|
42
|
-
stripeClient = new
|
|
26
|
+
stripeClient = new Stripe(secretKey, {
|
|
43
27
|
// Use the latest API version for best compatibility
|
|
44
28
|
apiVersion: '2025-11-17.clover',
|
|
45
29
|
typescript: true,
|
|
@@ -58,7 +42,7 @@ function getStripe() {
|
|
|
58
42
|
*
|
|
59
43
|
* @throws Error if STRIPE_CONNECTED_ACCOUNT_ID is not set
|
|
60
44
|
*/
|
|
61
|
-
function getConnectedAccountId() {
|
|
45
|
+
export function getConnectedAccountId() {
|
|
62
46
|
const accountId = process.env.STRIPE_CONNECTED_ACCOUNT_ID;
|
|
63
47
|
if (!accountId) {
|
|
64
48
|
throw new Error('STRIPE_CONNECTED_ACCOUNT_ID environment variable is not set. ' +
|
|
@@ -71,7 +55,7 @@ function getConnectedAccountId() {
|
|
|
71
55
|
* Check if the store has a connected Stripe account.
|
|
72
56
|
* Use this to conditionally show checkout UI.
|
|
73
57
|
*/
|
|
74
|
-
function hasConnectedAccount() {
|
|
58
|
+
export function hasConnectedAccount() {
|
|
75
59
|
return !!process.env.STRIPE_CONNECTED_ACCOUNT_ID;
|
|
76
60
|
}
|
|
77
61
|
// =============================================================================
|
|
@@ -81,7 +65,7 @@ function hasConnectedAccount() {
|
|
|
81
65
|
* Get the platform fee percentage for transactions.
|
|
82
66
|
* Default is 5% if not configured.
|
|
83
67
|
*/
|
|
84
|
-
function getPlatformFeePercent() {
|
|
68
|
+
export function getPlatformFeePercent() {
|
|
85
69
|
const feePercent = process.env.STRIPE_PLATFORM_FEE_PERCENT;
|
|
86
70
|
if (!feePercent) {
|
|
87
71
|
return 5; // Default 5% platform fee
|
|
@@ -99,7 +83,7 @@ function getPlatformFeePercent() {
|
|
|
99
83
|
* @param amountInCents - The total transaction amount in cents
|
|
100
84
|
* @returns The application fee in cents (rounded)
|
|
101
85
|
*/
|
|
102
|
-
function calculateApplicationFee(amountInCents) {
|
|
86
|
+
export function calculateApplicationFee(amountInCents) {
|
|
103
87
|
const feePercent = getPlatformFeePercent();
|
|
104
88
|
return Math.round(amountInCents * (feePercent / 100));
|
|
105
89
|
}
|
|
@@ -112,7 +96,7 @@ function calculateApplicationFee(amountInCents) {
|
|
|
112
96
|
*
|
|
113
97
|
* @throws Error if STRIPE_WEBHOOK_SECRET is not set
|
|
114
98
|
*/
|
|
115
|
-
function getWebhookSecret() {
|
|
99
|
+
export function getWebhookSecret() {
|
|
116
100
|
const secret = process.env.STRIPE_WEBHOOK_SECRET;
|
|
117
101
|
if (!secret) {
|
|
118
102
|
throw new Error('STRIPE_WEBHOOK_SECRET environment variable is not set. ' +
|
|
@@ -126,14 +110,14 @@ function getWebhookSecret() {
|
|
|
126
110
|
* Used to verify webhook signatures from connected accounts.
|
|
127
111
|
* Falls back to primary secret if not set.
|
|
128
112
|
*/
|
|
129
|
-
function getConnectWebhookSecret() {
|
|
113
|
+
export function getConnectWebhookSecret() {
|
|
130
114
|
return process.env.STRIPE_CONNECT_WEBHOOK_SECRET || null;
|
|
131
115
|
}
|
|
132
116
|
/**
|
|
133
117
|
* Get all webhook secrets to try during verification.
|
|
134
118
|
* Returns array of secrets to attempt (primary first, then connect).
|
|
135
119
|
*/
|
|
136
|
-
function getAllWebhookSecrets() {
|
|
120
|
+
export function getAllWebhookSecrets() {
|
|
137
121
|
const secrets = [];
|
|
138
122
|
const primarySecret = process.env.STRIPE_WEBHOOK_SECRET;
|
|
139
123
|
if (primarySecret) {
|
|
@@ -156,14 +140,14 @@ function getAllWebhookSecrets() {
|
|
|
156
140
|
* Get the store's currency code.
|
|
157
141
|
* Default is USD if not configured.
|
|
158
142
|
*/
|
|
159
|
-
function getStoreCurrency() {
|
|
143
|
+
export function getStoreCurrency() {
|
|
160
144
|
return process.env.STORE_CURRENCY || 'usd';
|
|
161
145
|
}
|
|
162
146
|
/**
|
|
163
147
|
* Get allowed countries for shipping.
|
|
164
148
|
* Default is US and CA if not configured.
|
|
165
149
|
*/
|
|
166
|
-
function getAllowedShippingCountries() {
|
|
150
|
+
export function getAllowedShippingCountries() {
|
|
167
151
|
const countries = process.env.SHIPPING_COUNTRIES;
|
|
168
152
|
if (!countries) {
|
|
169
153
|
return ['US', 'CA']; // Default to US and Canada
|
|
@@ -177,7 +161,7 @@ function getAllowedShippingCountries() {
|
|
|
177
161
|
* Get the publishable key for client-side Stripe.js
|
|
178
162
|
* This is safe to expose to the browser.
|
|
179
163
|
*/
|
|
180
|
-
function getPublishableKey() {
|
|
164
|
+
export function getPublishableKey() {
|
|
181
165
|
const key = process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY;
|
|
182
166
|
if (!key) {
|
|
183
167
|
throw new Error('NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY environment variable is not set. ' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/checkout/stripe/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/checkout/stripe/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/checkout/stripe
|
|
4
3
|
*
|
|
5
4
|
* Stripe client and configuration exports
|
|
6
5
|
*/
|
|
7
|
-
|
|
8
|
-
exports.getPublishableKey = exports.getAllowedShippingCountries = exports.getStoreCurrency = exports.getAllWebhookSecrets = exports.getConnectWebhookSecret = exports.getWebhookSecret = exports.calculateApplicationFee = exports.getPlatformFeePercent = exports.hasConnectedAccount = exports.getConnectedAccountId = exports.getStripe = void 0;
|
|
9
|
-
var client_1 = require("./client");
|
|
10
|
-
Object.defineProperty(exports, "getStripe", { enumerable: true, get: function () { return client_1.getStripe; } });
|
|
11
|
-
Object.defineProperty(exports, "getConnectedAccountId", { enumerable: true, get: function () { return client_1.getConnectedAccountId; } });
|
|
12
|
-
Object.defineProperty(exports, "hasConnectedAccount", { enumerable: true, get: function () { return client_1.hasConnectedAccount; } });
|
|
13
|
-
Object.defineProperty(exports, "getPlatformFeePercent", { enumerable: true, get: function () { return client_1.getPlatformFeePercent; } });
|
|
14
|
-
Object.defineProperty(exports, "calculateApplicationFee", { enumerable: true, get: function () { return client_1.calculateApplicationFee; } });
|
|
15
|
-
Object.defineProperty(exports, "getWebhookSecret", { enumerable: true, get: function () { return client_1.getWebhookSecret; } });
|
|
16
|
-
Object.defineProperty(exports, "getConnectWebhookSecret", { enumerable: true, get: function () { return client_1.getConnectWebhookSecret; } });
|
|
17
|
-
Object.defineProperty(exports, "getAllWebhookSecrets", { enumerable: true, get: function () { return client_1.getAllWebhookSecrets; } });
|
|
18
|
-
Object.defineProperty(exports, "getStoreCurrency", { enumerable: true, get: function () { return client_1.getStoreCurrency; } });
|
|
19
|
-
Object.defineProperty(exports, "getAllowedShippingCountries", { enumerable: true, get: function () { return client_1.getAllowedShippingCountries; } });
|
|
20
|
-
Object.defineProperty(exports, "getPublishableKey", { enumerable: true, get: function () { return client_1.getPublishableKey; } });
|
|
6
|
+
export { getStripe, getConnectedAccountId, hasConnectedAccount, getPlatformFeePercent, calculateApplicationFee, getWebhookSecret, getConnectWebhookSecret, getAllWebhookSecrets, getStoreCurrency, getAllowedShippingCountries, getPublishableKey, } from './client';
|
|
21
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checkout/stripe/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checkout/stripe/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,UAAU,CAAA"}
|
package/dist/checkout/types.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/checkout/types
|
|
4
3
|
*
|
|
5
4
|
* Type definitions for the checkout module.
|
|
6
5
|
* Stripe Connect with Direct Charges and platform fees.
|
|
7
6
|
*/
|
|
8
|
-
|
|
7
|
+
export {};
|
|
9
8
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/checkout/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/checkout/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|