@mohasinac/appkit 4.34.0 → 4.35.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/lottery/LotteryAdminEditView.js +32 -2
- package/dist/_internal/server/features/seo/sitemap.js +2 -2
- package/dist/_internal/server/functions/scheduled.d.ts +1 -2
- package/dist/_internal/server/functions/scheduled.js +8 -9
- package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +15 -0
- package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +15 -6
- package/dist/_internal/server/jobs/handlers/index.d.ts +0 -1
- package/dist/_internal/server/jobs/handlers/index.js +0 -1
- package/dist/features/auth/schemas/firestore.d.ts +1 -0
- package/dist/features/tester/components/TesterChecklistStepRow.d.ts +9 -1
- package/dist/features/tester/components/TesterChecklistStepRow.js +31 -2
- package/dist/features/tester/components/TesterHubView.js +8 -0
- package/dist/features/tester/repository/tester-checklist-item.repository.d.ts +16 -1
- package/dist/features/tester/repository/tester-checklist-item.repository.js +32 -6
- package/dist/features/tester/schemas/firestore.d.ts +109 -0
- package/dist/features/tester/schemas/firestore.js +14 -0
- package/dist/features/tester/seed-data/_money-flows.d.ts +23 -0
- package/dist/features/tester/seed-data/_money-flows.js +430 -0
- package/dist/features/tester/seed-data/authored/_types.d.ts +33 -0
- package/dist/features/tester/seed-data/authored/_types.js +35 -0
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +207 -0
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +298 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.js +33 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program.js +138 -0
- package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__address-filters.js +36 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +75 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +72 -0
- package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__state-picker.js +54 -0
- package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__unban-request.js +39 -0
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +226 -0
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +82 -0
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +177 -0
- package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__bundles.js +97 -0
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +232 -0
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +306 -0
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +158 -0
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +78 -0
- package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__content-deletes.js +261 -0
- package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__content-marketing.js +151 -0
- package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__coupons.js +214 -0
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +160 -0
- package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__media-watermark.js +104 -0
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +350 -0
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +105 -0
- package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__site-system.js +590 -0
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +235 -0
- package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__users-trust.js +569 -0
- package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__bidding.js +417 -0
- package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +653 -0
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +533 -0
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +379 -0
- package/dist/features/tester/seed-data/authored/buying__cart.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__cart.js +1171 -0
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +140 -0
- package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__my-orders.js +257 -0
- package/dist/features/tester/seed-data/authored/buying__offers.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__offers.js +1111 -0
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +252 -0
- package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__product-detail.js +387 -0
- package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__return-request.js +152 -0
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +242 -0
- package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__reviews.js +113 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +283 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +167 -0
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +90 -0
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +344 -0
- package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/community-support__public-profile.js +53 -0
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +76 -0
- package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__blog.js +93 -0
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +149 -0
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +121 -0
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +207 -0
- package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +318 -0
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +65 -0
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +147 -0
- package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__search.js +332 -0
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +53 -0
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +52 -0
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +35 -0
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +141 -0
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +35 -0
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +95 -0
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +191 -0
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +158 -0
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +106 -0
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +88 -0
- package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__general-design.js +204 -0
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +301 -0
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +407 -0
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +214 -0
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +275 -0
- package/dist/features/tester/seed-data/authored/index.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/index.js +237 -0
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +102 -0
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +50 -0
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +66 -0
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +115 -0
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +136 -0
- package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.js +69 -0
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +263 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +102 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +234 -0
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +126 -0
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +255 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +59 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +88 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +51 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +35 -0
- package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__become-seller.js +94 -0
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +107 -0
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +285 -0
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +326 -0
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +136 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +128 -0
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +167 -0
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +117 -0
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +88 -0
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +151 -0
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +105 -0
- package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-guide.js +33 -0
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +347 -0
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +166 -0
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +89 -0
- package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-orders.js +195 -0
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +180 -0
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +164 -0
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +116 -0
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +111 -0
- package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__og-images.js +91 -0
- package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__page-metadata.js +122 -0
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +105 -0
- package/dist/features/tester/seed-data/events-tester-seed-data.js +77 -5
- package/dist/features/tester/seed-data/offers-tester-seed-data.js +23 -9
- package/dist/features/tester/seed-data/products-tester-seed-data.js +65 -49
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +744 -1
- package/dist/features/tester/seed-data/tester-window.d.ts +25 -0
- package/dist/features/tester/seed-data/tester-window.js +66 -0
- package/dist/seed/carousel-slides-seed-data.js +1 -1
- package/dist/seed/products-standard-seed-data.js +2 -2
- package/dist/seed/reviews-seed-data.js +6 -1
- package/dist/seed/users-seed-data.js +107 -4
- package/package.json +1 -1
- package/scripts/seed-cli.mjs +6 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Reproduces the historical 1h/2h/3h auction stagger when nothing overrides it. */
|
|
2
|
+
export declare const DEFAULT_TESTER_WINDOW_MINUTES = 180;
|
|
3
|
+
/** Below this nothing is observable — a page load alone can outlast it. */
|
|
4
|
+
export declare const MIN_TESTER_WINDOW_MINUTES = 5;
|
|
5
|
+
/** The sandbox TTL is 7 days; a window longer than that outlives its own fixtures. */
|
|
6
|
+
export declare const MAX_TESTER_WINDOW_MINUTES: number;
|
|
7
|
+
/**
|
|
8
|
+
* Length of the testing window, in minutes.
|
|
9
|
+
*
|
|
10
|
+
* Read at call time rather than captured at module scope so a caller that sets the
|
|
11
|
+
* env var before importing a seed file still wins. Anything unparseable, non-finite
|
|
12
|
+
* or out of range falls back to the default rather than throwing: a malformed env
|
|
13
|
+
* var must not be able to brick `appkit-seed load`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function windowMinutes(): number;
|
|
16
|
+
/**
|
|
17
|
+
* A point `fraction` of the way through the window, measured from now.
|
|
18
|
+
*
|
|
19
|
+
* `windowOffset(0)` is now, `windowOffset(1)` is the window's end. Fractions above 1
|
|
20
|
+
* are allowed and mean "after this run" — that is how a fixture says "still open when
|
|
21
|
+
* testing finishes" without hard-coding a duration.
|
|
22
|
+
*/
|
|
23
|
+
export declare function windowOffset(fraction: number): Date;
|
|
24
|
+
/** The mirror of windowOffset, into the past — for fixtures that must already be closed. */
|
|
25
|
+
export declare function windowAgo(fraction: number): Date;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Every time-bound tester fixture — auction end dates, coupon validity, event
|
|
3
|
+
* start/end, prize-draw reveal windows, offer expiry, lottery draw windows —
|
|
4
|
+
* must open and close INSIDE one testing session. Hand-written offsets like
|
|
5
|
+
* `Date.now() + 2 * 60 * 60 * 1000` cannot do that: they bake in a duration
|
|
6
|
+
* nobody can shorten, so a case reading "watch the auction actually end" is
|
|
7
|
+
* untestable without sitting there for two hours.
|
|
8
|
+
*
|
|
9
|
+
* This file is the one knob. Fixtures express WHEN as a fraction of the run
|
|
10
|
+
* window; the window's real length comes from TESTER_WINDOW_MINUTES.
|
|
11
|
+
*
|
|
12
|
+
* WHAT: windowMinutes() / windowOffset(fraction) / windowAgo(fraction).
|
|
13
|
+
*
|
|
14
|
+
* 🛑 The default is 180 minutes ON PURPOSE — it reproduces the pre-existing 1h/2h/3h
|
|
15
|
+
* auction stagger exactly (fractions 1/3, 2/3, 1), so an ordinary `appkit-seed load`
|
|
16
|
+
* behaves as it always has. Only the automated runner shortens it. Changing this
|
|
17
|
+
* default silently re-times every fixture for human testers too.
|
|
18
|
+
*
|
|
19
|
+
* @tag domain:tester
|
|
20
|
+
* @tag layer:seed
|
|
21
|
+
* @tag pattern:none
|
|
22
|
+
* @tag access:server-only
|
|
23
|
+
* @tag consumers:seed-data/*-tester-seed-data.ts
|
|
24
|
+
* @tag sideEffects:none
|
|
25
|
+
*/
|
|
26
|
+
/** Reproduces the historical 1h/2h/3h auction stagger when nothing overrides it. */
|
|
27
|
+
export const DEFAULT_TESTER_WINDOW_MINUTES = 180;
|
|
28
|
+
/** Below this nothing is observable — a page load alone can outlast it. */
|
|
29
|
+
export const MIN_TESTER_WINDOW_MINUTES = 5;
|
|
30
|
+
/** The sandbox TTL is 7 days; a window longer than that outlives its own fixtures. */
|
|
31
|
+
export const MAX_TESTER_WINDOW_MINUTES = 7 * 24 * 60;
|
|
32
|
+
/**
|
|
33
|
+
* Length of the testing window, in minutes.
|
|
34
|
+
*
|
|
35
|
+
* Read at call time rather than captured at module scope so a caller that sets the
|
|
36
|
+
* env var before importing a seed file still wins. Anything unparseable, non-finite
|
|
37
|
+
* or out of range falls back to the default rather than throwing: a malformed env
|
|
38
|
+
* var must not be able to brick `appkit-seed load`.
|
|
39
|
+
*/
|
|
40
|
+
export function windowMinutes() {
|
|
41
|
+
const raw = process.env.TESTER_WINDOW_MINUTES;
|
|
42
|
+
if (!raw)
|
|
43
|
+
return DEFAULT_TESTER_WINDOW_MINUTES;
|
|
44
|
+
const parsed = Number(raw);
|
|
45
|
+
if (!Number.isFinite(parsed))
|
|
46
|
+
return DEFAULT_TESTER_WINDOW_MINUTES;
|
|
47
|
+
if (parsed < MIN_TESTER_WINDOW_MINUTES)
|
|
48
|
+
return MIN_TESTER_WINDOW_MINUTES;
|
|
49
|
+
if (parsed > MAX_TESTER_WINDOW_MINUTES)
|
|
50
|
+
return MAX_TESTER_WINDOW_MINUTES;
|
|
51
|
+
return parsed;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A point `fraction` of the way through the window, measured from now.
|
|
55
|
+
*
|
|
56
|
+
* `windowOffset(0)` is now, `windowOffset(1)` is the window's end. Fractions above 1
|
|
57
|
+
* are allowed and mean "after this run" — that is how a fixture says "still open when
|
|
58
|
+
* testing finishes" without hard-coding a duration.
|
|
59
|
+
*/
|
|
60
|
+
export function windowOffset(fraction) {
|
|
61
|
+
return new Date(Date.now() + fraction * windowMinutes() * 60000);
|
|
62
|
+
}
|
|
63
|
+
/** The mirror of windowOffset, into the past — for fixtures that must already be closed. */
|
|
64
|
+
export function windowAgo(fraction) {
|
|
65
|
+
return windowOffset(-fraction);
|
|
66
|
+
}
|
|
@@ -112,7 +112,7 @@ const _rawSlides = [
|
|
|
112
112
|
// helper routes through /api/media/ext, which only serves images
|
|
113
113
|
// (rejects non-image content-type with 400). MediaVideo watermarks
|
|
114
114
|
// video client-side instead, so the raw external URL is correct here.
|
|
115
|
-
url: "
|
|
115
|
+
url: "/demo-media/sample-video.mp4",
|
|
116
116
|
thumbnail: seedPhoto("carousel-auctions-live-20260101", 1600, 700),
|
|
117
117
|
dimOverlay: { enabled: true, opacity: 0.5 },
|
|
118
118
|
},
|
|
@@ -457,7 +457,7 @@ const _rawProductsStandardSeedData = [
|
|
|
457
457
|
seedPhoto("product-image-beyblade-original-dragoon-f-video-demo-2-20260819", 900, 900),
|
|
458
458
|
],
|
|
459
459
|
video: {
|
|
460
|
-
url: "
|
|
460
|
+
url: "/demo-media/sample-video.mp4",
|
|
461
461
|
thumbnailUrl: seedPhoto("product-video-thumb-beyblade-original-dragoon-f-video-demo-20260819", 800, 450),
|
|
462
462
|
duration: 15,
|
|
463
463
|
},
|
|
@@ -490,7 +490,7 @@ const _rawProductsStandardSeedData = [
|
|
|
490
490
|
seedPhoto("product-image-beyblade-x-dran-sword-video-demo-2-20260819", 900, 900),
|
|
491
491
|
],
|
|
492
492
|
video: {
|
|
493
|
-
url: "
|
|
493
|
+
url: "/demo-media/sample-video.mp4",
|
|
494
494
|
thumbnailUrl: seedPhoto("product-video-thumb-beyblade-x-dran-sword-video-demo-20260819", 800, 450),
|
|
495
495
|
duration: 20,
|
|
496
496
|
},
|
|
@@ -21,7 +21,12 @@ const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
|
|
|
21
21
|
// Public, direct-playable sample MP4 — review.video.url renders through a raw
|
|
22
22
|
// <video src> element (ReviewDetailShell.tsx), NOT the /api/media/ext image
|
|
23
23
|
// proxy, so it must stay an unwrapped external URL (never seedExtMedia()).
|
|
24
|
-
|
|
24
|
+
// Local fixture, not a third-party URL. The Google sample-video bucket these all
|
|
25
|
+
// pointed at now returns 403 (measured 2026-09-05), so every seeded video was a
|
|
26
|
+
// dead link and any case testing playback failed for a reason that is not a bug
|
|
27
|
+
// here. Generated/committed by tester/scripts/make-media-fixtures.mjs.
|
|
28
|
+
// Stays raw and unwrapped: /api/media/ext is image-only (Root Cause #27).
|
|
29
|
+
const SAMPLE_VIDEO_URL = "/demo-media/sample-video.mp4";
|
|
25
30
|
const reviewTemplates = [
|
|
26
31
|
{ title: "Excellent quality and fast shipping!", comment: "Received exactly as described. Item is in perfect condition. Will buy again!", rating: 5 },
|
|
27
32
|
{ title: "Good condition, minor wear", comment: "Arrived safely but has slight edge wear. Still happy with the purchase overall.", rating: 4 },
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* WHY: Provides
|
|
3
|
-
* WHAT: Exports
|
|
4
|
-
* is also the dedicated isTester QA account), 15 buyers
|
|
2
|
+
* WHY: Provides 21 seed user accounts covering all marketplace roles and demographics.
|
|
3
|
+
* WHAT: Exports 21 UserDocument partials — 1 admin, 2 sellers (store owners, one of which
|
|
4
|
+
* is also the dedicated isTester QA account), 15 buyers, 1 automated tester
|
|
5
|
+
* (`user-claude-tester`, isBot), and 2 employees on contrasting permission presets.
|
|
5
6
|
* All passwords are TempPass123! in the Firebase Auth emulator. UIDs match slugs.
|
|
6
7
|
*
|
|
8
|
+
* 🛑 seed-cli sets that password ONLY when it creates the Auth record. A re-seed
|
|
9
|
+
* never resets an existing password, so an account whose password was changed
|
|
10
|
+
* stays changed and must be reset explicitly.
|
|
11
|
+
*
|
|
7
12
|
* EXPORTS:
|
|
8
|
-
* usersSeedData — array of
|
|
13
|
+
* usersSeedData — array of 21 Partial<UserDocument> objects for the seed runner
|
|
9
14
|
*
|
|
10
15
|
* @tag domain:users,auth
|
|
11
16
|
* @tag layer:seed
|
|
@@ -15,6 +20,7 @@
|
|
|
15
20
|
* @tag sideEffects:none
|
|
16
21
|
*/
|
|
17
22
|
import { getDefaultPhonePrefix } from "./seed-market-config";
|
|
23
|
+
import { PERMISSION_GROUPS } from "../features/auth/permissions/constants";
|
|
18
24
|
import { USER_FIELDS } from "../constants/field-names";
|
|
19
25
|
import { seedPhoto } from "./_helpers/media";
|
|
20
26
|
const _ph = getDefaultPhonePrefix();
|
|
@@ -522,4 +528,101 @@ export const usersSeedData = [
|
|
|
522
528
|
createdAt: daysAgo(1),
|
|
523
529
|
updatedAt: daysAgo(1),
|
|
524
530
|
},
|
|
531
|
+
// ── Automated tester (the Claude-driven checklist runner answers as this account) ──
|
|
532
|
+
// `canTestAdmin` is REQUIRED, not decorative: 116 checklist cases are adminOnly and
|
|
533
|
+
// GET/PUT /api/user/tester-checklist 404s them for a caller without it, so the runner
|
|
534
|
+
// would silently see a shorter catalog than a human tester does.
|
|
535
|
+
// `isBot` keeps it off the public Bug Hunters leaderboard — see getBugHunterLeaderboard().
|
|
536
|
+
{
|
|
537
|
+
uid: "user-claude-tester",
|
|
538
|
+
email: "claude-tester@letitrip.in",
|
|
539
|
+
phoneNumber: `${_ph}9999900019`,
|
|
540
|
+
phoneVerified: true,
|
|
541
|
+
displayName: "Claude (automated)",
|
|
542
|
+
photoURL: seedPhoto("user-avatar-claude-tester-20260101", 400, 400),
|
|
543
|
+
role: USER_FIELDS.ROLE_VALUES.SELLER,
|
|
544
|
+
isTester: true,
|
|
545
|
+
canTestAdmin: true,
|
|
546
|
+
isBot: true,
|
|
547
|
+
emailVerified: true,
|
|
548
|
+
disabled: false,
|
|
549
|
+
storeId: "store-tester-qa-seller",
|
|
550
|
+
storeSlug: "store-tester-qa-seller",
|
|
551
|
+
storeStatus: "approved",
|
|
552
|
+
publicProfile: {
|
|
553
|
+
isPublic: false,
|
|
554
|
+
showEmail: false,
|
|
555
|
+
showPhone: false,
|
|
556
|
+
showOrders: false,
|
|
557
|
+
showWishlist: false,
|
|
558
|
+
bio: "Automated tester. Works the tester checklist against a freshly seeded catalog and records a verdict per case.",
|
|
559
|
+
location: "Bengaluru, Karnataka",
|
|
560
|
+
},
|
|
561
|
+
stats: { totalOrders: 0, auctionsWon: 0, itemsSold: 0, reviewsCount: 0 },
|
|
562
|
+
metadata: { lastSignInTime: daysAgo(1), creationTime: daysAgo(1).toISOString(), loginCount: 1 },
|
|
563
|
+
createdAt: daysAgo(1),
|
|
564
|
+
updatedAt: daysAgo(1),
|
|
565
|
+
},
|
|
566
|
+
// ── Employees: two contrasting permission presets ───────────────────────────
|
|
567
|
+
// These exist so the sidebar-scoping checklist cases can be tested AT ALL. Before
|
|
568
|
+
// this the seed had no `role: "employee"` account anywhere, so the case the
|
|
569
|
+
// checklist itself marks "🛑 THE BIG ONE" — an employee must see only what their
|
|
570
|
+
// permissions allow, not all 91 admin entries — had nothing to sign in as.
|
|
571
|
+
//
|
|
572
|
+
// `permissions` is the load-bearing field (it is what the RBAC checks read);
|
|
573
|
+
// `permissionGroup` is display-only. Both are set from the same preset so they
|
|
574
|
+
// cannot disagree. Two presets on purpose: one narrow, one broad — a scoping bug
|
|
575
|
+
// that happens to produce the right count for one group is caught by the other.
|
|
576
|
+
{
|
|
577
|
+
uid: "user-employee-blog",
|
|
578
|
+
email: "employee-blog@letitrip.in",
|
|
579
|
+
phoneNumber: `${_ph}9999900020`,
|
|
580
|
+
phoneVerified: true,
|
|
581
|
+
displayName: "Mock Employee 1",
|
|
582
|
+
photoURL: seedPhoto("user-avatar-employee-blog-20260101", 400, 400),
|
|
583
|
+
role: USER_FIELDS.ROLE_VALUES.EMPLOYEE,
|
|
584
|
+
permissionGroup: "blog_poster",
|
|
585
|
+
permissions: [...PERMISSION_GROUPS.blog_poster],
|
|
586
|
+
emailVerified: true,
|
|
587
|
+
disabled: false,
|
|
588
|
+
publicProfile: {
|
|
589
|
+
isPublic: false,
|
|
590
|
+
showEmail: false,
|
|
591
|
+
showPhone: false,
|
|
592
|
+
showOrders: false,
|
|
593
|
+
showWishlist: false,
|
|
594
|
+
bio: "Content employee — blog and media only.",
|
|
595
|
+
location: "Pune, Maharashtra",
|
|
596
|
+
},
|
|
597
|
+
stats: { totalOrders: 0, auctionsWon: 0, itemsSold: 0, reviewsCount: 0 },
|
|
598
|
+
metadata: { lastSignInTime: daysAgo(2), creationTime: daysAgo(30).toISOString(), loginCount: 12 },
|
|
599
|
+
createdAt: daysAgo(30),
|
|
600
|
+
updatedAt: daysAgo(2),
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
uid: "user-employee-trust",
|
|
604
|
+
email: "employee-trust@letitrip.in",
|
|
605
|
+
phoneNumber: `${_ph}9999900021`,
|
|
606
|
+
phoneVerified: true,
|
|
607
|
+
displayName: "Mock Employee 2",
|
|
608
|
+
photoURL: seedPhoto("user-avatar-employee-trust-20260101", 400, 400),
|
|
609
|
+
role: USER_FIELDS.ROLE_VALUES.EMPLOYEE,
|
|
610
|
+
permissionGroup: "trust_and_safety",
|
|
611
|
+
permissions: [...PERMISSION_GROUPS.trust_and_safety],
|
|
612
|
+
emailVerified: true,
|
|
613
|
+
disabled: false,
|
|
614
|
+
publicProfile: {
|
|
615
|
+
isPublic: false,
|
|
616
|
+
showEmail: false,
|
|
617
|
+
showPhone: false,
|
|
618
|
+
showOrders: false,
|
|
619
|
+
showWishlist: false,
|
|
620
|
+
bio: "Trust & Safety employee — users, bans, reviews and reports.",
|
|
621
|
+
location: "Chennai, Tamil Nadu",
|
|
622
|
+
},
|
|
623
|
+
stats: { totalOrders: 0, auctionsWon: 0, itemsSold: 0, reviewsCount: 0 },
|
|
624
|
+
metadata: { lastSignInTime: daysAgo(2), creationTime: daysAgo(60).toISOString(), loginCount: 40 },
|
|
625
|
+
createdAt: daysAgo(60),
|
|
626
|
+
updatedAt: daysAgo(2),
|
|
627
|
+
},
|
|
525
628
|
];
|
package/package.json
CHANGED
package/scripts/seed-cli.mjs
CHANGED
|
@@ -182,6 +182,7 @@ const {
|
|
|
182
182
|
categoriesSeedData, storesSeedData, sessionsSeedData,
|
|
183
183
|
productsStandardSeedData, productsAuctionsSeedData, productsPreordersSeedData,
|
|
184
184
|
productsPrizeDrawsSeedData, productsClassifiedsSeedData, productsDigitalCodesSeedData, productsLiveItemsSeedData,
|
|
185
|
+
productsArtSeedData, productsStickersSeedData,
|
|
185
186
|
ordersSeedData, reviewsSeedData, cartsSeedData, bidsSeedData,
|
|
186
187
|
couponsSeedData, couponUsageSeedData,
|
|
187
188
|
eventsSeedData, eventEntriesSeedData, payoutsSeedData,
|
|
@@ -262,6 +263,11 @@ const SEED_DATA_MAP = {
|
|
|
262
263
|
products: [
|
|
263
264
|
...(productsStandardSeedData || []), ...(productsAuctionsSeedData || []), ...(productsPreordersSeedData || []),
|
|
264
265
|
...(productsPrizeDrawsSeedData || []), ...(productsClassifiedsSeedData || []), ...(productsDigitalCodesSeedData || []), ...(productsLiveItemsSeedData || []),
|
|
266
|
+
// art + stickers were written, exported from the seed barrel, and then never
|
|
267
|
+
// spread here — so 13 fixtures had NEVER reached the database, /art and
|
|
268
|
+
// /stickers were permanently empty, and listingType=art|stickers returned 0.
|
|
269
|
+
// Root Cause #58's family one layer down: added everywhere except the runner.
|
|
270
|
+
...(productsArtSeedData || []), ...(productsStickersSeedData || []),
|
|
265
271
|
...(productsTesterSeedData || []),
|
|
266
272
|
],
|
|
267
273
|
orders: [...(ordersSeedData || []), ...(ordersTesterSeedData || [])],
|