@rovela-ai/sdk 0.4.1 → 0.4.2
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/accept-invite.d.ts +65 -0
- package/dist/admin/api/accept-invite.d.ts.map +1 -0
- package/dist/admin/api/accept-invite.js +115 -0
- package/dist/admin/api/accept-invite.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 +266 -0
- package/dist/admin/api/categories.js.map +1 -0
- package/dist/admin/api/check.d.ts +38 -0
- package/dist/admin/api/check.d.ts.map +1 -0
- package/dist/admin/api/check.js +49 -0
- package/dist/admin/api/check.js.map +1 -0
- package/dist/admin/api/customers.d.ts +77 -0
- package/dist/admin/api/customers.d.ts.map +1 -0
- package/dist/admin/api/customers.js +219 -0
- package/dist/admin/api/customers.js.map +1 -0
- package/dist/admin/api/forgot-password.d.ts +39 -0
- package/dist/admin/api/forgot-password.d.ts.map +1 -0
- package/dist/admin/api/forgot-password.js +66 -0
- package/dist/admin/api/forgot-password.js.map +1 -0
- package/dist/admin/api/index.d.ts +109 -0
- package/dist/admin/api/index.d.ts.map +1 -0
- package/dist/admin/api/index.js +128 -0
- package/dist/admin/api/index.js.map +1 -0
- package/dist/admin/api/linked-customer.d.ts +32 -0
- package/dist/admin/api/linked-customer.d.ts.map +1 -0
- package/dist/admin/api/linked-customer.js +45 -0
- package/dist/admin/api/linked-customer.js.map +1 -0
- package/dist/admin/api/me.d.ts +72 -0
- package/dist/admin/api/me.d.ts.map +1 -0
- package/dist/admin/api/me.js +177 -0
- package/dist/admin/api/me.js.map +1 -0
- package/dist/admin/api/orders.d.ts +91 -0
- package/dist/admin/api/orders.d.ts.map +1 -0
- package/dist/admin/api/orders.js +390 -0
- package/dist/admin/api/orders.js.map +1 -0
- package/dist/admin/api/products-bulk.d.ts +38 -0
- package/dist/admin/api/products-bulk.d.ts.map +1 -0
- package/dist/admin/api/products-bulk.js +135 -0
- package/dist/admin/api/products-bulk.js.map +1 -0
- package/dist/admin/api/products-stats.d.ts +34 -0
- package/dist/admin/api/products-stats.d.ts.map +1 -0
- package/dist/admin/api/products-stats.js +43 -0
- package/dist/admin/api/products-stats.js.map +1 -0
- package/dist/admin/api/products.d.ts +104 -0
- package/dist/admin/api/products.d.ts.map +1 -0
- package/dist/admin/api/products.js +491 -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 +142 -0
- package/dist/admin/api/refund.js.map +1 -0
- package/dist/admin/api/reset-password.d.ts +49 -0
- package/dist/admin/api/reset-password.d.ts.map +1 -0
- package/dist/admin/api/reset-password.js +99 -0
- package/dist/admin/api/reset-password.js.map +1 -0
- package/dist/admin/api/return.d.ts +47 -0
- package/dist/admin/api/return.d.ts.map +1 -0
- package/dist/admin/api/return.js +186 -0
- package/dist/admin/api/return.js.map +1 -0
- package/dist/admin/api/settings.d.ts +49 -0
- package/dist/admin/api/settings.d.ts.map +1 -0
- package/dist/admin/api/settings.js +201 -0
- package/dist/admin/api/settings.js.map +1 -0
- package/dist/admin/api/setup-guide.d.ts +78 -0
- package/dist/admin/api/setup-guide.d.ts.map +1 -0
- package/dist/admin/api/setup-guide.js +235 -0
- package/dist/admin/api/setup-guide.js.map +1 -0
- package/dist/admin/api/setup.d.ts +60 -0
- package/dist/admin/api/setup.d.ts.map +1 -0
- package/dist/admin/api/setup.js +126 -0
- package/dist/admin/api/setup.js.map +1 -0
- package/dist/admin/api/shipping.d.ts +287 -0
- package/dist/admin/api/shipping.d.ts.map +1 -0
- package/dist/admin/api/shipping.js +746 -0
- package/dist/admin/api/shipping.js.map +1 -0
- package/dist/admin/api/stats.d.ts +43 -0
- package/dist/admin/api/stats.d.ts.map +1 -0
- package/dist/admin/api/stats.js +92 -0
- package/dist/admin/api/stats.js.map +1 -0
- package/dist/admin/api/stripe-status.d.ts +39 -0
- package/dist/admin/api/stripe-status.d.ts.map +1 -0
- package/dist/admin/api/stripe-status.js +99 -0
- package/dist/admin/api/stripe-status.js.map +1 -0
- package/dist/admin/api/tax-zones.d.ts +97 -0
- package/dist/admin/api/tax-zones.d.ts.map +1 -0
- package/dist/admin/api/tax-zones.js +265 -0
- package/dist/admin/api/tax-zones.js.map +1 -0
- package/dist/admin/api/users.d.ts +142 -0
- package/dist/admin/api/users.d.ts.map +1 -0
- package/dist/admin/api/users.js +355 -0
- package/dist/admin/api/users.js.map +1 -0
- package/dist/admin/components/AdminAcceptInviteForm.d.ts +3 -0
- package/dist/admin/components/AdminAcceptInviteForm.d.ts.map +1 -0
- package/dist/admin/components/AdminAcceptInviteForm.js +137 -0
- package/dist/admin/components/AdminAcceptInviteForm.js.map +1 -0
- package/dist/admin/components/AdminAccountPage.d.ts +10 -0
- package/dist/admin/components/AdminAccountPage.d.ts.map +1 -0
- package/dist/admin/components/AdminAccountPage.js +126 -0
- package/dist/admin/components/AdminAccountPage.js.map +1 -0
- package/dist/admin/components/AdminBarBanner.d.ts +2 -0
- package/dist/admin/components/AdminBarBanner.d.ts.map +1 -0
- package/dist/admin/components/AdminBarBanner.js +266 -0
- package/dist/admin/components/AdminBarBanner.js.map +1 -0
- package/dist/admin/components/AdminForgotPasswordForm.d.ts +8 -0
- package/dist/admin/components/AdminForgotPasswordForm.d.ts.map +1 -0
- package/dist/admin/components/AdminForgotPasswordForm.js +59 -0
- package/dist/admin/components/AdminForgotPasswordForm.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 +94 -0
- package/dist/admin/components/AdminGuard.js.map +1 -0
- package/dist/admin/components/AdminLayout.d.ts +40 -0
- package/dist/admin/components/AdminLayout.d.ts.map +1 -0
- package/dist/admin/components/AdminLayout.js +39 -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 +61 -0
- package/dist/admin/components/AdminLoginForm.js.map +1 -0
- package/dist/admin/components/AdminNav.d.ts +44 -0
- package/dist/admin/components/AdminNav.d.ts.map +1 -0
- package/dist/admin/components/AdminNav.js +175 -0
- package/dist/admin/components/AdminNav.js.map +1 -0
- package/dist/admin/components/AdminResetPasswordForm.d.ts +12 -0
- package/dist/admin/components/AdminResetPasswordForm.d.ts.map +1 -0
- package/dist/admin/components/AdminResetPasswordForm.js +134 -0
- package/dist/admin/components/AdminResetPasswordForm.js.map +1 -0
- package/dist/admin/components/AdminSelect.d.ts +47 -0
- package/dist/admin/components/AdminSelect.d.ts.map +1 -0
- package/dist/admin/components/AdminSelect.js +71 -0
- package/dist/admin/components/AdminSelect.js.map +1 -0
- package/dist/admin/components/AdminToast.d.ts +31 -0
- package/dist/admin/components/AdminToast.d.ts.map +1 -0
- package/dist/admin/components/AdminToast.js +83 -0
- package/dist/admin/components/AdminToast.js.map +1 -0
- package/dist/admin/components/AdminUserMenu.d.ts +14 -0
- package/dist/admin/components/AdminUserMenu.d.ts.map +1 -0
- package/dist/admin/components/AdminUserMenu.js +34 -0
- package/dist/admin/components/AdminUserMenu.js.map +1 -0
- package/dist/admin/components/CategoryForm.d.ts +30 -0
- package/dist/admin/components/CategoryForm.d.ts.map +1 -0
- package/dist/admin/components/CategoryForm.js +152 -0
- package/dist/admin/components/CategoryForm.js.map +1 -0
- package/dist/admin/components/CategorySelect.d.ts +32 -0
- package/dist/admin/components/CategorySelect.d.ts.map +1 -0
- package/dist/admin/components/CategorySelect.js +139 -0
- package/dist/admin/components/CategorySelect.js.map +1 -0
- package/dist/admin/components/CustomerDetails.d.ts +15 -0
- package/dist/admin/components/CustomerDetails.d.ts.map +1 -0
- package/dist/admin/components/CustomerDetails.js +177 -0
- package/dist/admin/components/CustomerDetails.js.map +1 -0
- package/dist/admin/components/CustomerTable.d.ts +13 -0
- package/dist/admin/components/CustomerTable.d.ts.map +1 -0
- package/dist/admin/components/CustomerTable.js +112 -0
- package/dist/admin/components/CustomerTable.js.map +1 -0
- package/dist/admin/components/DeleteConfirmDialog.d.ts +56 -0
- package/dist/admin/components/DeleteConfirmDialog.d.ts.map +1 -0
- package/dist/admin/components/DeleteConfirmDialog.js +46 -0
- package/dist/admin/components/DeleteConfirmDialog.js.map +1 -0
- package/dist/admin/components/ExampleContentBanner.d.ts +2 -0
- package/dist/admin/components/ExampleContentBanner.d.ts.map +1 -0
- package/dist/admin/components/ExampleContentBanner.js +153 -0
- package/dist/admin/components/ExampleContentBanner.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 +86 -0
- package/dist/admin/components/InventoryEditor.js.map +1 -0
- package/dist/admin/components/InviteUserDialog.d.ts +3 -0
- package/dist/admin/components/InviteUserDialog.d.ts.map +1 -0
- package/dist/admin/components/InviteUserDialog.js +126 -0
- package/dist/admin/components/InviteUserDialog.js.map +1 -0
- package/dist/admin/components/LogoUpload.d.ts +22 -0
- package/dist/admin/components/LogoUpload.d.ts.map +1 -0
- package/dist/admin/components/LogoUpload.js +210 -0
- package/dist/admin/components/LogoUpload.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 +33 -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 +210 -0
- package/dist/admin/components/OrderDetails.js.map +1 -0
- package/dist/admin/components/OrderStatusChart.d.ts +21 -0
- package/dist/admin/components/OrderStatusChart.d.ts.map +1 -0
- package/dist/admin/components/OrderStatusChart.js +61 -0
- package/dist/admin/components/OrderStatusChart.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 +117 -0
- package/dist/admin/components/OrderTable.js.map +1 -0
- package/dist/admin/components/PaymentSettings.d.ts +13 -0
- package/dist/admin/components/PaymentSettings.d.ts.map +1 -0
- package/dist/admin/components/PaymentSettings.js +117 -0
- package/dist/admin/components/PaymentSettings.js.map +1 -0
- package/dist/admin/components/PeriodSelector.d.ts +9 -0
- package/dist/admin/components/PeriodSelector.d.ts.map +1 -0
- package/dist/admin/components/PeriodSelector.js +19 -0
- package/dist/admin/components/PeriodSelector.js.map +1 -0
- package/dist/admin/components/PermissionsMatrix.d.ts +8 -0
- package/dist/admin/components/PermissionsMatrix.d.ts.map +1 -0
- package/dist/admin/components/PermissionsMatrix.js +70 -0
- package/dist/admin/components/PermissionsMatrix.js.map +1 -0
- package/dist/admin/components/PrimaryMetricsRow.d.ts +11 -0
- package/dist/admin/components/PrimaryMetricsRow.d.ts.map +1 -0
- package/dist/admin/components/PrimaryMetricsRow.js +73 -0
- package/dist/admin/components/PrimaryMetricsRow.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 +251 -0
- package/dist/admin/components/ProductForm.js.map +1 -0
- package/dist/admin/components/ProductTable.d.ts +14 -0
- package/dist/admin/components/ProductTable.d.ts.map +1 -0
- package/dist/admin/components/ProductTable.js +384 -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 +63 -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 +90 -0
- package/dist/admin/components/RefundDialog.js.map +1 -0
- package/dist/admin/components/RevenueChart.d.ts +23 -0
- package/dist/admin/components/RevenueChart.d.ts.map +1 -0
- package/dist/admin/components/RevenueChart.js +75 -0
- package/dist/admin/components/RevenueChart.js.map +1 -0
- package/dist/admin/components/SEOPreview.d.ts +33 -0
- package/dist/admin/components/SEOPreview.d.ts.map +1 -0
- package/dist/admin/components/SEOPreview.js +30 -0
- package/dist/admin/components/SEOPreview.js.map +1 -0
- package/dist/admin/components/SecondaryMetricsRow.d.ts +14 -0
- package/dist/admin/components/SecondaryMetricsRow.d.ts.map +1 -0
- package/dist/admin/components/SecondaryMetricsRow.js +45 -0
- package/dist/admin/components/SecondaryMetricsRow.js.map +1 -0
- package/dist/admin/components/SetupGuide.d.ts +4 -0
- package/dist/admin/components/SetupGuide.d.ts.map +1 -0
- package/dist/admin/components/SetupGuide.js +244 -0
- package/dist/admin/components/SetupGuide.js.map +1 -0
- package/dist/admin/components/ShippingSettings.d.ts +3 -0
- package/dist/admin/components/ShippingSettings.d.ts.map +1 -0
- package/dist/admin/components/ShippingSettings.js +553 -0
- package/dist/admin/components/ShippingSettings.js.map +1 -0
- package/dist/admin/components/StatsCards.d.ts +18 -0
- package/dist/admin/components/StatsCards.d.ts.map +1 -0
- package/dist/admin/components/StatsCards.js +71 -0
- package/dist/admin/components/StatsCards.js.map +1 -0
- package/dist/admin/components/StoreSettings.d.ts +19 -0
- package/dist/admin/components/StoreSettings.d.ts.map +1 -0
- package/dist/admin/components/StoreSettings.js +149 -0
- package/dist/admin/components/StoreSettings.js.map +1 -0
- package/dist/admin/components/TagInput.d.ts +29 -0
- package/dist/admin/components/TagInput.d.ts.map +1 -0
- package/dist/admin/components/TagInput.js +69 -0
- package/dist/admin/components/TagInput.js.map +1 -0
- package/dist/admin/components/TaxSettings.d.ts +12 -0
- package/dist/admin/components/TaxSettings.d.ts.map +1 -0
- package/dist/admin/components/TaxSettings.js +272 -0
- package/dist/admin/components/TaxSettings.js.map +1 -0
- package/dist/admin/components/UsersTable.d.ts +3 -0
- package/dist/admin/components/UsersTable.d.ts.map +1 -0
- package/dist/admin/components/UsersTable.js +388 -0
- package/dist/admin/components/UsersTable.js.map +1 -0
- package/dist/admin/components/VariantManager.d.ts +44 -0
- package/dist/admin/components/VariantManager.d.ts.map +1 -0
- package/dist/admin/components/VariantManager.js +324 -0
- package/dist/admin/components/VariantManager.js.map +1 -0
- package/dist/admin/components/index.d.ts +69 -0
- package/dist/admin/components/index.d.ts.map +1 -0
- package/dist/admin/components/index.js +86 -0
- package/dist/admin/components/index.js.map +1 -0
- package/dist/admin/config.d.ts +51 -0
- package/dist/admin/config.d.ts.map +1 -0
- package/dist/admin/config.js +224 -0
- package/dist/admin/config.js.map +1 -0
- package/dist/admin/hooks/fetchAdminApi.d.ts +65 -0
- package/dist/admin/hooks/fetchAdminApi.d.ts.map +1 -0
- package/dist/admin/hooks/fetchAdminApi.js +96 -0
- package/dist/admin/hooks/fetchAdminApi.js.map +1 -0
- package/dist/admin/hooks/index.d.ts +24 -0
- package/dist/admin/hooks/index.d.ts.map +1 -0
- package/dist/admin/hooks/index.js +19 -0
- package/dist/admin/hooks/index.js.map +1 -0
- package/dist/admin/hooks/useAdminAuth.d.ts +25 -0
- package/dist/admin/hooks/useAdminAuth.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminAuth.js +183 -0
- package/dist/admin/hooks/useAdminAuth.js.map +1 -0
- package/dist/admin/hooks/useAdminCategories.d.ts +9 -0
- package/dist/admin/hooks/useAdminCategories.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminCategories.js +112 -0
- package/dist/admin/hooks/useAdminCategories.js.map +1 -0
- package/dist/admin/hooks/useAdminCustomers.d.ts +3 -0
- package/dist/admin/hooks/useAdminCustomers.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminCustomers.js +110 -0
- package/dist/admin/hooks/useAdminCustomers.js.map +1 -0
- package/dist/admin/hooks/useAdminMe.d.ts +31 -0
- package/dist/admin/hooks/useAdminMe.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminMe.js +78 -0
- package/dist/admin/hooks/useAdminMe.js.map +1 -0
- package/dist/admin/hooks/useAdminOrders.d.ts +3 -0
- package/dist/admin/hooks/useAdminOrders.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminOrders.js +118 -0
- package/dist/admin/hooks/useAdminOrders.js.map +1 -0
- package/dist/admin/hooks/useAdminPermissions.d.ts +3 -0
- package/dist/admin/hooks/useAdminPermissions.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminPermissions.js +51 -0
- package/dist/admin/hooks/useAdminPermissions.js.map +1 -0
- package/dist/admin/hooks/useAdminProductMetrics.d.ts +3 -0
- package/dist/admin/hooks/useAdminProductMetrics.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminProductMetrics.js +32 -0
- package/dist/admin/hooks/useAdminProductMetrics.js.map +1 -0
- package/dist/admin/hooks/useAdminProducts.d.ts +3 -0
- package/dist/admin/hooks/useAdminProducts.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminProducts.js +132 -0
- package/dist/admin/hooks/useAdminProducts.js.map +1 -0
- package/dist/admin/hooks/useAdminSession.d.ts +23 -0
- package/dist/admin/hooks/useAdminSession.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminSession.js +117 -0
- package/dist/admin/hooks/useAdminSession.js.map +1 -0
- package/dist/admin/hooks/useAdminStats.d.ts +47 -0
- package/dist/admin/hooks/useAdminStats.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminStats.js +128 -0
- package/dist/admin/hooks/useAdminStats.js.map +1 -0
- package/dist/admin/hooks/useAdminUsers.d.ts +3 -0
- package/dist/admin/hooks/useAdminUsers.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminUsers.js +177 -0
- package/dist/admin/hooks/useAdminUsers.js.map +1 -0
- package/dist/admin/hooks/useLinkedCustomerStatus.d.ts +3 -0
- package/dist/admin/hooks/useLinkedCustomerStatus.d.ts.map +1 -0
- package/dist/admin/hooks/useLinkedCustomerStatus.js +48 -0
- package/dist/admin/hooks/useLinkedCustomerStatus.js.map +1 -0
- package/dist/admin/hooks/useSetupGuide.d.ts +45 -0
- package/dist/admin/hooks/useSetupGuide.d.ts.map +1 -0
- package/dist/admin/hooks/useSetupGuide.js +60 -0
- package/dist/admin/hooks/useSetupGuide.js.map +1 -0
- package/dist/admin/index.d.ts +66 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +144 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/permissions.d.ts +79 -0
- package/dist/admin/permissions.d.ts.map +1 -0
- package/dist/admin/permissions.js +182 -0
- package/dist/admin/permissions.js.map +1 -0
- package/dist/admin/server/admin-invite.d.ts +122 -0
- package/dist/admin/server/admin-invite.d.ts.map +1 -0
- package/dist/admin/server/admin-invite.js +235 -0
- package/dist/admin/server/admin-invite.js.map +1 -0
- package/dist/admin/server/admin-password-reset.d.ts +87 -0
- package/dist/admin/server/admin-password-reset.d.ts.map +1 -0
- package/dist/admin/server/admin-password-reset.js +220 -0
- package/dist/admin/server/admin-password-reset.js.map +1 -0
- package/dist/admin/server/admin-self-service.d.ts +86 -0
- package/dist/admin/server/admin-self-service.d.ts.map +1 -0
- package/dist/admin/server/admin-self-service.js +188 -0
- package/dist/admin/server/admin-self-service.js.map +1 -0
- package/dist/admin/server/admin-service.d.ts +131 -0
- package/dist/admin/server/admin-service.d.ts.map +1 -0
- package/dist/admin/server/admin-service.js +278 -0
- package/dist/admin/server/admin-service.js.map +1 -0
- package/dist/admin/server/admin-session.d.ts +173 -0
- package/dist/admin/server/admin-session.d.ts.map +1 -0
- package/dist/admin/server/admin-session.js +272 -0
- package/dist/admin/server/admin-session.js.map +1 -0
- package/dist/admin/server/index.d.ts +17 -0
- package/dist/admin/server/index.d.ts.map +1 -0
- package/dist/admin/server/index.js +39 -0
- package/dist/admin/server/index.js.map +1 -0
- package/dist/admin/server/user-management.d.ts +221 -0
- package/dist/admin/server/user-management.d.ts.map +1 -0
- package/dist/admin/server/user-management.js +838 -0
- package/dist/admin/server/user-management.js.map +1 -0
- package/dist/admin/types.d.ts +1161 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +10 -0
- package/dist/admin/types.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 +65 -0
- package/dist/auth/api/forgot-password.js.map +1 -0
- package/dist/auth/api/index.d.ts +37 -0
- package/dist/auth/api/index.d.ts.map +1 -0
- package/dist/auth/api/index.js +44 -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 +99 -0
- package/dist/auth/api/register.js.map +1 -0
- package/dist/auth/api/request-refund.d.ts +38 -0
- package/dist/auth/api/request-refund.d.ts.map +1 -0
- package/dist/auth/api/request-refund.js +142 -0
- package/dist/auth/api/request-refund.js.map +1 -0
- package/dist/auth/api/request-return.d.ts +39 -0
- package/dist/auth/api/request-return.d.ts.map +1 -0
- package/dist/auth/api/request-return.js +109 -0
- package/dist/auth/api/request-return.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 +68 -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 +106 -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 +90 -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 +109 -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 +43 -0
- package/dist/auth/components/ForgotPasswordForm.js.map +1 -0
- package/dist/auth/components/Label.d.ts +19 -0
- package/dist/auth/components/Label.d.ts.map +1 -0
- package/dist/auth/components/Label.js +18 -0
- package/dist/auth/components/Label.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 +87 -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 +61 -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 +78 -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 +73 -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 +57 -0
- package/dist/auth/components/VerifyEmailNotice.js.map +1 -0
- package/dist/auth/components/index.d.ts +15 -0
- package/dist/auth/components/index.d.ts.map +1 -0
- package/dist/auth/components/index.js +14 -0
- package/dist/auth/components/index.js.map +1 -0
- package/dist/auth/config.d.ts +52 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +243 -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 +7 -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 +251 -0
- package/dist/auth/hooks/useAuth.js.map +1 -0
- package/dist/auth/index.d.ts +55 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +67 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/server/customer-service.d.ts +140 -0
- package/dist/auth/server/customer-service.d.ts.map +1 -0
- package/dist/auth/server/customer-service.js +266 -0
- package/dist/auth/server/customer-service.js.map +1 -0
- package/dist/auth/server/customer-session.d.ts +79 -0
- package/dist/auth/server/customer-session.d.ts.map +1 -0
- package/dist/auth/server/customer-session.js +103 -0
- package/dist/auth/server/customer-session.js.map +1 -0
- package/dist/auth/server/index.d.ts +14 -0
- package/dist/auth/server/index.d.ts.map +1 -0
- package/dist/auth/server/index.js +17 -0
- package/dist/auth/server/index.js.map +1 -0
- package/dist/auth/server/password-reset-service.d.ts +87 -0
- package/dist/auth/server/password-reset-service.d.ts.map +1 -0
- package/dist/auth/server/password-reset-service.js +203 -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 +85 -0
- package/dist/auth/server/password.js.map +1 -0
- package/dist/auth/server/verification-service.d.ts +88 -0
- package/dist/auth/server/verification-service.d.ts.map +1 -0
- package/dist/auth/server/verification-service.js +231 -0
- package/dist/auth/server/verification-service.js.map +1 -0
- package/dist/auth/types.d.ts +311 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +7 -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 +96 -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 +122 -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 +117 -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 +68 -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 +60 -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 +85 -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 +12 -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 +115 -0
- package/dist/cart/index.js.map +1 -0
- package/dist/cart/store.d.ts +150 -0
- package/dist/cart/store.d.ts.map +1 -0
- package/dist/cart/store.js +315 -0
- package/dist/cart/store.js.map +1 -0
- package/dist/checkout/api/checkout.js +112 -0
- package/dist/checkout/api/checkout.js.map +1 -0
- package/dist/checkout/api/countries.d.ts +17 -0
- package/dist/checkout/api/countries.d.ts.map +1 -0
- package/dist/checkout/api/countries.js +38 -0
- package/dist/checkout/api/countries.js.map +1 -0
- package/dist/checkout/api/index.js +11 -0
- package/dist/checkout/api/index.js.map +1 -0
- package/dist/checkout/api/payment-status.d.ts +45 -0
- package/dist/checkout/api/payment-status.d.ts.map +1 -0
- package/dist/checkout/api/payment-status.js +104 -0
- package/dist/checkout/api/payment-status.js.map +1 -0
- package/dist/checkout/api/shipping.d.ts +34 -0
- package/dist/checkout/api/shipping.d.ts.map +1 -0
- package/dist/checkout/api/shipping.js +247 -0
- package/dist/checkout/api/shipping.js.map +1 -0
- package/dist/checkout/api/webhook.js +55 -0
- package/dist/checkout/api/webhook.js.map +1 -0
- package/dist/checkout/components/CheckoutButton.d.ts +55 -0
- package/dist/checkout/components/CheckoutButton.d.ts.map +1 -0
- package/dist/checkout/components/CheckoutButton.js +132 -0
- package/dist/checkout/components/CheckoutButton.js.map +1 -0
- package/dist/checkout/components/CheckoutFlow.d.ts +53 -0
- package/dist/checkout/components/CheckoutFlow.d.ts.map +1 -0
- package/dist/checkout/components/CheckoutFlow.js +286 -0
- package/dist/checkout/components/CheckoutFlow.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 +49 -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 +71 -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 +185 -0
- package/dist/checkout/components/ShippingForm.js.map +1 -0
- package/dist/checkout/components/ShippingOptions.d.ts +51 -0
- package/dist/checkout/components/ShippingOptions.d.ts.map +1 -0
- package/dist/checkout/components/ShippingOptions.js +93 -0
- package/dist/checkout/components/ShippingOptions.js.map +1 -0
- package/dist/checkout/components/index.d.ts +12 -0
- package/dist/checkout/components/index.d.ts.map +1 -0
- package/dist/checkout/components/index.js +12 -0
- package/dist/checkout/components/index.js.map +1 -0
- package/dist/checkout/constants.d.ts +244 -0
- package/dist/checkout/constants.d.ts.map +1 -0
- package/dist/checkout/constants.js +119 -0
- package/dist/checkout/constants.js.map +1 -0
- package/dist/checkout/hooks/index.d.ts +9 -0
- package/dist/checkout/hooks/index.d.ts.map +1 -0
- package/dist/checkout/hooks/index.js +8 -0
- package/dist/checkout/hooks/index.js.map +1 -0
- package/dist/checkout/hooks/useCheckout.d.ts +38 -0
- package/dist/checkout/hooks/useCheckout.d.ts.map +1 -0
- package/dist/checkout/hooks/useCheckout.js +134 -0
- package/dist/checkout/hooks/useCheckout.js.map +1 -0
- package/dist/checkout/hooks/usePaymentStatus.d.ts +42 -0
- package/dist/checkout/hooks/usePaymentStatus.d.ts.map +1 -0
- package/dist/checkout/hooks/usePaymentStatus.js +71 -0
- package/dist/checkout/hooks/usePaymentStatus.js.map +1 -0
- package/dist/checkout/index.js +135 -0
- package/dist/checkout/index.js.map +1 -0
- package/dist/checkout/server/coupons.d.ts +91 -0
- package/dist/checkout/server/coupons.d.ts.map +1 -0
- package/dist/checkout/server/coupons.js +192 -0
- package/dist/checkout/server/coupons.js.map +1 -0
- package/dist/checkout/server/index.js +10 -0
- package/dist/checkout/server/index.js.map +1 -0
- package/dist/checkout/stripe/client.d.ts +74 -0
- package/dist/checkout/stripe/client.d.ts.map +1 -0
- package/dist/checkout/stripe/client.js +175 -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 +7 -0
- package/dist/checkout/stripe/index.js.map +1 -0
- package/dist/checkout/types.d.ts +489 -0
- package/dist/checkout/types.d.ts.map +1 -0
- package/dist/checkout/types.js +8 -0
- package/dist/checkout/types.js.map +1 -0
- package/dist/core/StoreSettingsProvider.d.ts +107 -0
- package/dist/core/StoreSettingsProvider.d.ts.map +1 -0
- package/dist/core/StoreSettingsProvider.js +200 -0
- package/dist/core/StoreSettingsProvider.js.map +1 -0
- package/dist/core/api/index.d.ts +7 -0
- package/dist/core/api/index.d.ts.map +1 -0
- package/dist/core/api/index.js +7 -0
- package/dist/core/api/index.js.map +1 -0
- package/dist/core/api/settings.d.ts +42 -0
- package/dist/core/api/settings.d.ts.map +1 -0
- package/dist/core/api/settings.js +74 -0
- package/dist/core/api/settings.js.map +1 -0
- package/dist/core/config.d.ts +270 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +80 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/cookie-consent/CookieBanner.d.ts +2 -0
- package/dist/core/cookie-consent/CookieBanner.d.ts.map +1 -0
- package/dist/core/cookie-consent/CookieBanner.js +243 -0
- package/dist/core/cookie-consent/CookieBanner.js.map +1 -0
- package/dist/core/cookie-consent/CookieConsentProvider.d.ts +53 -0
- package/dist/core/cookie-consent/CookieConsentProvider.d.ts.map +1 -0
- package/dist/core/cookie-consent/CookieConsentProvider.js +162 -0
- package/dist/core/cookie-consent/CookieConsentProvider.js.map +1 -0
- package/dist/core/cookie-consent/CookiePreferencesLink.d.ts +15 -0
- package/dist/core/cookie-consent/CookiePreferencesLink.d.ts.map +1 -0
- package/dist/core/cookie-consent/CookiePreferencesLink.js +12 -0
- package/dist/core/cookie-consent/CookiePreferencesLink.js.map +1 -0
- package/dist/core/cookie-consent/index.d.ts +17 -0
- package/dist/core/cookie-consent/index.d.ts.map +1 -0
- package/dist/core/cookie-consent/index.js +16 -0
- package/dist/core/cookie-consent/index.js.map +1 -0
- package/dist/core/cookie-consent/types.d.ts +31 -0
- package/dist/core/cookie-consent/types.d.ts.map +1 -0
- package/dist/core/cookie-consent/types.js +10 -0
- package/dist/core/cookie-consent/types.js.map +1 -0
- package/dist/core/cookie-consent/useCookieConsent.d.ts +14 -0
- package/dist/core/cookie-consent/useCookieConsent.d.ts.map +1 -0
- package/dist/core/cookie-consent/useCookieConsent.js +25 -0
- package/dist/core/cookie-consent/useCookieConsent.js.map +1 -0
- package/dist/core/db/client.d.ts +39 -0
- package/dist/core/db/client.d.ts.map +1 -0
- package/dist/core/db/client.js +86 -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 +36 -0
- package/dist/core/db/index.js.map +1 -0
- package/dist/core/db/queries.d.ts +1427 -0
- package/dist/core/db/queries.d.ts.map +1 -0
- package/dist/core/db/queries.js +1932 -0
- package/dist/core/db/queries.js.map +1 -0
- package/dist/core/db/schema.d.ts +3462 -0
- package/dist/core/db/schema.d.ts.map +1 -0
- package/dist/core/db/schema.js +495 -0
- package/dist/core/db/schema.js.map +1 -0
- package/dist/core/index.d.ts +22 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +43 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/server/index.d.ts +18 -0
- package/dist/core/server/index.d.ts.map +1 -0
- package/dist/core/server/index.js +47 -0
- package/dist/core/server/index.js.map +1 -0
- package/dist/core/types.d.ts +246 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +8 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils.d.ts +147 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +309 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/emails/config.d.ts +69 -0
- package/dist/emails/config.d.ts.map +1 -0
- package/dist/emails/config.js +147 -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 +110 -0
- package/dist/emails/index.js.map +1 -0
- package/dist/emails/send/admin-auth.d.ts +94 -0
- package/dist/emails/send/admin-auth.d.ts.map +1 -0
- package/dist/emails/send/admin-auth.js +118 -0
- package/dist/emails/send/admin-auth.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 +130 -0
- package/dist/emails/send/auth.js.map +1 -0
- package/dist/emails/send/index.d.ts +12 -0
- package/dist/emails/send/index.d.ts.map +1 -0
- package/dist/emails/send/index.js +18 -0
- package/dist/emails/send/index.js.map +1 -0
- package/dist/emails/send/orders.d.ts +186 -0
- package/dist/emails/send/orders.d.ts.map +1 -0
- package/dist/emails/send/orders.js +258 -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 +116 -0
- package/dist/emails/sender.js.map +1 -0
- package/dist/emails/templates/admin-invite.d.ts +40 -0
- package/dist/emails/templates/admin-invite.d.ts.map +1 -0
- package/dist/emails/templates/admin-invite.js +62 -0
- package/dist/emails/templates/admin-invite.js.map +1 -0
- package/dist/emails/templates/base.d.ts +109 -0
- package/dist/emails/templates/base.d.ts.map +1 -0
- package/dist/emails/templates/base.js +334 -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 +52 -0
- package/dist/emails/templates/email-verification.js.map +1 -0
- package/dist/emails/templates/index.d.ts +16 -0
- package/dist/emails/templates/index.d.ts.map +1 -0
- package/dist/emails/templates/index.js +28 -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 +83 -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 +174 -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 +100 -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 +83 -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 +51 -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 +92 -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 +52 -0
- package/dist/emails/templates/welcome.js.map +1 -0
- package/dist/emails/types.d.ts +229 -0
- package/dist/emails/types.d.ts.map +1 -0
- package/dist/emails/types.js +7 -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 +218 -0
- package/dist/emails/utils.js.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/media/api/delete.d.ts +43 -0
- package/dist/media/api/delete.d.ts.map +1 -0
- package/dist/media/api/delete.js +124 -0
- package/dist/media/api/delete.js.map +1 -0
- package/dist/media/api/index.d.ts +17 -0
- package/dist/media/api/index.d.ts.map +1 -0
- package/dist/media/api/index.js +17 -0
- package/dist/media/api/index.js.map +1 -0
- package/dist/media/api/presign.d.ts +38 -0
- package/dist/media/api/presign.d.ts.map +1 -0
- package/dist/media/api/presign.js +130 -0
- package/dist/media/api/presign.js.map +1 -0
- package/dist/media/components/DropZone.d.ts +18 -0
- package/dist/media/components/DropZone.d.ts.map +1 -0
- package/dist/media/components/DropZone.js +107 -0
- package/dist/media/components/DropZone.js.map +1 -0
- package/dist/media/components/ImageGalleryUpload.d.ts +21 -0
- package/dist/media/components/ImageGalleryUpload.d.ts.map +1 -0
- package/dist/media/components/ImageGalleryUpload.js +193 -0
- package/dist/media/components/ImageGalleryUpload.js.map +1 -0
- package/dist/media/components/ImageUpload.d.ts +17 -0
- package/dist/media/components/ImageUpload.d.ts.map +1 -0
- package/dist/media/components/ImageUpload.js +89 -0
- package/dist/media/components/ImageUpload.js.map +1 -0
- package/dist/media/components/index.d.ts +10 -0
- package/dist/media/components/index.d.ts.map +1 -0
- package/dist/media/components/index.js +9 -0
- package/dist/media/components/index.js.map +1 -0
- package/dist/media/config.d.ts +83 -0
- package/dist/media/config.d.ts.map +1 -0
- package/dist/media/config.js +189 -0
- package/dist/media/config.js.map +1 -0
- package/dist/media/hooks/index.d.ts +8 -0
- package/dist/media/hooks/index.d.ts.map +1 -0
- package/dist/media/hooks/index.js +7 -0
- package/dist/media/hooks/index.js.map +1 -0
- package/dist/media/hooks/useUpload.d.ts +32 -0
- package/dist/media/hooks/useUpload.d.ts.map +1 -0
- package/dist/media/hooks/useUpload.js +260 -0
- package/dist/media/hooks/useUpload.js.map +1 -0
- package/dist/media/index.d.ts +57 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +68 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/server/delete.d.ts +59 -0
- package/dist/media/server/delete.d.ts.map +1 -0
- package/dist/media/server/delete.js +176 -0
- package/dist/media/server/delete.js.map +1 -0
- package/dist/media/server/index.d.ts +10 -0
- package/dist/media/server/index.d.ts.map +1 -0
- package/dist/media/server/index.js +13 -0
- package/dist/media/server/index.js.map +1 -0
- package/dist/media/server/presign.d.ts +57 -0
- package/dist/media/server/presign.d.ts.map +1 -0
- package/dist/media/server/presign.js +112 -0
- package/dist/media/server/presign.js.map +1 -0
- package/dist/media/server/r2-client.d.ts +30 -0
- package/dist/media/server/r2-client.d.ts.map +1 -0
- package/dist/media/server/r2-client.js +76 -0
- package/dist/media/server/r2-client.js.map +1 -0
- package/dist/media/types.d.ts +316 -0
- package/dist/media/types.d.ts.map +1 -0
- package/dist/media/types.js +95 -0
- package/dist/media/types.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 +46 -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 +24 -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 +67 -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 +99 -0
- package/dist/products/api/products.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 +72 -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 +137 -0
- package/dist/products/components/ProductDetails.js.map +1 -0
- package/dist/products/components/ProductGallery.d.ts +30 -0
- package/dist/products/components/ProductGallery.d.ts.map +1 -0
- package/dist/products/components/ProductGallery.js +91 -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 +81 -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 +97 -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 +59 -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 +20 -0
- package/dist/products/components/index.d.ts.map +1 -0
- package/dist/products/components/index.js +15 -0
- package/dist/products/components/index.js.map +1 -0
- package/dist/products/hooks/index.d.ts +10 -0
- package/dist/products/hooks/index.d.ts.map +1 -0
- package/dist/products/hooks/index.js +8 -0
- package/dist/products/hooks/index.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 +87 -0
- package/dist/products/hooks/useProduct.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 +131 -0
- package/dist/products/hooks/useProducts.js.map +1 -0
- package/dist/products/index.d.ts +69 -0
- package/dist/products/index.d.ts.map +1 -0
- package/dist/products/index.js +79 -0
- package/dist/products/index.js.map +1 -0
- package/dist/shipping/index.d.ts +8 -0
- package/dist/shipping/index.d.ts.map +1 -0
- package/dist/shipping/index.js +8 -0
- package/dist/shipping/index.js.map +1 -0
- package/dist/shipping/shippo.d.ts +77 -0
- package/dist/shipping/shippo.d.ts.map +1 -0
- package/dist/shipping/shippo.js +280 -0
- package/dist/shipping/shippo.js.map +1 -0
- package/dist/theme/colors.d.ts +134 -0
- package/dist/theme/colors.d.ts.map +1 -0
- package/dist/theme/colors.js +214 -0
- package/dist/theme/colors.js.map +1 -0
- package/dist/theme/defaults.d.ts +133 -0
- package/dist/theme/defaults.d.ts.map +1 -0
- package/dist/theme/defaults.js +210 -0
- package/dist/theme/defaults.js.map +1 -0
- package/dist/theme/fonts.d.ts +28 -0
- package/dist/theme/fonts.d.ts.map +1 -0
- package/dist/theme/fonts.js +55 -0
- package/dist/theme/fonts.js.map +1 -0
- package/dist/theme/generator.d.ts +43 -0
- package/dist/theme/generator.d.ts.map +1 -0
- package/dist/theme/generator.js +272 -0
- package/dist/theme/generator.js.map +1 -0
- package/dist/theme/index.d.ts +23 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +30 -0
- package/dist/theme/index.js.map +1 -0
- package/package.json +2 -2
- /package/dist/admin/{admin-theme.css → styles/admin-theme.css} +0 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/auth/server/password-reset-service
|
|
3
|
+
*
|
|
4
|
+
* Password reset token management.
|
|
5
|
+
* Handles creating, validating, and using reset tokens.
|
|
6
|
+
* Each store has its own database (via Neon branches) - no tenant isolation needed.
|
|
7
|
+
*/
|
|
8
|
+
import { eq, lt } from 'drizzle-orm';
|
|
9
|
+
import { nanoid } from 'nanoid';
|
|
10
|
+
import { getDb } from '../../core/db/client';
|
|
11
|
+
import * as schema from '../../core/db/schema';
|
|
12
|
+
import { findCustomerByEmail, updateCustomerPassword } from './customer-service';
|
|
13
|
+
import { sendPasswordResetEmail, getStoreUrl } from '../../emails';
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// Constants
|
|
16
|
+
// =============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Password reset token expiry time in milliseconds (1 hour).
|
|
19
|
+
* Shorter than verification tokens for security.
|
|
20
|
+
*/
|
|
21
|
+
const TOKEN_EXPIRY_MS = 60 * 60 * 1000;
|
|
22
|
+
/**
|
|
23
|
+
* Token length (URL-safe).
|
|
24
|
+
*/
|
|
25
|
+
const TOKEN_LENGTH = 32;
|
|
26
|
+
// =============================================================================
|
|
27
|
+
// Token Management
|
|
28
|
+
// =============================================================================
|
|
29
|
+
/**
|
|
30
|
+
* Request a password reset for a customer.
|
|
31
|
+
* Creates a token and sends reset email.
|
|
32
|
+
*
|
|
33
|
+
* Note: Always returns success to prevent email enumeration attacks.
|
|
34
|
+
*
|
|
35
|
+
* @param email - Customer email address
|
|
36
|
+
* @returns Always returns success (security best practice)
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const result = await requestPasswordReset('customer@example.com')
|
|
41
|
+
* // Always show "If an account exists, we've sent a reset email"
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export async function requestPasswordReset(email) {
|
|
45
|
+
// Find customer by email
|
|
46
|
+
const customer = await findCustomerByEmail(email);
|
|
47
|
+
if (!customer) {
|
|
48
|
+
// Don't reveal if email exists - return success anyway
|
|
49
|
+
return { success: true };
|
|
50
|
+
}
|
|
51
|
+
// Delete any existing reset tokens for this customer
|
|
52
|
+
await deletePasswordResetTokens(customer.id);
|
|
53
|
+
// Generate new token
|
|
54
|
+
const db = getDb();
|
|
55
|
+
const token = nanoid(TOKEN_LENGTH);
|
|
56
|
+
const expires = new Date(Date.now() + TOKEN_EXPIRY_MS);
|
|
57
|
+
await db.insert(schema.customerPasswordResetTokens).values({
|
|
58
|
+
customerId: customer.id,
|
|
59
|
+
token,
|
|
60
|
+
expires,
|
|
61
|
+
});
|
|
62
|
+
// Send reset email
|
|
63
|
+
try {
|
|
64
|
+
const resetLink = `${getStoreUrl()}/auth/reset-password?token=${token}`;
|
|
65
|
+
await sendPasswordResetEmail({
|
|
66
|
+
to: email,
|
|
67
|
+
customerName: customer.name || email.split('@')[0],
|
|
68
|
+
resetLink,
|
|
69
|
+
expiryTime: '1',
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.error('[Auth Reset] Failed to send password reset email:', error);
|
|
74
|
+
// Don't fail the request if email fails - still return success for security
|
|
75
|
+
}
|
|
76
|
+
return { success: true };
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Validate a password reset token.
|
|
80
|
+
* Does NOT consume the token - use resetPassword() for that.
|
|
81
|
+
*
|
|
82
|
+
* @param token - Reset token from email link
|
|
83
|
+
* @returns Validation result
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* const result = await validateResetToken(token)
|
|
88
|
+
* if (result.valid) {
|
|
89
|
+
* // Show password reset form
|
|
90
|
+
* } else {
|
|
91
|
+
* // Show error message
|
|
92
|
+
* }
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export async function validateResetToken(token) {
|
|
96
|
+
const db = getDb();
|
|
97
|
+
// Find the token
|
|
98
|
+
const [tokenRecord] = await db
|
|
99
|
+
.select()
|
|
100
|
+
.from(schema.customerPasswordResetTokens)
|
|
101
|
+
.where(eq(schema.customerPasswordResetTokens.token, token))
|
|
102
|
+
.limit(1);
|
|
103
|
+
if (!tokenRecord) {
|
|
104
|
+
return {
|
|
105
|
+
valid: false,
|
|
106
|
+
error: 'Invalid or expired reset link. Please request a new one.',
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// Check if token has expired
|
|
110
|
+
if (new Date() > tokenRecord.expires) {
|
|
111
|
+
// Clean up expired token
|
|
112
|
+
await db
|
|
113
|
+
.delete(schema.customerPasswordResetTokens)
|
|
114
|
+
.where(eq(schema.customerPasswordResetTokens.id, tokenRecord.id));
|
|
115
|
+
return {
|
|
116
|
+
valid: false,
|
|
117
|
+
error: 'Reset link has expired. Please request a new one.',
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return { valid: true };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Reset password using a token.
|
|
124
|
+
* Validates the token, updates the password, and deletes the token.
|
|
125
|
+
*
|
|
126
|
+
* @param token - Reset token from email link
|
|
127
|
+
* @param newPassword - New password (plain text, will be hashed)
|
|
128
|
+
* @returns Reset result
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```typescript
|
|
132
|
+
* const result = await resetPassword(token, 'newSecurePassword123')
|
|
133
|
+
* if (result.success) {
|
|
134
|
+
* // Redirect to login
|
|
135
|
+
* } else {
|
|
136
|
+
* // Show error
|
|
137
|
+
* }
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
export async function resetPassword(token, newPassword) {
|
|
141
|
+
const db = getDb();
|
|
142
|
+
// Find the token
|
|
143
|
+
const [tokenRecord] = await db
|
|
144
|
+
.select()
|
|
145
|
+
.from(schema.customerPasswordResetTokens)
|
|
146
|
+
.where(eq(schema.customerPasswordResetTokens.token, token))
|
|
147
|
+
.limit(1);
|
|
148
|
+
if (!tokenRecord) {
|
|
149
|
+
return {
|
|
150
|
+
success: false,
|
|
151
|
+
error: 'Invalid or expired reset link. Please request a new one.',
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// Check if token has expired
|
|
155
|
+
if (new Date() > tokenRecord.expires) {
|
|
156
|
+
// Clean up expired token
|
|
157
|
+
await db
|
|
158
|
+
.delete(schema.customerPasswordResetTokens)
|
|
159
|
+
.where(eq(schema.customerPasswordResetTokens.id, tokenRecord.id));
|
|
160
|
+
return {
|
|
161
|
+
success: false,
|
|
162
|
+
error: 'Reset link has expired. Please request a new one.',
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
// Update the customer's password
|
|
166
|
+
await updateCustomerPassword(tokenRecord.customerId, newPassword);
|
|
167
|
+
// Delete all reset tokens for this customer
|
|
168
|
+
await db
|
|
169
|
+
.delete(schema.customerPasswordResetTokens)
|
|
170
|
+
.where(eq(schema.customerPasswordResetTokens.customerId, tokenRecord.customerId));
|
|
171
|
+
return { success: true };
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Delete all password reset tokens for a customer.
|
|
175
|
+
*
|
|
176
|
+
* @param customerId - Customer UUID
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```typescript
|
|
180
|
+
* await deletePasswordResetTokens(customerId)
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
export async function deletePasswordResetTokens(customerId) {
|
|
184
|
+
const db = getDb();
|
|
185
|
+
await db
|
|
186
|
+
.delete(schema.customerPasswordResetTokens)
|
|
187
|
+
.where(eq(schema.customerPasswordResetTokens.customerId, customerId));
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Clean up expired password reset tokens.
|
|
191
|
+
* Should be called periodically (e.g., via cron job).
|
|
192
|
+
*
|
|
193
|
+
* @returns Number of tokens deleted
|
|
194
|
+
*/
|
|
195
|
+
export async function cleanupExpiredResetTokens() {
|
|
196
|
+
const db = getDb();
|
|
197
|
+
const result = await db
|
|
198
|
+
.delete(schema.customerPasswordResetTokens)
|
|
199
|
+
.where(lt(schema.customerPasswordResetTokens.expires, new Date()))
|
|
200
|
+
.returning({ id: schema.customerPasswordResetTokens.id });
|
|
201
|
+
return result.length;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=password-reset-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-reset-service.js","sourceRoot":"","sources":["../../../src/auth/server/password-reset-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/auth/server/password
|
|
3
|
+
*
|
|
4
|
+
* Password hashing and verification utilities.
|
|
5
|
+
* Uses bcryptjs with 12 salt rounds for security.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Minimum password length required.
|
|
9
|
+
*/
|
|
10
|
+
export declare const MIN_PASSWORD_LENGTH = 8;
|
|
11
|
+
/**
|
|
12
|
+
* Hash a password using bcrypt.
|
|
13
|
+
*
|
|
14
|
+
* @param password - Plain text password to hash
|
|
15
|
+
* @returns Hashed password string
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const hash = await hashPassword('mySecurePassword123')
|
|
20
|
+
* // Store hash in database
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function hashPassword(password: string): Promise<string>;
|
|
24
|
+
/**
|
|
25
|
+
* Verify a password against a hash.
|
|
26
|
+
*
|
|
27
|
+
* @param password - Plain text password to verify
|
|
28
|
+
* @param hashedPassword - Hashed password from database
|
|
29
|
+
* @returns True if password matches, false otherwise
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const isValid = await verifyPassword('mySecurePassword123', storedHash)
|
|
34
|
+
* if (!isValid) {
|
|
35
|
+
* throw new Error('Invalid password')
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function verifyPassword(password: string, hashedPassword: string): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* Validate password strength.
|
|
42
|
+
*
|
|
43
|
+
* @param password - Password to validate
|
|
44
|
+
* @returns Object with valid flag and optional error message
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const result = validatePassword('short')
|
|
49
|
+
* if (!result.valid) {
|
|
50
|
+
* console.error(result.error) // "Password must be at least 8 characters"
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function validatePassword(password: string): {
|
|
55
|
+
valid: boolean;
|
|
56
|
+
error?: string;
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=password.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../src/auth/server/password.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH;;GAEG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAMpC;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAElB;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAClD,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAaA"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/auth/server/password
|
|
3
|
+
*
|
|
4
|
+
* Password hashing and verification utilities.
|
|
5
|
+
* Uses bcryptjs with 12 salt rounds for security.
|
|
6
|
+
*/
|
|
7
|
+
import bcrypt from 'bcryptjs';
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// Constants
|
|
10
|
+
// =============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Number of salt rounds for bcrypt.
|
|
13
|
+
* 12 rounds provides a good balance of security and performance.
|
|
14
|
+
*/
|
|
15
|
+
const SALT_ROUNDS = 12;
|
|
16
|
+
/**
|
|
17
|
+
* Minimum password length required.
|
|
18
|
+
*/
|
|
19
|
+
export const MIN_PASSWORD_LENGTH = 8;
|
|
20
|
+
// =============================================================================
|
|
21
|
+
// Password Hashing
|
|
22
|
+
// =============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* Hash a password using bcrypt.
|
|
25
|
+
*
|
|
26
|
+
* @param password - Plain text password to hash
|
|
27
|
+
* @returns Hashed password string
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const hash = await hashPassword('mySecurePassword123')
|
|
32
|
+
* // Store hash in database
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export async function hashPassword(password) {
|
|
36
|
+
return bcrypt.hash(password, SALT_ROUNDS);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Verify a password against a hash.
|
|
40
|
+
*
|
|
41
|
+
* @param password - Plain text password to verify
|
|
42
|
+
* @param hashedPassword - Hashed password from database
|
|
43
|
+
* @returns True if password matches, false otherwise
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const isValid = await verifyPassword('mySecurePassword123', storedHash)
|
|
48
|
+
* if (!isValid) {
|
|
49
|
+
* throw new Error('Invalid password')
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export async function verifyPassword(password, hashedPassword) {
|
|
54
|
+
return bcrypt.compare(password, hashedPassword);
|
|
55
|
+
}
|
|
56
|
+
// =============================================================================
|
|
57
|
+
// Password Validation
|
|
58
|
+
// =============================================================================
|
|
59
|
+
/**
|
|
60
|
+
* Validate password strength.
|
|
61
|
+
*
|
|
62
|
+
* @param password - Password to validate
|
|
63
|
+
* @returns Object with valid flag and optional error message
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const result = validatePassword('short')
|
|
68
|
+
* if (!result.valid) {
|
|
69
|
+
* console.error(result.error) // "Password must be at least 8 characters"
|
|
70
|
+
* }
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export function validatePassword(password) {
|
|
74
|
+
if (!password) {
|
|
75
|
+
return { valid: false, error: 'Password is required' };
|
|
76
|
+
}
|
|
77
|
+
if (password.length < MIN_PASSWORD_LENGTH) {
|
|
78
|
+
return {
|
|
79
|
+
valid: false,
|
|
80
|
+
error: `Password must be at least ${MIN_PASSWORD_LENGTH} characters`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
return { valid: true };
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=password.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password.js","sourceRoot":"","sources":["../../../src/auth/server/password.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,MAAM,MAAM,UAAU,CAAA;AAE7B,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,WAAW,GAAG,EAAE,CAAA;AAEtB;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAEpC,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;AAC3C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,cAAsB;IAEtB,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;AACjD,CAAC;AAED,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAI/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAA;IACxD,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;QAC1C,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,6BAA6B,mBAAmB,aAAa;SACrE,CAAA;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;AACxB,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/auth/server/verification-service
|
|
3
|
+
*
|
|
4
|
+
* Email verification token management.
|
|
5
|
+
* Handles creating, validating, and cleaning up verification tokens.
|
|
6
|
+
* Each store has its own database (via Neon branches) - no tenant isolation needed.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Create a verification token for a customer.
|
|
10
|
+
* Deletes any existing tokens for the customer first.
|
|
11
|
+
*
|
|
12
|
+
* @param customerId - Customer UUID
|
|
13
|
+
* @returns The verification token
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const token = await createVerificationToken(customerId)
|
|
18
|
+
* // Use token in verification email link
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function createVerificationToken(customerId: string): Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* Verify email using a token.
|
|
24
|
+
* Marks the customer's email as verified if token is valid.
|
|
25
|
+
*
|
|
26
|
+
* @param token - Verification token from email link
|
|
27
|
+
* @returns Verification result
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const result = await verifyEmail(token)
|
|
32
|
+
* if (result.success) {
|
|
33
|
+
* console.log('Email verified for customer:', result.customerId)
|
|
34
|
+
* } else {
|
|
35
|
+
* console.error('Verification failed:', result.error)
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function verifyEmail(token: string): Promise<{
|
|
40
|
+
success: boolean;
|
|
41
|
+
customerId?: string;
|
|
42
|
+
error?: string;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Delete all verification tokens for a customer.
|
|
46
|
+
*
|
|
47
|
+
* @param customerId - Customer UUID
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* await deleteVerificationTokens(customerId)
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function deleteVerificationTokens(customerId: string): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Resend verification email to a customer.
|
|
57
|
+
* Creates a new token and sends the email.
|
|
58
|
+
*
|
|
59
|
+
* @param email - Customer email address
|
|
60
|
+
* @returns Result with success status
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const result = await resendVerificationEmail('customer@example.com')
|
|
65
|
+
* if (result.success) {
|
|
66
|
+
* console.log('Verification email sent')
|
|
67
|
+
* }
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare function resendVerificationEmail(email: string): Promise<{
|
|
71
|
+
success: boolean;
|
|
72
|
+
error?: string;
|
|
73
|
+
}>;
|
|
74
|
+
/**
|
|
75
|
+
* Check if a customer's email is verified.
|
|
76
|
+
*
|
|
77
|
+
* @param customerId - Customer UUID
|
|
78
|
+
* @returns True if email is verified
|
|
79
|
+
*/
|
|
80
|
+
export declare function isEmailVerified(customerId: string): Promise<boolean>;
|
|
81
|
+
/**
|
|
82
|
+
* Clean up expired verification tokens.
|
|
83
|
+
* Should be called periodically (e.g., via cron job).
|
|
84
|
+
*
|
|
85
|
+
* @returns Number of tokens deleted
|
|
86
|
+
*/
|
|
87
|
+
export declare function cleanupExpiredTokens(): Promise<number>;
|
|
88
|
+
//# sourceMappingURL=verification-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-service.d.ts","sourceRoot":"","sources":["../../../src/auth/server/verification-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2BH;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CA6CD;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACpE,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAoCD;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU1E;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAS5D"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/auth/server/verification-service
|
|
3
|
+
*
|
|
4
|
+
* Email verification token management.
|
|
5
|
+
* Handles creating, validating, and cleaning up verification tokens.
|
|
6
|
+
* Each store has its own database (via Neon branches) - no tenant isolation needed.
|
|
7
|
+
*/
|
|
8
|
+
import { eq, lt } from 'drizzle-orm';
|
|
9
|
+
import { nanoid } from 'nanoid';
|
|
10
|
+
import { getDb } from '../../core/db/client';
|
|
11
|
+
import * as schema from '../../core/db/schema';
|
|
12
|
+
import { findCustomerByEmail, markEmailVerified } from './customer-service';
|
|
13
|
+
import { sendVerificationEmail, sendWelcomeEmail, getStoreUrl } from '../../emails';
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// Constants
|
|
16
|
+
// =============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Verification token expiry time in milliseconds (24 hours).
|
|
19
|
+
*/
|
|
20
|
+
const TOKEN_EXPIRY_MS = 24 * 60 * 60 * 1000;
|
|
21
|
+
/**
|
|
22
|
+
* Token length (URL-safe).
|
|
23
|
+
*/
|
|
24
|
+
const TOKEN_LENGTH = 32;
|
|
25
|
+
// =============================================================================
|
|
26
|
+
// Token Management
|
|
27
|
+
// =============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Create a verification token for a customer.
|
|
30
|
+
* Deletes any existing tokens for the customer first.
|
|
31
|
+
*
|
|
32
|
+
* @param customerId - Customer UUID
|
|
33
|
+
* @returns The verification token
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* const token = await createVerificationToken(customerId)
|
|
38
|
+
* // Use token in verification email link
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export async function createVerificationToken(customerId) {
|
|
42
|
+
const db = getDb();
|
|
43
|
+
// Delete any existing tokens for this customer
|
|
44
|
+
await deleteVerificationTokens(customerId);
|
|
45
|
+
// Generate new token
|
|
46
|
+
const token = nanoid(TOKEN_LENGTH);
|
|
47
|
+
const expires = new Date(Date.now() + TOKEN_EXPIRY_MS);
|
|
48
|
+
await db.insert(schema.customerVerificationTokens).values({
|
|
49
|
+
customerId,
|
|
50
|
+
token,
|
|
51
|
+
expires,
|
|
52
|
+
});
|
|
53
|
+
return token;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Verify email using a token.
|
|
57
|
+
* Marks the customer's email as verified if token is valid.
|
|
58
|
+
*
|
|
59
|
+
* @param token - Verification token from email link
|
|
60
|
+
* @returns Verification result
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const result = await verifyEmail(token)
|
|
65
|
+
* if (result.success) {
|
|
66
|
+
* console.log('Email verified for customer:', result.customerId)
|
|
67
|
+
* } else {
|
|
68
|
+
* console.error('Verification failed:', result.error)
|
|
69
|
+
* }
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export async function verifyEmail(token) {
|
|
73
|
+
const db = getDb();
|
|
74
|
+
// Find the token
|
|
75
|
+
const [tokenRecord] = await db
|
|
76
|
+
.select()
|
|
77
|
+
.from(schema.customerVerificationTokens)
|
|
78
|
+
.where(eq(schema.customerVerificationTokens.token, token))
|
|
79
|
+
.limit(1);
|
|
80
|
+
if (!tokenRecord) {
|
|
81
|
+
return {
|
|
82
|
+
success: false,
|
|
83
|
+
error: 'Invalid verification link. Please request a new one.',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Check if token has expired
|
|
87
|
+
if (new Date() > tokenRecord.expires) {
|
|
88
|
+
// Clean up expired token
|
|
89
|
+
await db
|
|
90
|
+
.delete(schema.customerVerificationTokens)
|
|
91
|
+
.where(eq(schema.customerVerificationTokens.id, tokenRecord.id));
|
|
92
|
+
return {
|
|
93
|
+
success: false,
|
|
94
|
+
error: 'Verification link has expired. Please request a new one.',
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
// Mark customer email as verified
|
|
98
|
+
await markEmailVerified(tokenRecord.customerId);
|
|
99
|
+
// Delete the used token and any other tokens for this customer
|
|
100
|
+
await db
|
|
101
|
+
.delete(schema.customerVerificationTokens)
|
|
102
|
+
.where(eq(schema.customerVerificationTokens.customerId, tokenRecord.customerId));
|
|
103
|
+
// Send welcome email after verification
|
|
104
|
+
await sendWelcomeEmailInternal(tokenRecord.customerId);
|
|
105
|
+
return {
|
|
106
|
+
success: true,
|
|
107
|
+
customerId: tokenRecord.customerId,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Delete all verification tokens for a customer.
|
|
112
|
+
*
|
|
113
|
+
* @param customerId - Customer UUID
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* await deleteVerificationTokens(customerId)
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
export async function deleteVerificationTokens(customerId) {
|
|
121
|
+
const db = getDb();
|
|
122
|
+
await db
|
|
123
|
+
.delete(schema.customerVerificationTokens)
|
|
124
|
+
.where(eq(schema.customerVerificationTokens.customerId, customerId));
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Resend verification email to a customer.
|
|
128
|
+
* Creates a new token and sends the email.
|
|
129
|
+
*
|
|
130
|
+
* @param email - Customer email address
|
|
131
|
+
* @returns Result with success status
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```typescript
|
|
135
|
+
* const result = await resendVerificationEmail('customer@example.com')
|
|
136
|
+
* if (result.success) {
|
|
137
|
+
* console.log('Verification email sent')
|
|
138
|
+
* }
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
export async function resendVerificationEmail(email) {
|
|
142
|
+
// Find customer by email
|
|
143
|
+
const customer = await findCustomerByEmail(email);
|
|
144
|
+
if (!customer) {
|
|
145
|
+
// Don't reveal if email exists - return success anyway
|
|
146
|
+
return { success: true };
|
|
147
|
+
}
|
|
148
|
+
// Check if already verified
|
|
149
|
+
if (customer.emailVerified) {
|
|
150
|
+
return {
|
|
151
|
+
success: false,
|
|
152
|
+
error: 'Email is already verified',
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
// Create new verification token
|
|
156
|
+
const token = await createVerificationToken(customer.id);
|
|
157
|
+
// Send verification email
|
|
158
|
+
try {
|
|
159
|
+
const verificationLink = `${getStoreUrl()}/auth/verify-email?token=${token}`;
|
|
160
|
+
await sendVerificationEmail({
|
|
161
|
+
to: email,
|
|
162
|
+
customerName: customer.name || email.split('@')[0],
|
|
163
|
+
verificationLink,
|
|
164
|
+
expiryTime: '24',
|
|
165
|
+
});
|
|
166
|
+
return { success: true };
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return {
|
|
170
|
+
success: false,
|
|
171
|
+
error: 'Failed to send verification email. Please try again.',
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Check if a customer's email is verified.
|
|
177
|
+
*
|
|
178
|
+
* @param customerId - Customer UUID
|
|
179
|
+
* @returns True if email is verified
|
|
180
|
+
*/
|
|
181
|
+
export async function isEmailVerified(customerId) {
|
|
182
|
+
const db = getDb();
|
|
183
|
+
const [customer] = await db
|
|
184
|
+
.select({ emailVerified: schema.customers.emailVerified })
|
|
185
|
+
.from(schema.customers)
|
|
186
|
+
.where(eq(schema.customers.id, customerId))
|
|
187
|
+
.limit(1);
|
|
188
|
+
return !!customer?.emailVerified;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Clean up expired verification tokens.
|
|
192
|
+
* Should be called periodically (e.g., via cron job).
|
|
193
|
+
*
|
|
194
|
+
* @returns Number of tokens deleted
|
|
195
|
+
*/
|
|
196
|
+
export async function cleanupExpiredTokens() {
|
|
197
|
+
const db = getDb();
|
|
198
|
+
const result = await db
|
|
199
|
+
.delete(schema.customerVerificationTokens)
|
|
200
|
+
.where(lt(schema.customerVerificationTokens.expires, new Date()))
|
|
201
|
+
.returning({ id: schema.customerVerificationTokens.id });
|
|
202
|
+
return result.length;
|
|
203
|
+
}
|
|
204
|
+
// =============================================================================
|
|
205
|
+
// Internal Helpers
|
|
206
|
+
// =============================================================================
|
|
207
|
+
/**
|
|
208
|
+
* Send welcome email after successful email verification.
|
|
209
|
+
* Errors are logged but don't throw to prevent verification failure.
|
|
210
|
+
*/
|
|
211
|
+
async function sendWelcomeEmailInternal(customerId) {
|
|
212
|
+
try {
|
|
213
|
+
const db = getDb();
|
|
214
|
+
const [customer] = await db
|
|
215
|
+
.select({ email: schema.customers.email, name: schema.customers.name })
|
|
216
|
+
.from(schema.customers)
|
|
217
|
+
.where(eq(schema.customers.id, customerId))
|
|
218
|
+
.limit(1);
|
|
219
|
+
if (customer) {
|
|
220
|
+
await sendWelcomeEmail({
|
|
221
|
+
to: customer.email,
|
|
222
|
+
customerName: customer.name || customer.email.split('@')[0],
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
// Log but don't throw - welcome email is not critical
|
|
228
|
+
console.error('[Auth Verification] Failed to send welcome email:', error);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=verification-service.js.map
|