@rovela-ai/sdk 0.1.18 → 0.1.20
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.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +16 -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/CategoryForm.d.ts +30 -0
- package/dist/admin/components/CategoryForm.d.ts.map +1 -0
- package/dist/admin/components/CategoryForm.js +153 -0
- package/dist/admin/components/CategoryForm.js.map +1 -0
- package/dist/admin/components/CategorySelect.d.ts +32 -0
- package/dist/admin/components/CategorySelect.d.ts.map +1 -0
- package/dist/admin/components/CategorySelect.js +148 -0
- package/dist/admin/components/CategorySelect.js.map +1 -0
- 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.d.ts +2 -2
- package/dist/admin/components/ProductForm.d.ts.map +1 -1
- package/dist/admin/components/ProductForm.js +140 -27
- 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/SEOPreview.d.ts +32 -0
- package/dist/admin/components/SEOPreview.d.ts.map +1 -0
- package/dist/admin/components/SEOPreview.js +30 -0
- package/dist/admin/components/SEOPreview.js.map +1 -0
- 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/TagInput.d.ts +29 -0
- package/dist/admin/components/TagInput.d.ts.map +1 -0
- package/dist/admin/components/TagInput.js +73 -0
- package/dist/admin/components/TagInput.js.map +1 -0
- package/dist/admin/components/VariantManager.d.ts +42 -0
- package/dist/admin/components/VariantManager.d.ts.map +1 -0
- package/dist/admin/components/VariantManager.js +175 -0
- package/dist/admin/components/VariantManager.js.map +1 -0
- package/dist/admin/components/index.d.ts +5 -0
- package/dist/admin/components/index.d.ts.map +1 -1
- package/dist/admin/components/index.js +27 -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.d.ts +2 -0
- package/dist/admin/hooks/index.d.ts.map +1 -1
- package/dist/admin/hooks/index.js +5 -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/useAdminCategories.d.ts +36 -0
- package/dist/admin/hooks/useAdminCategories.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminCategories.js +217 -0
- package/dist/admin/hooks/useAdminCategories.js.map +1 -0
- 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.d.ts +3 -2
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +17 -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/StoreSettingsProvider.d.ts +104 -0
- package/dist/core/StoreSettingsProvider.d.ts.map +1 -0
- package/dist/core/StoreSettingsProvider.js +195 -0
- package/dist/core/StoreSettingsProvider.js.map +1 -0
- package/dist/core/api/index.d.ts +7 -0
- package/dist/core/api/index.d.ts.map +1 -0
- package/dist/core/api/index.js +7 -0
- package/dist/core/api/index.js.map +1 -0
- package/dist/core/api/settings.d.ts +42 -0
- package/dist/core/api/settings.d.ts.map +1 -0
- package/dist/core/api/settings.js +74 -0
- package/dist/core/api/settings.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +14 -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 -30
|
@@ -1,25 +1,15 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/admin/server
|
|
4
3
|
*
|
|
5
4
|
* Server-side admin functions.
|
|
6
5
|
* Re-exports from admin-service for cleaner imports.
|
|
7
6
|
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.countAdmins = exports.adminEmailExists = exports.updateAdminPassword = exports.updateAdmin = exports.findAdminById = exports.findAdminByEmail = exports.findAdminForSession = exports.createAdmin = exports.authenticateAdmin = void 0;
|
|
10
7
|
// =============================================================================
|
|
11
8
|
// Admin Service
|
|
12
9
|
// =============================================================================
|
|
13
|
-
|
|
10
|
+
export {
|
|
14
11
|
// Authentication
|
|
15
|
-
|
|
12
|
+
authenticateAdmin,
|
|
16
13
|
// CRUD
|
|
17
|
-
|
|
18
|
-
Object.defineProperty(exports, "findAdminForSession", { enumerable: true, get: function () { return admin_service_1.findAdminForSession; } });
|
|
19
|
-
Object.defineProperty(exports, "findAdminByEmail", { enumerable: true, get: function () { return admin_service_1.findAdminByEmail; } });
|
|
20
|
-
Object.defineProperty(exports, "findAdminById", { enumerable: true, get: function () { return admin_service_1.findAdminById; } });
|
|
21
|
-
Object.defineProperty(exports, "updateAdmin", { enumerable: true, get: function () { return admin_service_1.updateAdmin; } });
|
|
22
|
-
Object.defineProperty(exports, "updateAdminPassword", { enumerable: true, get: function () { return admin_service_1.updateAdminPassword; } });
|
|
23
|
-
Object.defineProperty(exports, "adminEmailExists", { enumerable: true, get: function () { return admin_service_1.adminEmailExists; } });
|
|
24
|
-
Object.defineProperty(exports, "countAdmins", { enumerable: true, get: function () { return admin_service_1.countAdmins; } });
|
|
14
|
+
createAdmin, findAdminForSession, findAdminByEmail, findAdminById, updateAdmin, updateAdminPassword, adminEmailExists, countAdmins, } from './admin-service';
|
|
25
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin/server/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin/server/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,OAAO;AACL,iBAAiB;AACjB,iBAAiB;AACjB,OAAO;AACP,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,GAKZ,MAAM,iBAAiB,CAAA"}
|
package/dist/admin/types.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/admin/types
|
|
4
3
|
*
|
|
@@ -7,5 +6,5 @@
|
|
|
7
6
|
* PATTERN: Admin-specific types only. Shared types are imported from core.
|
|
8
7
|
* This ensures consistency across the SDK and avoids duplication.
|
|
9
8
|
*/
|
|
10
|
-
|
|
9
|
+
export {};
|
|
11
10
|
//# sourceMappingURL=types.js.map
|
package/dist/admin/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
package/dist/auth/api/auth.js
CHANGED
|
@@ -1,18 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/auth/api/auth
|
|
4
3
|
*
|
|
5
4
|
* NextAuth route handler helper.
|
|
6
5
|
* Use this to create the [...nextauth] route handler.
|
|
7
6
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.createAuthOptions = void 0;
|
|
13
|
-
exports.createAuthHandlers = createAuthHandlers;
|
|
14
|
-
const next_auth_1 = __importDefault(require("next-auth"));
|
|
15
|
-
const config_1 = require("../config");
|
|
7
|
+
import NextAuth from 'next-auth';
|
|
8
|
+
import { createAuthOptions } from '../config';
|
|
16
9
|
/**
|
|
17
10
|
* Create NextAuth route handlers for Next.js App Router.
|
|
18
11
|
*
|
|
@@ -38,9 +31,9 @@ const config_1 = require("../config");
|
|
|
38
31
|
* })
|
|
39
32
|
* ```
|
|
40
33
|
*/
|
|
41
|
-
function createAuthHandlers(options = {}) {
|
|
42
|
-
const authOptions =
|
|
43
|
-
const handler = (
|
|
34
|
+
export function createAuthHandlers(options = {}) {
|
|
35
|
+
const authOptions = createAuthOptions(options);
|
|
36
|
+
const handler = NextAuth(authOptions);
|
|
44
37
|
return {
|
|
45
38
|
GET: handler,
|
|
46
39
|
POST: handler,
|
|
@@ -62,6 +55,5 @@ function createAuthHandlers(options = {}) {
|
|
|
62
55
|
* }
|
|
63
56
|
* ```
|
|
64
57
|
*/
|
|
65
|
-
|
|
66
|
-
Object.defineProperty(exports, "createAuthOptions", { enumerable: true, get: function () { return config_2.createAuthOptions; } });
|
|
58
|
+
export { createAuthOptions } from '../config';
|
|
67
59
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/auth/api/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/auth/api/auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAA6B,EAAE;IAChE,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;IAErC,OAAO;QACL,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,OAAO;KACd,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/auth/api/forgot-password
|
|
4
3
|
*
|
|
5
4
|
* Forgot password (request reset) API route handler.
|
|
6
5
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const server_1 = require("next/server");
|
|
10
|
-
const password_reset_service_1 = require("../server/password-reset-service");
|
|
6
|
+
import { NextResponse } from 'next/server';
|
|
7
|
+
import { requestPasswordReset } from '../server/password-reset-service';
|
|
11
8
|
/**
|
|
12
9
|
* Validate email format.
|
|
13
10
|
*/
|
|
@@ -42,27 +39,27 @@ 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
52
|
// Request password reset - always returns success for security
|
|
56
|
-
await
|
|
53
|
+
await requestPasswordReset(email);
|
|
57
54
|
// Always return success message to prevent email enumeration
|
|
58
|
-
return
|
|
55
|
+
return NextResponse.json({
|
|
59
56
|
success: true,
|
|
60
57
|
message: 'If an account exists with this email, a password reset link has been sent.',
|
|
61
58
|
});
|
|
62
59
|
}
|
|
63
60
|
catch (error) {
|
|
64
61
|
console.error('[Auth Forgot Password] Error:', error);
|
|
65
|
-
return
|
|
62
|
+
return NextResponse.json({ error: 'Failed to process request. Please try again.', code: 'VALIDATION_ERROR' }, { status: 500 });
|
|
66
63
|
}
|
|
67
64
|
}
|
|
68
65
|
//# sourceMappingURL=forgot-password.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forgot-password.js","sourceRoot":"","sources":["../../../src/auth/api/forgot-password.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"forgot-password.js","sourceRoot":"","sources":["../../../src/auth/api/forgot-password.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAGvE;;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,+DAA+D;QAC/D,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAEjC,6DAA6D;QAC7D,OAAO,YAAY,CAAC,IAAI,CAAC;YACvB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,4EAA4E;SACtF,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAA;QACrD,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,KAAK,EAAE,8CAA8C,EAAE,IAAI,EAAE,kBAAkB,EAAE,EACnF,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;IACH,CAAC;AACH,CAAC"}
|
package/dist/auth/api/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @rovela/sdk/auth/api
|
|
4
3
|
*
|
|
@@ -26,27 +25,16 @@
|
|
|
26
25
|
* export { GET, POST } from '@rovela/sdk/auth/api/reset-password'
|
|
27
26
|
* ```
|
|
28
27
|
*/
|
|
29
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.resetPasswordPOST = exports.resetPasswordGET = exports.forgotPasswordPOST = exports.resendVerificationPOST = exports.verifyEmailPOST = exports.verifyEmailGET = exports.registerPOST = exports.createAuthOptions = exports.createAuthHandlers = void 0;
|
|
31
28
|
// NextAuth handler
|
|
32
|
-
|
|
33
|
-
Object.defineProperty(exports, "createAuthHandlers", { enumerable: true, get: function () { return auth_1.createAuthHandlers; } });
|
|
34
|
-
Object.defineProperty(exports, "createAuthOptions", { enumerable: true, get: function () { return auth_1.createAuthOptions; } });
|
|
29
|
+
export { createAuthHandlers, createAuthOptions } from './auth';
|
|
35
30
|
// Registration
|
|
36
|
-
|
|
37
|
-
Object.defineProperty(exports, "registerPOST", { enumerable: true, get: function () { return register_1.POST; } });
|
|
31
|
+
export { POST as registerPOST } from './register';
|
|
38
32
|
// Email verification
|
|
39
|
-
|
|
40
|
-
Object.defineProperty(exports, "verifyEmailGET", { enumerable: true, get: function () { return verify_email_1.GET; } });
|
|
41
|
-
Object.defineProperty(exports, "verifyEmailPOST", { enumerable: true, get: function () { return verify_email_1.POST; } });
|
|
33
|
+
export { GET as verifyEmailGET, POST as verifyEmailPOST } from './verify-email';
|
|
42
34
|
// Resend verification
|
|
43
|
-
|
|
44
|
-
Object.defineProperty(exports, "resendVerificationPOST", { enumerable: true, get: function () { return resend_verification_1.POST; } });
|
|
35
|
+
export { POST as resendVerificationPOST } from './resend-verification';
|
|
45
36
|
// Password reset request
|
|
46
|
-
|
|
47
|
-
Object.defineProperty(exports, "forgotPasswordPOST", { enumerable: true, get: function () { return forgot_password_1.POST; } });
|
|
37
|
+
export { POST as forgotPasswordPOST } from './forgot-password';
|
|
48
38
|
// Password reset execution
|
|
49
|
-
|
|
50
|
-
Object.defineProperty(exports, "resetPasswordGET", { enumerable: true, get: function () { return reset_password_1.GET; } });
|
|
51
|
-
Object.defineProperty(exports, "resetPasswordPOST", { enumerable: true, get: function () { return reset_password_1.POST; } });
|
|
39
|
+
export { GET as resetPasswordGET, POST as resetPasswordPOST } from './reset-password';
|
|
52
40
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/api/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,mBAAmB;AACnB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAE9D,eAAe;AACf,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,YAAY,CAAA;AAEjD,qBAAqB;AACrB,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE/E,sBAAsB;AACtB,OAAO,EAAE,IAAI,IAAI,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAEtE,yBAAyB;AACzB,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE9D,2BAA2B;AAC3B,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -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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"}
|