@mohasinac/appkit 3.6.5 → 3.7.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.
- package/dist/_internal/client/features/layout/DashboardLayoutClient.d.ts +17 -3
- package/dist/_internal/client/features/layout/DashboardLayoutClient.js +7 -2
- package/dist/_internal/client/features/tour/TourProvider.d.ts +5 -2
- package/dist/_internal/client/features/tour/TourProvider.js +125 -12
- package/dist/_internal/client/theme/ThemeProvider.js +1 -1
- package/dist/_internal/server/features/faqs/og.js +5 -1
- package/dist/_internal/server/features/reviews/og.js +5 -1
- package/dist/_internal/server/features/seo/manifest.js +2 -1
- package/dist/_internal/server/features/seo/og.js +7 -1
- package/dist/_internal/server/features/tester/visibility.d.ts +13 -0
- package/dist/_internal/server/features/tester/visibility.js +28 -0
- package/dist/_internal/server/functions/scheduled.d.ts +2 -1
- package/dist/_internal/server/functions/scheduled.js +9 -1
- package/dist/_internal/server/jobs/core/jobRunners.js +5 -0
- package/dist/_internal/server/jobs/core/resetOtpVerification.d.ts +17 -0
- package/dist/_internal/server/jobs/core/resetOtpVerification.js +88 -0
- package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +6 -0
- package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +35 -0
- package/dist/_internal/server/jobs/handlers/_helpers.d.ts +6 -0
- package/dist/_internal/server/jobs/handlers/_helpers.js +12 -0
- package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
- package/dist/_internal/server/jobs/handlers/index.js +2 -0
- package/dist/_internal/server/jobs/handlers/messages.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/messages.js +2 -0
- package/dist/_internal/server/jobs/handlers/testerSandboxCleanup.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/testerSandboxCleanup.js +2 -0
- package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
- package/dist/_internal/shared/actions/action-registry.js +48 -0
- package/dist/_internal/shared/tokens/index.d.ts +12 -12
- package/dist/client.d.ts +15 -3
- package/dist/client.js +10 -2
- package/dist/constants/api-endpoints.d.ts +36 -12
- package/dist/constants/api-endpoints.js +16 -8
- package/dist/constants/field-names.d.ts +9 -0
- package/dist/constants/field-names.js +12 -0
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.js +1 -1
- package/dist/features/account/components/LinkedAccountsSection.d.ts +11 -0
- package/dist/features/account/components/LinkedAccountsSection.js +11 -0
- package/dist/features/account/components/UserSidebar.d.ts +3 -1
- package/dist/features/account/components/UserSidebar.js +9 -13
- package/dist/features/account/hooks/useCollapsedSections.d.ts +20 -0
- package/dist/features/account/hooks/useCollapsedSections.js +63 -0
- package/dist/features/account/hooks/useProfile.d.ts +8 -0
- package/dist/features/account/index.d.ts +1 -0
- package/dist/features/account/index.js +1 -0
- package/dist/features/admin/components/AdminAddressEditorView.js +2 -2
- package/dist/features/admin/components/AdminCarouselView.js +2 -2
- package/dist/features/admin/components/AdminCategoryEditorView.js +2 -2
- package/dist/features/admin/components/AdminProductEditorView.js +5 -2
- package/dist/features/admin/components/AdminSectionsView.js +3 -18
- package/dist/features/admin/components/AdminSidebar.js +8 -6
- package/dist/features/admin/components/AdminSiteSettingsView.js +133 -127
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.d.ts +9 -0
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +129 -0
- package/dist/features/admin/components/AdminTesterChecklistView.d.ts +6 -0
- package/dist/features/admin/components/AdminTesterChecklistView.js +93 -0
- package/dist/features/admin/components/AdminUserEditorView.d.ts +3 -1
- package/dist/features/admin/components/AdminUserEditorView.js +7 -1
- package/dist/features/admin/components/AdminUsersView.js +1 -1
- package/dist/features/admin/components/DataListingView.js +2 -2
- package/dist/features/admin/components/analytics/AdminPageViewsReportView.d.ts +8 -0
- package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +41 -0
- package/dist/features/admin/components/index.d.ts +6 -0
- package/dist/features/admin/components/index.js +3 -0
- package/dist/features/admin/schemas/firestore.d.ts +0 -7
- package/dist/features/admin/schemas/firestore.js +6 -6
- package/dist/features/analytics/components/PageViewTracker.d.ts +12 -0
- package/dist/features/analytics/components/PageViewTracker.js +22 -0
- package/dist/features/analytics/repository/page-views.repository.d.ts +32 -0
- package/dist/features/analytics/repository/page-views.repository.js +43 -0
- package/dist/features/analytics/types.d.ts +6 -0
- package/dist/features/analytics/types.js +13 -0
- package/dist/features/auth/components/SocialAuthButtons.js +1 -1
- package/dist/features/auth/hooks/useAuth.d.ts +12 -0
- package/dist/features/auth/hooks/useAuth.js +109 -0
- package/dist/features/auth/permissions/constants.d.ts +1 -1
- package/dist/features/auth/schemas/firestore.d.ts +17 -1
- package/dist/features/auth/schemas/firestore.js +2 -0
- package/dist/features/blog/components/BlogIndexListing.js +2 -2
- package/dist/features/blog/schemas/firestore.d.ts +4 -0
- package/dist/features/cart/actions/cart-actions.js +20 -2
- package/dist/features/categories/components/CategoriesIndexListing.js +2 -2
- package/dist/features/categories/components/CategoryBundlesListing.js +2 -2
- package/dist/features/categories/components/CategoryDetailPageView.js +3 -1
- package/dist/features/categories/components/CategoryProductsListing.js +2 -2
- package/dist/features/categories/schemas/firestore.d.ts +4 -0
- package/dist/features/classified/components/ClassifiedIndexListing.js +2 -2
- package/dist/features/digital-codes/components/DigitalCodesIndexListing.js +2 -2
- package/dist/features/email/primitives.d.ts +2 -2
- package/dist/features/email/primitives.js +2 -2
- package/dist/features/events/components/EventsIndexListing.js +2 -2
- package/dist/features/events/schemas/firestore.d.ts +4 -0
- package/dist/features/layout/BackToTop.d.ts +6 -1
- package/dist/features/layout/BackToTop.js +31 -6
- package/dist/features/live/components/LiveItemsIndexListing.js +2 -2
- package/dist/features/media/MediaVideo.js +5 -1
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +2 -2
- package/dist/features/products/components/AuctionsIndexListing.js +2 -2
- package/dist/features/products/components/PrizeDrawsIndexListing.js +2 -2
- package/dist/features/products/components/ProductsIndexListing.js +2 -2
- package/dist/features/products/constants/action-defs.d.ts +2 -0
- package/dist/features/products/constants/action-defs.js +2 -0
- package/dist/features/products/schemas/firestore.d.ts +4 -0
- package/dist/features/promotions/components/CouponsIndexListing.js +2 -2
- package/dist/features/reviews/components/ReviewsIndexListing.js +2 -2
- package/dist/features/seller/actions/seller-actions.js +11 -6
- package/dist/features/seller/components/SellerAddressesView.js +2 -2
- package/dist/features/seller/components/SellerBidsView.js +2 -2
- package/dist/features/seller/components/SellerOrdersView.js +2 -2
- package/dist/features/seller/components/SellerProductsView.js +2 -2
- package/dist/features/seller/components/SellerSidebar.d.ts +3 -1
- package/dist/features/seller/components/SellerSidebar.js +9 -8
- package/dist/features/seller/components/SellerStoreCategoriesView.js +2 -2
- package/dist/features/seller/components/SellerTemplatesView.js +2 -2
- package/dist/features/shell/StepForm.js +4 -4
- package/dist/features/stores/actions/store-query-actions.d.ts +5 -4
- package/dist/features/stores/actions/store-query-actions.js +11 -8
- package/dist/features/stores/components/StoreAuctionsListing.js +2 -2
- package/dist/features/stores/components/StoreClassifiedsListing.js +2 -2
- package/dist/features/stores/components/StoreDigitalCodesListing.js +2 -2
- package/dist/features/stores/components/StoreLiveItemsListing.js +2 -2
- package/dist/features/stores/components/StorePreOrdersListing.js +2 -2
- package/dist/features/stores/components/StoreProductsListing.js +2 -2
- package/dist/features/stores/components/StoreReviewsListing.js +2 -2
- package/dist/features/stores/components/StoresIndexListing.js +2 -2
- package/dist/features/stores/schemas/firestore.d.ts +4 -0
- package/dist/features/tester/actions/checklist-item-actions.d.ts +69 -0
- package/dist/features/tester/actions/checklist-item-actions.js +42 -0
- package/dist/features/tester/actions/index.d.ts +1 -0
- package/dist/features/tester/actions/index.js +1 -0
- package/dist/features/tester/components/AdminTesterFeedbackIssuesView.d.ts +2 -0
- package/dist/features/tester/components/AdminTesterFeedbackIssuesView.js +22 -0
- package/dist/features/tester/components/AdminTesterFeedbackListView.d.ts +3 -0
- package/dist/features/tester/components/AdminTesterFeedbackListView.js +100 -0
- package/dist/features/tester/components/AdminTesterFeedbackReportView.d.ts +2 -0
- package/dist/features/tester/components/AdminTesterFeedbackReportView.js +30 -0
- package/dist/features/tester/components/AdminTesterFeedbackView.d.ts +2 -0
- package/dist/features/tester/components/AdminTesterFeedbackView.js +9 -0
- package/dist/features/tester/components/TesterChecklistStepRow.d.ts +18 -0
- package/dist/features/tester/components/TesterChecklistStepRow.js +29 -0
- package/dist/features/tester/components/TesterFeedbackChart.d.ts +14 -0
- package/dist/features/tester/components/TesterFeedbackChart.js +18 -0
- package/dist/features/tester/components/TesterHubView.d.ts +5 -0
- package/dist/features/tester/components/TesterHubView.js +71 -0
- package/dist/features/tester/components/index.d.ts +11 -0
- package/dist/features/tester/components/index.js +7 -0
- package/dist/features/tester/index.d.ts +2 -0
- package/dist/features/tester/index.js +2 -0
- package/dist/features/tester/repository/index.d.ts +2 -0
- package/dist/features/tester/repository/index.js +2 -0
- package/dist/features/tester/repository/tester-checklist-item.repository.d.ts +13 -0
- package/dist/features/tester/repository/tester-checklist-item.repository.js +55 -0
- package/dist/features/tester/repository/tester-checklist-response.repository.d.ts +42 -0
- package/dist/features/tester/repository/tester-checklist-response.repository.js +98 -0
- package/dist/features/tester/schemas/firestore.d.ts +85 -0
- package/dist/features/tester/schemas/firestore.js +93 -0
- package/dist/features/tester/schemas/index.d.ts +1 -0
- package/dist/features/tester/schemas/index.js +1 -0
- package/dist/features/tester/seed-data/blog-tester-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/blog-tester-seed-data.js +40 -0
- package/dist/features/tester/seed-data/categories-tester-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/categories-tester-seed-data.js +177 -0
- package/dist/features/tester/seed-data/events-tester-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/events-tester-seed-data.js +50 -0
- package/dist/features/tester/seed-data/index.d.ts +6 -0
- package/dist/features/tester/seed-data/index.js +6 -0
- package/dist/features/tester/seed-data/products-tester-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/products-tester-seed-data.js +151 -0
- package/dist/features/tester/seed-data/stores-tester-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/stores-tester-seed-data.js +40 -0
- package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +248 -0
- package/dist/features/tester/seed-data/tester-ttl.d.ts +4 -0
- package/dist/features/tester/seed-data/tester-ttl.js +6 -0
- package/dist/features/tester/server.d.ts +9 -0
- package/dist/features/tester/server.js +8 -0
- package/dist/index.d.ts +28 -2
- package/dist/index.js +51 -1
- package/dist/next/api/api-response.js +5 -1
- package/dist/next/api/routeHandler.js +10 -1
- package/dist/next/middleware/chain.js +1 -1
- package/dist/next/routing/route-map.d.ts +6 -7
- package/dist/next/routing/route-map.js +3 -7
- package/dist/providers/payment-manual/index.d.ts +2 -2
- package/dist/providers/payment-manual/index.js +2 -2
- package/dist/react/contexts/SessionContext.d.ts +4 -0
- package/dist/react/contexts/SessionContext.js +4 -0
- package/dist/repositories/index.d.ts +4 -0
- package/dist/repositories/index.js +3 -0
- package/dist/security/pii-encrypt.js +12 -2
- package/dist/seed/addresses-seed-data.js +1 -1
- package/dist/seed/bids-seed-data.js +1 -1
- package/dist/seed/blog-posts-seed-data.js +1 -1
- package/dist/seed/carousel-slides-seed-data.js +22 -16
- package/dist/seed/carousels-seed-data.js +1 -1
- package/dist/seed/cart-seed-data.js +1 -1
- package/dist/seed/categories-seed-data.js +1 -1
- package/dist/seed/claimed-coupons-seed-data.js +1 -1
- package/dist/seed/conversations-seed-data.js +1 -1
- package/dist/seed/coupon-usage-seed-data.js +1 -1
- package/dist/seed/coupons-seed-data.js +1 -1
- package/dist/seed/events-seed-data.js +1 -1
- package/dist/seed/faq-seed-data.js +119 -3
- package/dist/seed/grouped-listings-seed-data.d.ts +2 -0
- package/dist/seed/grouped-listings-seed-data.js +1 -1
- package/dist/seed/history-seed-data.js +1 -1
- package/dist/seed/homepage-sections-seed-data.js +1 -1
- package/dist/seed/index.d.ts +2 -2
- package/dist/seed/index.js +7 -3
- package/dist/seed/lottery-entries-seed-data.js +1 -1
- package/dist/seed/manifest.d.ts +4 -3
- package/dist/seed/manifest.js +13 -6
- package/dist/seed/notifications-seed-data.js +1 -1
- package/dist/seed/offers-seed-data.js +1 -1
- package/dist/seed/orders-seed-data.js +1 -1
- package/dist/seed/payouts-seed-data.js +1 -1
- package/dist/seed/products-art-seed-data.js +1 -1
- package/dist/seed/products-auctions-seed-data.js +1 -1
- package/dist/seed/products-classifieds-seed-data.js +1 -1
- package/dist/seed/products-digital-codes-seed-data.js +1 -1
- package/dist/seed/products-live-items-seed-data.js +1 -1
- package/dist/seed/products-preorders-seed-data.d.ts +2 -0
- package/dist/seed/products-preorders-seed-data.js +1 -1
- package/dist/seed/products-prize-draws-seed-data.js +1 -1
- package/dist/seed/products-standard-seed-data.js +1 -1
- package/dist/seed/products-stickers-seed-data.js +1 -1
- package/dist/seed/reviews-seed-data.js +1 -1
- package/dist/seed/scammers-seed-data.js +1 -1
- package/dist/seed/sessions-seed-data.js +1 -1
- package/dist/seed/site-settings-seed-data.js +22 -16
- package/dist/seed/store-addresses-seed-data.js +1 -1
- package/dist/seed/store-extensions-seed-data.js +1 -1
- package/dist/seed/stores-seed-data.js +1 -1
- package/dist/seed/support-tickets-seed-data.js +1 -1
- package/dist/seed/tester-checklist-seed-data.d.ts +2 -0
- package/dist/seed/tester-checklist-seed-data.js +248 -0
- package/dist/seed/users-seed-data.js +1 -1
- package/dist/seed/wishlists-seed-data.js +1 -1
- package/dist/server.d.ts +7 -2
- package/dist/server.js +19 -12
- package/dist/styles.css +163 -147
- package/dist/tailwind-utilities.css +1 -1
- package/dist/tokens/color-pairs.d.ts +46 -0
- package/dist/tokens/color-pairs.js +93 -0
- package/dist/tokens/index.d.ts +60 -60
- package/dist/tokens/index.js +30 -30
- package/dist/tokens/themes/cobalt-night.d.ts +3 -2
- package/dist/tokens/themes/cobalt-night.js +3 -2
- package/dist/tokens/themes/default-dark.d.ts +4 -1
- package/dist/tokens/themes/default-dark.js +44 -41
- package/dist/tokens/themes/default-light.d.ts +5 -1
- package/dist/tokens/themes/default-light.js +39 -35
- package/dist/tokens/themes/sunset.js +4 -4
- package/dist/tokens/tokens.css +110 -104
- package/dist/ui/components/CollapsibleSection.d.ts +15 -0
- package/dist/ui/components/CollapsibleSection.js +13 -0
- package/dist/ui/components/ListingToolbar.js +2 -1
- package/dist/ui/components/Semantic.style.css +3 -3
- package/dist/ui/components/SideDrawer.style.css +19 -19
- package/dist/ui/components/Slider.js +1 -1
- package/dist/ui/components/StickyToolbar.d.ts +36 -7
- package/dist/ui/components/StickyToolbar.js +63 -5
- package/dist/ui/components/Tabs.js +17 -1
- package/dist/ui/components/Tabs.style.css +10 -0
- package/dist/ui/components/Typography.js +7 -0
- package/dist/ui/components/surface-tokens.d.ts +0 -7
- package/dist/ui/components/surface-tokens.js +7 -0
- package/dist/ui/index.d.ts +6 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/rich-text/RichText.style.css +20 -20
- package/dist/utils/id-generators.d.ts +13 -0
- package/dist/utils/id-generators.js +17 -0
- package/package.json +1 -1
- package/scripts/seed-cli-loader.mjs +15 -0
- 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,SeedPanel
|
|
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,
|
|
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,
|
|
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
|
-
},
|
|
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
|
-
}, {
|
|
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
|
|
13
|
-
*
|
|
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
|
|
13
|
-
*
|
|
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.
|