@rovela-ai/sdk 0.1.0 → 0.1.1
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/useAdminAuth.d.ts +36 -0
- package/dist/admin/hooks/useAdminAuth.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminAuth.js +115 -0
- package/dist/admin/hooks/useAdminAuth.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/hooks/useAuth.d.ts +30 -0
- package/dist/auth/hooks/useAuth.d.ts.map +1 -0
- package/dist/auth/hooks/useAuth.js +248 -0
- package/dist/auth/hooks/useAuth.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 +87 -0
- package/dist/core/db/index.js.map +1 -0
- package/dist/core/db/queries.d.ts +658 -0
- package/dist/core/db/queries.d.ts.map +1 -0
- package/dist/core/db/queries.js +735 -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 +68 -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 +1 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/auth/server/customer-service
|
|
3
|
+
*
|
|
4
|
+
* Customer CRUD operations with tenant isolation.
|
|
5
|
+
* All operations are scoped to the current tenant.
|
|
6
|
+
*/
|
|
7
|
+
import * as schema from '../../core/db/schema';
|
|
8
|
+
import type { CustomerSession } from '../types';
|
|
9
|
+
export interface CreateCustomerResult {
|
|
10
|
+
customer: schema.Customer;
|
|
11
|
+
verificationToken?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AuthenticateResult {
|
|
14
|
+
success: true;
|
|
15
|
+
customer: schema.Customer;
|
|
16
|
+
}
|
|
17
|
+
export interface AuthenticateError {
|
|
18
|
+
success: false;
|
|
19
|
+
error: string;
|
|
20
|
+
code: 'INVALID_CREDENTIALS' | 'EMAIL_NOT_VERIFIED' | 'USER_NOT_FOUND';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create a new customer account.
|
|
24
|
+
* Password is hashed before storage.
|
|
25
|
+
* Returns customer with null emailVerified (needs verification).
|
|
26
|
+
*
|
|
27
|
+
* @param email - Customer email (will be lowercased)
|
|
28
|
+
* @param password - Plain text password (min 8 chars)
|
|
29
|
+
* @param name - Optional customer name
|
|
30
|
+
* @returns Created customer
|
|
31
|
+
* @throws Error if email already exists
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const { customer } = await createCustomer(
|
|
36
|
+
* 'customer@example.com',
|
|
37
|
+
* 'securePassword123',
|
|
38
|
+
* 'John Doe'
|
|
39
|
+
* )
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function createCustomer(email: string, password: string, name?: string): Promise<CreateCustomerResult>;
|
|
43
|
+
/**
|
|
44
|
+
* Authenticate a customer by email and password.
|
|
45
|
+
* Checks email verification status.
|
|
46
|
+
*
|
|
47
|
+
* @param email - Customer email
|
|
48
|
+
* @param password - Plain text password
|
|
49
|
+
* @param requireVerification - Whether to require email verification (default: true)
|
|
50
|
+
* @returns Authentication result
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const result = await authenticateCustomer('customer@example.com', 'password123')
|
|
55
|
+
* if (result.success) {
|
|
56
|
+
* console.log('Authenticated:', result.customer.email)
|
|
57
|
+
* } else {
|
|
58
|
+
* console.log('Failed:', result.error)
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function authenticateCustomer(email: string, password: string, requireVerification?: boolean): Promise<AuthenticateResult | AuthenticateError>;
|
|
63
|
+
/**
|
|
64
|
+
* Get customer data for session (excludes sensitive fields).
|
|
65
|
+
*
|
|
66
|
+
* @param customerId - Customer UUID
|
|
67
|
+
* @returns Customer session data or null if not found
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const session = await findCustomerForSession(customerId)
|
|
72
|
+
* if (session) {
|
|
73
|
+
* console.log('Customer:', session.email)
|
|
74
|
+
* }
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function findCustomerForSession(customerId: string): Promise<CustomerSession | null>;
|
|
78
|
+
/**
|
|
79
|
+
* Find a customer by email.
|
|
80
|
+
*
|
|
81
|
+
* @param email - Customer email
|
|
82
|
+
* @returns Customer or null if not found
|
|
83
|
+
*/
|
|
84
|
+
export declare function findCustomerByEmail(email: string): Promise<schema.Customer | null>;
|
|
85
|
+
/**
|
|
86
|
+
* Find a customer by ID.
|
|
87
|
+
*
|
|
88
|
+
* @param customerId - Customer UUID
|
|
89
|
+
* @returns Customer or null if not found
|
|
90
|
+
*/
|
|
91
|
+
export declare function findCustomerById(customerId: string): Promise<schema.Customer | null>;
|
|
92
|
+
/**
|
|
93
|
+
* Update customer profile information.
|
|
94
|
+
*
|
|
95
|
+
* @param customerId - Customer UUID
|
|
96
|
+
* @param data - Fields to update
|
|
97
|
+
* @returns Updated customer
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* const updated = await updateCustomer(customerId, { name: 'Jane Doe' })
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export declare function updateCustomer(customerId: string, data: {
|
|
105
|
+
name?: string;
|
|
106
|
+
email?: string;
|
|
107
|
+
}): Promise<schema.Customer | null>;
|
|
108
|
+
/**
|
|
109
|
+
* Update customer password.
|
|
110
|
+
*
|
|
111
|
+
* @param customerId - Customer UUID
|
|
112
|
+
* @param newPassword - New plain text password
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* await updateCustomerPassword(customerId, 'newSecurePassword123')
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export declare function updateCustomerPassword(customerId: string, newPassword: string): Promise<void>;
|
|
120
|
+
/**
|
|
121
|
+
* Mark customer email as verified.
|
|
122
|
+
*
|
|
123
|
+
* @param customerId - Customer UUID
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* await markEmailVerified(customerId)
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
export declare function markEmailVerified(customerId: string): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Check if email is already registered.
|
|
133
|
+
*
|
|
134
|
+
* @param email - Email to check
|
|
135
|
+
* @returns True if email exists
|
|
136
|
+
*/
|
|
137
|
+
export declare function emailExists(email: string): Promise<boolean>;
|
|
138
|
+
//# sourceMappingURL=customer-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customer-service.d.ts","sourceRoot":"","sources":["../../../src/auth/server/customer-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAM/C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,IAAI,CAAA;IACb,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,qBAAqB,GAAG,oBAAoB,GAAG,gBAAgB,CAAA;CACtE;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,oBAAoB,CAAC,CA4B/B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,mBAAmB,UAAO,GACzB,OAAO,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,CA4CjD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA8BjC;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAgBjC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAgBjC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CA+BjC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAazE;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGjE"}
|
|
@@ -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"}
|