@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.
Files changed (922) hide show
  1. package/dist/admin/api/accept-invite.d.ts +65 -0
  2. package/dist/admin/api/accept-invite.d.ts.map +1 -0
  3. package/dist/admin/api/accept-invite.js +115 -0
  4. package/dist/admin/api/accept-invite.js.map +1 -0
  5. package/dist/admin/api/categories.d.ts +68 -0
  6. package/dist/admin/api/categories.d.ts.map +1 -0
  7. package/dist/admin/api/categories.js +266 -0
  8. package/dist/admin/api/categories.js.map +1 -0
  9. package/dist/admin/api/check.d.ts +38 -0
  10. package/dist/admin/api/check.d.ts.map +1 -0
  11. package/dist/admin/api/check.js +49 -0
  12. package/dist/admin/api/check.js.map +1 -0
  13. package/dist/admin/api/customers.d.ts +77 -0
  14. package/dist/admin/api/customers.d.ts.map +1 -0
  15. package/dist/admin/api/customers.js +219 -0
  16. package/dist/admin/api/customers.js.map +1 -0
  17. package/dist/admin/api/forgot-password.d.ts +39 -0
  18. package/dist/admin/api/forgot-password.d.ts.map +1 -0
  19. package/dist/admin/api/forgot-password.js +66 -0
  20. package/dist/admin/api/forgot-password.js.map +1 -0
  21. package/dist/admin/api/index.d.ts +109 -0
  22. package/dist/admin/api/index.d.ts.map +1 -0
  23. package/dist/admin/api/index.js +128 -0
  24. package/dist/admin/api/index.js.map +1 -0
  25. package/dist/admin/api/linked-customer.d.ts +32 -0
  26. package/dist/admin/api/linked-customer.d.ts.map +1 -0
  27. package/dist/admin/api/linked-customer.js +45 -0
  28. package/dist/admin/api/linked-customer.js.map +1 -0
  29. package/dist/admin/api/me.d.ts +72 -0
  30. package/dist/admin/api/me.d.ts.map +1 -0
  31. package/dist/admin/api/me.js +177 -0
  32. package/dist/admin/api/me.js.map +1 -0
  33. package/dist/admin/api/orders.d.ts +91 -0
  34. package/dist/admin/api/orders.d.ts.map +1 -0
  35. package/dist/admin/api/orders.js +390 -0
  36. package/dist/admin/api/orders.js.map +1 -0
  37. package/dist/admin/api/products-bulk.d.ts +38 -0
  38. package/dist/admin/api/products-bulk.d.ts.map +1 -0
  39. package/dist/admin/api/products-bulk.js +135 -0
  40. package/dist/admin/api/products-bulk.js.map +1 -0
  41. package/dist/admin/api/products-stats.d.ts +34 -0
  42. package/dist/admin/api/products-stats.d.ts.map +1 -0
  43. package/dist/admin/api/products-stats.js +43 -0
  44. package/dist/admin/api/products-stats.js.map +1 -0
  45. package/dist/admin/api/products.d.ts +104 -0
  46. package/dist/admin/api/products.d.ts.map +1 -0
  47. package/dist/admin/api/products.js +491 -0
  48. package/dist/admin/api/products.js.map +1 -0
  49. package/dist/admin/api/refund.d.ts +29 -0
  50. package/dist/admin/api/refund.d.ts.map +1 -0
  51. package/dist/admin/api/refund.js +142 -0
  52. package/dist/admin/api/refund.js.map +1 -0
  53. package/dist/admin/api/reset-password.d.ts +49 -0
  54. package/dist/admin/api/reset-password.d.ts.map +1 -0
  55. package/dist/admin/api/reset-password.js +99 -0
  56. package/dist/admin/api/reset-password.js.map +1 -0
  57. package/dist/admin/api/return.d.ts +47 -0
  58. package/dist/admin/api/return.d.ts.map +1 -0
  59. package/dist/admin/api/return.js +186 -0
  60. package/dist/admin/api/return.js.map +1 -0
  61. package/dist/admin/api/settings.d.ts +49 -0
  62. package/dist/admin/api/settings.d.ts.map +1 -0
  63. package/dist/admin/api/settings.js +201 -0
  64. package/dist/admin/api/settings.js.map +1 -0
  65. package/dist/admin/api/setup-guide.d.ts +78 -0
  66. package/dist/admin/api/setup-guide.d.ts.map +1 -0
  67. package/dist/admin/api/setup-guide.js +235 -0
  68. package/dist/admin/api/setup-guide.js.map +1 -0
  69. package/dist/admin/api/setup.d.ts +60 -0
  70. package/dist/admin/api/setup.d.ts.map +1 -0
  71. package/dist/admin/api/setup.js +126 -0
  72. package/dist/admin/api/setup.js.map +1 -0
  73. package/dist/admin/api/shipping.d.ts +287 -0
  74. package/dist/admin/api/shipping.d.ts.map +1 -0
  75. package/dist/admin/api/shipping.js +746 -0
  76. package/dist/admin/api/shipping.js.map +1 -0
  77. package/dist/admin/api/stats.d.ts +43 -0
  78. package/dist/admin/api/stats.d.ts.map +1 -0
  79. package/dist/admin/api/stats.js +92 -0
  80. package/dist/admin/api/stats.js.map +1 -0
  81. package/dist/admin/api/stripe-status.d.ts +39 -0
  82. package/dist/admin/api/stripe-status.d.ts.map +1 -0
  83. package/dist/admin/api/stripe-status.js +99 -0
  84. package/dist/admin/api/stripe-status.js.map +1 -0
  85. package/dist/admin/api/tax-zones.d.ts +97 -0
  86. package/dist/admin/api/tax-zones.d.ts.map +1 -0
  87. package/dist/admin/api/tax-zones.js +265 -0
  88. package/dist/admin/api/tax-zones.js.map +1 -0
  89. package/dist/admin/api/users.d.ts +142 -0
  90. package/dist/admin/api/users.d.ts.map +1 -0
  91. package/dist/admin/api/users.js +355 -0
  92. package/dist/admin/api/users.js.map +1 -0
  93. package/dist/admin/components/AdminAcceptInviteForm.d.ts +3 -0
  94. package/dist/admin/components/AdminAcceptInviteForm.d.ts.map +1 -0
  95. package/dist/admin/components/AdminAcceptInviteForm.js +137 -0
  96. package/dist/admin/components/AdminAcceptInviteForm.js.map +1 -0
  97. package/dist/admin/components/AdminAccountPage.d.ts +10 -0
  98. package/dist/admin/components/AdminAccountPage.d.ts.map +1 -0
  99. package/dist/admin/components/AdminAccountPage.js +126 -0
  100. package/dist/admin/components/AdminAccountPage.js.map +1 -0
  101. package/dist/admin/components/AdminBarBanner.d.ts +2 -0
  102. package/dist/admin/components/AdminBarBanner.d.ts.map +1 -0
  103. package/dist/admin/components/AdminBarBanner.js +266 -0
  104. package/dist/admin/components/AdminBarBanner.js.map +1 -0
  105. package/dist/admin/components/AdminForgotPasswordForm.d.ts +8 -0
  106. package/dist/admin/components/AdminForgotPasswordForm.d.ts.map +1 -0
  107. package/dist/admin/components/AdminForgotPasswordForm.js +59 -0
  108. package/dist/admin/components/AdminForgotPasswordForm.js.map +1 -0
  109. package/dist/admin/components/AdminGuard.d.ts +40 -0
  110. package/dist/admin/components/AdminGuard.d.ts.map +1 -0
  111. package/dist/admin/components/AdminGuard.js +94 -0
  112. package/dist/admin/components/AdminGuard.js.map +1 -0
  113. package/dist/admin/components/AdminLayout.d.ts +40 -0
  114. package/dist/admin/components/AdminLayout.d.ts.map +1 -0
  115. package/dist/admin/components/AdminLayout.js +39 -0
  116. package/dist/admin/components/AdminLayout.js.map +1 -0
  117. package/dist/admin/components/AdminLoginForm.d.ts +18 -0
  118. package/dist/admin/components/AdminLoginForm.d.ts.map +1 -0
  119. package/dist/admin/components/AdminLoginForm.js +61 -0
  120. package/dist/admin/components/AdminLoginForm.js.map +1 -0
  121. package/dist/admin/components/AdminNav.d.ts +44 -0
  122. package/dist/admin/components/AdminNav.d.ts.map +1 -0
  123. package/dist/admin/components/AdminNav.js +175 -0
  124. package/dist/admin/components/AdminNav.js.map +1 -0
  125. package/dist/admin/components/AdminResetPasswordForm.d.ts +12 -0
  126. package/dist/admin/components/AdminResetPasswordForm.d.ts.map +1 -0
  127. package/dist/admin/components/AdminResetPasswordForm.js +134 -0
  128. package/dist/admin/components/AdminResetPasswordForm.js.map +1 -0
  129. package/dist/admin/components/AdminSelect.d.ts +47 -0
  130. package/dist/admin/components/AdminSelect.d.ts.map +1 -0
  131. package/dist/admin/components/AdminSelect.js +71 -0
  132. package/dist/admin/components/AdminSelect.js.map +1 -0
  133. package/dist/admin/components/AdminToast.d.ts +31 -0
  134. package/dist/admin/components/AdminToast.d.ts.map +1 -0
  135. package/dist/admin/components/AdminToast.js +83 -0
  136. package/dist/admin/components/AdminToast.js.map +1 -0
  137. package/dist/admin/components/AdminUserMenu.d.ts +14 -0
  138. package/dist/admin/components/AdminUserMenu.d.ts.map +1 -0
  139. package/dist/admin/components/AdminUserMenu.js +34 -0
  140. package/dist/admin/components/AdminUserMenu.js.map +1 -0
  141. package/dist/admin/components/CategoryForm.d.ts +30 -0
  142. package/dist/admin/components/CategoryForm.d.ts.map +1 -0
  143. package/dist/admin/components/CategoryForm.js +152 -0
  144. package/dist/admin/components/CategoryForm.js.map +1 -0
  145. package/dist/admin/components/CategorySelect.d.ts +32 -0
  146. package/dist/admin/components/CategorySelect.d.ts.map +1 -0
  147. package/dist/admin/components/CategorySelect.js +139 -0
  148. package/dist/admin/components/CategorySelect.js.map +1 -0
  149. package/dist/admin/components/CustomerDetails.d.ts +15 -0
  150. package/dist/admin/components/CustomerDetails.d.ts.map +1 -0
  151. package/dist/admin/components/CustomerDetails.js +177 -0
  152. package/dist/admin/components/CustomerDetails.js.map +1 -0
  153. package/dist/admin/components/CustomerTable.d.ts +13 -0
  154. package/dist/admin/components/CustomerTable.d.ts.map +1 -0
  155. package/dist/admin/components/CustomerTable.js +112 -0
  156. package/dist/admin/components/CustomerTable.js.map +1 -0
  157. package/dist/admin/components/DeleteConfirmDialog.d.ts +56 -0
  158. package/dist/admin/components/DeleteConfirmDialog.d.ts.map +1 -0
  159. package/dist/admin/components/DeleteConfirmDialog.js +46 -0
  160. package/dist/admin/components/DeleteConfirmDialog.js.map +1 -0
  161. package/dist/admin/components/ExampleContentBanner.d.ts +2 -0
  162. package/dist/admin/components/ExampleContentBanner.d.ts.map +1 -0
  163. package/dist/admin/components/ExampleContentBanner.js +153 -0
  164. package/dist/admin/components/ExampleContentBanner.js.map +1 -0
  165. package/dist/admin/components/InventoryEditor.d.ts +15 -0
  166. package/dist/admin/components/InventoryEditor.d.ts.map +1 -0
  167. package/dist/admin/components/InventoryEditor.js +86 -0
  168. package/dist/admin/components/InventoryEditor.js.map +1 -0
  169. package/dist/admin/components/InviteUserDialog.d.ts +3 -0
  170. package/dist/admin/components/InviteUserDialog.d.ts.map +1 -0
  171. package/dist/admin/components/InviteUserDialog.js +126 -0
  172. package/dist/admin/components/InviteUserDialog.js.map +1 -0
  173. package/dist/admin/components/LogoUpload.d.ts +22 -0
  174. package/dist/admin/components/LogoUpload.d.ts.map +1 -0
  175. package/dist/admin/components/LogoUpload.js +210 -0
  176. package/dist/admin/components/LogoUpload.js.map +1 -0
  177. package/dist/admin/components/LowStockAlert.d.ts +11 -0
  178. package/dist/admin/components/LowStockAlert.d.ts.map +1 -0
  179. package/dist/admin/components/LowStockAlert.js +33 -0
  180. package/dist/admin/components/LowStockAlert.js.map +1 -0
  181. package/dist/admin/components/OrderDetails.d.ts +14 -0
  182. package/dist/admin/components/OrderDetails.d.ts.map +1 -0
  183. package/dist/admin/components/OrderDetails.js +210 -0
  184. package/dist/admin/components/OrderDetails.js.map +1 -0
  185. package/dist/admin/components/OrderStatusChart.d.ts +21 -0
  186. package/dist/admin/components/OrderStatusChart.d.ts.map +1 -0
  187. package/dist/admin/components/OrderStatusChart.js +61 -0
  188. package/dist/admin/components/OrderStatusChart.js.map +1 -0
  189. package/dist/admin/components/OrderTable.d.ts +13 -0
  190. package/dist/admin/components/OrderTable.d.ts.map +1 -0
  191. package/dist/admin/components/OrderTable.js +117 -0
  192. package/dist/admin/components/OrderTable.js.map +1 -0
  193. package/dist/admin/components/PaymentSettings.d.ts +13 -0
  194. package/dist/admin/components/PaymentSettings.d.ts.map +1 -0
  195. package/dist/admin/components/PaymentSettings.js +117 -0
  196. package/dist/admin/components/PaymentSettings.js.map +1 -0
  197. package/dist/admin/components/PeriodSelector.d.ts +9 -0
  198. package/dist/admin/components/PeriodSelector.d.ts.map +1 -0
  199. package/dist/admin/components/PeriodSelector.js +19 -0
  200. package/dist/admin/components/PeriodSelector.js.map +1 -0
  201. package/dist/admin/components/PermissionsMatrix.d.ts +8 -0
  202. package/dist/admin/components/PermissionsMatrix.d.ts.map +1 -0
  203. package/dist/admin/components/PermissionsMatrix.js +70 -0
  204. package/dist/admin/components/PermissionsMatrix.js.map +1 -0
  205. package/dist/admin/components/PrimaryMetricsRow.d.ts +11 -0
  206. package/dist/admin/components/PrimaryMetricsRow.d.ts.map +1 -0
  207. package/dist/admin/components/PrimaryMetricsRow.js +73 -0
  208. package/dist/admin/components/PrimaryMetricsRow.js.map +1 -0
  209. package/dist/admin/components/ProductForm.d.ts +18 -0
  210. package/dist/admin/components/ProductForm.d.ts.map +1 -0
  211. package/dist/admin/components/ProductForm.js +251 -0
  212. package/dist/admin/components/ProductForm.js.map +1 -0
  213. package/dist/admin/components/ProductTable.d.ts +14 -0
  214. package/dist/admin/components/ProductTable.d.ts.map +1 -0
  215. package/dist/admin/components/ProductTable.js +384 -0
  216. package/dist/admin/components/ProductTable.js.map +1 -0
  217. package/dist/admin/components/RecentOrders.d.ts +11 -0
  218. package/dist/admin/components/RecentOrders.d.ts.map +1 -0
  219. package/dist/admin/components/RecentOrders.js +63 -0
  220. package/dist/admin/components/RecentOrders.js.map +1 -0
  221. package/dist/admin/components/RefundDialog.d.ts +17 -0
  222. package/dist/admin/components/RefundDialog.d.ts.map +1 -0
  223. package/dist/admin/components/RefundDialog.js +90 -0
  224. package/dist/admin/components/RefundDialog.js.map +1 -0
  225. package/dist/admin/components/RevenueChart.d.ts +23 -0
  226. package/dist/admin/components/RevenueChart.d.ts.map +1 -0
  227. package/dist/admin/components/RevenueChart.js +75 -0
  228. package/dist/admin/components/RevenueChart.js.map +1 -0
  229. package/dist/admin/components/SEOPreview.d.ts +33 -0
  230. package/dist/admin/components/SEOPreview.d.ts.map +1 -0
  231. package/dist/admin/components/SEOPreview.js +30 -0
  232. package/dist/admin/components/SEOPreview.js.map +1 -0
  233. package/dist/admin/components/SecondaryMetricsRow.d.ts +14 -0
  234. package/dist/admin/components/SecondaryMetricsRow.d.ts.map +1 -0
  235. package/dist/admin/components/SecondaryMetricsRow.js +45 -0
  236. package/dist/admin/components/SecondaryMetricsRow.js.map +1 -0
  237. package/dist/admin/components/SetupGuide.d.ts +4 -0
  238. package/dist/admin/components/SetupGuide.d.ts.map +1 -0
  239. package/dist/admin/components/SetupGuide.js +244 -0
  240. package/dist/admin/components/SetupGuide.js.map +1 -0
  241. package/dist/admin/components/ShippingSettings.d.ts +3 -0
  242. package/dist/admin/components/ShippingSettings.d.ts.map +1 -0
  243. package/dist/admin/components/ShippingSettings.js +553 -0
  244. package/dist/admin/components/ShippingSettings.js.map +1 -0
  245. package/dist/admin/components/StatsCards.d.ts +18 -0
  246. package/dist/admin/components/StatsCards.d.ts.map +1 -0
  247. package/dist/admin/components/StatsCards.js +71 -0
  248. package/dist/admin/components/StatsCards.js.map +1 -0
  249. package/dist/admin/components/StoreSettings.d.ts +19 -0
  250. package/dist/admin/components/StoreSettings.d.ts.map +1 -0
  251. package/dist/admin/components/StoreSettings.js +149 -0
  252. package/dist/admin/components/StoreSettings.js.map +1 -0
  253. package/dist/admin/components/TagInput.d.ts +29 -0
  254. package/dist/admin/components/TagInput.d.ts.map +1 -0
  255. package/dist/admin/components/TagInput.js +69 -0
  256. package/dist/admin/components/TagInput.js.map +1 -0
  257. package/dist/admin/components/TaxSettings.d.ts +12 -0
  258. package/dist/admin/components/TaxSettings.d.ts.map +1 -0
  259. package/dist/admin/components/TaxSettings.js +272 -0
  260. package/dist/admin/components/TaxSettings.js.map +1 -0
  261. package/dist/admin/components/UsersTable.d.ts +3 -0
  262. package/dist/admin/components/UsersTable.d.ts.map +1 -0
  263. package/dist/admin/components/UsersTable.js +388 -0
  264. package/dist/admin/components/UsersTable.js.map +1 -0
  265. package/dist/admin/components/VariantManager.d.ts +44 -0
  266. package/dist/admin/components/VariantManager.d.ts.map +1 -0
  267. package/dist/admin/components/VariantManager.js +324 -0
  268. package/dist/admin/components/VariantManager.js.map +1 -0
  269. package/dist/admin/components/index.d.ts +69 -0
  270. package/dist/admin/components/index.d.ts.map +1 -0
  271. package/dist/admin/components/index.js +86 -0
  272. package/dist/admin/components/index.js.map +1 -0
  273. package/dist/admin/config.d.ts +51 -0
  274. package/dist/admin/config.d.ts.map +1 -0
  275. package/dist/admin/config.js +224 -0
  276. package/dist/admin/config.js.map +1 -0
  277. package/dist/admin/hooks/fetchAdminApi.d.ts +65 -0
  278. package/dist/admin/hooks/fetchAdminApi.d.ts.map +1 -0
  279. package/dist/admin/hooks/fetchAdminApi.js +96 -0
  280. package/dist/admin/hooks/fetchAdminApi.js.map +1 -0
  281. package/dist/admin/hooks/index.d.ts +24 -0
  282. package/dist/admin/hooks/index.d.ts.map +1 -0
  283. package/dist/admin/hooks/index.js +19 -0
  284. package/dist/admin/hooks/index.js.map +1 -0
  285. package/dist/admin/hooks/useAdminAuth.d.ts +25 -0
  286. package/dist/admin/hooks/useAdminAuth.d.ts.map +1 -0
  287. package/dist/admin/hooks/useAdminAuth.js +183 -0
  288. package/dist/admin/hooks/useAdminAuth.js.map +1 -0
  289. package/dist/admin/hooks/useAdminCategories.d.ts +9 -0
  290. package/dist/admin/hooks/useAdminCategories.d.ts.map +1 -0
  291. package/dist/admin/hooks/useAdminCategories.js +112 -0
  292. package/dist/admin/hooks/useAdminCategories.js.map +1 -0
  293. package/dist/admin/hooks/useAdminCustomers.d.ts +3 -0
  294. package/dist/admin/hooks/useAdminCustomers.d.ts.map +1 -0
  295. package/dist/admin/hooks/useAdminCustomers.js +110 -0
  296. package/dist/admin/hooks/useAdminCustomers.js.map +1 -0
  297. package/dist/admin/hooks/useAdminMe.d.ts +31 -0
  298. package/dist/admin/hooks/useAdminMe.d.ts.map +1 -0
  299. package/dist/admin/hooks/useAdminMe.js +78 -0
  300. package/dist/admin/hooks/useAdminMe.js.map +1 -0
  301. package/dist/admin/hooks/useAdminOrders.d.ts +3 -0
  302. package/dist/admin/hooks/useAdminOrders.d.ts.map +1 -0
  303. package/dist/admin/hooks/useAdminOrders.js +118 -0
  304. package/dist/admin/hooks/useAdminOrders.js.map +1 -0
  305. package/dist/admin/hooks/useAdminPermissions.d.ts +3 -0
  306. package/dist/admin/hooks/useAdminPermissions.d.ts.map +1 -0
  307. package/dist/admin/hooks/useAdminPermissions.js +51 -0
  308. package/dist/admin/hooks/useAdminPermissions.js.map +1 -0
  309. package/dist/admin/hooks/useAdminProductMetrics.d.ts +3 -0
  310. package/dist/admin/hooks/useAdminProductMetrics.d.ts.map +1 -0
  311. package/dist/admin/hooks/useAdminProductMetrics.js +32 -0
  312. package/dist/admin/hooks/useAdminProductMetrics.js.map +1 -0
  313. package/dist/admin/hooks/useAdminProducts.d.ts +3 -0
  314. package/dist/admin/hooks/useAdminProducts.d.ts.map +1 -0
  315. package/dist/admin/hooks/useAdminProducts.js +132 -0
  316. package/dist/admin/hooks/useAdminProducts.js.map +1 -0
  317. package/dist/admin/hooks/useAdminSession.d.ts +23 -0
  318. package/dist/admin/hooks/useAdminSession.d.ts.map +1 -0
  319. package/dist/admin/hooks/useAdminSession.js +117 -0
  320. package/dist/admin/hooks/useAdminSession.js.map +1 -0
  321. package/dist/admin/hooks/useAdminStats.d.ts +47 -0
  322. package/dist/admin/hooks/useAdminStats.d.ts.map +1 -0
  323. package/dist/admin/hooks/useAdminStats.js +128 -0
  324. package/dist/admin/hooks/useAdminStats.js.map +1 -0
  325. package/dist/admin/hooks/useAdminUsers.d.ts +3 -0
  326. package/dist/admin/hooks/useAdminUsers.d.ts.map +1 -0
  327. package/dist/admin/hooks/useAdminUsers.js +177 -0
  328. package/dist/admin/hooks/useAdminUsers.js.map +1 -0
  329. package/dist/admin/hooks/useLinkedCustomerStatus.d.ts +3 -0
  330. package/dist/admin/hooks/useLinkedCustomerStatus.d.ts.map +1 -0
  331. package/dist/admin/hooks/useLinkedCustomerStatus.js +48 -0
  332. package/dist/admin/hooks/useLinkedCustomerStatus.js.map +1 -0
  333. package/dist/admin/hooks/useSetupGuide.d.ts +45 -0
  334. package/dist/admin/hooks/useSetupGuide.d.ts.map +1 -0
  335. package/dist/admin/hooks/useSetupGuide.js +60 -0
  336. package/dist/admin/hooks/useSetupGuide.js.map +1 -0
  337. package/dist/admin/index.d.ts +66 -0
  338. package/dist/admin/index.d.ts.map +1 -0
  339. package/dist/admin/index.js +144 -0
  340. package/dist/admin/index.js.map +1 -0
  341. package/dist/admin/permissions.d.ts +79 -0
  342. package/dist/admin/permissions.d.ts.map +1 -0
  343. package/dist/admin/permissions.js +182 -0
  344. package/dist/admin/permissions.js.map +1 -0
  345. package/dist/admin/server/admin-invite.d.ts +122 -0
  346. package/dist/admin/server/admin-invite.d.ts.map +1 -0
  347. package/dist/admin/server/admin-invite.js +235 -0
  348. package/dist/admin/server/admin-invite.js.map +1 -0
  349. package/dist/admin/server/admin-password-reset.d.ts +87 -0
  350. package/dist/admin/server/admin-password-reset.d.ts.map +1 -0
  351. package/dist/admin/server/admin-password-reset.js +220 -0
  352. package/dist/admin/server/admin-password-reset.js.map +1 -0
  353. package/dist/admin/server/admin-self-service.d.ts +86 -0
  354. package/dist/admin/server/admin-self-service.d.ts.map +1 -0
  355. package/dist/admin/server/admin-self-service.js +188 -0
  356. package/dist/admin/server/admin-self-service.js.map +1 -0
  357. package/dist/admin/server/admin-service.d.ts +131 -0
  358. package/dist/admin/server/admin-service.d.ts.map +1 -0
  359. package/dist/admin/server/admin-service.js +278 -0
  360. package/dist/admin/server/admin-service.js.map +1 -0
  361. package/dist/admin/server/admin-session.d.ts +173 -0
  362. package/dist/admin/server/admin-session.d.ts.map +1 -0
  363. package/dist/admin/server/admin-session.js +272 -0
  364. package/dist/admin/server/admin-session.js.map +1 -0
  365. package/dist/admin/server/index.d.ts +17 -0
  366. package/dist/admin/server/index.d.ts.map +1 -0
  367. package/dist/admin/server/index.js +39 -0
  368. package/dist/admin/server/index.js.map +1 -0
  369. package/dist/admin/server/user-management.d.ts +221 -0
  370. package/dist/admin/server/user-management.d.ts.map +1 -0
  371. package/dist/admin/server/user-management.js +838 -0
  372. package/dist/admin/server/user-management.js.map +1 -0
  373. package/dist/admin/types.d.ts +1161 -0
  374. package/dist/admin/types.d.ts.map +1 -0
  375. package/dist/admin/types.js +10 -0
  376. package/dist/admin/types.js.map +1 -0
  377. package/dist/auth/api/forgot-password.d.ts +41 -0
  378. package/dist/auth/api/forgot-password.d.ts.map +1 -0
  379. package/dist/auth/api/forgot-password.js +65 -0
  380. package/dist/auth/api/forgot-password.js.map +1 -0
  381. package/dist/auth/api/index.d.ts +37 -0
  382. package/dist/auth/api/index.d.ts.map +1 -0
  383. package/dist/auth/api/index.js +44 -0
  384. package/dist/auth/api/index.js.map +1 -0
  385. package/dist/auth/api/register.d.ts +41 -0
  386. package/dist/auth/api/register.d.ts.map +1 -0
  387. package/dist/auth/api/register.js +99 -0
  388. package/dist/auth/api/register.js.map +1 -0
  389. package/dist/auth/api/request-refund.d.ts +38 -0
  390. package/dist/auth/api/request-refund.d.ts.map +1 -0
  391. package/dist/auth/api/request-refund.js +142 -0
  392. package/dist/auth/api/request-refund.js.map +1 -0
  393. package/dist/auth/api/request-return.d.ts +39 -0
  394. package/dist/auth/api/request-return.d.ts.map +1 -0
  395. package/dist/auth/api/request-return.js +109 -0
  396. package/dist/auth/api/request-return.js.map +1 -0
  397. package/dist/auth/api/resend-verification.d.ts +41 -0
  398. package/dist/auth/api/resend-verification.d.ts.map +1 -0
  399. package/dist/auth/api/resend-verification.js +68 -0
  400. package/dist/auth/api/resend-verification.js.map +1 -0
  401. package/dist/auth/api/reset-password.d.ts +67 -0
  402. package/dist/auth/api/reset-password.d.ts.map +1 -0
  403. package/dist/auth/api/reset-password.js +106 -0
  404. package/dist/auth/api/reset-password.js.map +1 -0
  405. package/dist/auth/api/verify-email.d.ts +47 -0
  406. package/dist/auth/api/verify-email.d.ts.map +1 -0
  407. package/dist/auth/api/verify-email.js +90 -0
  408. package/dist/auth/api/verify-email.js.map +1 -0
  409. package/dist/auth/components/AuthGuard.d.ts +52 -0
  410. package/dist/auth/components/AuthGuard.d.ts.map +1 -0
  411. package/dist/auth/components/AuthGuard.js +109 -0
  412. package/dist/auth/components/AuthGuard.js.map +1 -0
  413. package/dist/auth/components/ForgotPasswordForm.d.ts +15 -0
  414. package/dist/auth/components/ForgotPasswordForm.d.ts.map +1 -0
  415. package/dist/auth/components/ForgotPasswordForm.js +43 -0
  416. package/dist/auth/components/ForgotPasswordForm.js.map +1 -0
  417. package/dist/auth/components/Label.d.ts +19 -0
  418. package/dist/auth/components/Label.d.ts.map +1 -0
  419. package/dist/auth/components/Label.js +18 -0
  420. package/dist/auth/components/Label.js.map +1 -0
  421. package/dist/auth/components/ResetPasswordForm.d.ts +18 -0
  422. package/dist/auth/components/ResetPasswordForm.d.ts.map +1 -0
  423. package/dist/auth/components/ResetPasswordForm.js +87 -0
  424. package/dist/auth/components/ResetPasswordForm.js.map +1 -0
  425. package/dist/auth/components/SignInForm.d.ts +21 -0
  426. package/dist/auth/components/SignInForm.d.ts.map +1 -0
  427. package/dist/auth/components/SignInForm.js +61 -0
  428. package/dist/auth/components/SignInForm.js.map +1 -0
  429. package/dist/auth/components/SignUpForm.d.ts +18 -0
  430. package/dist/auth/components/SignUpForm.d.ts.map +1 -0
  431. package/dist/auth/components/SignUpForm.js +78 -0
  432. package/dist/auth/components/SignUpForm.js.map +1 -0
  433. package/dist/auth/components/UserMenu.d.ts +18 -0
  434. package/dist/auth/components/UserMenu.d.ts.map +1 -0
  435. package/dist/auth/components/UserMenu.js +73 -0
  436. package/dist/auth/components/UserMenu.js.map +1 -0
  437. package/dist/auth/components/VerifyEmailNotice.d.ts +20 -0
  438. package/dist/auth/components/VerifyEmailNotice.d.ts.map +1 -0
  439. package/dist/auth/components/VerifyEmailNotice.js +57 -0
  440. package/dist/auth/components/VerifyEmailNotice.js.map +1 -0
  441. package/dist/auth/components/index.d.ts +15 -0
  442. package/dist/auth/components/index.d.ts.map +1 -0
  443. package/dist/auth/components/index.js +14 -0
  444. package/dist/auth/components/index.js.map +1 -0
  445. package/dist/auth/config.d.ts +52 -0
  446. package/dist/auth/config.d.ts.map +1 -0
  447. package/dist/auth/config.js +243 -0
  448. package/dist/auth/config.js.map +1 -0
  449. package/dist/auth/hooks/index.d.ts +7 -0
  450. package/dist/auth/hooks/index.d.ts.map +1 -0
  451. package/dist/auth/hooks/index.js +7 -0
  452. package/dist/auth/hooks/index.js.map +1 -0
  453. package/dist/auth/hooks/useAuth.d.ts +30 -0
  454. package/dist/auth/hooks/useAuth.d.ts.map +1 -0
  455. package/dist/auth/hooks/useAuth.js +251 -0
  456. package/dist/auth/hooks/useAuth.js.map +1 -0
  457. package/dist/auth/index.d.ts +55 -0
  458. package/dist/auth/index.d.ts.map +1 -0
  459. package/dist/auth/index.js +67 -0
  460. package/dist/auth/index.js.map +1 -0
  461. package/dist/auth/server/customer-service.d.ts +140 -0
  462. package/dist/auth/server/customer-service.d.ts.map +1 -0
  463. package/dist/auth/server/customer-service.js +266 -0
  464. package/dist/auth/server/customer-service.js.map +1 -0
  465. package/dist/auth/server/customer-session.d.ts +79 -0
  466. package/dist/auth/server/customer-session.d.ts.map +1 -0
  467. package/dist/auth/server/customer-session.js +103 -0
  468. package/dist/auth/server/customer-session.js.map +1 -0
  469. package/dist/auth/server/index.d.ts +14 -0
  470. package/dist/auth/server/index.d.ts.map +1 -0
  471. package/dist/auth/server/index.js +17 -0
  472. package/dist/auth/server/index.js.map +1 -0
  473. package/dist/auth/server/password-reset-service.d.ts +87 -0
  474. package/dist/auth/server/password-reset-service.d.ts.map +1 -0
  475. package/dist/auth/server/password-reset-service.js +203 -0
  476. package/dist/auth/server/password-reset-service.js.map +1 -0
  477. package/dist/auth/server/password.d.ts +58 -0
  478. package/dist/auth/server/password.d.ts.map +1 -0
  479. package/dist/auth/server/password.js +85 -0
  480. package/dist/auth/server/password.js.map +1 -0
  481. package/dist/auth/server/verification-service.d.ts +88 -0
  482. package/dist/auth/server/verification-service.d.ts.map +1 -0
  483. package/dist/auth/server/verification-service.js +231 -0
  484. package/dist/auth/server/verification-service.js.map +1 -0
  485. package/dist/auth/types.d.ts +311 -0
  486. package/dist/auth/types.d.ts.map +1 -0
  487. package/dist/auth/types.js +7 -0
  488. package/dist/auth/types.js.map +1 -0
  489. package/dist/cart/CartProvider.d.ts +65 -0
  490. package/dist/cart/CartProvider.d.ts.map +1 -0
  491. package/dist/cart/CartProvider.js +96 -0
  492. package/dist/cart/CartProvider.js.map +1 -0
  493. package/dist/cart/components/AddToCartButton.d.ts +77 -0
  494. package/dist/cart/components/AddToCartButton.d.ts.map +1 -0
  495. package/dist/cart/components/AddToCartButton.js +122 -0
  496. package/dist/cart/components/AddToCartButton.js.map +1 -0
  497. package/dist/cart/components/CartDrawer.d.ts +71 -0
  498. package/dist/cart/components/CartDrawer.d.ts.map +1 -0
  499. package/dist/cart/components/CartDrawer.js +117 -0
  500. package/dist/cart/components/CartDrawer.js.map +1 -0
  501. package/dist/cart/components/CartIcon.d.ts +36 -0
  502. package/dist/cart/components/CartIcon.d.ts.map +1 -0
  503. package/dist/cart/components/CartIcon.js +68 -0
  504. package/dist/cart/components/CartIcon.js.map +1 -0
  505. package/dist/cart/components/CartItem.d.ts +52 -0
  506. package/dist/cart/components/CartItem.d.ts.map +1 -0
  507. package/dist/cart/components/CartItem.js +55 -0
  508. package/dist/cart/components/CartItem.js.map +1 -0
  509. package/dist/cart/components/CartSummary.d.ts +43 -0
  510. package/dist/cart/components/CartSummary.d.ts.map +1 -0
  511. package/dist/cart/components/CartSummary.js +60 -0
  512. package/dist/cart/components/CartSummary.js.map +1 -0
  513. package/dist/cart/components/QuantitySelector.d.ts +39 -0
  514. package/dist/cart/components/QuantitySelector.d.ts.map +1 -0
  515. package/dist/cart/components/QuantitySelector.js +85 -0
  516. package/dist/cart/components/QuantitySelector.js.map +1 -0
  517. package/dist/cart/components/index.d.ts +18 -0
  518. package/dist/cart/components/index.d.ts.map +1 -0
  519. package/dist/cart/components/index.js +12 -0
  520. package/dist/cart/components/index.js.map +1 -0
  521. package/dist/cart/index.d.ts +109 -0
  522. package/dist/cart/index.d.ts.map +1 -0
  523. package/dist/cart/index.js +115 -0
  524. package/dist/cart/index.js.map +1 -0
  525. package/dist/cart/store.d.ts +150 -0
  526. package/dist/cart/store.d.ts.map +1 -0
  527. package/dist/cart/store.js +315 -0
  528. package/dist/cart/store.js.map +1 -0
  529. package/dist/checkout/api/checkout.js +112 -0
  530. package/dist/checkout/api/checkout.js.map +1 -0
  531. package/dist/checkout/api/countries.d.ts +17 -0
  532. package/dist/checkout/api/countries.d.ts.map +1 -0
  533. package/dist/checkout/api/countries.js +38 -0
  534. package/dist/checkout/api/countries.js.map +1 -0
  535. package/dist/checkout/api/index.js +11 -0
  536. package/dist/checkout/api/index.js.map +1 -0
  537. package/dist/checkout/api/payment-status.d.ts +45 -0
  538. package/dist/checkout/api/payment-status.d.ts.map +1 -0
  539. package/dist/checkout/api/payment-status.js +104 -0
  540. package/dist/checkout/api/payment-status.js.map +1 -0
  541. package/dist/checkout/api/shipping.d.ts +34 -0
  542. package/dist/checkout/api/shipping.d.ts.map +1 -0
  543. package/dist/checkout/api/shipping.js +247 -0
  544. package/dist/checkout/api/shipping.js.map +1 -0
  545. package/dist/checkout/api/webhook.js +55 -0
  546. package/dist/checkout/api/webhook.js.map +1 -0
  547. package/dist/checkout/components/CheckoutButton.d.ts +55 -0
  548. package/dist/checkout/components/CheckoutButton.d.ts.map +1 -0
  549. package/dist/checkout/components/CheckoutButton.js +132 -0
  550. package/dist/checkout/components/CheckoutButton.js.map +1 -0
  551. package/dist/checkout/components/CheckoutFlow.d.ts +53 -0
  552. package/dist/checkout/components/CheckoutFlow.d.ts.map +1 -0
  553. package/dist/checkout/components/CheckoutFlow.js +286 -0
  554. package/dist/checkout/components/CheckoutFlow.js.map +1 -0
  555. package/dist/checkout/components/CheckoutSuccess.d.ts +29 -0
  556. package/dist/checkout/components/CheckoutSuccess.d.ts.map +1 -0
  557. package/dist/checkout/components/CheckoutSuccess.js +49 -0
  558. package/dist/checkout/components/CheckoutSuccess.js.map +1 -0
  559. package/dist/checkout/components/OrderSummary.d.ts +37 -0
  560. package/dist/checkout/components/OrderSummary.d.ts.map +1 -0
  561. package/dist/checkout/components/OrderSummary.js +71 -0
  562. package/dist/checkout/components/OrderSummary.js.map +1 -0
  563. package/dist/checkout/components/ShippingForm.d.ts +30 -0
  564. package/dist/checkout/components/ShippingForm.d.ts.map +1 -0
  565. package/dist/checkout/components/ShippingForm.js +185 -0
  566. package/dist/checkout/components/ShippingForm.js.map +1 -0
  567. package/dist/checkout/components/ShippingOptions.d.ts +51 -0
  568. package/dist/checkout/components/ShippingOptions.d.ts.map +1 -0
  569. package/dist/checkout/components/ShippingOptions.js +93 -0
  570. package/dist/checkout/components/ShippingOptions.js.map +1 -0
  571. package/dist/checkout/components/index.d.ts +12 -0
  572. package/dist/checkout/components/index.d.ts.map +1 -0
  573. package/dist/checkout/components/index.js +12 -0
  574. package/dist/checkout/components/index.js.map +1 -0
  575. package/dist/checkout/constants.d.ts +244 -0
  576. package/dist/checkout/constants.d.ts.map +1 -0
  577. package/dist/checkout/constants.js +119 -0
  578. package/dist/checkout/constants.js.map +1 -0
  579. package/dist/checkout/hooks/index.d.ts +9 -0
  580. package/dist/checkout/hooks/index.d.ts.map +1 -0
  581. package/dist/checkout/hooks/index.js +8 -0
  582. package/dist/checkout/hooks/index.js.map +1 -0
  583. package/dist/checkout/hooks/useCheckout.d.ts +38 -0
  584. package/dist/checkout/hooks/useCheckout.d.ts.map +1 -0
  585. package/dist/checkout/hooks/useCheckout.js +134 -0
  586. package/dist/checkout/hooks/useCheckout.js.map +1 -0
  587. package/dist/checkout/hooks/usePaymentStatus.d.ts +42 -0
  588. package/dist/checkout/hooks/usePaymentStatus.d.ts.map +1 -0
  589. package/dist/checkout/hooks/usePaymentStatus.js +71 -0
  590. package/dist/checkout/hooks/usePaymentStatus.js.map +1 -0
  591. package/dist/checkout/index.js +135 -0
  592. package/dist/checkout/index.js.map +1 -0
  593. package/dist/checkout/server/coupons.d.ts +91 -0
  594. package/dist/checkout/server/coupons.d.ts.map +1 -0
  595. package/dist/checkout/server/coupons.js +192 -0
  596. package/dist/checkout/server/coupons.js.map +1 -0
  597. package/dist/checkout/server/index.js +10 -0
  598. package/dist/checkout/server/index.js.map +1 -0
  599. package/dist/checkout/stripe/client.d.ts +74 -0
  600. package/dist/checkout/stripe/client.d.ts.map +1 -0
  601. package/dist/checkout/stripe/client.js +175 -0
  602. package/dist/checkout/stripe/client.js.map +1 -0
  603. package/dist/checkout/stripe/index.d.ts +7 -0
  604. package/dist/checkout/stripe/index.d.ts.map +1 -0
  605. package/dist/checkout/stripe/index.js +7 -0
  606. package/dist/checkout/stripe/index.js.map +1 -0
  607. package/dist/checkout/types.d.ts +489 -0
  608. package/dist/checkout/types.d.ts.map +1 -0
  609. package/dist/checkout/types.js +8 -0
  610. package/dist/checkout/types.js.map +1 -0
  611. package/dist/core/StoreSettingsProvider.d.ts +107 -0
  612. package/dist/core/StoreSettingsProvider.d.ts.map +1 -0
  613. package/dist/core/StoreSettingsProvider.js +200 -0
  614. package/dist/core/StoreSettingsProvider.js.map +1 -0
  615. package/dist/core/api/index.d.ts +7 -0
  616. package/dist/core/api/index.d.ts.map +1 -0
  617. package/dist/core/api/index.js +7 -0
  618. package/dist/core/api/index.js.map +1 -0
  619. package/dist/core/api/settings.d.ts +42 -0
  620. package/dist/core/api/settings.d.ts.map +1 -0
  621. package/dist/core/api/settings.js +74 -0
  622. package/dist/core/api/settings.js.map +1 -0
  623. package/dist/core/config.d.ts +270 -0
  624. package/dist/core/config.d.ts.map +1 -0
  625. package/dist/core/config.js +80 -0
  626. package/dist/core/config.js.map +1 -0
  627. package/dist/core/cookie-consent/CookieBanner.d.ts +2 -0
  628. package/dist/core/cookie-consent/CookieBanner.d.ts.map +1 -0
  629. package/dist/core/cookie-consent/CookieBanner.js +243 -0
  630. package/dist/core/cookie-consent/CookieBanner.js.map +1 -0
  631. package/dist/core/cookie-consent/CookieConsentProvider.d.ts +53 -0
  632. package/dist/core/cookie-consent/CookieConsentProvider.d.ts.map +1 -0
  633. package/dist/core/cookie-consent/CookieConsentProvider.js +162 -0
  634. package/dist/core/cookie-consent/CookieConsentProvider.js.map +1 -0
  635. package/dist/core/cookie-consent/CookiePreferencesLink.d.ts +15 -0
  636. package/dist/core/cookie-consent/CookiePreferencesLink.d.ts.map +1 -0
  637. package/dist/core/cookie-consent/CookiePreferencesLink.js +12 -0
  638. package/dist/core/cookie-consent/CookiePreferencesLink.js.map +1 -0
  639. package/dist/core/cookie-consent/index.d.ts +17 -0
  640. package/dist/core/cookie-consent/index.d.ts.map +1 -0
  641. package/dist/core/cookie-consent/index.js +16 -0
  642. package/dist/core/cookie-consent/index.js.map +1 -0
  643. package/dist/core/cookie-consent/types.d.ts +31 -0
  644. package/dist/core/cookie-consent/types.d.ts.map +1 -0
  645. package/dist/core/cookie-consent/types.js +10 -0
  646. package/dist/core/cookie-consent/types.js.map +1 -0
  647. package/dist/core/cookie-consent/useCookieConsent.d.ts +14 -0
  648. package/dist/core/cookie-consent/useCookieConsent.d.ts.map +1 -0
  649. package/dist/core/cookie-consent/useCookieConsent.js +25 -0
  650. package/dist/core/cookie-consent/useCookieConsent.js.map +1 -0
  651. package/dist/core/db/client.d.ts +39 -0
  652. package/dist/core/db/client.d.ts.map +1 -0
  653. package/dist/core/db/client.js +86 -0
  654. package/dist/core/db/client.js.map +1 -0
  655. package/dist/core/db/index.d.ts +11 -0
  656. package/dist/core/db/index.d.ts.map +1 -0
  657. package/dist/core/db/index.js +36 -0
  658. package/dist/core/db/index.js.map +1 -0
  659. package/dist/core/db/queries.d.ts +1427 -0
  660. package/dist/core/db/queries.d.ts.map +1 -0
  661. package/dist/core/db/queries.js +1932 -0
  662. package/dist/core/db/queries.js.map +1 -0
  663. package/dist/core/db/schema.d.ts +3462 -0
  664. package/dist/core/db/schema.d.ts.map +1 -0
  665. package/dist/core/db/schema.js +495 -0
  666. package/dist/core/db/schema.js.map +1 -0
  667. package/dist/core/index.d.ts +22 -0
  668. package/dist/core/index.d.ts.map +1 -0
  669. package/dist/core/index.js +43 -0
  670. package/dist/core/index.js.map +1 -0
  671. package/dist/core/server/index.d.ts +18 -0
  672. package/dist/core/server/index.d.ts.map +1 -0
  673. package/dist/core/server/index.js +47 -0
  674. package/dist/core/server/index.js.map +1 -0
  675. package/dist/core/types.d.ts +246 -0
  676. package/dist/core/types.d.ts.map +1 -0
  677. package/dist/core/types.js +8 -0
  678. package/dist/core/types.js.map +1 -0
  679. package/dist/core/utils.d.ts +147 -0
  680. package/dist/core/utils.d.ts.map +1 -0
  681. package/dist/core/utils.js +309 -0
  682. package/dist/core/utils.js.map +1 -0
  683. package/dist/emails/config.d.ts +69 -0
  684. package/dist/emails/config.d.ts.map +1 -0
  685. package/dist/emails/config.js +147 -0
  686. package/dist/emails/config.js.map +1 -0
  687. package/dist/emails/index.d.ts +85 -0
  688. package/dist/emails/index.d.ts.map +1 -0
  689. package/dist/emails/index.js +110 -0
  690. package/dist/emails/index.js.map +1 -0
  691. package/dist/emails/send/admin-auth.d.ts +94 -0
  692. package/dist/emails/send/admin-auth.d.ts.map +1 -0
  693. package/dist/emails/send/admin-auth.js +118 -0
  694. package/dist/emails/send/admin-auth.js.map +1 -0
  695. package/dist/emails/send/auth.d.ts +91 -0
  696. package/dist/emails/send/auth.d.ts.map +1 -0
  697. package/dist/emails/send/auth.js +130 -0
  698. package/dist/emails/send/auth.js.map +1 -0
  699. package/dist/emails/send/index.d.ts +12 -0
  700. package/dist/emails/send/index.d.ts.map +1 -0
  701. package/dist/emails/send/index.js +18 -0
  702. package/dist/emails/send/index.js.map +1 -0
  703. package/dist/emails/send/orders.d.ts +186 -0
  704. package/dist/emails/send/orders.d.ts.map +1 -0
  705. package/dist/emails/send/orders.js +258 -0
  706. package/dist/emails/send/orders.js.map +1 -0
  707. package/dist/emails/sender.d.ts +72 -0
  708. package/dist/emails/sender.d.ts.map +1 -0
  709. package/dist/emails/sender.js +116 -0
  710. package/dist/emails/sender.js.map +1 -0
  711. package/dist/emails/templates/admin-invite.d.ts +40 -0
  712. package/dist/emails/templates/admin-invite.d.ts.map +1 -0
  713. package/dist/emails/templates/admin-invite.js +62 -0
  714. package/dist/emails/templates/admin-invite.js.map +1 -0
  715. package/dist/emails/templates/base.d.ts +109 -0
  716. package/dist/emails/templates/base.d.ts.map +1 -0
  717. package/dist/emails/templates/base.js +334 -0
  718. package/dist/emails/templates/base.js.map +1 -0
  719. package/dist/emails/templates/email-verification.d.ts +28 -0
  720. package/dist/emails/templates/email-verification.d.ts.map +1 -0
  721. package/dist/emails/templates/email-verification.js +52 -0
  722. package/dist/emails/templates/email-verification.js.map +1 -0
  723. package/dist/emails/templates/index.d.ts +16 -0
  724. package/dist/emails/templates/index.d.ts.map +1 -0
  725. package/dist/emails/templates/index.js +28 -0
  726. package/dist/emails/templates/index.js.map +1 -0
  727. package/dist/emails/templates/order-cancelled.d.ts +30 -0
  728. package/dist/emails/templates/order-cancelled.d.ts.map +1 -0
  729. package/dist/emails/templates/order-cancelled.js +83 -0
  730. package/dist/emails/templates/order-cancelled.js.map +1 -0
  731. package/dist/emails/templates/order-confirmation.d.ts +36 -0
  732. package/dist/emails/templates/order-confirmation.d.ts.map +1 -0
  733. package/dist/emails/templates/order-confirmation.js +174 -0
  734. package/dist/emails/templates/order-confirmation.js.map +1 -0
  735. package/dist/emails/templates/order-delivered.d.ts +31 -0
  736. package/dist/emails/templates/order-delivered.d.ts.map +1 -0
  737. package/dist/emails/templates/order-delivered.js +100 -0
  738. package/dist/emails/templates/order-delivered.js.map +1 -0
  739. package/dist/emails/templates/order-shipped.d.ts +32 -0
  740. package/dist/emails/templates/order-shipped.d.ts.map +1 -0
  741. package/dist/emails/templates/order-shipped.js +83 -0
  742. package/dist/emails/templates/order-shipped.js.map +1 -0
  743. package/dist/emails/templates/password-reset.d.ts +27 -0
  744. package/dist/emails/templates/password-reset.d.ts.map +1 -0
  745. package/dist/emails/templates/password-reset.js +51 -0
  746. package/dist/emails/templates/password-reset.js.map +1 -0
  747. package/dist/emails/templates/refund-processed.d.ts +32 -0
  748. package/dist/emails/templates/refund-processed.d.ts.map +1 -0
  749. package/dist/emails/templates/refund-processed.js +92 -0
  750. package/dist/emails/templates/refund-processed.js.map +1 -0
  751. package/dist/emails/templates/welcome.d.ts +27 -0
  752. package/dist/emails/templates/welcome.d.ts.map +1 -0
  753. package/dist/emails/templates/welcome.js +52 -0
  754. package/dist/emails/templates/welcome.js.map +1 -0
  755. package/dist/emails/types.d.ts +229 -0
  756. package/dist/emails/types.d.ts.map +1 -0
  757. package/dist/emails/types.js +7 -0
  758. package/dist/emails/types.js.map +1 -0
  759. package/dist/emails/utils.d.ts +94 -0
  760. package/dist/emails/utils.d.ts.map +1 -0
  761. package/dist/emails/utils.js +218 -0
  762. package/dist/emails/utils.js.map +1 -0
  763. package/dist/index.js +73 -0
  764. package/dist/index.js.map +1 -0
  765. package/dist/media/api/delete.d.ts +43 -0
  766. package/dist/media/api/delete.d.ts.map +1 -0
  767. package/dist/media/api/delete.js +124 -0
  768. package/dist/media/api/delete.js.map +1 -0
  769. package/dist/media/api/index.d.ts +17 -0
  770. package/dist/media/api/index.d.ts.map +1 -0
  771. package/dist/media/api/index.js +17 -0
  772. package/dist/media/api/index.js.map +1 -0
  773. package/dist/media/api/presign.d.ts +38 -0
  774. package/dist/media/api/presign.d.ts.map +1 -0
  775. package/dist/media/api/presign.js +130 -0
  776. package/dist/media/api/presign.js.map +1 -0
  777. package/dist/media/components/DropZone.d.ts +18 -0
  778. package/dist/media/components/DropZone.d.ts.map +1 -0
  779. package/dist/media/components/DropZone.js +107 -0
  780. package/dist/media/components/DropZone.js.map +1 -0
  781. package/dist/media/components/ImageGalleryUpload.d.ts +21 -0
  782. package/dist/media/components/ImageGalleryUpload.d.ts.map +1 -0
  783. package/dist/media/components/ImageGalleryUpload.js +193 -0
  784. package/dist/media/components/ImageGalleryUpload.js.map +1 -0
  785. package/dist/media/components/ImageUpload.d.ts +17 -0
  786. package/dist/media/components/ImageUpload.d.ts.map +1 -0
  787. package/dist/media/components/ImageUpload.js +89 -0
  788. package/dist/media/components/ImageUpload.js.map +1 -0
  789. package/dist/media/components/index.d.ts +10 -0
  790. package/dist/media/components/index.d.ts.map +1 -0
  791. package/dist/media/components/index.js +9 -0
  792. package/dist/media/components/index.js.map +1 -0
  793. package/dist/media/config.d.ts +83 -0
  794. package/dist/media/config.d.ts.map +1 -0
  795. package/dist/media/config.js +189 -0
  796. package/dist/media/config.js.map +1 -0
  797. package/dist/media/hooks/index.d.ts +8 -0
  798. package/dist/media/hooks/index.d.ts.map +1 -0
  799. package/dist/media/hooks/index.js +7 -0
  800. package/dist/media/hooks/index.js.map +1 -0
  801. package/dist/media/hooks/useUpload.d.ts +32 -0
  802. package/dist/media/hooks/useUpload.d.ts.map +1 -0
  803. package/dist/media/hooks/useUpload.js +260 -0
  804. package/dist/media/hooks/useUpload.js.map +1 -0
  805. package/dist/media/index.d.ts +57 -0
  806. package/dist/media/index.d.ts.map +1 -0
  807. package/dist/media/index.js +68 -0
  808. package/dist/media/index.js.map +1 -0
  809. package/dist/media/server/delete.d.ts +59 -0
  810. package/dist/media/server/delete.d.ts.map +1 -0
  811. package/dist/media/server/delete.js +176 -0
  812. package/dist/media/server/delete.js.map +1 -0
  813. package/dist/media/server/index.d.ts +10 -0
  814. package/dist/media/server/index.d.ts.map +1 -0
  815. package/dist/media/server/index.js +13 -0
  816. package/dist/media/server/index.js.map +1 -0
  817. package/dist/media/server/presign.d.ts +57 -0
  818. package/dist/media/server/presign.d.ts.map +1 -0
  819. package/dist/media/server/presign.js +112 -0
  820. package/dist/media/server/presign.js.map +1 -0
  821. package/dist/media/server/r2-client.d.ts +30 -0
  822. package/dist/media/server/r2-client.d.ts.map +1 -0
  823. package/dist/media/server/r2-client.js +76 -0
  824. package/dist/media/server/r2-client.js.map +1 -0
  825. package/dist/media/types.d.ts +316 -0
  826. package/dist/media/types.d.ts.map +1 -0
  827. package/dist/media/types.js +95 -0
  828. package/dist/media/types.js.map +1 -0
  829. package/dist/products/api/categories.d.ts +29 -0
  830. package/dist/products/api/categories.d.ts.map +1 -0
  831. package/dist/products/api/categories.js +46 -0
  832. package/dist/products/api/categories.js.map +1 -0
  833. package/dist/products/api/index.d.ts +24 -0
  834. package/dist/products/api/index.d.ts.map +1 -0
  835. package/dist/products/api/index.js +24 -0
  836. package/dist/products/api/index.js.map +1 -0
  837. package/dist/products/api/product.d.ts +36 -0
  838. package/dist/products/api/product.d.ts.map +1 -0
  839. package/dist/products/api/product.js +67 -0
  840. package/dist/products/api/product.js.map +1 -0
  841. package/dist/products/api/products.d.ts +41 -0
  842. package/dist/products/api/products.d.ts.map +1 -0
  843. package/dist/products/api/products.js +99 -0
  844. package/dist/products/api/products.js.map +1 -0
  845. package/dist/products/components/ProductCard.d.ts +54 -0
  846. package/dist/products/components/ProductCard.d.ts.map +1 -0
  847. package/dist/products/components/ProductCard.js +72 -0
  848. package/dist/products/components/ProductCard.js.map +1 -0
  849. package/dist/products/components/ProductDetails.d.ts +63 -0
  850. package/dist/products/components/ProductDetails.d.ts.map +1 -0
  851. package/dist/products/components/ProductDetails.js +137 -0
  852. package/dist/products/components/ProductDetails.js.map +1 -0
  853. package/dist/products/components/ProductGallery.d.ts +30 -0
  854. package/dist/products/components/ProductGallery.d.ts.map +1 -0
  855. package/dist/products/components/ProductGallery.js +91 -0
  856. package/dist/products/components/ProductGallery.js.map +1 -0
  857. package/dist/products/components/ProductGrid.d.ts +50 -0
  858. package/dist/products/components/ProductGrid.d.ts.map +1 -0
  859. package/dist/products/components/ProductGrid.js +81 -0
  860. package/dist/products/components/ProductGrid.js.map +1 -0
  861. package/dist/products/components/ProductSearch.d.ts +43 -0
  862. package/dist/products/components/ProductSearch.d.ts.map +1 -0
  863. package/dist/products/components/ProductSearch.js +97 -0
  864. package/dist/products/components/ProductSearch.js.map +1 -0
  865. package/dist/products/components/ProductSort.d.ts +43 -0
  866. package/dist/products/components/ProductSort.d.ts.map +1 -0
  867. package/dist/products/components/ProductSort.js +59 -0
  868. package/dist/products/components/ProductSort.js.map +1 -0
  869. package/dist/products/components/VariantSelector.d.ts +43 -0
  870. package/dist/products/components/VariantSelector.d.ts.map +1 -0
  871. package/dist/products/components/VariantSelector.js +147 -0
  872. package/dist/products/components/VariantSelector.js.map +1 -0
  873. package/dist/products/components/index.d.ts +20 -0
  874. package/dist/products/components/index.d.ts.map +1 -0
  875. package/dist/products/components/index.js +15 -0
  876. package/dist/products/components/index.js.map +1 -0
  877. package/dist/products/hooks/index.d.ts +10 -0
  878. package/dist/products/hooks/index.d.ts.map +1 -0
  879. package/dist/products/hooks/index.js +8 -0
  880. package/dist/products/hooks/index.js.map +1 -0
  881. package/dist/products/hooks/useProduct.d.ts +44 -0
  882. package/dist/products/hooks/useProduct.d.ts.map +1 -0
  883. package/dist/products/hooks/useProduct.js +87 -0
  884. package/dist/products/hooks/useProduct.js.map +1 -0
  885. package/dist/products/hooks/useProducts.d.ts +67 -0
  886. package/dist/products/hooks/useProducts.d.ts.map +1 -0
  887. package/dist/products/hooks/useProducts.js +131 -0
  888. package/dist/products/hooks/useProducts.js.map +1 -0
  889. package/dist/products/index.d.ts +69 -0
  890. package/dist/products/index.d.ts.map +1 -0
  891. package/dist/products/index.js +79 -0
  892. package/dist/products/index.js.map +1 -0
  893. package/dist/shipping/index.d.ts +8 -0
  894. package/dist/shipping/index.d.ts.map +1 -0
  895. package/dist/shipping/index.js +8 -0
  896. package/dist/shipping/index.js.map +1 -0
  897. package/dist/shipping/shippo.d.ts +77 -0
  898. package/dist/shipping/shippo.d.ts.map +1 -0
  899. package/dist/shipping/shippo.js +280 -0
  900. package/dist/shipping/shippo.js.map +1 -0
  901. package/dist/theme/colors.d.ts +134 -0
  902. package/dist/theme/colors.d.ts.map +1 -0
  903. package/dist/theme/colors.js +214 -0
  904. package/dist/theme/colors.js.map +1 -0
  905. package/dist/theme/defaults.d.ts +133 -0
  906. package/dist/theme/defaults.d.ts.map +1 -0
  907. package/dist/theme/defaults.js +210 -0
  908. package/dist/theme/defaults.js.map +1 -0
  909. package/dist/theme/fonts.d.ts +28 -0
  910. package/dist/theme/fonts.d.ts.map +1 -0
  911. package/dist/theme/fonts.js +55 -0
  912. package/dist/theme/fonts.js.map +1 -0
  913. package/dist/theme/generator.d.ts +43 -0
  914. package/dist/theme/generator.d.ts.map +1 -0
  915. package/dist/theme/generator.js +272 -0
  916. package/dist/theme/generator.js.map +1 -0
  917. package/dist/theme/index.d.ts +23 -0
  918. package/dist/theme/index.d.ts.map +1 -0
  919. package/dist/theme/index.js +30 -0
  920. package/dist/theme/index.js.map +1 -0
  921. package/package.json +2 -2
  922. /package/dist/admin/{admin-theme.css → styles/admin-theme.css} +0 -0
@@ -0,0 +1,838 @@
1
+ /**
2
+ * @rovela/sdk/admin/server/user-management
3
+ *
4
+ * User lifecycle management for store admins — list, deactivate, reactivate,
5
+ * and hard-delete operations, with all invariants enforced at the service
6
+ * layer so every future caller inherits them automatically.
7
+ *
8
+ * # Invariants (enforced in every mutation)
9
+ *
10
+ * 1. Self-protection: actor cannot act on themselves via these helpers.
11
+ * Self-service flows (password change, profile update) go through
12
+ * dedicated `/api/admin/me/*` endpoints (Phase 4).
13
+ *
14
+ * 2. Last-owner protection: there must ALWAYS be at least one admin with
15
+ * role='owner' AND status='active'. Deactivating, demoting, or deleting
16
+ * the last active owner is rejected. This is enforced via an atomic
17
+ * conditional UPDATE (or a pre-check for hard delete), not a
18
+ * check-then-act pattern — no TOCTOU race window.
19
+ *
20
+ * 3. Lateral-escalation protection: administrators can only touch managers
21
+ * and users. They cannot modify owners or other administrators.
22
+ * Enforced via `canManageUser(actor, target)` from `permissions.ts`.
23
+ *
24
+ * 4. Hard delete requires prior deactivation: you cannot DELETE an admin
25
+ * whose status is 'active' or 'invited'. Must call `deactivateAdmin`
26
+ * first. This creates a two-step safety rail for irreversible actions.
27
+ *
28
+ * 5. Audit trail on deactivate: `deactivated_at` and `deactivated_by` are
29
+ * populated from the service layer. Reactivate clears them.
30
+ *
31
+ * 6. Reactivate only applies to 'deactivated' admins, not 'invited'.
32
+ * Invited admins must accept their invite (Phase 3) to become active.
33
+ *
34
+ * # Session cache invalidation
35
+ *
36
+ * Every mutation ends with `invalidateAdminSession(targetId)` so the 30-second
37
+ * per-admin status cache in `requireAdmin()` sees the new state on the very
38
+ * next request. Without this call, a deactivated admin could continue making
39
+ * authenticated requests for up to 30 seconds.
40
+ *
41
+ * # This module never throws on invariant failures — it returns a typed
42
+ * discriminated union `{ ok: true }` or `{ ok: false, error: {...} }`.
43
+ * Unexpected runtime errors (DB connectivity, etc.) still throw and bubble
44
+ * up to the API route's try/catch.
45
+ */
46
+ import { and, eq, ilike, or, sql, desc } from 'drizzle-orm';
47
+ import { getDb } from '../../core/db/client';
48
+ import * as schema from '../../core/db/schema';
49
+ import { canManageUser, roleLabel } from '../permissions';
50
+ import { findAdminById, findAdminByEmail } from './admin-service';
51
+ import { invalidateAdminSession } from './admin-session';
52
+ import { createInviteToken, deleteAdminInviteTokens, INVITE_EXPIRY_HOURS, } from './admin-invite';
53
+ import { sendAdminInviteEmail } from '../../emails/send/admin-auth';
54
+ import { getStoreUrl } from '../../emails/config';
55
+ // =============================================================================
56
+ // List (read path)
57
+ // =============================================================================
58
+ /**
59
+ * List admins with filters and pagination.
60
+ *
61
+ * Returns the raw `StoreAdmin` rows — the caller is responsible for stripping
62
+ * sensitive fields (`passwordHash`) before serializing to JSON. The API
63
+ * handler does this mapping.
64
+ */
65
+ export async function listAdmins(opts = {}) {
66
+ const db = getDb();
67
+ const limit = Math.max(1, Math.min(100, opts.limit ?? 20));
68
+ const offset = Math.max(0, opts.offset ?? 0);
69
+ // Build WHERE conditions
70
+ const conditions = [];
71
+ if (opts.search && opts.search.trim()) {
72
+ const pattern = `%${opts.search.trim()}%`;
73
+ conditions.push(or(ilike(schema.storeAdmins.email, pattern), ilike(schema.storeAdmins.name, pattern)));
74
+ }
75
+ if (opts.status && opts.status !== 'all') {
76
+ conditions.push(eq(schema.storeAdmins.status, opts.status));
77
+ }
78
+ if (opts.role && opts.role !== 'all') {
79
+ conditions.push(eq(schema.storeAdmins.role, opts.role));
80
+ }
81
+ const whereClause = conditions.length > 0 ? and(...conditions) : undefined;
82
+ // Two parallel queries: page + count
83
+ const [admins, countResult] = await Promise.all([
84
+ db
85
+ .select()
86
+ .from(schema.storeAdmins)
87
+ .where(whereClause)
88
+ // Owners first, then by creation date (newest first)
89
+ .orderBy(sql `CASE ${schema.storeAdmins.role}
90
+ WHEN 'owner' THEN 0
91
+ WHEN 'administrator' THEN 1
92
+ WHEN 'manager' THEN 2
93
+ WHEN 'user' THEN 3
94
+ ELSE 4
95
+ END`, desc(schema.storeAdmins.createdAt))
96
+ .limit(limit)
97
+ .offset(offset),
98
+ db
99
+ .select({ count: sql `COUNT(*)::int` })
100
+ .from(schema.storeAdmins)
101
+ .where(whereClause),
102
+ ]);
103
+ return {
104
+ admins,
105
+ total: Number(countResult[0]?.count ?? 0),
106
+ };
107
+ }
108
+ // =============================================================================
109
+ // Helper: count active owners
110
+ // =============================================================================
111
+ /**
112
+ * Count admins with role='owner' and status='active'.
113
+ *
114
+ * The single source of truth for the last-owner invariant. Always queried
115
+ * fresh — it's a one-row COUNT, trivially fast, and caching would introduce
116
+ * staleness risk for a safety-critical check.
117
+ */
118
+ export async function countActiveOwners() {
119
+ const db = getDb();
120
+ const [row] = await db
121
+ .select({ count: sql `COUNT(*)::int` })
122
+ .from(schema.storeAdmins)
123
+ .where(and(eq(schema.storeAdmins.role, 'owner'), eq(schema.storeAdmins.status, 'active')));
124
+ return Number(row?.count ?? 0);
125
+ }
126
+ // =============================================================================
127
+ // Deactivate
128
+ // =============================================================================
129
+ /**
130
+ * Soft-delete an admin: set status='deactivated' and stamp audit fields.
131
+ *
132
+ * Rejects on any invariant violation. Never throws on business errors;
133
+ * returns a typed result the caller can branch on.
134
+ *
135
+ * Uses an atomic conditional UPDATE to enforce the last-owner invariant —
136
+ * no check-then-act race window. If another request deactivates the second-
137
+ * to-last owner between our check and our update, our UPDATE's WHERE clause
138
+ * will match zero rows and we return LAST_OWNER_PROTECTED.
139
+ */
140
+ export async function deactivateAdmin(actor, targetId) {
141
+ // Load target
142
+ const target = await findAdminById(targetId);
143
+ if (!target) {
144
+ return {
145
+ ok: false,
146
+ error: { code: 'NOT_FOUND', message: 'Admin not found.' },
147
+ };
148
+ }
149
+ // Self-protection
150
+ if (actor.id === targetId) {
151
+ return {
152
+ ok: false,
153
+ error: {
154
+ code: 'SELF_ACTION_FORBIDDEN',
155
+ message: 'You cannot deactivate your own account.',
156
+ },
157
+ };
158
+ }
159
+ // Lateral-escalation protection
160
+ if (!canManageUser(actor, { id: target.id, role: target.role })) {
161
+ return {
162
+ ok: false,
163
+ error: {
164
+ code: 'FORBIDDEN',
165
+ message: 'You do not have permission to deactivate this admin.',
166
+ },
167
+ };
168
+ }
169
+ // Must currently be active (nothing to deactivate otherwise)
170
+ if (target.status !== 'active') {
171
+ return {
172
+ ok: false,
173
+ error: {
174
+ code: 'INVALID_STATE',
175
+ message: `Admin is already ${target.status}.`,
176
+ },
177
+ };
178
+ }
179
+ const db = getDb();
180
+ // Atomic update with embedded last-owner guard. If the target is an owner
181
+ // and they're the last active one, the subquery `> 1` evaluates to false
182
+ // and the UPDATE matches zero rows.
183
+ //
184
+ // For non-owner targets, the subquery check is short-circuited because the
185
+ // role condition in the WHERE clause excludes them from the owner-counting
186
+ // branch. We use two separate UPDATEs keyed on the target's role to keep
187
+ // the SQL readable.
188
+ if (target.role === 'owner') {
189
+ // Guarded: only succeeds if there's at least one OTHER active owner.
190
+ const result = await db
191
+ .update(schema.storeAdmins)
192
+ .set({
193
+ status: 'deactivated',
194
+ deactivatedAt: new Date(),
195
+ deactivatedBy: actor.id,
196
+ })
197
+ .where(and(eq(schema.storeAdmins.id, targetId), eq(schema.storeAdmins.status, 'active'), sql `(SELECT COUNT(*)::int FROM ${schema.storeAdmins} WHERE role = 'owner' AND status = 'active') > 1`))
198
+ .returning({ id: schema.storeAdmins.id });
199
+ if (result.length === 0) {
200
+ return {
201
+ ok: false,
202
+ error: {
203
+ code: 'LAST_OWNER_PROTECTED',
204
+ message: 'Cannot deactivate the last active owner. Transfer ownership or promote another user first.',
205
+ },
206
+ };
207
+ }
208
+ }
209
+ else {
210
+ // Non-owner: straightforward update, still guarded on current status
211
+ // so concurrent requests don't double-apply.
212
+ const result = await db
213
+ .update(schema.storeAdmins)
214
+ .set({
215
+ status: 'deactivated',
216
+ deactivatedAt: new Date(),
217
+ deactivatedBy: actor.id,
218
+ })
219
+ .where(and(eq(schema.storeAdmins.id, targetId), eq(schema.storeAdmins.status, 'active')))
220
+ .returning({ id: schema.storeAdmins.id });
221
+ if (result.length === 0) {
222
+ // Raced with another request — target was modified mid-flight
223
+ return {
224
+ ok: false,
225
+ error: {
226
+ code: 'INVALID_STATE',
227
+ message: 'Admin state changed concurrently. Please refresh and try again.',
228
+ },
229
+ };
230
+ }
231
+ }
232
+ // Force the target's next request to re-read from DB → 401 kick-out
233
+ invalidateAdminSession(targetId);
234
+ return { ok: true };
235
+ }
236
+ // =============================================================================
237
+ // Reactivate
238
+ // =============================================================================
239
+ /**
240
+ * Reactivate a previously-deactivated admin: set status='active', clear
241
+ * audit fields. Does NOT apply to 'invited' admins — they must accept
242
+ * their invite (Phase 3) to become active.
243
+ */
244
+ export async function reactivateAdmin(actor, targetId) {
245
+ const target = await findAdminById(targetId);
246
+ if (!target) {
247
+ return {
248
+ ok: false,
249
+ error: { code: 'NOT_FOUND', message: 'Admin not found.' },
250
+ };
251
+ }
252
+ // Self-protection — a deactivated admin can't hit this endpoint anyway
253
+ // (they can't sign in), but defense-in-depth is cheap.
254
+ if (actor.id === targetId) {
255
+ return {
256
+ ok: false,
257
+ error: {
258
+ code: 'SELF_ACTION_FORBIDDEN',
259
+ message: 'You cannot modify your own account here.',
260
+ },
261
+ };
262
+ }
263
+ if (!canManageUser(actor, { id: target.id, role: target.role })) {
264
+ return {
265
+ ok: false,
266
+ error: {
267
+ code: 'FORBIDDEN',
268
+ message: 'You do not have permission to reactivate this admin.',
269
+ },
270
+ };
271
+ }
272
+ if (target.status !== 'deactivated') {
273
+ return {
274
+ ok: false,
275
+ error: {
276
+ code: 'INVALID_STATE',
277
+ message: `Only deactivated admins can be reactivated. This admin is ${target.status}.`,
278
+ },
279
+ };
280
+ }
281
+ const db = getDb();
282
+ const result = await db
283
+ .update(schema.storeAdmins)
284
+ .set({
285
+ status: 'active',
286
+ deactivatedAt: null,
287
+ deactivatedBy: null,
288
+ })
289
+ .where(and(eq(schema.storeAdmins.id, targetId), eq(schema.storeAdmins.status, 'deactivated')))
290
+ .returning({ id: schema.storeAdmins.id });
291
+ if (result.length === 0) {
292
+ return {
293
+ ok: false,
294
+ error: {
295
+ code: 'INVALID_STATE',
296
+ message: 'Admin state changed concurrently. Please refresh and try again.',
297
+ },
298
+ };
299
+ }
300
+ invalidateAdminSession(targetId);
301
+ return { ok: true };
302
+ }
303
+ // =============================================================================
304
+ // Hard delete (owner-only, requires prior deactivation)
305
+ // =============================================================================
306
+ /**
307
+ * Permanently delete an admin row. Cascades to `admin_password_reset_tokens`
308
+ * and `admin_invite_tokens` via the `ON DELETE CASCADE` foreign keys defined
309
+ * in the Phase 0 schema.
310
+ *
311
+ * Requires the target to already be 'deactivated' — this is a two-step
312
+ * irreversible action. The API route additionally gates on `users.delete`
313
+ * permission (owner-only), but we re-check here for defense-in-depth.
314
+ *
315
+ * Dangling `deactivated_by` / `created_by` references on other admin rows
316
+ * are intentionally left as dangling UUIDs. The UI renders them as
317
+ * "Unknown user". Phase 4 may revisit.
318
+ */
319
+ export async function hardDeleteAdmin(actor, targetId) {
320
+ const target = await findAdminById(targetId);
321
+ if (!target) {
322
+ return {
323
+ ok: false,
324
+ error: { code: 'NOT_FOUND', message: 'Admin not found.' },
325
+ };
326
+ }
327
+ if (actor.id === targetId) {
328
+ return {
329
+ ok: false,
330
+ error: {
331
+ code: 'SELF_ACTION_FORBIDDEN',
332
+ message: 'You cannot delete your own account.',
333
+ },
334
+ };
335
+ }
336
+ // Defense-in-depth: only owners reach this code path because the API
337
+ // handler gates on `users.delete` permission, but we re-check here so
338
+ // the invariant holds even if a non-owner caller bypasses the HTTP layer.
339
+ if (actor.role !== 'owner') {
340
+ return {
341
+ ok: false,
342
+ error: {
343
+ code: 'FORBIDDEN',
344
+ message: 'Only owners can permanently delete admins.',
345
+ },
346
+ };
347
+ }
348
+ if (!canManageUser(actor, { id: target.id, role: target.role })) {
349
+ return {
350
+ ok: false,
351
+ error: {
352
+ code: 'FORBIDDEN',
353
+ message: 'You do not have permission to delete this admin.',
354
+ },
355
+ };
356
+ }
357
+ // Must already be deactivated — the two-step safety rail for irreversible
358
+ // destruction. The UI never offers "Delete" on an active row.
359
+ if (target.status !== 'deactivated') {
360
+ return {
361
+ ok: false,
362
+ error: {
363
+ code: 'MUST_DEACTIVATE_FIRST',
364
+ message: 'You must deactivate this admin before permanently deleting them.',
365
+ },
366
+ };
367
+ }
368
+ // Deactivated owners don't count toward the active-owner total, so the
369
+ // last-owner invariant cannot be violated by this delete — but we still
370
+ // short-circuit with a defensive check in case the schema grows in the
371
+ // future and the 'deactivated' state becomes ambiguous.
372
+ if (target.role === 'owner') {
373
+ const activeOwners = await countActiveOwners();
374
+ if (activeOwners < 1) {
375
+ return {
376
+ ok: false,
377
+ error: {
378
+ code: 'LAST_OWNER_PROTECTED',
379
+ message: 'Cannot delete the last owner — at least one active owner must exist.',
380
+ },
381
+ };
382
+ }
383
+ }
384
+ const db = getDb();
385
+ const result = await db
386
+ .delete(schema.storeAdmins)
387
+ .where(and(eq(schema.storeAdmins.id, targetId), eq(schema.storeAdmins.status, 'deactivated')))
388
+ .returning({ id: schema.storeAdmins.id });
389
+ if (result.length === 0) {
390
+ return {
391
+ ok: false,
392
+ error: {
393
+ code: 'INVALID_STATE',
394
+ message: 'Admin state changed concurrently. Please refresh and try again.',
395
+ },
396
+ };
397
+ }
398
+ invalidateAdminSession(targetId);
399
+ return { ok: true };
400
+ }
401
+ // =============================================================================
402
+ // Helper: HTTP status code mapping for errors
403
+ // =============================================================================
404
+ /**
405
+ * Map a `UserManagementError.code` to the HTTP status the API handler
406
+ * should respond with. Exported so both the API handlers and any future
407
+ * caller use the same mapping.
408
+ */
409
+ export function statusCodeFor(code) {
410
+ switch (code) {
411
+ case 'NOT_FOUND':
412
+ return 404;
413
+ case 'FORBIDDEN':
414
+ case 'SELF_ACTION_FORBIDDEN':
415
+ return 403;
416
+ case 'VALIDATION_ERROR':
417
+ return 400;
418
+ case 'LAST_OWNER_PROTECTED':
419
+ case 'MUST_DEACTIVATE_FIRST':
420
+ case 'INVALID_STATE':
421
+ case 'EMAIL_ALREADY_EXISTS':
422
+ case 'EMAIL_ALREADY_INVITED':
423
+ case 'EMAIL_DEACTIVATED_EXISTS':
424
+ return 409;
425
+ default:
426
+ // Exhaustiveness safeguard — if the union grows without this
427
+ // function being updated, TS will complain here at compile time.
428
+ return 500;
429
+ }
430
+ }
431
+ /**
432
+ * Invite a new admin to manage the store.
433
+ *
434
+ * Creates a `store_admins` row in `invited` status with no password,
435
+ * issues an invite token (72h expiry), and sends the invite email. The
436
+ * caller receives both the token AND the fully-qualified invite URL — so
437
+ * if email delivery fails, the UI can show a "copy link manually"
438
+ * fallback instead of silently losing the invite.
439
+ *
440
+ * # Invariants (in order)
441
+ *
442
+ * 1. `canManageUser(actor, {role})` — actor can grant the requested role.
443
+ * Administrators cannot invite owners or other administrators.
444
+ * 2. Valid email format + name length ≥ 2.
445
+ * 3. Email uniqueness — rejects with a distinct error code depending on
446
+ * the existing row's status (active / invited / deactivated) so the
447
+ * UI can show actionable messages.
448
+ * 4. Legal role: must be one of 'owner' | 'administrator' | 'manager' | 'user'.
449
+ *
450
+ * Email send failures are logged but NOT propagated — the invite row +
451
+ * token are already persisted, the caller gets the URL, and the UI
452
+ * handles fallback display.
453
+ */
454
+ export async function inviteAdmin(actor, request) {
455
+ const email = (request.email || '').trim().toLowerCase();
456
+ const name = (request.name || '').trim();
457
+ const role = request.role;
458
+ // Basic format validation
459
+ if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
460
+ return {
461
+ ok: false,
462
+ error: {
463
+ code: 'VALIDATION_ERROR',
464
+ message: 'Please enter a valid email address.',
465
+ },
466
+ };
467
+ }
468
+ if (name.length < 2) {
469
+ return {
470
+ ok: false,
471
+ error: {
472
+ code: 'VALIDATION_ERROR',
473
+ message: 'Name must be at least 2 characters.',
474
+ },
475
+ };
476
+ }
477
+ if (role !== 'owner' &&
478
+ role !== 'administrator' &&
479
+ role !== 'manager' &&
480
+ role !== 'user') {
481
+ return {
482
+ ok: false,
483
+ error: {
484
+ code: 'VALIDATION_ERROR',
485
+ message: 'Invalid role. Must be owner, administrator, manager, or user.',
486
+ },
487
+ };
488
+ }
489
+ // Permission: actor must be allowed to grant this role. We pass a
490
+ // synthetic target with a fake id so `canManageUser` is just checking
491
+ // the role-vs-role hierarchy (it does an actor.id === target.id check
492
+ // for self-protection, which is irrelevant here — no self-invite).
493
+ if (!canManageUser(actor, { id: '__new_invitee__', role })) {
494
+ return {
495
+ ok: false,
496
+ error: {
497
+ code: 'FORBIDDEN',
498
+ message: `You do not have permission to invite someone as ${roleLabel(role)}.`,
499
+ },
500
+ };
501
+ }
502
+ // Email uniqueness
503
+ const existing = await findAdminByEmail(email);
504
+ if (existing) {
505
+ const existingStatus = existing.status ?? 'active';
506
+ if (existingStatus === 'active') {
507
+ return {
508
+ ok: false,
509
+ error: {
510
+ code: 'EMAIL_ALREADY_EXISTS',
511
+ message: 'An active admin with this email already exists.',
512
+ },
513
+ };
514
+ }
515
+ if (existingStatus === 'invited') {
516
+ return {
517
+ ok: false,
518
+ error: {
519
+ code: 'EMAIL_ALREADY_INVITED',
520
+ message: 'This email was already invited. Use the Resend invite action instead.',
521
+ },
522
+ };
523
+ }
524
+ return {
525
+ ok: false,
526
+ error: {
527
+ code: 'EMAIL_DEACTIVATED_EXISTS',
528
+ message: 'A previously deactivated admin exists with this email. Reactivate them instead of re-inviting.',
529
+ },
530
+ };
531
+ }
532
+ // Insert the invited admin row. passwordHash stays null until the
533
+ // invitee accepts the invite and sets their own.
534
+ const db = getDb();
535
+ const [created] = await db
536
+ .insert(schema.storeAdmins)
537
+ .values({
538
+ email,
539
+ name,
540
+ passwordHash: null,
541
+ role,
542
+ status: 'invited',
543
+ createdBy: actor.id,
544
+ })
545
+ .returning({ id: schema.storeAdmins.id });
546
+ if (!created) {
547
+ return {
548
+ ok: false,
549
+ error: {
550
+ code: 'INVALID_STATE',
551
+ message: 'Failed to create invited admin. Please try again.',
552
+ },
553
+ };
554
+ }
555
+ // Create the invite token (72h)
556
+ const { token } = await createInviteToken({
557
+ adminId: created.id,
558
+ invitedBy: actor.id,
559
+ });
560
+ // Build the invite URL. `getStoreUrl` reads from NEXT_PUBLIC_APP_URL /
561
+ // NEXTAUTH_URL and returns '' if neither is set — the UI still gets a
562
+ // valid (if short) URL it can show.
563
+ const storeUrl = getStoreUrl();
564
+ const inviteUrl = `${storeUrl}/admin/accept-invite?token=${encodeURIComponent(token)}`;
565
+ // Best-effort send. We never fail the invite just because the email
566
+ // broker is down — the owner sees the URL in the response and can
567
+ // share it manually.
568
+ try {
569
+ // Resolve the inviter's display name from the `store_admins` row so
570
+ // we can render it in the email greeting.
571
+ const inviter = await findAdminById(actor.id);
572
+ const inviterName = inviter?.name || 'An admin';
573
+ await sendAdminInviteEmail({
574
+ to: email,
575
+ adminName: name,
576
+ inviterName,
577
+ roleLabel: roleLabel(role),
578
+ acceptLink: inviteUrl,
579
+ expiryHours: INVITE_EXPIRY_HOURS,
580
+ });
581
+ }
582
+ catch (err) {
583
+ console.error('[user-management] Failed to send invite email:', err instanceof Error ? err.message : err);
584
+ // Intentionally swallow — the caller already has the URL.
585
+ }
586
+ return {
587
+ ok: true,
588
+ adminId: created.id,
589
+ token,
590
+ inviteUrl,
591
+ };
592
+ }
593
+ /**
594
+ * Resend an invite to an admin who is still in `invited` status.
595
+ *
596
+ * Generates a fresh token (invalidating any previous ones) and resends
597
+ * the email. Preserves the single-active-token policy — older tokens
598
+ * are deleted before the new one is created.
599
+ */
600
+ export async function resendAdminInvite(actor, targetId) {
601
+ const target = await findAdminById(targetId);
602
+ if (!target) {
603
+ return {
604
+ ok: false,
605
+ error: { code: 'NOT_FOUND', message: 'Admin not found.' },
606
+ };
607
+ }
608
+ if (!canManageUser(actor, { id: target.id, role: target.role })) {
609
+ return {
610
+ ok: false,
611
+ error: {
612
+ code: 'FORBIDDEN',
613
+ message: 'You do not have permission to resend this invite.',
614
+ },
615
+ };
616
+ }
617
+ if (target.status !== 'invited') {
618
+ return {
619
+ ok: false,
620
+ error: {
621
+ code: 'INVALID_STATE',
622
+ message: target.status === 'active'
623
+ ? 'This admin has already accepted their invite.'
624
+ : 'This admin cannot be re-invited.',
625
+ },
626
+ };
627
+ }
628
+ // Clear previous tokens so only the new one is valid
629
+ await deleteAdminInviteTokens(target.id);
630
+ const { token } = await createInviteToken({
631
+ adminId: target.id,
632
+ invitedBy: actor.id,
633
+ });
634
+ const storeUrl = getStoreUrl();
635
+ const inviteUrl = `${storeUrl}/admin/accept-invite?token=${encodeURIComponent(token)}`;
636
+ try {
637
+ const inviter = await findAdminById(actor.id);
638
+ const inviterName = inviter?.name || 'An admin';
639
+ await sendAdminInviteEmail({
640
+ to: target.email,
641
+ adminName: target.name,
642
+ inviterName,
643
+ roleLabel: roleLabel(target.role),
644
+ acceptLink: inviteUrl,
645
+ expiryHours: INVITE_EXPIRY_HOURS,
646
+ });
647
+ }
648
+ catch (err) {
649
+ console.error('[user-management] Failed to resend invite email:', err instanceof Error ? err.message : err);
650
+ }
651
+ return { ok: true, token, inviteUrl };
652
+ }
653
+ // =============================================================================
654
+ // Phase 3 — Cancel invite
655
+ // =============================================================================
656
+ /**
657
+ * Cancel a pending invite. Hard-deletes the `store_admins` row — which
658
+ * cascades via FK to delete all `admin_invite_tokens` rows for that
659
+ * admin. Only valid for `invited` status (not `active` / `deactivated`).
660
+ *
661
+ * Uses `users.write` permission (administrators + owners), unlike the
662
+ * DELETE endpoint which is owner-only. Canceling an invite for a manager
663
+ * or user is a normal administrator action, not a destructive one.
664
+ */
665
+ export async function cancelAdminInvite(actor, targetId) {
666
+ const target = await findAdminById(targetId);
667
+ if (!target) {
668
+ return {
669
+ ok: false,
670
+ error: { code: 'NOT_FOUND', message: 'Admin not found.' },
671
+ };
672
+ }
673
+ // Defense-in-depth: self-action should be impossible (you can't invite
674
+ // yourself), but check anyway.
675
+ if (actor.id === targetId) {
676
+ return {
677
+ ok: false,
678
+ error: {
679
+ code: 'SELF_ACTION_FORBIDDEN',
680
+ message: 'You cannot cancel your own invite.',
681
+ },
682
+ };
683
+ }
684
+ if (!canManageUser(actor, { id: target.id, role: target.role })) {
685
+ return {
686
+ ok: false,
687
+ error: {
688
+ code: 'FORBIDDEN',
689
+ message: 'You do not have permission to cancel this invite.',
690
+ },
691
+ };
692
+ }
693
+ if (target.status !== 'invited') {
694
+ return {
695
+ ok: false,
696
+ error: {
697
+ code: 'INVALID_STATE',
698
+ message: 'Only pending invites can be cancelled.',
699
+ },
700
+ };
701
+ }
702
+ const db = getDb();
703
+ const result = await db
704
+ .delete(schema.storeAdmins)
705
+ .where(and(eq(schema.storeAdmins.id, targetId), eq(schema.storeAdmins.status, 'invited')))
706
+ .returning({ id: schema.storeAdmins.id });
707
+ if (result.length === 0) {
708
+ return {
709
+ ok: false,
710
+ error: {
711
+ code: 'INVALID_STATE',
712
+ message: 'Admin state changed concurrently. Please refresh and try again.',
713
+ },
714
+ };
715
+ }
716
+ invalidateAdminSession(targetId);
717
+ return { ok: true };
718
+ }
719
+ // =============================================================================
720
+ // Phase 3 — Change role
721
+ // =============================================================================
722
+ /**
723
+ * Change an admin's role.
724
+ *
725
+ * Invariants (in strict order):
726
+ *
727
+ * 1. Target exists (→ NOT_FOUND).
728
+ * 2. Self-protection — actor cannot change their own role (→
729
+ * SELF_ACTION_FORBIDDEN). A solo owner needing to demote themselves
730
+ * must either invite another owner first, or use a future Phase 4
731
+ * emergency-reset flow.
732
+ * 3. canManageUser at CURRENT role — actor must be allowed to manage
733
+ * the target at their current role (administrator cannot touch
734
+ * owners or other administrators).
735
+ * 4. canManageUser at NEW role — actor must be allowed to grant the
736
+ * new role (administrator cannot promote to administrator/owner).
737
+ * 5. No-op fast path — if newRole === current role, return success
738
+ * without touching the DB.
739
+ * 6. Last-owner protection — if target is currently 'owner' and the
740
+ * new role is not 'owner', require `countActiveOwners() > 1`.
741
+ * Enforced atomically via a conditional UPDATE so there's no
742
+ * check-then-act race window.
743
+ * 7. Update; invalidate session cache.
744
+ */
745
+ export async function changeAdminRole(actor, targetId, newRole) {
746
+ const target = await findAdminById(targetId);
747
+ if (!target) {
748
+ return {
749
+ ok: false,
750
+ error: { code: 'NOT_FOUND', message: 'Admin not found.' },
751
+ };
752
+ }
753
+ if (actor.id === targetId) {
754
+ return {
755
+ ok: false,
756
+ error: {
757
+ code: 'SELF_ACTION_FORBIDDEN',
758
+ message: 'You cannot change your own role. Ask another owner to make this change.',
759
+ },
760
+ };
761
+ }
762
+ // Validate role value
763
+ if (newRole !== 'owner' &&
764
+ newRole !== 'administrator' &&
765
+ newRole !== 'manager' &&
766
+ newRole !== 'user') {
767
+ return {
768
+ ok: false,
769
+ error: {
770
+ code: 'VALIDATION_ERROR',
771
+ message: 'Invalid role.',
772
+ },
773
+ };
774
+ }
775
+ // canManageUser at CURRENT role
776
+ if (!canManageUser(actor, { id: target.id, role: target.role })) {
777
+ return {
778
+ ok: false,
779
+ error: {
780
+ code: 'FORBIDDEN',
781
+ message: 'You do not have permission to manage this admin.',
782
+ },
783
+ };
784
+ }
785
+ // canManageUser at NEW role (pass a synthetic target id so the
786
+ // self-check is neutral; we already ruled out self above)
787
+ if (!canManageUser(actor, { id: '__new_role_target__', role: newRole })) {
788
+ return {
789
+ ok: false,
790
+ error: {
791
+ code: 'FORBIDDEN',
792
+ message: `You do not have permission to grant the ${roleLabel(newRole)} role.`,
793
+ },
794
+ };
795
+ }
796
+ // No-op fast path: target already at the requested role.
797
+ if (target.role === newRole) {
798
+ return { ok: true };
799
+ }
800
+ const db = getDb();
801
+ if (target.role === 'owner' && newRole !== 'owner') {
802
+ // Demotion from owner — guarded with the last-owner invariant
803
+ const result = await db
804
+ .update(schema.storeAdmins)
805
+ .set({ role: newRole })
806
+ .where(and(eq(schema.storeAdmins.id, targetId), eq(schema.storeAdmins.role, 'owner'), sql `(SELECT COUNT(*)::int FROM ${schema.storeAdmins} WHERE role = 'owner' AND status = 'active') > 1`))
807
+ .returning({ id: schema.storeAdmins.id });
808
+ if (result.length === 0) {
809
+ return {
810
+ ok: false,
811
+ error: {
812
+ code: 'LAST_OWNER_PROTECTED',
813
+ message: 'Cannot demote the last active owner. Promote another admin to owner first.',
814
+ },
815
+ };
816
+ }
817
+ }
818
+ else {
819
+ // Non-owner-demotion path: straightforward update
820
+ const result = await db
821
+ .update(schema.storeAdmins)
822
+ .set({ role: newRole })
823
+ .where(eq(schema.storeAdmins.id, targetId))
824
+ .returning({ id: schema.storeAdmins.id });
825
+ if (result.length === 0) {
826
+ return {
827
+ ok: false,
828
+ error: {
829
+ code: 'INVALID_STATE',
830
+ message: 'Admin state changed concurrently. Please refresh and try again.',
831
+ },
832
+ };
833
+ }
834
+ }
835
+ invalidateAdminSession(targetId);
836
+ return { ok: true };
837
+ }
838
+ //# sourceMappingURL=user-management.js.map