@mohasinac/appkit 4.10.0 → 4.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_internal/client/features/layout/DashboardLayoutClient.d.ts +6 -1
- package/dist/_internal/client/features/layout/DashboardLayoutClient.js +4 -1
- package/dist/_internal/client/features/lottery/LotteryPullForm.d.ts +1 -1
- package/dist/_internal/client/features/lottery/LotteryPullForm.js +2 -2
- package/dist/_internal/server/features/admin/daily-digest-actions.d.ts +18 -0
- package/dist/_internal/server/features/admin/daily-digest-actions.js +37 -0
- package/dist/_internal/server/features/audit-log/actions.d.ts +25 -0
- package/dist/_internal/server/features/audit-log/actions.js +38 -0
- package/dist/_internal/server/features/brands/actions.js +0 -2
- package/dist/_internal/server/features/brands/og.d.ts +4 -1
- package/dist/_internal/server/features/brands/og.js +1 -1
- package/dist/_internal/server/features/grouped/data.d.ts +4 -0
- package/dist/_internal/server/features/grouped/data.js +24 -0
- package/dist/_internal/server/features/grouped/index.d.ts +1 -1
- package/dist/_internal/server/features/grouped/index.js +1 -1
- package/dist/_internal/server/features/orders/actions.js +9 -0
- package/dist/_internal/server/features/orders/adapters.js +25 -0
- package/dist/_internal/server/features/products/data.d.ts +2 -2
- package/dist/_internal/server/features/products/data.js +5 -23
- package/dist/_internal/server/functions/scheduled.d.ts +3 -1
- package/dist/_internal/server/functions/scheduled.js +17 -1
- package/dist/_internal/server/jobs/core/dailyStatusDigest.d.ts +40 -0
- package/dist/_internal/server/jobs/core/dailyStatusDigest.js +164 -0
- package/dist/_internal/server/jobs/core/hardBanCascade.js +11 -0
- package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +1 -0
- package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +4 -1
- package/dist/_internal/server/jobs/core/testerSandboxRefresh.d.ts +12 -0
- package/dist/_internal/server/jobs/core/testerSandboxRefresh.js +85 -0
- package/dist/_internal/server/jobs/core/whatsappNotify.js +16 -0
- package/dist/_internal/server/jobs/handlers/dailyStatusDigest.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/dailyStatusDigest.js +4 -0
- package/dist/_internal/server/jobs/handlers/index.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/index.js +3 -0
- package/dist/_internal/server/jobs/handlers/testerSandboxRefresh.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/testerSandboxRefresh.js +2 -0
- package/dist/_internal/server/notifications/channel-health.d.ts +27 -0
- package/dist/_internal/server/notifications/channel-health.js +101 -0
- package/dist/_internal/shared/features/brands/schema.d.ts +0 -6
- package/dist/_internal/shared/features/brands/schema.js +0 -1
- package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +7 -0
- package/dist/_internal/shared/features/categories/bundle-schemas.js +3 -0
- package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
- package/dist/_internal/shared/features/products/to-product-item.d.ts +25 -0
- package/dist/_internal/shared/features/products/to-product-item.js +45 -0
- package/dist/client.d.ts +21 -6
- package/dist/client.js +13 -3
- package/dist/constants/api-endpoints.d.ts +6 -9
- package/dist/constants/api-endpoints.js +2 -3
- package/dist/contracts/client-auth.d.ts +3 -7
- package/dist/contracts/email.d.ts +1 -0
- package/dist/features/account/components/AddressForm.js +24 -2
- package/dist/features/account/components/BecomeSellerView.d.ts +1 -2
- package/dist/features/account/components/BecomeSellerView.js +1 -1
- package/dist/features/account/components/NotificationBell.js +1 -1
- package/dist/features/account/components/UserBidsView.d.ts +1 -0
- package/dist/features/account/components/UserBidsView.js +47 -0
- package/dist/features/account/components/UserOrdersView.d.ts +4 -11
- package/dist/features/account/components/UserOrdersView.js +54 -4
- package/dist/features/account/components/UserReturnsView.d.ts +4 -9
- package/dist/features/account/components/UserReturnsView.js +37 -3
- package/dist/features/account/components/index.d.ts +3 -2
- package/dist/features/account/components/index.js +1 -0
- package/dist/features/admin/actions/admin-actions.js +22 -0
- package/dist/features/admin/actions/admin-coupon-actions.js +10 -0
- package/dist/features/admin/actions/notification-actions.js +4 -3
- package/dist/features/admin/components/AdminAdsView.d.ts +2 -3
- package/dist/features/admin/components/AdminAdsView.js +86 -89
- package/dist/features/admin/components/AdminAllEventEntriesView.js +18 -3
- package/dist/features/admin/components/AdminAuditLogView.d.ts +11 -0
- package/dist/features/admin/components/AdminAuditLogView.js +95 -0
- package/dist/features/admin/components/AdminBlogEditorView.js +37 -3
- package/dist/features/admin/components/AdminBrandEditorView.js +10 -6
- package/dist/features/admin/components/AdminBundleEditorView.js +18 -2
- package/dist/features/admin/components/AdminCarouselEditorView.js +2 -2
- package/dist/features/admin/components/AdminCarouselGroupEditorView.js +2 -2
- package/dist/features/admin/components/AdminCartsView.js +34 -4
- package/dist/features/admin/components/AdminCategoryEditorView.js +5 -4
- package/dist/features/admin/components/AdminCouponEditorView.js +2 -2
- package/dist/features/admin/components/AdminFaqEditorView.js +2 -2
- package/dist/features/admin/components/AdminHistoryView.js +11 -1
- package/dist/features/admin/components/AdminNotificationsView.js +27 -1
- package/dist/features/admin/components/AdminOrderEditorView.d.ts +10 -1
- package/dist/features/admin/components/AdminOrderEditorView.js +4 -3
- package/dist/features/admin/components/AdminOrdersView.js +92 -24
- package/dist/features/admin/components/AdminPayoutMarkPaidModal.d.ts +7 -0
- package/dist/features/admin/components/AdminPayoutMarkPaidModal.js +47 -0
- package/dist/features/admin/components/AdminPayoutsView.js +15 -31
- package/dist/features/admin/components/AdminProductEditorView.js +26 -3
- package/dist/features/admin/components/AdminSiteSettingsView.js +20 -1
- package/dist/features/admin/components/AdminStoreAddressesView.js +22 -2
- package/dist/features/admin/components/AdminStoresView.js +7 -0
- package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +2 -2
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +2 -2
- package/dist/features/admin/components/AdminUserEditorView.d.ts +2 -2
- package/dist/features/admin/components/AdminUserEditorView.js +4 -2
- package/dist/features/admin/components/AdminUsersView.js +1 -1
- package/dist/features/admin/components/AdminWishlistsView.js +14 -1
- package/dist/features/admin/components/DataListingView.d.ts +2 -2
- package/dist/features/admin/components/ViewAuditLogEntryModal.d.ts +19 -0
- package/dist/features/admin/components/ViewAuditLogEntryModal.js +22 -0
- package/dist/features/admin/components/ViewNotificationModal.d.ts +21 -0
- package/dist/features/admin/components/ViewNotificationModal.js +15 -0
- package/dist/features/admin/components/analytics/AdminPageViewsReportView.d.ts +4 -7
- package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +56 -36
- package/dist/features/admin/components/index.d.ts +8 -1
- package/dist/features/admin/components/index.js +4 -0
- package/dist/features/admin/constants/filter-tabs.d.ts +49 -0
- package/dist/features/admin/constants/filter-tabs.js +27 -0
- package/dist/features/admin/hooks/useAdminListing.d.ts +6 -0
- package/dist/features/admin/hooks/useAdminListing.js +3 -1
- package/dist/features/admin/hooks/useAdminListingData.d.ts +9 -1
- package/dist/features/admin/hooks/useAdminListingData.js +9 -2
- package/dist/features/admin/repository/site-settings.repository.d.ts +5 -0
- package/dist/features/admin/schemas/firestore.d.ts +12 -0
- package/dist/features/analytics/types.d.ts +1 -1
- package/dist/features/analytics/types.js +8 -0
- package/dist/features/auctions/schemas/index.d.ts +5 -0
- package/dist/features/audit-log/repository/audit-log.repository.d.ts +45 -0
- package/dist/features/audit-log/repository/audit-log.repository.js +30 -0
- package/dist/features/audit-log/schemas/firestore.d.ts +59 -0
- package/dist/features/audit-log/schemas/firestore.js +35 -0
- package/dist/features/auth/actions/index.d.ts +0 -1
- package/dist/features/auth/actions/index.js +0 -1
- package/dist/features/auth/hooks/useAuth.d.ts +8 -35
- package/dist/features/auth/hooks/useAuth.js +21 -37
- package/dist/features/auth/permissions/constants.d.ts +1 -1
- package/dist/features/auth/permissions/constants.js +2 -0
- package/dist/features/blog/schemas/index.d.ts +32 -0
- package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +31 -3
- package/dist/features/catalogue/components/CatalogueItemEditorView.js +2 -1
- package/dist/features/categories/components/BrandDetailPageView.js +14 -12
- package/dist/features/categories/components/CategoryDetailPageView.js +7 -3
- package/dist/features/categories/components/CategoryHighlightsAndFaqSection.d.ts +14 -0
- package/dist/features/categories/components/CategoryHighlightsAndFaqSection.js +22 -0
- package/dist/features/categories/components/CategoryProductsView.d.ts +1 -5
- package/dist/features/categories/components/CategoryProductsView.js +1 -1
- package/dist/features/categories/components/CategorySelectorCreate.js +16 -2
- package/dist/features/categories/schemas/firestore.d.ts +19 -2
- package/dist/features/categories/schemas/index.d.ts +24 -3
- package/dist/features/categories/schemas/index.js +3 -1
- package/dist/features/categories/types/index.d.ts +7 -0
- package/dist/features/checkout/actions/checkout-value-otp-actions.d.ts +17 -3
- package/dist/features/checkout/actions/checkout-value-otp-actions.js +101 -22
- package/dist/features/contact/components/ContactForm.js +17 -4
- package/dist/features/contact/email.d.ts +1 -0
- package/dist/features/contact/email.js +3 -0
- package/dist/features/events/components/AdminEventEditorView.js +54 -2
- package/dist/features/events/components/AdminEventEntriesView.d.ts +2 -16
- package/dist/features/events/components/AdminEventEntriesView.js +56 -89
- package/dist/features/events/components/EventFormDrawer.js +5 -1
- package/dist/features/events/components/EventRaffleEntryForm.d.ts +1 -3
- package/dist/features/events/components/EventRaffleEntryForm.js +1 -1
- package/dist/features/events/schemas/index.d.ts +22 -0
- package/dist/features/grouped/components/GroupedListingsCarousel.js +4 -1
- package/dist/features/grouped/repository/grouped-listings.repository.d.ts +4 -0
- package/dist/features/grouped/repository/grouped-listings.repository.js +18 -0
- package/dist/features/homepage/components/CharacterHotspotForm.js +202 -187
- package/dist/features/homepage/components/SectionCarousel.d.ts +1 -7
- package/dist/features/homepage/components/SectionCarousel.js +1 -1
- package/dist/features/layout/TitleBarLayout.d.ts +1 -1
- package/dist/features/layout/TitleBarLayout.js +3 -3
- package/dist/features/media/MediaImage.js +39 -3
- package/dist/features/media/types/index.d.ts +10 -0
- package/dist/features/media/types/index.js +1 -0
- package/dist/features/media/upload/MediaUploadField.d.ts +7 -1
- package/dist/features/media/upload/MediaUploadField.js +11 -7
- package/dist/features/media/upload/video-poster.d.ts +2 -0
- package/dist/features/media/upload/video-poster.js +16 -1
- package/dist/features/media/upload/video-poster.test.js +1 -1
- package/dist/features/orders/components/OrderStatusTimeline.d.ts +12 -0
- package/dist/features/orders/components/OrderStatusTimeline.js +55 -0
- package/dist/features/orders/components/index.d.ts +2 -0
- package/dist/features/orders/components/index.js +1 -0
- package/dist/features/orders/constants/payment-window.d.ts +25 -0
- package/dist/features/orders/constants/payment-window.js +25 -0
- package/dist/features/orders/repository/orders.repository.d.ts +32 -0
- package/dist/features/orders/repository/orders.repository.js +56 -0
- package/dist/features/orders/schemas/index.d.ts +24 -24
- package/dist/features/orders/types/index.d.ts +33 -0
- package/dist/features/pre-orders/schemas/index.d.ts +5 -0
- package/dist/features/products/components/BidHistory.js +9 -1
- package/dist/features/products/components/GroupSettingsPanel.js +25 -3
- package/dist/features/products/components/PrizeDrawDetailPageView.js +1 -1
- package/dist/features/products/components/PrizeDrawEntryActions.d.ts +1 -4
- package/dist/features/products/components/PrizeDrawEntryActions.js +1 -1
- package/dist/features/products/components/ProductDetailActions.d.ts +1 -2
- package/dist/features/products/components/ProductDetailActions.js +1 -1
- package/dist/features/products/components/ProductGrid.js +15 -1
- package/dist/features/products/constants/action-defs.d.ts +1 -0
- package/dist/features/products/constants/action-defs.js +1 -0
- package/dist/features/products/schemas/index.d.ts +5 -0
- package/dist/features/promotions/components/CouponsIndexListing.d.ts +1 -3
- package/dist/features/promotions/components/CouponsIndexListing.js +1 -1
- package/dist/features/search/components/SearchView.d.ts +1 -3
- package/dist/features/search/components/SearchView.js +1 -1
- package/dist/features/seller/components/QuickProductForm.js +2 -1
- package/dist/features/seller/components/SellerBidsView.js +66 -107
- package/dist/features/seller/components/SellerGoogleReviewsView.js +17 -1
- package/dist/features/seller/components/SellerOrdersView.d.ts +15 -3
- package/dist/features/seller/components/SellerOrdersView.js +134 -163
- package/dist/features/seller/components/SellerPayoutMethodsView.js +60 -48
- package/dist/features/seller/components/SellerPayoutSettingsView.js +69 -4
- package/dist/features/seller/components/SellerPayoutsView.d.ts +12 -0
- package/dist/features/seller/components/SellerPayoutsView.js +25 -5
- package/dist/features/seller/components/SellerProductShell.d.ts +10 -3
- package/dist/features/seller/components/SellerProductShell.js +89 -36
- package/dist/features/seller/components/SellerProductsFilterDrawer.d.ts +2 -7
- package/dist/features/seller/components/SellerProductsFilterDrawer.js +4 -4
- package/dist/features/seller/components/SellerProductsView.d.ts +2 -4
- package/dist/features/seller/components/SellerProductsView.js +131 -189
- package/dist/features/seller/components/SellerReviewsView.js +95 -133
- package/dist/features/seller/components/SellerShippingConfigsView.js +47 -67
- package/dist/features/seller/components/SellerShippingView.js +41 -4
- package/dist/features/seller/components/SellerStoreCategoriesView.js +51 -59
- package/dist/features/seller/components/SellerStorefrontView.d.ts +6 -1
- package/dist/features/seller/components/SellerStorefrontView.js +42 -5
- package/dist/features/seller/components/index.d.ts +2 -2
- package/dist/features/seller/components/index.js +2 -2
- package/dist/features/shell/FormShell.d.ts +24 -4
- package/dist/features/shell/FormShell.js +12 -6
- package/dist/features/shell/QuickFormDrawer.js +67 -12
- package/dist/features/shell/StepForm.d.ts +30 -1
- package/dist/features/shell/StepForm.js +47 -4
- package/dist/features/shell/index.d.ts +1 -1
- package/dist/features/shell/index.js +1 -1
- package/dist/features/shipments/components/AdminShipmentEditorView.js +2 -2
- package/dist/features/shipments/schemas/validation.d.ts +14 -4
- package/dist/features/tester/components/AdminTesterFeedbackListView.js +23 -2
- package/dist/features/tester/components/TesterChecklistStepRow.js +1 -1
- package/dist/features/tester/components/TesterHubView.js +3 -2
- package/dist/features/tester/seed-data/orders-tester-seed-data.js +9 -1
- package/dist/features/tester/seed-data/products-tester-seed-data.js +43 -32
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +404 -15
- package/dist/index.d.ts +15 -3
- package/dist/index.js +22 -5
- package/dist/next/routing/route-map.d.ts +11 -0
- package/dist/next/routing/route-map.js +5 -0
- package/dist/providers/email-resend/provider.js +1 -0
- package/dist/providers/firebase-client/auth.d.ts +1 -0
- package/dist/providers/firebase-client/auth.js +7 -1
- package/dist/repositories/index.d.ts +1 -0
- package/dist/repositories/index.js +1 -0
- package/dist/schemas/registry.d.ts +61 -25
- package/dist/security/pii-mask.js +1 -1
- package/dist/seed/categories-seed-data.js +69 -0
- package/dist/seed/products-auctions-seed-data.js +11 -0
- package/dist/seed/products-standard-seed-data.js +93 -4
- package/dist/seed/site-settings-seed-data.js +13 -1
- package/dist/seed/store-extensions-seed-data.js +1 -1
- package/dist/server-entry.d.ts +2 -1
- package/dist/server-entry.js +20 -2
- package/dist/server.d.ts +7 -2
- package/dist/server.js +8 -3
- package/dist/styles.css +1 -1
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/Form.d.ts +11 -2
- package/dist/ui/components/Form.js +4 -3
- package/dist/ui/components/FormField.d.ts +3 -1
- package/dist/ui/components/FormField.js +22 -4
- package/dist/ui/components/ListingLayout.d.ts +1 -2
- package/dist/ui/components/ListingLayout.js +1 -1
- package/dist/ui/components/RecordDetailModal.d.ts +68 -0
- package/dist/ui/components/RecordDetailModal.js +8 -0
- package/dist/ui/components/SlottedListingView.js +9 -1
- package/dist/ui/forms/FormErrorSummary.d.ts +25 -0
- package/dist/ui/forms/FormErrorSummary.js +37 -0
- package/dist/ui/forms/FormShell.d.ts +37 -2
- package/dist/ui/forms/FormShell.js +37 -7
- package/dist/ui/forms/FormShell.style.css +17 -0
- package/dist/ui/forms/index.d.ts +2 -0
- package/dist/ui/forms/index.js +1 -0
- package/dist/ui/index.d.ts +4 -0
- package/dist/ui/index.js +5 -0
- package/dist/utils/media-url.d.ts +3 -1
- package/dist/utils/media-url.js +20 -1
- package/dist/validation/schemas.d.ts +4 -4
- package/package.json +1 -1
- package/dist/_internal/client/features/classified/ClassifiedDetailView.d.ts +0 -9
- package/dist/_internal/client/features/classified/ClassifiedDetailView.js +0 -55
- package/dist/_internal/client/features/digital-code/DigitalCodeDetailView.d.ts +0 -18
- package/dist/_internal/client/features/digital-code/DigitalCodeDetailView.js +0 -21
- package/dist/_internal/client/features/live/LiveItemDetailView.d.ts +0 -9
- package/dist/_internal/client/features/live/LiveItemDetailView.js +0 -25
- package/dist/_internal/server/jobs/core/prizeRevealClose.d.ts +0 -2
- package/dist/_internal/server/jobs/core/prizeRevealClose.js +0 -28
- package/dist/_internal/server/jobs/core/prizeRevealExpiry.d.ts +0 -2
- package/dist/_internal/server/jobs/core/prizeRevealExpiry.js +0 -61
- package/dist/_internal/server/jobs/core/prizeRevealOpen.d.ts +0 -2
- package/dist/_internal/server/jobs/core/prizeRevealOpen.js +0 -68
- package/dist/_internal/server/jobs/core/prizeRevealReminder.d.ts +0 -2
- package/dist/_internal/server/jobs/core/prizeRevealReminder.js +0 -49
- package/dist/_internal/server/jobs/handlers/prizeRevealClose.d.ts +0 -2
- package/dist/_internal/server/jobs/handlers/prizeRevealClose.js +0 -2
- package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.d.ts +0 -2
- package/dist/_internal/server/jobs/handlers/prizeRevealExpiry.js +0 -2
- package/dist/_internal/server/jobs/handlers/prizeRevealOpen.d.ts +0 -2
- package/dist/_internal/server/jobs/handlers/prizeRevealOpen.js +0 -2
- package/dist/_internal/server/jobs/handlers/prizeRevealReminder.d.ts +0 -2
- package/dist/_internal/server/jobs/handlers/prizeRevealReminder.js +0 -2
- package/dist/features/auth/consent-otp.d.ts +0 -57
- package/dist/features/auth/consent-otp.js +0 -127
- package/dist/features/cart/components/CheckoutOtpModal.d.ts +0 -15
- package/dist/features/cart/components/CheckoutOtpModal.js +0 -12
- package/dist/features/checkout/actions/checkout-actions.d.ts +0 -31
- package/dist/features/checkout/actions/checkout-actions.js +0 -124
- package/dist/features/classified/components/ClassifiedIndexListing.d.ts +0 -5
- package/dist/features/classified/components/ClassifiedIndexListing.js +0 -123
- package/dist/features/classified/components/ClassifiedListView.d.ts +0 -6
- package/dist/features/classified/components/ClassifiedListView.js +0 -44
- package/dist/features/digital-codes/components/DigitalCodesIndexListing.d.ts +0 -5
- package/dist/features/digital-codes/components/DigitalCodesIndexListing.js +0 -114
- package/dist/features/digital-codes/components/DigitalCodesListView.d.ts +0 -6
- package/dist/features/digital-codes/components/DigitalCodesListView.js +0 -38
- package/dist/features/live/components/LiveItemsIndexListing.d.ts +0 -5
- package/dist/features/live/components/LiveItemsIndexListing.js +0 -115
- package/dist/features/live/components/LiveItemsListView.d.ts +0 -6
- package/dist/features/live/components/LiveItemsListView.js +0 -44
- package/dist/features/seller/components/SellerTemplatesView.d.ts +0 -12
- package/dist/features/seller/components/SellerTemplatesView.js +0 -276
- package/dist/react/hooks/useVisibleItems.d.ts +0 -37
- package/dist/react/hooks/useVisibleItems.js +0 -59
- package/dist/ui/components/TabStrip.d.ts +0 -34
- package/dist/ui/components/TabStrip.js +0 -56
- package/dist/ui/components/TabStrip.style.css +0 -97
|
@@ -55,6 +55,15 @@ const rawCategories = [
|
|
|
55
55
|
isFeatured: true,
|
|
56
56
|
featuredPriority: 1,
|
|
57
57
|
isBrand: false,
|
|
58
|
+
highlights: [
|
|
59
|
+
"Every era of Beyblade in one place — Original, Metal Fight, Burst, and X",
|
|
60
|
+
"Verified sellers with condition-graded listings",
|
|
61
|
+
"Auctions, pre-orders, and prize draws alongside straightforward buy-now listings",
|
|
62
|
+
],
|
|
63
|
+
faqs: [
|
|
64
|
+
{ question: "What's the difference between the four Beyblade generations?", answer: "Original (1999-2003) started the franchise with ripcord launchers; Metal Fight (2008-2013) added metal-weighted tops; Burst (2015-present) introduced tops that burst apart on hard hits; X (2023-present) uses the new Xtreme Gear system with clip-on parts." },
|
|
65
|
+
{ question: "Are used tops sold here safe to battle with?", answer: "Every listing shows a condition rating (New/Like New/Good/Used) and sellers are expected to disclose any chips or cracks — check the condition badge and item photos before buying." },
|
|
66
|
+
],
|
|
58
67
|
seo: { title: "Spinning Tops | LetItRip", description: "Buy Beyblade and spinning tops — Original, Metal Fight, Burst, X, and accessories.", keywords: ["beyblade", "spinning tops", "beyblade x", "beyblade burst"] },
|
|
59
68
|
display: { icon: "🌀", coverImage: seedExtMedia("https://picsum.photos/seed/category-image-spinning-tops-20260101/1200/600"), color: "#0891b2", showInMenu: true, showInFooter: true },
|
|
60
69
|
isActive: true,
|
|
@@ -81,6 +90,15 @@ const rawCategories = [
|
|
|
81
90
|
metrics: emptyMetrics,
|
|
82
91
|
isFeatured: false,
|
|
83
92
|
isBrand: false,
|
|
93
|
+
highlights: [
|
|
94
|
+
"The tops that started it all in 1999",
|
|
95
|
+
"Ripcord launcher compatible with the full original-series lineup",
|
|
96
|
+
"A favorite among vintage collectors — sealed pieces command a premium",
|
|
97
|
+
],
|
|
98
|
+
faqs: [
|
|
99
|
+
{ question: "Will an original-series top work with a Burst or X launcher?", answer: "No — each generation uses its own launcher and ripcord system. Original-series tops need an original-series launcher." },
|
|
100
|
+
{ question: "How do I tell if an original top is a genuine Takara release vs. a reprint?", answer: "Check the sticker finish and base stamp under good lighting — sellers with vintage-collectible tagged listings usually note authentication details in the description." },
|
|
101
|
+
],
|
|
84
102
|
seo: { title: "Beyblade Original | LetItRip", description: "Buy original-series Beyblade tops and launchers — Plastic Generation, 1999-2003.", keywords: ["beyblade original", "plastic generation", "vintage beyblade", "beyblade 1999"] },
|
|
85
103
|
display: { icon: "🪀", coverImage: seedExtMedia("https://picsum.photos/seed/category-image-beyblade-original-20260101/1200/600"), color: "#b45309", showInMenu: true, showInFooter: false },
|
|
86
104
|
isActive: true,
|
|
@@ -107,6 +125,15 @@ const rawCategories = [
|
|
|
107
125
|
metrics: emptyMetrics,
|
|
108
126
|
isFeatured: false,
|
|
109
127
|
isBrand: false,
|
|
128
|
+
highlights: [
|
|
129
|
+
"Metal-weighted tops for serious attack and defense power",
|
|
130
|
+
"Covers all four Metal Fight sub-generations: Fusion, Masters, Fury, Zero-G",
|
|
131
|
+
"Popular with tournament players for their heavier base weight",
|
|
132
|
+
],
|
|
133
|
+
faqs: [
|
|
134
|
+
{ question: "What does the number/letter code after a top's name mean (e.g. \"105RF\")?", answer: "It's the track height and bottom type — e.g. 105RF means a 105-height track with a Rubber Flat bottom. Swapping tracks and bottoms lets you tune stamina vs. attack." },
|
|
135
|
+
{ question: "Can Metal Fight tops battle Burst tops in the same stadium?", answer: "Physically yes if the stadium size matches, but they don't burst apart on impact the way Burst tops do — most local groups keep the generations separate for fair play." },
|
|
136
|
+
],
|
|
110
137
|
seo: { title: "Beyblade Metal Fight | LetItRip", description: "Buy vintage Beyblade Metal Fight tops — Fusion, Masters, Fury.", keywords: ["beyblade metal fight", "metal fusion", "metal masters", "vintage beyblade"] },
|
|
111
138
|
display: { icon: "⚙️", coverImage: seedExtMedia("https://picsum.photos/seed/category-image-beyblade-metal-20260101/1200/600"), color: "#64748b", showInMenu: true, showInFooter: false },
|
|
112
139
|
isActive: true,
|
|
@@ -133,6 +160,15 @@ const rawCategories = [
|
|
|
133
160
|
metrics: emptyMetrics,
|
|
134
161
|
isFeatured: false,
|
|
135
162
|
isBrand: false,
|
|
163
|
+
highlights: [
|
|
164
|
+
"Tops that burst apart on a hard enough hit — a whole new battle mechanic",
|
|
165
|
+
"Swappable Layer / Disc / Driver parts for build customization",
|
|
166
|
+
"The most actively traded generation on the platform",
|
|
167
|
+
],
|
|
168
|
+
faqs: [
|
|
169
|
+
{ question: "What's the difference between a Layer, Disc, and Driver?", answer: "Layer is the top piece (attack profile), Disc sits underneath it (weight/stamina), Driver is the tip that touches the stadium floor (spin behavior). Mixing and matching lets you build custom combos." },
|
|
170
|
+
{ question: "Is a burst during battle bad for the top?", answer: "No — Burst tops are designed to separate on hard impacts as the game's core mechanic, then click back together for the next battle." },
|
|
171
|
+
],
|
|
136
172
|
seo: { title: "Beyblade Burst | LetItRip", description: "Buy Beyblade Burst tops, launchers, and stadiums.", keywords: ["beyblade burst", "burst system", "beyblade burst pro"] },
|
|
137
173
|
display: { icon: "💥", coverImage: seedExtMedia("https://picsum.photos/seed/category-image-beyblade-burst-20260101/1200/600"), color: "#059669", showInMenu: true, showInFooter: false },
|
|
138
174
|
isActive: true,
|
|
@@ -159,6 +195,15 @@ const rawCategories = [
|
|
|
159
195
|
metrics: emptyMetrics,
|
|
160
196
|
isFeatured: true,
|
|
161
197
|
isBrand: false,
|
|
198
|
+
highlights: [
|
|
199
|
+
"The newest generation — Xtreme Gear system launched in 2023",
|
|
200
|
+
"Faster clip-on part swaps than any previous generation",
|
|
201
|
+
"Actively growing tournament scene with new waves releasing regularly",
|
|
202
|
+
],
|
|
203
|
+
faqs: [
|
|
204
|
+
{ question: "Do I need new stadiums for Beyblade X?", answer: "X-format tops battle best in the wider X-format stadiums, though many X tops still spin in older round stadiums — check a listing's description for stadium compatibility notes." },
|
|
205
|
+
{ question: "What does the Blade / Ratchet / Bit naming mean?", answer: "Beyblade X renamed the part system — Blade (top piece), Ratchet (middle, sets height), Bit (bottom tip) — functionally similar to Burst's Layer/Disc/Driver but not physically interchangeable with them." },
|
|
206
|
+
],
|
|
162
207
|
seo: { title: "Beyblade X | LetItRip", description: "Buy Beyblade X tops and stadiums by Takara-Tomy.", keywords: ["beyblade x", "xtreme gear", "beyblade x starter", "takara tomy beyblade"] },
|
|
163
208
|
display: { icon: "💫", coverImage: seedExtMedia("https://picsum.photos/seed/category-image-beyblade-x-20260101/1200/600"), color: "#0d9488", showInMenu: true, showInFooter: false },
|
|
164
209
|
isActive: true,
|
|
@@ -185,6 +230,15 @@ const brandRows = [
|
|
|
185
230
|
brandWebsite: "https://www.takaratomy.co.jp",
|
|
186
231
|
brandCountry: "Japan",
|
|
187
232
|
brandFounded: 2006,
|
|
233
|
+
highlights: [
|
|
234
|
+
"The Japanese toy company that manufactures every Beyblade generation",
|
|
235
|
+
"Also behind Tomica, Transformers (Japan region), and Duel Masters",
|
|
236
|
+
"Known for Japan-exclusive releases and premium tooling quality",
|
|
237
|
+
],
|
|
238
|
+
faqs: [
|
|
239
|
+
{ question: "Is Takara-Tomy the same company as Hasbro's Beyblade line?", answer: "No — Takara-Tomy manufactures and sells Beyblade in Japan and most of Asia; Hasbro licenses and distributes a separate (sometimes different) product line internationally, primarily in North America." },
|
|
240
|
+
{ question: "Are Takara-Tomy imports compatible with Hasbro Beyblade parts?", answer: "Within the same generation (e.g. Burst-to-Burst), yes, in most cases — cross-generation compatibility is not guaranteed." },
|
|
241
|
+
],
|
|
188
242
|
rootId: "brand-takara-tomy",
|
|
189
243
|
parentIds: [],
|
|
190
244
|
tier: 0,
|
|
@@ -210,6 +264,15 @@ const brandRows = [
|
|
|
210
264
|
brandWebsite: "https://beyblade.takaratomy.co.jp",
|
|
211
265
|
brandCountry: "Japan",
|
|
212
266
|
brandFounded: 1999,
|
|
267
|
+
highlights: [
|
|
268
|
+
"The franchise itself — spanning four generations since 1999",
|
|
269
|
+
"One of the best-selling spinning-top toy lines in the world",
|
|
270
|
+
"A competitive tournament scene alongside casual collecting",
|
|
271
|
+
],
|
|
272
|
+
faqs: [
|
|
273
|
+
{ question: "What age range is Beyblade designed for?", answer: "Most sets are labeled for ages 8+ due to small parts and launcher spring mechanisms — always check the age rating on the listing before buying for a young child." },
|
|
274
|
+
{ question: "Where can I find official tournament rules?", answer: "Takara-Tomy and Hasbro both publish official battle rules for their respective regions — check the manufacturer's site linked from this page's \"Website\" field for the current rulebook." },
|
|
275
|
+
],
|
|
213
276
|
rootId: "brand-beyblade",
|
|
214
277
|
parentIds: [],
|
|
215
278
|
tier: 0,
|
|
@@ -239,6 +302,7 @@ const bundleRows = [
|
|
|
239
302
|
description: "Both original-generation Beyblades — Dranzer S and Driger V — bundled at a discount.",
|
|
240
303
|
categoryType: "bundle",
|
|
241
304
|
bundleKind: "special",
|
|
305
|
+
brandSlug: "brand-beyblade",
|
|
242
306
|
bundlePrice: 2999,
|
|
243
307
|
bundleQueryRule: {
|
|
244
308
|
type: "static",
|
|
@@ -272,6 +336,7 @@ const bundleRows = [
|
|
|
272
336
|
description: "Storm Pegasus and Flame Sagittario — the classic Metal Fight rivalry, together.",
|
|
273
337
|
categoryType: "bundle",
|
|
274
338
|
bundleKind: "special",
|
|
339
|
+
brandSlug: "brand-takara-tomy",
|
|
275
340
|
bundlePrice: 3499,
|
|
276
341
|
bundleQueryRule: {
|
|
277
342
|
type: "static",
|
|
@@ -305,6 +370,7 @@ const bundleRows = [
|
|
|
305
370
|
description: "Valkyrie and Regalia Genesis — top-tier Burst-era attackers in one set.",
|
|
306
371
|
categoryType: "bundle",
|
|
307
372
|
bundleKind: "special",
|
|
373
|
+
brandSlug: "brand-beyblade",
|
|
308
374
|
// Was 3799 — priced ABOVE the 999+1399+1199=3597 member total (no real
|
|
309
375
|
// discount, contradicted the bundle's whole purpose). Corrected 2026-08-19.
|
|
310
376
|
bundlePrice: 2899,
|
|
@@ -340,6 +406,7 @@ const bundleRows = [
|
|
|
340
406
|
description: "Wizard Arrow and Knife Shinobi — the newest X-series tops for new battlers.",
|
|
341
407
|
categoryType: "bundle",
|
|
342
408
|
bundleKind: "special",
|
|
409
|
+
brandSlug: "brand-takara-tomy",
|
|
343
410
|
bundlePrice: 2499,
|
|
344
411
|
bundleQueryRule: {
|
|
345
412
|
type: "static",
|
|
@@ -373,6 +440,8 @@ const bundleRows = [
|
|
|
373
440
|
description: "One top from every Beyblade generation — Original, Metal Fight, Burst, and X — the ultimate collector's starter pack.",
|
|
374
441
|
categoryType: "bundle",
|
|
375
442
|
bundleKind: "special",
|
|
443
|
+
// Deliberately no brandSlug — genuinely cross-brand (2 Beyblade + 2
|
|
444
|
+
// Takara-Tomy member products), a real "no specific brand" test case.
|
|
376
445
|
// Was 5999 — priced ABOVE the 1799+1299+999+899=4996 member total (no
|
|
377
446
|
// real discount, contradicted the bundle's whole purpose). Corrected 2026-08-19.
|
|
378
447
|
bundlePrice: 3999,
|
|
@@ -71,6 +71,17 @@ const _rawProductsAuctionsSeedData = [
|
|
|
71
71
|
tags: ["vintage-collectible", "sealed"],
|
|
72
72
|
specifications: DRANZER_SPECS,
|
|
73
73
|
customFields: [{ key: "Sealed / Unopened", type: "boolean", value: "true" }],
|
|
74
|
+
// Added 2026-08-21 — an authenticity/unboxing video makes narrative sense
|
|
75
|
+
// on a rare sealed grail piece, and gives the auction detail page's
|
|
76
|
+
// gallery a fixture beyond the standard-product-only video-demo cluster
|
|
77
|
+
// (products-standard-seed-data.ts). YouTube-sourced, same as that file's
|
|
78
|
+
// Metal Fight fixture — exercises getYouTubeVideoId()'s iframe-embed path
|
|
79
|
+
// on a non-standard listing type.
|
|
80
|
+
video: {
|
|
81
|
+
url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
|
82
|
+
thumbnailUrl: seedExtMedia("https://picsum.photos/seed/auction-video-thumb-beyblade-original-dragoon-storm-20260821/800/450"),
|
|
83
|
+
duration: 212,
|
|
84
|
+
},
|
|
74
85
|
storeId: "store-beyblade-arena",
|
|
75
86
|
storeName: "Beyblade Arena",
|
|
76
87
|
createdAt: new Date("2026-05-18"),
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* WHY: Seeds a minimal, Beyblade-focused catalog of standard product listings — 2 products per
|
|
3
3
|
* generation (Original, Metal Fight, Burst, X), all from the Beyblade Arena store, plus
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* 4 video-demo products so the product gallery's video slide (theater-mode playback,
|
|
5
|
+
* zoom/rotate, fullscreen) has real, playable fixtures covering every supported video
|
|
6
|
+
* source: a raw file from Google's public sample-video bucket (x2, one per Original/X),
|
|
7
|
+
* a YouTube-embed URL (Metal Fight — exercises getYouTubeVideoId()'s iframe-embed path,
|
|
8
|
+
* 2026-08-21), and a second raw-external-host file from Wikimedia Commons (Burst,
|
|
9
|
+
* 2026-08-21). A real MediaUploadField file-upload video can't be reproduced from seed
|
|
10
|
+
* data (no Storage object actually exists for a seeded URL to point at) — that path is
|
|
11
|
+
* covered by a tester-checklist manual test case instead, not a fixture here.
|
|
12
|
+
* WHAT: Exports 12 standard products with listingType:"standard", covering all 4 generation
|
|
7
13
|
* leaf categories (tagged with both leaf + root category slugs).
|
|
8
14
|
*
|
|
9
15
|
* EXPORTS:
|
|
10
|
-
* productsStandardSeedData — Array of
|
|
16
|
+
* productsStandardSeedData — Array of 12 standard products with listingType:"standard"
|
|
11
17
|
*
|
|
12
18
|
* @tag domain:products,catalog
|
|
13
19
|
* @tag layer:seed
|
|
@@ -475,6 +481,89 @@ const _rawProductsStandardSeedData = [
|
|
|
475
481
|
createdAt: new Date("2026-08-19"),
|
|
476
482
|
updatedAt: new Date("2026-08-19"),
|
|
477
483
|
},
|
|
484
|
+
{
|
|
485
|
+
// Added 2026-08-21 — the first two video-demo fixtures only covered a raw,
|
|
486
|
+
// directly-playable <video src> from one external host (Google's public
|
|
487
|
+
// sample-video bucket). MediaUploadField's "YouTube" tab is a real,
|
|
488
|
+
// separately-supported video source (see getYouTubeVideoId() /
|
|
489
|
+
// Recurrent Root Cause Pattern for the YouTube-embed fix), but until now
|
|
490
|
+
// NO permanent seed fixture exercised it — the only reproduction was an
|
|
491
|
+
// ephemeral manual edit on a tester-sandbox product that a reseed would
|
|
492
|
+
// silently wipe out.
|
|
493
|
+
id: "product-beyblade-metal-dark-bull-video-demo",
|
|
494
|
+
slug: "product-beyblade-metal-dark-bull-video-demo",
|
|
495
|
+
barcodeId: "LIR-BEY-VID-003",
|
|
496
|
+
title: "Metal Fight Beyblade BB-118 Dark Bull (Video Demo, YouTube)",
|
|
497
|
+
description: "Dark Bull H145SD, a defense-type top from the Metal Masters generation. Listed with a YouTube battle video to exercise the gallery's YouTube-embed video source.",
|
|
498
|
+
categorySlugs: ["category-beyblade-metal", "category-spinning-tops"],
|
|
499
|
+
categoryNames: ["Beyblade Metal Fight", "Spinning Tops"],
|
|
500
|
+
brandSlug: "brand-takara-tomy",
|
|
501
|
+
brand: "Takara-Tomy",
|
|
502
|
+
price: 1099,
|
|
503
|
+
currency: "INR",
|
|
504
|
+
stockQuantity: 4,
|
|
505
|
+
availableQuantity: 4,
|
|
506
|
+
isSold: false,
|
|
507
|
+
mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-dark-bull-video-demo-1-20260821/900/900"),
|
|
508
|
+
images: [
|
|
509
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-dark-bull-video-demo-1-20260821/900/900"),
|
|
510
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-metal-dark-bull-video-demo-2-20260821/900/900"),
|
|
511
|
+
],
|
|
512
|
+
video: {
|
|
513
|
+
// audit-seed-external-url-ok: MediaUploadField's YouTube tab always stores a
|
|
514
|
+
// youtube.com/watch?v= URL — this is exactly that shape, not a raw file.
|
|
515
|
+
// getYouTubeVideoId() detects it and MediaVideo/ImageLightbox render a
|
|
516
|
+
// youtube-nocookie.com iframe embed instead of a native <video> element.
|
|
517
|
+
url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
|
518
|
+
thumbnailUrl: seedExtMedia("https://picsum.photos/seed/product-video-thumb-beyblade-metal-dark-bull-video-demo-20260821/800/450"),
|
|
519
|
+
duration: 212,
|
|
520
|
+
},
|
|
521
|
+
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
522
|
+
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
523
|
+
tags: ["defense-type"],
|
|
524
|
+
storeId: "store-beyblade-arena",
|
|
525
|
+
storeName: "Beyblade Arena",
|
|
526
|
+
createdAt: new Date("2026-08-21"),
|
|
527
|
+
updatedAt: new Date("2026-08-21"),
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
// Added 2026-08-21 — third distinct video source (Wikimedia Commons,
|
|
531
|
+
// CC-BY-SA) alongside the Google-sample-bucket and YouTube fixtures above,
|
|
532
|
+
// matching the raw-external-URL source already used on the live-tester-
|
|
533
|
+
// sandbox live-item fixture (products-tester-seed-data.ts) so a standard
|
|
534
|
+
// product exercises the same non-YouTube external-host path too.
|
|
535
|
+
id: "product-beyblade-burst-spryzen-video-demo",
|
|
536
|
+
slug: "product-beyblade-burst-spryzen-video-demo",
|
|
537
|
+
barcodeId: "LIR-BEY-VID-004",
|
|
538
|
+
title: "Beyblade Burst B-97 Spryzen S2 (Video Demo, Wikimedia)",
|
|
539
|
+
description: "Spryzen S2 stamina-type top from the God Layer generation. Listed with a Wikimedia-hosted spin video to exercise a second raw-external-host video source.",
|
|
540
|
+
categorySlugs: ["category-beyblade-burst", "category-spinning-tops"],
|
|
541
|
+
categoryNames: ["Beyblade Burst", "Spinning Tops"],
|
|
542
|
+
brandSlug: "brand-beyblade",
|
|
543
|
+
brand: "Beyblade",
|
|
544
|
+
price: 899,
|
|
545
|
+
currency: "INR",
|
|
546
|
+
stockQuantity: 7,
|
|
547
|
+
availableQuantity: 7,
|
|
548
|
+
isSold: false,
|
|
549
|
+
mainImage: seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-spryzen-video-demo-1-20260821/900/900"),
|
|
550
|
+
images: [
|
|
551
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-spryzen-video-demo-1-20260821/900/900"),
|
|
552
|
+
seedExtMedia("https://picsum.photos/seed/product-image-beyblade-burst-spryzen-video-demo-2-20260821/900/900"),
|
|
553
|
+
],
|
|
554
|
+
video: {
|
|
555
|
+
url: "https://upload.wikimedia.org/wikipedia/commons/4/42/Slow_motion_of_running_greyhound.webm", // audit-seed-external-url-ok: raw <video> src, CC-BY-SA 4.0 (Wikimedia Commons)
|
|
556
|
+
thumbnailUrl: seedExtMedia("https://picsum.photos/seed/product-video-thumb-beyblade-burst-spryzen-video-demo-20260821/800/450"),
|
|
557
|
+
duration: 14,
|
|
558
|
+
},
|
|
559
|
+
status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
|
|
560
|
+
condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
|
|
561
|
+
tags: ["stamina-type"],
|
|
562
|
+
storeId: "store-beyblade-arena",
|
|
563
|
+
storeName: "Beyblade Arena",
|
|
564
|
+
createdAt: new Date("2026-08-21"),
|
|
565
|
+
updatedAt: new Date("2026-08-21"),
|
|
566
|
+
},
|
|
478
567
|
];
|
|
479
568
|
export const productsStandardSeedData = [
|
|
480
569
|
..._rawProductsStandardSeedData.map((p) => withTokens({
|
|
@@ -184,6 +184,18 @@ export const siteSettingsSeedData = {
|
|
|
184
184
|
fromName: "LetItRip",
|
|
185
185
|
fromEmail: "noreply@letitrip.in",
|
|
186
186
|
replyTo: "support@letitrip.in",
|
|
187
|
+
// Admin-editable in Site Settings → Notifications. The Gmail address is a
|
|
188
|
+
// standing CC so the digest still lands somewhere reachable even if the
|
|
189
|
+
// @letitrip.in mailboxes aren't receiving mail yet.
|
|
190
|
+
dailyDigest: {
|
|
191
|
+
enabled: true,
|
|
192
|
+
recipients: [
|
|
193
|
+
"support@letitrip.in",
|
|
194
|
+
"reply@letitrip.in",
|
|
195
|
+
"mohasin@letitrip.in",
|
|
196
|
+
],
|
|
197
|
+
ccRecipients: ["letitrip.in@gmail.com"],
|
|
198
|
+
},
|
|
187
199
|
},
|
|
188
200
|
seo: {
|
|
189
201
|
defaultTitle: "LetItRip — Buy, Sell & Auction Collectibles | India's Collectibles Marketplace",
|
|
@@ -491,7 +503,7 @@ export const siteSettingsSeedData = {
|
|
|
491
503
|
razorpayKeyId: "rzp_test_PLACEHOLDER",
|
|
492
504
|
razorpayKeySecret: "secret_PLACEHOLDER",
|
|
493
505
|
razorpayWebhookSecret: "webhook_PLACEHOLDER",
|
|
494
|
-
resendApiKey: "
|
|
506
|
+
resendApiKey: "",
|
|
495
507
|
whatsappApiKey: "wa_PLACEHOLDER",
|
|
496
508
|
whatsappPhoneNumberId: "",
|
|
497
509
|
whatsappCloudApiToken: "",
|
|
@@ -61,7 +61,7 @@ export const payoutMethodsSeedData = [
|
|
|
61
61
|
label: "SBI Current Account",
|
|
62
62
|
accountNumber: "00112233445566",
|
|
63
63
|
ifscCode: "SBIN0001234",
|
|
64
|
-
accountHolderName: "
|
|
64
|
+
accountHolderName: "Mohasin Chinnapattan",
|
|
65
65
|
bankName: "State Bank of India",
|
|
66
66
|
isDefault: false,
|
|
67
67
|
isActive: true,
|
package/dist/server-entry.d.ts
CHANGED
|
@@ -77,7 +77,8 @@ export * as accountServer from "./_internal/server/features/account/index";
|
|
|
77
77
|
export * as authServer from "./_internal/server/features/auth/index";
|
|
78
78
|
export * as messagesServer from "./_internal/server/features/messages/index";
|
|
79
79
|
export * as scamsServer from "./_internal/server/features/scams/index";
|
|
80
|
-
export { AppkitError,
|
|
80
|
+
export { AppkitError, UnauthorizedError, CapacityError, ExpiredError, } from "./_internal/shared/errors/index";
|
|
81
|
+
export { NotFoundError, ValidationError, ConflictError } from "./errors/index";
|
|
81
82
|
export type { AppkitConfig } from "./_internal/shared/config/schema";
|
|
82
83
|
export { SEMANTIC_COLORS, SEMANTIC_COLORS_DARK, SEMANTIC_RADIUS, SEMANTIC_SHADOWS, SEMANTIC_Z_INDEX, MOTION_TOKENS, BREAKPOINTS, PLATFORM_LIMITS, } from "./_internal/shared/tokens/index";
|
|
83
84
|
export type { Responsive, Breakpoint, SemanticColor } from "./_internal/shared/tokens/index";
|
package/dist/server-entry.js
CHANGED
|
@@ -116,8 +116,26 @@ export * as accountServer from "./_internal/server/features/account/index";
|
|
|
116
116
|
export * as authServer from "./_internal/server/features/auth/index";
|
|
117
117
|
export * as messagesServer from "./_internal/server/features/messages/index";
|
|
118
118
|
export * as scamsServer from "./_internal/server/features/scams/index";
|
|
119
|
-
// Shared domain errors
|
|
120
|
-
|
|
119
|
+
// Shared domain errors.
|
|
120
|
+
//
|
|
121
|
+
// ValidationError/NotFoundError/ConflictError are sourced from `./errors/index`
|
|
122
|
+
// (the real, `mapToHttpError`/`handleApiError`-integrated classes) — NOT from
|
|
123
|
+
// `_internal/shared/errors/index`, which defines same-named but structurally
|
|
124
|
+
// unrelated classes (extends `AppkitError extends Error`, not `AppError`) used
|
|
125
|
+
// internally by a handful of `_internal/shared/features/*` error subclasses
|
|
126
|
+
// (AuctionEndedError, EventEndedError, CouponExpiredError, WishlistCapError).
|
|
127
|
+
// Re-exporting the _internal set here as the package's public "." names meant
|
|
128
|
+
// every `throw new ValidationError(...)` at a consumer call site (importing
|
|
129
|
+
// from bare `@mohasinac/appkit`) constructed an instance `mapToHttpError`'s
|
|
130
|
+
// `err instanceof ValidationError` check (against the *real* class) could
|
|
131
|
+
// never match — the error silently fell through every classified branch to
|
|
132
|
+
// the generic 500 "An internal error occurred" fallback, which is the exact
|
|
133
|
+
// shape of the "generic/minified-React error" bug this session's plan set
|
|
134
|
+
// out to fix. AppkitError/UnauthorizedError/CapacityError/ExpiredError have
|
|
135
|
+
// no real-module counterpart and no confirmed instanceof-mismatch bug, so
|
|
136
|
+
// they stay sourced from `_internal/shared/errors` unchanged.
|
|
137
|
+
export { AppkitError, UnauthorizedError, CapacityError, ExpiredError, } from "./_internal/shared/errors/index";
|
|
138
|
+
export { NotFoundError, ValidationError, ConflictError } from "./errors/index";
|
|
121
139
|
export { SEMANTIC_COLORS, SEMANTIC_COLORS_DARK, SEMANTIC_RADIUS, SEMANTIC_SHADOWS, SEMANTIC_Z_INDEX, MOTION_TOKENS, BREAKPOINTS, PLATFORM_LIMITS, } from "./_internal/shared/tokens/index";
|
|
122
140
|
// OG image renderers — pure JSX, no next/og dependency; wrap with ImageResponse in consumer.
|
|
123
141
|
// Two layers per feature:
|
package/dist/server.d.ts
CHANGED
|
@@ -67,6 +67,12 @@ export { enqueueJob } from "./features/jobs/actions/enqueue-job";
|
|
|
67
67
|
export type { EnqueueJobInput, EnqueueJobResult } from "./features/jobs/actions/enqueue-job";
|
|
68
68
|
export { JOBS_COLLECTION, JobStatusValues, } from "./features/jobs/schemas/firestore";
|
|
69
69
|
export type { JobStatus, JobDocument, JobResult } from "./features/jobs/schemas/firestore";
|
|
70
|
+
export { triggerDailyStatusDigest, triggerDeploymentDigest } from "./_internal/server/features/admin/daily-digest-actions";
|
|
71
|
+
export type { DailyStatusDigestResult, DailyStatusDigestSummary } from "./_internal/server/jobs/core/dailyStatusDigest";
|
|
72
|
+
export { recordAdminAction } from "./_internal/server/features/audit-log/actions";
|
|
73
|
+
export type { RecordAdminActionInput } from "./_internal/server/features/audit-log/actions";
|
|
74
|
+
export { AdminAuditActionValues, ADMIN_AUDIT_LOG_COLLECTION, ADMIN_AUDIT_LOG_FIELDS, } from "./features/audit-log/schemas/firestore";
|
|
75
|
+
export type { AdminAuditAction, AdminAuditLogDocument } from "./features/audit-log/schemas/firestore";
|
|
70
76
|
export { makeOrder } from "./seed/index";
|
|
71
77
|
export { makePayout } from "./seed/index";
|
|
72
78
|
export { makeProduct } from "./seed/index";
|
|
@@ -248,7 +254,6 @@ export { listTopLevelCategories } from "./features/categories/server";
|
|
|
248
254
|
export { updateCategory } from "./features/categories/server";
|
|
249
255
|
export { sendCheckoutValueOtp, verifyCheckoutValueOtp, isCheckoutValueOtpVerified, } from "./features/checkout/server";
|
|
250
256
|
export { FailedCheckoutRepository, failedCheckoutRepository } from "./features/checkout/server";
|
|
251
|
-
export { sendPasswordChangeOtp, verifyPasswordChangeOtp, isPasswordChangeOtpVerified, consumePasswordChangeOtp, } from "./features/auth/server";
|
|
252
257
|
export type { FailedCheckoutMeta, FailedPaymentMeta } from "./features/checkout/server";
|
|
253
258
|
export { EmailButton, EmailColumn, EmailContainer, EmailDivider, EmailDoc, EmailFooter, EmailHeader, EmailImage, EmailLink, EmailRow, } from "./features/email";
|
|
254
259
|
export type { EmailButtonProps, EmailColumnProps, EmailContainerProps, EmailDividerProps, EmailDocProps, EmailFooterProps, EmailHeaderProps, EmailImageProps, EmailLinkProps, EmailRowProps, EmailTone, } from "./features/email";
|
|
@@ -497,7 +502,7 @@ export { GoogleReviewsSection } from "./features/homepage/components/GoogleRevie
|
|
|
497
502
|
export type { GoogleReviewsSectionProps } from "./features/homepage/components/GoogleReviewsSection";
|
|
498
503
|
export { getProductForDetail, listSitemapProducts, computeRelatedItems, toProductItem, type SitemapProduct, type RelatedItemsResult, } from "./_internal/server/features/products/index";
|
|
499
504
|
export { getBundleForDetail, listBundleMembers, listFeaturedBundles, getRelatedBundles, resolveBundleMemberIds, resolveBundleOriginalTotal, buildBundleMetadata, renderBundleOg, renderBundleOgImage, addBundleToCartAction, type BundleDataOptions, type BundleMetadataOptions, type BundleOgData, } from "./_internal/server/features/bundles/index";
|
|
500
|
-
export { getGroupsForProduct, getGroupsWithItemsForProduct } from "./_internal/server/features/grouped/index";
|
|
505
|
+
export { getGroupsForProduct, getGroupsWithItemsForProduct, getGroupsForCategory, getGroupsForBrand } from "./_internal/server/features/grouped/index";
|
|
501
506
|
export { getAuctionForDetail, getProductFeaturesForAuction } from "./_internal/server/features/auctions/index";
|
|
502
507
|
export { getPreOrderForDetail, getProductFeaturesForPreOrder } from "./_internal/server/features/pre-orders/index";
|
|
503
508
|
export { getStoreForDetail, listStoreProductsInitial, listStoreAuctionsInitial, listStorePreOrdersInitial, listSitemapStores } from "./_internal/server/features/stores/index";
|
package/dist/server.js
CHANGED
|
@@ -175,6 +175,13 @@ export { sendNotification } from "./features/admin/actions/notification-actions"
|
|
|
175
175
|
// processing runs in the `onJobCreated` Firebase Function (CLAUDE.md Rule #6).
|
|
176
176
|
export { enqueueJob } from "./features/jobs/actions/enqueue-job";
|
|
177
177
|
export { JOBS_COLLECTION, JobStatusValues, } from "./features/jobs/schemas/firestore";
|
|
178
|
+
// [SERVER-ONLY] Manual trigger for the daily status digest — shares one
|
|
179
|
+
// implementation with the `dailyStatusDigest` scheduled Firebase Function.
|
|
180
|
+
export { triggerDailyStatusDigest, triggerDeploymentDigest } from "./_internal/server/features/admin/daily-digest-actions";
|
|
181
|
+
// [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
|
|
182
|
+
// recordAdminAction - single write-site for the admin audit trail (adminAuditLog collection).
|
|
183
|
+
export { recordAdminAction } from "./_internal/server/features/audit-log/actions";
|
|
184
|
+
export { AdminAuditActionValues, ADMIN_AUDIT_LOG_COLLECTION, ADMIN_AUDIT_LOG_FIELDS, } from "./features/audit-log/schemas/firestore";
|
|
178
185
|
// [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
|
|
179
186
|
// makeOrder - Shared export for make order.
|
|
180
187
|
export { makeOrder } from "./seed/index";
|
|
@@ -715,8 +722,6 @@ export { updateCategory } from "./features/categories/server";
|
|
|
715
722
|
// [SERVER-ONLY] Tier PP — high-value checkout OTP gate.
|
|
716
723
|
export { sendCheckoutValueOtp, verifyCheckoutValueOtp, isCheckoutValueOtpVerified, } from "./features/checkout/server";
|
|
717
724
|
export { FailedCheckoutRepository, failedCheckoutRepository } from "./features/checkout/server";
|
|
718
|
-
// [SERVER-ONLY] Password-change OTP gate — see features/auth/password-change-otp.ts.
|
|
719
|
-
export { sendPasswordChangeOtp, verifyPasswordChangeOtp, isPasswordChangeOtpVerified, consumePasswordChangeOtp, } from "./features/auth/server";
|
|
720
725
|
// [SERVER-ONLY] Email primitives — table-based, inline-styled components
|
|
721
726
|
// that render email-client-compatible HTML via renderToStaticMarkup. Use
|
|
722
727
|
// these instead of authoring raw <table>/<tr>/<td> in email templates.
|
|
@@ -1350,7 +1355,7 @@ export { GoogleReviewsSection } from "./features/homepage/components/GoogleRevie
|
|
|
1350
1355
|
export { getProductForDetail, listSitemapProducts, computeRelatedItems, toProductItem, } from "./_internal/server/features/products/index";
|
|
1351
1356
|
// S-SBUNI-3/4 2026-05-13 — bundle data/metadata/og layer.
|
|
1352
1357
|
export { getBundleForDetail, listBundleMembers, listFeaturedBundles, getRelatedBundles, resolveBundleMemberIds, resolveBundleOriginalTotal, buildBundleMetadata, renderBundleOg, renderBundleOgImage, addBundleToCartAction, } from "./_internal/server/features/bundles/index";
|
|
1353
|
-
export { getGroupsForProduct, getGroupsWithItemsForProduct } from "./_internal/server/features/grouped/index";
|
|
1358
|
+
export { getGroupsForProduct, getGroupsWithItemsForProduct, getGroupsForCategory, getGroupsForBrand } from "./_internal/server/features/grouped/index";
|
|
1354
1359
|
export { getAuctionForDetail, getProductFeaturesForAuction } from "./_internal/server/features/auctions/index";
|
|
1355
1360
|
export { getPreOrderForDetail, getProductFeaturesForPreOrder } from "./_internal/server/features/pre-orders/index";
|
|
1356
1361
|
export { getStoreForDetail, listStoreProductsInitial, listStoreAuctionsInitial, listStorePreOrdersInitial, listSitemapStores } from "./_internal/server/features/stores/index";
|