@mohasinac/appkit 3.6.5 → 3.8.0

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 (298) hide show
  1. package/dist/_internal/client/features/layout/DashboardLayoutClient.d.ts +17 -3
  2. package/dist/_internal/client/features/layout/DashboardLayoutClient.js +7 -2
  3. package/dist/_internal/client/features/tour/TourProvider.d.ts +5 -2
  4. package/dist/_internal/client/features/tour/TourProvider.js +125 -12
  5. package/dist/_internal/client/theme/ThemeProvider.js +1 -1
  6. package/dist/_internal/server/features/categories/data.js +2 -2
  7. package/dist/_internal/server/features/faqs/og.js +5 -1
  8. package/dist/_internal/server/features/reviews/og.js +5 -1
  9. package/dist/_internal/server/features/seo/manifest.js +2 -1
  10. package/dist/_internal/server/features/seo/og.js +7 -1
  11. package/dist/_internal/server/features/tester/visibility.d.ts +13 -0
  12. package/dist/_internal/server/features/tester/visibility.js +28 -0
  13. package/dist/_internal/server/functions/scheduled.d.ts +2 -1
  14. package/dist/_internal/server/functions/scheduled.js +9 -1
  15. package/dist/_internal/server/jobs/core/jobRunners.js +5 -0
  16. package/dist/_internal/server/jobs/core/resetOtpVerification.d.ts +17 -0
  17. package/dist/_internal/server/jobs/core/resetOtpVerification.js +88 -0
  18. package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +6 -0
  19. package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +35 -0
  20. package/dist/_internal/server/jobs/handlers/_helpers.d.ts +6 -0
  21. package/dist/_internal/server/jobs/handlers/_helpers.js +12 -0
  22. package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
  23. package/dist/_internal/server/jobs/handlers/index.js +2 -0
  24. package/dist/_internal/server/jobs/handlers/messages.d.ts +2 -0
  25. package/dist/_internal/server/jobs/handlers/messages.js +2 -0
  26. package/dist/_internal/server/jobs/handlers/testerSandboxCleanup.d.ts +2 -0
  27. package/dist/_internal/server/jobs/handlers/testerSandboxCleanup.js +2 -0
  28. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  29. package/dist/_internal/shared/actions/action-registry.js +56 -0
  30. package/dist/_internal/shared/tokens/index.d.ts +12 -12
  31. package/dist/client.d.ts +15 -3
  32. package/dist/client.js +10 -2
  33. package/dist/constants/api-endpoints.d.ts +39 -12
  34. package/dist/constants/api-endpoints.js +17 -8
  35. package/dist/constants/field-names.d.ts +9 -0
  36. package/dist/constants/field-names.js +12 -0
  37. package/dist/constants/index.d.ts +1 -1
  38. package/dist/constants/index.js +1 -1
  39. package/dist/features/account/components/LinkedAccountsSection.d.ts +11 -0
  40. package/dist/features/account/components/LinkedAccountsSection.js +11 -0
  41. package/dist/features/account/components/UserSidebar.d.ts +3 -1
  42. package/dist/features/account/components/UserSidebar.js +9 -13
  43. package/dist/features/account/hooks/useCollapsedSections.d.ts +20 -0
  44. package/dist/features/account/hooks/useCollapsedSections.js +63 -0
  45. package/dist/features/account/hooks/useProfile.d.ts +8 -0
  46. package/dist/features/account/index.d.ts +1 -0
  47. package/dist/features/account/index.js +1 -0
  48. package/dist/features/admin/components/AdminAddressEditorView.js +2 -2
  49. package/dist/features/admin/components/AdminBidsView.js +6 -6
  50. package/dist/features/admin/components/AdminBrandsView.js +2 -2
  51. package/dist/features/admin/components/AdminCarouselView.js +2 -2
  52. package/dist/features/admin/components/AdminCategoryEditorView.js +2 -2
  53. package/dist/features/admin/components/AdminPrizeDrawsView.js +3 -3
  54. package/dist/features/admin/components/AdminProductEditorView.js +5 -2
  55. package/dist/features/admin/components/AdminReviewsView.js +5 -5
  56. package/dist/features/admin/components/AdminSectionsView.js +3 -18
  57. package/dist/features/admin/components/AdminSidebar.js +8 -6
  58. package/dist/features/admin/components/AdminSiteSettingsView.js +133 -127
  59. package/dist/features/admin/components/AdminSublistingCategoriesView.js +1 -1
  60. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.d.ts +9 -0
  61. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +129 -0
  62. package/dist/features/admin/components/AdminTesterChecklistView.d.ts +6 -0
  63. package/dist/features/admin/components/AdminTesterChecklistView.js +93 -0
  64. package/dist/features/admin/components/AdminUserEditorView.d.ts +3 -1
  65. package/dist/features/admin/components/AdminUserEditorView.js +7 -1
  66. package/dist/features/admin/components/AdminUsersView.js +1 -1
  67. package/dist/features/admin/components/DataListingView.js +2 -2
  68. package/dist/features/admin/components/analytics/AdminPageViewsReportView.d.ts +8 -0
  69. package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +41 -0
  70. package/dist/features/admin/components/index.d.ts +6 -0
  71. package/dist/features/admin/components/index.js +3 -0
  72. package/dist/features/admin/schemas/firestore.d.ts +0 -7
  73. package/dist/features/admin/schemas/firestore.js +6 -6
  74. package/dist/features/analytics/components/PageViewTracker.d.ts +12 -0
  75. package/dist/features/analytics/components/PageViewTracker.js +22 -0
  76. package/dist/features/analytics/repository/page-views.repository.d.ts +32 -0
  77. package/dist/features/analytics/repository/page-views.repository.js +43 -0
  78. package/dist/features/analytics/types.d.ts +6 -0
  79. package/dist/features/analytics/types.js +13 -0
  80. package/dist/features/auth/components/SocialAuthButtons.js +1 -1
  81. package/dist/features/auth/hooks/useAuth.d.ts +12 -0
  82. package/dist/features/auth/hooks/useAuth.js +109 -0
  83. package/dist/features/auth/permissions/constants.d.ts +1 -1
  84. package/dist/features/auth/repository/session.repository.d.ts +2 -0
  85. package/dist/features/auth/repository/session.repository.js +4 -1
  86. package/dist/features/auth/schemas/firestore.d.ts +17 -1
  87. package/dist/features/auth/schemas/firestore.js +2 -0
  88. package/dist/features/blog/components/BlogIndexListing.js +2 -2
  89. package/dist/features/blog/schemas/firestore.d.ts +4 -0
  90. package/dist/features/cart/actions/cart-actions.js +20 -2
  91. package/dist/features/categories/api/route.js +2 -2
  92. package/dist/features/categories/components/CategoriesIndexListing.js +3 -3
  93. package/dist/features/categories/components/CategoryBundlesListing.js +2 -2
  94. package/dist/features/categories/components/CategoryDetailPageView.js +3 -1
  95. package/dist/features/categories/components/CategoryProductsListing.js +2 -2
  96. package/dist/features/categories/schemas/firestore.d.ts +4 -0
  97. package/dist/features/classified/components/ClassifiedIndexListing.js +2 -2
  98. package/dist/features/digital-codes/components/DigitalCodesIndexListing.js +2 -2
  99. package/dist/features/email/primitives.d.ts +2 -2
  100. package/dist/features/email/primitives.js +2 -2
  101. package/dist/features/events/components/EventsIndexListing.js +2 -2
  102. package/dist/features/events/repository/event-entry.repository.js +1 -0
  103. package/dist/features/events/schemas/firestore.d.ts +7 -1
  104. package/dist/features/events/schemas/firestore.js +1 -0
  105. package/dist/features/layout/BackToTop.d.ts +6 -1
  106. package/dist/features/layout/BackToTop.js +31 -6
  107. package/dist/features/layout/BottomNavbar.js +1 -1
  108. package/dist/features/layout/NavItem.js +1 -1
  109. package/dist/features/layout/NavbarLayout.js +2 -2
  110. package/dist/features/live/components/LiveItemsIndexListing.js +2 -2
  111. package/dist/features/media/MediaVideo.js +5 -1
  112. package/dist/features/pre-orders/components/PreOrdersIndexListing.js +2 -2
  113. package/dist/features/products/components/AuctionsIndexListing.js +2 -2
  114. package/dist/features/products/components/PrizeDrawsIndexListing.js +2 -2
  115. package/dist/features/products/components/ProductsIndexListing.js +2 -2
  116. package/dist/features/products/constants/action-defs.d.ts +2 -0
  117. package/dist/features/products/constants/action-defs.js +2 -0
  118. package/dist/features/products/constants/sieve.d.ts +0 -6
  119. package/dist/features/products/constants/sieve.js +4 -2
  120. package/dist/features/products/repository/products.repository.d.ts +20 -0
  121. package/dist/features/products/repository/products.repository.js +5 -0
  122. package/dist/features/products/schemas/firestore.d.ts +4 -0
  123. package/dist/features/promotions/components/CouponsIndexListing.js +18 -5
  124. package/dist/features/reviews/components/ReviewsIndexListing.js +2 -2
  125. package/dist/features/search/hooks/useNavSuggestions.js +20 -1
  126. package/dist/features/seller/actions/seller-actions.js +11 -6
  127. package/dist/features/seller/components/SellerAddressesView.js +2 -2
  128. package/dist/features/seller/components/SellerBidsView.js +2 -2
  129. package/dist/features/seller/components/SellerCouponsView.js +1 -1
  130. package/dist/features/seller/components/SellerOrdersView.js +2 -2
  131. package/dist/features/seller/components/SellerProductsView.js +2 -2
  132. package/dist/features/seller/components/SellerSidebar.d.ts +3 -1
  133. package/dist/features/seller/components/SellerSidebar.js +9 -8
  134. package/dist/features/seller/components/SellerStoreCategoriesView.js +2 -2
  135. package/dist/features/seller/components/SellerTemplatesView.js +2 -2
  136. package/dist/features/shell/StepForm.js +4 -4
  137. package/dist/features/stores/actions/store-query-actions.d.ts +5 -4
  138. package/dist/features/stores/actions/store-query-actions.js +11 -8
  139. package/dist/features/stores/components/StoreAuctionsListing.js +2 -2
  140. package/dist/features/stores/components/StoreClassifiedsListing.js +2 -2
  141. package/dist/features/stores/components/StoreDetailLayoutView.js +1 -1
  142. package/dist/features/stores/components/StoreDigitalCodesListing.js +2 -2
  143. package/dist/features/stores/components/StoreLiveItemsListing.js +2 -2
  144. package/dist/features/stores/components/StorePreOrdersListing.js +2 -2
  145. package/dist/features/stores/components/StoreProductsListing.js +2 -2
  146. package/dist/features/stores/components/StoreReviewsListing.js +2 -2
  147. package/dist/features/stores/components/StoresIndexListing.js +2 -2
  148. package/dist/features/stores/repository/store.repository.js +3 -0
  149. package/dist/features/stores/schemas/firestore.d.ts +4 -0
  150. package/dist/features/tester/actions/checklist-item-actions.d.ts +69 -0
  151. package/dist/features/tester/actions/checklist-item-actions.js +42 -0
  152. package/dist/features/tester/actions/index.d.ts +1 -0
  153. package/dist/features/tester/actions/index.js +1 -0
  154. package/dist/features/tester/components/AdminTesterFeedbackIssuesView.d.ts +2 -0
  155. package/dist/features/tester/components/AdminTesterFeedbackIssuesView.js +22 -0
  156. package/dist/features/tester/components/AdminTesterFeedbackListView.d.ts +3 -0
  157. package/dist/features/tester/components/AdminTesterFeedbackListView.js +100 -0
  158. package/dist/features/tester/components/AdminTesterFeedbackReportView.d.ts +2 -0
  159. package/dist/features/tester/components/AdminTesterFeedbackReportView.js +30 -0
  160. package/dist/features/tester/components/AdminTesterFeedbackView.d.ts +2 -0
  161. package/dist/features/tester/components/AdminTesterFeedbackView.js +29 -0
  162. package/dist/features/tester/components/TesterChecklistStepRow.d.ts +18 -0
  163. package/dist/features/tester/components/TesterChecklistStepRow.js +29 -0
  164. package/dist/features/tester/components/TesterFeedbackChart.d.ts +14 -0
  165. package/dist/features/tester/components/TesterFeedbackChart.js +18 -0
  166. package/dist/features/tester/components/TesterHubView.d.ts +5 -0
  167. package/dist/features/tester/components/TesterHubView.js +71 -0
  168. package/dist/features/tester/components/index.d.ts +11 -0
  169. package/dist/features/tester/components/index.js +7 -0
  170. package/dist/features/tester/index.d.ts +2 -0
  171. package/dist/features/tester/index.js +2 -0
  172. package/dist/features/tester/repository/index.d.ts +2 -0
  173. package/dist/features/tester/repository/index.js +2 -0
  174. package/dist/features/tester/repository/tester-checklist-item.repository.d.ts +13 -0
  175. package/dist/features/tester/repository/tester-checklist-item.repository.js +55 -0
  176. package/dist/features/tester/repository/tester-checklist-response.repository.d.ts +50 -0
  177. package/dist/features/tester/repository/tester-checklist-response.repository.js +196 -0
  178. package/dist/features/tester/schemas/firestore.d.ts +85 -0
  179. package/dist/features/tester/schemas/firestore.js +93 -0
  180. package/dist/features/tester/schemas/index.d.ts +1 -0
  181. package/dist/features/tester/schemas/index.js +1 -0
  182. package/dist/features/tester/seed-data/blog-tester-seed-data.d.ts +2 -0
  183. package/dist/features/tester/seed-data/blog-tester-seed-data.js +40 -0
  184. package/dist/features/tester/seed-data/categories-tester-seed-data.d.ts +2 -0
  185. package/dist/features/tester/seed-data/categories-tester-seed-data.js +177 -0
  186. package/dist/features/tester/seed-data/events-tester-seed-data.d.ts +2 -0
  187. package/dist/features/tester/seed-data/events-tester-seed-data.js +50 -0
  188. package/dist/features/tester/seed-data/index.d.ts +6 -0
  189. package/dist/features/tester/seed-data/index.js +6 -0
  190. package/dist/features/tester/seed-data/products-tester-seed-data.d.ts +2 -0
  191. package/dist/features/tester/seed-data/products-tester-seed-data.js +151 -0
  192. package/dist/features/tester/seed-data/stores-tester-seed-data.d.ts +2 -0
  193. package/dist/features/tester/seed-data/stores-tester-seed-data.js +40 -0
  194. package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +2 -0
  195. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +248 -0
  196. package/dist/features/tester/seed-data/tester-ttl.d.ts +4 -0
  197. package/dist/features/tester/seed-data/tester-ttl.js +6 -0
  198. package/dist/features/tester/server.d.ts +9 -0
  199. package/dist/features/tester/server.js +8 -0
  200. package/dist/index.d.ts +28 -2
  201. package/dist/index.js +51 -1
  202. package/dist/next/api/api-response.js +5 -1
  203. package/dist/next/api/routeHandler.js +10 -1
  204. package/dist/next/middleware/chain.js +1 -1
  205. package/dist/next/routing/route-map.d.ts +6 -7
  206. package/dist/next/routing/route-map.js +3 -7
  207. package/dist/providers/payment-manual/index.d.ts +2 -2
  208. package/dist/providers/payment-manual/index.js +2 -2
  209. package/dist/react/contexts/SessionContext.d.ts +4 -0
  210. package/dist/react/contexts/SessionContext.js +4 -0
  211. package/dist/repositories/index.d.ts +4 -0
  212. package/dist/repositories/index.js +3 -0
  213. package/dist/security/pii-encrypt.js +12 -2
  214. package/dist/seed/addresses-seed-data.js +1 -1
  215. package/dist/seed/bids-seed-data.js +64 -185
  216. package/dist/seed/blog-posts-seed-data.js +1 -1
  217. package/dist/seed/carousel-slides-seed-data.js +22 -16
  218. package/dist/seed/carousels-seed-data.js +1 -1
  219. package/dist/seed/cart-seed-data.js +1 -1
  220. package/dist/seed/categories-seed-data.js +1 -1
  221. package/dist/seed/claimed-coupons-seed-data.js +1 -1
  222. package/dist/seed/conversations-seed-data.js +1 -1
  223. package/dist/seed/coupon-usage-seed-data.js +1 -1
  224. package/dist/seed/coupons-seed-data.js +1 -1
  225. package/dist/seed/events-seed-data.js +1 -1
  226. package/dist/seed/faq-seed-data.js +119 -3
  227. package/dist/seed/grouped-listings-seed-data.d.ts +2 -0
  228. package/dist/seed/grouped-listings-seed-data.js +1 -1
  229. package/dist/seed/history-seed-data.js +1 -1
  230. package/dist/seed/homepage-sections-seed-data.js +1 -1
  231. package/dist/seed/index.d.ts +2 -2
  232. package/dist/seed/index.js +7 -3
  233. package/dist/seed/lottery-entries-seed-data.js +1 -1
  234. package/dist/seed/manifest.d.ts +4 -3
  235. package/dist/seed/manifest.js +13 -6
  236. package/dist/seed/notifications-seed-data.js +1 -1
  237. package/dist/seed/offers-seed-data.js +1 -1
  238. package/dist/seed/orders-seed-data.js +1 -1
  239. package/dist/seed/payouts-seed-data.js +1 -1
  240. package/dist/seed/products-art-seed-data.js +1 -1
  241. package/dist/seed/products-auctions-seed-data.js +1 -1
  242. package/dist/seed/products-classifieds-seed-data.js +1 -1
  243. package/dist/seed/products-digital-codes-seed-data.js +1 -1
  244. package/dist/seed/products-live-items-seed-data.js +1 -1
  245. package/dist/seed/products-preorders-seed-data.d.ts +2 -0
  246. package/dist/seed/products-preorders-seed-data.js +1 -1
  247. package/dist/seed/products-prize-draws-seed-data.js +1 -1
  248. package/dist/seed/products-standard-seed-data.js +1 -1
  249. package/dist/seed/products-stickers-seed-data.js +1 -1
  250. package/dist/seed/reviews-seed-data.js +1 -1
  251. package/dist/seed/scammers-seed-data.js +1 -1
  252. package/dist/seed/sessions-seed-data.js +1 -1
  253. package/dist/seed/site-settings-seed-data.js +22 -16
  254. package/dist/seed/store-addresses-seed-data.js +1 -1
  255. package/dist/seed/store-extensions-seed-data.js +1 -1
  256. package/dist/seed/stores-seed-data.js +1 -1
  257. package/dist/seed/support-tickets-seed-data.js +1 -1
  258. package/dist/seed/tester-checklist-seed-data.d.ts +2 -0
  259. package/dist/seed/tester-checklist-seed-data.js +248 -0
  260. package/dist/seed/users-seed-data.js +1 -1
  261. package/dist/seed/wishlists-seed-data.js +1 -1
  262. package/dist/server.d.ts +7 -2
  263. package/dist/server.js +19 -12
  264. package/dist/styles.css +181 -165
  265. package/dist/tailwind-utilities.css +1 -1
  266. package/dist/tokens/color-pairs.d.ts +46 -0
  267. package/dist/tokens/color-pairs.js +93 -0
  268. package/dist/tokens/index.d.ts +60 -60
  269. package/dist/tokens/index.js +30 -30
  270. package/dist/tokens/themes/cobalt-night.d.ts +3 -2
  271. package/dist/tokens/themes/cobalt-night.js +3 -2
  272. package/dist/tokens/themes/default-dark.d.ts +4 -1
  273. package/dist/tokens/themes/default-dark.js +53 -50
  274. package/dist/tokens/themes/default-light.d.ts +5 -1
  275. package/dist/tokens/themes/default-light.js +48 -44
  276. package/dist/tokens/themes/sunset.js +4 -4
  277. package/dist/tokens/tokens.css +128 -122
  278. package/dist/ui/components/CollapsibleSection.d.ts +15 -0
  279. package/dist/ui/components/CollapsibleSection.js +13 -0
  280. package/dist/ui/components/ListingToolbar.js +3 -2
  281. package/dist/ui/components/Semantic.style.css +3 -3
  282. package/dist/ui/components/SideDrawer.style.css +19 -19
  283. package/dist/ui/components/Slider.js +1 -1
  284. package/dist/ui/components/StickyToolbar.d.ts +36 -7
  285. package/dist/ui/components/StickyToolbar.js +63 -5
  286. package/dist/ui/components/Tabs.js +17 -1
  287. package/dist/ui/components/Tabs.style.css +10 -0
  288. package/dist/ui/components/Typography.js +7 -0
  289. package/dist/ui/components/surface-tokens.d.ts +0 -7
  290. package/dist/ui/components/surface-tokens.js +7 -0
  291. package/dist/ui/index.d.ts +6 -0
  292. package/dist/ui/index.js +3 -0
  293. package/dist/ui/rich-text/RichText.style.css +20 -20
  294. package/dist/utils/id-generators.d.ts +13 -0
  295. package/dist/utils/id-generators.js +17 -0
  296. package/package.json +1 -1
  297. package/scripts/seed-cli-loader.mjs +15 -0
  298. package/scripts/seed-cli.mjs +71 -17
@@ -0,0 +1,248 @@
1
+ /*
2
+ * WHY: Seeds the initial tester QA checklist catalog — DB-backed, admin-manageable (mirrors faq-seed-data.ts).
3
+ * WHAT: ~55 default test cases across 6 groups (Account & Auth, Buying, Selling, Content & Discovery,
4
+ * Community & Support, Design & UX). Admins add/edit further cases via /admin/tester-checklist —
5
+ * this array is a starting point, not the source of truth.
6
+ *
7
+ * EXPORTS:
8
+ * testerChecklistSeedData — Array of Partial<TesterChecklistItemDocument> for seed runner
9
+ *
10
+ * @tag domain:tester
11
+ * @tag layer:seed
12
+ * @tag pattern:none
13
+ * @tag access:server-only
14
+ * @tag consumers:seed/index.ts,seed/runner.ts
15
+ * @tag sideEffects:none
16
+ */
17
+ function group(groupKey, groupLabel, pages) {
18
+ const items = [];
19
+ pages.forEach((page, pageIdx) => {
20
+ page.cases.forEach((c, caseIdx) => {
21
+ items.push({
22
+ id: `checklist-${groupKey}-${page.pageKey}-${c.key}`,
23
+ groupKey,
24
+ groupLabel,
25
+ pageKey: page.pageKey,
26
+ pageLabel: page.pageLabel,
27
+ label: c.label,
28
+ description: c.description,
29
+ href: c.href,
30
+ order: pageIdx * 10 + caseIdx,
31
+ isActive: true,
32
+ });
33
+ });
34
+ });
35
+ return items;
36
+ }
37
+ export const testerChecklistSeedData = [
38
+ ...group("account-auth", "Account & Auth", [
39
+ {
40
+ pageKey: "signup-login",
41
+ pageLabel: "Signup & Login",
42
+ cases: [
43
+ { key: "email-signup", label: "Sign up with email works", href: "/register" },
44
+ { key: "google-oauth", label: "Sign up / log in with Google works", href: "/login" },
45
+ { key: "login", label: "Log in with email + password works", href: "/login" },
46
+ { key: "logout", label: "Log out works and clears the session" },
47
+ { key: "email-verify", label: "Email verification link works" },
48
+ { key: "password-reset", label: "Forgot-password / reset-password flow works" },
49
+ ],
50
+ },
51
+ {
52
+ pageKey: "profile-settings",
53
+ pageLabel: "Profile & Settings",
54
+ cases: [
55
+ { key: "edit-profile", label: "Editing display name / bio saves correctly", href: "/user/profile" },
56
+ { key: "avatar-upload", label: "Uploading a profile avatar works" },
57
+ { key: "notification-prefs", label: "Notification preferences save correctly" },
58
+ { key: "public-profile-toggle", label: "Public profile visibility toggle works" },
59
+ ],
60
+ },
61
+ ]),
62
+ ...group("buying", "Buying", [
63
+ {
64
+ pageKey: "browsing-search",
65
+ pageLabel: "Browsing & Search",
66
+ cases: [
67
+ { key: "browse-categories", label: "Browsing categories shows relevant products", href: "/categories" },
68
+ { key: "search", label: "Search returns relevant results", href: "/search" },
69
+ { key: "filters", label: "Search/listing filters (price, brand, condition) work correctly" },
70
+ { key: "pagination", label: "Pagination / infinite scroll works on listing pages" },
71
+ ],
72
+ },
73
+ {
74
+ pageKey: "product-detail",
75
+ pageLabel: "Product / Auction / Pre-order Detail",
76
+ cases: [
77
+ { key: "standard-detail", label: "Standard product detail page loads correctly" },
78
+ { key: "auction-detail", label: "Auction detail page shows current bid + countdown correctly" },
79
+ { key: "preorder-detail", label: "Pre-order detail page shows expected ship date correctly" },
80
+ { key: "image-gallery", label: "Product image gallery / zoom works" },
81
+ { key: "video-playback", label: "Product video (YouTube embed) plays correctly" },
82
+ ],
83
+ },
84
+ {
85
+ pageKey: "buying-checkout",
86
+ pageLabel: "Buying & Checkout",
87
+ cases: [
88
+ { key: "add-to-cart", label: "Add to cart works from the product page" },
89
+ { key: "checkout-flow", label: "Checkout flow completes without errors", href: "/cart" },
90
+ { key: "shipping-address", label: "Selecting/adding a shipping address works" },
91
+ { key: "payment-proof-upload", label: "Uploading manual payment proof (UTR + screenshot) works" },
92
+ { key: "order-confirmation", label: "Order confirmation page/email shows correct order details" },
93
+ ],
94
+ },
95
+ {
96
+ pageKey: "bidding",
97
+ pageLabel: "Bidding",
98
+ cases: [
99
+ { key: "place-bid", label: "Placing a bid on an auction works", href: "/user/bids" },
100
+ { key: "outbid-notification", label: "Getting outbid triggers a notification" },
101
+ { key: "win-auction", label: "Winning an auction creates a payable order correctly" },
102
+ { key: "bid-history", label: "My Bids page shows accurate bid history" },
103
+ ],
104
+ },
105
+ {
106
+ pageKey: "wishlist-history",
107
+ pageLabel: "Wishlist & History",
108
+ cases: [
109
+ { key: "add-wishlist", label: "Adding a product to the wishlist works", href: "/user/wishlist" },
110
+ { key: "remove-wishlist", label: "Removing a product from the wishlist works" },
111
+ { key: "view-history", label: "Recently viewed history shows accurate items", href: "/user/history" },
112
+ ],
113
+ },
114
+ {
115
+ pageKey: "cart",
116
+ pageLabel: "Cart",
117
+ cases: [
118
+ { key: "update-qty", label: "Updating item quantity in cart recalculates the total" },
119
+ { key: "apply-coupon", label: "Applying a coupon code at checkout works" },
120
+ { key: "remove-item", label: "Removing an item from the cart works" },
121
+ ],
122
+ },
123
+ {
124
+ pageKey: "reviews",
125
+ pageLabel: "Reviews",
126
+ cases: [
127
+ { key: "leave-review", label: "Leaving a review with rating + photo works" },
128
+ { key: "view-seller-reviews", label: "Viewing a seller's reviews on their store page works" },
129
+ { key: "seller-response", label: "Seller responding to a review works" },
130
+ ],
131
+ },
132
+ {
133
+ pageKey: "messaging",
134
+ pageLabel: "Messaging a Seller",
135
+ cases: [
136
+ { key: "start-conversation", label: "Starting a conversation with a seller works" },
137
+ { key: "receive-reply", label: "Receiving and reading a seller's reply works" },
138
+ ],
139
+ },
140
+ ]),
141
+ ...group("selling", "Selling", [
142
+ {
143
+ pageKey: "become-seller",
144
+ pageLabel: "Become a Seller & Store Setup",
145
+ cases: [
146
+ { key: "apply-seller", label: "Applying to become a seller works", href: "/user/become-seller" },
147
+ { key: "store-setup", label: "Setting up store name/description/logo works" },
148
+ { key: "store-address", label: "Adding a pickup address for the store works" },
149
+ ],
150
+ },
151
+ {
152
+ pageKey: "listing-a-product",
153
+ pageLabel: "Listing a Product",
154
+ cases: [
155
+ { key: "list-standard", label: "Listing a standard product works" },
156
+ { key: "list-auction", label: "Listing an auction works" },
157
+ { key: "list-preorder", label: "Listing a pre-order works" },
158
+ { key: "edit-listing", label: "Editing an existing listing works" },
159
+ { key: "media-upload", label: "Uploading product images/video during listing works" },
160
+ ],
161
+ },
162
+ {
163
+ pageKey: "seller-orders",
164
+ pageLabel: "Seller Order Management & Shipping/Tracking",
165
+ cases: [
166
+ { key: "view-orders", label: "Seller order list shows accurate incoming orders", href: "/store/orders" },
167
+ { key: "confirm-payment", label: "Confirming a buyer's manual payment proof works" },
168
+ { key: "mark-shipped", label: "Marking an order shipped with tracking info works" },
169
+ { key: "tracking-visible", label: "Buyer sees updated tracking status after seller ships" },
170
+ ],
171
+ },
172
+ {
173
+ pageKey: "seller-analytics-payouts",
174
+ pageLabel: "Seller Analytics & Payouts",
175
+ cases: [
176
+ { key: "view-analytics", label: "Seller analytics dashboard shows accurate sales data", href: "/store/analytics" },
177
+ { key: "view-payouts", label: "Seller payouts list shows accurate payout history", href: "/store/payouts" },
178
+ ],
179
+ },
180
+ ]),
181
+ ...group("content-discovery", "Content & Discovery", [
182
+ {
183
+ pageKey: "blog",
184
+ pageLabel: "Blog",
185
+ cases: [
186
+ { key: "read-post", label: "Reading a blog post renders correctly (images, formatting)" },
187
+ { key: "blog-listing", label: "Blog listing page shows all published posts" },
188
+ ],
189
+ },
190
+ {
191
+ pageKey: "events",
192
+ pageLabel: "Events, Raffles & Spin Wheel",
193
+ cases: [
194
+ { key: "view-event", label: "Viewing an event detail page works", href: "/user/events" },
195
+ { key: "raffle-entry", label: "Entering a raffle event works" },
196
+ { key: "spin-wheel", label: "Spinning the spin-wheel event works and shows the prize" },
197
+ ],
198
+ },
199
+ {
200
+ pageKey: "coupons",
201
+ pageLabel: "Coupons",
202
+ cases: [
203
+ { key: "view-claimed-coupons", label: "Claimed coupons list shows accurate coupons", href: "/user/coupons" },
204
+ { key: "coupon-discount-applied", label: "Coupon discount is correctly reflected in the order total" },
205
+ ],
206
+ },
207
+ {
208
+ pageKey: "notifications",
209
+ pageLabel: "Notifications",
210
+ cases: [
211
+ { key: "receive-notification", label: "In-app notifications appear for order/bid/message events", href: "/user/notifications" },
212
+ { key: "mark-read", label: "Marking a notification as read works" },
213
+ ],
214
+ },
215
+ ]),
216
+ ...group("community-support", "Community & Support", [
217
+ {
218
+ pageKey: "support-tickets",
219
+ pageLabel: "Support Tickets",
220
+ cases: [
221
+ { key: "create-ticket", label: "Creating a support ticket works", href: "/user/support" },
222
+ { key: "reply-ticket", label: "Replying to an open support ticket works" },
223
+ ],
224
+ },
225
+ {
226
+ pageKey: "public-profile",
227
+ pageLabel: "Public Profiles & Stores",
228
+ cases: [
229
+ { key: "view-seller-store", label: "Viewing a seller's public store page works" },
230
+ { key: "view-public-profile", label: "Viewing another user's public profile works" },
231
+ ],
232
+ },
233
+ ]),
234
+ ...group("design-ux", "Design & UX", [
235
+ {
236
+ pageKey: "general-design",
237
+ pageLabel: "Colors, Styles, Readability, Mobile",
238
+ cases: [
239
+ { key: "contrast-readability", label: "Text contrast/readability is good on product cards" },
240
+ { key: "mobile-nav", label: "Mobile navigation (bottom bar, menu) works and looks correct" },
241
+ { key: "dark-mode", label: "Dark mode renders correctly across pages" },
242
+ { key: "loading-states", label: "Loading/skeleton states look correct while data fetches" },
243
+ { key: "empty-states", label: "Empty states (no results, empty cart) look correct" },
244
+ { key: "error-states", label: "Error states (404, form validation) look correct" },
245
+ ],
246
+ },
247
+ ]),
248
+ ];
@@ -0,0 +1,4 @@
1
+ /** Shared 7-day TTL stamp for tester sandbox seed fixtures — recomputed fresh every seed run,
2
+ * so re-seeding naturally refreshes the expiry (matches TESTER_SANDBOX_TTL_DAYS). */
3
+ export declare const TESTER_SANDBOX_TTL_DAYS = 7;
4
+ export declare function testDataExpiresAt(): Date;
@@ -0,0 +1,6 @@
1
+ /** Shared 7-day TTL stamp for tester sandbox seed fixtures — recomputed fresh every seed run,
2
+ * so re-seeding naturally refreshes the expiry (matches TESTER_SANDBOX_TTL_DAYS). */
3
+ export const TESTER_SANDBOX_TTL_DAYS = 7;
4
+ export function testDataExpiresAt() {
5
+ return new Date(Date.now() + TESTER_SANDBOX_TTL_DAYS * 24 * 60 * 60 * 1000);
6
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @mohasinac/appkit/features/tester/server
3
+ *
4
+ * Server-only entry point for tester checklist + feedback API route handlers.
5
+ */
6
+ export * from "./actions";
7
+ export { TesterChecklistItemRepository, testerChecklistItemRepository, } from "./repository/tester-checklist-item.repository";
8
+ export { TesterChecklistResponseRepository, testerChecklistResponseRepository, } from "./repository/tester-checklist-response.repository";
9
+ export type { UpsertResponseInput, ChecklistItemCoverage, CoverageReport, } from "./repository/tester-checklist-response.repository";
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @mohasinac/appkit/features/tester/server
3
+ *
4
+ * Server-only entry point for tester checklist + feedback API route handlers.
5
+ */
6
+ export * from "./actions";
7
+ export { TesterChecklistItemRepository, testerChecklistItemRepository, } from "./repository/tester-checklist-item.repository";
8
+ export { TesterChecklistResponseRepository, testerChecklistResponseRepository, } from "./repository/tester-checklist-response.repository";
package/dist/index.d.ts CHANGED
@@ -92,6 +92,8 @@ export { IconBox } from "./ui/components/IconBox";
92
92
  export type { IconBoxProps, IconBoxRounded, IconBoxSize, IconBoxTone, } from "./ui/components/IconBox";
93
93
  export { StickyToolbar } from "./ui/components/StickyToolbar";
94
94
  export type { StickyToolbarOffset, StickyToolbarPadding, StickyToolbarProps, StickyToolbarTone, } from "./ui/components/StickyToolbar";
95
+ export { CollapsibleSection } from "./ui/components/CollapsibleSection";
96
+ export type { CollapsibleSectionProps } from "./ui/components/CollapsibleSection";
95
97
  export { Fieldset, Legend } from "./ui/components/Fieldset";
96
98
  export type { FieldsetPadding, FieldsetProps, FieldsetTone, LegendProps, } from "./ui/components/Fieldset";
97
99
  export { Details, Summary } from "./ui/components/Details";
@@ -557,6 +559,8 @@ export { emailVerificationTokenRepository } from "./repositories/index";
557
559
  export { eventEntryRepository } from "./repositories/index";
558
560
  export { eventRepository } from "./repositories/index";
559
561
  export { faqsRepository } from "./repositories/index";
562
+ export { testerChecklistItemRepository } from "./repositories/index";
563
+ export { testerChecklistResponseRepository } from "./repositories/index";
560
564
  export { homepageSectionsRepository } from "./repositories/index";
561
565
  export { jobsRepository, JobsRepository } from "./repositories/index";
562
566
  export { notificationRepository } from "./repositories/index";
@@ -568,6 +572,8 @@ export { shipmentsRepository, shipmentLotsRepository, shipmentItemsRepository }
568
572
  export { catalogueRepository } from "./repositories/index";
569
573
  export { savedPaymentMethodsRepository, SavedPaymentMethodsRepository } from "./repositories/index";
570
574
  export { productRepository } from "./repositories/index";
575
+ export { pageViewsRepository, PAGE_VIEW_ENTITY_TYPES } from "./repositories/index";
576
+ export type { PageViewDocument, PageViewEntityType } from "./repositories/index";
571
577
  export { reviewRepository } from "./repositories/index";
572
578
  export { sessionRepository } from "./repositories/index";
573
579
  export { siteSettingsRepository } from "./repositories/index";
@@ -623,6 +629,12 @@ export { claimedCouponsSeedData } from "./seed/index";
623
629
  export { eventEntriesSeedData } from "./seed/index";
624
630
  export { eventsSeedData } from "./seed/index";
625
631
  export { faqSeedData } from "./seed/index";
632
+ export { testerChecklistSeedData } from "./seed/index";
633
+ export { storesTesterSeedData } from "./seed/index";
634
+ export { categoriesTesterSeedData } from "./seed/index";
635
+ export { productsTesterSeedData } from "./seed/index";
636
+ export { blogTesterSeedData } from "./seed/index";
637
+ export { eventsTesterSeedData } from "./seed/index";
626
638
  export { formatSeedPrice } from "./seed/index";
627
639
  export { getSeedLocale } from "./seed/index";
628
640
  export { homepageSectionsSeedData } from "./seed/index";
@@ -706,7 +718,6 @@ export type { SeedFaqDocument } from "./seed/index";
706
718
  export type { SeedHomepageSectionDocument } from "./seed/index";
707
719
  export type { SeedLocaleData } from "./seed/index";
708
720
  export type { SeedNotificationDocument } from "./seed/index";
709
- export type { SeedOperationResult } from "./seed/index";
710
721
  export type { SeedPayoutDocument } from "./seed/index";
711
722
  export type { SeedResult } from "./seed/index";
712
723
  export type { SeedReviewDocument } from "./seed/index";
@@ -1106,6 +1117,13 @@ export { AdminDashboardView } from "./features/admin/index";
1106
1117
  export { AdminFaqsView } from "./features/admin/index";
1107
1118
  export { AdminFaqEditorView } from "./features/admin/index";
1108
1119
  export type { AdminFaqEditorViewProps } from "./features/admin/index";
1120
+ export { AdminTesterChecklistView } from "./features/admin/index";
1121
+ export type { AdminTesterChecklistViewProps } from "./features/admin/index";
1122
+ export { AdminTesterChecklistItemEditorView } from "./features/admin/index";
1123
+ export type { AdminTesterChecklistItemEditorViewProps } from "./features/admin/index";
1124
+ export { TesterHubView } from "./features/tester/index";
1125
+ export type { TesterHubViewProps } from "./features/tester/index";
1126
+ export { AdminTesterFeedbackView } from "./features/tester/index";
1109
1127
  export { AdminNavEditorView } from "./features/admin/index";
1110
1128
  export type { AdminNavEditorViewProps, NavItemData } from "./features/admin/index";
1111
1129
  export { AdminFeatureFlagsView } from "./features/admin/index";
@@ -1883,6 +1901,14 @@ export { FAQHelpfulButtons } from "./features/faq/index";
1883
1901
  export { FAQPageContent } from "./features/faq/index";
1884
1902
  export { FAQS_COLLECTION } from "./features/faq/index";
1885
1903
  export { FAQS_INDEXED_FIELDS } from "./features/faq/index";
1904
+ export { TESTER_CHECKLIST_ITEM_COLLECTION } from "./features/tester/index";
1905
+ export { TESTER_CHECKLIST_RESPONSE_COLLECTION } from "./features/tester/index";
1906
+ export { TESTER_CHECKLIST_ITEM_FIELDS } from "./features/tester/index";
1907
+ export { TESTER_CHECKLIST_RESPONSE_FIELDS } from "./features/tester/index";
1908
+ export type { TesterChecklistItemDocument } from "./features/tester/index";
1909
+ export type { TesterChecklistResponseDocument } from "./features/tester/index";
1910
+ export type { TesterAnswer } from "./features/tester/index";
1911
+ export type { TesterFeedbackStatus } from "./features/tester/index";
1886
1912
  export { FAQS_PUBLIC_FIELDS } from "./features/faq/index";
1887
1913
  export { FAQSortDropdown } from "./features/faq/index";
1888
1914
  export { FAQ_CATEGORY_LABELS } from "./features/faq/index";
@@ -3067,7 +3093,7 @@ export { Ol } from "./ui/index";
3067
3093
  export { LoginRequiredModal } from "./ui/components/LoginRequiredModal";
3068
3094
  export type { LoginRequiredModalProps } from "./ui/components/LoginRequiredModal";
3069
3095
  export { isAuthError } from "./utils/auth-error";
3070
- export { API_ENDPOINTS, API_ROUTES, LOGS_ENDPOINTS, AUTH_ENDPOINTS, ACCOUNT_ENDPOINTS, NOTIFICATIONS_ENDPOINTS, ADMIN_ENDPOINTS, CHAT_ENDPOINTS, AUCTION_ENDPOINTS, BID_ENDPOINTS, CART_ENDPOINTS, CATEGORY_ENDPOINTS, CHECKOUT_ENDPOINTS, PAYMENT_ENDPOINTS, COPILOT_ENDPOINTS, CORPORATE_ENDPOINTS, EVENT_ENDPOINTS, FAQ_ENDPOINTS, HOMEPAGE_ENDPOINTS, LOYALTY_ENDPOINTS, MEDIA_ENDPOINTS, ORDER_ENDPOINTS, PREORDER_ENDPOINTS, PRODUCT_ENDPOINTS, REVIEW_ENDPOINTS, SEARCH_ENDPOINTS, SELLER_ENDPOINTS, BLOG_ENDPOINTS, WISHLIST_ENDPOINTS, DEMO_ENDPOINTS, COLLECTION_CACHE_PATHS, resolveEndpoint, resolveEndpointFn, ROUTES, PUBLIC_ROUTES, PROTECTED_ROUTES, AUTH_ROUTES, WISHLIST_MAX, HISTORY_MAX, CART_MAX_ITEMS, WISHLIST_DOC_ID, HISTORY_DOC_ID, WISHLIST_COLLECTION, HISTORY_COLLECTION, } from "./constants/index";
3096
+ export { API_ENDPOINTS, API_ROUTES, LOGS_ENDPOINTS, AUTH_ENDPOINTS, ACCOUNT_ENDPOINTS, NOTIFICATIONS_ENDPOINTS, ADMIN_ENDPOINTS, CHAT_ENDPOINTS, AUCTION_ENDPOINTS, BID_ENDPOINTS, CART_ENDPOINTS, CATEGORY_ENDPOINTS, CHECKOUT_ENDPOINTS, PAYMENT_ENDPOINTS, COPILOT_ENDPOINTS, CORPORATE_ENDPOINTS, EVENT_ENDPOINTS, FAQ_ENDPOINTS, HOMEPAGE_ENDPOINTS, LOYALTY_ENDPOINTS, ANALYTICS_ENDPOINTS, MEDIA_ENDPOINTS, ORDER_ENDPOINTS, PREORDER_ENDPOINTS, PRODUCT_ENDPOINTS, REVIEW_ENDPOINTS, SEARCH_ENDPOINTS, SELLER_ENDPOINTS, BLOG_ENDPOINTS, WISHLIST_ENDPOINTS, COLLECTION_CACHE_PATHS, resolveEndpoint, resolveEndpointFn, ROUTES, PUBLIC_ROUTES, PROTECTED_ROUTES, AUTH_ROUTES, WISHLIST_MAX, HISTORY_MAX, CART_MAX_ITEMS, WISHLIST_DOC_ID, HISTORY_DOC_ID, WISHLIST_COLLECTION, HISTORY_COLLECTION, } from "./constants/index";
3071
3097
  export { WishlistFullError } from "./features/wishlist/server";
3072
3098
  export { useHistory, useHistoryMergeOnLogin, getGuestHistory, trackGuestHistory, removeGuestHistoryItem, clearGuestHistory, getGuestHistoryCount, type GuestHistoryItem, type GuestHistoryType, type UserHistoryItem, type HistoryProductType, type HistoryItemSnapshot, type TrackArgs as TrackHistoryArgs, } from "./features/history";
3073
3099
  export { historyRepository, UserHistoryRepository, trackHistoryView, getHistoryForUser, removeHistoryItem, clearHistory, mergeGuestHistory, } from "./features/history/server";
package/dist/index.js CHANGED
@@ -188,6 +188,9 @@ export { IconBox } from "./ui/components/IconBox";
188
188
  // Sources its offset from --header-height; consumer code never authors
189
189
  // the offset manually.
190
190
  export { StickyToolbar } from "./ui/components/StickyToolbar";
191
+ // CollapsibleSection — persisted, accordion-scoped collapse wrapper for
192
+ // dashboard sections. Pair with useCollapsedSections for the state.
193
+ export { CollapsibleSection } from "./ui/components/CollapsibleSection";
191
194
  // Fieldset + Legend — primitives for grouped form controls.
192
195
  export { Fieldset, Legend } from "./ui/components/Fieldset";
193
196
  // Details + Summary — primitives for native <details> disclosure widget.
@@ -1099,6 +1102,12 @@ export { eventRepository } from "./repositories/index";
1099
1102
  // [DB]-Database layer â€" uses firebase-admin or another server-side DB SDK; can only run in a trusted server environment.
1100
1103
  // faqsRepository - Shared export for faqs repository.
1101
1104
  export { faqsRepository } from "./repositories/index";
1105
+ // [DB]-Database layer — uses firebase-admin or another server-side DB SDK; can only run in a trusted server environment.
1106
+ // testerChecklistItemRepository - Shared export for the tester checklist catalog repository.
1107
+ export { testerChecklistItemRepository } from "./repositories/index";
1108
+ // [DB]-Database layer — uses firebase-admin or another server-side DB SDK; can only run in a trusted server environment.
1109
+ // testerChecklistResponseRepository - Shared export for the tester checklist response repository.
1110
+ export { testerChecklistResponseRepository } from "./repositories/index";
1102
1111
  // [DB]-Database layer â€" uses firebase-admin or another server-side DB SDK; can only run in a trusted server environment.
1103
1112
  // homepageSectionsRepository - Shared export for homepage sections repository.
1104
1113
  export { homepageSectionsRepository } from "./repositories/index";
@@ -1129,6 +1138,9 @@ export { savedPaymentMethodsRepository, SavedPaymentMethodsRepository } from "./
1129
1138
  // productRepository - Shared export for product repository.
1130
1139
  export { productRepository } from "./repositories/index";
1131
1140
  // [DB]-Database layer â€" uses firebase-admin or another server-side DB SDK; can only run in a trusted server environment.
1141
+ // pageViewsRepository - day-bucketed page-view counters by entity + URL.
1142
+ export { pageViewsRepository, PAGE_VIEW_ENTITY_TYPES } from "./repositories/index";
1143
+ // [DB]-Database layer â€" uses firebase-admin or another server-side DB SDK; can only run in a trusted server environment.
1132
1144
  // reviewRepository - Shared export for review repository.
1133
1145
  export { reviewRepository } from "./repositories/index";
1134
1146
  // [DB]-Database layer â€" uses firebase-admin or another server-side DB SDK; can only run in a trusted server environment.
@@ -1266,6 +1278,24 @@ export { eventsSeedData } from "./seed/index";
1266
1278
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
1267
1279
  // faqSeedData - Model for faq seed data.
1268
1280
  export { faqSeedData } from "./seed/index";
1281
+ // [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
1282
+ // testerChecklistSeedData - Model for tester checklist seed data.
1283
+ export { testerChecklistSeedData } from "./seed/index";
1284
+ // [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
1285
+ // storesTesterSeedData - Model for the shared tester sandbox store seed data.
1286
+ export { storesTesterSeedData } from "./seed/index";
1287
+ // [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
1288
+ // categoriesTesterSeedData - Model for the shared tester sandbox category/brand/bundle seed data.
1289
+ export { categoriesTesterSeedData } from "./seed/index";
1290
+ // [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
1291
+ // productsTesterSeedData - Model for the shared tester sandbox product seed data.
1292
+ export { productsTesterSeedData } from "./seed/index";
1293
+ // [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
1294
+ // blogTesterSeedData - Model for the shared tester sandbox blog post seed data.
1295
+ export { blogTesterSeedData } from "./seed/index";
1296
+ // [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
1297
+ // eventsTesterSeedData - Model for the shared tester sandbox event seed data.
1298
+ export { eventsTesterSeedData } from "./seed/index";
1269
1299
  // [SERVER-ONLY]-Server-only â€" uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
1270
1300
  // formatSeedPrice - Helper for format seed price.
1271
1301
  export { formatSeedPrice } from "./seed/index";
@@ -2156,6 +2186,14 @@ export { AdminDashboardView } from "./features/admin/index";
2156
2186
  export { AdminFaqsView } from "./features/admin/index";
2157
2187
  // AdminFaqEditorView - Component for admin FAQ create/edit form.
2158
2188
  export { AdminFaqEditorView } from "./features/admin/index";
2189
+ // AdminTesterChecklistView - Component for the admin tester-checklist catalog list.
2190
+ export { AdminTesterChecklistView } from "./features/admin/index";
2191
+ // AdminTesterChecklistItemEditorView - Component for admin tester-checklist item create/edit form.
2192
+ export { AdminTesterChecklistItemEditorView } from "./features/admin/index";
2193
+ // TesterHubView - Component for the tester-facing checklist hub page.
2194
+ export { TesterHubView } from "./features/tester/index";
2195
+ // AdminTesterFeedbackView - Component for the admin Tester Feedback report/issues/submissions page.
2196
+ export { AdminTesterFeedbackView } from "./features/tester/index";
2159
2197
  // AdminNavEditorView - SideDrawer form for nav item create/edit.
2160
2198
  export { AdminNavEditorView } from "./features/admin/index";
2161
2199
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
@@ -3586,6 +3624,18 @@ export { FAQS_COLLECTION } from "./features/faq/index";
3586
3624
  // [SCHEMA]-Schema / data-shape constant â€" Zod validator, default-value object, or Firestore collection/field name constant.
3587
3625
  // FAQS_INDEXED_FIELDS - Constant used across modules.
3588
3626
  export { FAQS_INDEXED_FIELDS } from "./features/faq/index";
3627
+ // [SCHEMA]-Schema / data-shape constant — Zod validator, default-value object, or Firestore collection/field name constant.
3628
+ // TESTER_CHECKLIST_ITEM_COLLECTION - Constant used across modules.
3629
+ export { TESTER_CHECKLIST_ITEM_COLLECTION } from "./features/tester/index";
3630
+ // [SCHEMA]-Schema / data-shape constant — Zod validator, default-value object, or Firestore collection/field name constant.
3631
+ // TESTER_CHECKLIST_RESPONSE_COLLECTION - Constant used across modules.
3632
+ export { TESTER_CHECKLIST_RESPONSE_COLLECTION } from "./features/tester/index";
3633
+ // [SCHEMA]-Schema / data-shape constant — Zod validator, default-value object, or Firestore collection/field name constant.
3634
+ // TESTER_CHECKLIST_ITEM_FIELDS - Constant used across modules.
3635
+ export { TESTER_CHECKLIST_ITEM_FIELDS } from "./features/tester/index";
3636
+ // [SCHEMA]-Schema / data-shape constant — Zod validator, default-value object, or Firestore collection/field name constant.
3637
+ // TESTER_CHECKLIST_RESPONSE_FIELDS - Constant used across modules.
3638
+ export { TESTER_CHECKLIST_RESPONSE_FIELDS } from "./features/tester/index";
3589
3639
  // [SCHEMA]-Schema / data-shape constant â€" Zod validator, default-value object, or Firestore collection/field name constant.
3590
3640
  // FAQS_PUBLIC_FIELDS - Constant used across modules.
3591
3641
  export { FAQS_PUBLIC_FIELDS } from "./features/faq/index";
@@ -5506,7 +5556,7 @@ export { Ol } from "./ui/index";
5506
5556
  export { LoginRequiredModal } from "./ui/components/LoginRequiredModal";
5507
5557
  export { isAuthError } from "./utils/auth-error";
5508
5558
  // -- Missing constants ----------------------------------------------------------
5509
- export { API_ENDPOINTS, API_ROUTES, LOGS_ENDPOINTS, AUTH_ENDPOINTS, ACCOUNT_ENDPOINTS, NOTIFICATIONS_ENDPOINTS, ADMIN_ENDPOINTS, CHAT_ENDPOINTS, AUCTION_ENDPOINTS, BID_ENDPOINTS, CART_ENDPOINTS, CATEGORY_ENDPOINTS, CHECKOUT_ENDPOINTS, PAYMENT_ENDPOINTS, COPILOT_ENDPOINTS, CORPORATE_ENDPOINTS, EVENT_ENDPOINTS, FAQ_ENDPOINTS, HOMEPAGE_ENDPOINTS, LOYALTY_ENDPOINTS, MEDIA_ENDPOINTS, ORDER_ENDPOINTS, PREORDER_ENDPOINTS, PRODUCT_ENDPOINTS, REVIEW_ENDPOINTS, SEARCH_ENDPOINTS, SELLER_ENDPOINTS, BLOG_ENDPOINTS, WISHLIST_ENDPOINTS, DEMO_ENDPOINTS, COLLECTION_CACHE_PATHS, resolveEndpoint, resolveEndpointFn, ROUTES, PUBLIC_ROUTES, PROTECTED_ROUTES, AUTH_ROUTES, WISHLIST_MAX, HISTORY_MAX, CART_MAX_ITEMS, WISHLIST_DOC_ID, HISTORY_DOC_ID, WISHLIST_COLLECTION, HISTORY_COLLECTION, } from "./constants/index";
5559
+ export { API_ENDPOINTS, API_ROUTES, LOGS_ENDPOINTS, AUTH_ENDPOINTS, ACCOUNT_ENDPOINTS, NOTIFICATIONS_ENDPOINTS, ADMIN_ENDPOINTS, CHAT_ENDPOINTS, AUCTION_ENDPOINTS, BID_ENDPOINTS, CART_ENDPOINTS, CATEGORY_ENDPOINTS, CHECKOUT_ENDPOINTS, PAYMENT_ENDPOINTS, COPILOT_ENDPOINTS, CORPORATE_ENDPOINTS, EVENT_ENDPOINTS, FAQ_ENDPOINTS, HOMEPAGE_ENDPOINTS, LOYALTY_ENDPOINTS, ANALYTICS_ENDPOINTS, MEDIA_ENDPOINTS, ORDER_ENDPOINTS, PREORDER_ENDPOINTS, PRODUCT_ENDPOINTS, REVIEW_ENDPOINTS, SEARCH_ENDPOINTS, SELLER_ENDPOINTS, BLOG_ENDPOINTS, WISHLIST_ENDPOINTS, COLLECTION_CACHE_PATHS, resolveEndpoint, resolveEndpointFn, ROUTES, PUBLIC_ROUTES, PROTECTED_ROUTES, AUTH_ROUTES, WISHLIST_MAX, HISTORY_MAX, CART_MAX_ITEMS, WISHLIST_DOC_ID, HISTORY_DOC_ID, WISHLIST_COLLECTION, HISTORY_COLLECTION, } from "./constants/index";
5510
5560
  // Wishlist server errors (server-only via tree-shake â€" class only, no firebase-admin at module scope)
5511
5561
  export { WishlistFullError } from "./features/wishlist/server";
5512
5562
  // History â€" client hook + guest util are safe in main barrel; repository is server-only
@@ -18,7 +18,11 @@ export function errorResponse(error, status = 400, details) {
18
18
  success: false,
19
19
  error,
20
20
  ...(details !== undefined && { details }),
21
- }, { status });
21
+ },
22
+ // `no-store` — without this, Vercel's edge CDN can cache a transient
23
+ // error response (cold-start 500, not-yet-synced 404) on a public GET
24
+ // route indefinitely. Same root cause as the /media 404-caching bug.
25
+ { status, headers: { "Cache-Control": "no-store" } });
22
26
  }
23
27
  /** Pre-built shorthand factories for common HTTP error responses. */
24
28
  export const ApiErrors = {
@@ -127,7 +127,16 @@ function errorJson(status, code, message, requestId, issues) {
127
127
  error: message,
128
128
  ...(issues ? { issues } : {}),
129
129
  requestId,
130
- }, { status, headers: { "X-Request-Id": requestId } });
130
+ }, {
131
+ status,
132
+ // `no-store` on every error envelope — without this, Vercel's edge CDN
133
+ // can cache a transient failure (cold-start 500, not-yet-synced 404)
134
+ // on a public GET route indefinitely, since nothing here ever told it
135
+ // otherwise. Same root cause as the /media 404-caching bug, but this
136
+ // chokepoint is shared by every createRouteHandler-based route, so one
137
+ // fix here closes the gap site-wide instead of route-by-route.
138
+ headers: { "X-Request-Id": requestId, "Cache-Control": "no-store" },
139
+ });
131
140
  }
132
141
  export function createRouteHandler(options) {
133
142
  if (options.bodyOptional && options.bodyRequired) {
@@ -74,7 +74,7 @@ export function createApiMiddleware(config = {}) {
74
74
  catch (err) {
75
75
  void normalizeError(err);
76
76
  const message = err instanceof Error ? err.message : "Internal server error";
77
- return NextResponse.json({ error: message }, { status: 500 });
77
+ return NextResponse.json({ error: message }, { status: 500, headers: { "Cache-Control": "no-store" } });
78
78
  }
79
79
  });
80
80
  };
@@ -8,7 +8,6 @@ export interface RouteMap {
8
8
  /** Store management dashboard (requires seller role). Replaces the old SELLER section. */
9
9
  STORE: Record<string, RoutePath>;
10
10
  ADMIN: Record<string, RoutePath>;
11
- DEMO: Record<string, RoutePath>;
12
11
  BLOG: Record<string, RoutePath>;
13
12
  }
14
13
  export declare const DEFAULT_ROUTE_MAP: {
@@ -151,6 +150,7 @@ export declare const DEFAULT_ROUTE_MAP: {
151
150
  readonly CATALOGUE: "/user/catalogue";
152
151
  readonly CATALOGUE_NEW: "/user/catalogue/new";
153
152
  readonly CATALOGUE_EDIT: (id: string) => string;
153
+ readonly TESTER_HUB: "/user/tester";
154
154
  };
155
155
  readonly STORE: {
156
156
  readonly DASHBOARD: "/store";
@@ -266,6 +266,8 @@ export declare const DEFAULT_ROUTE_MAP: {
266
266
  readonly FAQS: "/admin/faqs";
267
267
  readonly FAQS_NEW: "/admin/faqs/new";
268
268
  readonly FAQS_EDIT: (id: string) => string;
269
+ readonly TESTER_CHECKLIST: "/admin/tester-checklist";
270
+ readonly TESTER_FEEDBACK: "/admin/tester-feedback";
269
271
  readonly REVIEWS: "/admin/reviews";
270
272
  readonly COUPONS: "/admin/coupons";
271
273
  readonly COUPONS_NEW: "/admin/coupons/new";
@@ -362,9 +364,6 @@ export declare const DEFAULT_ROUTE_MAP: {
362
364
  readonly PAYMENT_METHODS: "/admin/payment-methods";
363
365
  readonly PAYMENT_METHODS_CLUSTERS: "/admin/payment-methods/clusters";
364
366
  };
365
- readonly DEMO: {
366
- readonly SEED: "/demo/seed";
367
- };
368
367
  readonly BLOG: {
369
368
  readonly LIST: "/blog";
370
369
  readonly ARTICLE: (slug: string) => string;
@@ -511,6 +510,7 @@ export declare const ROUTES: {
511
510
  readonly CATALOGUE: "/user/catalogue";
512
511
  readonly CATALOGUE_NEW: "/user/catalogue/new";
513
512
  readonly CATALOGUE_EDIT: (id: string) => string;
513
+ readonly TESTER_HUB: "/user/tester";
514
514
  };
515
515
  readonly STORE: {
516
516
  readonly DASHBOARD: "/store";
@@ -626,6 +626,8 @@ export declare const ROUTES: {
626
626
  readonly FAQS: "/admin/faqs";
627
627
  readonly FAQS_NEW: "/admin/faqs/new";
628
628
  readonly FAQS_EDIT: (id: string) => string;
629
+ readonly TESTER_CHECKLIST: "/admin/tester-checklist";
630
+ readonly TESTER_FEEDBACK: "/admin/tester-feedback";
629
631
  readonly REVIEWS: "/admin/reviews";
630
632
  readonly COUPONS: "/admin/coupons";
631
633
  readonly COUPONS_NEW: "/admin/coupons/new";
@@ -722,9 +724,6 @@ export declare const ROUTES: {
722
724
  readonly PAYMENT_METHODS: "/admin/payment-methods";
723
725
  readonly PAYMENT_METHODS_CLUSTERS: "/admin/payment-methods/clusters";
724
726
  };
725
- readonly DEMO: {
726
- readonly SEED: "/demo/seed";
727
- };
728
727
  readonly BLOG: {
729
728
  readonly LIST: "/blog";
730
729
  readonly ARTICLE: (slug: string) => string;
@@ -139,6 +139,7 @@ export const DEFAULT_ROUTE_MAP = {
139
139
  CATALOGUE: "/user/catalogue",
140
140
  CATALOGUE_NEW: "/user/catalogue/new",
141
141
  CATALOGUE_EDIT: (id) => `/user/catalogue/${id}/edit`,
142
+ TESTER_HUB: "/user/tester",
142
143
  },
143
144
  STORE: {
144
145
  DASHBOARD: "/store",
@@ -259,6 +260,8 @@ export const DEFAULT_ROUTE_MAP = {
259
260
  FAQS: "/admin/faqs",
260
261
  FAQS_NEW: "/admin/faqs/new",
261
262
  FAQS_EDIT: (id) => `/admin/faqs/${id}/edit`,
263
+ TESTER_CHECKLIST: "/admin/tester-checklist",
264
+ TESTER_FEEDBACK: "/admin/tester-feedback",
262
265
  REVIEWS: "/admin/reviews",
263
266
  COUPONS: "/admin/coupons",
264
267
  COUPONS_NEW: "/admin/coupons/new",
@@ -360,9 +363,6 @@ export const DEFAULT_ROUTE_MAP = {
360
363
  PAYMENT_METHODS: "/admin/payment-methods",
361
364
  PAYMENT_METHODS_CLUSTERS: "/admin/payment-methods/clusters",
362
365
  },
363
- DEMO: {
364
- SEED: "/demo/seed",
365
- },
366
366
  BLOG: {
367
367
  LIST: "/blog",
368
368
  ARTICLE: (slug) => `/blog/${slug}`,
@@ -396,10 +396,6 @@ export function createRouteMap(overrides = {}) {
396
396
  ...DEFAULT_ROUTE_MAP.ADMIN,
397
397
  ...(overrides.ADMIN ?? {}),
398
398
  },
399
- DEMO: {
400
- ...DEFAULT_ROUTE_MAP.DEMO,
401
- ...(overrides.DEMO ?? {}),
402
- },
403
399
  BLOG: {
404
400
  ...DEFAULT_ROUTE_MAP.BLOG,
405
401
  ...(overrides.BLOG ?? {}),
@@ -9,8 +9,8 @@
9
9
  * that go through `getProviders().payment` get a real implementation
10
10
  * instead of `undefined`.
11
11
  *
12
- * In-memory bookkeeping only (like `MockRazorpayProvider`) — there is no
13
- * external system of record. The order document itself (`paymentStatus`,
12
+ * In-memory bookkeeping only — there is no external system of record.
13
+ * The order document itself (`paymentStatus`,
14
14
  * `paymentTransactionId`, `paymentProofUrl`) is the actual source of truth;
15
15
  * this provider is a thin, self-consistent adapter for code that talks to
16
16
  * `IPaymentProvider` generically rather than the order repository directly.
@@ -9,8 +9,8 @@
9
9
  * that go through `getProviders().payment` get a real implementation
10
10
  * instead of `undefined`.
11
11
  *
12
- * In-memory bookkeeping only (like `MockRazorpayProvider`) — there is no
13
- * external system of record. The order document itself (`paymentStatus`,
12
+ * In-memory bookkeeping only — there is no external system of record.
13
+ * The order document itself (`paymentStatus`,
14
14
  * `paymentTransactionId`, `paymentProofUrl`) is the actual source of truth;
15
15
  * this provider is a thin, self-consistent adapter for code that talks to
16
16
  * `IPaymentProvider` generically rather than the order repository directly.