@mohasinac/appkit 4.52.4 → 4.53.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 (633) hide show
  1. package/dist/.build-stamp.json +4 -4
  2. package/dist/_internal/client/features/sticker-trace/canvas-codec.d.ts +2 -0
  3. package/dist/_internal/client/features/sticker-trace/canvas-codec.js +148 -0
  4. package/dist/_internal/server/features/auctions/actions.js +1 -1
  5. package/dist/_internal/server/features/categories/data.js +23 -7
  6. package/dist/_internal/server/features/checkout/actions.js +10 -3
  7. package/dist/_internal/server/features/checkout/data.d.ts +15 -0
  8. package/dist/_internal/server/features/checkout/data.js +20 -3
  9. package/dist/_internal/server/features/lottery/actions.js +9 -1
  10. package/dist/_internal/server/features/lottery/og.d.ts +40 -0
  11. package/dist/_internal/server/features/lottery/og.js +79 -0
  12. package/dist/_internal/server/features/messages/actions.js +4 -0
  13. package/dist/_internal/server/features/offers/adapters.js +17 -3
  14. package/dist/_internal/server/features/orders/actions.js +7 -2
  15. package/dist/_internal/server/features/raffle/actions.d.ts +19 -0
  16. package/dist/_internal/server/features/raffle/actions.js +25 -0
  17. package/dist/_internal/server/features/reviews/actions.js +1 -1
  18. package/dist/_internal/server/features/reviews/data.d.ts +1 -1
  19. package/dist/_internal/server/features/search/index-build/artifact-store.d.ts +89 -0
  20. package/dist/_internal/server/features/search/index-build/artifact-store.js +208 -0
  21. package/dist/_internal/server/features/search/index-build/build.d.ts +57 -0
  22. package/dist/_internal/server/features/search/index-build/build.js +285 -0
  23. package/dist/_internal/server/features/search/index-build/sources.d.ts +53 -0
  24. package/dist/_internal/server/features/search/index-build/sources.js +385 -0
  25. package/dist/_internal/server/features/search/search-sources.d.ts +0 -15
  26. package/dist/_internal/server/features/search/search-sources.js +142 -7
  27. package/dist/_internal/server/features/seo/robots.js +21 -1
  28. package/dist/_internal/server/features/seo/sitemap.js +1 -1
  29. package/dist/_internal/server/features/shared/listing-data-factory.js +16 -4
  30. package/dist/_internal/server/features/site-settings/adapters.d.ts +1 -1
  31. package/dist/_internal/server/features/site-settings/adapters.js +26 -0
  32. package/dist/_internal/server/features/sticker-trace/actions.d.ts +109 -0
  33. package/dist/_internal/server/features/sticker-trace/actions.js +172 -0
  34. package/dist/_internal/server/features/sticker-trace/adapters.d.ts +80 -0
  35. package/dist/_internal/server/features/sticker-trace/adapters.js +174 -0
  36. package/dist/_internal/server/features/sticker-trace/build-cut-file.d.ts +26 -0
  37. package/dist/_internal/server/features/sticker-trace/build-cut-file.js +127 -0
  38. package/dist/_internal/server/features/sticker-trace/coordinator.d.ts +27 -0
  39. package/dist/_internal/server/features/sticker-trace/coordinator.js +169 -0
  40. package/dist/_internal/server/features/sticker-trace/fanout.d.ts +43 -0
  41. package/dist/_internal/server/features/sticker-trace/fanout.js +180 -0
  42. package/dist/_internal/server/features/sticker-trace/finalizer.d.ts +25 -0
  43. package/dist/_internal/server/features/sticker-trace/finalizer.js +123 -0
  44. package/dist/_internal/server/features/sticker-trace/mosaic-inputs.d.ts +30 -0
  45. package/dist/_internal/server/features/sticker-trace/mosaic-inputs.js +112 -0
  46. package/dist/_internal/server/features/sticker-trace/progress.d.ts +81 -0
  47. package/dist/_internal/server/features/sticker-trace/progress.js +198 -0
  48. package/dist/_internal/server/features/sticker-trace/promote.d.ts +23 -0
  49. package/dist/_internal/server/features/sticker-trace/promote.js +193 -0
  50. package/dist/_internal/server/features/sticker-trace/shard.d.ts +50 -0
  51. package/dist/_internal/server/features/sticker-trace/shard.js +174 -0
  52. package/dist/_internal/server/features/sticker-trace/sheet-actions.d.ts +141 -0
  53. package/dist/_internal/server/features/sticker-trace/sheet-actions.js +279 -0
  54. package/dist/_internal/server/features/sticker-trace/storage.d.ts +135 -0
  55. package/dist/_internal/server/features/sticker-trace/storage.js +282 -0
  56. package/dist/_internal/server/functions/scheduled.d.ts +2 -1
  57. package/dist/_internal/server/functions/scheduled.js +25 -1
  58. package/dist/_internal/server/jobs/core/_event-ref.d.ts +51 -0
  59. package/dist/_internal/server/jobs/core/_event-ref.js +63 -0
  60. package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +18 -0
  61. package/dist/_internal/server/jobs/core/assignSpinPrize.js +77 -16
  62. package/dist/_internal/server/jobs/core/auctionSettlement.js +13 -4
  63. package/dist/_internal/server/jobs/core/autoPayoutEligibility.js +44 -15
  64. package/dist/_internal/server/jobs/core/bundleStockSync.js +3 -4
  65. package/dist/_internal/server/jobs/core/cleanupRtdbEvents.js +44 -0
  66. package/dist/_internal/server/jobs/core/event-draw-reasons.d.ts +78 -0
  67. package/dist/_internal/server/jobs/core/event-draw-reasons.js +133 -0
  68. package/dist/_internal/server/jobs/core/listingProcessor.js +28 -8
  69. package/dist/_internal/server/jobs/core/onOrderCreate.js +12 -1
  70. package/dist/_internal/server/jobs/core/onScamReportCreate.js +13 -2
  71. package/dist/_internal/server/jobs/core/onScamReportRejected.js +8 -2
  72. package/dist/_internal/server/jobs/core/onScamReportVerified.js +8 -2
  73. package/dist/_internal/server/jobs/core/onStoreWrite.js +11 -4
  74. package/dist/_internal/server/jobs/core/prizeDrawAssignWinner.js +5 -4
  75. package/dist/_internal/server/jobs/core/prizeDrawExpiryReveal.js +1 -4
  76. package/dist/_internal/server/jobs/core/prizeDrawSoldOutReveal.js +1 -2
  77. package/dist/_internal/server/jobs/core/promotions.js +7 -4
  78. package/dist/_internal/server/jobs/core/searchIndexBuild.d.ts +7 -0
  79. package/dist/_internal/server/jobs/core/searchIndexBuild.js +211 -0
  80. package/dist/_internal/server/jobs/core/triggerEventRaffle.d.ts +35 -0
  81. package/dist/_internal/server/jobs/core/triggerEventRaffle.js +213 -31
  82. package/dist/_internal/server/jobs/core/weeklyPayoutEligibility.js +20 -14
  83. package/dist/_internal/server/jobs/handlers/assignSpinPrize.d.ts +8 -0
  84. package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +15 -15
  85. package/dist/_internal/server/jobs/handlers/index.d.ts +1 -0
  86. package/dist/_internal/server/jobs/handlers/index.js +1 -0
  87. package/dist/_internal/server/jobs/handlers/onCategoryWrite.js +18 -0
  88. package/dist/_internal/server/jobs/handlers/onProductWrite.js +18 -0
  89. package/dist/_internal/server/jobs/handlers/onReviewWrite.js +18 -0
  90. package/dist/_internal/server/jobs/handlers/onScamReportUpdate.js +18 -0
  91. package/dist/_internal/server/jobs/handlers/onStoreWrite.js +18 -0
  92. package/dist/_internal/server/jobs/handlers/searchIndexBuild.d.ts +2 -0
  93. package/dist/_internal/server/jobs/handlers/searchIndexBuild.js +2 -0
  94. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.d.ts +8 -0
  95. package/dist/_internal/server/jobs/handlers/triggerEventRaffle.js +15 -6
  96. package/dist/_internal/shared/actions/action-registry.js +29 -0
  97. package/dist/_internal/shared/cache/revalidate-targets.d.ts +0 -1
  98. package/dist/_internal/shared/cache/revalidate-targets.js +10 -8
  99. package/dist/_internal/shared/features/events/config.d.ts +14 -0
  100. package/dist/_internal/shared/features/events/config.js +14 -0
  101. package/dist/_internal/shared/features/notifications/action-url.js +8 -0
  102. package/dist/_internal/shared/features/site-settings/types.d.ts +11 -0
  103. package/dist/_internal/shared/features/sticker-trace/codec.d.ts +81 -0
  104. package/dist/_internal/shared/features/sticker-trace/codec.js +30 -0
  105. package/dist/_internal/shared/features/sticker-trace/config.d.ts +81 -0
  106. package/dist/_internal/shared/features/sticker-trace/config.js +177 -0
  107. package/dist/_internal/shared/features/sticker-trace/cut-contour.d.ts +20 -0
  108. package/dist/_internal/shared/features/sticker-trace/cut-contour.js +60 -0
  109. package/dist/_internal/shared/features/sticker-trace/export/build-export-set.d.ts +65 -0
  110. package/dist/_internal/shared/features/sticker-trace/export/build-export-set.js +176 -0
  111. package/dist/_internal/shared/features/sticker-trace/export/cut-svg.d.ts +56 -0
  112. package/dist/_internal/shared/features/sticker-trace/export/cut-svg.js +120 -0
  113. package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.d.ts +92 -0
  114. package/dist/_internal/shared/features/sticker-trace/export/machine-profiles.js +153 -0
  115. package/dist/_internal/shared/features/sticker-trace/export/nesting.d.ts +51 -0
  116. package/dist/_internal/shared/features/sticker-trace/export/nesting.js +110 -0
  117. package/dist/_internal/shared/features/sticker-trace/export/page-sizes.d.ts +68 -0
  118. package/dist/_internal/shared/features/sticker-trace/export/page-sizes.js +223 -0
  119. package/dist/_internal/shared/features/sticker-trace/export/part-tiling.d.ts +51 -0
  120. package/dist/_internal/shared/features/sticker-trace/export/part-tiling.js +178 -0
  121. package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.d.ts +26 -0
  122. package/dist/_internal/shared/features/sticker-trace/export/simplify-budget.js +134 -0
  123. package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.d.ts +40 -0
  124. package/dist/_internal/shared/features/sticker-trace/export/vectorise-art.js +195 -0
  125. package/dist/_internal/shared/features/sticker-trace/index.d.ts +2 -0
  126. package/dist/_internal/shared/features/sticker-trace/index.js +59 -0
  127. package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.d.ts +11 -0
  128. package/dist/_internal/shared/features/sticker-trace/math/catmull-rom.js +66 -0
  129. package/dist/_internal/shared/features/sticker-trace/math/edt.d.ts +27 -0
  130. package/dist/_internal/shared/features/sticker-trace/math/edt.js +165 -0
  131. package/dist/_internal/shared/features/sticker-trace/math/label.d.ts +15 -0
  132. package/dist/_internal/shared/features/sticker-trace/math/label.js +156 -0
  133. package/dist/_internal/shared/features/sticker-trace/math/marching-squares.d.ts +16 -0
  134. package/dist/_internal/shared/features/sticker-trace/math/marching-squares.js +242 -0
  135. package/dist/_internal/shared/features/sticker-trace/math/morphology.d.ts +46 -0
  136. package/dist/_internal/shared/features/sticker-trace/math/morphology.js +168 -0
  137. package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.d.ts +88 -0
  138. package/dist/_internal/shared/features/sticker-trace/math/rasterize-path.js +286 -0
  139. package/dist/_internal/shared/features/sticker-trace/math/rdp.d.ts +10 -0
  140. package/dist/_internal/shared/features/sticker-trace/math/rdp.js +74 -0
  141. package/dist/_internal/shared/features/sticker-trace/resume.d.ts +50 -0
  142. package/dist/_internal/shared/features/sticker-trace/resume.js +160 -0
  143. package/dist/_internal/shared/features/sticker-trace/trace/cluster.d.ts +20 -0
  144. package/dist/_internal/shared/features/sticker-trace/trace/cluster.js +132 -0
  145. package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.d.ts +28 -0
  146. package/dist/_internal/shared/features/sticker-trace/trace/cross-profile.js +120 -0
  147. package/dist/_internal/shared/features/sticker-trace/trace/flood.d.ts +21 -0
  148. package/dist/_internal/shared/features/sticker-trace/trace/flood.js +104 -0
  149. package/dist/_internal/shared/features/sticker-trace/trace/geometry.d.ts +3 -0
  150. package/dist/_internal/shared/features/sticker-trace/trace/geometry.js +140 -0
  151. package/dist/_internal/shared/features/sticker-trace/trace/line-filter.d.ts +15 -0
  152. package/dist/_internal/shared/features/sticker-trace/trace/line-filter.js +138 -0
  153. package/dist/_internal/shared/features/sticker-trace/trace/merge.d.ts +27 -0
  154. package/dist/_internal/shared/features/sticker-trace/trace/merge.js +187 -0
  155. package/dist/_internal/shared/features/sticker-trace/trace/paper.d.ts +32 -0
  156. package/dist/_internal/shared/features/sticker-trace/trace/paper.js +147 -0
  157. package/dist/_internal/shared/features/sticker-trace/trace/prefilter.d.ts +30 -0
  158. package/dist/_internal/shared/features/sticker-trace/trace/prefilter.js +125 -0
  159. package/dist/_internal/shared/features/sticker-trace/trace/quantise.d.ts +10 -0
  160. package/dist/_internal/shared/features/sticker-trace/trace/quantise.js +153 -0
  161. package/dist/_internal/shared/features/sticker-trace/trace/ridge.d.ts +88 -0
  162. package/dist/_internal/shared/features/sticker-trace/trace/ridge.js +344 -0
  163. package/dist/_internal/shared/features/sticker-trace/trace/segment.d.ts +10 -0
  164. package/dist/_internal/shared/features/sticker-trace/trace/segment.js +251 -0
  165. package/dist/_internal/shared/features/sticker-trace/types.d.ts +197 -0
  166. package/dist/_internal/shared/features/sticker-trace/types.js +49 -0
  167. package/dist/_internal/shared/listing-types/_registry.d.ts +11 -0
  168. package/dist/_internal/shared/listing-types/art/config.d.ts +1 -0
  169. package/dist/_internal/shared/listing-types/art/config.js +1 -0
  170. package/dist/_internal/shared/listing-types/auction/config.d.ts +1 -0
  171. package/dist/_internal/shared/listing-types/auction/config.js +1 -0
  172. package/dist/_internal/shared/listing-types/classified/config.d.ts +1 -0
  173. package/dist/_internal/shared/listing-types/classified/config.js +1 -0
  174. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +1 -0
  175. package/dist/_internal/shared/listing-types/digital-code/config.js +1 -0
  176. package/dist/_internal/shared/listing-types/feature-flags.d.ts +7 -0
  177. package/dist/_internal/shared/listing-types/feature-flags.js +9 -0
  178. package/dist/_internal/shared/listing-types/live/config.d.ts +1 -0
  179. package/dist/_internal/shared/listing-types/live/config.js +1 -0
  180. package/dist/_internal/shared/listing-types/pre-order/config.d.ts +1 -0
  181. package/dist/_internal/shared/listing-types/pre-order/config.js +1 -0
  182. package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +1 -0
  183. package/dist/_internal/shared/listing-types/prize-draw/config.js +1 -0
  184. package/dist/_internal/shared/listing-types/standard/config.d.ts +1 -0
  185. package/dist/_internal/shared/listing-types/standard/config.js +1 -0
  186. package/dist/_internal/shared/listing-types/stickers/config.d.ts +1 -0
  187. package/dist/_internal/shared/listing-types/stickers/config.js +1 -0
  188. package/dist/_internal/shared/media/limits.d.ts +12 -2
  189. package/dist/_internal/shared/media/limits.js +12 -2
  190. package/dist/_internal/shared/search/artifact-url.d.ts +35 -0
  191. package/dist/_internal/shared/search/artifact-url.js +119 -0
  192. package/dist/_internal/shared/search/index-record.d.ts +68 -0
  193. package/dist/_internal/shared/search/index-record.js +96 -0
  194. package/dist/_internal/shared/search/match.d.ts +65 -0
  195. package/dist/_internal/shared/search/match.js +263 -0
  196. package/dist/client.d.ts +8 -7
  197. package/dist/client.js +12 -5
  198. package/dist/configs/eslint.js +22 -2
  199. package/dist/constants/api-endpoints.d.ts +68 -0
  200. package/dist/constants/api-endpoints.js +32 -0
  201. package/dist/constants/field-names.d.ts +7 -1
  202. package/dist/constants/field-names.js +36 -1
  203. package/dist/contracts/repository.d.ts +8 -7
  204. package/dist/contracts/search.d.ts +2 -2
  205. package/dist/contracts/table.d.ts +3 -3
  206. package/dist/contracts/table.js +3 -3
  207. package/dist/core/contact-submissions.repository.js +2 -2
  208. package/dist/core/integration-keys.js +7 -1
  209. package/dist/core/newsletter.repository.js +2 -2
  210. package/dist/core/site-config.js +1 -1
  211. package/dist/errors/error-codes.d.ts +30 -0
  212. package/dist/errors/error-codes.js +30 -0
  213. package/dist/errors/error-display-map.js +40 -1
  214. package/dist/features/account/api/[userId]/addresses/route.js +1 -1
  215. package/dist/features/account/components/UserBidsView.js +1 -1
  216. package/dist/features/account/components/index.d.ts +0 -8
  217. package/dist/features/account/components/index.js +0 -4
  218. package/dist/features/addresses/repository/addresses.repository.d.ts +17 -6
  219. package/dist/features/addresses/repository/addresses.repository.js +65 -9
  220. package/dist/features/addresses/schemas/firestore.d.ts +17 -6
  221. package/dist/features/admin/actions/notification-actions.js +15 -6
  222. package/dist/features/admin/api/bids/route.js +1 -1
  223. package/dist/features/admin/api/coupons/route.js +1 -1
  224. package/dist/features/admin/api/products/route.js +1 -1
  225. package/dist/features/admin/api/reviews/route.js +1 -1
  226. package/dist/features/admin/components/AdminAdEditorView.js +19 -5
  227. package/dist/features/admin/components/AdminAuditLogView.js +1 -1
  228. package/dist/features/admin/components/AdminBlogEditorView.js +0 -1
  229. package/dist/features/admin/components/AdminBlogView.js +1 -1
  230. package/dist/features/admin/components/AdminBrandsView.js +17 -1
  231. package/dist/features/admin/components/AdminCategoryEditorView.js +0 -1
  232. package/dist/features/admin/components/AdminContactView.js +1 -1
  233. package/dist/features/admin/components/AdminEmployeeEditorView.js +1 -3
  234. package/dist/features/admin/components/AdminNewsletterView.js +1 -1
  235. package/dist/features/admin/components/AdminOrdersView.js +9 -2
  236. package/dist/features/admin/components/AdminPayoutsView.js +1 -1
  237. package/dist/features/admin/components/AdminPrizeDrawsView.js +11 -0
  238. package/dist/features/admin/components/AdminProductEditorView.d.ts +10 -1
  239. package/dist/features/admin/components/AdminProductEditorView.js +24 -37
  240. package/dist/features/admin/components/AdminProductsView.js +10 -3
  241. package/dist/features/admin/components/AdminScammersView.js +1 -1
  242. package/dist/features/admin/components/AdminSectionsView.js +21 -5
  243. package/dist/features/admin/components/AdminSessionsView.js +1 -1
  244. package/dist/features/admin/components/AdminSublistingCategoriesView.js +22 -1
  245. package/dist/features/admin/components/AdminTeamView.js +1 -1
  246. package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +0 -1
  247. package/dist/features/admin/components/AdminUsersView.js +1 -1
  248. package/dist/features/admin/components/DataListingView.d.ts +2 -1
  249. package/dist/features/admin/components/DataListingView.js +9 -4
  250. package/dist/features/admin/components/analytics/AdminPageViewsReportView.js +0 -2
  251. package/dist/features/admin/hooks/useAdminListing.d.ts +1 -1
  252. package/dist/features/admin/repository/site-settings.repository.js +8 -3
  253. package/dist/features/admin/schemas/firestore.d.ts +62 -1
  254. package/dist/features/admin/schemas/firestore.js +32 -0
  255. package/dist/features/admin/types/index.d.ts +1 -1
  256. package/dist/features/auctions/actions/bid-actions.d.ts +2 -2
  257. package/dist/features/auctions/actions/bid-actions.js +16 -4
  258. package/dist/features/auctions/api/route.js +1 -1
  259. package/dist/features/auctions/components/AuctionBottomActions.js +4 -0
  260. package/dist/features/auctions/repository/bid.repository.d.ts +46 -4
  261. package/dist/features/auctions/repository/bid.repository.js +114 -13
  262. package/dist/features/auctions/schemas/firestore.d.ts +24 -4
  263. package/dist/features/auctions/schemas/firestore.js +1 -0
  264. package/dist/features/auth/actions/profile-actions.js +30 -4
  265. package/dist/features/auth/components/index.d.ts +0 -1
  266. package/dist/features/auth/components/index.js +0 -1
  267. package/dist/features/auth/repository/session.repository.d.ts +17 -3
  268. package/dist/features/auth/repository/session.repository.js +46 -5
  269. package/dist/features/auth/repository/token.repository.d.ts +27 -4
  270. package/dist/features/auth/repository/token.repository.js +65 -11
  271. package/dist/features/auth/repository/user.repository.d.ts +33 -7
  272. package/dist/features/auth/repository/user.repository.js +100 -15
  273. package/dist/features/auth/schemas/firestore.d.ts +63 -12
  274. package/dist/features/auth/schemas/firestore.js +11 -0
  275. package/dist/features/before-after/api/route.js +1 -1
  276. package/dist/features/blog/components/BlogListView.js +16 -3
  277. package/dist/features/blog/components/BlogPostView.js +1 -1
  278. package/dist/features/blog/schemas/index.d.ts +2 -2
  279. package/dist/features/cart/api/route.js +1 -1
  280. package/dist/features/catalogue/repository/catalogue.repository.d.ts +7 -7
  281. package/dist/features/catalogue/repository/catalogue.repository.js +28 -10
  282. package/dist/features/catalogue/schemas/firestore.d.ts +11 -0
  283. package/dist/features/categories/api/route.js +10 -10
  284. package/dist/features/categories/components/CategoryDetailPageView.js +35 -5
  285. package/dist/features/categories/components/CategorySelectorCreate.js +0 -1
  286. package/dist/features/categories/components/index.d.ts +0 -2
  287. package/dist/features/categories/components/index.js +0 -1
  288. package/dist/features/categories/repository/categories.repository.d.ts +1 -0
  289. package/dist/features/categories/repository/categories.repository.js +31 -1
  290. package/dist/features/categories/schemas/index.d.ts +2 -2
  291. package/dist/features/categories/utils/taxonomy-visual.d.ts +21 -0
  292. package/dist/features/categories/utils/taxonomy-visual.js +58 -0
  293. package/dist/features/checkout/actions/checkout-value-otp-actions.js +8 -1
  294. package/dist/features/collections/api/[slug]/route.js +3 -3
  295. package/dist/features/collections/api/route.js +1 -1
  296. package/dist/features/consultation/api/route.js +1 -1
  297. package/dist/features/consultation/repository/consultations.repository.js +1 -1
  298. package/dist/features/consultation/types/index.d.ts +1 -1
  299. package/dist/features/contact/components/ContactForm.js +1 -3
  300. package/dist/features/corporate/api/route.js +1 -1
  301. package/dist/features/corporate/repository/corporate.repository.js +1 -1
  302. package/dist/features/corporate/types/index.d.ts +1 -1
  303. package/dist/features/cron/jobs/auction-expiry.job.js +1 -1
  304. package/dist/features/cron/jobs/preorder-reminder.job.js +1 -1
  305. package/dist/features/events/actions/event-actions.d.ts +14 -0
  306. package/dist/features/events/actions/event-actions.js +82 -3
  307. package/dist/features/events/api/[id]/route.js +2 -2
  308. package/dist/features/events/components/AdminEventEditorView.js +22 -3
  309. package/dist/features/events/components/AdminEventsView.js +32 -8
  310. package/dist/features/events/components/EventRafflesSection.d.ts +34 -1
  311. package/dist/features/events/components/EventRafflesSection.js +52 -3
  312. package/dist/features/events/components/SpinWheelView.d.ts +2 -2
  313. package/dist/features/events/components/SpinWheelView.js +41 -4
  314. package/dist/features/events/repository/event-entry.repository.d.ts +14 -2
  315. package/dist/features/events/repository/event-entry.repository.js +41 -7
  316. package/dist/features/events/schemas/firestore.d.ts +17 -4
  317. package/dist/features/events/types/index.d.ts +37 -0
  318. package/dist/features/faq/repository/faqs.repository.js +1 -1
  319. package/dist/features/faq/schemas/index.d.ts +5 -2
  320. package/dist/features/faq/schemas/index.js +6 -0
  321. package/dist/features/faq/types/index.d.ts +0 -1
  322. package/dist/features/grouped/components/GroupedListingEditorView.js +17 -2
  323. package/dist/features/homepage/api/carousel/[id]/route.js +1 -1
  324. package/dist/features/homepage/api/carousel/route.js +4 -4
  325. package/dist/features/homepage/api/route.js +2 -2
  326. package/dist/features/homepage/api/sections/route.js +1 -1
  327. package/dist/features/homepage/components/AnnouncementBar.d.ts +1 -9
  328. package/dist/features/homepage/components/AnnouncementBar.js +13 -19
  329. package/dist/features/homepage/components/MarketplaceHomepageView.js +6 -1
  330. package/dist/features/homepage/components/index.d.ts +0 -2
  331. package/dist/features/homepage/components/index.js +0 -1
  332. package/dist/features/homepage/repository/homepage.repository.js +1 -1
  333. package/dist/features/homepage/schemas/firestore.d.ts +6 -0
  334. package/dist/features/homepage/schemas/index.d.ts +10 -10
  335. package/dist/features/layout/AppLayoutShell.d.ts +12 -3
  336. package/dist/features/layout/AppLayoutShell.js +65 -13
  337. package/dist/features/layout/BottomActionsContext.d.ts +16 -0
  338. package/dist/features/layout/BottomActionsContext.js +5 -0
  339. package/dist/features/layout/BottomChrome.js +48 -9
  340. package/dist/features/layout/BottomNavbar.d.ts +14 -0
  341. package/dist/features/layout/BottomNavbar.js +43 -3
  342. package/dist/features/layout/MainNavbar.d.ts +11 -0
  343. package/dist/features/layout/NavbarLayout.d.ts +3 -0
  344. package/dist/features/layout/NavbarLayout.js +88 -11
  345. package/dist/features/layout/SideActionDock.d.ts +1 -0
  346. package/dist/features/layout/SideActionDock.js +219 -0
  347. package/dist/features/layout/TitleBarLayout.d.ts +1 -3
  348. package/dist/features/layout/TitleBarLayout.js +3 -4
  349. package/dist/features/layout/cta-anchor.d.ts +31 -0
  350. package/dist/features/layout/cta-anchor.js +31 -0
  351. package/dist/features/layout/hooks/useBottomActions.d.ts +7 -0
  352. package/dist/features/layout/hooks/useBottomActions.js +6 -1
  353. package/dist/features/layout/index.d.ts +9 -1
  354. package/dist/features/layout/index.js +9 -1
  355. package/dist/features/layout/useCtaReveal.d.ts +24 -0
  356. package/dist/features/layout/useCtaReveal.js +82 -0
  357. package/dist/features/layout/useHoldToOpen.d.ts +41 -0
  358. package/dist/features/layout/useHoldToOpen.js +84 -0
  359. package/dist/features/lottery/repository/lottery-entry.repository.d.ts +18 -3
  360. package/dist/features/lottery/repository/lottery-entry.repository.js +48 -6
  361. package/dist/features/lottery/schemas/firestore.d.ts +33 -5
  362. package/dist/features/loyalty/api/balance/route.js +1 -1
  363. package/dist/features/loyalty/api/history/route.js +1 -1
  364. package/dist/features/media/MediaImage.js +0 -1
  365. package/dist/features/media/MediaPickerModal.js +7 -1
  366. package/dist/features/media/modals/ImageEditor.js +5 -1
  367. package/dist/features/media/modals/VideoThumbnailSelector.js +17 -1
  368. package/dist/features/media/repository/media-assets.repository.d.ts +19 -0
  369. package/dist/features/media/upload/CameraCapture.js +16 -1
  370. package/dist/features/media/upload/ImageUpload.js +42 -4
  371. package/dist/features/media/upload/MediaUploadField.js +69 -13
  372. package/dist/features/media/upload/downscale-image.d.ts +56 -0
  373. package/dist/features/media/upload/downscale-image.js +150 -0
  374. package/dist/features/messages/components/ConversationThreadView.js +45 -2
  375. package/dist/features/messages/components/MessageSellerButton.d.ts +15 -1
  376. package/dist/features/messages/components/MessageSellerButton.js +10 -2
  377. package/dist/features/messages/schemas/firestore.d.ts +15 -0
  378. package/dist/features/orders/hooks/useOrders.js +4 -2
  379. package/dist/features/orders/repository/orders.repository.d.ts +15 -4
  380. package/dist/features/orders/repository/orders.repository.js +52 -20
  381. package/dist/features/orders/schemas/firestore.d.ts +15 -4
  382. package/dist/features/orders/schemas/index.d.ts +8 -8
  383. package/dist/features/orders/types/index.d.ts +2 -2
  384. package/dist/features/payments/repository/payments.repository.js +2 -2
  385. package/dist/features/payments/repository/payout.repository.d.ts +23 -6
  386. package/dist/features/payments/repository/payout.repository.js +63 -23
  387. package/dist/features/payments/repository/saved-payment-methods.repository.d.ts +17 -6
  388. package/dist/features/payments/repository/saved-payment-methods.repository.js +59 -11
  389. package/dist/features/payments/schemas/firestore.d.ts +14 -3
  390. package/dist/features/payments/schemas/saved-methods-firestore.d.ts +12 -1
  391. package/dist/features/pre-orders/api/[slug]/route.js +1 -1
  392. package/dist/features/pre-orders/api/admin/route.js +1 -1
  393. package/dist/features/pre-orders/api/route.js +1 -1
  394. package/dist/features/pre-orders/repository/pre-orders.repository.d.ts +3 -3
  395. package/dist/features/pre-orders/repository/pre-orders.repository.js +6 -6
  396. package/dist/features/products/api/[id]/route.js +1 -1
  397. package/dist/features/products/components/ListingBottomActions.js +4 -0
  398. package/dist/features/products/components/ProductDetailPageView.js +2 -1
  399. package/dist/features/products/components/ProductGalleryClient.js +2 -2
  400. package/dist/features/products/components/ProductGrid.js +12 -1
  401. package/dist/features/products/components/index.d.ts +0 -2
  402. package/dist/features/products/components/index.js +0 -1
  403. package/dist/features/products/config/listing-type-listing-config.d.ts +0 -3
  404. package/dist/features/products/config/listing-type-listing-config.js +27 -2
  405. package/dist/features/products/constants/listing-tabs.d.ts +9 -0
  406. package/dist/features/products/constants/listing-tabs.js +3 -2
  407. package/dist/features/products/hooks/useProducts.js +2 -2
  408. package/dist/features/products/repository/products.repository.js +13 -1
  409. package/dist/features/products/schemas/index.d.ts +2 -2
  410. package/dist/features/products/types/index.d.ts +1 -1
  411. package/dist/features/promotions/api/route.js +1 -1
  412. package/dist/features/reviews/actions/review-actions.d.ts +6 -6
  413. package/dist/features/reviews/actions/review-actions.js +22 -8
  414. package/dist/features/reviews/components/ReviewDetailPageView.js +13 -1
  415. package/dist/features/reviews/components/ReviewsIndexPageView.js +21 -4
  416. package/dist/features/reviews/repository/reviews.repository.d.ts +19 -7
  417. package/dist/features/reviews/repository/reviews.repository.js +63 -12
  418. package/dist/features/reviews/schemas/firestore.d.ts +13 -2
  419. package/dist/features/reviews/schemas/index.d.ts +2 -2
  420. package/dist/features/scams/actions/scam-actions.js +16 -4
  421. package/dist/features/search/components/SearchResultsPageView.js +2 -1
  422. package/dist/features/search/hooks/useSearchIndex.d.ts +34 -0
  423. package/dist/features/search/hooks/useSearchIndex.js +172 -0
  424. package/dist/features/search/repository/search.repository.js +2 -2
  425. package/dist/features/seller/actions/offer-actions.d.ts +5 -5
  426. package/dist/features/seller/actions/offer-actions.js +38 -8
  427. package/dist/features/seller/actions/seller-actions.js +34 -7
  428. package/dist/features/seller/api/coupons/route.js +1 -1
  429. package/dist/features/seller/api/products/route.js +1 -1
  430. package/dist/features/seller/api/store/route.js +1 -1
  431. package/dist/features/seller/components/SellerBidsView.js +1 -1
  432. package/dist/features/seller/components/SellerCouponsView.js +1 -1
  433. package/dist/features/seller/components/SellerListingTypeView.js +9 -1
  434. package/dist/features/seller/components/SellerOrdersView.js +1 -1
  435. package/dist/features/seller/components/SellerPayoutSettingsView.js +0 -1
  436. package/dist/features/seller/components/SellerPayoutsView.js +1 -1
  437. package/dist/features/seller/components/SellerProductShell.js +0 -1
  438. package/dist/features/seller/components/SellerProductsView.js +1 -1
  439. package/dist/features/seller/components/SellerShippingView.js +0 -1
  440. package/dist/features/seller/components/SellerStorefrontView.js +0 -1
  441. package/dist/features/seller/components/index.d.ts +0 -4
  442. package/dist/features/seller/components/index.js +0 -2
  443. package/dist/features/seller/repository/offer.repository.d.ts +15 -3
  444. package/dist/features/seller/repository/offer.repository.js +43 -7
  445. package/dist/features/seller/schemas/firestore.d.ts +14 -3
  446. package/dist/features/seller/schemas/index.d.ts +4 -4
  447. package/dist/features/seller/schemas/order-forms.d.ts +39 -0
  448. package/dist/features/seller/schemas/order-forms.js +37 -0
  449. package/dist/features/shell/FormShell.js +6 -2
  450. package/dist/features/shell/QuickFormDrawer.js +15 -1
  451. package/dist/features/shipments/components/AdminShipmentEditorView.js +0 -1
  452. package/dist/features/shipments/components/AdminShipmentsView.js +1 -1
  453. package/dist/features/sticker-trace/components/StickerCommitPanel.d.ts +30 -0
  454. package/dist/features/sticker-trace/components/StickerCommitPanel.js +93 -0
  455. package/dist/features/sticker-trace/components/StickerPrintPanel.d.ts +33 -0
  456. package/dist/features/sticker-trace/components/StickerPrintPanel.js +104 -0
  457. package/dist/features/sticker-trace/components/StickerRetryPanel.d.ts +20 -0
  458. package/dist/features/sticker-trace/components/StickerRetryPanel.js +128 -0
  459. package/dist/features/sticker-trace/components/StickerRunHistoryPanel.d.ts +45 -0
  460. package/dist/features/sticker-trace/components/StickerRunHistoryPanel.js +84 -0
  461. package/dist/features/sticker-trace/components/StickerTraceStudio.d.ts +27 -0
  462. package/dist/features/sticker-trace/components/StickerTraceStudio.js +171 -0
  463. package/dist/features/sticker-trace/constants/help-content.d.ts +23 -0
  464. package/dist/features/sticker-trace/constants/help-content.js +172 -0
  465. package/dist/features/sticker-trace/hooks/useLiveTrace.d.ts +27 -0
  466. package/dist/features/sticker-trace/hooks/useLiveTrace.js +160 -0
  467. package/dist/features/sticker-trace/hooks/useStickerTraceProgress.d.ts +22 -0
  468. package/dist/features/sticker-trace/hooks/useStickerTraceProgress.js +106 -0
  469. package/dist/features/sticker-trace/repository/sticker-sheets.repository.d.ts +113 -0
  470. package/dist/features/sticker-trace/repository/sticker-sheets.repository.js +146 -0
  471. package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.d.ts +132 -0
  472. package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.js +174 -0
  473. package/dist/features/sticker-trace/schemas/firestore.d.ts +248 -0
  474. package/dist/features/sticker-trace/schemas/firestore.js +79 -0
  475. package/dist/features/sticker-trace/server.d.ts +8 -0
  476. package/dist/features/sticker-trace/server.js +51 -0
  477. package/dist/features/stores/actions/store-query-actions.d.ts +2 -2
  478. package/dist/features/stores/actions/store-query-actions.js +7 -2
  479. package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -3
  480. package/dist/features/stores/api/[storeSlug]/products/route.js +3 -3
  481. package/dist/features/stores/api/[storeSlug]/reviews/route.js +1 -1
  482. package/dist/features/stores/api/[storeSlug]/route.js +1 -1
  483. package/dist/features/stores/components/StoreNavTabs.js +17 -2
  484. package/dist/features/stores/manifest.js +8 -4
  485. package/dist/features/support/repository/support.repository.d.ts +14 -3
  486. package/dist/features/support/repository/support.repository.js +93 -13
  487. package/dist/features/support/schemas/firestore.d.ts +16 -5
  488. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +61 -19
  489. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +19 -3
  490. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +2 -0
  491. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +243 -0
  492. package/dist/features/tester/seed-data/authored/content-discovery__events.js +36 -10
  493. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +2 -0
  494. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +209 -0
  495. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +2 -0
  496. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +90 -0
  497. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +2 -0
  498. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +85 -0
  499. package/dist/features/tester/seed-data/authored/index.js +10 -0
  500. package/dist/features/tester/seed-data/authored/selling__media-limits.js +19 -17
  501. package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +10 -5
  502. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +2 -0
  503. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +283 -0
  504. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +235 -22
  505. package/dist/index.d.ts +10 -23
  506. package/dist/index.js +27 -19
  507. package/dist/next/api/routeHandler.js +9 -0
  508. package/dist/next/routing/require-record.d.ts +13 -0
  509. package/dist/next/routing/require-record.js +62 -0
  510. package/dist/next/routing/route-map.d.ts +4 -4
  511. package/dist/next/routing/route-map.js +25 -3
  512. package/dist/providers/db-firebase/base.d.ts +4 -2
  513. package/dist/providers/db-firebase/base.js +21 -5
  514. package/dist/providers/db-firebase/base.repository.d.ts +11 -9
  515. package/dist/providers/db-firebase/base.repository.js +19 -0
  516. package/dist/providers/db-firebase/rtdb-paths.d.ts +12 -0
  517. package/dist/providers/db-firebase/rtdb-paths.js +12 -0
  518. package/dist/react/ErrorBoundary.js +6 -1
  519. package/dist/react/hooks/realtime-event-constants.d.ts +1 -0
  520. package/dist/react/hooks/realtime-event-constants.js +8 -0
  521. package/dist/react/hooks/useEntityDelete.js +5 -1
  522. package/dist/react/hooks/useMessage.js +5 -1
  523. package/dist/repositories/index.d.ts +2 -2
  524. package/dist/repositories/index.js +6 -1
  525. package/dist/schemas/registry.d.ts +13 -20
  526. package/dist/schemas/registry.js +31 -14
  527. package/dist/schemas/webhooks/google-oauth.d.ts +2 -2
  528. package/dist/security/encrypted.d.ts +117 -0
  529. package/dist/security/encrypted.js +100 -0
  530. package/dist/security/index.d.ts +5 -2
  531. package/dist/security/index.js +16 -2
  532. package/dist/security/pii-accessors.d.ts +71 -0
  533. package/dist/security/pii-accessors.js +150 -0
  534. package/dist/security/pii-encrypt.d.ts +0 -8
  535. package/dist/security/pii-encrypt.js +22 -15
  536. package/dist/security/pii-mask.d.ts +18 -0
  537. package/dist/security/pii-mask.js +27 -0
  538. package/dist/seed/_helpers/search-txt-wrappers.d.ts +6 -6
  539. package/dist/seed/_helpers/search-txt-wrappers.js +22 -0
  540. package/dist/seed/addresses-seed-data.d.ts +2 -2
  541. package/dist/seed/authenticity-knowledge-seed-data.d.ts +34 -0
  542. package/dist/seed/authenticity-knowledge-seed-data.js +1277 -0
  543. package/dist/seed/bids-seed-data.d.ts +2 -2
  544. package/dist/seed/bids-seed-data.js +23 -2
  545. package/dist/seed/events-seed-data.d.ts +2 -2
  546. package/dist/seed/events-seed-data.js +5 -0
  547. package/dist/seed/faq-seed-data.js +175 -5
  548. package/dist/seed/homepage-sections-seed-data.js +39 -23
  549. package/dist/seed/index.d.ts +1 -0
  550. package/dist/seed/index.js +1 -0
  551. package/dist/seed/lottery-entries-seed-data.d.ts +2 -2
  552. package/dist/seed/offers-seed-data.d.ts +2 -2
  553. package/dist/seed/offers-seed-data.js +1 -1
  554. package/dist/seed/orders-seed-data.d.ts +2 -2
  555. package/dist/seed/payouts-seed-data.d.ts +2 -2
  556. package/dist/seed/payouts-seed-data.js +1 -1
  557. package/dist/seed/reviews-seed-data.d.ts +1 -2
  558. package/dist/seed/seed-purpose.js +7 -0
  559. package/dist/seed/sessions-seed-data.d.ts +2 -2
  560. package/dist/seed/sessions-seed-data.js +5 -0
  561. package/dist/seed/site-settings-seed-data.js +1 -1
  562. package/dist/seed/support-tickets-seed-data.d.ts +2 -2
  563. package/dist/seed/support-tickets-seed-data.js +1 -1
  564. package/dist/seed/users-seed-data.d.ts +2 -2
  565. package/dist/seed/users-seed-data.js +1 -1
  566. package/dist/seo/json-ld.js +5 -1
  567. package/dist/server.d.ts +18 -3
  568. package/dist/server.js +59 -3
  569. package/dist/styles.css +237 -1
  570. package/dist/tailwind-utilities.css +1 -1
  571. package/dist/ui/components/Button.js +7 -1
  572. package/dist/ui/components/FilterChipGroup.d.ts +11 -0
  573. package/dist/ui/components/FilterChipGroup.js +1 -1
  574. package/dist/ui/components/ImageGallery.js +6 -1
  575. package/dist/ui/components/ListingLayout.js +14 -8
  576. package/dist/ui/components/OverflowRow.d.ts +92 -0
  577. package/dist/ui/components/OverflowRow.js +203 -0
  578. package/dist/ui/components/OverflowRow.style.css +235 -0
  579. package/dist/ui/components/RecordDetailModal.js +14 -1
  580. package/dist/ui/components/RowActionMenu.js +5 -1
  581. package/dist/ui/components/SideDrawer.js +5 -1
  582. package/dist/ui/components/SideModal.js +9 -1
  583. package/dist/ui/components/TabBarShell.d.ts +12 -1
  584. package/dist/ui/components/TabBarShell.js +3 -2
  585. package/dist/ui/components/Tabs.js +36 -24
  586. package/dist/ui/components/Toast.d.ts +3 -24
  587. package/dist/ui/components/Toast.js +2 -19
  588. package/dist/ui/components/TopBannerPortal.d.ts +15 -0
  589. package/dist/ui/components/TopBannerPortal.js +19 -0
  590. package/dist/ui/components/UnsavedChangesModal.js +5 -1
  591. package/dist/ui/components/index.style.css +1 -0
  592. package/dist/ui/components/row-collapse.d.ts +15 -0
  593. package/dist/ui/components/row-collapse.js +127 -0
  594. package/dist/ui/components/toast-context.d.ts +63 -0
  595. package/dist/ui/components/toast-context.js +48 -0
  596. package/dist/ui/components/top-banner-slot.d.ts +37 -0
  597. package/dist/ui/components/top-banner-slot.js +45 -0
  598. package/dist/ui/icons/icon-registry.d.ts +6 -0
  599. package/dist/ui/icons/icon-registry.js +17 -1
  600. package/dist/ui/index.d.ts +2 -0
  601. package/dist/ui/index.js +1 -0
  602. package/dist/utils/array.helper.d.ts +2 -2
  603. package/dist/utils/array.helper.js +5 -5
  604. package/dist/utils/id-generators.d.ts +6 -0
  605. package/dist/utils/id-generators.js +10 -0
  606. package/dist/utils/media-url.js +0 -2
  607. package/dist/utils/search-txt-builders.d.ts +28 -4
  608. package/dist/utils/search-txt-builders.js +41 -1
  609. package/dist/validation/schemas.d.ts +8 -8
  610. package/package.json +6 -2
  611. package/scripts/seed-cli.mjs +3 -0
  612. package/dist/features/account/components/UserAddressesView.d.ts +0 -13
  613. package/dist/features/account/components/UserAddressesView.js +0 -5
  614. package/dist/features/account/components/UserNotificationsView.d.ts +0 -15
  615. package/dist/features/account/components/UserNotificationsView.js +0 -12
  616. package/dist/features/account/components/UserSettingsView.d.ts +0 -16
  617. package/dist/features/account/components/UserSettingsView.js +0 -13
  618. package/dist/features/account/components/UserSupportView.d.ts +0 -3
  619. package/dist/features/account/components/UserSupportView.js +0 -166
  620. package/dist/features/admin/components/DemoSeedView.d.ts +0 -11
  621. package/dist/features/admin/components/DemoSeedView.js +0 -5
  622. package/dist/features/auth/components/AuthStatusPanel.d.ts +0 -10
  623. package/dist/features/auth/components/AuthStatusPanel.js +0 -22
  624. package/dist/features/categories/components/CategoryProductsView.d.ts +0 -45
  625. package/dist/features/categories/components/CategoryProductsView.js +0 -21
  626. package/dist/features/homepage/components/HowItWorksInfoView.d.ts +0 -36
  627. package/dist/features/homepage/components/HowItWorksInfoView.js +0 -10
  628. package/dist/features/layout/BottomActions.d.ts +0 -1
  629. package/dist/features/layout/BottomActions.js +0 -311
  630. package/dist/features/products/components/ProductsView.d.ts +0 -6
  631. package/dist/features/products/components/ProductsView.js +0 -5
  632. package/dist/features/seller/components/SellerStoreView.d.ts +0 -8
  633. package/dist/features/seller/components/SellerStoreView.js +0 -8
package/dist/client.js CHANGED
@@ -60,6 +60,7 @@ export { Alert } from "./ui/components/Alert.js";
60
60
  export { Divider } from "./ui/components/Divider.js";
61
61
  export { Tabs, TabsList, TabsTrigger, TabsContent } from "./ui/components/Tabs.js";
62
62
  export { TabBarShell, TabBarButton, TabsNavSelect } from "./ui/components/TabBarShell.js";
63
+ export { OverflowRow } from "./ui/components/OverflowRow.js";
63
64
  export { SellerProductsView } from "./features/seller/components/SellerProductsView.js";
64
65
  export { SellerOrderDetailPanel } from "./features/seller/components/SellerOrdersView.js";
65
66
  export { SellerPayoutDetailContent } from "./features/seller/components/SellerPayoutsView.js";
@@ -310,7 +311,7 @@ export { buildBidDetailFields, bidStatusBadge } from "./features/auctions/compon
310
311
  // Same reason, one feature over: the entry detail modal and its full page
311
312
  // render from one builder rather than two lists that can drift.
312
313
  export { buildEventEntryDetailFields } from "./features/events/components/event-entry-detail-fields.js";
313
- export { ProtectedRoute, AuthStatusPanel, ForgotPasswordView, LoginForm, RegisterForm, ResetPasswordView, VerifyEmailView } from "./features/auth/index.js";
314
+ export { ProtectedRoute, ForgotPasswordView, LoginForm, RegisterForm, ResetPasswordView, VerifyEmailView } from "./features/auth/index.js";
314
315
  export { useLogout, useLogin, useGoogleLogin, useLinkGoogleAccount, useRegister, useForgotPassword, useResetPassword, useVerifyEmail, useChangeEmail } from "./features/auth/index.js";
315
316
  export { CartView, CartItemRow, CartGroupLineRow, CartSummary, CartPriceBreakdown, CartDrawer, CheckoutView, CheckoutSuccessView, CheckoutAddressStep, useGuestCart, useCartCount, useAddToCart, useCart, useGuestCartMerge, useCartQuery } from "./features/cart/index.js";
316
317
  export { StoreAddonsPicker, hasAnyStoreAddon } from "./features/cart/index.js";
@@ -323,12 +324,18 @@ export { useAddresses, useCreateAddress, useUpdateAddress, useDeleteAddress, use
323
324
  export { AddressBook, AddressCard, AddressForm } from "./features/account/index.js";
324
325
  export { useProfile, useUpdateProfile } from "./features/account/index.js";
325
326
  export { updateProfileSchema } from "./features/account/index.js";
326
- export { CategoryProductsView } from "./features/categories/index.js";
327
327
  export { MediaImage } from "./features/media/index.js";
328
328
  export { StoreSidebar } from "./features/seller/components/SellerSidebar.js";
329
329
  export { StoreProductsView, StoreAboutView } from "./features/stores/index.js";
330
330
  export { SearchView } from "./features/search/index.js";
331
- export { UserSettingsView } from "./features/account/index.js";
331
+ /*
332
+ * The browser-side search index. Exported from its DEFINING module rather
333
+ * than through `features/search/index` (Root Cause #18) — `ensureSearchIndex`
334
+ * is a module-scope singleton, and routing it through a barrel is how a
335
+ * second copy of that module ends up in the graph, at which point the "one
336
+ * fetch per page session" guarantee quietly becomes two.
337
+ */
338
+ export { useSearchIndex, ensureSearchIndex } from "./features/search/hooks/useSearchIndex.js";
332
339
  export { AdSlot } from "./features/homepage/components/AdSlot.js";
333
340
  export { useActiveAd } from "./features/homepage/hooks/useActiveAd.js";
334
341
  export { registerAdSlot, registerAdSlots, unregisterAdSlot, clearAdRegistry, setAdConsentGranted, isAdConsentGranted, isAdSlotRenderable, } from "./features/homepage/ad-registry.js";
@@ -385,7 +392,7 @@ export { SellerDashboardView as StoreDashboardView, SellerDashboardView, useSell
385
392
  export { SellerPayoutSettingsView, SellerShippingView, SellerReviewsView, SellerPayoutRequestView, SellerAnalyticsStats, SellerTopProducts, SellerAnalyticsView, SellerPayoutsView, SellerCouponEditorView, SellerBidsView, SellerAddressesView, PrintCenterView, SellerOffersView, SellerGroupedListingsView, StoreGroupedListingsView, SellerAnalyticsAlertsView, StoreAnalyticsAlertsView, BarcodeField, FulfillmentView, SellerListingTypeView, SELLER_LISTING_TYPE_SPECS } from "./features/seller/components/index.js";
386
393
  /* The draft → route conversion, so both coupon callsites share one rule. */
387
394
  export { couponDraftToPayload } from "./features/seller/schemas/coupon-form.js";
388
- export { UserAccountHubView, UserOrdersView, UserBidsView, OrderDetailView, UserNotificationsView, UserReturnsView, UserSupportView, useNotifications } from "./features/account/index.js";
395
+ export { UserAccountHubView, UserOrdersView, UserBidsView, OrderDetailView, UserReturnsView, useNotifications } from "./features/account/index.js";
389
396
  export { useOrders, useOrder, OrdersList } from "./features/orders/index.js";
390
397
  export { OrderStatusTimeline } from "./features/orders/components/OrderStatusTimeline.js";
391
398
  export { CountdownDisplay } from "./ui/components/CountdownDisplay.js";
@@ -415,7 +422,7 @@ export { normalizeListingType, isAuctionListing, isPreOrderListing, isStandardLi
415
422
  // `finalSale` field. See the module docstring for why `!p.finalSale` is wrong.
416
423
  export { isFinalSale, acceptsChangeOfMindReturns, } from "./features/products/constants/final-sale.js";
417
424
  // SB-UNI-X4 2026-05-13 — per-type feature-flag helpers (client-safe).
418
- export { isListingTypeEnabled, isCategoryTypeEnabled, enabledListingTypes, enabledCategoryTypes, ALL_LISTING_TYPES, } from "./_internal/shared/listing-types/feature-flags.js";
425
+ export { isListingTypeEnabled, isCategoryTypeEnabled, enabledListingTypes, enabledCategoryTypes, ALL_LISTING_TYPES, isListingType, } from "./_internal/shared/listing-types/feature-flags.js";
419
426
  // SB-UNI-X5 2026-05-13 — action telemetry sink (client-safe; defaults to
420
427
  // a no-op + console.debug in dev).
421
428
  export { actionTracker, setActionTrackerSink, resetActionTrackerSink, } from "./_internal/shared/listing-types/action-tracker.js";
@@ -25,8 +25,28 @@
25
25
  */
26
26
  const VARIANT_CATALOGUE_RULES = [
27
27
  {
28
- // Hardcoded route strings — use ROUTES.* constants.
29
- selector: "Literal[value=/^\\/[a-z]+(\\?|#|$)/]",
28
+ /*
29
+ * Hardcoded route strings — use ROUTES.* constants.
30
+ *
31
+ * 🛑 The `:not(Property[key.name="route"] > Literal)` is load-bearing, not
32
+ * tidying. `safeRead({ route: "/products", key, fallback })` takes a route
33
+ * as an OBSERVABILITY LABEL — it is the string that appears on a
34
+ * DEGRADED_READ row, never something anything navigates to. Flagging it
35
+ * asked for `ROUTES.PUBLIC.PRODUCTS` in a log field.
36
+ *
37
+ * Measured 2026-10-17 across appkit/src: this rule produced 741 warnings
38
+ * of which 23 were real — a 97% false-positive rate. 653 were tester-case
39
+ * hrefs that MUST be literals (see the file-scoped exemption in the
40
+ * consumer's eslint.config.mjs), 43 were inside route-map.ts itself, and
41
+ * 22 were these labels. A rule at that ratio is not a soft gate, it is
42
+ * noise that teaches people to scroll past the other 23.
43
+ *
44
+ * 🛑 The combinator is DESCENDANT, not child. `>` missed
45
+ * `route: verifiedOnly ? "/sellers" : "/stores"`, where the literal's
46
+ * parent is the ConditionalExpression and not the Property — so a label
47
+ * behind a ternary was still flagged while the plain one beside it was not.
48
+ */
49
+ selector: 'Literal[value=/^\\/[a-z]+(\\?|#|$)/]:not(Property[key.name="route"] Literal)',
30
50
  message: "Use ROUTES.* constants from @mohasinac/appkit instead of hardcoded route strings.",
31
51
  },
32
52
  {
@@ -287,6 +287,36 @@ export declare const TOOL_ENDPOINTS: {
287
287
  */
288
288
  readonly PRICE_INDEX_SEARCH: (q: string) => string;
289
289
  };
290
+ /**
291
+ * The sticker-sheet kiss-cut tracer. Admin-only, every route behind
292
+ * `admin:products:write`.
293
+ *
294
+ * 🛑 EVERY ONE OF THESE RETURNS JSON. Not one returns bytes — a binary is
295
+ * always a 5-minute signed GCS URL fetched by the browser directly, which is
296
+ * why `ASSET` takes a KIND and hands back `{ url, expiresAt }`. Vercel Hobby's
297
+ * Fast Origin Transfer allowance is 10 GB and exceeding a cap PAUSES THE
298
+ * PROJECT, which happened here at 52.52 GB (Root Cause #104).
299
+ * `audit-sticker-trace-egress` is strict-zero on it with no suppression marker.
300
+ */
301
+ export declare const STICKER_SHEET_ENDPOINTS: {
302
+ /** GET the sheet list · POST creates a sheet AND signs its scan upload. */
303
+ readonly SHEETS: "/api/admin/sticker-sheets";
304
+ readonly SHEET_BY_ID: (id: string) => string;
305
+ /** POST finalizes an upload: magic-byte verified, then recorded on the sheet. */
306
+ readonly UPLOAD: (id: string) => string;
307
+ /** GET the attempt history · POST starts a run. 🛑 `name` is REQUIRED. */
308
+ readonly RUNS: (id: string) => string;
309
+ /** POST a retry as a NEW named run. The response carries the resume clamp. */
310
+ readonly RUN_RETRY: (id: string, runId: string) => string;
311
+ /**
312
+ * Mint a signed read URL. `kind` names WHAT is wanted and the server resolves
313
+ * the path itself — accepting a path would be a signed-URL mint for any
314
+ * object in the bucket.
315
+ */
316
+ readonly ASSET: (id: string, kind: string, runId?: string) => string;
317
+ /** The storage meter — bytes AND object count, biggest sheet first. */
318
+ readonly USAGE: "/api/admin/sticker-sheets/usage";
319
+ };
290
320
  export declare const CHECKOUT_ENDPOINTS: {
291
321
  readonly PREFLIGHT: "/api/checkout/preflight";
292
322
  readonly PLACE_ORDER: "/api/checkout";
@@ -1018,6 +1048,25 @@ export declare const API_ENDPOINTS: {
1018
1048
  readonly REPORTS: {
1019
1049
  readonly SUBMIT: "/api/reports";
1020
1050
  };
1051
+ readonly STICKER_SHEETS: {
1052
+ /** GET the sheet list · POST creates a sheet AND signs its scan upload. */
1053
+ readonly SHEETS: "/api/admin/sticker-sheets";
1054
+ readonly SHEET_BY_ID: (id: string) => string;
1055
+ /** POST finalizes an upload: magic-byte verified, then recorded on the sheet. */
1056
+ readonly UPLOAD: (id: string) => string;
1057
+ /** GET the attempt history · POST starts a run. 🛑 `name` is REQUIRED. */
1058
+ readonly RUNS: (id: string) => string;
1059
+ /** POST a retry as a NEW named run. The response carries the resume clamp. */
1060
+ readonly RUN_RETRY: (id: string, runId: string) => string;
1061
+ /**
1062
+ * Mint a signed read URL. `kind` names WHAT is wanted and the server resolves
1063
+ * the path itself — accepting a path would be a signed-URL mint for any
1064
+ * object in the bucket.
1065
+ */
1066
+ readonly ASSET: (id: string, kind: string, runId?: string) => string;
1067
+ /** The storage meter — bytes AND object count, biggest sheet first. */
1068
+ readonly USAGE: "/api/admin/sticker-sheets/usage";
1069
+ };
1021
1070
  };
1022
1071
  /** Canonical alias — prefer API_ROUTES over API_ENDPOINTS in new code. */
1023
1072
  export declare const API_ROUTES: {
@@ -1520,4 +1569,23 @@ export declare const API_ROUTES: {
1520
1569
  readonly REPORTS: {
1521
1570
  readonly SUBMIT: "/api/reports";
1522
1571
  };
1572
+ readonly STICKER_SHEETS: {
1573
+ /** GET the sheet list · POST creates a sheet AND signs its scan upload. */
1574
+ readonly SHEETS: "/api/admin/sticker-sheets";
1575
+ readonly SHEET_BY_ID: (id: string) => string;
1576
+ /** POST finalizes an upload: magic-byte verified, then recorded on the sheet. */
1577
+ readonly UPLOAD: (id: string) => string;
1578
+ /** GET the attempt history · POST starts a run. 🛑 `name` is REQUIRED. */
1579
+ readonly RUNS: (id: string) => string;
1580
+ /** POST a retry as a NEW named run. The response carries the resume clamp. */
1581
+ readonly RUN_RETRY: (id: string, runId: string) => string;
1582
+ /**
1583
+ * Mint a signed read URL. `kind` names WHAT is wanted and the server resolves
1584
+ * the path itself — accepting a path would be a signed-URL mint for any
1585
+ * object in the bucket.
1586
+ */
1587
+ readonly ASSET: (id: string, kind: string, runId?: string) => string;
1588
+ /** The storage meter — bytes AND object count, biggest sheet first. */
1589
+ readonly USAGE: "/api/admin/sticker-sheets/usage";
1590
+ };
1523
1591
  };
@@ -334,6 +334,37 @@ export const TOOL_ENDPOINTS = {
334
334
  */
335
335
  PRICE_INDEX_SEARCH: (q) => `/api/tools/price-index?q=${encodeURIComponent(q)}`,
336
336
  };
337
+ /**
338
+ * The sticker-sheet kiss-cut tracer. Admin-only, every route behind
339
+ * `admin:products:write`.
340
+ *
341
+ * 🛑 EVERY ONE OF THESE RETURNS JSON. Not one returns bytes — a binary is
342
+ * always a 5-minute signed GCS URL fetched by the browser directly, which is
343
+ * why `ASSET` takes a KIND and hands back `{ url, expiresAt }`. Vercel Hobby's
344
+ * Fast Origin Transfer allowance is 10 GB and exceeding a cap PAUSES THE
345
+ * PROJECT, which happened here at 52.52 GB (Root Cause #104).
346
+ * `audit-sticker-trace-egress` is strict-zero on it with no suppression marker.
347
+ */
348
+ export const STICKER_SHEET_ENDPOINTS = {
349
+ /** GET the sheet list · POST creates a sheet AND signs its scan upload. */
350
+ SHEETS: "/api/admin/sticker-sheets",
351
+ SHEET_BY_ID: (id) => `/api/admin/sticker-sheets/${id}`,
352
+ /** POST finalizes an upload: magic-byte verified, then recorded on the sheet. */
353
+ UPLOAD: (id) => `/api/admin/sticker-sheets/${id}/upload`,
354
+ /** GET the attempt history · POST starts a run. 🛑 `name` is REQUIRED. */
355
+ RUNS: (id) => `/api/admin/sticker-sheets/${id}/runs`,
356
+ /** POST a retry as a NEW named run. The response carries the resume clamp. */
357
+ RUN_RETRY: (id, runId) => `/api/admin/sticker-sheets/${id}/runs/${runId}/retry`,
358
+ /**
359
+ * Mint a signed read URL. `kind` names WHAT is wanted and the server resolves
360
+ * the path itself — accepting a path would be a signed-URL mint for any
361
+ * object in the bucket.
362
+ */
363
+ ASSET: (id, kind, runId) => `/api/admin/sticker-sheets/${id}/asset?kind=${encodeURIComponent(kind)}` +
364
+ (runId ? `&runId=${encodeURIComponent(runId)}` : ""),
365
+ /** The storage meter — bytes AND object count, biggest sheet first. */
366
+ USAGE: "/api/admin/sticker-sheets/usage",
367
+ };
337
368
  // ---------------------------------------------------------------------------
338
369
  // Checkout
339
370
  // ---------------------------------------------------------------------------
@@ -734,6 +765,7 @@ export const API_ENDPOINTS = {
734
765
  SUPPORT: SUPPORT_ENDPOINTS,
735
766
  SCAMMERS: SCAMMER_ENDPOINTS,
736
767
  REPORTS: REPORT_ENDPOINTS,
768
+ STICKER_SHEETS: STICKER_SHEET_ENDPOINTS,
737
769
  };
738
770
  /** Canonical alias — prefer API_ROUTES over API_ENDPOINTS in new code. */
739
771
  export const API_ROUTES = API_ENDPOINTS;
@@ -427,7 +427,6 @@ export declare const EVENT_ENTRY_FIELDS: {
427
427
  readonly USER_ID: "userId";
428
428
  readonly USER_DISPLAY_NAME: "userDisplayName";
429
429
  readonly USER_EMAIL: "userEmail";
430
- readonly STATUS: "status";
431
430
  readonly RAFFLE_ELIGIBLE: "raffleEligible";
432
431
  readonly SPIN_USED: "spinUsed";
433
432
  readonly SPIN_COUNT: "spinCount";
@@ -436,11 +435,18 @@ export declare const EVENT_ENTRY_FIELDS: {
436
435
  readonly SPIN_WON_AT: "spinWonAt";
437
436
  readonly GUEST_IP_HASH: "guestIpHash";
438
437
  readonly CREATED_AT: "createdAt";
438
+ readonly STATUS: "status";
439
439
  readonly STATUS_VALUES: {
440
440
  readonly CONFIRMED: "CONFIRMED";
441
441
  readonly WAITLISTED: "WAITLISTED";
442
442
  readonly CANCELLED: "CANCELLED";
443
443
  };
444
+ readonly REVIEW_STATUS: "reviewStatus";
445
+ readonly REVIEW_STATUS_VALUES: {
446
+ readonly PENDING: "pending";
447
+ readonly APPROVED: "approved";
448
+ readonly FLAGGED: "flagged";
449
+ };
444
450
  };
445
451
  export declare const PAYOUT_FIELDS: {
446
452
  readonly ID: "id";
@@ -487,7 +487,6 @@ export const EVENT_ENTRY_FIELDS = {
487
487
  USER_ID: "userId",
488
488
  USER_DISPLAY_NAME: "userDisplayName",
489
489
  USER_EMAIL: "userEmail",
490
- STATUS: "status",
491
490
  RAFFLE_ELIGIBLE: "raffleEligible",
492
491
  SPIN_USED: "spinUsed",
493
492
  SPIN_COUNT: "spinCount",
@@ -496,11 +495,47 @@ export const EVENT_ENTRY_FIELDS = {
496
495
  SPIN_WON_AT: "spinWonAt",
497
496
  GUEST_IP_HASH: "guestIpHash",
498
497
  CREATED_AT: "createdAt",
498
+ /*
499
+ * 🛑 TWO status fields, different meanings, and conflating them cost the
500
+ * raffle feature its entire working life.
501
+ *
502
+ * `status` — RSVP / attendance. CONFIRMED | WAITLISTED | CANCELLED.
503
+ * Written ONLY by an admin clicking Confirm / Waitlist /
504
+ * Cancel in `AdminAllEventEntriesView`, which also filters
505
+ * on it. Never set when an entry is created.
506
+ * `reviewStatus` — moderation of what the entrant SUBMITTED.
507
+ * pending | approved | flagged. Written on every entry
508
+ * path, and indexed `(eventId, reviewStatus, submittedAt)`.
509
+ *
510
+ * `EventEntryDocument.status`'s own doc comment claims it "drives raffle
511
+ * eligibility", and `runTriggerEventRaffle` duly queried
512
+ * `status == "CONFIRMED"`. But nothing writes `status` at creation time, so
513
+ * the pool was empty unless an admin had hand-confirmed every entry one row
514
+ * at a time — on a raffle seeded with 1,892 entries. Every draw returned
515
+ * `no_eligible_entries`; the raffle had never once been drawable.
516
+ *
517
+ * Eligibility moved to `reviewStatus == "approved"` on 2026-10-19 (and
518
+ * `enterEvent` now auto-approves raffle entries, since a raffle entry is a
519
+ * name plus an optional message and there is nothing to moderate). `status`
520
+ * stays because its admin workflow is real — it just is not the gate.
521
+ *
522
+ * Both mirror `EVENT_ENTRY_FIELDS` in
523
+ * `features/events/schemas/firestore.ts`, which is the source of truth for
524
+ * the document shape — verify there before adding a value here (Root Cause
525
+ * #34).
526
+ */
527
+ STATUS: "status",
499
528
  STATUS_VALUES: {
500
529
  CONFIRMED: "CONFIRMED",
501
530
  WAITLISTED: "WAITLISTED",
502
531
  CANCELLED: "CANCELLED",
503
532
  },
533
+ REVIEW_STATUS: "reviewStatus",
534
+ REVIEW_STATUS_VALUES: {
535
+ PENDING: "pending",
536
+ APPROVED: "approved",
537
+ FLAGGED: "flagged",
538
+ },
504
539
  };
505
540
  // ============================================================================
506
541
  // PAYOUT FIELDS
@@ -1,3 +1,4 @@
1
+ import type { Plaintext } from "../security/encrypted";
1
2
  /** Field comparison operators supported by Sieve-style query strings. */
2
3
  export type WhereOp = "==" | "!=" | "<" | "<=" | ">" | ">=" | "array-contains" | "in" | "not-in" | "array-contains-any";
3
4
  /**
@@ -15,14 +16,14 @@ export interface SieveQuery {
15
16
  /** 1-based page number (default: 1) */
16
17
  page?: number;
17
18
  /** Items per page (default: 20) */
18
- perPage?: number;
19
+ pageSize?: number;
19
20
  }
20
21
  /** Paginated result envelope returned by IReadRepository.findAll() */
21
22
  export interface PagedResult<T> {
22
23
  data: T[];
23
24
  total: number;
24
25
  page: number;
25
- perPage: number;
26
+ pageSize: number;
26
27
  totalPages: number;
27
28
  }
28
29
  export interface IReadRepository<T> {
@@ -36,10 +37,10 @@ export interface IReadRepository<T> {
36
37
  findWhere<K extends keyof T>(field: K, op: WhereOp, value: T[K] | readonly T[K][]): Promise<T[]>;
37
38
  }
38
39
  export interface IWriteRepository<T> {
39
- create(data: Omit<T, "id" | "createdAt" | "updatedAt">): Promise<T>;
40
- update(id: string, data: Partial<T>): Promise<T>;
40
+ create(data: Omit<Plaintext<T>, "id" | "createdAt" | "updatedAt">): Promise<T>;
41
+ update(id: string, data: Partial<Plaintext<T>>): Promise<T>;
41
42
  delete(id: string): Promise<void>;
42
- batchCreate(items: Array<Omit<T, "id" | "createdAt" | "updatedAt">>): Promise<T[]>;
43
+ batchCreate(items: Array<Omit<Plaintext<T>, "id" | "createdAt" | "updatedAt">>): Promise<T[]>;
43
44
  batchDelete(ids: string[]): Promise<void>;
44
45
  }
45
46
  /** Full CRUD repository — combines read + write. */
@@ -95,7 +96,7 @@ export interface RepositoryLifecycleHooks<T> {
95
96
  * Called before `create`. Return the (possibly mutated) data to be persisted.
96
97
  * If not returned, the original data is used unchanged.
97
98
  */
98
- beforeCreate?: (data: Omit<T, "id" | "createdAt" | "updatedAt">) => Omit<T, "id" | "createdAt" | "updatedAt"> | Promise<Omit<T, "id" | "createdAt" | "updatedAt">>;
99
+ beforeCreate?: (data: Omit<Plaintext<T>, "id" | "createdAt" | "updatedAt">) => Omit<T, "id" | "createdAt" | "updatedAt"> | Promise<Omit<T, "id" | "createdAt" | "updatedAt">>;
99
100
  /**
100
101
  * Called after a successful `create`. Receives the persisted document.
101
102
  */
@@ -103,7 +104,7 @@ export interface RepositoryLifecycleHooks<T> {
103
104
  /**
104
105
  * Called before `update`. Return the (possibly mutated) partial to be applied.
105
106
  */
106
- beforeUpdate?: (id: string, data: Partial<T>) => Partial<T> | Promise<Partial<T>>;
107
+ beforeUpdate?: (id: string, data: Partial<Plaintext<T>>) => Partial<T> | Promise<Partial<T>>;
107
108
  /**
108
109
  * Called after a successful `update`. Receives the updated document.
109
110
  */
@@ -1,6 +1,6 @@
1
1
  export interface SearchOptions {
2
2
  page?: number;
3
- perPage?: number;
3
+ pageSize?: number;
4
4
  filters?: string;
5
5
  facets?: string[];
6
6
  sortBy?: string;
@@ -19,7 +19,7 @@ export interface SearchResult<T> {
19
19
  hits: SearchHit<T>[];
20
20
  total: number;
21
21
  page: number;
22
- perPage: number;
22
+ pageSize: number;
23
23
  totalPages: number;
24
24
  processingTimeMs?: number;
25
25
  facets?: Record<string, Record<string, number>>;
@@ -16,7 +16,7 @@
16
16
  *
17
17
  * export const myPaginationConfig: PaginationConfig = {
18
18
  * ...DEFAULT_PAGINATION_CONFIG,
19
- * perPage: 10,
19
+ * pageSize: 10,
20
20
  * showPageSizeSelector: true,
21
21
  * pageSizeOptions: [10, 25, 50],
22
22
  * };
@@ -33,8 +33,8 @@
33
33
  */
34
34
  export interface PaginationConfig {
35
35
  /** Items per page sent to the API. Default: 20 */
36
- perPage?: number;
37
- /** Hard cap on perPage (for page-size selector). Default: 100 */
36
+ pageSize?: number;
37
+ /** Hard cap on pageSize (for page-size selector). Default: 100 */
38
38
  maxPerPage?: number;
39
39
  /** Show a page-size selector UI element. Default: false */
40
40
  showPageSizeSelector?: boolean;
@@ -16,7 +16,7 @@
16
16
  *
17
17
  * export const myPaginationConfig: PaginationConfig = {
18
18
  * ...DEFAULT_PAGINATION_CONFIG,
19
- * perPage: 10,
19
+ * pageSize: 10,
20
20
  * showPageSizeSelector: true,
21
21
  * pageSizeOptions: [10, 25, 50],
22
22
  * };
@@ -28,7 +28,7 @@
28
28
  * const { products } = useProducts(params, { paginationConfig: myPaginationConfig });
29
29
  */
30
30
  export const DEFAULT_PAGINATION_CONFIG = {
31
- perPage: 20,
31
+ pageSize: 20,
32
32
  maxPerPage: 100,
33
33
  showPageSizeSelector: false,
34
34
  pageSizeOptions: [10, 20, 50, 100],
@@ -44,7 +44,7 @@ export const DEFAULT_STICKY_CONFIG = {
44
44
  zIndex: 10,
45
45
  };
46
46
  export const DEFAULT_TABLE_CONFIG = {
47
- pageSize: DEFAULT_PAGINATION_CONFIG.perPage,
47
+ pageSize: DEFAULT_PAGINATION_CONFIG.pageSize,
48
48
  sticky: DEFAULT_STICKY_CONFIG,
49
49
  striped: false,
50
50
  selectable: false,
@@ -19,12 +19,12 @@ export class ContactSubmissionsRepository {
19
19
  }
20
20
  async list(model) {
21
21
  const page = Number(model.page || "1");
22
- const perPage = Number(model.pageSize || "50");
22
+ const pageSize = Number(model.pageSize || "50");
23
23
  return this.repo.findAll({
24
24
  filters: model.filters,
25
25
  sort: model.sorts || "-createdAt",
26
26
  page: Number.isFinite(page) ? page : 1,
27
- perPage: Number.isFinite(perPage) ? perPage : 50,
27
+ pageSize: Number.isFinite(pageSize) ? pageSize : 50,
28
28
  });
29
29
  }
30
30
  async findById(id) {
@@ -13,7 +13,13 @@
13
13
  * const keys = await resolveKeys();
14
14
  * const client = StandardCheckoutClient.getInstance(keys.phonepeClientId, keys.phonepeClientSecret, Number(keys.phonepeClientVersion), env);
15
15
  */
16
- import { siteSettingsRepository } from "../repositories/index.js";
16
+ /*
17
+ * The DEFINING module, not the `repositories` barrel. That barrel re-exports
18
+ * `unitOfWork` from `../core`, so coming back through it put this file inside
19
+ * the same cycle (`audit-import-cycles` component 2) — and Root Cause #18 asks
20
+ * for the defining module regardless.
21
+ */
22
+ import { siteSettingsRepository } from "../features/admin/repository/site-settings.repository.js";
17
23
  import { normalizeError } from "../errors/normalize.js";
18
24
  const EMPTY_KEYS = {
19
25
  phonepeClientId: "",
@@ -52,12 +52,12 @@ export class NewsletterRepository {
52
52
  }
53
53
  async list(model) {
54
54
  const page = Number(model.page || "1");
55
- const perPage = Number(model.pageSize || "50");
55
+ const pageSize = Number(model.pageSize || "50");
56
56
  const result = await this.repo.findAll({
57
57
  filters: model.filters,
58
58
  sort: model.sorts || "-createdAt",
59
59
  page: Number.isFinite(page) ? page : 1,
60
- perPage: Number.isFinite(perPage) ? perPage : 50,
60
+ pageSize: Number.isFinite(pageSize) ? pageSize : 50,
61
61
  });
62
62
  return {
63
63
  ...result,
@@ -15,7 +15,7 @@ export const SITE_CONFIG = {
15
15
  sellers: ROUTES.PUBLIC.SELLERS,
16
16
  stores: ROUTES.PUBLIC.STORES,
17
17
  events: ROUTES.PUBLIC.EVENTS,
18
- blog: ROUTES.PUBLIC.BLOG,
18
+ blog: ROUTES.BLOG.LIST,
19
19
  categories: ROUTES.PUBLIC.CATEGORIES,
20
20
  promotions: ROUTES.PUBLIC.PROMOTIONS,
21
21
  reviews: ROUTES.PUBLIC.REVIEWS,
@@ -31,6 +31,36 @@ export declare const OFFER_ERROR_CODES: {
31
31
  readonly CHECKOUT_EXPIRED: "OFFER_CHECKOUT_EXPIRED";
32
32
  readonly WRONG_STATE: "OFFER_WRONG_STATE";
33
33
  };
34
+ /**
35
+ * Event prize-draw refusals — the spin wheel and the raffle draw.
36
+ *
37
+ * These exist because every refusal on those two surfaces used to render as the
38
+ * single string "Spin failed. Please try again.": the client threw a native
39
+ * `Error`, so `normalizeError` produced no code, so `toUserMessage` could only
40
+ * return its fallback. A closed window, an exhausted per-user cap and a
41
+ * misconfigured event were indistinguishable to the person spinning, and a
42
+ * 401 never opened the login modal.
43
+ *
44
+ * Statuses live beside the reasons in
45
+ * `_internal/server/jobs/core/event-draw-reasons.ts`; `audit-error-display-i18n`
46
+ * requires a matching `errors.codes.*` key in `messages/en.json` for every
47
+ * value below.
48
+ */
49
+ export declare const EVENT_DRAW_ERROR_CODES: {
50
+ readonly IDENTITY_REQUIRED: "EVENT_IDENTITY_REQUIRED";
51
+ readonly LOGIN_REQUIRED: "EVENT_LOGIN_REQUIRED";
52
+ readonly EVENT_NOT_FOUND: "EVENT_NOT_FOUND";
53
+ readonly EVENT_NOT_ACTIVE: "EVENT_NOT_ACTIVE";
54
+ readonly SPIN_NO_PRIZES: "SPIN_NO_PRIZES";
55
+ readonly SPIN_OUTSIDE_WINDOW: "SPIN_OUTSIDE_WINDOW";
56
+ readonly SPIN_ALREADY_USED: "SPIN_ALREADY_USED";
57
+ readonly NOT_A_SPIN_WHEEL: "EVENT_NOT_A_SPIN_WHEEL";
58
+ readonly RAFFLE_NOT_A_RAFFLE: "RAFFLE_NOT_A_RAFFLE";
59
+ readonly RAFFLE_ALREADY_DRAWN: "RAFFLE_ALREADY_DRAWN";
60
+ readonly RAFFLE_NO_ELIGIBLE_ENTRIES: "RAFFLE_NO_ELIGIBLE_ENTRIES";
61
+ /** A reason the status map has never heard of — a bug in the core, mapped 500. */
62
+ readonly UNKNOWN_REASON: "EVENT_DRAW_UNKNOWN_REASON";
63
+ };
34
64
  export declare const ERROR_CODES: {
35
65
  readonly AUTH_INVALID_CREDENTIALS: "AUTH_001";
36
66
  readonly AUTH_TOKEN_EXPIRED: "AUTH_002";
@@ -31,6 +31,36 @@ export const OFFER_ERROR_CODES = {
31
31
  CHECKOUT_EXPIRED: "OFFER_CHECKOUT_EXPIRED",
32
32
  WRONG_STATE: "OFFER_WRONG_STATE",
33
33
  };
34
+ /**
35
+ * Event prize-draw refusals — the spin wheel and the raffle draw.
36
+ *
37
+ * These exist because every refusal on those two surfaces used to render as the
38
+ * single string "Spin failed. Please try again.": the client threw a native
39
+ * `Error`, so `normalizeError` produced no code, so `toUserMessage` could only
40
+ * return its fallback. A closed window, an exhausted per-user cap and a
41
+ * misconfigured event were indistinguishable to the person spinning, and a
42
+ * 401 never opened the login modal.
43
+ *
44
+ * Statuses live beside the reasons in
45
+ * `_internal/server/jobs/core/event-draw-reasons.ts`; `audit-error-display-i18n`
46
+ * requires a matching `errors.codes.*` key in `messages/en.json` for every
47
+ * value below.
48
+ */
49
+ export const EVENT_DRAW_ERROR_CODES = {
50
+ IDENTITY_REQUIRED: "EVENT_IDENTITY_REQUIRED",
51
+ LOGIN_REQUIRED: "EVENT_LOGIN_REQUIRED",
52
+ EVENT_NOT_FOUND: "EVENT_NOT_FOUND",
53
+ EVENT_NOT_ACTIVE: "EVENT_NOT_ACTIVE",
54
+ SPIN_NO_PRIZES: "SPIN_NO_PRIZES",
55
+ SPIN_OUTSIDE_WINDOW: "SPIN_OUTSIDE_WINDOW",
56
+ SPIN_ALREADY_USED: "SPIN_ALREADY_USED",
57
+ NOT_A_SPIN_WHEEL: "EVENT_NOT_A_SPIN_WHEEL",
58
+ RAFFLE_NOT_A_RAFFLE: "RAFFLE_NOT_A_RAFFLE",
59
+ RAFFLE_ALREADY_DRAWN: "RAFFLE_ALREADY_DRAWN",
60
+ RAFFLE_NO_ELIGIBLE_ENTRIES: "RAFFLE_NO_ELIGIBLE_ENTRIES",
61
+ /** A reason the status map has never heard of — a bug in the core, mapped 500. */
62
+ UNKNOWN_REASON: "EVENT_DRAW_UNKNOWN_REASON",
63
+ };
34
64
  export const ERROR_CODES = {
35
65
  // Authentication
36
66
  AUTH_INVALID_CREDENTIALS: "AUTH_001",
@@ -1,5 +1,5 @@
1
1
  import { normalizeError } from "./normalize.js";
2
- import { ERROR_CODES, BID_ERROR_CODES, OFFER_ERROR_CODES } from "./error-codes.js";
2
+ import { ERROR_CODES, BID_ERROR_CODES, OFFER_ERROR_CODES, EVENT_DRAW_ERROR_CODES, } from "./error-codes.js";
3
3
  import { HTTP_ERROR_CODES } from "./error-mapping.js";
4
4
  const k = (code) => `errors.codes.${code}`;
5
5
  export const ERROR_DISPLAY_MAP = {
@@ -172,6 +172,45 @@ export const ERROR_DISPLAY_MAP = {
172
172
  [OFFER_ERROR_CODES.WRONG_STATE]: {
173
173
  messageKey: k(OFFER_ERROR_CODES.WRONG_STATE),
174
174
  },
175
+ // ---------- Event prize draws (spin wheel + raffle) ----------
176
+ // No `field` on any of these: the spin wheel is a button, not a form, and the
177
+ // raffle draw is an admin action. There is no input to route an error onto.
178
+ [EVENT_DRAW_ERROR_CODES.IDENTITY_REQUIRED]: {
179
+ messageKey: k(EVENT_DRAW_ERROR_CODES.IDENTITY_REQUIRED),
180
+ },
181
+ [EVENT_DRAW_ERROR_CODES.LOGIN_REQUIRED]: {
182
+ messageKey: k(EVENT_DRAW_ERROR_CODES.LOGIN_REQUIRED),
183
+ },
184
+ [EVENT_DRAW_ERROR_CODES.EVENT_NOT_FOUND]: {
185
+ messageKey: k(EVENT_DRAW_ERROR_CODES.EVENT_NOT_FOUND),
186
+ },
187
+ [EVENT_DRAW_ERROR_CODES.EVENT_NOT_ACTIVE]: {
188
+ messageKey: k(EVENT_DRAW_ERROR_CODES.EVENT_NOT_ACTIVE),
189
+ },
190
+ [EVENT_DRAW_ERROR_CODES.SPIN_NO_PRIZES]: {
191
+ messageKey: k(EVENT_DRAW_ERROR_CODES.SPIN_NO_PRIZES),
192
+ },
193
+ [EVENT_DRAW_ERROR_CODES.SPIN_OUTSIDE_WINDOW]: {
194
+ messageKey: k(EVENT_DRAW_ERROR_CODES.SPIN_OUTSIDE_WINDOW),
195
+ },
196
+ [EVENT_DRAW_ERROR_CODES.SPIN_ALREADY_USED]: {
197
+ messageKey: k(EVENT_DRAW_ERROR_CODES.SPIN_ALREADY_USED),
198
+ },
199
+ [EVENT_DRAW_ERROR_CODES.NOT_A_SPIN_WHEEL]: {
200
+ messageKey: k(EVENT_DRAW_ERROR_CODES.NOT_A_SPIN_WHEEL),
201
+ },
202
+ [EVENT_DRAW_ERROR_CODES.RAFFLE_NOT_A_RAFFLE]: {
203
+ messageKey: k(EVENT_DRAW_ERROR_CODES.RAFFLE_NOT_A_RAFFLE),
204
+ },
205
+ [EVENT_DRAW_ERROR_CODES.RAFFLE_ALREADY_DRAWN]: {
206
+ messageKey: k(EVENT_DRAW_ERROR_CODES.RAFFLE_ALREADY_DRAWN),
207
+ },
208
+ [EVENT_DRAW_ERROR_CODES.RAFFLE_NO_ELIGIBLE_ENTRIES]: {
209
+ messageKey: k(EVENT_DRAW_ERROR_CODES.RAFFLE_NO_ELIGIBLE_ENTRIES),
210
+ },
211
+ [EVENT_DRAW_ERROR_CODES.UNKNOWN_REASON]: {
212
+ messageKey: k(EVENT_DRAW_ERROR_CODES.UNKNOWN_REASON),
213
+ },
175
214
  // ---------- HTTP / mapped wire codes (from error-mapping.ts) ----------
176
215
  [HTTP_ERROR_CODES.VALIDATION_FAILED]: {
177
216
  messageKey: k(HTTP_ERROR_CODES.VALIDATION_FAILED),
@@ -40,7 +40,7 @@ export async function GET(request, { params }) {
40
40
  filters,
41
41
  sort,
42
42
  page,
43
- perPage: pageSize,
43
+ pageSize: pageSize,
44
44
  });
45
45
  const totalPages = Math.max(1, Math.ceil(result.total / pageSize));
46
46
  return NextResponse.json({
@@ -44,7 +44,7 @@ export function UserBidsView() {
44
44
  endpoint: ACCOUNT_ENDPOINTS.BIDS,
45
45
  sortOptions: SORT_OPTIONS,
46
46
  hideTableView: true,
47
- mapRows: (response) => response.bids ?? [],
47
+ mapRows: (response) => response.items ?? [],
48
48
  getTotal: (response, rows) => response.total ?? rows.length,
49
49
  buildFilters: (state) => (state.status ? sieveFilter("status", SIEVE_OP.EQ, state.status) : undefined),
50
50
  renderFilterPanel: ({ pendingFilters, setPendingFilters }) => (_jsx(FieldSelect, { name: "status", label: "Bid status", value: pendingFilters.status || "", onChange: (v) => setPendingFilters((p) => ({ ...p, status: v })), options: STATUS_OPTIONS })),