@mohasinac/appkit 4.57.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 (574) hide show
  1. package/dist/.build-stamp.json +4 -4
  2. package/dist/_internal/server/features/beys/data.d.ts +44 -0
  3. package/dist/_internal/server/features/beys/data.js +107 -0
  4. package/dist/_internal/server/features/beys/og.d.ts +42 -0
  5. package/dist/_internal/server/features/beys/og.js +89 -0
  6. package/dist/_internal/server/features/parts/data.js +3 -2
  7. package/dist/_internal/server/jobs/handlers/messages.d.ts +1 -1
  8. package/dist/_internal/server/jobs/handlers/messages.js +1 -1
  9. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  10. package/dist/_internal/shared/actions/action-registry.js +86 -0
  11. package/dist/_internal/shared/types/base-document.d.ts +1 -1
  12. package/dist/client.d.ts +2 -0
  13. package/dist/client.js +1 -0
  14. package/dist/constants/api-endpoints.d.ts +12 -0
  15. package/dist/constants/api-endpoints.js +10 -0
  16. package/dist/constants/field-names.d.ts +46 -0
  17. package/dist/constants/field-names.js +46 -0
  18. package/dist/constants/seed-meta.d.ts +113 -0
  19. package/dist/constants/seed-meta.js +91 -0
  20. package/dist/features/admin/components/AdminBeysView.d.ts +27 -0
  21. package/dist/features/admin/components/AdminBeysView.js +178 -0
  22. package/dist/features/admin/components/AdminPartsView.d.ts +27 -0
  23. package/dist/features/admin/components/AdminPartsView.js +160 -0
  24. package/dist/features/admin/components/OwnerQuickActions.d.ts +19 -2
  25. package/dist/features/admin/components/OwnerQuickActions.js +31 -3
  26. package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +31 -0
  27. package/dist/features/admin/components/RecordOwnerQuickActions.js +128 -0
  28. package/dist/features/admin/components/ReferenceRecordEditor.d.ts +45 -0
  29. package/dist/features/admin/components/ReferenceRecordEditor.js +153 -0
  30. package/dist/features/admin/schemas/firestore.d.ts +1 -1
  31. package/dist/features/auctions/components/MarketplaceAuctionCard.js +15 -2
  32. package/dist/features/auth/permissions/constants.d.ts +1 -1
  33. package/dist/features/auth/permissions/constants.js +12 -1
  34. package/dist/features/beys/components/BeyDetailPageView.d.ts +50 -0
  35. package/dist/features/beys/components/BeyDetailPageView.js +98 -0
  36. package/dist/features/beys/schemas/firestore.d.ts +417 -0
  37. package/dist/features/beys/schemas/firestore.js +65 -0
  38. package/dist/features/blog/components/BlogFeaturedCard.js +15 -2
  39. package/dist/features/blog/components/BlogPostView.js +2 -2
  40. package/dist/features/categories/components/BrandDetailPageView.js +4 -2
  41. package/dist/features/categories/components/BundleDetailView.js +2 -2
  42. package/dist/features/categories/components/CategoryDetailPageView.js +36 -3
  43. package/dist/features/categories/components/CategoryGrid.js +24 -2
  44. package/dist/features/categories/components/FranchiseDetailPageView.js +2 -3
  45. package/dist/features/events/components/EventCard.js +15 -2
  46. package/dist/features/grouped/components/GroupedListingDetailView.js +2 -3
  47. package/dist/features/homepage/components/CustomCardsSection.js +67 -50
  48. package/dist/features/homepage/components/ShopByCategorySection.js +23 -10
  49. package/dist/features/homepage/schemas/index.d.ts +10 -10
  50. package/dist/features/parts/components/PartDetailPageView.js +5 -3
  51. package/dist/features/parts/components/PartsSearchBox.js +79 -4
  52. package/dist/features/parts/schemas/admin-edit.d.ts +81 -0
  53. package/dist/features/parts/schemas/admin-edit.js +89 -0
  54. package/dist/features/parts/schemas/firestore.d.ts +2 -1
  55. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +15 -2
  56. package/dist/features/products/components/MarketplaceBundleCard.js +15 -2
  57. package/dist/features/products/components/MarketplacePrizeDrawCard.js +15 -2
  58. package/dist/features/products/components/ProductGrid.js +18 -2
  59. package/dist/features/products/schemas/firestore.d.ts +18 -0
  60. package/dist/features/seller/components/CategoryInlineSelect.d.ts +10 -1
  61. package/dist/features/seller/components/CategoryInlineSelect.js +53 -5
  62. package/dist/features/seller/components/SellerProductShell.d.ts +39 -0
  63. package/dist/features/seller/components/SellerProductShell.js +31 -3
  64. package/dist/index.d.ts +6 -129
  65. package/dist/index.js +61 -292
  66. package/dist/next/routing/route-map.d.ts +13 -1
  67. package/dist/next/routing/route-map.js +37 -0
  68. package/dist/schemas/registry.d.ts +6 -6
  69. package/dist/server.d.ts +2 -69
  70. package/dist/server.js +8 -69
  71. package/dist/styles.css +468 -1
  72. package/dist/tailwind-utilities.css +1 -1
  73. package/dist/ui/components/PosterCard.d.ts +99 -0
  74. package/dist/ui/components/PosterCard.js +109 -0
  75. package/dist/ui/components/PosterCard.style.css +466 -0
  76. package/dist/ui/components/index.style.css +1 -0
  77. package/dist/ui/index.d.ts +2 -0
  78. package/dist/ui/index.js +2 -0
  79. package/package.json +4 -2
  80. package/scripts/seed-cli.mjs +177 -2
  81. package/dist/features/tester/seed-data/_happy-path.d.ts +0 -23
  82. package/dist/features/tester/seed-data/_happy-path.js +0 -710
  83. package/dist/features/tester/seed-data/_money-flows.d.ts +0 -23
  84. package/dist/features/tester/seed-data/_money-flows.js +0 -610
  85. package/dist/features/tester/seed-data/authored/_types.d.ts +0 -57
  86. package/dist/features/tester/seed-data/authored/_types.js +0 -35
  87. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +0 -2
  88. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +0 -226
  89. package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +0 -2
  90. package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +0 -329
  91. package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +0 -2
  92. package/dist/features/tester/seed-data/authored/addresses__address-filters.js +0 -41
  93. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +0 -2
  94. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +0 -76
  95. package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +0 -2
  96. package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +0 -78
  97. package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +0 -2
  98. package/dist/features/tester/seed-data/authored/addresses__state-picker.js +0 -59
  99. package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +0 -2
  100. package/dist/features/tester/seed-data/authored/addresses__unban-request.js +0 -77
  101. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.d.ts +0 -2
  102. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +0 -151
  103. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +0 -2
  104. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +0 -265
  105. package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +0 -2
  106. package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +0 -131
  107. package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.d.ts +0 -2
  108. package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.js +0 -143
  109. package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +0 -2
  110. package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +0 -207
  111. package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +0 -2
  112. package/dist/features/tester/seed-data/authored/admin__bundles.js +0 -144
  113. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +0 -2
  114. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +0 -265
  115. package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +0 -2
  116. package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +0 -318
  117. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +0 -2
  118. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +0 -177
  119. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +0 -2
  120. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +0 -165
  121. package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +0 -2
  122. package/dist/features/tester/seed-data/authored/admin__content-deletes.js +0 -267
  123. package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +0 -2
  124. package/dist/features/tester/seed-data/authored/admin__content-marketing.js +0 -188
  125. package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +0 -2
  126. package/dist/features/tester/seed-data/authored/admin__coupons.js +0 -215
  127. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +0 -2
  128. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +0 -202
  129. package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.d.ts +0 -2
  130. package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.js +0 -249
  131. package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +0 -2
  132. package/dist/features/tester/seed-data/authored/admin__media-watermark.js +0 -148
  133. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +0 -2
  134. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +0 -350
  135. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +0 -2
  136. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +0 -129
  137. package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +0 -2
  138. package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -586
  139. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +0 -2
  140. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +0 -260
  141. package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +0 -2
  142. package/dist/features/tester/seed-data/authored/admin__users-trust.js +0 -569
  143. package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +0 -2
  144. package/dist/features/tester/seed-data/authored/buying__bidding.js +0 -449
  145. package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +0 -2
  146. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +0 -684
  147. package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +0 -2
  148. package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +0 -546
  149. package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +0 -2
  150. package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +0 -379
  151. package/dist/features/tester/seed-data/authored/buying__cart.d.ts +0 -2
  152. package/dist/features/tester/seed-data/authored/buying__cart.js +0 -1264
  153. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +0 -2
  154. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +0 -122
  155. package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +0 -2
  156. package/dist/features/tester/seed-data/authored/buying__my-orders.js +0 -279
  157. package/dist/features/tester/seed-data/authored/buying__offers.d.ts +0 -2
  158. package/dist/features/tester/seed-data/authored/buying__offers.js +0 -1127
  159. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.d.ts +0 -2
  160. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +0 -153
  161. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +0 -2
  162. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +0 -252
  163. package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +0 -2
  164. package/dist/features/tester/seed-data/authored/buying__product-detail.js +0 -474
  165. package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +0 -2
  166. package/dist/features/tester/seed-data/authored/buying__return-request.js +0 -165
  167. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +0 -2
  168. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +0 -260
  169. package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +0 -2
  170. package/dist/features/tester/seed-data/authored/buying__reviews.js +0 -128
  171. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +0 -2
  172. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +0 -96
  173. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +0 -2
  174. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +0 -283
  175. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +0 -2
  176. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +0 -169
  177. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +0 -2
  178. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +0 -105
  179. package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +0 -2
  180. package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +0 -374
  181. package/dist/features/tester/seed-data/authored/community-support__messages.d.ts +0 -2
  182. package/dist/features/tester/seed-data/authored/community-support__messages.js +0 -200
  183. package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +0 -2
  184. package/dist/features/tester/seed-data/authored/community-support__public-profile.js +0 -54
  185. package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +0 -2
  186. package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +0 -76
  187. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +0 -4
  188. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +0 -590
  189. package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +0 -2
  190. package/dist/features/tester/seed-data/authored/content-discovery__blog.js +0 -110
  191. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +0 -2
  192. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +0 -149
  193. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.d.ts +0 -2
  194. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +0 -145
  195. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.d.ts +0 -2
  196. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +0 -174
  197. package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +0 -2
  198. package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +0 -169
  199. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.d.ts +0 -2
  200. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +0 -209
  201. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +0 -2
  202. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +0 -207
  203. package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +0 -2
  204. package/dist/features/tester/seed-data/authored/content-discovery__events.js +0 -377
  205. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +0 -2
  206. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +0 -87
  207. package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +0 -2
  208. package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +0 -147
  209. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +0 -2
  210. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +0 -209
  211. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.d.ts +0 -2
  212. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +0 -167
  213. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +0 -2
  214. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +0 -73
  215. package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +0 -2
  216. package/dist/features/tester/seed-data/authored/content-discovery__search.js +0 -363
  217. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +0 -2
  218. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +0 -340
  219. package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.d.ts +0 -2
  220. package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.js +0 -88
  221. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +0 -2
  222. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +0 -78
  223. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +0 -2
  224. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +0 -76
  225. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +0 -2
  226. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +0 -62
  227. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +0 -2
  228. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +0 -163
  229. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +0 -2
  230. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +0 -61
  231. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.d.ts +0 -2
  232. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.js +0 -89
  233. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +0 -2
  234. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +0 -95
  235. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +0 -2
  236. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +0 -191
  237. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +0 -2
  238. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +0 -158
  239. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.d.ts +0 -2
  240. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.js +0 -82
  241. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +0 -2
  242. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +0 -106
  243. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +0 -2
  244. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +0 -88
  245. package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +0 -2
  246. package/dist/features/tester/seed-data/authored/design-ux__general-design.js +0 -204
  247. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +0 -2
  248. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +0 -301
  249. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +0 -2
  250. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +0 -90
  251. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +0 -2
  252. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +0 -85
  253. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +0 -2
  254. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +0 -407
  255. package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.d.ts +0 -2
  256. package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.js +0 -88
  257. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.d.ts +0 -2
  258. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.js +0 -84
  259. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +0 -2
  260. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +0 -214
  261. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +0 -2
  262. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +0 -275
  263. package/dist/features/tester/seed-data/authored/index.d.ts +0 -2
  264. package/dist/features/tester/seed-data/authored/index.js +0 -301
  265. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +0 -2
  266. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +0 -125
  267. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +0 -2
  268. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +0 -85
  269. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +0 -2
  270. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +0 -92
  271. package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +0 -2
  272. package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +0 -115
  273. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +0 -2
  274. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +0 -137
  275. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +0 -2
  276. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +0 -263
  277. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +0 -2
  278. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +0 -229
  279. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +0 -2
  280. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +0 -325
  281. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +0 -2
  282. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +0 -126
  283. package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.d.ts +0 -2
  284. package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.js +0 -141
  285. package/dist/features/tester/seed-data/authored/public-pages__store-tabs.d.ts +0 -2
  286. package/dist/features/tester/seed-data/authored/public-pages__store-tabs.js +0 -115
  287. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +0 -2
  288. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +0 -253
  289. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +0 -2
  290. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +0 -93
  291. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +0 -3
  292. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +0 -185
  293. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +0 -2
  294. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +0 -82
  295. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +0 -2
  296. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +0 -60
  297. package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +0 -2
  298. package/dist/features/tester/seed-data/authored/selling__become-seller.js +0 -117
  299. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.d.ts +0 -2
  300. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +0 -148
  301. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +0 -2
  302. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +0 -108
  303. package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +0 -2
  304. package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +0 -274
  305. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.d.ts +0 -2
  306. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +0 -145
  307. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +0 -2
  308. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +0 -336
  309. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +0 -2
  310. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +0 -136
  311. package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +0 -2
  312. package/dist/features/tester/seed-data/authored/selling__media-limits.js +0 -135
  313. package/dist/features/tester/seed-data/authored/selling__product-upload-details.d.ts +0 -2
  314. package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +0 -155
  315. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.d.ts +0 -2
  316. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.js +0 -138
  317. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +0 -2
  318. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +0 -191
  319. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +0 -2
  320. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +0 -138
  321. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +0 -2
  322. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +0 -106
  323. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +0 -2
  324. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +0 -192
  325. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +0 -2
  326. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +0 -109
  327. package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +0 -2
  328. package/dist/features/tester/seed-data/authored/selling__seller-guide.js +0 -34
  329. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +0 -2
  330. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +0 -348
  331. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +0 -2
  332. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +0 -87
  333. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +0 -2
  334. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +0 -90
  335. package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.d.ts +0 -2
  336. package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.js +0 -85
  337. package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +0 -2
  338. package/dist/features/tester/seed-data/authored/selling__seller-orders.js +0 -213
  339. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +0 -2
  340. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +0 -192
  341. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +0 -2
  342. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +0 -77
  343. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +0 -2
  344. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +0 -165
  345. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +0 -2
  346. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +0 -116
  347. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +0 -2
  348. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +0 -127
  349. package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +0 -2
  350. package/dist/features/tester/seed-data/authored/seo__og-images.js +0 -107
  351. package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +0 -2
  352. package/dist/features/tester/seed-data/authored/seo__page-metadata.js +0 -120
  353. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +0 -2
  354. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +0 -105
  355. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +0 -2
  356. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +0 -58
  357. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +0 -2
  358. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +0 -284
  359. package/dist/features/tester/seed-data/index.d.ts +0 -2
  360. package/dist/features/tester/seed-data/index.js +0 -2
  361. package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +0 -2
  362. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +0 -7601
  363. package/dist/features/tester/seed-data/tester-responses-seed-data.d.ts +0 -2
  364. package/dist/features/tester/seed-data/tester-responses-seed-data.js +0 -95
  365. package/dist/features/tester/seed-data/tester-window.d.ts +0 -25
  366. package/dist/features/tester/seed-data/tester-window.js +0 -66
  367. package/dist/seed/_helpers/brand-rows.d.ts +0 -35
  368. package/dist/seed/_helpers/brand-rows.js +0 -600
  369. package/dist/seed/_helpers/category-content-generated.d.ts +0 -24
  370. package/dist/seed/_helpers/category-content-generated.js +0 -1853
  371. package/dist/seed/_helpers/category-content.d.ts +0 -68
  372. package/dist/seed/_helpers/category-content.js +0 -731
  373. package/dist/seed/_helpers/category-forest.d.ts +0 -4
  374. package/dist/seed/_helpers/category-forest.js +0 -824
  375. package/dist/seed/_helpers/category-images-generated.d.ts +0 -57
  376. package/dist/seed/_helpers/category-images-generated.js +0 -618
  377. package/dist/seed/_helpers/category-models/chunk0.d.ts +0 -2
  378. package/dist/seed/_helpers/category-models/chunk0.js +0 -2648
  379. package/dist/seed/_helpers/category-models/chunk1.d.ts +0 -2
  380. package/dist/seed/_helpers/category-models/chunk1.js +0 -2318
  381. package/dist/seed/_helpers/category-models/chunk2.d.ts +0 -2
  382. package/dist/seed/_helpers/category-models/chunk2.js +0 -2560
  383. package/dist/seed/_helpers/category-models/chunk3.d.ts +0 -2
  384. package/dist/seed/_helpers/category-models/chunk3.js +0 -2196
  385. package/dist/seed/_helpers/category-models/chunk4.d.ts +0 -2
  386. package/dist/seed/_helpers/category-models/chunk4.js +0 -1732
  387. package/dist/seed/_helpers/category-models.d.ts +0 -12
  388. package/dist/seed/_helpers/category-models.js +0 -45
  389. package/dist/seed/_helpers/category-names.d.ts +0 -54
  390. package/dist/seed/_helpers/category-names.js +0 -118
  391. package/dist/seed/_helpers/category-parts-glossary-map.d.ts +0 -1
  392. package/dist/seed/_helpers/category-parts-glossary-map.js +0 -2499
  393. package/dist/seed/_helpers/category-parts.d.ts +0 -9
  394. package/dist/seed/_helpers/category-parts.js +0 -15022
  395. package/dist/seed/_helpers/category-tree.d.ts +0 -27
  396. package/dist/seed/_helpers/category-tree.js +0 -119
  397. package/dist/seed/_helpers/character-features.d.ts +0 -10
  398. package/dist/seed/_helpers/character-features.js +0 -120
  399. package/dist/seed/_helpers/final-sale-fixtures.d.ts +0 -35
  400. package/dist/seed/_helpers/final-sale-fixtures.js +0 -61
  401. package/dist/seed/_helpers/franchise-rows.d.ts +0 -43
  402. package/dist/seed/_helpers/franchise-rows.js +0 -189
  403. package/dist/seed/_helpers/media.d.ts +0 -67
  404. package/dist/seed/_helpers/media.js +0 -172
  405. package/dist/seed/_helpers/part-colours-generated.d.ts +0 -18
  406. package/dist/seed/_helpers/part-colours-generated.js +0 -273
  407. package/dist/seed/_helpers/product-search-txt.d.ts +0 -18
  408. package/dist/seed/_helpers/product-search-txt.js +0 -23
  409. package/dist/seed/_helpers/search-txt-wrappers.d.ts +0 -26
  410. package/dist/seed/_helpers/search-txt-wrappers.js +0 -58
  411. package/dist/seed/addresses-seed-data.d.ts +0 -2
  412. package/dist/seed/addresses-seed-data.js +0 -78
  413. package/dist/seed/authenticity-knowledge-seed-data.d.ts +0 -78
  414. package/dist/seed/authenticity-knowledge-seed-data.js +0 -10729
  415. package/dist/seed/bids-seed-data.d.ts +0 -2
  416. package/dist/seed/bids-seed-data.js +0 -206
  417. package/dist/seed/blog-posts-seed-data.d.ts +0 -6
  418. package/dist/seed/blog-posts-seed-data.js +0 -442
  419. package/dist/seed/carousel-slides-seed-data.d.ts +0 -2
  420. package/dist/seed/carousel-slides-seed-data.js +0 -411
  421. package/dist/seed/carousels-seed-data.d.ts +0 -2
  422. package/dist/seed/carousels-seed-data.js +0 -36
  423. package/dist/seed/cart-seed-data.d.ts +0 -2
  424. package/dist/seed/cart-seed-data.js +0 -241
  425. package/dist/seed/catalogue-seed-data.d.ts +0 -2
  426. package/dist/seed/catalogue-seed-data.js +0 -112
  427. package/dist/seed/categories-seed-data.d.ts +0 -3
  428. package/dist/seed/categories-seed-data.js +0 -816
  429. package/dist/seed/claimed-coupons-seed-data.d.ts +0 -2
  430. package/dist/seed/claimed-coupons-seed-data.js +0 -85
  431. package/dist/seed/coupon-usage-seed-data.d.ts +0 -9
  432. package/dist/seed/coupon-usage-seed-data.js +0 -55
  433. package/dist/seed/coupons-seed-data.d.ts +0 -2
  434. package/dist/seed/coupons-seed-data.js +0 -226
  435. package/dist/seed/defaults/categories.d.ts +0 -2
  436. package/dist/seed/defaults/categories.js +0 -12
  437. package/dist/seed/defaults/faqs.d.ts +0 -2
  438. package/dist/seed/defaults/faqs.js +0 -40
  439. package/dist/seed/events-seed-data.d.ts +0 -7
  440. package/dist/seed/events-seed-data.js +0 -482
  441. package/dist/seed/factories/address.factory.d.ts +0 -21
  442. package/dist/seed/factories/address.factory.js +0 -44
  443. package/dist/seed/factories/bid.factory.d.ts +0 -15
  444. package/dist/seed/factories/bid.factory.js +0 -33
  445. package/dist/seed/factories/blog-post.factory.d.ts +0 -15
  446. package/dist/seed/factories/blog-post.factory.js +0 -22
  447. package/dist/seed/factories/carousel.factory.d.ts +0 -11
  448. package/dist/seed/factories/carousel.factory.js +0 -17
  449. package/dist/seed/factories/cart.factory.d.ts +0 -25
  450. package/dist/seed/factories/cart.factory.js +0 -35
  451. package/dist/seed/factories/category.factory.d.ts +0 -11
  452. package/dist/seed/factories/category.factory.js +0 -16
  453. package/dist/seed/factories/coupon.factory.d.ts +0 -21
  454. package/dist/seed/factories/coupon.factory.js +0 -43
  455. package/dist/seed/factories/faq.factory.d.ts +0 -10
  456. package/dist/seed/factories/faq.factory.js +0 -15
  457. package/dist/seed/factories/notification.factory.d.ts +0 -18
  458. package/dist/seed/factories/notification.factory.js +0 -39
  459. package/dist/seed/factories/order.factory.d.ts +0 -20
  460. package/dist/seed/factories/order.factory.js +0 -20
  461. package/dist/seed/factories/payout.factory.d.ts +0 -21
  462. package/dist/seed/factories/payout.factory.js +0 -38
  463. package/dist/seed/factories/product.factory.d.ts +0 -27
  464. package/dist/seed/factories/product.factory.js +0 -80
  465. package/dist/seed/factories/review.factory.d.ts +0 -14
  466. package/dist/seed/factories/review.factory.js +0 -52
  467. package/dist/seed/factories/session.factory.d.ts +0 -15
  468. package/dist/seed/factories/session.factory.js +0 -31
  469. package/dist/seed/factories/store.factory.d.ts +0 -23
  470. package/dist/seed/factories/store.factory.js +0 -47
  471. package/dist/seed/factories/user.factory.d.ts +0 -19
  472. package/dist/seed/factories/user.factory.js +0 -56
  473. package/dist/seed/faq-seed-data.d.ts +0 -18
  474. package/dist/seed/faq-seed-data.js +0 -1956
  475. package/dist/seed/firestore-indexes.d.ts +0 -12
  476. package/dist/seed/firestore-indexes.js +0 -31
  477. package/dist/seed/grouped-listings-seed-data.d.ts +0 -2
  478. package/dist/seed/grouped-listings-seed-data.js +0 -283
  479. package/dist/seed/history-seed-data.d.ts +0 -12
  480. package/dist/seed/history-seed-data.js +0 -70
  481. package/dist/seed/homepage-sections-seed-data.d.ts +0 -2
  482. package/dist/seed/homepage-sections-seed-data.js +0 -1018
  483. package/dist/seed/index.d.ts +0 -98
  484. package/dist/seed/index.js +0 -112
  485. package/dist/seed/lottery-entries-seed-data.d.ts +0 -2
  486. package/dist/seed/lottery-entries-seed-data.js +0 -108
  487. package/dist/seed/manifest.d.ts +0 -16
  488. package/dist/seed/manifest.js +0 -235
  489. package/dist/seed/media-assets-seed-data.d.ts +0 -22
  490. package/dist/seed/media-assets-seed-data.js +0 -5593
  491. package/dist/seed/model-composition-seed-data.d.ts +0 -15
  492. package/dist/seed/model-composition-seed-data.js +0 -9032
  493. package/dist/seed/notifications-seed-data.d.ts +0 -2
  494. package/dist/seed/notifications-seed-data.js +0 -606
  495. package/dist/seed/offers-seed-data.d.ts +0 -2
  496. package/dist/seed/offers-seed-data.js +0 -398
  497. package/dist/seed/orders-seed-data.d.ts +0 -2
  498. package/dist/seed/orders-seed-data.js +0 -845
  499. package/dist/seed/part-glossary/chunk0.d.ts +0 -9
  500. package/dist/seed/part-glossary/chunk0.js +0 -35448
  501. package/dist/seed/part-glossary/chunk1.d.ts +0 -9
  502. package/dist/seed/part-glossary/chunk1.js +0 -40494
  503. package/dist/seed/part-glossary/chunk2.d.ts +0 -9
  504. package/dist/seed/part-glossary/chunk2.js +0 -51242
  505. package/dist/seed/part-glossary/chunk3.d.ts +0 -9
  506. package/dist/seed/part-glossary/chunk3.js +0 -53337
  507. package/dist/seed/part-glossary/chunk4.d.ts +0 -9
  508. package/dist/seed/part-glossary/chunk4.js +0 -51454
  509. package/dist/seed/part-glossary-seed-data.d.ts +0 -15
  510. package/dist/seed/part-glossary-seed-data.js +0 -25
  511. package/dist/seed/payouts-seed-data.d.ts +0 -2
  512. package/dist/seed/payouts-seed-data.js +0 -302
  513. package/dist/seed/product-features-seed-data.d.ts +0 -3
  514. package/dist/seed/product-features-seed-data.js +0 -366
  515. package/dist/seed/products-art-seed-data.d.ts +0 -2
  516. package/dist/seed/products-art-seed-data.js +0 -289
  517. package/dist/seed/products-auctions-seed-data.d.ts +0 -2
  518. package/dist/seed/products-auctions-seed-data.js +0 -475
  519. package/dist/seed/products-beyblade-x-seed-data.d.ts +0 -2
  520. package/dist/seed/products-beyblade-x-seed-data.js +0 -476
  521. package/dist/seed/products-catalogue-seed-data.d.ts +0 -22
  522. package/dist/seed/products-catalogue-seed-data.js +0 -86384
  523. package/dist/seed/products-classifieds-seed-data.d.ts +0 -7
  524. package/dist/seed/products-classifieds-seed-data.js +0 -435
  525. package/dist/seed/products-digital-codes-seed-data.d.ts +0 -7
  526. package/dist/seed/products-digital-codes-seed-data.js +0 -395
  527. package/dist/seed/products-live-items-seed-data.d.ts +0 -7
  528. package/dist/seed/products-live-items-seed-data.js +0 -269
  529. package/dist/seed/products-preorders-seed-data.d.ts +0 -2
  530. package/dist/seed/products-preorders-seed-data.js +0 -360
  531. package/dist/seed/products-prize-draws-seed-data.d.ts +0 -7
  532. package/dist/seed/products-prize-draws-seed-data.js +0 -427
  533. package/dist/seed/products-spares-seed-data.d.ts +0 -2
  534. package/dist/seed/products-spares-seed-data.js +0 -368
  535. package/dist/seed/products-standard-seed-data.d.ts +0 -2
  536. package/dist/seed/products-standard-seed-data.js +0 -632
  537. package/dist/seed/products-stickers-seed-data.d.ts +0 -2
  538. package/dist/seed/products-stickers-seed-data.js +0 -319
  539. package/dist/seed/reviews-seed-data.d.ts +0 -1
  540. package/dist/seed/reviews-seed-data.js +0 -185
  541. package/dist/seed/runner.d.ts +0 -2
  542. package/dist/seed/runner.js +0 -125
  543. package/dist/seed/scammers-seed-data.d.ts +0 -2
  544. package/dist/seed/scammers-seed-data.js +0 -235
  545. package/dist/seed/seed-market-config.d.ts +0 -48
  546. package/dist/seed/seed-market-config.js +0 -199
  547. package/dist/seed/seed-purpose.d.ts +0 -299
  548. package/dist/seed/seed-purpose.js +0 -431
  549. package/dist/seed/sessions-seed-data.d.ts +0 -3
  550. package/dist/seed/sessions-seed-data.js +0 -116
  551. package/dist/seed/shipments-seed-data.d.ts +0 -5
  552. package/dist/seed/shipments-seed-data.js +0 -185
  553. package/dist/seed/site-settings-seed-data.d.ts +0 -2
  554. package/dist/seed/site-settings-seed-data.js +0 -1069
  555. package/dist/seed/store-addresses-seed-data.d.ts +0 -18
  556. package/dist/seed/store-addresses-seed-data.js +0 -71
  557. package/dist/seed/store-extensions-seed-data.d.ts +0 -11
  558. package/dist/seed/store-extensions-seed-data.js +0 -292
  559. package/dist/seed/stores-seed-data.d.ts +0 -6
  560. package/dist/seed/stores-seed-data.js +0 -242
  561. package/dist/seed/support-tickets-seed-data.d.ts +0 -16
  562. package/dist/seed/support-tickets-seed-data.js +0 -239
  563. package/dist/seed/tax-codes-seed-data.d.ts +0 -34
  564. package/dist/seed/tax-codes-seed-data.js +0 -100
  565. package/dist/seed/test-data-ttl.d.ts +0 -29
  566. package/dist/seed/test-data-ttl.js +0 -31
  567. package/dist/seed/test-utils.d.ts +0 -49
  568. package/dist/seed/test-utils.js +0 -110
  569. package/dist/seed/types.d.ts +0 -89
  570. package/dist/seed/types.js +0 -15
  571. package/dist/seed/users-seed-data.d.ts +0 -2
  572. package/dist/seed/users-seed-data.js +0 -597
  573. package/dist/seed/wishlists-seed-data.d.ts +0 -12
  574. 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>[];