@rovela-ai/sdk 0.1.2 → 0.1.4
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.d.ts +32 -0
- package/dist/admin/api/auth.d.ts.map +1 -0
- package/dist/admin/api/auth.js +43 -0
- package/dist/admin/api/auth.js.map +1 -0
- package/dist/admin/api/categories.d.ts +68 -0
- package/dist/admin/api/categories.d.ts.map +1 -0
- package/dist/admin/api/categories.js +247 -0
- package/dist/admin/api/categories.js.map +1 -0
- package/dist/admin/api/customers.d.ts +41 -0
- package/dist/admin/api/customers.d.ts.map +1 -0
- package/dist/admin/api/customers.js +113 -0
- package/dist/admin/api/customers.js.map +1 -0
- package/dist/admin/api/index.d.ts +56 -0
- package/dist/admin/api/index.d.ts.map +1 -0
- package/dist/admin/api/index.js +87 -0
- package/dist/admin/api/index.js.map +1 -0
- package/dist/admin/api/orders.d.ts +59 -0
- package/dist/admin/api/orders.d.ts.map +1 -0
- package/dist/admin/api/orders.js +209 -0
- package/dist/admin/api/orders.js.map +1 -0
- package/dist/admin/api/products.d.ts +103 -0
- package/dist/admin/api/products.d.ts.map +1 -0
- package/dist/admin/api/products.js +329 -0
- package/dist/admin/api/products.js.map +1 -0
- package/dist/admin/api/refund.d.ts +29 -0
- package/dist/admin/api/refund.d.ts.map +1 -0
- package/dist/admin/api/refund.js +136 -0
- package/dist/admin/api/refund.js.map +1 -0
- package/dist/admin/api/stats.d.ts +40 -0
- package/dist/admin/api/stats.d.ts.map +1 -0
- package/dist/admin/api/stats.js +74 -0
- package/dist/admin/api/stats.js.map +1 -0
- package/dist/admin/components/AdminGuard.d.ts +40 -0
- package/dist/admin/components/AdminGuard.d.ts.map +1 -0
- package/dist/admin/components/AdminGuard.js +97 -0
- package/dist/admin/components/AdminGuard.js.map +1 -0
- package/dist/admin/components/AdminHeader.d.ts +18 -0
- package/dist/admin/components/AdminHeader.d.ts.map +1 -0
- package/dist/admin/components/AdminHeader.js +33 -0
- package/dist/admin/components/AdminHeader.js.map +1 -0
- package/dist/admin/components/AdminLayout.d.ts +50 -0
- package/dist/admin/components/AdminLayout.d.ts.map +1 -0
- package/dist/admin/components/AdminLayout.js +46 -0
- package/dist/admin/components/AdminLayout.js.map +1 -0
- package/dist/admin/components/AdminLoginForm.d.ts +18 -0
- package/dist/admin/components/AdminLoginForm.d.ts.map +1 -0
- package/dist/admin/components/AdminLoginForm.js +58 -0
- package/dist/admin/components/AdminLoginForm.js.map +1 -0
- package/dist/admin/components/AdminNav.d.ts +34 -0
- package/dist/admin/components/AdminNav.d.ts.map +1 -0
- package/dist/admin/components/AdminNav.js +61 -0
- package/dist/admin/components/AdminNav.js.map +1 -0
- package/dist/admin/components/InventoryEditor.d.ts +15 -0
- package/dist/admin/components/InventoryEditor.d.ts.map +1 -0
- package/dist/admin/components/InventoryEditor.js +83 -0
- package/dist/admin/components/InventoryEditor.js.map +1 -0
- package/dist/admin/components/LowStockAlert.d.ts +11 -0
- package/dist/admin/components/LowStockAlert.d.ts.map +1 -0
- package/dist/admin/components/LowStockAlert.js +35 -0
- package/dist/admin/components/LowStockAlert.js.map +1 -0
- package/dist/admin/components/OrderDetails.d.ts +14 -0
- package/dist/admin/components/OrderDetails.d.ts.map +1 -0
- package/dist/admin/components/OrderDetails.js +94 -0
- package/dist/admin/components/OrderDetails.js.map +1 -0
- package/dist/admin/components/OrderTable.d.ts +13 -0
- package/dist/admin/components/OrderTable.d.ts.map +1 -0
- package/dist/admin/components/OrderTable.js +89 -0
- package/dist/admin/components/OrderTable.js.map +1 -0
- package/dist/admin/components/ProductForm.d.ts +18 -0
- package/dist/admin/components/ProductForm.d.ts.map +1 -0
- package/dist/admin/components/ProductForm.js +127 -0
- package/dist/admin/components/ProductForm.js.map +1 -0
- package/dist/admin/components/ProductTable.d.ts +13 -0
- package/dist/admin/components/ProductTable.d.ts.map +1 -0
- package/dist/admin/components/ProductTable.js +81 -0
- package/dist/admin/components/ProductTable.js.map +1 -0
- package/dist/admin/components/RecentOrders.d.ts +11 -0
- package/dist/admin/components/RecentOrders.d.ts.map +1 -0
- package/dist/admin/components/RecentOrders.js +58 -0
- package/dist/admin/components/RecentOrders.js.map +1 -0
- package/dist/admin/components/RefundDialog.d.ts +17 -0
- package/dist/admin/components/RefundDialog.d.ts.map +1 -0
- package/dist/admin/components/RefundDialog.js +86 -0
- package/dist/admin/components/RefundDialog.js.map +1 -0
- package/dist/admin/components/StatsCards.d.ts +23 -0
- package/dist/admin/components/StatsCards.d.ts.map +1 -0
- package/dist/admin/components/StatsCards.js +82 -0
- package/dist/admin/components/StatsCards.js.map +1 -0
- package/dist/admin/components/StoreSettings.d.ts +14 -0
- package/dist/admin/components/StoreSettings.d.ts.map +1 -0
- package/dist/admin/components/StoreSettings.js +88 -0
- package/dist/admin/components/StoreSettings.js.map +1 -0
- package/dist/admin/components/index.d.ts +21 -0
- package/dist/admin/components/index.d.ts.map +1 -0
- package/dist/admin/components/index.js +57 -0
- package/dist/admin/components/index.js.map +1 -0
- package/dist/admin/config.d.ts +74 -0
- package/dist/admin/config.d.ts.map +1 -0
- package/dist/admin/config.js +229 -0
- package/dist/admin/config.js.map +1 -0
- package/dist/admin/hooks/index.d.ts +10 -0
- package/dist/admin/hooks/index.d.ts.map +1 -0
- package/dist/admin/hooks/index.js +17 -0
- package/dist/admin/hooks/index.js.map +1 -0
- package/dist/admin/hooks/useAdminOrders.d.ts +41 -0
- package/dist/admin/hooks/useAdminOrders.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminOrders.js +191 -0
- package/dist/admin/hooks/useAdminOrders.js.map +1 -0
- package/dist/admin/hooks/useAdminProducts.d.ts +39 -0
- package/dist/admin/hooks/useAdminProducts.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminProducts.js +235 -0
- package/dist/admin/hooks/useAdminProducts.js.map +1 -0
- package/dist/admin/hooks/useAdminStats.d.ts +50 -0
- package/dist/admin/hooks/useAdminStats.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminStats.js +111 -0
- package/dist/admin/hooks/useAdminStats.js.map +1 -0
- package/dist/admin/index.d.ts +63 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +148 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/server/admin-service.d.ts +130 -0
- package/dist/admin/server/admin-service.d.ts.map +1 -0
- package/dist/admin/server/admin-service.js +298 -0
- package/dist/admin/server/admin-service.js.map +1 -0
- package/dist/admin/server/index.d.ts +8 -0
- package/dist/admin/server/index.d.ts.map +1 -0
- package/dist/admin/server/index.js +25 -0
- package/dist/admin/server/index.js.map +1 -0
- package/dist/admin/types.d.ts +549 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +11 -0
- package/dist/admin/types.js.map +1 -0
- package/dist/auth/api/auth.d.ts +54 -0
- package/dist/auth/api/auth.d.ts.map +1 -0
- package/dist/auth/api/auth.js +67 -0
- package/dist/auth/api/auth.js.map +1 -0
- package/dist/auth/api/forgot-password.d.ts +41 -0
- package/dist/auth/api/forgot-password.d.ts.map +1 -0
- package/dist/auth/api/forgot-password.js +68 -0
- package/dist/auth/api/forgot-password.js.map +1 -0
- package/dist/auth/api/index.d.ts +34 -0
- package/dist/auth/api/index.d.ts.map +1 -0
- package/dist/auth/api/index.js +52 -0
- package/dist/auth/api/index.js.map +1 -0
- package/dist/auth/api/register.d.ts +41 -0
- package/dist/auth/api/register.d.ts.map +1 -0
- package/dist/auth/api/register.js +93 -0
- package/dist/auth/api/register.js.map +1 -0
- package/dist/auth/api/resend-verification.d.ts +41 -0
- package/dist/auth/api/resend-verification.d.ts.map +1 -0
- package/dist/auth/api/resend-verification.js +71 -0
- package/dist/auth/api/resend-verification.js.map +1 -0
- package/dist/auth/api/reset-password.d.ts +67 -0
- package/dist/auth/api/reset-password.d.ts.map +1 -0
- package/dist/auth/api/reset-password.js +110 -0
- package/dist/auth/api/reset-password.js.map +1 -0
- package/dist/auth/api/verify-email.d.ts +47 -0
- package/dist/auth/api/verify-email.d.ts.map +1 -0
- package/dist/auth/api/verify-email.js +94 -0
- package/dist/auth/api/verify-email.js.map +1 -0
- package/dist/auth/components/AuthGuard.d.ts +52 -0
- package/dist/auth/components/AuthGuard.d.ts.map +1 -0
- package/dist/auth/components/AuthGuard.js +113 -0
- package/dist/auth/components/AuthGuard.js.map +1 -0
- package/dist/auth/components/ForgotPasswordForm.d.ts +15 -0
- package/dist/auth/components/ForgotPasswordForm.d.ts.map +1 -0
- package/dist/auth/components/ForgotPasswordForm.js +44 -0
- package/dist/auth/components/ForgotPasswordForm.js.map +1 -0
- package/dist/auth/components/ResetPasswordForm.d.ts +18 -0
- package/dist/auth/components/ResetPasswordForm.d.ts.map +1 -0
- package/dist/auth/components/ResetPasswordForm.js +88 -0
- package/dist/auth/components/ResetPasswordForm.js.map +1 -0
- package/dist/auth/components/SignInForm.d.ts +21 -0
- package/dist/auth/components/SignInForm.d.ts.map +1 -0
- package/dist/auth/components/SignInForm.js +63 -0
- package/dist/auth/components/SignInForm.js.map +1 -0
- package/dist/auth/components/SignUpForm.d.ts +18 -0
- package/dist/auth/components/SignUpForm.d.ts.map +1 -0
- package/dist/auth/components/SignUpForm.js +79 -0
- package/dist/auth/components/SignUpForm.js.map +1 -0
- package/dist/auth/components/UserMenu.d.ts +18 -0
- package/dist/auth/components/UserMenu.d.ts.map +1 -0
- package/dist/auth/components/UserMenu.js +75 -0
- package/dist/auth/components/UserMenu.js.map +1 -0
- package/dist/auth/components/VerifyEmailNotice.d.ts +20 -0
- package/dist/auth/components/VerifyEmailNotice.d.ts.map +1 -0
- package/dist/auth/components/VerifyEmailNotice.js +59 -0
- package/dist/auth/components/VerifyEmailNotice.js.map +1 -0
- package/dist/auth/components/index.d.ts +13 -0
- package/dist/auth/components/index.d.ts.map +1 -0
- package/dist/auth/components/index.js +24 -0
- package/dist/auth/components/index.js.map +1 -0
- package/dist/auth/config.d.ts +42 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +174 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/hooks/index.d.ts +7 -0
- package/dist/auth/hooks/index.d.ts.map +1 -0
- package/dist/auth/hooks/index.js +11 -0
- package/dist/auth/hooks/index.js.map +1 -0
- package/dist/auth/index.d.ts +54 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +88 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/server/customer-service.d.ts +138 -0
- package/dist/auth/server/customer-service.d.ts.map +1 -0
- package/dist/auth/server/customer-service.js +309 -0
- package/dist/auth/server/customer-service.js.map +1 -0
- package/dist/auth/server/email-sender.d.ts +64 -0
- package/dist/auth/server/email-sender.d.ts.map +1 -0
- package/dist/auth/server/email-sender.js +112 -0
- package/dist/auth/server/email-sender.js.map +1 -0
- package/dist/auth/server/index.d.ts +13 -0
- package/dist/auth/server/index.d.ts.map +1 -0
- package/dist/auth/server/index.js +48 -0
- package/dist/auth/server/index.js.map +1 -0
- package/dist/auth/server/password-reset-service.d.ts +86 -0
- package/dist/auth/server/password-reset-service.d.ts.map +1 -0
- package/dist/auth/server/password-reset-service.js +236 -0
- package/dist/auth/server/password-reset-service.js.map +1 -0
- package/dist/auth/server/password.d.ts +58 -0
- package/dist/auth/server/password.d.ts.map +1 -0
- package/dist/auth/server/password.js +94 -0
- package/dist/auth/server/password.js.map +1 -0
- package/dist/auth/server/verification-service.d.ts +87 -0
- package/dist/auth/server/verification-service.d.ts.map +1 -0
- package/dist/auth/server/verification-service.js +268 -0
- package/dist/auth/server/verification-service.js.map +1 -0
- package/dist/auth/types.d.ts +305 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +8 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cart/CartProvider.d.ts +65 -0
- package/dist/cart/CartProvider.d.ts.map +1 -0
- package/dist/cart/CartProvider.js +101 -0
- package/dist/cart/CartProvider.js.map +1 -0
- package/dist/cart/components/AddToCartButton.d.ts +77 -0
- package/dist/cart/components/AddToCartButton.d.ts.map +1 -0
- package/dist/cart/components/AddToCartButton.js +124 -0
- package/dist/cart/components/AddToCartButton.js.map +1 -0
- package/dist/cart/components/CartDrawer.d.ts +71 -0
- package/dist/cart/components/CartDrawer.d.ts.map +1 -0
- package/dist/cart/components/CartDrawer.js +108 -0
- package/dist/cart/components/CartDrawer.js.map +1 -0
- package/dist/cart/components/CartIcon.d.ts +36 -0
- package/dist/cart/components/CartIcon.d.ts.map +1 -0
- package/dist/cart/components/CartIcon.js +70 -0
- package/dist/cart/components/CartIcon.js.map +1 -0
- package/dist/cart/components/CartItem.d.ts +52 -0
- package/dist/cart/components/CartItem.d.ts.map +1 -0
- package/dist/cart/components/CartItem.js +55 -0
- package/dist/cart/components/CartItem.js.map +1 -0
- package/dist/cart/components/CartSummary.d.ts +43 -0
- package/dist/cart/components/CartSummary.d.ts.map +1 -0
- package/dist/cart/components/CartSummary.js +58 -0
- package/dist/cart/components/CartSummary.js.map +1 -0
- package/dist/cart/components/QuantitySelector.d.ts +39 -0
- package/dist/cart/components/QuantitySelector.d.ts.map +1 -0
- package/dist/cart/components/QuantitySelector.js +87 -0
- package/dist/cart/components/QuantitySelector.js.map +1 -0
- package/dist/cart/components/index.d.ts +18 -0
- package/dist/cart/components/index.d.ts.map +1 -0
- package/dist/cart/components/index.js +21 -0
- package/dist/cart/components/index.js.map +1 -0
- package/dist/cart/index.d.ts +109 -0
- package/dist/cart/index.d.ts.map +1 -0
- package/dist/cart/index.js +129 -0
- package/dist/cart/index.js.map +1 -0
- package/dist/cart/store.d.ts +101 -0
- package/dist/cart/store.d.ts.map +1 -0
- package/dist/cart/store.js +207 -0
- package/dist/cart/store.js.map +1 -0
- package/dist/checkout/api/checkout.d.ts +31 -0
- package/dist/checkout/api/checkout.d.ts.map +1 -0
- package/dist/checkout/api/checkout.js +103 -0
- package/dist/checkout/api/checkout.js.map +1 -0
- package/dist/checkout/api/index.d.ts +8 -0
- package/dist/checkout/api/index.d.ts.map +1 -0
- package/dist/checkout/api/index.js +13 -0
- package/dist/checkout/api/index.js.map +1 -0
- package/dist/checkout/api/webhook.d.ts +30 -0
- package/dist/checkout/api/webhook.d.ts.map +1 -0
- package/dist/checkout/api/webhook.js +58 -0
- package/dist/checkout/api/webhook.js.map +1 -0
- package/dist/checkout/components/CheckoutButton.d.ts +44 -0
- package/dist/checkout/components/CheckoutButton.d.ts.map +1 -0
- package/dist/checkout/components/CheckoutButton.js +97 -0
- package/dist/checkout/components/CheckoutButton.js.map +1 -0
- package/dist/checkout/components/CheckoutSuccess.d.ts +29 -0
- package/dist/checkout/components/CheckoutSuccess.d.ts.map +1 -0
- package/dist/checkout/components/CheckoutSuccess.js +60 -0
- package/dist/checkout/components/CheckoutSuccess.js.map +1 -0
- package/dist/checkout/components/OrderSummary.d.ts +37 -0
- package/dist/checkout/components/OrderSummary.d.ts.map +1 -0
- package/dist/checkout/components/OrderSummary.js +70 -0
- package/dist/checkout/components/OrderSummary.js.map +1 -0
- package/dist/checkout/components/ShippingForm.d.ts +30 -0
- package/dist/checkout/components/ShippingForm.d.ts.map +1 -0
- package/dist/checkout/components/ShippingForm.js +125 -0
- package/dist/checkout/components/ShippingForm.js.map +1 -0
- package/dist/checkout/components/index.d.ts +10 -0
- package/dist/checkout/components/index.d.ts.map +1 -0
- package/dist/checkout/components/index.js +17 -0
- package/dist/checkout/components/index.js.map +1 -0
- package/dist/checkout/hooks/index.d.ts +7 -0
- package/dist/checkout/hooks/index.d.ts.map +1 -0
- package/dist/checkout/hooks/index.js +12 -0
- package/dist/checkout/hooks/index.js.map +1 -0
- package/dist/checkout/hooks/useCheckout.d.ts +61 -0
- package/dist/checkout/hooks/useCheckout.d.ts.map +1 -0
- package/dist/checkout/hooks/useCheckout.js +174 -0
- package/dist/checkout/hooks/useCheckout.js.map +1 -0
- package/dist/checkout/index.d.ts +111 -0
- package/dist/checkout/index.d.ts.map +1 -0
- package/dist/checkout/index.js +148 -0
- package/dist/checkout/index.js.map +1 -0
- package/dist/checkout/server/create-checkout-session.d.ts +69 -0
- package/dist/checkout/server/create-checkout-session.d.ts.map +1 -0
- package/dist/checkout/server/create-checkout-session.js +190 -0
- package/dist/checkout/server/create-checkout-session.js.map +1 -0
- package/dist/checkout/server/handle-webhook.d.ts +35 -0
- package/dist/checkout/server/handle-webhook.d.ts.map +1 -0
- package/dist/checkout/server/handle-webhook.js +279 -0
- package/dist/checkout/server/handle-webhook.js.map +1 -0
- package/dist/checkout/server/index.d.ts +10 -0
- package/dist/checkout/server/index.d.ts.map +1 -0
- package/dist/checkout/server/index.js +19 -0
- package/dist/checkout/server/index.js.map +1 -0
- package/dist/checkout/server/order-service.d.ts +43 -0
- package/dist/checkout/server/order-service.d.ts.map +1 -0
- package/dist/checkout/server/order-service.js +196 -0
- package/dist/checkout/server/order-service.js.map +1 -0
- package/dist/checkout/stripe/client.d.ts +72 -0
- package/dist/checkout/stripe/client.d.ts.map +1 -0
- package/dist/checkout/stripe/client.js +189 -0
- package/dist/checkout/stripe/client.js.map +1 -0
- package/dist/checkout/stripe/index.d.ts +7 -0
- package/dist/checkout/stripe/index.d.ts.map +1 -0
- package/dist/checkout/stripe/index.js +21 -0
- package/dist/checkout/stripe/index.js.map +1 -0
- package/dist/checkout/types.d.ts +263 -0
- package/dist/checkout/types.d.ts.map +1 -0
- package/dist/checkout/types.js +9 -0
- package/dist/checkout/types.js.map +1 -0
- package/dist/core/config.d.ts +296 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +162 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/db/client.d.ts +69 -0
- package/dist/core/db/client.d.ts.map +1 -0
- package/dist/core/db/client.js +202 -0
- package/dist/core/db/client.js.map +1 -0
- package/dist/core/db/index.d.ts +11 -0
- package/dist/core/db/index.d.ts.map +1 -0
- package/dist/core/db/index.js +109 -0
- package/dist/core/db/index.js.map +1 -0
- package/dist/core/db/queries.d.ts +627 -0
- package/dist/core/db/queries.d.ts.map +1 -0
- package/dist/core/db/queries.js +730 -0
- package/dist/core/db/queries.js.map +1 -0
- package/dist/core/db/schema.d.ts +1628 -0
- package/dist/core/db/schema.d.ts.map +1 -0
- package/dist/core/db/schema.js +262 -0
- package/dist/core/db/schema.js.map +1 -0
- package/dist/core/index.d.ts +20 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +71 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/server/index.d.ts +17 -0
- package/dist/core/server/index.d.ts.map +1 -0
- package/dist/core/server/index.js +96 -0
- package/dist/core/server/index.js.map +1 -0
- package/dist/core/types.d.ts +230 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils.d.ts +153 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +356 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/emails/config.d.ts +42 -0
- package/dist/emails/config.d.ts.map +1 -0
- package/dist/emails/config.js +89 -0
- package/dist/emails/config.js.map +1 -0
- package/dist/emails/index.d.ts +85 -0
- package/dist/emails/index.d.ts.map +1 -0
- package/dist/emails/index.js +170 -0
- package/dist/emails/index.js.map +1 -0
- package/dist/emails/send/auth.d.ts +91 -0
- package/dist/emails/send/auth.d.ts.map +1 -0
- package/dist/emails/send/auth.js +132 -0
- package/dist/emails/send/auth.js.map +1 -0
- package/dist/emails/send/index.d.ts +10 -0
- package/dist/emails/send/index.d.ts.map +1 -0
- package/dist/emails/send/index.js +33 -0
- package/dist/emails/send/index.js.map +1 -0
- package/dist/emails/send/orders.d.ts +180 -0
- package/dist/emails/send/orders.d.ts.map +1 -0
- package/dist/emails/send/orders.js +259 -0
- package/dist/emails/send/orders.js.map +1 -0
- package/dist/emails/sender.d.ts +72 -0
- package/dist/emails/sender.d.ts.map +1 -0
- package/dist/emails/sender.js +118 -0
- package/dist/emails/sender.js.map +1 -0
- package/dist/emails/templates/base.d.ts +105 -0
- package/dist/emails/templates/base.d.ts.map +1 -0
- package/dist/emails/templates/base.js +291 -0
- package/dist/emails/templates/base.js.map +1 -0
- package/dist/emails/templates/email-verification.d.ts +28 -0
- package/dist/emails/templates/email-verification.d.ts.map +1 -0
- package/dist/emails/templates/email-verification.js +56 -0
- package/dist/emails/templates/email-verification.js.map +1 -0
- package/dist/emails/templates/index.d.ts +15 -0
- package/dist/emails/templates/index.d.ts.map +1 -0
- package/dist/emails/templates/index.js +58 -0
- package/dist/emails/templates/index.js.map +1 -0
- package/dist/emails/templates/order-cancelled.d.ts +30 -0
- package/dist/emails/templates/order-cancelled.d.ts.map +1 -0
- package/dist/emails/templates/order-cancelled.js +87 -0
- package/dist/emails/templates/order-cancelled.js.map +1 -0
- package/dist/emails/templates/order-confirmation.d.ts +36 -0
- package/dist/emails/templates/order-confirmation.d.ts.map +1 -0
- package/dist/emails/templates/order-confirmation.js +161 -0
- package/dist/emails/templates/order-confirmation.js.map +1 -0
- package/dist/emails/templates/order-delivered.d.ts +31 -0
- package/dist/emails/templates/order-delivered.d.ts.map +1 -0
- package/dist/emails/templates/order-delivered.js +95 -0
- package/dist/emails/templates/order-delivered.js.map +1 -0
- package/dist/emails/templates/order-shipped.d.ts +32 -0
- package/dist/emails/templates/order-shipped.d.ts.map +1 -0
- package/dist/emails/templates/order-shipped.js +87 -0
- package/dist/emails/templates/order-shipped.js.map +1 -0
- package/dist/emails/templates/password-reset.d.ts +27 -0
- package/dist/emails/templates/password-reset.d.ts.map +1 -0
- package/dist/emails/templates/password-reset.js +55 -0
- package/dist/emails/templates/password-reset.js.map +1 -0
- package/dist/emails/templates/refund-processed.d.ts +32 -0
- package/dist/emails/templates/refund-processed.d.ts.map +1 -0
- package/dist/emails/templates/refund-processed.js +96 -0
- package/dist/emails/templates/refund-processed.js.map +1 -0
- package/dist/emails/templates/welcome.d.ts +27 -0
- package/dist/emails/templates/welcome.d.ts.map +1 -0
- package/dist/emails/templates/welcome.js +56 -0
- package/dist/emails/templates/welcome.js.map +1 -0
- package/dist/emails/types.d.ts +202 -0
- package/dist/emails/types.d.ts.map +1 -0
- package/dist/emails/types.js +8 -0
- package/dist/emails/types.js.map +1 -0
- package/dist/emails/utils.d.ts +94 -0
- package/dist/emails/utils.d.ts.map +1 -0
- package/dist/emails/utils.js +229 -0
- package/dist/emails/utils.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +225 -0
- package/dist/index.js.map +1 -0
- package/dist/products/api/categories.d.ts +29 -0
- package/dist/products/api/categories.d.ts.map +1 -0
- package/dist/products/api/categories.js +49 -0
- package/dist/products/api/categories.js.map +1 -0
- package/dist/products/api/index.d.ts +24 -0
- package/dist/products/api/index.d.ts.map +1 -0
- package/dist/products/api/index.js +30 -0
- package/dist/products/api/index.js.map +1 -0
- package/dist/products/api/product.d.ts +36 -0
- package/dist/products/api/product.d.ts.map +1 -0
- package/dist/products/api/product.js +70 -0
- package/dist/products/api/product.js.map +1 -0
- package/dist/products/api/products.d.ts +41 -0
- package/dist/products/api/products.d.ts.map +1 -0
- package/dist/products/api/products.js +102 -0
- package/dist/products/api/products.js.map +1 -0
- package/dist/products/components/CategoryNav.d.ts +51 -0
- package/dist/products/components/CategoryNav.d.ts.map +1 -0
- package/dist/products/components/CategoryNav.js +115 -0
- package/dist/products/components/CategoryNav.js.map +1 -0
- package/dist/products/components/ProductBreadcrumb.d.ts +52 -0
- package/dist/products/components/ProductBreadcrumb.d.ts.map +1 -0
- package/dist/products/components/ProductBreadcrumb.js +78 -0
- package/dist/products/components/ProductBreadcrumb.js.map +1 -0
- package/dist/products/components/ProductCard.d.ts +54 -0
- package/dist/products/components/ProductCard.d.ts.map +1 -0
- package/dist/products/components/ProductCard.js +65 -0
- package/dist/products/components/ProductCard.js.map +1 -0
- package/dist/products/components/ProductDetails.d.ts +63 -0
- package/dist/products/components/ProductDetails.d.ts.map +1 -0
- package/dist/products/components/ProductDetails.js +105 -0
- package/dist/products/components/ProductDetails.js.map +1 -0
- package/dist/products/components/ProductFilters.d.ts +70 -0
- package/dist/products/components/ProductFilters.d.ts.map +1 -0
- package/dist/products/components/ProductFilters.js +127 -0
- package/dist/products/components/ProductFilters.js.map +1 -0
- package/dist/products/components/ProductGallery.d.ts +37 -0
- package/dist/products/components/ProductGallery.d.ts.map +1 -0
- package/dist/products/components/ProductGallery.js +80 -0
- package/dist/products/components/ProductGallery.js.map +1 -0
- package/dist/products/components/ProductGrid.d.ts +50 -0
- package/dist/products/components/ProductGrid.d.ts.map +1 -0
- package/dist/products/components/ProductGrid.js +83 -0
- package/dist/products/components/ProductGrid.js.map +1 -0
- package/dist/products/components/ProductSearch.d.ts +43 -0
- package/dist/products/components/ProductSearch.d.ts.map +1 -0
- package/dist/products/components/ProductSearch.js +99 -0
- package/dist/products/components/ProductSearch.js.map +1 -0
- package/dist/products/components/ProductSort.d.ts +43 -0
- package/dist/products/components/ProductSort.d.ts.map +1 -0
- package/dist/products/components/ProductSort.js +61 -0
- package/dist/products/components/ProductSort.js.map +1 -0
- package/dist/products/components/VariantSelector.d.ts +43 -0
- package/dist/products/components/VariantSelector.d.ts.map +1 -0
- package/dist/products/components/VariantSelector.js +147 -0
- package/dist/products/components/VariantSelector.js.map +1 -0
- package/dist/products/components/index.d.ts +26 -0
- package/dist/products/components/index.d.ts.map +1 -0
- package/dist/products/components/index.js +32 -0
- package/dist/products/components/index.js.map +1 -0
- package/dist/products/hooks/index.d.ts +14 -0
- package/dist/products/hooks/index.d.ts.map +1 -0
- package/dist/products/hooks/index.js +17 -0
- package/dist/products/hooks/index.js.map +1 -0
- package/dist/products/hooks/useCategories.d.ts +56 -0
- package/dist/products/hooks/useCategories.d.ts.map +1 -0
- package/dist/products/hooks/useCategories.js +126 -0
- package/dist/products/hooks/useCategories.js.map +1 -0
- package/dist/products/hooks/useProduct.d.ts +44 -0
- package/dist/products/hooks/useProduct.d.ts.map +1 -0
- package/dist/products/hooks/useProduct.js +86 -0
- package/dist/products/hooks/useProduct.js.map +1 -0
- package/dist/products/hooks/useProductAttributes.d.ts +59 -0
- package/dist/products/hooks/useProductAttributes.d.ts.map +1 -0
- package/dist/products/hooks/useProductAttributes.js +148 -0
- package/dist/products/hooks/useProductAttributes.js.map +1 -0
- package/dist/products/hooks/useProducts.d.ts +67 -0
- package/dist/products/hooks/useProducts.d.ts.map +1 -0
- package/dist/products/hooks/useProducts.js +132 -0
- package/dist/products/hooks/useProducts.js.map +1 -0
- package/dist/products/index.d.ts +94 -0
- package/dist/products/index.d.ts.map +1 -0
- package/dist/products/index.js +123 -0
- package/dist/products/index.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +70 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +77 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/colors.d.ts +148 -0
- package/dist/theme/colors.d.ts.map +1 -0
- package/dist/theme/colors.js +219 -0
- package/dist/theme/colors.js.map +1 -0
- package/dist/theme/defaults.d.ts +212 -0
- package/dist/theme/defaults.d.ts.map +1 -0
- package/dist/theme/defaults.js +278 -0
- package/dist/theme/defaults.js.map +1 -0
- package/dist/theme/fonts.d.ts +59 -0
- package/dist/theme/fonts.d.ts.map +1 -0
- package/dist/theme/fonts.js +202 -0
- package/dist/theme/fonts.js.map +1 -0
- package/dist/theme/generator.d.ts +50 -0
- package/dist/theme/generator.d.ts.map +1 -0
- package/dist/theme/generator.js +322 -0
- package/dist/theme/generator.js.map +1 -0
- package/dist/theme/hooks.d.ts +110 -0
- package/dist/theme/hooks.d.ts.map +1 -0
- package/dist/theme/hooks.js +106 -0
- package/dist/theme/hooks.js.map +1 -0
- package/dist/theme/index.d.ts +37 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +85 -0
- package/dist/theme/index.js.map +1 -0
- package/package.json +7 -2
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @rovela/sdk/auth/server/customer-service
|
|
4
|
+
*
|
|
5
|
+
* Customer CRUD operations with tenant isolation.
|
|
6
|
+
* All operations are scoped to the current tenant.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.createCustomer = createCustomer;
|
|
43
|
+
exports.authenticateCustomer = authenticateCustomer;
|
|
44
|
+
exports.findCustomerForSession = findCustomerForSession;
|
|
45
|
+
exports.findCustomerByEmail = findCustomerByEmail;
|
|
46
|
+
exports.findCustomerById = findCustomerById;
|
|
47
|
+
exports.updateCustomer = updateCustomer;
|
|
48
|
+
exports.updateCustomerPassword = updateCustomerPassword;
|
|
49
|
+
exports.markEmailVerified = markEmailVerified;
|
|
50
|
+
exports.emailExists = emailExists;
|
|
51
|
+
const drizzle_orm_1 = require("drizzle-orm");
|
|
52
|
+
const client_1 = require("../../core/db/client");
|
|
53
|
+
const schema = __importStar(require("../../core/db/schema"));
|
|
54
|
+
const password_1 = require("./password");
|
|
55
|
+
// =============================================================================
|
|
56
|
+
// Customer CRUD
|
|
57
|
+
// =============================================================================
|
|
58
|
+
/**
|
|
59
|
+
* Create a new customer account.
|
|
60
|
+
* Password is hashed before storage.
|
|
61
|
+
* Returns customer with null emailVerified (needs verification).
|
|
62
|
+
*
|
|
63
|
+
* @param email - Customer email (will be lowercased)
|
|
64
|
+
* @param password - Plain text password (min 8 chars)
|
|
65
|
+
* @param name - Optional customer name
|
|
66
|
+
* @returns Created customer
|
|
67
|
+
* @throws Error if email already exists
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const { customer } = await createCustomer(
|
|
72
|
+
* 'customer@example.com',
|
|
73
|
+
* 'securePassword123',
|
|
74
|
+
* 'John Doe'
|
|
75
|
+
* )
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
async function createCustomer(email, password, name) {
|
|
79
|
+
const db = (0, client_1.getDb)();
|
|
80
|
+
const tenantId = (0, client_1.getTenantId)();
|
|
81
|
+
// Hash password
|
|
82
|
+
const passwordHash = await (0, password_1.hashPassword)(password);
|
|
83
|
+
try {
|
|
84
|
+
const [customer] = await db
|
|
85
|
+
.insert(schema.customers)
|
|
86
|
+
.values({
|
|
87
|
+
tenantId,
|
|
88
|
+
email: email.toLowerCase().trim(),
|
|
89
|
+
name: name?.trim() || null,
|
|
90
|
+
passwordHash,
|
|
91
|
+
emailVerified: null, // Not verified initially
|
|
92
|
+
})
|
|
93
|
+
.returning();
|
|
94
|
+
return { customer };
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
// Check for unique constraint violation
|
|
98
|
+
const err = error;
|
|
99
|
+
if (err.code === '23505' || err.cause?.code === '23505') {
|
|
100
|
+
throw new Error('An account with this email already exists');
|
|
101
|
+
}
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Authenticate a customer by email and password.
|
|
107
|
+
* Checks email verification status.
|
|
108
|
+
*
|
|
109
|
+
* @param email - Customer email
|
|
110
|
+
* @param password - Plain text password
|
|
111
|
+
* @param requireVerification - Whether to require email verification (default: true)
|
|
112
|
+
* @returns Authentication result
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* const result = await authenticateCustomer('customer@example.com', 'password123')
|
|
117
|
+
* if (result.success) {
|
|
118
|
+
* console.log('Authenticated:', result.customer.email)
|
|
119
|
+
* } else {
|
|
120
|
+
* console.log('Failed:', result.error)
|
|
121
|
+
* }
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
async function authenticateCustomer(email, password, requireVerification = true) {
|
|
125
|
+
const db = (0, client_1.getDb)();
|
|
126
|
+
const tenantId = (0, client_1.getTenantId)();
|
|
127
|
+
// Find customer by email
|
|
128
|
+
const [customer] = await db
|
|
129
|
+
.select()
|
|
130
|
+
.from(schema.customers)
|
|
131
|
+
.where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.customers.tenantId, tenantId), (0, drizzle_orm_1.eq)(schema.customers.email, email.toLowerCase().trim())))
|
|
132
|
+
.limit(1);
|
|
133
|
+
if (!customer) {
|
|
134
|
+
return {
|
|
135
|
+
success: false,
|
|
136
|
+
error: 'Invalid email or password',
|
|
137
|
+
code: 'INVALID_CREDENTIALS',
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
// Verify password
|
|
141
|
+
const isValidPassword = await (0, password_1.verifyPassword)(password, customer.passwordHash);
|
|
142
|
+
if (!isValidPassword) {
|
|
143
|
+
return {
|
|
144
|
+
success: false,
|
|
145
|
+
error: 'Invalid email or password',
|
|
146
|
+
code: 'INVALID_CREDENTIALS',
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
// Check email verification
|
|
150
|
+
if (requireVerification && !customer.emailVerified) {
|
|
151
|
+
return {
|
|
152
|
+
success: false,
|
|
153
|
+
error: 'Please verify your email before signing in',
|
|
154
|
+
code: 'EMAIL_NOT_VERIFIED',
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
return { success: true, customer };
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get customer data for session (excludes sensitive fields).
|
|
161
|
+
*
|
|
162
|
+
* @param customerId - Customer UUID
|
|
163
|
+
* @returns Customer session data or null if not found
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```typescript
|
|
167
|
+
* const session = await findCustomerForSession(customerId)
|
|
168
|
+
* if (session) {
|
|
169
|
+
* console.log('Customer:', session.email)
|
|
170
|
+
* }
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
async function findCustomerForSession(customerId) {
|
|
174
|
+
const db = (0, client_1.getDb)();
|
|
175
|
+
const tenantId = (0, client_1.getTenantId)();
|
|
176
|
+
const [customer] = await db
|
|
177
|
+
.select({
|
|
178
|
+
id: schema.customers.id,
|
|
179
|
+
email: schema.customers.email,
|
|
180
|
+
name: schema.customers.name,
|
|
181
|
+
emailVerified: schema.customers.emailVerified,
|
|
182
|
+
})
|
|
183
|
+
.from(schema.customers)
|
|
184
|
+
.where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.customers.tenantId, tenantId), (0, drizzle_orm_1.eq)(schema.customers.id, customerId)))
|
|
185
|
+
.limit(1);
|
|
186
|
+
if (!customer) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
id: customer.id,
|
|
191
|
+
email: customer.email,
|
|
192
|
+
name: customer.name,
|
|
193
|
+
emailVerified: !!customer.emailVerified,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Find a customer by email.
|
|
198
|
+
*
|
|
199
|
+
* @param email - Customer email
|
|
200
|
+
* @returns Customer or null if not found
|
|
201
|
+
*/
|
|
202
|
+
async function findCustomerByEmail(email) {
|
|
203
|
+
const db = (0, client_1.getDb)();
|
|
204
|
+
const tenantId = (0, client_1.getTenantId)();
|
|
205
|
+
const [customer] = await db
|
|
206
|
+
.select()
|
|
207
|
+
.from(schema.customers)
|
|
208
|
+
.where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.customers.tenantId, tenantId), (0, drizzle_orm_1.eq)(schema.customers.email, email.toLowerCase().trim())))
|
|
209
|
+
.limit(1);
|
|
210
|
+
return customer || null;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Find a customer by ID.
|
|
214
|
+
*
|
|
215
|
+
* @param customerId - Customer UUID
|
|
216
|
+
* @returns Customer or null if not found
|
|
217
|
+
*/
|
|
218
|
+
async function findCustomerById(customerId) {
|
|
219
|
+
const db = (0, client_1.getDb)();
|
|
220
|
+
const tenantId = (0, client_1.getTenantId)();
|
|
221
|
+
const [customer] = await db
|
|
222
|
+
.select()
|
|
223
|
+
.from(schema.customers)
|
|
224
|
+
.where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.customers.tenantId, tenantId), (0, drizzle_orm_1.eq)(schema.customers.id, customerId)))
|
|
225
|
+
.limit(1);
|
|
226
|
+
return customer || null;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Update customer profile information.
|
|
230
|
+
*
|
|
231
|
+
* @param customerId - Customer UUID
|
|
232
|
+
* @param data - Fields to update
|
|
233
|
+
* @returns Updated customer
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* ```typescript
|
|
237
|
+
* const updated = await updateCustomer(customerId, { name: 'Jane Doe' })
|
|
238
|
+
* ```
|
|
239
|
+
*/
|
|
240
|
+
async function updateCustomer(customerId, data) {
|
|
241
|
+
const db = (0, client_1.getDb)();
|
|
242
|
+
const tenantId = (0, client_1.getTenantId)();
|
|
243
|
+
const updateData = {};
|
|
244
|
+
if (data.name !== undefined) {
|
|
245
|
+
updateData.name = data.name?.trim() || null;
|
|
246
|
+
}
|
|
247
|
+
if (data.email !== undefined) {
|
|
248
|
+
updateData.email = data.email.toLowerCase().trim();
|
|
249
|
+
}
|
|
250
|
+
if (Object.keys(updateData).length === 0) {
|
|
251
|
+
// Nothing to update, return current customer
|
|
252
|
+
return findCustomerById(customerId);
|
|
253
|
+
}
|
|
254
|
+
const [customer] = await db
|
|
255
|
+
.update(schema.customers)
|
|
256
|
+
.set(updateData)
|
|
257
|
+
.where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.customers.tenantId, tenantId), (0, drizzle_orm_1.eq)(schema.customers.id, customerId)))
|
|
258
|
+
.returning();
|
|
259
|
+
return customer || null;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Update customer password.
|
|
263
|
+
*
|
|
264
|
+
* @param customerId - Customer UUID
|
|
265
|
+
* @param newPassword - New plain text password
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```typescript
|
|
269
|
+
* await updateCustomerPassword(customerId, 'newSecurePassword123')
|
|
270
|
+
* ```
|
|
271
|
+
*/
|
|
272
|
+
async function updateCustomerPassword(customerId, newPassword) {
|
|
273
|
+
const db = (0, client_1.getDb)();
|
|
274
|
+
const tenantId = (0, client_1.getTenantId)();
|
|
275
|
+
const passwordHash = await (0, password_1.hashPassword)(newPassword);
|
|
276
|
+
await db
|
|
277
|
+
.update(schema.customers)
|
|
278
|
+
.set({ passwordHash })
|
|
279
|
+
.where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.customers.tenantId, tenantId), (0, drizzle_orm_1.eq)(schema.customers.id, customerId)));
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Mark customer email as verified.
|
|
283
|
+
*
|
|
284
|
+
* @param customerId - Customer UUID
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* ```typescript
|
|
288
|
+
* await markEmailVerified(customerId)
|
|
289
|
+
* ```
|
|
290
|
+
*/
|
|
291
|
+
async function markEmailVerified(customerId) {
|
|
292
|
+
const db = (0, client_1.getDb)();
|
|
293
|
+
const tenantId = (0, client_1.getTenantId)();
|
|
294
|
+
await db
|
|
295
|
+
.update(schema.customers)
|
|
296
|
+
.set({ emailVerified: new Date() })
|
|
297
|
+
.where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.customers.tenantId, tenantId), (0, drizzle_orm_1.eq)(schema.customers.id, customerId)));
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Check if email is already registered.
|
|
301
|
+
*
|
|
302
|
+
* @param email - Email to check
|
|
303
|
+
* @returns True if email exists
|
|
304
|
+
*/
|
|
305
|
+
async function emailExists(email) {
|
|
306
|
+
const customer = await findCustomerByEmail(email);
|
|
307
|
+
return !!customer;
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=customer-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customer-service.js","sourceRoot":"","sources":["../../../src/auth/server/customer-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/auth/server/email-sender
|
|
3
|
+
*
|
|
4
|
+
* Email sending utilities for customer authentication.
|
|
5
|
+
* This file re-exports from the emails module for backward compatibility.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: For new code, prefer importing directly from '@rovela/sdk/emails':
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { sendVerificationEmail, sendWelcomeEmail } from '@rovela/sdk/emails'
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Send verification email to new customer.
|
|
14
|
+
*
|
|
15
|
+
* @param email - Customer email address
|
|
16
|
+
* @param token - Verification token
|
|
17
|
+
* @param storeName - Name of the store
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* await sendVerificationEmail('customer@example.com', 'abc123token', 'My Store')
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @deprecated Use `sendVerificationEmail` from '@rovela/sdk/emails' for more options
|
|
25
|
+
*/
|
|
26
|
+
export declare function sendVerificationEmail(email: string, token: string, storeName: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Send password reset email to customer.
|
|
29
|
+
*
|
|
30
|
+
* @param email - Customer email address
|
|
31
|
+
* @param token - Reset token
|
|
32
|
+
* @param storeName - Name of the store
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* await sendPasswordResetEmail('customer@example.com', 'abc123token', 'My Store')
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @deprecated Use `sendPasswordResetEmail` from '@rovela/sdk/emails' for more options
|
|
40
|
+
*/
|
|
41
|
+
export declare function sendPasswordResetEmail(email: string, token: string, storeName: string): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Send welcome email to new customer after verification.
|
|
44
|
+
*
|
|
45
|
+
* @param email - Customer email address
|
|
46
|
+
* @param name - Customer name
|
|
47
|
+
* @param storeName - Name of the store
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* await sendWelcomeEmail('customer@example.com', 'John', 'My Store')
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* @deprecated Use `sendWelcomeEmail` from '@rovela/sdk/emails' for more options
|
|
55
|
+
*/
|
|
56
|
+
export declare function sendWelcomeEmail(email: string, name: string | null | undefined, storeName: string): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Get the store name from configuration or environment.
|
|
59
|
+
* Falls back to a generic name if not configured.
|
|
60
|
+
*
|
|
61
|
+
* @deprecated Use `getStoreName` from '@rovela/sdk/emails'
|
|
62
|
+
*/
|
|
63
|
+
export declare function getStoreName(): string;
|
|
64
|
+
//# sourceMappingURL=email-sender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-sender.d.ts","sourceRoot":"","sources":["../../../src/auth/server/email-sender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH;;;;;;;;;;;;;GAaG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @rovela/sdk/auth/server/email-sender
|
|
4
|
+
*
|
|
5
|
+
* Email sending utilities for customer authentication.
|
|
6
|
+
* This file re-exports from the emails module for backward compatibility.
|
|
7
|
+
*
|
|
8
|
+
* NOTE: For new code, prefer importing directly from '@rovela/sdk/emails':
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { sendVerificationEmail, sendWelcomeEmail } from '@rovela/sdk/emails'
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.sendVerificationEmail = sendVerificationEmail;
|
|
15
|
+
exports.sendPasswordResetEmail = sendPasswordResetEmail;
|
|
16
|
+
exports.sendWelcomeEmail = sendWelcomeEmail;
|
|
17
|
+
exports.getStoreName = getStoreName;
|
|
18
|
+
const emails_1 = require("../../emails");
|
|
19
|
+
// =============================================================================
|
|
20
|
+
// Re-exported Functions (Backward Compatible API)
|
|
21
|
+
// =============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Send verification email to new customer.
|
|
24
|
+
*
|
|
25
|
+
* @param email - Customer email address
|
|
26
|
+
* @param token - Verification token
|
|
27
|
+
* @param storeName - Name of the store
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* await sendVerificationEmail('customer@example.com', 'abc123token', 'My Store')
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @deprecated Use `sendVerificationEmail` from '@rovela/sdk/emails' for more options
|
|
35
|
+
*/
|
|
36
|
+
async function sendVerificationEmail(email, token, storeName) {
|
|
37
|
+
const storeUrl = (0, emails_1.getStoreUrl)();
|
|
38
|
+
const verificationLink = `${storeUrl}/auth/verify-email?token=${token}`;
|
|
39
|
+
const result = await (0, emails_1.sendVerificationEmail)({
|
|
40
|
+
to: email,
|
|
41
|
+
customerName: email.split('@')[0], // Fallback to email prefix
|
|
42
|
+
verificationLink,
|
|
43
|
+
expiryTime: '24',
|
|
44
|
+
});
|
|
45
|
+
if (!result.success) {
|
|
46
|
+
console.error('[Auth Email] Failed to send verification email:', result.error);
|
|
47
|
+
throw new Error('Failed to send verification email');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Send password reset email to customer.
|
|
52
|
+
*
|
|
53
|
+
* @param email - Customer email address
|
|
54
|
+
* @param token - Reset token
|
|
55
|
+
* @param storeName - Name of the store
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* await sendPasswordResetEmail('customer@example.com', 'abc123token', 'My Store')
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @deprecated Use `sendPasswordResetEmail` from '@rovela/sdk/emails' for more options
|
|
63
|
+
*/
|
|
64
|
+
async function sendPasswordResetEmail(email, token, storeName) {
|
|
65
|
+
const storeUrl = (0, emails_1.getStoreUrl)();
|
|
66
|
+
const resetLink = `${storeUrl}/auth/reset-password?token=${token}`;
|
|
67
|
+
const result = await (0, emails_1.sendPasswordResetEmail)({
|
|
68
|
+
to: email,
|
|
69
|
+
customerName: email.split('@')[0], // Fallback to email prefix
|
|
70
|
+
resetLink,
|
|
71
|
+
expiryTime: '1',
|
|
72
|
+
});
|
|
73
|
+
if (!result.success) {
|
|
74
|
+
console.error('[Auth Email] Failed to send password reset email:', result.error);
|
|
75
|
+
throw new Error('Failed to send password reset email');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Send welcome email to new customer after verification.
|
|
80
|
+
*
|
|
81
|
+
* @param email - Customer email address
|
|
82
|
+
* @param name - Customer name
|
|
83
|
+
* @param storeName - Name of the store
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* await sendWelcomeEmail('customer@example.com', 'John', 'My Store')
|
|
88
|
+
* ```
|
|
89
|
+
*
|
|
90
|
+
* @deprecated Use `sendWelcomeEmail` from '@rovela/sdk/emails' for more options
|
|
91
|
+
*/
|
|
92
|
+
async function sendWelcomeEmail(email, name, storeName) {
|
|
93
|
+
const customerName = name || 'there';
|
|
94
|
+
const result = await (0, emails_1.sendWelcomeEmail)({
|
|
95
|
+
to: email,
|
|
96
|
+
customerName,
|
|
97
|
+
});
|
|
98
|
+
// Welcome email failure is not critical - just log it
|
|
99
|
+
if (!result.success) {
|
|
100
|
+
console.error('[Auth Email] Failed to send welcome email:', result.error);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get the store name from configuration or environment.
|
|
105
|
+
* Falls back to a generic name if not configured.
|
|
106
|
+
*
|
|
107
|
+
* @deprecated Use `getStoreName` from '@rovela/sdk/emails'
|
|
108
|
+
*/
|
|
109
|
+
function getStoreName() {
|
|
110
|
+
return (0, emails_1.getStoreName)();
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=email-sender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-sender.js","sourceRoot":"","sources":["../../../src/auth/server/email-sender.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AA4BH,sDAmBC;AAgBD,wDAmBC;AAgBD,4CAgBC;AAQD,oCAEC;AA1HD,yCAMqB;AAErB,gFAAgF;AAChF,kDAAkD;AAClD,gFAAgF;AAEhF;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,qBAAqB,CACzC,KAAa,EACb,KAAa,EACb,SAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAA,oBAAW,GAAE,CAAA;IAC9B,MAAM,gBAAgB,GAAG,GAAG,QAAQ,4BAA4B,KAAK,EAAE,CAAA;IAEvE,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAgB,EAAC;QACpC,EAAE,EAAE,KAAK;QACT,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,2BAA2B;QAC9D,gBAAgB;QAChB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QAC9E,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,sBAAsB,CAC1C,KAAa,EACb,KAAa,EACb,SAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAA,oBAAW,GAAE,CAAA;IAC9B,MAAM,SAAS,GAAG,GAAG,QAAQ,8BAA8B,KAAK,EAAE,CAAA;IAElE,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAiB,EAAC;QACrC,EAAE,EAAE,KAAK;QACT,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,2BAA2B;QAC9D,SAAS;QACT,UAAU,EAAE,GAAG;KAChB,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QAChF,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,gBAAgB,CACpC,KAAa,EACb,IAA+B,EAC/B,SAAiB;IAEjB,MAAM,YAAY,GAAG,IAAI,IAAI,OAAO,CAAA;IAEpC,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAW,EAAC;QAC/B,EAAE,EAAE,KAAK;QACT,YAAY;KACb,CAAC,CAAA;IAEF,sDAAsD;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3E,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY;IAC1B,OAAO,IAAA,qBAAsB,GAAE,CAAA;AACjC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/auth/server
|
|
3
|
+
*
|
|
4
|
+
* Server-side authentication utilities.
|
|
5
|
+
* Import from '@rovela/sdk/auth/server' in server components and API routes.
|
|
6
|
+
*/
|
|
7
|
+
export { hashPassword, verifyPassword, validatePassword, MIN_PASSWORD_LENGTH, } from './password';
|
|
8
|
+
export { sendVerificationEmail, sendPasswordResetEmail, sendWelcomeEmail, getStoreName, } from './email-sender';
|
|
9
|
+
export { createCustomer, authenticateCustomer, findCustomerForSession, findCustomerByEmail, findCustomerById, updateCustomer, updateCustomerPassword, markEmailVerified, emailExists, } from './customer-service';
|
|
10
|
+
export type { CreateCustomerResult, AuthenticateResult, AuthenticateError, } from './customer-service';
|
|
11
|
+
export { createVerificationToken, verifyEmail, deleteVerificationTokens, resendVerificationEmail, isEmailVerified, cleanupExpiredTokens, } from './verification-service';
|
|
12
|
+
export { requestPasswordReset, validateResetToken, resetPassword, deletePasswordResetTokens, cleanupExpiredResetTokens, } from './password-reset-service';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/server/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,GACb,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,WAAW,GACZ,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,GACrB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,0BAA0B,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @rovela/sdk/auth/server
|
|
4
|
+
*
|
|
5
|
+
* Server-side authentication utilities.
|
|
6
|
+
* Import from '@rovela/sdk/auth/server' in server components and API routes.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.cleanupExpiredResetTokens = exports.deletePasswordResetTokens = exports.resetPassword = exports.validateResetToken = exports.requestPasswordReset = exports.cleanupExpiredTokens = exports.isEmailVerified = exports.resendVerificationEmail = exports.deleteVerificationTokens = exports.verifyEmail = exports.createVerificationToken = exports.emailExists = exports.markEmailVerified = exports.updateCustomerPassword = exports.updateCustomer = exports.findCustomerById = exports.findCustomerByEmail = exports.findCustomerForSession = exports.authenticateCustomer = exports.createCustomer = exports.getStoreName = exports.sendWelcomeEmail = exports.sendPasswordResetEmail = exports.sendVerificationEmail = exports.MIN_PASSWORD_LENGTH = exports.validatePassword = exports.verifyPassword = exports.hashPassword = void 0;
|
|
10
|
+
// Password utilities
|
|
11
|
+
var password_1 = require("./password");
|
|
12
|
+
Object.defineProperty(exports, "hashPassword", { enumerable: true, get: function () { return password_1.hashPassword; } });
|
|
13
|
+
Object.defineProperty(exports, "verifyPassword", { enumerable: true, get: function () { return password_1.verifyPassword; } });
|
|
14
|
+
Object.defineProperty(exports, "validatePassword", { enumerable: true, get: function () { return password_1.validatePassword; } });
|
|
15
|
+
Object.defineProperty(exports, "MIN_PASSWORD_LENGTH", { enumerable: true, get: function () { return password_1.MIN_PASSWORD_LENGTH; } });
|
|
16
|
+
// Email utilities
|
|
17
|
+
var email_sender_1 = require("./email-sender");
|
|
18
|
+
Object.defineProperty(exports, "sendVerificationEmail", { enumerable: true, get: function () { return email_sender_1.sendVerificationEmail; } });
|
|
19
|
+
Object.defineProperty(exports, "sendPasswordResetEmail", { enumerable: true, get: function () { return email_sender_1.sendPasswordResetEmail; } });
|
|
20
|
+
Object.defineProperty(exports, "sendWelcomeEmail", { enumerable: true, get: function () { return email_sender_1.sendWelcomeEmail; } });
|
|
21
|
+
Object.defineProperty(exports, "getStoreName", { enumerable: true, get: function () { return email_sender_1.getStoreName; } });
|
|
22
|
+
// Customer service
|
|
23
|
+
var customer_service_1 = require("./customer-service");
|
|
24
|
+
Object.defineProperty(exports, "createCustomer", { enumerable: true, get: function () { return customer_service_1.createCustomer; } });
|
|
25
|
+
Object.defineProperty(exports, "authenticateCustomer", { enumerable: true, get: function () { return customer_service_1.authenticateCustomer; } });
|
|
26
|
+
Object.defineProperty(exports, "findCustomerForSession", { enumerable: true, get: function () { return customer_service_1.findCustomerForSession; } });
|
|
27
|
+
Object.defineProperty(exports, "findCustomerByEmail", { enumerable: true, get: function () { return customer_service_1.findCustomerByEmail; } });
|
|
28
|
+
Object.defineProperty(exports, "findCustomerById", { enumerable: true, get: function () { return customer_service_1.findCustomerById; } });
|
|
29
|
+
Object.defineProperty(exports, "updateCustomer", { enumerable: true, get: function () { return customer_service_1.updateCustomer; } });
|
|
30
|
+
Object.defineProperty(exports, "updateCustomerPassword", { enumerable: true, get: function () { return customer_service_1.updateCustomerPassword; } });
|
|
31
|
+
Object.defineProperty(exports, "markEmailVerified", { enumerable: true, get: function () { return customer_service_1.markEmailVerified; } });
|
|
32
|
+
Object.defineProperty(exports, "emailExists", { enumerable: true, get: function () { return customer_service_1.emailExists; } });
|
|
33
|
+
// Verification service
|
|
34
|
+
var verification_service_1 = require("./verification-service");
|
|
35
|
+
Object.defineProperty(exports, "createVerificationToken", { enumerable: true, get: function () { return verification_service_1.createVerificationToken; } });
|
|
36
|
+
Object.defineProperty(exports, "verifyEmail", { enumerable: true, get: function () { return verification_service_1.verifyEmail; } });
|
|
37
|
+
Object.defineProperty(exports, "deleteVerificationTokens", { enumerable: true, get: function () { return verification_service_1.deleteVerificationTokens; } });
|
|
38
|
+
Object.defineProperty(exports, "resendVerificationEmail", { enumerable: true, get: function () { return verification_service_1.resendVerificationEmail; } });
|
|
39
|
+
Object.defineProperty(exports, "isEmailVerified", { enumerable: true, get: function () { return verification_service_1.isEmailVerified; } });
|
|
40
|
+
Object.defineProperty(exports, "cleanupExpiredTokens", { enumerable: true, get: function () { return verification_service_1.cleanupExpiredTokens; } });
|
|
41
|
+
// Password reset service
|
|
42
|
+
var password_reset_service_1 = require("./password-reset-service");
|
|
43
|
+
Object.defineProperty(exports, "requestPasswordReset", { enumerable: true, get: function () { return password_reset_service_1.requestPasswordReset; } });
|
|
44
|
+
Object.defineProperty(exports, "validateResetToken", { enumerable: true, get: function () { return password_reset_service_1.validateResetToken; } });
|
|
45
|
+
Object.defineProperty(exports, "resetPassword", { enumerable: true, get: function () { return password_reset_service_1.resetPassword; } });
|
|
46
|
+
Object.defineProperty(exports, "deletePasswordResetTokens", { enumerable: true, get: function () { return password_reset_service_1.deletePasswordResetTokens; } });
|
|
47
|
+
Object.defineProperty(exports, "cleanupExpiredResetTokens", { enumerable: true, get: function () { return password_reset_service_1.cleanupExpiredResetTokens; } });
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/server/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,qBAAqB;AACrB,uCAKmB;AAJjB,wGAAA,YAAY,OAAA;AACZ,0GAAA,cAAc,OAAA;AACd,4GAAA,gBAAgB,OAAA;AAChB,+GAAA,mBAAmB,OAAA;AAGrB,kBAAkB;AAClB,+CAKuB;AAJrB,qHAAA,qBAAqB,OAAA;AACrB,sHAAA,sBAAsB,OAAA;AACtB,gHAAA,gBAAgB,OAAA;AAChB,4GAAA,YAAY,OAAA;AAGd,mBAAmB;AACnB,uDAU2B;AATzB,kHAAA,cAAc,OAAA;AACd,wHAAA,oBAAoB,OAAA;AACpB,0HAAA,sBAAsB,OAAA;AACtB,uHAAA,mBAAmB,OAAA;AACnB,oHAAA,gBAAgB,OAAA;AAChB,kHAAA,cAAc,OAAA;AACd,0HAAA,sBAAsB,OAAA;AACtB,qHAAA,iBAAiB,OAAA;AACjB,+GAAA,WAAW,OAAA;AAQb,uBAAuB;AACvB,+DAO+B;AAN7B,+HAAA,uBAAuB,OAAA;AACvB,mHAAA,WAAW,OAAA;AACX,gIAAA,wBAAwB,OAAA;AACxB,+HAAA,uBAAuB,OAAA;AACvB,uHAAA,eAAe,OAAA;AACf,4HAAA,oBAAoB,OAAA;AAGtB,yBAAyB;AACzB,mEAMiC;AAL/B,8HAAA,oBAAoB,OAAA;AACpB,4HAAA,kBAAkB,OAAA;AAClB,uHAAA,aAAa,OAAA;AACb,mIAAA,yBAAyB,OAAA;AACzB,mIAAA,yBAAyB,OAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/auth/server/password-reset-service
|
|
3
|
+
*
|
|
4
|
+
* Password reset token management.
|
|
5
|
+
* Handles creating, validating, and using reset tokens.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Request a password reset for a customer.
|
|
9
|
+
* Creates a token and sends reset email.
|
|
10
|
+
*
|
|
11
|
+
* Note: Always returns success to prevent email enumeration attacks.
|
|
12
|
+
*
|
|
13
|
+
* @param email - Customer email address
|
|
14
|
+
* @returns Always returns success (security best practice)
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const result = await requestPasswordReset('customer@example.com')
|
|
19
|
+
* // Always show "If an account exists, we've sent a reset email"
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function requestPasswordReset(email: string): Promise<{
|
|
23
|
+
success: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
/**
|
|
26
|
+
* Validate a password reset token.
|
|
27
|
+
* Does NOT consume the token - use resetPassword() for that.
|
|
28
|
+
*
|
|
29
|
+
* @param token - Reset token from email link
|
|
30
|
+
* @returns Validation result
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const result = await validateResetToken(token)
|
|
35
|
+
* if (result.valid) {
|
|
36
|
+
* // Show password reset form
|
|
37
|
+
* } else {
|
|
38
|
+
* // Show error message
|
|
39
|
+
* }
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function validateResetToken(token: string): Promise<{
|
|
43
|
+
valid: boolean;
|
|
44
|
+
error?: string;
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Reset password using a token.
|
|
48
|
+
* Validates the token, updates the password, and deletes the token.
|
|
49
|
+
*
|
|
50
|
+
* @param token - Reset token from email link
|
|
51
|
+
* @param newPassword - New password (plain text, will be hashed)
|
|
52
|
+
* @returns Reset result
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const result = await resetPassword(token, 'newSecurePassword123')
|
|
57
|
+
* if (result.success) {
|
|
58
|
+
* // Redirect to login
|
|
59
|
+
* } else {
|
|
60
|
+
* // Show error
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function resetPassword(token: string, newPassword: string): Promise<{
|
|
65
|
+
success: boolean;
|
|
66
|
+
error?: string;
|
|
67
|
+
}>;
|
|
68
|
+
/**
|
|
69
|
+
* Delete all password reset tokens for a customer.
|
|
70
|
+
*
|
|
71
|
+
* @param customerId - Customer UUID
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* await deletePasswordResetTokens(customerId)
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare function deletePasswordResetTokens(customerId: string): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Clean up expired password reset tokens.
|
|
81
|
+
* Should be called periodically (e.g., via cron job).
|
|
82
|
+
*
|
|
83
|
+
* @returns Number of tokens deleted
|
|
84
|
+
*/
|
|
85
|
+
export declare function cleanupExpiredResetTokens(): Promise<number>;
|
|
86
|
+
//# sourceMappingURL=password-reset-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-reset-service.d.ts","sourceRoot":"","sources":["../../../src/auth/server/password-reset-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4BH;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACjE,OAAO,EAAE,OAAO,CAAA;CACjB,CAAC,CAgCD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/D,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CA+BD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAyCD;AAED;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC,CASjE"}
|