@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.
Files changed (248) hide show
  1. package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +32 -2
  2. package/dist/_internal/server/features/seo/sitemap.js +2 -2
  3. package/dist/_internal/server/functions/scheduled.d.ts +1 -2
  4. package/dist/_internal/server/functions/scheduled.js +8 -9
  5. package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +15 -0
  6. package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +15 -6
  7. package/dist/_internal/server/jobs/handlers/index.d.ts +0 -1
  8. package/dist/_internal/server/jobs/handlers/index.js +0 -1
  9. package/dist/features/auth/schemas/firestore.d.ts +1 -0
  10. package/dist/features/tester/components/TesterChecklistStepRow.d.ts +9 -1
  11. package/dist/features/tester/components/TesterChecklistStepRow.js +31 -2
  12. package/dist/features/tester/components/TesterHubView.js +8 -0
  13. package/dist/features/tester/repository/tester-checklist-item.repository.d.ts +16 -1
  14. package/dist/features/tester/repository/tester-checklist-item.repository.js +32 -6
  15. package/dist/features/tester/schemas/firestore.d.ts +109 -0
  16. package/dist/features/tester/schemas/firestore.js +14 -0
  17. package/dist/features/tester/seed-data/_money-flows.d.ts +23 -0
  18. package/dist/features/tester/seed-data/_money-flows.js +430 -0
  19. package/dist/features/tester/seed-data/authored/_types.d.ts +33 -0
  20. package/dist/features/tester/seed-data/authored/_types.js +35 -0
  21. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +2 -0
  22. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +207 -0
  23. package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +2 -0
  24. package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +298 -0
  25. package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.d.ts +2 -0
  26. package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.js +33 -0
  27. package/dist/features/tester/seed-data/authored/account-auth__testing-program.d.ts +2 -0
  28. package/dist/features/tester/seed-data/authored/account-auth__testing-program.js +138 -0
  29. package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +2 -0
  30. package/dist/features/tester/seed-data/authored/addresses__address-filters.js +36 -0
  31. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +2 -0
  32. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +75 -0
  33. package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +2 -0
  34. package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +72 -0
  35. package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +2 -0
  36. package/dist/features/tester/seed-data/authored/addresses__state-picker.js +54 -0
  37. package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +2 -0
  38. package/dist/features/tester/seed-data/authored/addresses__unban-request.js +39 -0
  39. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +2 -0
  40. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +226 -0
  41. package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +2 -0
  42. package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +82 -0
  43. package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +2 -0
  44. package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +177 -0
  45. package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +2 -0
  46. package/dist/features/tester/seed-data/authored/admin__bundles.js +97 -0
  47. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +2 -0
  48. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +232 -0
  49. package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +2 -0
  50. package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +306 -0
  51. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +2 -0
  52. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +158 -0
  53. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +2 -0
  54. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +78 -0
  55. package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +2 -0
  56. package/dist/features/tester/seed-data/authored/admin__content-deletes.js +261 -0
  57. package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +2 -0
  58. package/dist/features/tester/seed-data/authored/admin__content-marketing.js +151 -0
  59. package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +2 -0
  60. package/dist/features/tester/seed-data/authored/admin__coupons.js +214 -0
  61. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +2 -0
  62. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +160 -0
  63. package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +2 -0
  64. package/dist/features/tester/seed-data/authored/admin__media-watermark.js +104 -0
  65. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +2 -0
  66. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +350 -0
  67. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +2 -0
  68. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +105 -0
  69. package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +2 -0
  70. package/dist/features/tester/seed-data/authored/admin__site-system.js +590 -0
  71. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +2 -0
  72. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +235 -0
  73. package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +2 -0
  74. package/dist/features/tester/seed-data/authored/admin__users-trust.js +569 -0
  75. package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +2 -0
  76. package/dist/features/tester/seed-data/authored/buying__bidding.js +417 -0
  77. package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +2 -0
  78. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +653 -0
  79. package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +2 -0
  80. package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +533 -0
  81. package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +2 -0
  82. package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +379 -0
  83. package/dist/features/tester/seed-data/authored/buying__cart.d.ts +2 -0
  84. package/dist/features/tester/seed-data/authored/buying__cart.js +1171 -0
  85. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +2 -0
  86. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +140 -0
  87. package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +2 -0
  88. package/dist/features/tester/seed-data/authored/buying__my-orders.js +257 -0
  89. package/dist/features/tester/seed-data/authored/buying__offers.d.ts +2 -0
  90. package/dist/features/tester/seed-data/authored/buying__offers.js +1111 -0
  91. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +2 -0
  92. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +252 -0
  93. package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +2 -0
  94. package/dist/features/tester/seed-data/authored/buying__product-detail.js +387 -0
  95. package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +2 -0
  96. package/dist/features/tester/seed-data/authored/buying__return-request.js +152 -0
  97. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +2 -0
  98. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +242 -0
  99. package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +2 -0
  100. package/dist/features/tester/seed-data/authored/buying__reviews.js +113 -0
  101. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +2 -0
  102. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +283 -0
  103. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +2 -0
  104. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +167 -0
  105. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +2 -0
  106. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +90 -0
  107. package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +2 -0
  108. package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +344 -0
  109. package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +2 -0
  110. package/dist/features/tester/seed-data/authored/community-support__public-profile.js +53 -0
  111. package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +2 -0
  112. package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +76 -0
  113. package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +2 -0
  114. package/dist/features/tester/seed-data/authored/content-discovery__blog.js +93 -0
  115. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +2 -0
  116. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +149 -0
  117. package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +2 -0
  118. package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +121 -0
  119. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +2 -0
  120. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +207 -0
  121. package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +2 -0
  122. package/dist/features/tester/seed-data/authored/content-discovery__events.js +318 -0
  123. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +2 -0
  124. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +65 -0
  125. package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +2 -0
  126. package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +147 -0
  127. package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +2 -0
  128. package/dist/features/tester/seed-data/authored/content-discovery__search.js +332 -0
  129. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +2 -0
  130. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +53 -0
  131. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +2 -0
  132. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +52 -0
  133. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +2 -0
  134. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +35 -0
  135. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +2 -0
  136. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +141 -0
  137. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +2 -0
  138. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +35 -0
  139. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +2 -0
  140. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +95 -0
  141. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +2 -0
  142. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +191 -0
  143. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +2 -0
  144. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +158 -0
  145. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +2 -0
  146. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +106 -0
  147. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +2 -0
  148. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +88 -0
  149. package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +2 -0
  150. package/dist/features/tester/seed-data/authored/design-ux__general-design.js +204 -0
  151. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +2 -0
  152. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +301 -0
  153. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +2 -0
  154. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +407 -0
  155. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +2 -0
  156. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +214 -0
  157. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +2 -0
  158. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +275 -0
  159. package/dist/features/tester/seed-data/authored/index.d.ts +2 -0
  160. package/dist/features/tester/seed-data/authored/index.js +237 -0
  161. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +2 -0
  162. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +102 -0
  163. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +2 -0
  164. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +50 -0
  165. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +2 -0
  166. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +66 -0
  167. package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +2 -0
  168. package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +115 -0
  169. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +2 -0
  170. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +136 -0
  171. package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.d.ts +2 -0
  172. package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.js +69 -0
  173. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +2 -0
  174. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +263 -0
  175. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +2 -0
  176. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +102 -0
  177. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +2 -0
  178. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +234 -0
  179. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +2 -0
  180. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +126 -0
  181. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +2 -0
  182. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +255 -0
  183. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +2 -0
  184. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +59 -0
  185. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +2 -0
  186. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +88 -0
  187. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +2 -0
  188. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +51 -0
  189. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +2 -0
  190. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +35 -0
  191. package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +2 -0
  192. package/dist/features/tester/seed-data/authored/selling__become-seller.js +94 -0
  193. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +2 -0
  194. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +107 -0
  195. package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +2 -0
  196. package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +285 -0
  197. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +2 -0
  198. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +326 -0
  199. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +2 -0
  200. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +136 -0
  201. package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +2 -0
  202. package/dist/features/tester/seed-data/authored/selling__media-limits.js +128 -0
  203. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +2 -0
  204. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +167 -0
  205. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +2 -0
  206. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +117 -0
  207. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +2 -0
  208. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +88 -0
  209. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +2 -0
  210. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +151 -0
  211. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +2 -0
  212. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +105 -0
  213. package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +2 -0
  214. package/dist/features/tester/seed-data/authored/selling__seller-guide.js +33 -0
  215. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +2 -0
  216. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +347 -0
  217. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +2 -0
  218. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +166 -0
  219. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +2 -0
  220. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +89 -0
  221. package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +2 -0
  222. package/dist/features/tester/seed-data/authored/selling__seller-orders.js +195 -0
  223. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +2 -0
  224. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +180 -0
  225. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +2 -0
  226. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +164 -0
  227. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +2 -0
  228. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +116 -0
  229. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +2 -0
  230. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +111 -0
  231. package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +2 -0
  232. package/dist/features/tester/seed-data/authored/seo__og-images.js +91 -0
  233. package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +2 -0
  234. package/dist/features/tester/seed-data/authored/seo__page-metadata.js +122 -0
  235. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +2 -0
  236. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +105 -0
  237. package/dist/features/tester/seed-data/events-tester-seed-data.js +77 -5
  238. package/dist/features/tester/seed-data/offers-tester-seed-data.js +23 -9
  239. package/dist/features/tester/seed-data/products-tester-seed-data.js +65 -49
  240. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +744 -1
  241. package/dist/features/tester/seed-data/tester-window.d.ts +25 -0
  242. package/dist/features/tester/seed-data/tester-window.js +66 -0
  243. package/dist/seed/carousel-slides-seed-data.js +1 -1
  244. package/dist/seed/products-standard-seed-data.js +2 -2
  245. package/dist/seed/reviews-seed-data.js +6 -1
  246. package/dist/seed/users-seed-data.js +107 -4
  247. package/package.json +1 -1
  248. 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: "https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4", // audit-seed-external-url-ok: raw <video> src, /api/media/ext is image-only (Root Cause #27)
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: "https://storage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4", // audit-seed-external-url-ok: raw <video> src, /api/media/ext is image-only (Root Cause #27)
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: "https://storage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4", // audit-seed-external-url-ok: raw <video> src, /api/media/ext is image-only (Root Cause #27)
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
- const SAMPLE_VIDEO_URL = "https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"; // audit-seed-external-url-ok: raw <video> src, /api/media/ext is image-only (Root Cause #27)
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 18 seed user accounts covering all marketplace roles and demographics.
3
- * WHAT: Exports 18 UserDocument partials — 1 admin, 2 sellers (store owners, one of which
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 18 Partial<UserDocument> objects for the seed runner
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mohasinac/appkit",
3
- "version": "4.34.0",
3
+ "version": "4.35.0",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -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 || [])],