@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/index.js CHANGED
@@ -1875,11 +1875,7 @@ export { ProfileView } from "./features/account/index.js";
1875
1875
  // UserAccountHubView - Component for user account hub view.
1876
1876
  export { UserAccountHubView } from "./features/account/index.js";
1877
1877
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
1878
- // UserAddressesView - Component for user addresses view.
1879
- export { UserAddressesView } from "./features/account/index.js";
1880
1878
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
1881
- // UserNotificationsView - Component for user notifications view.
1882
- export { UserNotificationsView } from "./features/account/index.js";
1883
1879
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
1884
1880
  // [CLIENT]-Runs in browser only â€" interactive buyer offers panel with accept/withdraw actions.
1885
1881
  // UserOffersPanel - Interactive buyer offers panel.
@@ -1891,8 +1887,6 @@ export { UserOrderTrackView } from "./features/account/index.js";
1891
1887
  // UserOrdersView - Component for user orders view.
1892
1888
  export { UserOrdersView } from "./features/account/index.js";
1893
1889
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
1894
- // UserSettingsView - Component for user settings view.
1895
- export { UserSettingsView } from "./features/account/index.js";
1896
1890
  // [CLIENT-SSR]-Runs in both SSR and browser — React component that lets users manage their notification channel and type preferences.
1897
1891
  // NotificationPreferencesPanel - Panel for user notification preferences.
1898
1892
  export { NotificationPreferencesPanel } from "./features/account/index.js";
@@ -1952,6 +1946,10 @@ export { useUpdateProfile } from "./features/account/index.js";
1952
1946
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
1953
1947
  // userProfileSchema - Model for user profile schema.
1954
1948
  export { userProfileSchema } from "./features/account/index.js";
1949
+ // [TYPE]-TypeScript type-only export â€" erased at compile time, zero runtime cost.
1950
+ // UserSettingsViewLabels - Type contract for user settings view labels.
1951
+ // [TYPE]-TypeScript type-only export â€" erased at compile time, zero runtime cost.
1952
+ // UserSettingsViewProps - Type contract for user settings view props.
1955
1953
  // ./features/account/server
1956
1954
  // [DB]-Database layer â€" uses firebase-admin or another server-side DB SDK; can only run in a trusted server environment.
1957
1955
  // AccountRepository - Shared export for account repository.
@@ -2194,7 +2192,6 @@ export { DEFAULT_TRUST_BAR_ITEMS } from "./features/admin/index.js";
2194
2192
  // DashboardStatsGrid - Component for dashboard stats grid.
2195
2193
  export { DashboardStatsGrid } from "./features/admin/index.js";
2196
2194
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
2197
- // DemoSeedView — removed from main barrel (dev-only, load via dynamic import)
2198
2195
  // AdminTeamView - Employee management list view.
2199
2196
  export { AdminTeamView } from "./features/admin/index.js";
2200
2197
  // AdminEmployeeEditorView - Invite/edit employee permissions SideDrawer.
@@ -2874,8 +2871,6 @@ export { CategoryForm } from "./features/categories/index.js";
2874
2871
  // CategoryGrid - Component for category grid.
2875
2872
  export { CategoryGrid } from "./features/categories/index.js";
2876
2873
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
2877
- // CategoryProductsView - Component for category products view.
2878
- export { CategoryProductsView } from "./features/categories/index.js";
2879
2874
  // CategoryProductsListing - Client toolbar listing for category detail pages.
2880
2875
  export { CategoryProductsListing } from "./features/categories/index.js";
2881
2876
  export { CategoriesIndexListing } from "./features/categories/index.js";
@@ -3174,6 +3169,15 @@ export { AdminEventEditorView } from "./features/events/index.js";
3174
3169
  // [SCHEMA]-Schema / data-shape constant â€" Zod validator, default-value object, or Firestore collection/field name constant.
3175
3170
  // EVENTS_COLLECTION - Constant used across modules.
3176
3171
  export { EVENTS_COLLECTION } from "./features/events/index.js";
3172
+ /*
3173
+ * [SHARED] RAFFLE_MAX_ENTRIES_PER_USER — one entry per person in a raffle.
3174
+ *
3175
+ * Public because the consumer's participate page must hand the SAME number to
3176
+ * `EventRaffleEntryForm` that `enterEvent` enforces server-side. Two mirrored
3177
+ * literals is the shape that caused the bug: the form already said "you've
3178
+ * used all 1 entry slot" while the server enforced nothing at all.
3179
+ */
3180
+ export { RAFFLE_MAX_ENTRIES_PER_USER } from "./_internal/shared/features/events/config.js";
3177
3181
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
3178
3182
  // EVENT_ADMIN_SORT_OPTIONS - Constant used across modules.
3179
3183
  export { EVENT_ADMIN_SORT_OPTIONS } from "./features/events/index.js";
@@ -3593,8 +3597,6 @@ export { HomepageSkeleton } from "./features/homepage/index.js";
3593
3597
  // HomepageView - Component for homepage view.
3594
3598
  export { HomepageView } from "./features/homepage/index.js";
3595
3599
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
3596
- // HowItWorksInfoView - Component for how it works info view.
3597
- export { HowItWorksInfoView } from "./features/homepage/index.js";
3598
3600
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
3599
3601
  // HowItWorksSection - Shared export for how it works section.
3600
3602
  export { HowItWorksSection } from "./features/homepage/index.js";
@@ -3760,8 +3762,13 @@ export { AutoBreadcrumbs } from "./features/layout/index.js";
3760
3762
  // BackToTop - Shared export for back to top.
3761
3763
  export { BackToTop } from "./features/layout/index.js";
3762
3764
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
3763
- // BottomActions - Shared export for bottom actions.
3765
+ // BottomActions - Shared export for bottom actions. @deprecated — alias of SideActionDock.
3764
3766
  export { BottomActions } from "./features/layout/index.js";
3767
+ // [CLIENT-SSR]-Runs in both SSR and browser — React component or hook that does not depend on browser-only APIs.
3768
+ // SideActionDock - The floating action dock that replaced the bottom action bar.
3769
+ export { SideActionDock } from "./features/layout/index.js";
3770
+ // [SHARED]-Pure helper — marks a page's inline primary CTA so the dock reveals only after it scrolls out of view.
3771
+ export { ctaAnchorProps, CTA_ANCHOR_ATTR } from "./features/layout/index.js";
3765
3772
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
3766
3773
  // BottomActionsProvider - Component for bottom actions provider.
3767
3774
  export { BottomActionsProvider } from "./features/layout/index.js";
@@ -4302,8 +4309,6 @@ export { ProductTabs } from "./features/products/index.js";
4302
4309
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
4303
4310
  // ProductsIndexPageView - Component for products index page view.
4304
4311
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
4305
- // ProductsView - Component for products view.
4306
- export { ProductsView } from "./features/products/index.js";
4307
4312
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
4308
4313
  // RelatedProducts - Shared export for related products.
4309
4314
  export { RelatedProducts } from "./features/products/index.js";
@@ -4336,7 +4341,7 @@ export { normalizeListingType, isAuctionListing, isPreOrderListing, isStandardLi
4336
4341
  // `finalSale` field. See the module docstring for why `!p.finalSale` is wrong.
4337
4342
  export { isFinalSale, acceptsChangeOfMindReturns, } from "./features/products/constants/final-sale.js";
4338
4343
  // SB-UNI-X4 2026-05-13 â€" per-type feature-flag helpers.
4339
- export { isListingTypeEnabled, isCategoryTypeEnabled, enabledListingTypes, enabledCategoryTypes, ALL_LISTING_TYPES, } from "./_internal/shared/listing-types/feature-flags.js";
4344
+ export { isListingTypeEnabled, isCategoryTypeEnabled, enabledListingTypes, enabledCategoryTypes, ALL_LISTING_TYPES, isListingType, } from "./_internal/shared/listing-types/feature-flags.js";
4340
4345
  // SB-UNI-X5 2026-05-13 â€" action telemetry sink.
4341
4346
  export { actionTracker, setActionTrackerSink, resetActionTrackerSink, } from "./_internal/shared/listing-types/action-tracker.js";
4342
4347
  // SB-UNI-S 2026-05-13 â€" cart-level shipping-requirement helpers.
@@ -4733,6 +4738,9 @@ export { useNavSuggestions } from "./features/search/index.js";
4733
4738
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
4734
4739
  // useSearch - React hook for use search.
4735
4740
  export { useSearch } from "./features/search/index.js";
4741
+ // [CLIENT]-Browser only. Fetches the public search artifact once per page session.
4742
+ // Exported from the defining module, not the feature barrel — see client.ts.
4743
+ export { useSearchIndex, ensureSearchIndex } from "./features/search/hooks/useSearchIndex.js";
4736
4744
  // ./features/search/server
4737
4745
  // [DB]-Database layer â€" uses firebase-admin or another server-side DB SDK; can only run in a trusted server environment.
4738
4746
  // SearchRepository - Shared export for search repository.
@@ -4832,8 +4840,6 @@ export { SellerShippingView } from "./features/seller/index.js";
4832
4840
  // SellerStoreSetupView - Component for seller store setup view.
4833
4841
  export { SellerStoreSetupView } from "./features/seller/index.js";
4834
4842
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
4835
- // SellerStoreView - Component for seller store view.
4836
- export { SellerStoreView } from "./features/seller/index.js";
4837
4843
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
4838
4844
  // SellerStorefrontView - Component for seller storefront view.
4839
4845
  export { SellerStorefrontView } from "./features/seller/index.js";
@@ -4869,7 +4875,6 @@ export { SellerProductsView as StoreProductListingsView } from "./features/selle
4869
4875
  // StoreShippingView - Alias for SellerShippingView.
4870
4876
  export { SellerShippingView as StoreShippingView } from "./features/seller/index.js";
4871
4877
  // StoreStorefrontView - Alias for SellerStorefrontView.
4872
- export { SellerStorefrontView as StoreStorefrontView } from "./features/seller/index.js";
4873
4878
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
4874
4879
  // buildPayoutColumns - Helper for build payout columns.
4875
4880
  export { buildPayoutColumns } from "./features/seller/index.js";
@@ -5349,6 +5354,8 @@ export { CardBody, MenuTrigger, MenuContent, MenuSeparator, RoleBadge, SkipToMai
5349
5354
  export { Tabs, TabsList, TabsTrigger, TabsContent, PasswordStrengthIndicator, TablePagination } from "./ui/index.js";
5350
5355
  // TabBarShell - rail + overflow scroll arrows around a role="tablist"; TabBarButton / TabsNavSelect - its two trigger flavours
5351
5356
  export { TabBarShell, TabBarButton, TabsNavSelect } from "./ui/index.js";
5357
+ // OverflowRow - pill/tab row that collapses into a searchable dropdown when it measures wider than its container
5358
+ export { OverflowRow } from "./ui/index.js";
5352
5359
  export { Stack, classNames, mergeTailwindClasses, SideModal, SideDrawer, RichText, RichTextRenderer } from "./ui/index.js";
5353
5360
  export { SlottedListingView, DetailViewShell, StackedViewShell } from "./ui/index.js";
5354
5361
  export { buildColumns, createColumnBuilder } from "./ui/index.js";
@@ -5367,7 +5374,7 @@ export { historyRepository, UserHistoryRepository, trackHistoryView, getHistoryF
5367
5374
  export { useMediaQuery, useBreakpoint, useClickOutside, useKeyPress, useLongPress, useGesture, useSwipe, useSession, useAuth, useCountdown, useCamera, useBulkSelection, useUrlTable, usePendingFilters, usePendingTable, useUnsavedChanges, UNSAVED_CHANGES_EVENT, useBulkAction, useEntityDelete, useContainerGrid, useMessage, useModalStack, RTDBPayloadStatus, } from "./react/index.js";
5368
5375
  // Missing core types (already exported above; skipped to avoid duplicates)
5369
5376
  // Missing auth feature components
5370
- export { RoleGate, ProtectedRoute, SocialAuthButtons, AuthStatusPanel, LoginForm, RegisterForm, ForgotPasswordView, ResetPasswordView, VerifyEmailView, OAuthLoadingView, } from "./features/auth/index.js";
5377
+ export { RoleGate, ProtectedRoute, SocialAuthButtons, LoginForm, RegisterForm, ForgotPasswordView, ResetPasswordView, VerifyEmailView, OAuthLoadingView } from "./features/auth/index.js";
5371
5378
  // Missing cart and checkout feature components
5372
5379
  export { CartItemRow, CartDrawer, CartView, CartSummary, ShippingPicker } from "./features/cart/index.js";
5373
5380
  export { CheckoutView, CheckoutAddressStep, CheckoutSuccessView } from "./features/cart/index.js";
@@ -5454,6 +5461,7 @@ export { groupedListingFormSchema, groupedListingCreateSchema, groupedListingUpd
5454
5461
  export { scammersSeedData } from "./seed/index.js";
5455
5462
  // Product features â€" seed data (FI2)
5456
5463
  export { productFeaturesSeedData } from "./seed/index.js";
5464
+ export { authenticityKnowledgeSeedData, AUTHENTICITY_KNOWLEDGE_COLLECTION, AUTHENTICITY_KNOWLEDGE_COUNT, } from "./seed/index.js";
5457
5465
  /*
5458
5466
  * 🛑 Registering a seed collection takes FOUR edits and three of them are
5459
5467
  * silent if missed: seed/index.ts, THIS re-export, and seed-cli's own import
@@ -116,6 +116,15 @@ function shouldPersist(mapped) {
116
116
  function resolveBodySchema(schema) {
117
117
  if (typeof schema !== "string")
118
118
  return schema;
119
+ /*
120
+ * `SCHEMAS.api` is empty by design (see its own comment in registry.ts):
121
+ * the key form had 6 registered keys and ZERO routes passing one, so the
122
+ * lookup is kept for the contract while `RegisteredApiRouteKey` narrows to
123
+ * `never`. The cast is what lets an indexed read of an empty literal type
124
+ * compile; the `!entry` branch below is the whole behaviour — a key string
125
+ * resolves to nothing and `createRouteHandler` throws "Route schema not
126
+ * registered", which is the correct answer for a key nobody registered.
127
+ */
119
128
  const entry = SCHEMAS.api[schema];
120
129
  if (!entry || !("body" in entry) || !entry.body)
121
130
  return null;
@@ -0,0 +1,13 @@
1
+ export interface RequireRecordOptions {
2
+ /** `route` field on the persisted degraded-read entry, e.g. "/admin/events/[id]/edit". */
3
+ route: string;
4
+ /** Stable identifier for the read site, e.g. "events.findById". */
5
+ key: string;
6
+ }
7
+ /**
8
+ * Calls `notFound()` when `read()` resolves to `null` / `undefined`.
9
+ *
10
+ * Returns the record when it exists, so a caller that already needs the
11
+ * document does not pay for a second read.
12
+ */
13
+ export declare function requireRecord<T>(read: () => Promise<T | null | undefined>, opts: RequireRecordOptions): Promise<T | null>;
@@ -0,0 +1,62 @@
1
+ import { notFound } from "next/navigation.js";
2
+ import { safeRead } from "../../errors/safe-read.js";
3
+ /**
4
+ * 404 a dynamic detail page whose record does not exist.
5
+ *
6
+ * ## The defect this closes
7
+ *
8
+ * `/admin/coupons/zzzznope-not-a-coupon-42/edit` rendered a fully editable
9
+ * coupon form — twelve inputs, "Save changes", "Delete coupon" — because its
10
+ * `page.tsx` was a bare shim that passed the id straight to an editor. The
11
+ * sibling `/admin/orders/[id]/view` fetched server-side and 404'd correctly;
12
+ * the two differed only because one never grew the check. `audit-admin-detail-notfound`
13
+ * found **fourteen** more, and the danger is Root Cause #98's: the form looks
14
+ * ready to save, and what it saves is a record keyed on an id nobody meant to
15
+ * create.
16
+ *
17
+ * ## 🛑 A FAILED read is not an ABSENT record
18
+ *
19
+ * This is the whole subtlety, and it is why the helper exists rather than each
20
+ * page writing `if (!(await repo.findById(id))) notFound()`.
21
+ *
22
+ * Dashboard pages sit under a layout that `await`s the session, so Next still
23
+ * ATTEMPTS to prerender them and an unguarded throw there is **fatal to the
24
+ * build** (§ "a dynamic API in a DASHBOARD layout is the correct lever"). The
25
+ * read therefore has to go through `safeRead`. But `safeRead` returns its
26
+ * fallback on failure — so a naive `fallback: null` would turn a transient
27
+ * Firestore error, a missing composite index, or a quota exception into a
28
+ * **404 on a record that exists**. That is strictly worse than the bug being
29
+ * fixed: the admin is told their data is gone.
30
+ *
31
+ * So failure and absence are separated by a sentinel. `notFound()` fires ONLY
32
+ * when the read succeeded and returned nothing. When the read fails the page
33
+ * renders, the degradation is recorded as a `DEGRADED_READ` row by `safeRead`
34
+ * itself, and the editor's own fetch surfaces whatever is really wrong.
35
+ *
36
+ * ## Cost
37
+ *
38
+ * One document read, on a route that is per-request anyway. Well inside Rule
39
+ * #6's ~3-round-trip budget, and the editor's client fetch is unchanged — this
40
+ * does not replace it, because the editor is also reachable from a drawer.
41
+ */
42
+ /** Distinguishes "the read threw" from "the record is absent". */
43
+ const READ_FAILED = Symbol("read-failed");
44
+ /**
45
+ * Calls `notFound()` when `read()` resolves to `null` / `undefined`.
46
+ *
47
+ * Returns the record when it exists, so a caller that already needs the
48
+ * document does not pay for a second read.
49
+ */
50
+ export async function requireRecord(read, opts) {
51
+ const result = await safeRead(read, {
52
+ route: opts.route,
53
+ key: opts.key,
54
+ fallback: READ_FAILED,
55
+ });
56
+ // The read itself broke. Render the page; `safeRead` has already recorded it.
57
+ if (result === READ_FAILED)
58
+ return null;
59
+ if (result === null || result === undefined)
60
+ notFound();
61
+ return result;
62
+ }
@@ -63,7 +63,6 @@ export declare const DEFAULT_ROUTE_MAP: {
63
63
  readonly ABOUT: "/about";
64
64
  readonly DEVELOPER: "/developer";
65
65
  readonly CONTACT: "/contact";
66
- readonly BLOG: "/blog";
67
66
  readonly HELP: "/help";
68
67
  readonly HELP_SHOPPING: "/help/shopping";
69
68
  readonly HELP_AUCTIONS: "/help/auctions";
@@ -100,7 +99,6 @@ export declare const DEFAULT_ROUTE_MAP: {
100
99
  readonly EVENT_SPIN_RESULTS: (id: string) => string;
101
100
  readonly LOTTERIES: "/lottery";
102
101
  readonly LOTTERY_DETAIL: (id: string) => string;
103
- readonly SUBLISTING_CATEGORIES: "/sublisting-categories";
104
102
  readonly SUBLISTING_CATEGORY: (slug: string) => string;
105
103
  readonly SUPPORT: "/support";
106
104
  readonly SCAMS: "/scams";
@@ -112,6 +110,8 @@ export declare const DEFAULT_ROUTE_MAP: {
112
110
  readonly ITEM_REQUESTS_NEW: "/item-requests/new";
113
111
  readonly TOOLS: "/tools";
114
112
  readonly TOOL_PRICE_INDEX: "/tools/price-index";
113
+ readonly TOOL_STICKER_TRACER: "/tools/sticker-tracer";
114
+ readonly TOOL_STICKER_SHEET: (sheetId: string) => string;
115
115
  readonly PARTS: "/parts";
116
116
  readonly PART_CLASSIFICATION: (classification: string) => string;
117
117
  readonly PART_DETAIL: (classification: string, code: string) => string;
@@ -479,7 +479,6 @@ export declare const ROUTES: {
479
479
  readonly ABOUT: "/about";
480
480
  readonly DEVELOPER: "/developer";
481
481
  readonly CONTACT: "/contact";
482
- readonly BLOG: "/blog";
483
482
  readonly HELP: "/help";
484
483
  readonly HELP_SHOPPING: "/help/shopping";
485
484
  readonly HELP_AUCTIONS: "/help/auctions";
@@ -516,7 +515,6 @@ export declare const ROUTES: {
516
515
  readonly EVENT_SPIN_RESULTS: (id: string) => string;
517
516
  readonly LOTTERIES: "/lottery";
518
517
  readonly LOTTERY_DETAIL: (id: string) => string;
519
- readonly SUBLISTING_CATEGORIES: "/sublisting-categories";
520
518
  readonly SUBLISTING_CATEGORY: (slug: string) => string;
521
519
  readonly SUPPORT: "/support";
522
520
  readonly SCAMS: "/scams";
@@ -528,6 +526,8 @@ export declare const ROUTES: {
528
526
  readonly ITEM_REQUESTS_NEW: "/item-requests/new";
529
527
  readonly TOOLS: "/tools";
530
528
  readonly TOOL_PRICE_INDEX: "/tools/price-index";
529
+ readonly TOOL_STICKER_TRACER: "/tools/sticker-tracer";
530
+ readonly TOOL_STICKER_SHEET: (sheetId: string) => string;
531
531
  readonly PARTS: "/parts";
532
532
  readonly PART_CLASSIFICATION: (classification: string) => string;
533
533
  readonly PART_DETAIL: (classification: string, code: string) => string;
@@ -63,7 +63,14 @@ export const DEFAULT_ROUTE_MAP = {
63
63
  ABOUT: "/about",
64
64
  DEVELOPER: "/developer",
65
65
  CONTACT: "/contact",
66
- BLOG: "/blog",
66
+ /*
67
+ * 🛑 No `PUBLIC.BLOG`. `BLOG.LIST` is the one key for "/blog", and it sits
68
+ * beside `BLOG.ARTICLE` — which is the ONLY blog detail key, so `BLOG` was
69
+ * always the canonical section and `PUBLIC.BLOG` was an alias of its index.
70
+ * Two keys for one path is Root Cause #61's family: the duplicate was
71
+ * reported by `audit-dead-route-key` on every run, and nine call sites had
72
+ * drifted onto the alias while one used the real key.
73
+ */
67
74
  HELP: "/help",
68
75
  HELP_SHOPPING: "/help/shopping",
69
76
  HELP_AUCTIONS: "/help/auctions",
@@ -119,7 +126,14 @@ export const DEFAULT_ROUTE_MAP = {
119
126
  EVENT_SPIN_RESULTS: (id) => `/events/${id}/spin-results`,
120
127
  LOTTERIES: "/lottery",
121
128
  LOTTERY_DETAIL: (id) => `/lottery/${id}`,
122
- SUBLISTING_CATEGORIES: "/sublisting-categories",
129
+ /*
130
+ * 🛑 There is deliberately NO public `SUBLISTING_CATEGORIES` index key.
131
+ * `src/app/[locale]/sublisting-categories/` holds only `[slug]/`, so the
132
+ * index has never existed; the key promised a route with no page behind
133
+ * it, had zero references anywhere, and `audit-dead-route-key` carried it
134
+ * as its one grandfathered entry. A sub-listing is reached from the
135
+ * category or product it belongs to, not from a top-level list.
136
+ */
123
137
  SUBLISTING_CATEGORY: (slug) => `/sublisting-categories/${slug}`,
124
138
  SUPPORT: "/support",
125
139
  SCAMS: "/scams",
@@ -138,6 +152,14 @@ export const DEFAULT_ROUTE_MAP = {
138
152
  */
139
153
  TOOLS: "/tools",
140
154
  TOOL_PRICE_INDEX: "/tools/price-index",
155
+ /*
156
+ * Admin-only, and under a PUBLIC prefix on purpose — it is a tool, and
157
+ * /tools is where tools live. The guard is the layout, not the path: a
158
+ * non-admin is redirected server-side before any HTML is produced, so
159
+ * there is nothing indexable at this URL regardless of robots.txt.
160
+ */
161
+ TOOL_STICKER_TRACER: "/tools/sticker-tracer",
162
+ TOOL_STICKER_SHEET: (sheetId) => `/tools/sticker-tracer/${sheetId}`,
141
163
  /*
142
164
  * The PARTS database. A reference surface, so it lives beside the other
143
165
  * two things that answer a question rather than sell you something.
@@ -552,7 +574,7 @@ export const PUBLIC_ROUTES = [
552
574
  ROUTES.PUBLIC.PROMOTIONS,
553
575
  ROUTES.PUBLIC.ABOUT,
554
576
  ROUTES.PUBLIC.CONTACT,
555
- ROUTES.PUBLIC.BLOG,
577
+ ROUTES.BLOG.LIST,
556
578
  ROUTES.PUBLIC.HELP,
557
579
  ROUTES.PUBLIC.TERMS,
558
580
  ROUTES.PUBLIC.PRIVACY,
@@ -19,6 +19,7 @@
19
19
  */
20
20
  import type { CollectionReference, DocumentData, DocumentSnapshot, Firestore } from "firebase-admin/firestore";
21
21
  import type { IRepository, PagedResult, SieveQuery, WhereOp } from "../../contracts";
22
+ import type { Plaintext } from "../../security/encrypted";
22
23
  export declare class FirebaseRepository<T extends DocumentData> implements IRepository<T> {
23
24
  protected readonly collection: string;
24
25
  constructor(collectionName: string);
@@ -29,8 +30,9 @@ export declare class FirebaseRepository<T extends DocumentData> implements IRepo
29
30
  findById(id: string): Promise<T | null>;
30
31
  findAll(query?: SieveQuery): Promise<PagedResult<T>>;
31
32
  findWhere(field: keyof T, op: WhereOp, value: unknown): Promise<T[]>;
32
- create(data: Omit<T, "id" | "createdAt" | "updatedAt">): Promise<T>;
33
- update(id: string, data: Partial<T>): Promise<T>;
33
+ create(data: Omit<Plaintext<T>, "id" | "createdAt" | "updatedAt">): Promise<T>;
34
+ /** Accepts the PLAINTEXT shape — see `create` for why. */
35
+ update(id: string, data: Partial<Plaintext<T>>): Promise<T>;
34
36
  delete(id: string): Promise<void>;
35
37
  batchCreate(items: Array<Omit<T, "id" | "createdAt" | "updatedAt">>): Promise<T[]>;
36
38
  batchDelete(ids: string[]): Promise<void>;
@@ -46,7 +46,7 @@ export class FirebaseRepository {
46
46
  }
47
47
  async findAll(query) {
48
48
  const page = Math.max(1, query?.page ?? 1);
49
- const perPage = Math.max(1, Math.min(query?.perPage ?? 20, 500));
49
+ const pageSize = Math.max(1, Math.min(query?.pageSize ?? 20, 500));
50
50
  let q = this.getCollection();
51
51
  // -- Sort ------------------------------------------------------------------
52
52
  // SieveQuery.sort supports a leading "-" prefix for descending order
@@ -89,11 +89,11 @@ export class FirebaseRepository {
89
89
  // -- Count -----------------------------------------------------------------
90
90
  const total = await getFirestoreCount(q);
91
91
  // -- Paginate --------------------------------------------------------------
92
- const offset = (page - 1) * perPage;
93
- const pagedSnap = await q.offset(offset).limit(perPage).get();
92
+ const offset = (page - 1) * pageSize;
93
+ const pagedSnap = await q.offset(offset).limit(pageSize).get();
94
94
  const data = pagedSnap.docs.map((d) => this.mapDoc(d));
95
- const totalPages = total === 0 ? 0 : Math.max(1, Math.ceil(total / perPage));
96
- return { data, total, page, perPage, totalPages };
95
+ const totalPages = total === 0 ? 0 : Math.max(1, Math.ceil(total / pageSize));
96
+ return { data, total, page, pageSize, totalPages };
97
97
  }
98
98
  async findWhere(field, op, value) {
99
99
  const snap = await this.getCollection()
@@ -102,6 +102,21 @@ export class FirebaseRepository {
102
102
  return snap.docs.map((d) => this.mapDoc(d));
103
103
  }
104
104
  // -- IWriteRepository -------------------------------------------------------
105
+ /*
106
+ * 🛑 Accepts the PLAINTEXT shape, because this method ENCRYPTS.
107
+ *
108
+ * `applyWriteHooks` runs `encryptPiiFields` over the subclass's `piiFields`,
109
+ * so a caller legitimately hands over a real email and gets ciphertext in
110
+ * Firestore. Typing the parameter `Omit<T, …>` demanded `Encrypted<string>`
111
+ * from every caller — and the only way to produce one without encrypting is
112
+ * `asEncrypted(value)`, which labels plaintext as ciphertext and is the
113
+ * misuse that helper's own docstring forbids. The alternative was a cast at
114
+ * each of the dozens of write sites across fourteen repositories; one honest
115
+ * signature here is the same change made once.
116
+ *
117
+ * `Plaintext<T>` is the identity on any document with no branded field, so
118
+ * this is a no-op for every repository that holds no PII.
119
+ */
105
120
  async create(data) {
106
121
  const now = new Date();
107
122
  const payload = prepareForFirestore({
@@ -113,6 +128,7 @@ export class FirebaseRepository {
113
128
  const snap = await ref.get();
114
129
  return this.mapDoc(snap);
115
130
  }
131
+ /** Accepts the PLAINTEXT shape — see `create` for why. */
116
132
  async update(id, data) {
117
133
  const payload = prepareForFirestore({
118
134
  ...data,
@@ -1,3 +1,4 @@
1
+ import type { Plaintext } from "../../security/encrypted";
1
2
  import type { FirestoreDocument } from "@mohasinac/appkit";
2
3
  import type { CollectionReference, DocumentData, DocumentReference, DocumentSnapshot, Firestore, Query, Transaction, WriteBatch } from "firebase-admin/firestore";
3
4
  import { type FirebaseSieveFields, type FirebaseSieveOptions, type FirebaseSieveResult, type SieveModel } from "./sieve";
@@ -111,7 +112,7 @@ export declare abstract class BaseRepository<T extends DocumentData> {
111
112
  doc: T | null | undefined;
112
113
  patch: Partial<T>;
113
114
  }>): Promise<number>;
114
- create(data: Partial<T> | FirestoreDocument): Promise<T>;
115
+ create(data: Partial<Plaintext<T>> | FirestoreDocument): Promise<T>;
115
116
  /**
116
117
  * Write a document at a CALLER-CHOSEN id.
117
118
  *
@@ -143,8 +144,9 @@ export declare abstract class BaseRepository<T extends DocumentData> {
143
144
  * NAME: `createWithId` reads as "create" and behaves as "replace", and that
144
145
  * gap is what made the wrong conclusion so easy to reach.
145
146
  */
146
- createWithId(id: string, data: Partial<T>): Promise<T>;
147
- update(id: string, data: Partial<T>): Promise<T>;
147
+ createWithId(id: string, data: Partial<Plaintext<T>>): Promise<T>;
148
+ /** Accepts the PLAINTEXT shape — see `create` for why. */
149
+ update(id: string, data: Partial<Plaintext<T>>): Promise<T>;
148
150
  delete(id: string): Promise<void>;
149
151
  exists(id: string): Promise<boolean>;
150
152
  /**
@@ -195,12 +197,12 @@ export declare abstract class BaseRepository<T extends DocumentData> {
195
197
  }): Promise<Record<string, number | undefined>>;
196
198
  findByIdInTx(tx: Transaction, id: string): Promise<T | null>;
197
199
  findByIdOrFailInTx(tx: Transaction, id: string): Promise<T>;
198
- createInTx(tx: Transaction, data: Partial<T> | FirestoreDocument): DocumentReference;
199
- createWithIdInTx(tx: Transaction, id: string, data: Partial<T> | FirestoreDocument): DocumentReference;
200
- updateInTx(tx: Transaction, id: string, data: Partial<T>): void;
200
+ createInTx(tx: Transaction, data: Partial<Plaintext<T>> | FirestoreDocument): DocumentReference;
201
+ createWithIdInTx(tx: Transaction, id: string, data: Partial<Plaintext<T>> | FirestoreDocument): DocumentReference;
202
+ updateInTx(tx: Transaction, id: string, data: Partial<Plaintext<T>>): void;
201
203
  deleteInTx(tx: Transaction, id: string): void;
202
- createInBatch(batch: WriteBatch, data: Partial<T> | FirestoreDocument): DocumentReference;
203
- createWithIdInBatch(batch: WriteBatch, id: string, data: Partial<T> | FirestoreDocument): void;
204
- updateInBatch(batch: WriteBatch, id: string, data: Partial<T>): void;
204
+ createInBatch(batch: WriteBatch, data: Partial<Plaintext<T>> | FirestoreDocument): DocumentReference;
205
+ createWithIdInBatch(batch: WriteBatch, id: string, data: Partial<Plaintext<T>> | FirestoreDocument): void;
206
+ updateInBatch(batch: WriteBatch, id: string, data: Partial<Plaintext<T>>): void;
205
207
  deleteInBatch(batch: WriteBatch, id: string): void;
206
208
  }
@@ -268,6 +268,21 @@ export class BaseRepository {
268
268
  await batch.commit();
269
269
  return present.length;
270
270
  }
271
+ /*
272
+ * 🛑 Accepts the PLAINTEXT shape, because this method ENCRYPTS.
273
+ *
274
+ * `applyWriteHooks` runs `encryptPiiFields` over the subclass's `piiFields`,
275
+ * so a caller legitimately hands over a real email and Firestore holds
276
+ * ciphertext. Typing this `Partial<T>` demanded `Encrypted<string>` from
277
+ * every caller once the PII fields were branded — and the only way to make
278
+ * one without encrypting is `asEncrypted(value)`, which labels plaintext as
279
+ * ciphertext and is the misuse that helper's docstring forbids. The
280
+ * alternative was a cast at each of the dozens of write sites across
281
+ * fourteen repositories; one honest signature here is that change made once.
282
+ *
283
+ * `Plaintext<T>` is the identity on a document with no branded member, so
284
+ * this is a no-op for every repository holding no PII.
285
+ */
271
286
  async create(data) {
272
287
  try {
273
288
  const cleanData = prepareForFirestore({
@@ -315,6 +330,7 @@ export class BaseRepository {
315
330
  * NAME: `createWithId` reads as "create" and behaves as "replace", and that
316
331
  * gap is what made the wrong conclusion so easy to reach.
317
332
  */
333
+ // Plaintext<T> — these methods ENCRYPT via applyWriteHooks; see `create`.
318
334
  async createWithId(id, data) {
319
335
  try {
320
336
  const now = new Date();
@@ -339,6 +355,7 @@ export class BaseRepository {
339
355
  throw new DatabaseError(`Failed to create document with ID: ${id}: ${detailOf(error)}`, error);
340
356
  }
341
357
  }
358
+ /** Accepts the PLAINTEXT shape — see `create` for why. */
342
359
  async update(id, data) {
343
360
  try {
344
361
  const cleanData = prepareForFirestore({
@@ -496,6 +513,7 @@ export class BaseRepository {
496
513
  }));
497
514
  return docRef;
498
515
  }
516
+ // Plaintext<T> — these methods ENCRYPT via applyWriteHooks; see `create`.
499
517
  updateInTx(tx, id, data) {
500
518
  const docRef = this.getCollection().doc(id);
501
519
  tx.update(docRef, prepareForFirestore({ ...this.applyWriteHooks(data), updatedAt: new Date() }));
@@ -523,6 +541,7 @@ export class BaseRepository {
523
541
  updatedAt: now,
524
542
  }));
525
543
  }
544
+ // Plaintext<T> — these methods ENCRYPT via applyWriteHooks; see `create`.
526
545
  updateInBatch(batch, id, data) {
527
546
  const docRef = this.getCollection().doc(id);
528
547
  batch.update(docRef, prepareForFirestore({ ...this.applyWriteHooks(data), updatedAt: new Date() }));
@@ -34,4 +34,16 @@ export declare const RTDB_PATHS: {
34
34
  * Pruned by `cleanupRtdbEvents`'s sixth block.
35
35
  */
36
36
  readonly CHAT_EVENTS: "chat_events";
37
+ /**
38
+ * Per-run progress for the sticker kiss-cut tracer — stage, pct, parts and
39
+ * shards done. The DURABLE record is `stickerTraceRuns.events[]`; this is
40
+ * only the live bar, which is why losing it is survivable and why the run
41
+ * document is what a failure is diagnosed from weeks later.
42
+ *
43
+ * 🛑 Pruned at SIXTY minutes, not fifteen. A `max`-tier fan-out across sixty
44
+ * parts can outlast a fifteen-minute window, and a channel pruned mid-run
45
+ * reads to the client as "it died" — the same false negative `EMAIL_EVENTS`
46
+ * carries a longer window to avoid.
47
+ */
48
+ readonly STICKER_TRACE: "sticker_trace";
37
49
  };
@@ -34,4 +34,16 @@ export const RTDB_PATHS = {
34
34
  * Pruned by `cleanupRtdbEvents`'s sixth block.
35
35
  */
36
36
  CHAT_EVENTS: "chat_events",
37
+ /**
38
+ * Per-run progress for the sticker kiss-cut tracer — stage, pct, parts and
39
+ * shards done. The DURABLE record is `stickerTraceRuns.events[]`; this is
40
+ * only the live bar, which is why losing it is survivable and why the run
41
+ * document is what a failure is diagnosed from weeks later.
42
+ *
43
+ * 🛑 Pruned at SIXTY minutes, not fifteen. A `max`-tier fan-out across sixty
44
+ * parts can outlast a fifteen-minute window, and a channel pruned mid-run
45
+ * reads to the client as "it died" — the same false negative `EMAIL_EVENTS`
46
+ * carries a longer window to avoid.
47
+ */
48
+ STICKER_TRACE: "sticker_trace",
37
49
  };
@@ -10,7 +10,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
10
  */
11
11
  import { Component } from "react";
12
12
  import { Logger } from "../core/Logger.js";
13
- import { Button, Heading, Text } from "../ui/index.js";
13
+ // Defining modules, not the sibling barrel — Root Cause #18. `ui/index.ts` and
14
+ // `react/index.ts` re-exported into each other, which is the whole of
15
+ // `audit-import-cycles` component 1: an 18-module knot held together entirely
16
+ // by barrel hops, none of which needed the barrel.
17
+ import { Button } from "../ui/components/Button.js";
18
+ import { Heading, Text } from "../ui/components/Typography.js";
14
19
  import { trackError, ErrorCategory, ErrorSeverity, } from "../monitoring/error-tracking.js";
15
20
  function DefaultFallback({ error, onReset, }) {
16
21
  return (_jsxs("div", { role: "alert", style: {
@@ -20,6 +20,7 @@ export declare const RealtimeEventType: {
20
20
  readonly CHAT: "chat";
21
21
  readonly BID: "bid";
22
22
  readonly BULK: "bulk";
23
+ readonly STICKER_TRACE: "sticker-trace";
23
24
  };
24
25
  export type RealtimeEventType = (typeof RealtimeEventType)[keyof typeof RealtimeEventType];
25
26
  export declare const RealtimeEventStatus: {
@@ -19,6 +19,14 @@ export const RealtimeEventType = {
19
19
  CHAT: "chat",
20
20
  BID: "bid",
21
21
  BULK: "bulk",
22
+ /*
23
+ * The sticker kiss-cut tracer's per-run progress channel. Added rather than
24
+ * reusing BULK: the type selects this event's message strings and its
25
+ * claim/path conventions, and a trace reports a STAGE out of eleven where a
26
+ * bulk job reports a count — borrowing BULK's vocabulary would make the
27
+ * progress row say the wrong thing about every failure.
28
+ */
29
+ STICKER_TRACE: "sticker-trace",
22
30
  };
23
31
  export const RealtimeEventStatus = {
24
32
  IDLE: "idle",
@@ -1,7 +1,11 @@
1
1
  "use client";
2
2
  import { normalizeError } from "../../errors/normalize.js";
3
3
  import { useState, useCallback } from "react";
4
- import { useToast } from "../../ui/index.js";
4
+ // Defining modules, not the sibling barrel — Root Cause #18. `ui/index.ts` and
5
+ // `react/index.ts` re-exported into each other, which is the whole of
6
+ // `audit-import-cycles` component 1: an 18-module knot held together entirely
7
+ // by barrel hops, none of which needed the barrel.
8
+ import { useToast } from "../../ui/components/toast-context.js";
5
9
  export function useEntityDelete(opts) {
6
10
  const [deletingId, setDeletingId] = useState(null);
7
11
  const { showToast } = useToast();
@@ -10,7 +10,11 @@
10
10
  * inline (e.g. reviews, settings views).
11
11
  */
12
12
  import { useState, useCallback, useRef, useEffect } from "react";
13
- import { useToast } from "../../ui/index.js";
13
+ // Defining modules, not the sibling barrel — Root Cause #18. `ui/index.ts` and
14
+ // `react/index.ts` re-exported into each other, which is the whole of
15
+ // `audit-import-cycles` component 1: an 18-module knot held together entirely
16
+ // by barrel hops, none of which needed the barrel.
17
+ import { useToast } from "../../ui/components/toast-context.js";
14
18
  export function useMessage() {
15
19
  const { showToast } = useToast();
16
20
  const [message, setMessage] = useState(null);