@rovela-ai/sdk 0.1.17 → 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.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 +35 -34
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/auth/api/register
|
|
4
3
|
*
|
|
5
4
|
* Customer registration API route handler.
|
|
6
5
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const email_sender_1 = require("../server/email-sender");
|
|
13
|
-
const password_1 = require("../server/password");
|
|
6
|
+
import { NextResponse } from 'next/server';
|
|
7
|
+
import { createCustomer } from '../server/customer-service';
|
|
8
|
+
import { createVerificationToken } from '../server/verification-service';
|
|
9
|
+
import { sendVerificationEmail, getStoreName } from '../server/email-sender';
|
|
10
|
+
import { validatePassword } from '../server/password';
|
|
14
11
|
/**
|
|
15
12
|
* Validate email format.
|
|
16
13
|
*/
|
|
@@ -50,32 +47,32 @@ function isValidEmail(email) {
|
|
|
50
47
|
* }
|
|
51
48
|
* ```
|
|
52
49
|
*/
|
|
53
|
-
async function POST(request) {
|
|
50
|
+
export async function POST(request) {
|
|
54
51
|
try {
|
|
55
52
|
const body = await request.json();
|
|
56
53
|
// Validate required fields
|
|
57
54
|
if (!body.email || !body.password) {
|
|
58
|
-
return
|
|
55
|
+
return NextResponse.json({ error: 'Email and password are required', code: 'VALIDATION_ERROR' }, { status: 400 });
|
|
59
56
|
}
|
|
60
57
|
// Validate email format
|
|
61
58
|
if (!isValidEmail(body.email)) {
|
|
62
|
-
return
|
|
59
|
+
return NextResponse.json({ error: 'Please enter a valid email address', code: 'VALIDATION_ERROR' }, { status: 400 });
|
|
63
60
|
}
|
|
64
61
|
// Validate password
|
|
65
|
-
const passwordValidation =
|
|
62
|
+
const passwordValidation = validatePassword(body.password);
|
|
66
63
|
if (!passwordValidation.valid) {
|
|
67
|
-
return
|
|
64
|
+
return NextResponse.json({ error: passwordValidation.error, code: 'VALIDATION_ERROR' }, { status: 400 });
|
|
68
65
|
}
|
|
69
66
|
// Create customer
|
|
70
|
-
const { customer } = await
|
|
67
|
+
const { customer } = await createCustomer(body.email, body.password, body.name);
|
|
71
68
|
// Create verification token
|
|
72
|
-
const token = await
|
|
69
|
+
const token = await createVerificationToken(customer.id);
|
|
73
70
|
// Send verification email (async, don't wait)
|
|
74
|
-
const storeName = await
|
|
75
|
-
|
|
71
|
+
const storeName = await getStoreName();
|
|
72
|
+
sendVerificationEmail(body.email, token, storeName).catch((err) => {
|
|
76
73
|
console.error('[Auth Register] Failed to send verification email:', err);
|
|
77
74
|
});
|
|
78
|
-
return
|
|
75
|
+
return NextResponse.json({
|
|
79
76
|
success: true,
|
|
80
77
|
customerId: customer.id,
|
|
81
78
|
message: 'Account created. Please check your email to verify your account.',
|
|
@@ -85,9 +82,9 @@ async function POST(request) {
|
|
|
85
82
|
console.error('[Auth Register] Error:', error);
|
|
86
83
|
// Handle duplicate email
|
|
87
84
|
if (error instanceof Error && error.message.includes('already exists')) {
|
|
88
|
-
return
|
|
85
|
+
return NextResponse.json({ error: 'An account with this email already exists', code: 'EMAIL_EXISTS' }, { status: 409 });
|
|
89
86
|
}
|
|
90
|
-
return
|
|
87
|
+
return NextResponse.json({ error: 'Failed to create account. Please try again.', code: 'VALIDATION_ERROR' }, { status: 500 });
|
|
91
88
|
}
|
|
92
89
|
}
|
|
93
90
|
//# sourceMappingURL=register.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/auth/api/register.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/auth/api/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/auth/api/resend-verification
|
|
4
3
|
*
|
|
5
4
|
* Resend verification email API route handler.
|
|
6
5
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const server_1 = require("next/server");
|
|
10
|
-
const verification_service_1 = require("../server/verification-service");
|
|
6
|
+
import { NextResponse } from 'next/server';
|
|
7
|
+
import { resendVerificationEmail } from '../server/verification-service';
|
|
11
8
|
/**
|
|
12
9
|
* Validate email format.
|
|
13
10
|
*/
|
|
@@ -42,30 +39,30 @@ function isValidEmail(email) {
|
|
|
42
39
|
* }
|
|
43
40
|
* ```
|
|
44
41
|
*/
|
|
45
|
-
async function POST(request) {
|
|
42
|
+
export async function POST(request) {
|
|
46
43
|
try {
|
|
47
44
|
const body = await request.json();
|
|
48
45
|
const email = body.email;
|
|
49
46
|
if (!email) {
|
|
50
|
-
return
|
|
47
|
+
return NextResponse.json({ error: 'Email is required', code: 'VALIDATION_ERROR' }, { status: 400 });
|
|
51
48
|
}
|
|
52
49
|
if (!isValidEmail(email)) {
|
|
53
|
-
return
|
|
50
|
+
return NextResponse.json({ error: 'Please enter a valid email address', code: 'VALIDATION_ERROR' }, { status: 400 });
|
|
54
51
|
}
|
|
55
|
-
const result = await
|
|
52
|
+
const result = await resendVerificationEmail(email);
|
|
56
53
|
// If already verified, return error
|
|
57
54
|
if (!result.success && result.error?.includes('already verified')) {
|
|
58
|
-
return
|
|
55
|
+
return NextResponse.json({ error: result.error, code: 'VALIDATION_ERROR' }, { status: 400 });
|
|
59
56
|
}
|
|
60
57
|
// Always return success message to prevent email enumeration
|
|
61
|
-
return
|
|
58
|
+
return NextResponse.json({
|
|
62
59
|
success: true,
|
|
63
60
|
message: 'If an account exists with this email, a verification link has been sent.',
|
|
64
61
|
});
|
|
65
62
|
}
|
|
66
63
|
catch (error) {
|
|
67
64
|
console.error('[Auth Resend Verification] Error:', error);
|
|
68
|
-
return
|
|
65
|
+
return NextResponse.json({ error: 'Failed to send verification email. Please try again.', code: 'VALIDATION_ERROR' }, { status: 500 });
|
|
69
66
|
}
|
|
70
67
|
}
|
|
71
68
|
//# sourceMappingURL=resend-verification.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resend-verification.js","sourceRoot":"","sources":["../../../src/auth/api/resend-verification.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resend-verification.js","sourceRoot":"","sources":["../../../src/auth/api/resend-verification.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AAGxE;;GAEG;AACH,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,UAAU,GAAG,4BAA4B,CAAA;IAC/C,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAgB;IACzC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAA;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAExB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,kBAAkB,EAAE,EACxD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;QACH,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,oCAAoC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EACzE,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,CAAA;QAEnD,oCAAoC;QACpC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAClE,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,EACjD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;QACH,CAAC;QAED,6DAA6D;QAC7D,OAAO,YAAY,CAAC,IAAI,CAAC;YACvB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,0EAA0E;SACpF,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAA;QACzD,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,sDAAsD,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAC3F,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/auth/api/reset-password
|
|
4
3
|
*
|
|
5
4
|
* Reset password API route handler.
|
|
6
5
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const server_1 = require("next/server");
|
|
11
|
-
const password_reset_service_1 = require("../server/password-reset-service");
|
|
12
|
-
const password_1 = require("../server/password");
|
|
6
|
+
import { NextResponse } from 'next/server';
|
|
7
|
+
import { validateResetToken, resetPassword } from '../server/password-reset-service';
|
|
8
|
+
import { validatePassword } from '../server/password';
|
|
13
9
|
/**
|
|
14
10
|
* GET handler for validating reset token.
|
|
15
11
|
* Use this to check if token is valid before showing the reset form.
|
|
@@ -34,22 +30,22 @@ const password_1 = require("../server/password");
|
|
|
34
30
|
* }
|
|
35
31
|
* ```
|
|
36
32
|
*/
|
|
37
|
-
async function GET(request) {
|
|
33
|
+
export async function GET(request) {
|
|
38
34
|
try {
|
|
39
35
|
const { searchParams } = new URL(request.url);
|
|
40
36
|
const token = searchParams.get('token');
|
|
41
37
|
if (!token) {
|
|
42
|
-
return
|
|
38
|
+
return NextResponse.json({ valid: false, error: 'Reset token is required' }, { status: 400 });
|
|
43
39
|
}
|
|
44
|
-
const result = await
|
|
40
|
+
const result = await validateResetToken(token);
|
|
45
41
|
if (!result.valid) {
|
|
46
|
-
return
|
|
42
|
+
return NextResponse.json({ valid: false, error: result.error }, { status: 400 });
|
|
47
43
|
}
|
|
48
|
-
return
|
|
44
|
+
return NextResponse.json({ valid: true });
|
|
49
45
|
}
|
|
50
46
|
catch (error) {
|
|
51
47
|
console.error('[Auth Reset Password] Validation error:', error);
|
|
52
|
-
return
|
|
48
|
+
return NextResponse.json({ valid: false, error: 'Failed to validate token. Please try again.' }, { status: 500 });
|
|
53
49
|
}
|
|
54
50
|
}
|
|
55
51
|
/**
|
|
@@ -76,35 +72,35 @@ async function GET(request) {
|
|
|
76
72
|
* }
|
|
77
73
|
* ```
|
|
78
74
|
*/
|
|
79
|
-
async function POST(request) {
|
|
75
|
+
export async function POST(request) {
|
|
80
76
|
try {
|
|
81
77
|
const body = await request.json();
|
|
82
78
|
const { token, password } = body;
|
|
83
79
|
if (!token) {
|
|
84
|
-
return
|
|
80
|
+
return NextResponse.json({ error: 'Reset token is required', code: 'INVALID_TOKEN' }, { status: 400 });
|
|
85
81
|
}
|
|
86
82
|
if (!password) {
|
|
87
|
-
return
|
|
83
|
+
return NextResponse.json({ error: 'New password is required', code: 'VALIDATION_ERROR' }, { status: 400 });
|
|
88
84
|
}
|
|
89
85
|
// Validate password strength
|
|
90
|
-
const passwordValidation =
|
|
86
|
+
const passwordValidation = validatePassword(password);
|
|
91
87
|
if (!passwordValidation.valid) {
|
|
92
|
-
return
|
|
88
|
+
return NextResponse.json({ error: passwordValidation.error, code: 'VALIDATION_ERROR' }, { status: 400 });
|
|
93
89
|
}
|
|
94
90
|
// Reset password
|
|
95
|
-
const result = await
|
|
91
|
+
const result = await resetPassword(token, password);
|
|
96
92
|
if (!result.success) {
|
|
97
93
|
const code = result.error?.includes('expired') ? 'TOKEN_EXPIRED' : 'INVALID_TOKEN';
|
|
98
|
-
return
|
|
94
|
+
return NextResponse.json({ error: result.error, code }, { status: 400 });
|
|
99
95
|
}
|
|
100
|
-
return
|
|
96
|
+
return NextResponse.json({
|
|
101
97
|
success: true,
|
|
102
98
|
message: 'Password reset successfully. You can now sign in with your new password.',
|
|
103
99
|
});
|
|
104
100
|
}
|
|
105
101
|
catch (error) {
|
|
106
102
|
console.error('[Auth Reset Password] Error:', error);
|
|
107
|
-
return
|
|
103
|
+
return NextResponse.json({ error: 'Failed to reset password. Please try again.', code: 'VALIDATION_ERROR' }, { status: 500 });
|
|
108
104
|
}
|
|
109
105
|
}
|
|
110
106
|
//# sourceMappingURL=reset-password.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset-password.js","sourceRoot":"","sources":["../../../src/auth/api/reset-password.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reset-password.js","sourceRoot":"","sources":["../../../src/auth/api/reset-password.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/auth/api/verify-email
|
|
4
3
|
*
|
|
5
4
|
* Email verification API route handler.
|
|
6
5
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
exports.POST = POST;
|
|
10
|
-
const server_1 = require("next/server");
|
|
11
|
-
const verification_service_1 = require("../server/verification-service");
|
|
6
|
+
import { NextResponse } from 'next/server';
|
|
7
|
+
import { verifyEmail } from '../server/verification-service';
|
|
12
8
|
/**
|
|
13
9
|
* GET handler for email verification.
|
|
14
10
|
* Verifies the token from the email link.
|
|
@@ -36,27 +32,27 @@ const verification_service_1 = require("../server/verification-service");
|
|
|
36
32
|
* }
|
|
37
33
|
* ```
|
|
38
34
|
*/
|
|
39
|
-
async function GET(request) {
|
|
35
|
+
export async function GET(request) {
|
|
40
36
|
try {
|
|
41
37
|
const { searchParams } = new URL(request.url);
|
|
42
38
|
const token = searchParams.get('token');
|
|
43
39
|
if (!token) {
|
|
44
|
-
return
|
|
40
|
+
return NextResponse.json({ error: 'Verification token is required', code: 'INVALID_TOKEN' }, { status: 400 });
|
|
45
41
|
}
|
|
46
|
-
const result = await
|
|
42
|
+
const result = await verifyEmail(token);
|
|
47
43
|
if (!result.success) {
|
|
48
44
|
// Determine error code based on message
|
|
49
45
|
const code = result.error?.includes('expired') ? 'TOKEN_EXPIRED' : 'INVALID_TOKEN';
|
|
50
|
-
return
|
|
46
|
+
return NextResponse.json({ error: result.error, code }, { status: 400 });
|
|
51
47
|
}
|
|
52
|
-
return
|
|
48
|
+
return NextResponse.json({
|
|
53
49
|
success: true,
|
|
54
50
|
message: 'Email verified successfully. You can now sign in.',
|
|
55
51
|
});
|
|
56
52
|
}
|
|
57
53
|
catch (error) {
|
|
58
54
|
console.error('[Auth Verify Email] Error:', error);
|
|
59
|
-
return
|
|
55
|
+
return NextResponse.json({ error: 'Failed to verify email. Please try again.', code: 'INVALID_TOKEN' }, { status: 500 });
|
|
60
56
|
}
|
|
61
57
|
}
|
|
62
58
|
/**
|
|
@@ -69,26 +65,26 @@ async function GET(request) {
|
|
|
69
65
|
* { "token": "abc123" }
|
|
70
66
|
* ```
|
|
71
67
|
*/
|
|
72
|
-
async function POST(request) {
|
|
68
|
+
export async function POST(request) {
|
|
73
69
|
try {
|
|
74
70
|
const body = await request.json();
|
|
75
71
|
const token = body.token;
|
|
76
72
|
if (!token) {
|
|
77
|
-
return
|
|
73
|
+
return NextResponse.json({ error: 'Verification token is required', code: 'INVALID_TOKEN' }, { status: 400 });
|
|
78
74
|
}
|
|
79
|
-
const result = await
|
|
75
|
+
const result = await verifyEmail(token);
|
|
80
76
|
if (!result.success) {
|
|
81
77
|
const code = result.error?.includes('expired') ? 'TOKEN_EXPIRED' : 'INVALID_TOKEN';
|
|
82
|
-
return
|
|
78
|
+
return NextResponse.json({ error: result.error, code }, { status: 400 });
|
|
83
79
|
}
|
|
84
|
-
return
|
|
80
|
+
return NextResponse.json({
|
|
85
81
|
success: true,
|
|
86
82
|
message: 'Email verified successfully. You can now sign in.',
|
|
87
83
|
});
|
|
88
84
|
}
|
|
89
85
|
catch (error) {
|
|
90
86
|
console.error('[Auth Verify Email] Error:', error);
|
|
91
|
-
return
|
|
87
|
+
return NextResponse.json({ error: 'Failed to verify email. Please try again.', code: 'INVALID_TOKEN' }, { status: 500 });
|
|
92
88
|
}
|
|
93
89
|
}
|
|
94
90
|
//# sourceMappingURL=verify-email.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-email.js","sourceRoot":"","sources":["../../../src/auth/api/verify-email.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify-email.js","sourceRoot":"","sources":["../../../src/auth/api/verify-email.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
'use client';
|
|
3
|
-
|
|
4
|
-
exports.AuthGuard = AuthGuard;
|
|
5
|
-
exports.withAuth = withAuth;
|
|
6
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
3
|
/**
|
|
8
4
|
* @rovela/sdk/auth/components/AuthGuard
|
|
9
5
|
*
|
|
10
6
|
* Route protection component for authenticated routes.
|
|
11
7
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
import { useEffect } from 'react';
|
|
9
|
+
import { useAuth } from '../hooks/useAuth';
|
|
14
10
|
/**
|
|
15
11
|
* Guard component that protects routes requiring authentication.
|
|
16
12
|
*
|
|
@@ -37,10 +33,10 @@ const useAuth_1 = require("../hooks/useAuth");
|
|
|
37
33
|
* </AuthGuard>
|
|
38
34
|
* ```
|
|
39
35
|
*/
|
|
40
|
-
function AuthGuard({ children, fallback, redirectTo = '/auth/signin', requireVerified = false, loadingComponent, }) {
|
|
41
|
-
const { isAuthenticated, isLoading, isEmailVerified, customer } =
|
|
36
|
+
export function AuthGuard({ children, fallback, redirectTo = '/auth/signin', requireVerified = false, loadingComponent, }) {
|
|
37
|
+
const { isAuthenticated, isLoading, isEmailVerified, customer } = useAuth();
|
|
42
38
|
// Handle redirect when not authenticated
|
|
43
|
-
|
|
39
|
+
useEffect(() => {
|
|
44
40
|
if (isLoading)
|
|
45
41
|
return;
|
|
46
42
|
// Not authenticated - redirect to signin
|
|
@@ -59,14 +55,14 @@ function AuthGuard({ children, fallback, redirectTo = '/auth/signin', requireVer
|
|
|
59
55
|
// Loading state
|
|
60
56
|
if (isLoading) {
|
|
61
57
|
if (loadingComponent) {
|
|
62
|
-
return (
|
|
58
|
+
return _jsx(_Fragment, { children: loadingComponent });
|
|
63
59
|
}
|
|
64
|
-
return ((
|
|
60
|
+
return (_jsx("div", { className: "flex min-h-[200px] items-center justify-center", children: _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "mx-auto h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent" }), _jsx("p", { className: "mt-4 text-sm text-muted-foreground", children: "Loading..." })] }) }));
|
|
65
61
|
}
|
|
66
62
|
// Not authenticated
|
|
67
63
|
if (!isAuthenticated) {
|
|
68
64
|
if (fallback) {
|
|
69
|
-
return (
|
|
65
|
+
return _jsx(_Fragment, { children: fallback });
|
|
70
66
|
}
|
|
71
67
|
// Return null while redirecting
|
|
72
68
|
return null;
|
|
@@ -74,13 +70,13 @@ function AuthGuard({ children, fallback, redirectTo = '/auth/signin', requireVer
|
|
|
74
70
|
// Email verification required but not verified
|
|
75
71
|
if (requireVerified && !isEmailVerified) {
|
|
76
72
|
if (fallback) {
|
|
77
|
-
return (
|
|
73
|
+
return _jsx(_Fragment, { children: fallback });
|
|
78
74
|
}
|
|
79
75
|
// Return null while redirecting
|
|
80
76
|
return null;
|
|
81
77
|
}
|
|
82
78
|
// Authenticated (and verified if required) - render children
|
|
83
|
-
return (
|
|
79
|
+
return _jsx(_Fragment, { children: children });
|
|
84
80
|
}
|
|
85
81
|
/**
|
|
86
82
|
* HOC version of AuthGuard for wrapping page components.
|
|
@@ -101,9 +97,9 @@ function AuthGuard({ children, fallback, redirectTo = '/auth/signin', requireVer
|
|
|
101
97
|
* })
|
|
102
98
|
* ```
|
|
103
99
|
*/
|
|
104
|
-
function withAuth(Component, options = {}) {
|
|
100
|
+
export function withAuth(Component, options = {}) {
|
|
105
101
|
function WrappedComponent(props) {
|
|
106
|
-
return ((
|
|
102
|
+
return (_jsx(AuthGuard, { ...options, children: _jsx(Component, { ...props }) }));
|
|
107
103
|
}
|
|
108
104
|
// Copy display name for debugging
|
|
109
105
|
const displayName = Component.displayName || Component.name || 'Component';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthGuard.js","sourceRoot":"","sources":["../../../src/auth/components/AuthGuard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AuthGuard.js","sourceRoot":"","sources":["../../../src/auth/components/AuthGuard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,QAAQ,EACR,QAAQ,EACR,UAAU,GAAG,cAAc,EAC3B,eAAe,GAAG,KAAK,EACvB,gBAAgB,GACD;IACf,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAA;IAE3E,yCAAyC;IACzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS;YAAE,OAAM;QAErB,yCAAyC;QACzC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,iDAAiD;YACjD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA;YACrE,MAAM,WAAW,GAAG,GAAG,UAAU,gBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAA;YAClF,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAA;YAClC,OAAM;QACR,CAAC;QAED,+CAA+C;QAC/C,IAAI,eAAe,IAAI,CAAC,eAAe,IAAI,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC3D,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,4BAA4B,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAA;QACzF,CAAC;IACH,CAAC,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAE/F,gBAAgB;IAChB,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,4BAAG,gBAAgB,GAAI,CAAA;QAChC,CAAC;QAED,OAAO,CACL,cAAK,SAAS,EAAC,gDAAgD,YAC7D,eAAK,SAAS,EAAC,aAAa,aAC1B,cAAK,SAAS,EAAC,wFAAwF,GAAG,EAC1G,YAAG,SAAS,EAAC,oCAAoC,2BAAe,IAC5D,GACF,CACP,CAAA;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,4BAAG,QAAQ,GAAI,CAAA;QACxB,CAAC;QAED,gCAAgC;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,+CAA+C;IAC/C,IAAI,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;QACxC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,4BAAG,QAAQ,GAAI,CAAA;QACxB,CAAC;QAED,gCAAgC;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,6DAA6D;IAC7D,OAAO,4BAAG,QAAQ,GAAI,CAAA;AACxB,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,QAAQ,CACtB,SAAiC,EACjC,UAA4C,EAAE;IAE9C,SAAS,gBAAgB,CAAC,KAAQ;QAChC,OAAO,CACL,KAAC,SAAS,OAAK,OAAO,YACpB,KAAC,SAAS,OAAK,KAAK,GAAI,GACd,CACb,CAAA;IACH,CAAC;IAED,kCAAkC;IAClC,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAA;IAC1E,gBAAgB,CAAC,WAAW,GAAG,YAAY,WAAW,GAAG,CAAA;IAEzD,OAAO,gBAAgB,CAAA;AACzB,CAAC"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
'use client';
|
|
3
|
-
|
|
4
|
-
exports.ForgotPasswordForm = ForgotPasswordForm;
|
|
5
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
3
|
/**
|
|
7
4
|
* @rovela/sdk/auth/components/ForgotPasswordForm
|
|
8
5
|
*
|
|
9
6
|
* Forgot password form for requesting password reset.
|
|
10
7
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
import { useState, useCallback } from 'react';
|
|
9
|
+
import { useAuth } from '../hooks/useAuth';
|
|
13
10
|
/**
|
|
14
11
|
* Forgot password form for requesting password reset email.
|
|
15
12
|
*
|
|
@@ -22,12 +19,12 @@ const useAuth_1 = require("../hooks/useAuth");
|
|
|
22
19
|
* <ForgotPasswordForm onSuccess={() => console.log('Email sent!')} />
|
|
23
20
|
* ```
|
|
24
21
|
*/
|
|
25
|
-
function ForgotPasswordForm({ onSuccess, signInHref = '/auth/signin', className = '', }) {
|
|
26
|
-
const { requestPasswordReset } =
|
|
27
|
-
const [email, setEmail] =
|
|
28
|
-
const [isLoading, setIsLoading] =
|
|
29
|
-
const [success, setSuccess] =
|
|
30
|
-
const handleSubmit =
|
|
22
|
+
export function ForgotPasswordForm({ onSuccess, signInHref = '/auth/signin', className = '', }) {
|
|
23
|
+
const { requestPasswordReset } = useAuth();
|
|
24
|
+
const [email, setEmail] = useState('');
|
|
25
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
26
|
+
const [success, setSuccess] = useState(false);
|
|
27
|
+
const handleSubmit = useCallback(async (e) => {
|
|
31
28
|
e.preventDefault();
|
|
32
29
|
setIsLoading(true);
|
|
33
30
|
await requestPasswordReset(email);
|
|
@@ -37,8 +34,8 @@ function ForgotPasswordForm({ onSuccess, signInHref = '/auth/signin', className
|
|
|
37
34
|
}, [email, requestPasswordReset, onSuccess]);
|
|
38
35
|
// Show success state
|
|
39
36
|
if (success) {
|
|
40
|
-
return ((
|
|
37
|
+
return (_jsx("div", { className: `w-full max-w-md ${className}`, children: _jsxs("div", { className: "rounded-md bg-green-50 p-6 text-center", children: [_jsx("svg", { className: "mx-auto h-12 w-12 text-green-500", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" }) }), _jsx("h3", { className: "mt-4 text-lg font-medium text-green-800", children: "Check your email" }), _jsx("p", { className: "mt-2 text-sm text-green-600", children: "If an account exists with that email, we've sent you a link to reset your password." }), _jsx("a", { href: signInHref, className: "mt-4 inline-block text-sm font-medium text-green-700 hover:text-green-800", children: "Back to sign in" })] }) }));
|
|
41
38
|
}
|
|
42
|
-
return ((
|
|
39
|
+
return (_jsxs("div", { className: `w-full max-w-md ${className}`, children: [_jsxs("div", { className: "mb-6 text-center", children: [_jsx("h2", { className: "text-xl font-semibold text-foreground", children: "Forgot your password?" }), _jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: "Enter your email address and we'll send you a link to reset your password." })] }), _jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "forgot-email", className: "block text-sm font-medium text-foreground", children: "Email" }), _jsx("input", { id: "forgot-email", type: "email", value: email, onChange: (e) => setEmail(e.target.value), required: true, autoComplete: "email", className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary", placeholder: "you@example.com" })] }), _jsx("button", { type: "submit", disabled: isLoading, className: "w-full rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", children: isLoading ? 'Sending...' : 'Send reset link' }), _jsxs("p", { className: "text-center text-sm text-muted-foreground", children: ["Remember your password?", ' ', _jsx("a", { href: signInHref, className: "font-medium text-primary hover:text-primary/80", children: "Sign in" })] })] })] }));
|
|
43
40
|
}
|
|
44
41
|
//# sourceMappingURL=ForgotPasswordForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForgotPasswordForm.js","sourceRoot":"","sources":["../../../src/auth/components/ForgotPasswordForm.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ForgotPasswordForm.js","sourceRoot":"","sources":["../../../src/auth/components/ForgotPasswordForm.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,SAAS,EACT,UAAU,GAAG,cAAc,EAC3B,SAAS,GAAG,EAAE,GACU;IACxB,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,EAAE,CAAA;IAE1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,CAAkB,EAAE,EAAE;QAC5D,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,YAAY,CAAC,IAAI,CAAC,CAAA;QAElB,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAEjC,YAAY,CAAC,KAAK,CAAC,CAAA;QACnB,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,SAAS,EAAE,EAAE,CAAA;IACf,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC,CAAA;IAE5C,qBAAqB;IACrB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CACL,cAAK,SAAS,EAAE,mBAAmB,SAAS,EAAE,YAC5C,eAAK,SAAS,EAAC,wCAAwC,aACrD,cACE,SAAS,EAAC,kCAAkC,EAC5C,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EACnB,MAAM,EAAC,cAAc,YAErB,eACE,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,CAAC,EACd,CAAC,EAAC,sGAAsG,GACxG,GACE,EACN,aAAI,SAAS,EAAC,yCAAyC,iCAElD,EACL,YAAG,SAAS,EAAC,6BAA6B,oGAEtC,EACJ,YACE,IAAI,EAAE,UAAU,EAChB,SAAS,EAAC,2EAA2E,gCAGnF,IACA,GACF,CACP,CAAA;IACH,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAE,mBAAmB,SAAS,EAAE,aAC5C,eAAK,SAAS,EAAC,kBAAkB,aAC/B,aAAI,SAAS,EAAC,uCAAuC,sCAEhD,EACL,YAAG,SAAS,EAAC,oCAAoC,2FAE7C,IACA,EAEN,gBAAM,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAC,WAAW,aAEjD,0BACE,gBACE,OAAO,EAAC,cAAc,EACtB,SAAS,EAAC,2CAA2C,sBAG/C,EACR,gBACE,EAAE,EAAC,cAAc,EACjB,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,QAAQ,QACR,YAAY,EAAC,OAAO,EACpB,SAAS,EAAC,4LAA4L,EACtM,WAAW,EAAC,iBAAiB,GAC7B,IACE,EAGN,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAC,+NAA+N,YAExO,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,GACtC,EAGT,aAAG,SAAS,EAAC,2CAA2C,wCAC9B,GAAG,EAC3B,YAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAC,gDAAgD,wBAE3E,IACF,IACC,IACH,CACP,CAAA;AACH,CAAC"}
|