@mohasinac/appkit 4.52.5 → 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 (630) 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 +11 -0
  336. package/dist/features/layout/AppLayoutShell.js +64 -12
  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.js +1 -1
  348. package/dist/features/layout/cta-anchor.d.ts +31 -0
  349. package/dist/features/layout/cta-anchor.js +31 -0
  350. package/dist/features/layout/hooks/useBottomActions.d.ts +7 -0
  351. package/dist/features/layout/hooks/useBottomActions.js +6 -1
  352. package/dist/features/layout/index.d.ts +9 -1
  353. package/dist/features/layout/index.js +9 -1
  354. package/dist/features/layout/useCtaReveal.d.ts +24 -0
  355. package/dist/features/layout/useCtaReveal.js +82 -0
  356. package/dist/features/layout/useHoldToOpen.d.ts +41 -0
  357. package/dist/features/layout/useHoldToOpen.js +84 -0
  358. package/dist/features/lottery/repository/lottery-entry.repository.d.ts +18 -3
  359. package/dist/features/lottery/repository/lottery-entry.repository.js +48 -6
  360. package/dist/features/lottery/schemas/firestore.d.ts +33 -5
  361. package/dist/features/loyalty/api/balance/route.js +1 -1
  362. package/dist/features/loyalty/api/history/route.js +1 -1
  363. package/dist/features/media/MediaImage.js +0 -1
  364. package/dist/features/media/MediaPickerModal.js +7 -1
  365. package/dist/features/media/modals/ImageEditor.js +5 -1
  366. package/dist/features/media/modals/VideoThumbnailSelector.js +17 -1
  367. package/dist/features/media/repository/media-assets.repository.d.ts +19 -0
  368. package/dist/features/media/upload/CameraCapture.js +16 -1
  369. package/dist/features/media/upload/ImageUpload.js +42 -4
  370. package/dist/features/media/upload/MediaUploadField.js +69 -13
  371. package/dist/features/media/upload/downscale-image.d.ts +56 -0
  372. package/dist/features/media/upload/downscale-image.js +150 -0
  373. package/dist/features/messages/components/ConversationThreadView.js +45 -2
  374. package/dist/features/messages/components/MessageSellerButton.d.ts +15 -1
  375. package/dist/features/messages/components/MessageSellerButton.js +10 -2
  376. package/dist/features/messages/schemas/firestore.d.ts +15 -0
  377. package/dist/features/orders/hooks/useOrders.js +4 -2
  378. package/dist/features/orders/repository/orders.repository.d.ts +15 -4
  379. package/dist/features/orders/repository/orders.repository.js +52 -20
  380. package/dist/features/orders/schemas/firestore.d.ts +15 -4
  381. package/dist/features/orders/schemas/index.d.ts +8 -8
  382. package/dist/features/orders/types/index.d.ts +2 -2
  383. package/dist/features/payments/repository/payments.repository.js +2 -2
  384. package/dist/features/payments/repository/payout.repository.d.ts +23 -6
  385. package/dist/features/payments/repository/payout.repository.js +63 -23
  386. package/dist/features/payments/repository/saved-payment-methods.repository.d.ts +17 -6
  387. package/dist/features/payments/repository/saved-payment-methods.repository.js +59 -11
  388. package/dist/features/payments/schemas/firestore.d.ts +14 -3
  389. package/dist/features/payments/schemas/saved-methods-firestore.d.ts +12 -1
  390. package/dist/features/pre-orders/api/[slug]/route.js +1 -1
  391. package/dist/features/pre-orders/api/admin/route.js +1 -1
  392. package/dist/features/pre-orders/api/route.js +1 -1
  393. package/dist/features/pre-orders/repository/pre-orders.repository.d.ts +3 -3
  394. package/dist/features/pre-orders/repository/pre-orders.repository.js +6 -6
  395. package/dist/features/products/api/[id]/route.js +1 -1
  396. package/dist/features/products/components/ListingBottomActions.js +4 -0
  397. package/dist/features/products/components/ProductDetailPageView.js +2 -1
  398. package/dist/features/products/components/ProductGalleryClient.js +2 -2
  399. package/dist/features/products/components/ProductGrid.js +12 -1
  400. package/dist/features/products/components/index.d.ts +0 -2
  401. package/dist/features/products/components/index.js +0 -1
  402. package/dist/features/products/config/listing-type-listing-config.d.ts +0 -3
  403. package/dist/features/products/config/listing-type-listing-config.js +27 -2
  404. package/dist/features/products/constants/listing-tabs.d.ts +9 -0
  405. package/dist/features/products/constants/listing-tabs.js +3 -2
  406. package/dist/features/products/hooks/useProducts.js +2 -2
  407. package/dist/features/products/repository/products.repository.js +13 -1
  408. package/dist/features/products/schemas/index.d.ts +2 -2
  409. package/dist/features/products/types/index.d.ts +1 -1
  410. package/dist/features/promotions/api/route.js +1 -1
  411. package/dist/features/reviews/actions/review-actions.d.ts +6 -6
  412. package/dist/features/reviews/actions/review-actions.js +22 -8
  413. package/dist/features/reviews/components/ReviewDetailPageView.js +13 -1
  414. package/dist/features/reviews/components/ReviewsIndexPageView.js +21 -4
  415. package/dist/features/reviews/repository/reviews.repository.d.ts +19 -7
  416. package/dist/features/reviews/repository/reviews.repository.js +63 -12
  417. package/dist/features/reviews/schemas/firestore.d.ts +13 -2
  418. package/dist/features/reviews/schemas/index.d.ts +2 -2
  419. package/dist/features/scams/actions/scam-actions.js +16 -4
  420. package/dist/features/search/components/SearchResultsPageView.js +2 -1
  421. package/dist/features/search/hooks/useSearchIndex.d.ts +34 -0
  422. package/dist/features/search/hooks/useSearchIndex.js +172 -0
  423. package/dist/features/search/repository/search.repository.js +2 -2
  424. package/dist/features/seller/actions/offer-actions.d.ts +5 -5
  425. package/dist/features/seller/actions/offer-actions.js +38 -8
  426. package/dist/features/seller/actions/seller-actions.js +34 -7
  427. package/dist/features/seller/api/coupons/route.js +1 -1
  428. package/dist/features/seller/api/products/route.js +1 -1
  429. package/dist/features/seller/api/store/route.js +1 -1
  430. package/dist/features/seller/components/SellerBidsView.js +1 -1
  431. package/dist/features/seller/components/SellerCouponsView.js +1 -1
  432. package/dist/features/seller/components/SellerListingTypeView.js +9 -1
  433. package/dist/features/seller/components/SellerOrdersView.js +1 -1
  434. package/dist/features/seller/components/SellerPayoutSettingsView.js +0 -1
  435. package/dist/features/seller/components/SellerPayoutsView.js +1 -1
  436. package/dist/features/seller/components/SellerProductShell.js +0 -1
  437. package/dist/features/seller/components/SellerProductsView.js +1 -1
  438. package/dist/features/seller/components/SellerShippingView.js +0 -1
  439. package/dist/features/seller/components/SellerStorefrontView.js +0 -1
  440. package/dist/features/seller/components/index.d.ts +0 -4
  441. package/dist/features/seller/components/index.js +0 -2
  442. package/dist/features/seller/repository/offer.repository.d.ts +15 -3
  443. package/dist/features/seller/repository/offer.repository.js +43 -7
  444. package/dist/features/seller/schemas/firestore.d.ts +14 -3
  445. package/dist/features/seller/schemas/index.d.ts +4 -4
  446. package/dist/features/seller/schemas/order-forms.d.ts +39 -0
  447. package/dist/features/seller/schemas/order-forms.js +37 -0
  448. package/dist/features/shell/FormShell.js +6 -2
  449. package/dist/features/shell/QuickFormDrawer.js +15 -1
  450. package/dist/features/shipments/components/AdminShipmentEditorView.js +0 -1
  451. package/dist/features/shipments/components/AdminShipmentsView.js +1 -1
  452. package/dist/features/sticker-trace/components/StickerCommitPanel.d.ts +30 -0
  453. package/dist/features/sticker-trace/components/StickerCommitPanel.js +93 -0
  454. package/dist/features/sticker-trace/components/StickerPrintPanel.d.ts +33 -0
  455. package/dist/features/sticker-trace/components/StickerPrintPanel.js +104 -0
  456. package/dist/features/sticker-trace/components/StickerRetryPanel.d.ts +20 -0
  457. package/dist/features/sticker-trace/components/StickerRetryPanel.js +128 -0
  458. package/dist/features/sticker-trace/components/StickerRunHistoryPanel.d.ts +45 -0
  459. package/dist/features/sticker-trace/components/StickerRunHistoryPanel.js +84 -0
  460. package/dist/features/sticker-trace/components/StickerTraceStudio.d.ts +27 -0
  461. package/dist/features/sticker-trace/components/StickerTraceStudio.js +171 -0
  462. package/dist/features/sticker-trace/constants/help-content.d.ts +23 -0
  463. package/dist/features/sticker-trace/constants/help-content.js +172 -0
  464. package/dist/features/sticker-trace/hooks/useLiveTrace.d.ts +27 -0
  465. package/dist/features/sticker-trace/hooks/useLiveTrace.js +160 -0
  466. package/dist/features/sticker-trace/hooks/useStickerTraceProgress.d.ts +22 -0
  467. package/dist/features/sticker-trace/hooks/useStickerTraceProgress.js +106 -0
  468. package/dist/features/sticker-trace/repository/sticker-sheets.repository.d.ts +113 -0
  469. package/dist/features/sticker-trace/repository/sticker-sheets.repository.js +146 -0
  470. package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.d.ts +132 -0
  471. package/dist/features/sticker-trace/repository/sticker-trace-runs.repository.js +174 -0
  472. package/dist/features/sticker-trace/schemas/firestore.d.ts +248 -0
  473. package/dist/features/sticker-trace/schemas/firestore.js +79 -0
  474. package/dist/features/sticker-trace/server.d.ts +8 -0
  475. package/dist/features/sticker-trace/server.js +51 -0
  476. package/dist/features/stores/actions/store-query-actions.d.ts +2 -2
  477. package/dist/features/stores/actions/store-query-actions.js +7 -2
  478. package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -3
  479. package/dist/features/stores/api/[storeSlug]/products/route.js +3 -3
  480. package/dist/features/stores/api/[storeSlug]/reviews/route.js +1 -1
  481. package/dist/features/stores/api/[storeSlug]/route.js +1 -1
  482. package/dist/features/stores/components/StoreNavTabs.js +17 -2
  483. package/dist/features/stores/manifest.js +8 -4
  484. package/dist/features/support/repository/support.repository.d.ts +14 -3
  485. package/dist/features/support/repository/support.repository.js +93 -13
  486. package/dist/features/support/schemas/firestore.d.ts +16 -5
  487. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +61 -19
  488. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +19 -3
  489. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +2 -0
  490. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +243 -0
  491. package/dist/features/tester/seed-data/authored/content-discovery__events.js +36 -10
  492. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +2 -0
  493. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +209 -0
  494. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +2 -0
  495. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +90 -0
  496. package/dist/features/tester/seed-data/authored/index.js +8 -0
  497. package/dist/features/tester/seed-data/authored/selling__media-limits.js +19 -17
  498. package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +10 -5
  499. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +2 -0
  500. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +283 -0
  501. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +192 -22
  502. package/dist/index.d.ts +10 -23
  503. package/dist/index.js +27 -19
  504. package/dist/next/api/routeHandler.js +9 -0
  505. package/dist/next/routing/require-record.d.ts +13 -0
  506. package/dist/next/routing/require-record.js +62 -0
  507. package/dist/next/routing/route-map.d.ts +4 -4
  508. package/dist/next/routing/route-map.js +25 -3
  509. package/dist/providers/db-firebase/base.d.ts +4 -2
  510. package/dist/providers/db-firebase/base.js +21 -5
  511. package/dist/providers/db-firebase/base.repository.d.ts +11 -9
  512. package/dist/providers/db-firebase/base.repository.js +19 -0
  513. package/dist/providers/db-firebase/rtdb-paths.d.ts +12 -0
  514. package/dist/providers/db-firebase/rtdb-paths.js +12 -0
  515. package/dist/react/ErrorBoundary.js +6 -1
  516. package/dist/react/hooks/realtime-event-constants.d.ts +1 -0
  517. package/dist/react/hooks/realtime-event-constants.js +8 -0
  518. package/dist/react/hooks/useEntityDelete.js +5 -1
  519. package/dist/react/hooks/useMessage.js +5 -1
  520. package/dist/repositories/index.d.ts +2 -2
  521. package/dist/repositories/index.js +6 -1
  522. package/dist/schemas/registry.d.ts +13 -20
  523. package/dist/schemas/registry.js +31 -14
  524. package/dist/schemas/webhooks/google-oauth.d.ts +2 -2
  525. package/dist/security/encrypted.d.ts +117 -0
  526. package/dist/security/encrypted.js +100 -0
  527. package/dist/security/index.d.ts +5 -2
  528. package/dist/security/index.js +16 -2
  529. package/dist/security/pii-accessors.d.ts +71 -0
  530. package/dist/security/pii-accessors.js +150 -0
  531. package/dist/security/pii-encrypt.d.ts +0 -8
  532. package/dist/security/pii-encrypt.js +22 -15
  533. package/dist/security/pii-mask.d.ts +18 -0
  534. package/dist/security/pii-mask.js +27 -0
  535. package/dist/seed/_helpers/search-txt-wrappers.d.ts +6 -6
  536. package/dist/seed/_helpers/search-txt-wrappers.js +22 -0
  537. package/dist/seed/addresses-seed-data.d.ts +2 -2
  538. package/dist/seed/authenticity-knowledge-seed-data.d.ts +34 -0
  539. package/dist/seed/authenticity-knowledge-seed-data.js +1277 -0
  540. package/dist/seed/bids-seed-data.d.ts +2 -2
  541. package/dist/seed/bids-seed-data.js +23 -2
  542. package/dist/seed/events-seed-data.d.ts +2 -2
  543. package/dist/seed/events-seed-data.js +5 -0
  544. package/dist/seed/faq-seed-data.js +175 -5
  545. package/dist/seed/homepage-sections-seed-data.js +39 -23
  546. package/dist/seed/index.d.ts +1 -0
  547. package/dist/seed/index.js +1 -0
  548. package/dist/seed/lottery-entries-seed-data.d.ts +2 -2
  549. package/dist/seed/offers-seed-data.d.ts +2 -2
  550. package/dist/seed/offers-seed-data.js +1 -1
  551. package/dist/seed/orders-seed-data.d.ts +2 -2
  552. package/dist/seed/payouts-seed-data.d.ts +2 -2
  553. package/dist/seed/payouts-seed-data.js +1 -1
  554. package/dist/seed/reviews-seed-data.d.ts +1 -2
  555. package/dist/seed/seed-purpose.js +7 -0
  556. package/dist/seed/sessions-seed-data.d.ts +2 -2
  557. package/dist/seed/sessions-seed-data.js +5 -0
  558. package/dist/seed/site-settings-seed-data.js +1 -1
  559. package/dist/seed/support-tickets-seed-data.d.ts +2 -2
  560. package/dist/seed/support-tickets-seed-data.js +1 -1
  561. package/dist/seed/users-seed-data.d.ts +2 -2
  562. package/dist/seed/users-seed-data.js +1 -1
  563. package/dist/seo/json-ld.js +5 -1
  564. package/dist/server.d.ts +18 -3
  565. package/dist/server.js +59 -3
  566. package/dist/styles.css +237 -1
  567. package/dist/tailwind-utilities.css +1 -1
  568. package/dist/ui/components/Button.js +7 -1
  569. package/dist/ui/components/FilterChipGroup.d.ts +11 -0
  570. package/dist/ui/components/FilterChipGroup.js +1 -1
  571. package/dist/ui/components/ImageGallery.js +6 -1
  572. package/dist/ui/components/ListingLayout.js +14 -8
  573. package/dist/ui/components/OverflowRow.d.ts +92 -0
  574. package/dist/ui/components/OverflowRow.js +203 -0
  575. package/dist/ui/components/OverflowRow.style.css +235 -0
  576. package/dist/ui/components/RecordDetailModal.js +14 -1
  577. package/dist/ui/components/RowActionMenu.js +5 -1
  578. package/dist/ui/components/SideDrawer.js +5 -1
  579. package/dist/ui/components/SideModal.js +9 -1
  580. package/dist/ui/components/TabBarShell.d.ts +12 -1
  581. package/dist/ui/components/TabBarShell.js +3 -2
  582. package/dist/ui/components/Tabs.js +36 -24
  583. package/dist/ui/components/Toast.d.ts +3 -24
  584. package/dist/ui/components/Toast.js +2 -19
  585. package/dist/ui/components/TopBannerPortal.d.ts +15 -0
  586. package/dist/ui/components/TopBannerPortal.js +19 -0
  587. package/dist/ui/components/UnsavedChangesModal.js +5 -1
  588. package/dist/ui/components/index.style.css +1 -0
  589. package/dist/ui/components/row-collapse.d.ts +15 -0
  590. package/dist/ui/components/row-collapse.js +127 -0
  591. package/dist/ui/components/toast-context.d.ts +63 -0
  592. package/dist/ui/components/toast-context.js +48 -0
  593. package/dist/ui/components/top-banner-slot.d.ts +37 -0
  594. package/dist/ui/components/top-banner-slot.js +45 -0
  595. package/dist/ui/icons/icon-registry.d.ts +6 -0
  596. package/dist/ui/icons/icon-registry.js +17 -1
  597. package/dist/ui/index.d.ts +2 -0
  598. package/dist/ui/index.js +1 -0
  599. package/dist/utils/array.helper.d.ts +2 -2
  600. package/dist/utils/array.helper.js +5 -5
  601. package/dist/utils/id-generators.d.ts +6 -0
  602. package/dist/utils/id-generators.js +10 -0
  603. package/dist/utils/media-url.js +0 -2
  604. package/dist/utils/search-txt-builders.d.ts +28 -4
  605. package/dist/utils/search-txt-builders.js +41 -1
  606. package/dist/validation/schemas.d.ts +8 -8
  607. package/package.json +6 -2
  608. package/scripts/seed-cli.mjs +3 -0
  609. package/dist/features/account/components/UserAddressesView.d.ts +0 -13
  610. package/dist/features/account/components/UserAddressesView.js +0 -5
  611. package/dist/features/account/components/UserNotificationsView.d.ts +0 -15
  612. package/dist/features/account/components/UserNotificationsView.js +0 -12
  613. package/dist/features/account/components/UserSettingsView.d.ts +0 -16
  614. package/dist/features/account/components/UserSettingsView.js +0 -13
  615. package/dist/features/account/components/UserSupportView.d.ts +0 -3
  616. package/dist/features/account/components/UserSupportView.js +0 -166
  617. package/dist/features/admin/components/DemoSeedView.d.ts +0 -11
  618. package/dist/features/admin/components/DemoSeedView.js +0 -5
  619. package/dist/features/auth/components/AuthStatusPanel.d.ts +0 -10
  620. package/dist/features/auth/components/AuthStatusPanel.js +0 -22
  621. package/dist/features/categories/components/CategoryProductsView.d.ts +0 -45
  622. package/dist/features/categories/components/CategoryProductsView.js +0 -21
  623. package/dist/features/homepage/components/HowItWorksInfoView.d.ts +0 -36
  624. package/dist/features/homepage/components/HowItWorksInfoView.js +0 -10
  625. package/dist/features/layout/BottomActions.d.ts +0 -1
  626. package/dist/features/layout/BottomActions.js +0 -311
  627. package/dist/features/products/components/ProductsView.d.ts +0 -6
  628. package/dist/features/products/components/ProductsView.js +0 -5
  629. package/dist/features/seller/components/SellerStoreView.d.ts +0 -8
  630. package/dist/features/seller/components/SellerStoreView.js +0 -8
@@ -0,0 +1,197 @@
1
+ /** Decoded pixels. Always RGBA8, row-major, tightly packed. */
2
+ export interface DecodedRaster {
3
+ readonly width: number;
4
+ readonly height: number;
5
+ /** length === width * height * 4 */
6
+ readonly data: Uint8Array;
7
+ /**
8
+ * Scan resolution, when the source declared one AND an operator confirmed it.
9
+ *
10
+ * Absent is a real answer and must stay representable: five of the nine
11
+ * reference scans declare 72 or 96 dpi, which is a default the encoder wrote
12
+ * rather than a measurement. Millimetre output is WITHHELD when this is
13
+ * undefined — a fabricated mm figure on a cut file is a physical production
14
+ * error, which is a different class of wrong from a missing number.
15
+ */
16
+ readonly dpi?: number;
17
+ }
18
+ export interface EncodedImage {
19
+ readonly bytes: Uint8Array;
20
+ readonly contentType: string;
21
+ }
22
+ export interface Rect {
23
+ readonly x: number;
24
+ readonly y: number;
25
+ readonly width: number;
26
+ readonly height: number;
27
+ }
28
+ export interface Point {
29
+ readonly x: number;
30
+ readonly y: number;
31
+ }
32
+ /** One cubic Bézier segment; the start point is the previous segment's end. */
33
+ export interface CubicSegment {
34
+ readonly c1: Point;
35
+ readonly c2: Point;
36
+ readonly to: Point;
37
+ }
38
+ /**
39
+ * One closed outline. Kiss-cut sheets cut the outer boundary only — interior
40
+ * holes are never cut, or the sticker falls apart on the backing — so a part
41
+ * carries exactly one path and `segments` always closes back to `start`.
42
+ */
43
+ export interface CutPath {
44
+ readonly start: Point;
45
+ readonly segments: readonly CubicSegment[];
46
+ }
47
+ /**
48
+ * The pipeline, in order. A failure reports the stage it died in, which is the
49
+ * difference between "it broke" and "the ridge detector found nothing on a
50
+ * halftone scan" — so the union is shared by the runner, the progress channel
51
+ * and the retry panel rather than restated in each.
52
+ */
53
+ export declare const TRACE_STAGES: readonly ["decode", "prefilter", "ridge", "quantise", "fuse", "flood", "segment", "cluster", "geometry", "parts", "exports"];
54
+ export type TraceStage = (typeof TRACE_STAGES)[number];
55
+ /**
56
+ * `paper` — stickers sit on bare backing; the sheet border is background.
57
+ * `art` — the whole sheet is printed and the only signal is the cut line.
58
+ * `auto` — decide from the border band's colour spread (see trace/paper).
59
+ *
60
+ * Several real sheets are BOTH (black-dranzer is paper on the left, solid red
61
+ * and blue panels on the right), which is why this selects an emphasis rather
62
+ * than switching algorithms: the ridge pass runs regardless, and this only
63
+ * weights how much the paper-flood is trusted.
64
+ */
65
+ export type ScanType = "auto" | "paper" | "art";
66
+ export type PrecisionTier = "draft" | "standard" | "precise" | "max";
67
+ export type PrefilterKind = "none" | "median" | "bilateral";
68
+ /**
69
+ * Grouped BY STAGE, and that grouping is load-bearing rather than cosmetic: a
70
+ * resumed run may only skip stages whose parameters did not change. Without the
71
+ * grouping, "resume from `parts` with a different ridge threshold" yields a run
72
+ * whose stored artifacts were produced under different parameters than the run
73
+ * records, and nothing anywhere contradicts it.
74
+ */
75
+ export interface TraceParams {
76
+ readonly tier: PrecisionTier;
77
+ readonly scanType: ScanType;
78
+ /** decode */
79
+ readonly workingLongEdge: number;
80
+ readonly dpi?: number;
81
+ /** prefilter */
82
+ readonly prefilter: PrefilterKind;
83
+ readonly prefilterRadius: number;
84
+ /** ridge */
85
+ readonly ridgeHysteresisLow: number;
86
+ readonly ridgeHysteresisHigh: number;
87
+ readonly ridgeKernelScale: number;
88
+ /** quantise — the second detector channel; see trace/quantise */
89
+ readonly quantiseEnabled: boolean;
90
+ readonly quantiseColours: number;
91
+ readonly quantiseWeight: number;
92
+ /** flood */
93
+ readonly paperTolerance: number;
94
+ readonly seedBandPx: number;
95
+ /** segment */
96
+ readonly minPartAreaMm2: number;
97
+ readonly maxParts: number;
98
+ readonly bridgeMm: number;
99
+ /**
100
+ * Art sheets only. A region boundary below this multiple of the sheet's
101
+ * MEDIAN boundary strength is treated as printing rather than a cut, and the
102
+ * two regions merge. See trace/merge for why this exists at all.
103
+ */
104
+ readonly mergeStrengthFactor: number;
105
+ /** geometry */
106
+ readonly smoothMm: number;
107
+ readonly borderMm: number;
108
+ readonly bleedMm: number;
109
+ readonly simplifyMm: number;
110
+ readonly cleanMm: number;
111
+ /** cluster */
112
+ readonly clusterGapMm: number;
113
+ }
114
+ export interface PartGeometry {
115
+ /** 1-based, stable within a run; what the admin renames and references. */
116
+ readonly ordinal: number;
117
+ /** Which physical sheet this part belongs to, when one scan holds several. */
118
+ readonly groupIndex: number;
119
+ readonly bboxPx: Rect;
120
+ readonly areaPx: number;
121
+ /** Null whenever DPI is unknown — never a guess. */
122
+ readonly bboxMm: Rect | null;
123
+ readonly areaMm2: number | null;
124
+ /**
125
+ * Narrowest internal width, in mm when DPI is known. Cricut's minimum
126
+ * reliable detail is 0.25in (6mm); a part with a neck below that tears rather
127
+ * than cuts, so the exporter needs this to warn before a sheet is wasted.
128
+ */
129
+ readonly minFeatureMm: number | null;
130
+ readonly path: CutPath;
131
+ }
132
+ /**
133
+ * One physical sheet within a scan. A 4948x6955 scan can hold several, and
134
+ * grouping them by large border gaps is what makes the part list navigable
135
+ * rather than one run of sixty.
136
+ */
137
+ export interface SheetCluster {
138
+ readonly index: number;
139
+ readonly bboxPx: Rect;
140
+ readonly partOrdinals: readonly number[];
141
+ }
142
+ /**
143
+ * Reported whether or not the trace succeeded, because the numbers that explain
144
+ * a BAD result are the same ones that explain a good one. `ridgeCoverage` near
145
+ * zero on an `art` scan means the detector found nothing — which is a different
146
+ * remedy from `droppedBelowMinArea` in the hundreds, which means it found noise.
147
+ */
148
+ export interface TraceDiagnostics {
149
+ readonly workingSize: Rect;
150
+ readonly paperColour: readonly [number, number, number] | null;
151
+ readonly ridgeCoverage: number;
152
+ readonly quantiseCoverage: number;
153
+ readonly fusedCoverage: number;
154
+ readonly componentsFound: number;
155
+ readonly droppedBelowMinArea: number;
156
+ /**
157
+ * Components covering more than MAX_PART_FRACTION of the raster.
158
+ *
159
+ * 🛑 Named for what it counts. It was `droppedTouchingBorder`, which told a
160
+ * reader diagnosing a zero-part scan that a sticker had run off the edge —
161
+ * a different and wrong story. A sheet-sized component means the flood never
162
+ * got IN, and that is the one thing worth knowing at that moment.
163
+ */
164
+ readonly droppedSheetSized: number;
165
+ /**
166
+ * Fraction of the raster the paper path could flood through.
167
+ *
168
+ * The paper model needs real background; `isAvailable`-style negation has
169
+ * nothing to work with when there is none. Measured across this corpus at
170
+ * `standard`, the three paper scans that segment correctly sit at 27.7%,
171
+ * 51.3% and 74.2%, and the one that returns zero parts sits at **7.8%** — so
172
+ * this is the statistic that separates "this sheet has no stickers" from
173
+ * "this model cannot read this scan", which otherwise look identical.
174
+ *
175
+ * 1 on an art scan, where the question does not arise.
176
+ */
177
+ readonly backgroundCoverage: number;
178
+ readonly bridgedComponents: number;
179
+ /**
180
+ * Reserved. Art-background sheets WERE unsupported — see the git history for
181
+ * the four approaches that failed and why — and are now handled by the
182
+ * Hessian line filter plus the region merge. Kept as a field rather than
183
+ * deleted because the art path is the one whose accuracy depends on a tuned
184
+ * constant (mergeStrengthFactor), so a future sheet that defeats it needs a
185
+ * way to say so without a schema change.
186
+ */
187
+ readonly artBackgroundUnsupported: boolean;
188
+ }
189
+ export interface TraceResult {
190
+ readonly parts: readonly PartGeometry[];
191
+ readonly clusters: readonly SheetCluster[];
192
+ readonly diagnostics: TraceDiagnostics;
193
+ /** Pixels per millimetre, or null when DPI is unknown. */
194
+ readonly pxPerMm: number | null;
195
+ /** Scale from working-raster pixels back to the source image. */
196
+ readonly sourceScale: number;
197
+ }
@@ -0,0 +1,49 @@
1
+ /*
2
+ * WHY: A scanned sticker sheet has to become cut-ready geometry, and the same
3
+ * algorithm has to run in two places — a browser tuning it live, and a
4
+ * Firebase Function rendering it at full resolution. Two implementations
5
+ * would drift (CLAUDE.md Root Cause #59/#73), so there is exactly one, and
6
+ * these are the shapes it speaks in.
7
+ * WHAT: Every type the tracing core exchanges with its callers. Deliberately
8
+ * free of any image-codec, Firestore or DOM type: the core takes decoded
9
+ * pixels and returns geometry, and knows nothing about where either came
10
+ * from.
11
+ *
12
+ * Coordinates are a constant source of error here, so the rule is stated once:
13
+ * every geometric value in this module is in WORKING-RASTER PIXELS unless its
14
+ * name ends in `Mm`. The working raster is a downscale of the source (see
15
+ * config.WORKING_LONG_EDGE), so a caller rendering at full resolution scales by
16
+ * `source.width / raster.width`. Carrying vectors rather than masks is what
17
+ * makes that rescale exact.
18
+ *
19
+ * EXPORTS:
20
+ * DecodedRaster, EncodedImage, Rect, Point, CubicSegment, CutPath,
21
+ * TraceStage, TRACE_STAGES, ScanType, PrecisionTier, PrefilterKind,
22
+ * TraceParams, PartGeometry, SheetCluster, TraceResult, TraceDiagnostics
23
+ *
24
+ * @tag domain:sticker-trace
25
+ * @tag layer:shared
26
+ * @tag pattern:none
27
+ * @tag access:isomorphic
28
+ * @tag consumers:trace/*,math/*,export/*,canvas-codec,sharp-codec,run
29
+ * @tag sideEffects:none
30
+ */
31
+ /**
32
+ * The pipeline, in order. A failure reports the stage it died in, which is the
33
+ * difference between "it broke" and "the ridge detector found nothing on a
34
+ * halftone scan" — so the union is shared by the runner, the progress channel
35
+ * and the retry panel rather than restated in each.
36
+ */
37
+ export const TRACE_STAGES = [
38
+ "decode",
39
+ "prefilter",
40
+ "ridge",
41
+ "quantise",
42
+ "fuse",
43
+ "flood",
44
+ "segment",
45
+ "cluster",
46
+ "geometry",
47
+ "parts",
48
+ "exports",
49
+ ];
@@ -23,6 +23,7 @@
23
23
  */
24
24
  import { LISTING_TYPE_CAPABILITIES } from "./capabilities";
25
25
  import { type AvailabilityRow, type UnavailableClause } from "./availability";
26
+ import type { IconKey } from "../../../ui/icons/icon-registry";
26
27
  import type { ListingType } from "../../../features/products/types/index";
27
28
  import type { SortOption } from "../../../features/products/constants/sieve";
28
29
  import { type AvailabilityFilter } from "../../../constants/field-names";
@@ -107,6 +108,16 @@ export interface ListingTypePlugin {
107
108
  * reachable only by typing the URL.
108
109
  */
109
110
  inGeneralCatalogue: boolean;
111
+ /**
112
+ * Leading glyph for this type's chip, tab and dropdown row.
113
+ *
114
+ * 🛑 REQUIRED, like `inGeneralCatalogue` and for the same reason: a tenth
115
+ * listing type must not compile until someone has answered what it looks
116
+ * like. An optional field would be silently omitted and that type would be
117
+ * the one unlabelled row in every picker — the gap being invisible is
118
+ * exactly the failure the required fields on this interface exist to stop.
119
+ */
120
+ iconKey: IconKey;
110
121
  /**
111
122
  * Which "Show X" default this type's browse surfaces apply. Since 2026-08-24
112
123
  * this drives the LABEL of the availability tab bar's middle tab
@@ -18,6 +18,7 @@ export declare const config: {
18
18
  chipLabel: string;
19
19
  browseRoute: string;
20
20
  inGeneralCatalogue: boolean;
21
+ iconKey: "art";
21
22
  hideDefault: "sold";
22
23
  isAvailable: typeof alwaysAvailable;
23
24
  unavailableClauses: readonly import("../availability").UnavailableClause[];
@@ -22,6 +22,7 @@ export const config = {
22
22
  browseRoute: String(ROUTES.PUBLIC.ART),
23
23
  // /art ("Art & Stickers") is in MAIN_NAV_ITEMS and spans art + stickers.
24
24
  inGeneralCatalogue: false,
25
+ iconKey: "art",
25
26
  hideDefault: "sold",
26
27
  // Runs out rather than ending — no time dimension, so the shared
27
28
  // stock-only rules are the whole story for this type.
@@ -18,6 +18,7 @@ export declare const config: {
18
18
  chipLabel: string;
19
19
  browseRoute: string;
20
20
  inGeneralCatalogue: boolean;
21
+ iconKey: "bid";
21
22
  hideDefault: "ended";
22
23
  isAvailable: (row: AvailabilityRow, now: Date) => boolean;
23
24
  unavailableClauses: ({
@@ -22,6 +22,7 @@ export const config = {
22
22
  // /auctions is in MAIN_NAV_ITEMS. An auction card in the general grid renders
23
23
  // Buy-Now chrome rather than bid affordances, so it belongs on its own page.
24
24
  inGeneralCatalogue: false,
25
+ iconKey: "bid",
25
26
  // An auction is never "sold out" — it ends. Hiding by stock would hide
26
27
  // every live auction, since auctions don't carry meaningful stock.
27
28
  hideDefault: "ended",
@@ -18,6 +18,7 @@ export declare const config: {
18
18
  chipLabel: string;
19
19
  browseRoute: string;
20
20
  inGeneralCatalogue: boolean;
21
+ iconKey: "deals";
21
22
  hideDefault: "sold";
22
23
  isAvailable: typeof alwaysAvailable;
23
24
  unavailableClauses: readonly import("../availability").UnavailableClause[];
@@ -21,6 +21,7 @@ export const config = {
21
21
  // Has a dedicated page but NO MAIN_NAV_ITEMS entry, so /products is its only
22
22
  // discovery path. Dropping it here would orphan the type (Root Cause #61).
23
23
  inGeneralCatalogue: true,
24
+ iconKey: "deals",
24
25
  hideDefault: "sold",
25
26
  // Runs out rather than ending — no time dimension, so the shared
26
27
  // stock-only rules are the whole story for this type.
@@ -18,6 +18,7 @@ export declare const config: {
18
18
  chipLabel: string;
19
19
  browseRoute: string;
20
20
  inGeneralCatalogue: boolean;
21
+ iconKey: "digitalCode";
21
22
  hideDefault: "sold";
22
23
  isAvailable: (row: AvailabilityRow) => boolean;
23
24
  unavailableClauses: ({
@@ -34,6 +34,7 @@ export const config = {
34
34
  // Has a dedicated page but NO MAIN_NAV_ITEMS entry, so /products is its only
35
35
  // discovery path. Dropping it here would orphan the type (Root Cause #61).
36
36
  inGeneralCatalogue: true,
37
+ iconKey: "digitalCode",
37
38
  // "Sold out" for a code pool means codesAvailable hit 0. That was ASSUMED to
38
39
  // be mirrored by stockQuantity, and it isn't — seed and production rows exist
39
40
  // with a drained pool and non-zero stock. The pool count is authoritative.
@@ -34,6 +34,13 @@ interface FeatureFlagSnapshot {
34
34
  export declare function isListingTypeEnabled(type: ListingType, settings: FeatureFlagSnapshot | null | undefined): boolean;
35
35
  export declare function isCategoryTypeEnabled(type: CategoryType, settings: FeatureFlagSnapshot | null | undefined): boolean;
36
36
  export declare const ALL_LISTING_TYPES: ListingType[];
37
+ /**
38
+ * Narrow an untrusted string — a `?listingType=` param, a form value — to a
39
+ * real member of the union. Backed by the same `Record<ListingType, true>` as
40
+ * `ALL_LISTING_TYPES`, so it cannot fall behind the union the way a
41
+ * hand-written list would (Root Cause #61).
42
+ */
43
+ export declare function isListingType(value: unknown): value is ListingType;
37
44
  /** Pull the full list of enabled listing types in canonical iteration order. */
38
45
  export declare function enabledListingTypes(settings: FeatureFlagSnapshot | null | undefined): ListingType[];
39
46
  export declare function enabledCategoryTypes(settings: FeatureFlagSnapshot | null | undefined): CategoryType[];
@@ -54,6 +54,15 @@ const ALL_LISTING_TYPES_MAP = {
54
54
  stickers: true,
55
55
  };
56
56
  export const ALL_LISTING_TYPES = Object.keys(ALL_LISTING_TYPES_MAP);
57
+ /**
58
+ * Narrow an untrusted string — a `?listingType=` param, a form value — to a
59
+ * real member of the union. Backed by the same `Record<ListingType, true>` as
60
+ * `ALL_LISTING_TYPES`, so it cannot fall behind the union the way a
61
+ * hand-written list would (Root Cause #61).
62
+ */
63
+ export function isListingType(value) {
64
+ return typeof value === "string" && value in ALL_LISTING_TYPES_MAP;
65
+ }
57
66
  /** Pull the full list of enabled listing types in canonical iteration order. */
58
67
  export function enabledListingTypes(settings) {
59
68
  return ALL_LISTING_TYPES.filter((t) => isListingTypeEnabled(t, settings));
@@ -18,6 +18,7 @@ export declare const config: {
18
18
  chipLabel: string;
19
19
  browseRoute: string;
20
20
  inGeneralCatalogue: boolean;
21
+ iconKey: "live";
21
22
  hideDefault: "sold";
22
23
  isAvailable: typeof alwaysAvailable;
23
24
  unavailableClauses: readonly import("../availability").UnavailableClause[];
@@ -21,6 +21,7 @@ export const config = {
21
21
  // Has a dedicated page but NO MAIN_NAV_ITEMS entry, so /products is its only
22
22
  // discovery path. Dropping it here would orphan the type (Root Cause #61).
23
23
  inGeneralCatalogue: true,
24
+ iconKey: "live",
24
25
  hideDefault: "sold",
25
26
  // Runs out rather than ending — no time dimension, so the shared
26
27
  // stock-only rules are the whole story for this type.
@@ -18,6 +18,7 @@ export declare const config: {
18
18
  chipLabel: string;
19
19
  browseRoute: string;
20
20
  inGeneralCatalogue: boolean;
21
+ iconKey: "preOrder";
21
22
  hideDefault: "closed";
22
23
  isAvailable: (row: AvailabilityRow) => boolean;
23
24
  unavailableClauses: readonly import("../availability").UnavailableClause[];
@@ -21,6 +21,7 @@ export const config = {
21
21
  browseRoute: String(ROUTES.PUBLIC.PRE_ORDERS),
22
22
  // /pre-orders is in MAIN_NAV_ITEMS.
23
23
  inGeneralCatalogue: false,
24
+ iconKey: "preOrder",
24
25
  hideDefault: "closed",
25
26
  // A pre-order closes when its allocation fills, NOT when its delivery date
26
27
  // passes — a shipped-soon pre-order is still orderable. `preOrderClosed`
@@ -18,6 +18,7 @@ export declare const config: {
18
18
  chipLabel: string;
19
19
  browseRoute: string;
20
20
  inGeneralCatalogue: boolean;
21
+ iconKey: "prizeDraw";
21
22
  hideDefault: "closed";
22
23
  isAvailable: (row: AvailabilityRow) => boolean;
23
24
  unavailableClauses: ({
@@ -21,6 +21,7 @@ export const config = {
21
21
  // /prize-draws is in MAIN_NAV_ITEMS. Entry-based pricing reads wrong beside
22
22
  // ordinary unit prices in the general grid.
23
23
  inGeneralCatalogue: false,
24
+ iconKey: "prizeDraw",
24
25
  hideDefault: "closed",
25
26
  // `prizeRevealStatus`, NOT remaining entries: a draw can close with slots
26
27
  // unsold (the seller ends it early, or the reveal window lapses), and it can
@@ -18,6 +18,7 @@ export declare const config: {
18
18
  chipLabel: string;
19
19
  browseRoute: string;
20
20
  inGeneralCatalogue: boolean;
21
+ iconKey: "order";
21
22
  hideDefault: "sold";
22
23
  isAvailable: typeof alwaysAvailable;
23
24
  unavailableClauses: readonly import("../availability").UnavailableClause[];
@@ -19,6 +19,7 @@ export const config = {
19
19
  browseRoute: String(ROUTES.PUBLIC.PRODUCTS),
20
20
  // The general catalogue IS this type's page.
21
21
  inGeneralCatalogue: true,
22
+ iconKey: "order",
22
23
  hideDefault: "sold",
23
24
  // Runs out rather than ending — no time dimension, so the shared
24
25
  // stock-only rules are the whole story for this type.
@@ -18,6 +18,7 @@ export declare const config: {
18
18
  chipLabel: string;
19
19
  browseRoute: string;
20
20
  inGeneralCatalogue: boolean;
21
+ iconKey: "stickers";
21
22
  hideDefault: "sold";
22
23
  isAvailable: typeof alwaysAvailable;
23
24
  unavailableClauses: readonly import("../availability").UnavailableClause[];
@@ -22,6 +22,7 @@ export const config = {
22
22
  browseRoute: String(ROUTES.PUBLIC.ART),
23
23
  // /art ("Art & Stickers") is in MAIN_NAV_ITEMS and spans art + stickers.
24
24
  inGeneralCatalogue: false,
25
+ iconKey: "stickers",
25
26
  hideDefault: "sold",
26
27
  // Runs out rather than ending — no time dimension, so the shared
27
28
  // stock-only rules are the whole story for this type.
@@ -13,8 +13,18 @@ export declare const MAX_IMAGE_BYTES: number;
13
13
  export declare const MAX_PDF_BYTES: number;
14
14
  export declare const MAX_VIDEO_BYTES: number;
15
15
  export type MediaKind = "image" | "video" | "pdf";
16
- /** Gallery images per listing. */
17
- export declare const PRODUCT_MAX_IMAGES = 10;
16
+ /**
17
+ * Gallery images per listing.
18
+ *
19
+ * 24, raised from 10 on 2026-10-19 against measured competitor data
20
+ * (docs/research/competitor-crawl-2026-10/images.md): sampled maxima are
21
+ * raikagesbeybladestore 21, hobsoncollectibles 20, toycollectorsindia 31.
22
+ * 24 covers a pre-owned lot with headroom; 31 is a single outlier and sizing
23
+ * for it would be sizing for one listing.
24
+ *
25
+ * The market MEDIAN is 1-4, so this is a ceiling, not a target.
26
+ */
27
+ export declare const PRODUCT_MAX_IMAGES = 24;
18
28
  /** Videos per listing. Bounded by `ProductDocument.video` being singular. */
19
29
  export declare const PRODUCT_MAX_VIDEOS = 1;
20
30
  /**
@@ -27,8 +27,18 @@ export const MAX_VIDEO_BYTES = 50 * MEGABYTE;
27
27
  // The video cap is 1 because `ProductDocument.video` is a single field, not an
28
28
  // array — raising it is a schema change, not a constant change.
29
29
  // ---------------------------------------------------------------------------
30
- /** Gallery images per listing. */
31
- export const PRODUCT_MAX_IMAGES = 10;
30
+ /**
31
+ * Gallery images per listing.
32
+ *
33
+ * 24, raised from 10 on 2026-10-19 against measured competitor data
34
+ * (docs/research/competitor-crawl-2026-10/images.md): sampled maxima are
35
+ * raikagesbeybladestore 21, hobsoncollectibles 20, toycollectorsindia 31.
36
+ * 24 covers a pre-owned lot with headroom; 31 is a single outlier and sizing
37
+ * for it would be sizing for one listing.
38
+ *
39
+ * The market MEDIAN is 1-4, so this is a ceiling, not a target.
40
+ */
41
+ export const PRODUCT_MAX_IMAGES = 24;
32
42
  /** Videos per listing. Bounded by `ProductDocument.video` being singular. */
33
43
  export const PRODUCT_MAX_VIDEOS = 1;
34
44
  /**
@@ -0,0 +1,35 @@
1
+ /** `search-index/v{n}.json` — the version IS the cache key. */
2
+ export declare const SEARCH_INDEX_PREFIX = "search-index";
3
+ /**
4
+ * The manifest mirror's object name.
5
+ *
6
+ * 🛑 A MIRROR of `searchIndex/manifest` in Firestore, never the source of
7
+ * truth. The build writes Firestore first and this second, because the
8
+ * Firestore document is what the next build reads to decide its mode — a
9
+ * mirror that disagrees costs a stale client for 60 seconds, whereas a
10
+ * manifest the builder cannot trust costs a full rebuild.
11
+ *
12
+ * It exists so the client bootstrap is two plain `fetch`es and no Firebase
13
+ * SDK: pulling in the client SDK to read one small document would cost more
14
+ * bytes than the index it is pointing at.
15
+ */
16
+ export declare const SEARCH_MANIFEST_OBJECT = "search-index/manifest.json";
17
+ export declare function searchIndexObjectPath(version: number): string;
18
+ /** Public download URL for any object in the app's Storage bucket. */
19
+ export declare function firebaseDownloadUrl(bucket: string, objectPath: string): string;
20
+ export declare function searchManifestUrl(bucket: string): string;
21
+ export declare function searchArtifactUrl(bucket: string, version: number): string;
22
+ /**
23
+ * What the client needs out of the manifest, and nothing more.
24
+ *
25
+ * Deliberately NOT the server's `SearchIndexManifest`: that one carries
26
+ * `dirty`, `lastFullAt` and `perType`, which are build bookkeeping. A client
27
+ * type that structurally accepts them would invite someone to render build
28
+ * state in the UI, and then the mirror could never drop a field.
29
+ */
30
+ export interface SearchIndexManifestPublic {
31
+ readonly schema: number;
32
+ readonly version: number;
33
+ readonly builtAt: string;
34
+ readonly recordCount: number;
35
+ }