@mohasinac/appkit 4.58.0 → 4.59.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 (556) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/_internal/server/jobs/handlers/messages.d.ts +1 -1
  3. package/dist/_internal/server/jobs/handlers/messages.js +1 -1
  4. package/dist/_internal/shared/types/base-document.d.ts +1 -1
  5. package/dist/constants/seed-meta.d.ts +113 -0
  6. package/dist/constants/seed-meta.js +91 -0
  7. package/dist/index.d.ts +0 -131
  8. package/dist/index.js +50 -294
  9. package/dist/server.d.ts +0 -69
  10. package/dist/server.js +0 -69
  11. package/package.json +4 -2
  12. package/scripts/seed-cli.mjs +69 -1
  13. package/dist/features/tester/seed-data/_happy-path.d.ts +0 -23
  14. package/dist/features/tester/seed-data/_happy-path.js +0 -710
  15. package/dist/features/tester/seed-data/_money-flows.d.ts +0 -23
  16. package/dist/features/tester/seed-data/_money-flows.js +0 -610
  17. package/dist/features/tester/seed-data/authored/_types.d.ts +0 -57
  18. package/dist/features/tester/seed-data/authored/_types.js +0 -35
  19. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +0 -2
  20. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +0 -226
  21. package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +0 -2
  22. package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +0 -329
  23. package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +0 -2
  24. package/dist/features/tester/seed-data/authored/addresses__address-filters.js +0 -41
  25. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +0 -2
  26. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +0 -76
  27. package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +0 -2
  28. package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +0 -78
  29. package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +0 -2
  30. package/dist/features/tester/seed-data/authored/addresses__state-picker.js +0 -59
  31. package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +0 -2
  32. package/dist/features/tester/seed-data/authored/addresses__unban-request.js +0 -77
  33. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.d.ts +0 -2
  34. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +0 -151
  35. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +0 -2
  36. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +0 -265
  37. package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +0 -2
  38. package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +0 -131
  39. package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.d.ts +0 -2
  40. package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.js +0 -143
  41. package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +0 -2
  42. package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +0 -207
  43. package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +0 -2
  44. package/dist/features/tester/seed-data/authored/admin__bundles.js +0 -144
  45. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +0 -2
  46. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +0 -265
  47. package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +0 -2
  48. package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +0 -318
  49. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +0 -2
  50. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +0 -177
  51. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +0 -2
  52. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +0 -165
  53. package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +0 -2
  54. package/dist/features/tester/seed-data/authored/admin__content-deletes.js +0 -267
  55. package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +0 -2
  56. package/dist/features/tester/seed-data/authored/admin__content-marketing.js +0 -188
  57. package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +0 -2
  58. package/dist/features/tester/seed-data/authored/admin__coupons.js +0 -215
  59. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +0 -2
  60. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +0 -202
  61. package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.d.ts +0 -2
  62. package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.js +0 -249
  63. package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +0 -2
  64. package/dist/features/tester/seed-data/authored/admin__media-watermark.js +0 -148
  65. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +0 -2
  66. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +0 -350
  67. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +0 -2
  68. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +0 -129
  69. package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +0 -2
  70. package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -586
  71. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +0 -2
  72. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +0 -260
  73. package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +0 -2
  74. package/dist/features/tester/seed-data/authored/admin__users-trust.js +0 -569
  75. package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +0 -2
  76. package/dist/features/tester/seed-data/authored/buying__bidding.js +0 -449
  77. package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +0 -2
  78. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +0 -684
  79. package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +0 -2
  80. package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +0 -546
  81. package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +0 -2
  82. package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +0 -379
  83. package/dist/features/tester/seed-data/authored/buying__cart.d.ts +0 -2
  84. package/dist/features/tester/seed-data/authored/buying__cart.js +0 -1264
  85. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +0 -2
  86. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +0 -122
  87. package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +0 -2
  88. package/dist/features/tester/seed-data/authored/buying__my-orders.js +0 -279
  89. package/dist/features/tester/seed-data/authored/buying__offers.d.ts +0 -2
  90. package/dist/features/tester/seed-data/authored/buying__offers.js +0 -1127
  91. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.d.ts +0 -2
  92. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +0 -153
  93. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +0 -2
  94. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +0 -252
  95. package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +0 -2
  96. package/dist/features/tester/seed-data/authored/buying__product-detail.js +0 -474
  97. package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +0 -2
  98. package/dist/features/tester/seed-data/authored/buying__return-request.js +0 -165
  99. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +0 -2
  100. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +0 -260
  101. package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +0 -2
  102. package/dist/features/tester/seed-data/authored/buying__reviews.js +0 -128
  103. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +0 -2
  104. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +0 -96
  105. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +0 -2
  106. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +0 -283
  107. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +0 -2
  108. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +0 -169
  109. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +0 -2
  110. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +0 -105
  111. package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +0 -2
  112. package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +0 -374
  113. package/dist/features/tester/seed-data/authored/community-support__messages.d.ts +0 -2
  114. package/dist/features/tester/seed-data/authored/community-support__messages.js +0 -200
  115. package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +0 -2
  116. package/dist/features/tester/seed-data/authored/community-support__public-profile.js +0 -54
  117. package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +0 -2
  118. package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +0 -76
  119. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +0 -4
  120. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +0 -590
  121. package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +0 -2
  122. package/dist/features/tester/seed-data/authored/content-discovery__blog.js +0 -110
  123. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +0 -2
  124. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +0 -149
  125. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.d.ts +0 -2
  126. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +0 -145
  127. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.d.ts +0 -2
  128. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +0 -174
  129. package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +0 -2
  130. package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +0 -169
  131. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.d.ts +0 -2
  132. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +0 -209
  133. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +0 -2
  134. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +0 -207
  135. package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +0 -2
  136. package/dist/features/tester/seed-data/authored/content-discovery__events.js +0 -377
  137. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +0 -2
  138. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +0 -87
  139. package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +0 -2
  140. package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +0 -147
  141. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +0 -2
  142. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +0 -209
  143. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.d.ts +0 -2
  144. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +0 -167
  145. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +0 -2
  146. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +0 -73
  147. package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +0 -2
  148. package/dist/features/tester/seed-data/authored/content-discovery__search.js +0 -363
  149. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +0 -2
  150. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +0 -340
  151. package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.d.ts +0 -2
  152. package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.js +0 -88
  153. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +0 -2
  154. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +0 -78
  155. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +0 -2
  156. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +0 -76
  157. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +0 -2
  158. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +0 -62
  159. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +0 -2
  160. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +0 -163
  161. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +0 -2
  162. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +0 -61
  163. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.d.ts +0 -2
  164. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.js +0 -89
  165. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +0 -2
  166. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +0 -95
  167. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +0 -2
  168. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +0 -191
  169. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +0 -2
  170. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +0 -158
  171. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.d.ts +0 -2
  172. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.js +0 -82
  173. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +0 -2
  174. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +0 -106
  175. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +0 -2
  176. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +0 -88
  177. package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +0 -2
  178. package/dist/features/tester/seed-data/authored/design-ux__general-design.js +0 -204
  179. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +0 -2
  180. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +0 -301
  181. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +0 -2
  182. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +0 -90
  183. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +0 -2
  184. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +0 -85
  185. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +0 -2
  186. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +0 -407
  187. package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.d.ts +0 -2
  188. package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.js +0 -88
  189. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.d.ts +0 -2
  190. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.js +0 -84
  191. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +0 -2
  192. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +0 -214
  193. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +0 -2
  194. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +0 -275
  195. package/dist/features/tester/seed-data/authored/index.d.ts +0 -2
  196. package/dist/features/tester/seed-data/authored/index.js +0 -301
  197. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +0 -2
  198. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +0 -125
  199. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +0 -2
  200. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +0 -85
  201. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +0 -2
  202. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +0 -92
  203. package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +0 -2
  204. package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +0 -115
  205. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +0 -2
  206. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +0 -137
  207. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +0 -2
  208. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +0 -263
  209. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +0 -2
  210. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +0 -229
  211. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +0 -2
  212. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +0 -325
  213. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +0 -2
  214. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +0 -126
  215. package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.d.ts +0 -2
  216. package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.js +0 -141
  217. package/dist/features/tester/seed-data/authored/public-pages__store-tabs.d.ts +0 -2
  218. package/dist/features/tester/seed-data/authored/public-pages__store-tabs.js +0 -115
  219. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +0 -2
  220. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +0 -253
  221. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +0 -2
  222. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +0 -93
  223. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +0 -3
  224. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +0 -185
  225. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +0 -2
  226. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +0 -82
  227. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +0 -2
  228. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +0 -60
  229. package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +0 -2
  230. package/dist/features/tester/seed-data/authored/selling__become-seller.js +0 -117
  231. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.d.ts +0 -2
  232. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +0 -148
  233. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +0 -2
  234. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +0 -108
  235. package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +0 -2
  236. package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +0 -274
  237. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.d.ts +0 -2
  238. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +0 -145
  239. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +0 -2
  240. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +0 -336
  241. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +0 -2
  242. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +0 -136
  243. package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +0 -2
  244. package/dist/features/tester/seed-data/authored/selling__media-limits.js +0 -135
  245. package/dist/features/tester/seed-data/authored/selling__product-upload-details.d.ts +0 -2
  246. package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +0 -155
  247. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.d.ts +0 -2
  248. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.js +0 -138
  249. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +0 -2
  250. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +0 -191
  251. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +0 -2
  252. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +0 -138
  253. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +0 -2
  254. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +0 -106
  255. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +0 -2
  256. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +0 -192
  257. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +0 -2
  258. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +0 -109
  259. package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +0 -2
  260. package/dist/features/tester/seed-data/authored/selling__seller-guide.js +0 -34
  261. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +0 -2
  262. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +0 -348
  263. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +0 -2
  264. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +0 -87
  265. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +0 -2
  266. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +0 -90
  267. package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.d.ts +0 -2
  268. package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.js +0 -85
  269. package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +0 -2
  270. package/dist/features/tester/seed-data/authored/selling__seller-orders.js +0 -213
  271. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +0 -2
  272. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +0 -192
  273. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +0 -2
  274. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +0 -77
  275. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +0 -2
  276. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +0 -165
  277. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +0 -2
  278. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +0 -116
  279. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +0 -2
  280. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +0 -127
  281. package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +0 -2
  282. package/dist/features/tester/seed-data/authored/seo__og-images.js +0 -107
  283. package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +0 -2
  284. package/dist/features/tester/seed-data/authored/seo__page-metadata.js +0 -120
  285. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +0 -2
  286. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +0 -105
  287. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +0 -2
  288. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +0 -58
  289. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +0 -2
  290. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +0 -284
  291. package/dist/features/tester/seed-data/index.d.ts +0 -2
  292. package/dist/features/tester/seed-data/index.js +0 -2
  293. package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +0 -2
  294. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +0 -7601
  295. package/dist/features/tester/seed-data/tester-responses-seed-data.d.ts +0 -2
  296. package/dist/features/tester/seed-data/tester-responses-seed-data.js +0 -95
  297. package/dist/features/tester/seed-data/tester-window.d.ts +0 -25
  298. package/dist/features/tester/seed-data/tester-window.js +0 -66
  299. package/dist/seed/_helpers/brand-rows.d.ts +0 -35
  300. package/dist/seed/_helpers/brand-rows.js +0 -600
  301. package/dist/seed/_helpers/category-content-generated.d.ts +0 -24
  302. package/dist/seed/_helpers/category-content-generated.js +0 -1853
  303. package/dist/seed/_helpers/category-content.d.ts +0 -68
  304. package/dist/seed/_helpers/category-content.js +0 -731
  305. package/dist/seed/_helpers/category-forest.d.ts +0 -4
  306. package/dist/seed/_helpers/category-forest.js +0 -824
  307. package/dist/seed/_helpers/category-images-generated.d.ts +0 -57
  308. package/dist/seed/_helpers/category-images-generated.js +0 -618
  309. package/dist/seed/_helpers/category-models/chunk0.d.ts +0 -2
  310. package/dist/seed/_helpers/category-models/chunk0.js +0 -2648
  311. package/dist/seed/_helpers/category-models/chunk1.d.ts +0 -2
  312. package/dist/seed/_helpers/category-models/chunk1.js +0 -2318
  313. package/dist/seed/_helpers/category-models/chunk2.d.ts +0 -2
  314. package/dist/seed/_helpers/category-models/chunk2.js +0 -2560
  315. package/dist/seed/_helpers/category-models/chunk3.d.ts +0 -2
  316. package/dist/seed/_helpers/category-models/chunk3.js +0 -2196
  317. package/dist/seed/_helpers/category-models/chunk4.d.ts +0 -2
  318. package/dist/seed/_helpers/category-models/chunk4.js +0 -1732
  319. package/dist/seed/_helpers/category-models.d.ts +0 -12
  320. package/dist/seed/_helpers/category-models.js +0 -45
  321. package/dist/seed/_helpers/category-names.d.ts +0 -54
  322. package/dist/seed/_helpers/category-names.js +0 -118
  323. package/dist/seed/_helpers/category-parts-glossary-map.d.ts +0 -1
  324. package/dist/seed/_helpers/category-parts-glossary-map.js +0 -2499
  325. package/dist/seed/_helpers/category-parts.d.ts +0 -9
  326. package/dist/seed/_helpers/category-parts.js +0 -15022
  327. package/dist/seed/_helpers/category-tree.d.ts +0 -27
  328. package/dist/seed/_helpers/category-tree.js +0 -119
  329. package/dist/seed/_helpers/character-features.d.ts +0 -10
  330. package/dist/seed/_helpers/character-features.js +0 -120
  331. package/dist/seed/_helpers/final-sale-fixtures.d.ts +0 -35
  332. package/dist/seed/_helpers/final-sale-fixtures.js +0 -61
  333. package/dist/seed/_helpers/franchise-rows.d.ts +0 -43
  334. package/dist/seed/_helpers/franchise-rows.js +0 -189
  335. package/dist/seed/_helpers/media.d.ts +0 -67
  336. package/dist/seed/_helpers/media.js +0 -172
  337. package/dist/seed/_helpers/part-colours-generated.d.ts +0 -18
  338. package/dist/seed/_helpers/part-colours-generated.js +0 -273
  339. package/dist/seed/_helpers/product-search-txt.d.ts +0 -18
  340. package/dist/seed/_helpers/product-search-txt.js +0 -23
  341. package/dist/seed/_helpers/search-txt-wrappers.d.ts +0 -26
  342. package/dist/seed/_helpers/search-txt-wrappers.js +0 -58
  343. package/dist/seed/addresses-seed-data.d.ts +0 -2
  344. package/dist/seed/addresses-seed-data.js +0 -78
  345. package/dist/seed/authenticity-knowledge-seed-data.d.ts +0 -78
  346. package/dist/seed/authenticity-knowledge-seed-data.js +0 -10729
  347. package/dist/seed/bey-products-seed-data.d.ts +0 -18
  348. package/dist/seed/bey-products-seed-data.js +0 -18011
  349. package/dist/seed/beys/chunk0.d.ts +0 -17
  350. package/dist/seed/beys/chunk0.js +0 -36733
  351. package/dist/seed/beys/chunk1.d.ts +0 -17
  352. package/dist/seed/beys/chunk1.js +0 -35728
  353. package/dist/seed/beys/chunk2.d.ts +0 -17
  354. package/dist/seed/beys/chunk2.js +0 -35857
  355. package/dist/seed/beys/chunk3.d.ts +0 -17
  356. package/dist/seed/beys/chunk3.js +0 -34476
  357. package/dist/seed/beys-seed-data.d.ts +0 -18
  358. package/dist/seed/beys-seed-data.js +0 -11
  359. package/dist/seed/bids-seed-data.d.ts +0 -2
  360. package/dist/seed/bids-seed-data.js +0 -206
  361. package/dist/seed/blog-posts-seed-data.d.ts +0 -6
  362. package/dist/seed/blog-posts-seed-data.js +0 -442
  363. package/dist/seed/carousel-slides-seed-data.d.ts +0 -2
  364. package/dist/seed/carousel-slides-seed-data.js +0 -411
  365. package/dist/seed/carousels-seed-data.d.ts +0 -2
  366. package/dist/seed/carousels-seed-data.js +0 -36
  367. package/dist/seed/cart-seed-data.d.ts +0 -2
  368. package/dist/seed/cart-seed-data.js +0 -241
  369. package/dist/seed/catalogue-seed-data.d.ts +0 -2
  370. package/dist/seed/catalogue-seed-data.js +0 -112
  371. package/dist/seed/categories-seed-data.d.ts +0 -3
  372. package/dist/seed/categories-seed-data.js +0 -816
  373. package/dist/seed/claimed-coupons-seed-data.d.ts +0 -2
  374. package/dist/seed/claimed-coupons-seed-data.js +0 -85
  375. package/dist/seed/coupon-usage-seed-data.d.ts +0 -9
  376. package/dist/seed/coupon-usage-seed-data.js +0 -55
  377. package/dist/seed/coupons-seed-data.d.ts +0 -2
  378. package/dist/seed/coupons-seed-data.js +0 -226
  379. package/dist/seed/defaults/categories.d.ts +0 -2
  380. package/dist/seed/defaults/categories.js +0 -12
  381. package/dist/seed/defaults/faqs.d.ts +0 -2
  382. package/dist/seed/defaults/faqs.js +0 -40
  383. package/dist/seed/events-seed-data.d.ts +0 -7
  384. package/dist/seed/events-seed-data.js +0 -482
  385. package/dist/seed/factories/address.factory.d.ts +0 -21
  386. package/dist/seed/factories/address.factory.js +0 -44
  387. package/dist/seed/factories/bid.factory.d.ts +0 -15
  388. package/dist/seed/factories/bid.factory.js +0 -33
  389. package/dist/seed/factories/blog-post.factory.d.ts +0 -15
  390. package/dist/seed/factories/blog-post.factory.js +0 -22
  391. package/dist/seed/factories/carousel.factory.d.ts +0 -11
  392. package/dist/seed/factories/carousel.factory.js +0 -17
  393. package/dist/seed/factories/cart.factory.d.ts +0 -25
  394. package/dist/seed/factories/cart.factory.js +0 -35
  395. package/dist/seed/factories/category.factory.d.ts +0 -11
  396. package/dist/seed/factories/category.factory.js +0 -16
  397. package/dist/seed/factories/coupon.factory.d.ts +0 -21
  398. package/dist/seed/factories/coupon.factory.js +0 -43
  399. package/dist/seed/factories/faq.factory.d.ts +0 -10
  400. package/dist/seed/factories/faq.factory.js +0 -15
  401. package/dist/seed/factories/notification.factory.d.ts +0 -18
  402. package/dist/seed/factories/notification.factory.js +0 -39
  403. package/dist/seed/factories/order.factory.d.ts +0 -20
  404. package/dist/seed/factories/order.factory.js +0 -20
  405. package/dist/seed/factories/payout.factory.d.ts +0 -21
  406. package/dist/seed/factories/payout.factory.js +0 -38
  407. package/dist/seed/factories/product.factory.d.ts +0 -27
  408. package/dist/seed/factories/product.factory.js +0 -80
  409. package/dist/seed/factories/review.factory.d.ts +0 -14
  410. package/dist/seed/factories/review.factory.js +0 -52
  411. package/dist/seed/factories/session.factory.d.ts +0 -15
  412. package/dist/seed/factories/session.factory.js +0 -31
  413. package/dist/seed/factories/store.factory.d.ts +0 -23
  414. package/dist/seed/factories/store.factory.js +0 -47
  415. package/dist/seed/factories/user.factory.d.ts +0 -19
  416. package/dist/seed/factories/user.factory.js +0 -56
  417. package/dist/seed/faq-seed-data.d.ts +0 -18
  418. package/dist/seed/faq-seed-data.js +0 -1956
  419. package/dist/seed/firestore-indexes.d.ts +0 -12
  420. package/dist/seed/firestore-indexes.js +0 -31
  421. package/dist/seed/grouped-listings-seed-data.d.ts +0 -2
  422. package/dist/seed/grouped-listings-seed-data.js +0 -283
  423. package/dist/seed/history-seed-data.d.ts +0 -12
  424. package/dist/seed/history-seed-data.js +0 -70
  425. package/dist/seed/homepage-sections-seed-data.d.ts +0 -2
  426. package/dist/seed/homepage-sections-seed-data.js +0 -1034
  427. package/dist/seed/index.d.ts +0 -100
  428. package/dist/seed/index.js +0 -115
  429. package/dist/seed/lottery-entries-seed-data.d.ts +0 -2
  430. package/dist/seed/lottery-entries-seed-data.js +0 -108
  431. package/dist/seed/manifest.d.ts +0 -16
  432. package/dist/seed/manifest.js +0 -235
  433. package/dist/seed/media-assets-seed-data.d.ts +0 -22
  434. package/dist/seed/media-assets-seed-data.js +0 -5593
  435. package/dist/seed/model-composition-seed-data.d.ts +0 -15
  436. package/dist/seed/model-composition-seed-data.js +0 -9032
  437. package/dist/seed/notifications-seed-data.d.ts +0 -2
  438. package/dist/seed/notifications-seed-data.js +0 -606
  439. package/dist/seed/offers-seed-data.d.ts +0 -2
  440. package/dist/seed/offers-seed-data.js +0 -398
  441. package/dist/seed/orders-seed-data.d.ts +0 -2
  442. package/dist/seed/orders-seed-data.js +0 -845
  443. package/dist/seed/part-glossary/chunk0.d.ts +0 -9
  444. package/dist/seed/part-glossary/chunk0.js +0 -35448
  445. package/dist/seed/part-glossary/chunk1.d.ts +0 -9
  446. package/dist/seed/part-glossary/chunk1.js +0 -40494
  447. package/dist/seed/part-glossary/chunk2.d.ts +0 -9
  448. package/dist/seed/part-glossary/chunk2.js +0 -51242
  449. package/dist/seed/part-glossary/chunk3.d.ts +0 -9
  450. package/dist/seed/part-glossary/chunk3.js +0 -53337
  451. package/dist/seed/part-glossary/chunk4.d.ts +0 -9
  452. package/dist/seed/part-glossary/chunk4.js +0 -51454
  453. package/dist/seed/part-glossary-seed-data.d.ts +0 -15
  454. package/dist/seed/part-glossary-seed-data.js +0 -25
  455. package/dist/seed/payouts-seed-data.d.ts +0 -2
  456. package/dist/seed/payouts-seed-data.js +0 -302
  457. package/dist/seed/product-features-seed-data.d.ts +0 -3
  458. package/dist/seed/product-features-seed-data.js +0 -366
  459. package/dist/seed/products-art-seed-data.d.ts +0 -2
  460. package/dist/seed/products-art-seed-data.js +0 -289
  461. package/dist/seed/products-auctions-seed-data.d.ts +0 -2
  462. package/dist/seed/products-auctions-seed-data.js +0 -475
  463. package/dist/seed/products-beyblade-x-seed-data.d.ts +0 -2
  464. package/dist/seed/products-beyblade-x-seed-data.js +0 -476
  465. package/dist/seed/products-catalogue/chunk0.d.ts +0 -12
  466. package/dist/seed/products-catalogue/chunk0.js +0 -7262
  467. package/dist/seed/products-catalogue/chunk1.d.ts +0 -12
  468. package/dist/seed/products-catalogue/chunk1.js +0 -7290
  469. package/dist/seed/products-catalogue/chunk10.d.ts +0 -12
  470. package/dist/seed/products-catalogue/chunk10.js +0 -7290
  471. package/dist/seed/products-catalogue/chunk11.d.ts +0 -12
  472. package/dist/seed/products-catalogue/chunk11.js +0 -7005
  473. package/dist/seed/products-catalogue/chunk12.d.ts +0 -12
  474. package/dist/seed/products-catalogue/chunk12.js +0 -7002
  475. package/dist/seed/products-catalogue/chunk13.d.ts +0 -12
  476. package/dist/seed/products-catalogue/chunk13.js +0 -7002
  477. package/dist/seed/products-catalogue/chunk14.d.ts +0 -12
  478. package/dist/seed/products-catalogue/chunk14.js +0 -7002
  479. package/dist/seed/products-catalogue/chunk15.d.ts +0 -12
  480. package/dist/seed/products-catalogue/chunk15.js +0 -7002
  481. package/dist/seed/products-catalogue/chunk16.d.ts +0 -12
  482. package/dist/seed/products-catalogue/chunk16.js +0 -7002
  483. package/dist/seed/products-catalogue/chunk17.d.ts +0 -12
  484. package/dist/seed/products-catalogue/chunk17.js +0 -7002
  485. package/dist/seed/products-catalogue/chunk18.d.ts +0 -12
  486. package/dist/seed/products-catalogue/chunk18.js +0 -4398
  487. package/dist/seed/products-catalogue/chunk2.d.ts +0 -12
  488. package/dist/seed/products-catalogue/chunk2.js +0 -7268
  489. package/dist/seed/products-catalogue/chunk3.d.ts +0 -12
  490. package/dist/seed/products-catalogue/chunk3.js +0 -7264
  491. package/dist/seed/products-catalogue/chunk4.d.ts +0 -12
  492. package/dist/seed/products-catalogue/chunk4.js +0 -7268
  493. package/dist/seed/products-catalogue/chunk5.d.ts +0 -12
  494. package/dist/seed/products-catalogue/chunk5.js +0 -7258
  495. package/dist/seed/products-catalogue/chunk6.d.ts +0 -12
  496. package/dist/seed/products-catalogue/chunk6.js +0 -7268
  497. package/dist/seed/products-catalogue/chunk7.d.ts +0 -12
  498. package/dist/seed/products-catalogue/chunk7.js +0 -7311
  499. package/dist/seed/products-catalogue/chunk8.d.ts +0 -12
  500. package/dist/seed/products-catalogue/chunk8.js +0 -7304
  501. package/dist/seed/products-catalogue/chunk9.d.ts +0 -12
  502. package/dist/seed/products-catalogue/chunk9.js +0 -7309
  503. package/dist/seed/products-catalogue-seed-data.d.ts +0 -2
  504. package/dist/seed/products-catalogue-seed-data.js +0 -60
  505. package/dist/seed/products-classifieds-seed-data.d.ts +0 -7
  506. package/dist/seed/products-classifieds-seed-data.js +0 -435
  507. package/dist/seed/products-digital-codes-seed-data.d.ts +0 -7
  508. package/dist/seed/products-digital-codes-seed-data.js +0 -395
  509. package/dist/seed/products-live-items-seed-data.d.ts +0 -7
  510. package/dist/seed/products-live-items-seed-data.js +0 -269
  511. package/dist/seed/products-preorders-seed-data.d.ts +0 -2
  512. package/dist/seed/products-preorders-seed-data.js +0 -360
  513. package/dist/seed/products-prize-draws-seed-data.d.ts +0 -7
  514. package/dist/seed/products-prize-draws-seed-data.js +0 -427
  515. package/dist/seed/products-spares-seed-data.d.ts +0 -2
  516. package/dist/seed/products-spares-seed-data.js +0 -368
  517. package/dist/seed/products-standard-seed-data.d.ts +0 -2
  518. package/dist/seed/products-standard-seed-data.js +0 -632
  519. package/dist/seed/products-stickers-seed-data.d.ts +0 -2
  520. package/dist/seed/products-stickers-seed-data.js +0 -319
  521. package/dist/seed/reviews-seed-data.d.ts +0 -1
  522. package/dist/seed/reviews-seed-data.js +0 -185
  523. package/dist/seed/runner.d.ts +0 -2
  524. package/dist/seed/runner.js +0 -125
  525. package/dist/seed/scammers-seed-data.d.ts +0 -2
  526. package/dist/seed/scammers-seed-data.js +0 -235
  527. package/dist/seed/seed-market-config.d.ts +0 -48
  528. package/dist/seed/seed-market-config.js +0 -199
  529. package/dist/seed/seed-purpose.d.ts +0 -299
  530. package/dist/seed/seed-purpose.js +0 -440
  531. package/dist/seed/sessions-seed-data.d.ts +0 -3
  532. package/dist/seed/sessions-seed-data.js +0 -116
  533. package/dist/seed/shipments-seed-data.d.ts +0 -5
  534. package/dist/seed/shipments-seed-data.js +0 -185
  535. package/dist/seed/site-settings-seed-data.d.ts +0 -2
  536. package/dist/seed/site-settings-seed-data.js +0 -1069
  537. package/dist/seed/store-addresses-seed-data.d.ts +0 -18
  538. package/dist/seed/store-addresses-seed-data.js +0 -71
  539. package/dist/seed/store-extensions-seed-data.d.ts +0 -11
  540. package/dist/seed/store-extensions-seed-data.js +0 -292
  541. package/dist/seed/stores-seed-data.d.ts +0 -6
  542. package/dist/seed/stores-seed-data.js +0 -242
  543. package/dist/seed/support-tickets-seed-data.d.ts +0 -16
  544. package/dist/seed/support-tickets-seed-data.js +0 -239
  545. package/dist/seed/tax-codes-seed-data.d.ts +0 -34
  546. package/dist/seed/tax-codes-seed-data.js +0 -100
  547. package/dist/seed/test-data-ttl.d.ts +0 -29
  548. package/dist/seed/test-data-ttl.js +0 -31
  549. package/dist/seed/test-utils.d.ts +0 -49
  550. package/dist/seed/test-utils.js +0 -110
  551. package/dist/seed/types.d.ts +0 -89
  552. package/dist/seed/types.js +0 -15
  553. package/dist/seed/users-seed-data.d.ts +0 -2
  554. package/dist/seed/users-seed-data.js +0 -597
  555. package/dist/seed/wishlists-seed-data.d.ts +0 -12
  556. package/dist/seed/wishlists-seed-data.js +0 -54
@@ -1,319 +0,0 @@
1
- /*
2
- * WHY: `listingType: "stickers"` shares ProductPrintMeta (size/material/finish/editionSize)
3
- * with "art" — both printed-only physical goods. Previously left as an empty stub,
4
- * but sticker sheets fit the Beyblade theme naturally (see CLAUDE.md seed-data
5
- * blandness sweep, 2026-08-20 session).
6
- * WHAT: Exports 6 Beyblade sticker-sheet listings on Beyblade Arena, varying size,
7
- * material, and finish (including a holographic variant and a die-cut vinyl set).
8
- *
9
- * EXPORTS:
10
- * productsStickersSeedData — Array of 6 Partial<ProductDocument> with listingType:"stickers"
11
- *
12
- * @tag domain:products,stickers
13
- * @tag layer:seed
14
- * @tag pattern:none
15
- * @tag access:server-only
16
- * @tag consumers:seed/index.ts,seed/runner.ts
17
- * @tag sideEffects:none
18
- */
19
- import { PRODUCT_FIELDS } from "../constants/field-names.js";
20
- import { buildSearchTxt } from "../utils/search-txt.js";
21
- import { seedPhoto, seedGallery } from "./_helpers/media.js";
22
- import { withFinalSale } from "./_helpers/final-sale-fixtures.js";
23
- import { withDerivedCategoryNames } from "./_helpers/category-names.js";
24
- const _rawProductsStickersSeedData = [
25
- {
26
- id: "sticker-beyblade-original-classic-sheet",
27
- slug: "sticker-beyblade-original-classic-sheet",
28
- title: "Beyblade Original Classic — Sticker Sheet",
29
- description: "A 5x5 cm sticker sheet featuring Dranzer, Driger, Draciel, and Dragoon in classic original-series art style.",
30
- categorySlugs: ["category-original-plastic-gen", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
31
- categoryNames: ["Plastic Generation", "Original Tops", "Beyblade Original", "Spinning Tops"],
32
- brandSlug: "brand-beyblade",
33
- brand: "Beyblade",
34
- price: 149,
35
- currency: "INR",
36
- stockQuantity: 100,
37
- availableQuantity: 100,
38
- isSold: false,
39
- mainImage: seedPhoto("stickers-image-original-classic-1-20260817", 900, 900),
40
- images: seedGallery(seedPhoto("stickers-image-original-classic-1-20260817", 900, 900)),
41
- status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
42
- condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
43
- listingType: "stickers",
44
- storeId: "store-beyblade-arena",
45
- storeName: "Beyblade Arena",
46
- printMeta: { size: "5x5 cm sheet", material: "Vinyl", finish: "Glossy" },
47
- customFields: [],
48
- customSections: [],
49
- featured: false,
50
- isPromoted: false,
51
- isOnSale: false,
52
- tags: ["stickers", "vintage-collectible"],
53
- createdAt: new Date("2026-08-17"),
54
- updatedAt: new Date("2026-08-17"),
55
- searchTxt: buildSearchTxt([
56
- "Beyblade Original Classic — Sticker Sheet",
57
- "5x5 cm sticker sheet featuring Dranzer, Driger, Draciel, and Dragoon.",
58
- "Beyblade",
59
- "brand-beyblade",
60
- ["Beyblade Original", "Spinning Tops"],
61
- ["stickers", "vintage-collectible"],
62
- ]),
63
- },
64
- {
65
- id: "sticker-beyblade-x-holographic-pack",
66
- slug: "sticker-beyblade-x-holographic-pack",
67
- title: "Beyblade X Holographic Sticker Pack",
68
- description: "A holographic-finish sticker pack featuring the current Beyblade X lineup — catches the light with a rainbow shimmer.",
69
- categorySlugs: ["category-x-basic", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
70
- categoryNames: ["Basic Line", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
71
- brandSlug: "brand-takara-tomy",
72
- brand: "Takara-Tomy",
73
- price: 199,
74
- currency: "INR",
75
- stockQuantity: 80,
76
- availableQuantity: 62,
77
- isSold: false,
78
- mainImage: seedPhoto("stickers-image-x-holo-1-20260818", 900, 900),
79
- images: seedGallery(seedPhoto("stickers-image-x-holo-1-20260818", 900, 900), seedPhoto("stickers-image-x-holo-2-20260818", 900, 900)),
80
- status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
81
- condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
82
- listingType: "stickers",
83
- storeId: "store-beyblade-arena",
84
- storeName: "Beyblade Arena",
85
- printMeta: { size: "8x10 cm sheet", material: "Holographic vinyl", finish: "Holographic" },
86
- customFields: [],
87
- customSections: [],
88
- featured: true,
89
- isPromoted: false,
90
- isOnSale: false,
91
- tags: ["stickers"],
92
- createdAt: new Date("2026-08-18"),
93
- updatedAt: new Date("2026-08-19"),
94
- searchTxt: buildSearchTxt([
95
- "Beyblade X Holographic Sticker Pack",
96
- "Holographic-finish sticker pack featuring the current Beyblade X lineup.",
97
- "Takara-Tomy",
98
- "brand-takara-tomy",
99
- ["Beyblade X", "Spinning Tops"],
100
- ["stickers"],
101
- ]),
102
- },
103
- {
104
- id: "sticker-beyblade-burst-diecut-set",
105
- slug: "sticker-beyblade-burst-diecut-set",
106
- title: "Beyblade Burst Die-Cut Sticker Set (6-Pack)",
107
- description: "Individually die-cut vinyl stickers of 6 fan-favorite Burst tops — no background, clean edges, weatherproof.",
108
- categorySlugs: ["category-burst-classic", "category-burst-tops", "category-beyblade-burst", "category-spinning-tops"],
109
- categoryNames: ["Burst Classic", "Burst Tops", "Beyblade Burst", "Spinning Tops"],
110
- brandSlug: "brand-beyblade",
111
- brand: "Beyblade",
112
- price: 249,
113
- currency: "INR",
114
- stockQuantity: 60,
115
- availableQuantity: 60,
116
- isSold: false,
117
- mainImage: seedPhoto("stickers-image-burst-diecut-1-20260819", 900, 900),
118
- images: seedGallery(seedPhoto("stickers-image-burst-diecut-1-20260819", 900, 900)),
119
- status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
120
- condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
121
- listingType: "stickers",
122
- storeId: "store-beyblade-arena",
123
- storeName: "Beyblade Arena",
124
- printMeta: { size: "Individually die-cut, ~6x6 cm each", material: "Weatherproof vinyl", finish: "Matte" },
125
- customFields: [{ key: "Pack Count", type: "number", value: "6" }],
126
- customSections: [],
127
- featured: false,
128
- isPromoted: false,
129
- isOnSale: false,
130
- tags: ["stickers"],
131
- createdAt: new Date("2026-08-19"),
132
- updatedAt: new Date("2026-08-19"),
133
- searchTxt: buildSearchTxt([
134
- "Beyblade Burst Die-Cut Sticker Set (6-Pack)",
135
- "Individually die-cut vinyl stickers of 6 fan-favorite Burst tops.",
136
- "Beyblade",
137
- "brand-beyblade",
138
- ["Beyblade Burst", "Spinning Tops"],
139
- ["stickers"],
140
- ]),
141
- },
142
- {
143
- id: "sticker-beyblade-metal-retro-sheet",
144
- slug: "sticker-beyblade-metal-retro-sheet",
145
- title: "Metal Fight Retro Sticker Sheet — Limited /500",
146
- description: "A limited-edition retro-styled sticker sheet celebrating Metal Fight favorites, numbered out of 500.",
147
- categorySlugs: ["category-metal-masters", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
148
- categoryNames: ["Metal Masters", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
149
- brandSlug: "brand-takara-tomy",
150
- brand: "Takara-Tomy",
151
- price: 179,
152
- currency: "INR",
153
- stockQuantity: 500,
154
- availableQuantity: 214,
155
- isSold: false,
156
- mainImage: seedPhoto("stickers-image-metal-retro-1-20260819", 900, 900),
157
- images: seedGallery(seedPhoto("stickers-image-metal-retro-1-20260819", 900, 900)),
158
- status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
159
- condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
160
- listingType: "stickers",
161
- storeId: "store-beyblade-arena",
162
- storeName: "Beyblade Arena",
163
- printMeta: { size: "6x8 cm sheet", material: "Vinyl", finish: "Matte", editionSize: 500 },
164
- customFields: [],
165
- customSections: [],
166
- featured: false,
167
- isPromoted: false,
168
- isOnSale: false,
169
- tags: ["stickers", "vintage-collectible", "limited-run"],
170
- createdAt: new Date("2026-08-19"),
171
- updatedAt: new Date("2026-08-19"),
172
- searchTxt: buildSearchTxt([
173
- "Metal Fight Retro Sticker Sheet — Limited /500",
174
- "Limited-edition retro-styled sticker sheet, numbered out of 500.",
175
- "Takara-Tomy",
176
- "brand-takara-tomy",
177
- ["Beyblade Metal Fight", "Spinning Tops"],
178
- ["stickers", "vintage-collectible", "limited-run"],
179
- ]),
180
- },
181
- {
182
- id: "sticker-beyblade-x-glow-in-dark",
183
- slug: "sticker-beyblade-x-glow-in-dark",
184
- title: "Beyblade X Glow-in-the-Dark Sticker Pack",
185
- description: "Charge these stickers under light and watch the Beyblade X logos glow in the dark. Great for stadium cases and water bottles.",
186
- categorySlugs: ["category-x-basic", "category-x-tops", "category-beyblade-x", "category-spinning-tops"],
187
- categoryNames: ["Basic Line", "Beyblade X Tops", "Beyblade X", "Spinning Tops"],
188
- brandSlug: "brand-takara-tomy",
189
- brand: "Takara-Tomy",
190
- price: 229,
191
- currency: "INR",
192
- stockQuantity: 45,
193
- availableQuantity: 45,
194
- isSold: false,
195
- mainImage: seedPhoto("stickers-image-x-glow-1-20260819", 900, 900),
196
- images: seedGallery(seedPhoto("stickers-image-x-glow-1-20260819", 900, 900), seedPhoto("stickers-image-x-glow-2-20260819", 900, 900)),
197
- status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
198
- condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
199
- listingType: "stickers",
200
- storeId: "store-beyblade-arena",
201
- storeName: "Beyblade Arena",
202
- printMeta: { size: "7x9 cm sheet", material: "Glow-in-the-dark vinyl", finish: "Matte" },
203
- customFields: [{ key: "Glow Duration", type: "text", value: "~3 hours after charging" }],
204
- customSections: [],
205
- featured: true,
206
- isPromoted: true,
207
- isOnSale: false,
208
- tags: ["stickers"],
209
- createdAt: new Date("2026-08-19"),
210
- updatedAt: new Date("2026-08-19"),
211
- searchTxt: buildSearchTxt([
212
- "Beyblade X Glow-in-the-Dark Sticker Pack",
213
- "Charge under light and watch the Beyblade X logos glow in the dark.",
214
- "Takara-Tomy",
215
- "brand-takara-tomy",
216
- ["Beyblade X", "Spinning Tops"],
217
- ["stickers"],
218
- ]),
219
- },
220
- {
221
- // Sold-out fixture — see the art file's equivalent for the shape rationale.
222
- id: "sticker-beyblade-metal-fight-sold-out",
223
- slug: "sticker-beyblade-metal-fight-sold-out",
224
- title: "Beyblade Metal Fight Sticker Sheet (Sold Out)",
225
- description: "The original Metal Fight sticker sheet run, now fully sold out. Restock TBD.",
226
- categorySlugs: ["category-metal-fury-4d", "category-metal-tops", "category-beyblade-metal", "category-spinning-tops"],
227
- categoryNames: ["Metal Fury (4D)", "Metal Fight Tops", "Beyblade Metal Fight", "Spinning Tops"],
228
- brandSlug: "brand-beyblade",
229
- brand: "Beyblade",
230
- price: 199,
231
- currency: "INR",
232
- stockQuantity: 0,
233
- availableQuantity: 0,
234
- isSold: true,
235
- mainImage: seedPhoto("sticker-image-metal-fight-sold-out-1-20260824", 900, 900),
236
- images: seedGallery(seedPhoto("sticker-image-metal-fight-sold-out-1-20260824", 900, 900)),
237
- status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
238
- condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
239
- listingType: "stickers",
240
- storeId: "store-beyblade-arena",
241
- storeName: "Beyblade Arena",
242
- printMeta: { size: "10x15 cm sheet", material: "Matte vinyl", finish: "Matte" },
243
- customFields: [],
244
- customSections: [],
245
- featured: false,
246
- isPromoted: false,
247
- isOnSale: false,
248
- tags: ["stickers", "sold-out"],
249
- createdAt: new Date("2026-08-24"),
250
- updatedAt: new Date("2026-08-24"),
251
- searchTxt: buildSearchTxt([
252
- "Beyblade Metal Fight Sticker Sheet (Sold Out)",
253
- "The original Metal Fight sticker sheet run, now fully sold out.",
254
- "Beyblade",
255
- "brand-beyblade",
256
- ["Beyblade Metal", "Spinning Tops"],
257
- ["stickers", "sold-out"],
258
- ]),
259
- },
260
- {
261
- /*
262
- * Part Two C — the one seeded `madeToOrder: true` fixture. Print-on-demand
263
- * is the case that flag exists for: this sheet is printed when ordered
264
- * rather than held in a finite run, so `stockQuantity`/`availableQuantity`
265
- * are deliberately 0 and must NOT make the listing read as sold out.
266
- *
267
- * 🛑 Reuses an EXISTING uploaded cover (`stickers-image-x-glow-1`) rather
268
- * than inventing a new slug — a slug with no row in
269
- * `media-assets-seed-data.ts` 404s silently and reads as a broken image,
270
- * not as a seed bug (the 2026-10-17 incident this project already paid
271
- * for once).
272
- */
273
- id: "sticker-beyblade-custom-print-on-demand",
274
- slug: "sticker-beyblade-custom-print-on-demand",
275
- title: "Custom Beyblade Sticker Sheet — Print on Demand",
276
- description: "Pick any character art from our catalogue and we print your sheet when you order — nothing is held in stock, so it never sells out.",
277
- categorySlugs: ["category-original-plastic-gen", "category-original-tops", "category-beyblade-original", "category-spinning-tops"],
278
- categoryNames: ["Plastic Generation", "Original Tops", "Beyblade Original", "Spinning Tops"],
279
- brandSlug: "brand-beyblade",
280
- brand: "Beyblade",
281
- price: 179,
282
- currency: "INR",
283
- stockQuantity: 0,
284
- availableQuantity: 0,
285
- madeToOrder: true,
286
- isSold: false,
287
- mainImage: seedPhoto("stickers-image-x-glow-1-20260819", 900, 900),
288
- images: seedGallery(seedPhoto("stickers-image-x-glow-1-20260819", 900, 900)),
289
- status: PRODUCT_FIELDS.STATUS_VALUES.PUBLISHED,
290
- condition: PRODUCT_FIELDS.CONDITION_VALUES.NEW,
291
- listingType: "stickers",
292
- storeId: "store-beyblade-arena",
293
- storeName: "Beyblade Arena",
294
- printMeta: { size: "5x5 cm sheet", material: "Vinyl", finish: "Glossy" },
295
- customFields: [{ key: "Turnaround", type: "text", value: "Printed and shipped within 2 business days" }],
296
- customSections: [],
297
- featured: false,
298
- isPromoted: false,
299
- isOnSale: false,
300
- tags: ["stickers", "made-to-order"],
301
- createdAt: new Date("2026-10-19"),
302
- updatedAt: new Date("2026-10-19"),
303
- searchTxt: buildSearchTxt([
304
- "Custom Beyblade Sticker Sheet — Print on Demand",
305
- "Pick any character art from our catalogue and we print your sheet when you order.",
306
- "Beyblade",
307
- "brand-beyblade",
308
- ["Beyblade Original", "Spinning Tops"],
309
- ["stickers", "made-to-order"],
310
- ]),
311
- },
312
- ];
313
- /*
314
- * This file had no export wrapper at all — every other product seed file maps
315
- * its raw array through one, and these two were the exception. Adding it here
316
- * so the final-sale opt-outs are applied the same way everywhere rather than
317
- * being hand-written into two records that reviewers would have to find.
318
- */
319
- export const productsStickersSeedData = _rawProductsStickersSeedData.map(withFinalSale).map(withDerivedCategoryNames);
@@ -1 +0,0 @@
1
- export declare const reviewsSeedData: import("../security/encrypted").Plaintext<import("..").ReviewDocument>[];
@@ -1,185 +0,0 @@
1
- /*
2
- * WHY: Seeds product reviews from buyers across the Beyblade catalog on the marketplace.
3
- * WHAT: Exports 65 reviews spread across the 14 real Beyblade products. Ratings 3–5 stars, mix
4
- * of verified/unverified. Seller responses on ~16 reviews. Images (1-3, seedExtMedia
5
- * picsum) on ~11 reviews; a video (raw external mp4 + seedExtMedia thumbnail) on 5 reviews.
6
- *
7
- * EXPORTS:
8
- * reviewsSeedData — Array of 65 review documents
9
- *
10
- * @tag domain:reviews,products
11
- * @tag layer:seed
12
- * @tag pattern:none
13
- * @tag access:server-only
14
- * @tag consumers:seed/index.ts,seed/runner.ts
15
- * @tag sideEffects:none
16
- */
17
- import { withReviewSearchTxt } from "./_helpers/search-txt-wrappers.js";
18
- import { seedPhoto } from "./_helpers/media.js";
19
- const NOW = new Date();
20
- const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
21
- // Public, direct-playable sample MP4 — review.video.url renders through a raw
22
- // <video src> element (ReviewDetailShell.tsx), NOT the /api/media/ext image
23
- // proxy, so it must stay an unwrapped external URL (never seedExtMedia()).
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";
30
- const reviewTemplates = [
31
- { title: "Excellent quality and fast shipping!", comment: "Received exactly as described. Item is in perfect condition. Will buy again!", rating: 5 },
32
- { title: "Good condition, minor wear", comment: "Arrived safely but has slight edge wear. Still happy with the purchase overall.", rating: 4 },
33
- { title: "As advertised, great seller", comment: "Exactly matched the listing photos. Very professional packaging and communication.", rating: 5 },
34
- { title: "Took a while but worth it", comment: "Shipping took longer than expected but the item arrived perfectly packaged and in great condition.", rating: 4 },
35
- { title: "Authentic and graded perfectly", comment: "Certificate matches perfectly. Seller is trustworthy and professional. Highly recommend.", rating: 5 },
36
- { title: "Minor packaging issue", comment: "Item itself is fine but packaging could be better — arrived with a small dent in the box.", rating: 3 },
37
- { title: "Perfect for my collection!", comment: "Exactly what I needed. Perfect condition, well protected during shipping.", rating: 5 },
38
- { title: "Beautiful piece", comment: "Stunning quality. The details are incredible. Highly recommend this seller.", rating: 5 },
39
- { title: "Great value for money", comment: "Price was fair for the condition. Compared to other sellers, this was a great deal.", rating: 4 },
40
- { title: "Arrived damaged", comment: "Item has a scratch that wasn't in the photos. Seller offered partial refund which was fair.", rating: 3 },
41
- { title: "Best seller on the platform", comment: "This is my third purchase and every time the quality and service is outstanding.", rating: 5 },
42
- { title: "Solid purchase, no complaints", comment: "Everything as described. Shipped within 24 hours and arrived in 4 days to Mumbai.", rating: 4 },
43
- { title: "Amazing find!", comment: "I've been looking for this piece for months. So glad I found it here at a reasonable price.", rating: 5 },
44
- { title: "Good but overpriced", comment: "The item is genuine and in good condition, but I feel the price was a bit high for the grade.", rating: 3 },
45
- { title: "Fast delivery to Bangalore", comment: "Ordered on Monday, received on Wednesday. Impressive! Item exactly as pictured.", rating: 5 },
46
- { title: "Collector grade quality", comment: "This seller clearly knows their stuff. Grading is accurate, packaging is museum-quality.", rating: 5 },
47
- { title: "Happy with the purchase", comment: "Good condition, fair price, quick shipping. What more can you ask for?", rating: 4 },
48
- { title: "Would buy again", comment: "Smooth transaction from start to finish. Seller was responsive to my questions.", rating: 4 },
49
- { title: "Mint condition!", comment: "Card came in a hard top-loader inside a bubble mailer. Zero damage. Absolutely mint.", rating: 5 },
50
- { title: "Decent but could be better", comment: "The item is fine but the listing photos made it look better than it actually is.", rating: 3 },
51
- ];
52
- const sellerReplies = [
53
- "Thank you for your purchase! We appreciate your business.",
54
- "Glad you love it! We take pride in careful packaging.",
55
- "Thanks for the kind words! Come back anytime.",
56
- "We appreciate your feedback and will improve our packaging.",
57
- "Thank you! We're sorry about the delay — we've switched to a faster courier.",
58
- "We're thrilled you're happy with your purchase!",
59
- "Thank you for being a loyal customer! We value your support.",
60
- "We appreciate the honest feedback. We'll look into the packaging issue.",
61
- ];
62
- const products = [
63
- { id: "auction-beyblade-original-dragoon-storm", title: "Beyblade Original Dragoon Storm", store: "store-beyblade-arena" },
64
- { id: "auction-beyblade-metal-lightning-l-drago", title: "Beyblade Metal Lightning L-Drago", store: "store-beyblade-arena" },
65
- { id: "classified-beyblade-stadium-set", title: "Beyblade Stadium Set", store: "store-beyblade-arena" },
66
- { id: "digitalcode-beyblade-x-app-unlock", title: "Beyblade X App Unlock Code", store: "store-beyblade-arena" },
67
- { id: "preorder-beyblade-x-bx-08-wave", title: "Beyblade X BX-08 Wave", store: "store-beyblade-arena" },
68
- { id: "prizedraw-beyblade-mystery-box", title: "Beyblade Mystery Box", store: "store-letitrip-official" },
69
- { id: "product-beyblade-original-dranzer-s", title: "Beyblade Original Dranzer S", store: "store-beyblade-arena" },
70
- { id: "product-beyblade-original-driger-v", title: "Beyblade Original Driger V", store: "store-beyblade-arena" },
71
- { id: "product-beyblade-metal-storm-pegasus", title: "Beyblade Metal Storm Pegasus", store: "store-beyblade-arena" },
72
- { id: "product-beyblade-metal-flame-sagittario", title: "Beyblade Metal Flame Sagittario", store: "store-beyblade-arena" },
73
- { id: "product-beyblade-burst-valkyrie", title: "Beyblade Burst Valkyrie", store: "store-beyblade-arena" },
74
- { id: "product-beyblade-burst-regalia-genesis", title: "Beyblade Burst Regalia Genesis", store: "store-beyblade-arena" },
75
- { id: "product-beyblade-x-wizard-arrow", title: "Beyblade X Wizard Arrow", store: "store-beyblade-arena" },
76
- { id: "product-beyblade-x-knife-shinobi", title: "Beyblade X Knife Shinobi", store: "store-beyblade-arena" },
77
- ];
78
- const buyers = [
79
- { id: "user-yugi-muto", name: "Mock User 3" },
80
- { id: "user-admin-letitrip", name: "Mock User 1" },
81
- { id: "user-seto-kaiba", name: "Mock User 2" },
82
- { id: "user-meera-bey", name: "Mock User 11" },
83
- { id: "user-rohit-collector", name: "Mock User 14" },
84
- ];
85
- const _rawReviewsSeedData = [];
86
- for (let i = 0; i < 65; i++) {
87
- const template = reviewTemplates[i % reviewTemplates.length];
88
- const product = products[i % products.length];
89
- const buyer = buyers[i % buyers.length];
90
- const daysAgoCreated = 90 - i;
91
- const hasSellerReply = i % 4 === 0;
92
- // ~17% of reviews ("detailed" ones) carry buyer-submitted photos.
93
- const hasImage = i % 6 === 0;
94
- const imageCount = (i % 3) + 1;
95
- // A smaller handful (5 of 65) also carry an unboxing/battle-test video.
96
- const hasVideo = i % 13 === 0;
97
- _rawReviewsSeedData.push({
98
- id: `review-${i + 1}`,
99
- productId: product.id,
100
- productTitle: product.title,
101
- storeId: product.store,
102
- userId: buyer.id,
103
- userName: buyer.name,
104
- rating: template.rating,
105
- title: template.title,
106
- comment: template.comment,
107
- images: hasImage
108
- ? Array.from({ length: imageCount }, (_, n) => seedPhoto(`review-image-${product.id}-${i + 1}-${n + 1}`, 800, 800))
109
- : [],
110
- hasImages: hasImage,
111
- video: hasVideo
112
- ? {
113
- url: SAMPLE_VIDEO_URL,
114
- thumbnailUrl: seedPhoto(`review-video-thumb-${product.id}-${i + 1}`, 800, 450),
115
- duration: 18 + (i % 5) * 6,
116
- }
117
- : undefined,
118
- verified: i % 3 !== 2,
119
- status: "approved",
120
- // Derived from the loop index, not Math.random(): a seed file is
121
- // re-executed top-to-bottom on every CLI invocation, so a random value
122
- // rewrites this field on every reseed and makes `appkit-seed status` diffs
123
- // permanently noisy (Root Cause #25). The file's own header already claimed
124
- // "no Math.random()" — this was the one place it wasn't true.
125
- helpfulCount: (i * 7) % 20,
126
- reportCount: 0,
127
- sellerReply: hasSellerReply ? sellerReplies[Math.floor(i / 4) % sellerReplies.length] : undefined,
128
- sellerRepliedAt: hasSellerReply ? daysAgo(daysAgoCreated - 2) : undefined,
129
- createdAt: daysAgo(daysAgoCreated),
130
- updatedAt: daysAgo(daysAgoCreated - 1),
131
- });
132
- }
133
- /**
134
- * A deliberately deep review list on ONE product, so the paginated reviews tab is
135
- * actually exercisable.
136
- *
137
- * The round-robin above spreads 65 reviews across 14 products — 4-5 each, which is
138
- * below the 10-per-page detail-page size, so pagination could never appear on a product
139
- * page and the tester checklist cases for it would be untestable. This block pushes
140
- * "Beyblade Original Dranzer S" to 5 + 14 = 19 approved reviews (2 pages), and spreads
141
- * ratings across all five stars so the rating filter and the average/distribution
142
- * summary have something real to act on.
143
- *
144
- * Ids and every field are derived from the loop index — no Math.random(), no Date.now()
145
- * in an id — so `appkit-seed load` stays idempotent (Recurrent Root Cause #25).
146
- */
147
- const DEEP_REVIEW_PRODUCT = {
148
- id: "product-beyblade-original-dranzer-s",
149
- title: "Beyblade Original Dranzer S",
150
- store: "store-beyblade-arena",
151
- };
152
- for (let i = 0; i < 14; i++) {
153
- const template = reviewTemplates[i % reviewTemplates.length];
154
- const buyer = buyers[i % buyers.length];
155
- // 1..5, cycling — guarantees every star bucket is populated for the rating filter.
156
- const rating = (i % 5) + 1;
157
- // Distinct from the main loop's 90-i range so the two sets interleave predictably
158
- // and "newest first" is verifiable by eye.
159
- const daysAgoCreated = 28 - i;
160
- const hasImage = i % 4 === 0;
161
- _rawReviewsSeedData.push({
162
- id: `review-dranzer-deep-${i + 1}`,
163
- productId: DEEP_REVIEW_PRODUCT.id,
164
- productTitle: DEEP_REVIEW_PRODUCT.title,
165
- storeId: DEEP_REVIEW_PRODUCT.store,
166
- userId: buyer.id,
167
- userName: buyer.name,
168
- rating,
169
- title: `${template.title} (${rating}★)`,
170
- comment: template.comment,
171
- images: hasImage
172
- ? [
173
- seedPhoto(`review-image-dranzer-deep-${i + 1}`, 800, 800),
174
- ]
175
- : [],
176
- hasImages: hasImage,
177
- verified: i % 3 !== 2,
178
- status: "approved",
179
- helpfulCount: (i * 3) % 17,
180
- reportCount: 0,
181
- createdAt: daysAgo(daysAgoCreated),
182
- updatedAt: daysAgo(daysAgoCreated),
183
- });
184
- }
185
- export const reviewsSeedData = _rawReviewsSeedData.map(withReviewSearchTxt);
@@ -1,2 +0,0 @@
1
- import type { SeedConfig, SeedResult } from "./types";
2
- export declare function runSeed(config: SeedConfig): Promise<SeedResult>;
@@ -1,125 +0,0 @@
1
- import { SeedAbortedError } from "./types.js";
2
- import { encryptPiiFields } from "../security/pii-encrypt.js";
3
- const BATCH_SIZE = 400; // Firestore max batch is 500
4
- const DEFAULT_MAX_ATTEMPTS = 2;
5
- /**
6
- * P31-D: heuristic for retryable Firestore errors. firebase-admin doesn't
7
- * surface a canonical "retryable" flag — we match the error message against
8
- * known-transient patterns (DEADLINE_EXCEEDED, UNAVAILABLE, network resets).
9
- */
10
- function isRetryableError(err) {
11
- const msg = err instanceof Error ? err.message : String(err);
12
- return (msg.includes("DEADLINE_EXCEEDED") ||
13
- msg.includes("UNAVAILABLE") ||
14
- msg.includes("ECONNRESET") ||
15
- msg.includes("ETIMEDOUT") ||
16
- msg.toLowerCase().includes("retry"));
17
- }
18
- export async function runSeed(config) {
19
- const { getApp, getApps, initializeApp } = await import("firebase-admin/app");
20
- const { getFirestore } = await import("firebase-admin/firestore");
21
- const app = config.projectId
22
- ? (() => {
23
- const appName = `seed-${config.projectId}`;
24
- return getApps().some((candidate) => candidate.name === appName)
25
- ? getApp(appName)
26
- : initializeApp({ projectId: config.projectId }, appName);
27
- })()
28
- : getApps()[0];
29
- const db = app ? getFirestore(app) : getFirestore();
30
- const start = Date.now();
31
- const maxAttempts = config.maxBatchAttempts ?? DEFAULT_MAX_ATTEMPTS;
32
- let totalDocuments = 0;
33
- let retriedBatches = 0;
34
- const validationErrors = [];
35
- const dryRunDiff = [];
36
- for (const collection of config.collections) {
37
- const { collection: name, data, idField = "id", merge = false, piiFields = [], validate, } = collection;
38
- // P31-A: per-doc validation gate. Invalid docs are pulled out of the
39
- // write set before we touch Firestore. Strict mode aborts on first error.
40
- const validDocs = [];
41
- const skipped = [];
42
- for (const rawDoc of data) {
43
- const record = rawDoc;
44
- const docId = String(record[idField] ?? `auto-${data.indexOf(rawDoc)}`);
45
- if (validate) {
46
- const errors = validate(rawDoc);
47
- if (errors.length > 0) {
48
- validationErrors.push({ collection: name, docId, errors });
49
- config.onValidationError?.(name, docId, errors);
50
- if (config.strictValidation) {
51
- throw new SeedAbortedError(name, docId, errors);
52
- }
53
- skipped.push(docId);
54
- continue;
55
- }
56
- }
57
- validDocs.push(rawDoc);
58
- }
59
- config.onProgress?.(name, 0, validDocs.length);
60
- // P31-C: dry-run diff. Fetch existing docs in chunks of 30 (Firestore's
61
- // `getAll` limit per RPC) and bucket each into create vs update.
62
- if (config.dryRun) {
63
- const toCreate = [];
64
- const toUpdate = [];
65
- const ids = validDocs.map((doc, i) => String(doc[idField] ?? `auto-${i}`));
66
- const GETALL_CHUNK = 30;
67
- for (let i = 0; i < ids.length; i += GETALL_CHUNK) {
68
- const chunk = ids.slice(i, i + GETALL_CHUNK);
69
- const refs = chunk.map((id) => db.collection(name).doc(id));
70
- const snaps = await db.getAll(...refs);
71
- snaps.forEach((snap, j) => {
72
- if (snap.exists)
73
- toUpdate.push(chunk[j]);
74
- else
75
- toCreate.push(chunk[j]);
76
- });
77
- }
78
- dryRunDiff.push({ collection: name, toCreate, toUpdate, toSkip: skipped });
79
- totalDocuments += validDocs.length;
80
- config.onProgress?.(name, validDocs.length, validDocs.length);
81
- continue;
82
- }
83
- let written = 0;
84
- while (written < validDocs.length) {
85
- const slice = validDocs.slice(written, written + BATCH_SIZE);
86
- const batch = db.batch();
87
- for (const rawDoc of slice) {
88
- const doc = piiFields.length
89
- ? encryptPiiFields(rawDoc, piiFields)
90
- : rawDoc;
91
- const id = String(rawDoc[idField] ??
92
- `auto-${written + slice.indexOf(rawDoc)}`);
93
- const ref = db.collection(name).doc(id);
94
- batch.set(ref, doc, { merge });
95
- }
96
- // P31-D: bounded retry on transient errors. We don't loop forever — a
97
- // genuinely broken collection should fail fast rather than thrash.
98
- let attempt = 0;
99
- while (true) {
100
- attempt += 1;
101
- try {
102
- await batch.commit();
103
- if (attempt > 1)
104
- retriedBatches += 1;
105
- break;
106
- }
107
- catch (err) {
108
- if (attempt >= maxAttempts || !isRetryableError(err))
109
- throw err;
110
- }
111
- }
112
- written += slice.length;
113
- totalDocuments += slice.length;
114
- config.onProgress?.(name, written, validDocs.length);
115
- }
116
- }
117
- return {
118
- collections: config.collections.map((c) => c.collection),
119
- totalDocuments,
120
- durationMs: Date.now() - start,
121
- validationErrors,
122
- retriedBatches,
123
- ...(config.dryRun ? { dryRunDiff } : {}),
124
- };
125
- }
@@ -1,2 +0,0 @@
1
- import type { ScammerDocument } from "../features/scams/schemas/firestore";
2
- export declare const scammersSeedData: Partial<ScammerDocument>[];