@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
@@ -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);
@@ -5,8 +5,8 @@
5
5
  * Server-only — all repository instances use firebase-admin.
6
6
  */
7
7
  export { BaseRepository } from "../providers/db-firebase";
8
- export { unitOfWork } from "../core";
9
- export type { UnitOfWork } from "../core";
8
+ export { unitOfWork } from "../core/unit-of-work";
9
+ export type { UnitOfWork } from "../core/unit-of-work";
10
10
  export { UserRepository, userRepository, EmailVerificationTokenRepository, PasswordResetTokenRepository, emailVerificationTokenRepository, passwordResetTokenRepository, tokenRepository, SessionRepository, sessionRepository, } from "../features/auth/repository";
11
11
  export { SmsCounterRepository, smsCounterRepository, } from "../features/auth/repository/sms-counter.repository";
12
12
  export { AddressesRepository, addressesRepository, } from "../features/addresses";
@@ -7,7 +7,12 @@
7
7
  // Shared repository foundations
8
8
  export { BaseRepository } from "../providers/db-firebase/index.js";
9
9
  // Unit of Work - atomic multi-collection operations
10
- export { unitOfWork } from "../core/index.js";
10
+ /*
11
+ * Deep, not `../core`: that barrel pulls in every core module, several of which
12
+ * import repositories back out of this file. One barrel re-exporting another
13
+ * barrel is how component 2's cycle stayed closed.
14
+ */
15
+ export { unitOfWork } from "../core/unit-of-work.js";
11
16
  // Core repositories
12
17
  export { UserRepository, userRepository, EmailVerificationTokenRepository, PasswordResetTokenRepository, emailVerificationTokenRepository, passwordResetTokenRepository, tokenRepository, SessionRepository, sessionRepository, } from "../features/auth/repository/index.js";
13
18
  export { SmsCounterRepository, smsCounterRepository, } from "../features/auth/repository/sms-counter.repository.js";
@@ -502,15 +502,15 @@ export declare const SCHEMAS: {
502
502
  }, "strip", import("zod").ZodTypeAny, {
503
503
  title?: string | undefined;
504
504
  description?: string | undefined;
505
- textAlign?: "center" | "left" | "right" | undefined;
506
505
  textColor?: string | undefined;
506
+ textAlign?: "center" | "left" | "right" | undefined;
507
507
  subtitle?: string | undefined;
508
508
  eyebrow?: string | undefined;
509
509
  }, {
510
510
  title?: string | undefined;
511
511
  description?: string | undefined;
512
- textAlign?: "center" | "left" | "right" | undefined;
513
512
  textColor?: string | undefined;
513
+ textAlign?: "center" | "left" | "right" | undefined;
514
514
  subtitle?: string | undefined;
515
515
  eyebrow?: string | undefined;
516
516
  }>>;
@@ -569,8 +569,8 @@ export declare const SCHEMAS: {
569
569
  content?: {
570
570
  title?: string | undefined;
571
571
  description?: string | undefined;
572
- textAlign?: "center" | "left" | "right" | undefined;
573
572
  textColor?: string | undefined;
573
+ textAlign?: "center" | "left" | "right" | undefined;
574
574
  subtitle?: string | undefined;
575
575
  eyebrow?: string | undefined;
576
576
  } | undefined;
@@ -610,8 +610,8 @@ export declare const SCHEMAS: {
610
610
  content?: {
611
611
  title?: string | undefined;
612
612
  description?: string | undefined;
613
- textAlign?: "center" | "left" | "right" | undefined;
614
613
  textColor?: string | undefined;
614
+ textAlign?: "center" | "left" | "right" | undefined;
615
615
  subtitle?: string | undefined;
616
616
  eyebrow?: string | undefined;
617
617
  } | undefined;
@@ -749,8 +749,8 @@ export declare const SCHEMAS: {
749
749
  content?: {
750
750
  title?: string | undefined;
751
751
  description?: string | undefined;
752
- textAlign?: "center" | "left" | "right" | undefined;
753
752
  textColor?: string | undefined;
753
+ textAlign?: "center" | "left" | "right" | undefined;
754
754
  subtitle?: string | undefined;
755
755
  eyebrow?: string | undefined;
756
756
  } | undefined;
@@ -858,8 +858,8 @@ export declare const SCHEMAS: {
858
858
  content?: {
859
859
  title?: string | undefined;
860
860
  description?: string | undefined;
861
- textAlign?: "center" | "left" | "right" | undefined;
862
861
  textColor?: string | undefined;
862
+ textAlign?: "center" | "left" | "right" | undefined;
863
863
  subtitle?: string | undefined;
864
864
  eyebrow?: string | undefined;
865
865
  } | undefined;
@@ -2796,10 +2796,10 @@ export declare const SCHEMAS: {
2796
2796
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2797
2797
  }, import("zod").ZodTypeAny, "passthrough">;
2798
2798
  transactionId?: string | undefined;
2799
+ proofUrl?: string | undefined;
2799
2800
  paidAt?: string | Date | import("zod").objectOutputType<{
2800
2801
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2801
2802
  }, import("zod").ZodTypeAny, "passthrough"> | undefined;
2802
- proofUrl?: string | undefined;
2803
2803
  reminderSentAt?: string | Date | import("zod").objectOutputType<{
2804
2804
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2805
2805
  }, import("zod").ZodTypeAny, "passthrough"> | undefined;
@@ -2811,10 +2811,10 @@ export declare const SCHEMAS: {
2811
2811
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2812
2812
  }, import("zod").ZodTypeAny, "passthrough">;
2813
2813
  transactionId?: string | undefined;
2814
+ proofUrl?: string | undefined;
2814
2815
  paidAt?: string | Date | import("zod").objectInputType<{
2815
2816
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2816
2817
  }, import("zod").ZodTypeAny, "passthrough"> | undefined;
2817
- proofUrl?: string | undefined;
2818
2818
  reminderSentAt?: string | Date | import("zod").objectInputType<{
2819
2819
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
2820
2820
  }, import("zod").ZodTypeAny, "passthrough"> | undefined;
@@ -3056,10 +3056,10 @@ export declare const SCHEMAS: {
3056
3056
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
3057
3057
  }, import("zod").ZodTypeAny, "passthrough">;
3058
3058
  transactionId?: string | undefined;
3059
+ proofUrl?: string | undefined;
3059
3060
  paidAt?: string | Date | import("zod").objectOutputType<{
3060
3061
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
3061
3062
  }, import("zod").ZodTypeAny, "passthrough"> | undefined;
3062
- proofUrl?: string | undefined;
3063
3063
  reminderSentAt?: string | Date | import("zod").objectOutputType<{
3064
3064
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
3065
3065
  }, import("zod").ZodTypeAny, "passthrough"> | undefined;
@@ -3204,10 +3204,10 @@ export declare const SCHEMAS: {
3204
3204
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
3205
3205
  }, import("zod").ZodTypeAny, "passthrough">;
3206
3206
  transactionId?: string | undefined;
3207
+ proofUrl?: string | undefined;
3207
3208
  paidAt?: string | Date | import("zod").objectInputType<{
3208
3209
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
3209
3210
  }, import("zod").ZodTypeAny, "passthrough"> | undefined;
3210
- proofUrl?: string | undefined;
3211
3211
  reminderSentAt?: string | Date | import("zod").objectInputType<{
3212
3212
  toDate: import("zod").ZodFunction<import("zod").ZodTuple<[], import("zod").ZodUnknown>, import("zod").ZodDate>;
3213
3213
  }, import("zod").ZodTypeAny, "passthrough"> | undefined;
@@ -4616,14 +4616,7 @@ export declare const SCHEMAS: {
4616
4616
  internalNotes?: string | undefined;
4617
4617
  }>;
4618
4618
  };
4619
- readonly api: {
4620
- readonly "POST /api/wishlist": import("./types").ApiRouteSchema<import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny>;
4621
- readonly "POST /api/auth/session": import("./types").ApiRouteSchema<import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny>;
4622
- readonly "POST /api/admin/products/[id]/group": import("./types").ApiRouteSchema<import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny>;
4623
- readonly "POST /api/media/sign": import("./types").ApiRouteSchema<import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny>;
4624
- readonly "POST /api/media/finalize": import("./types").ApiRouteSchema<import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny>;
4625
- readonly "GET /api/search/suggestions": import("./types").ApiRouteSchema<import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny>;
4626
- };
4619
+ readonly api: {};
4627
4620
  readonly forms: {
4628
4621
  readonly product: import("zod").ZodObject<{
4629
4622
  title: import("zod").ZodOptional<import("zod").ZodString>;
@@ -6354,8 +6347,8 @@ export declare const SCHEMAS: {
6354
6347
  kind: import("zod").ZodOptional<import("zod").ZodString>;
6355
6348
  }, "strip", import("zod").ZodTypeAny, {
6356
6349
  refreshToken: string;
6357
- idToken: string;
6358
6350
  localId: string;
6351
+ idToken: string;
6359
6352
  expiresIn: string;
6360
6353
  email?: string | undefined;
6361
6354
  kind?: string | undefined;
@@ -6372,8 +6365,8 @@ export declare const SCHEMAS: {
6372
6365
  rawUserInfo?: string | undefined;
6373
6366
  }, {
6374
6367
  refreshToken: string;
6375
- idToken: string;
6376
6368
  localId: string;
6369
+ idToken: string;
6377
6370
  expiresIn: string;
6378
6371
  email?: string | undefined;
6379
6372
  kind?: string | undefined;
@@ -75,20 +75,37 @@ const firestore = {
75
75
  // those are touched in W5/W7.
76
76
  };
77
77
  // ---------------------------------------------------------------------------
78
- // API route schemas — W4 seed cohort. Each entry maps an HTTP-verb-and-path
79
- // key to its `{ body?, query?, params?, response? }` schema bundle. The
80
- // `createRouteHandler` helper accepts either a direct Zod schema or one of
81
- // these keys.
82
- // ---------------------------------------------------------------------------
83
- import { postApiWishlist, postApiAuthSession, postApiAdminProductsIdGroup, postApiMediaSign, postApiMediaFinalize, getApiSearchSuggestions, } from "./api-routes.js";
84
- const api = {
85
- "POST /api/wishlist": postApiWishlist,
86
- "POST /api/auth/session": postApiAuthSession,
87
- "POST /api/admin/products/[id]/group": postApiAdminProductsIdGroup,
88
- "POST /api/media/sign": postApiMediaSign,
89
- "POST /api/media/finalize": postApiMediaFinalize,
90
- "GET /api/search/suggestions": getApiSearchSuggestions,
91
- };
78
+ // API route schemas — see the `api` bucket below.
79
+ /*
80
+ * 🛑 EMPTY, deliberately, as of 2026-10-17 — and `audit-route-schema-registry`
81
+ * is retired with it.
82
+ *
83
+ * This bucket is an ADDRESSING convenience: it lets a route write
84
+ * `schema: "POST /api/wishlist"` instead of importing the schema. Measured
85
+ * before emptying it: 6 keys registered, **0 routes passing a key string**,
86
+ * and 170 route files passing a schema identifier directly. So nothing has
87
+ * ever read it by key.
88
+ *
89
+ * The audit that policed it reported "576 of 582 routes await registration",
90
+ * which reads as a migration backlog and is not one. Its own header said so:
91
+ * *"not a migration backlog winding down, it is a registry almost nothing
92
+ * uses"*. And the codebase had already chosen the other convention — when
93
+ * `postApiWishlist` was found declared here while `/api/wishlist` read its
94
+ * body raw, the fix was to re-export the schema for DIRECT use at the route,
95
+ * not to adopt the key form.
96
+ *
97
+ * The safety property — a handler that reads a body must validate it — is
98
+ * owned by `audit-unvalidated-request-body`, which is strict-zero and at 0.
99
+ * Widening THAT rule to see `export async function POST` (it had only matched
100
+ * `export const POST`) found two genuinely unvalidated bodies on the session
101
+ * endpoints. That is what 576 registry keys would not have found.
102
+ *
103
+ * The bucket stays declared because `audit-schema-registry-completeness`
104
+ * requires every bucket to exist, and because the registry's own doctrine is
105
+ * that an empty bucket is honest while a bucket of placeholders "reads as
106
+ * migrated to everyone who comes after".
107
+ */
108
+ const api = {};
92
109
  // ---------------------------------------------------------------------------
93
110
  // Form schemas — keyed by form id (matches FormShell/QuickFormDrawer `formId`).
94
111
  // `audit-form-schema` already enforces presence at FormShell sites; this
@@ -19,8 +19,8 @@ export declare const googleSignInWithIdpResponseSchema: z.ZodObject<{
19
19
  kind: z.ZodOptional<z.ZodString>;
20
20
  }, "strip", z.ZodTypeAny, {
21
21
  refreshToken: string;
22
- idToken: string;
23
22
  localId: string;
23
+ idToken: string;
24
24
  expiresIn: string;
25
25
  email?: string | undefined;
26
26
  kind?: string | undefined;
@@ -37,8 +37,8 @@ export declare const googleSignInWithIdpResponseSchema: z.ZodObject<{
37
37
  rawUserInfo?: string | undefined;
38
38
  }, {
39
39
  refreshToken: string;
40
- idToken: string;
41
40
  localId: string;
41
+ idToken: string;
42
42
  expiresIn: string;
43
43
  email?: string | undefined;
44
44
  kind?: string | undefined;
@@ -0,0 +1,117 @@
1
+ /**
2
+ * `Encrypted<T>` — the FORCING FUNCTION for ciphertext-by-default.
3
+ *
4
+ * ## The problem this exists to solve
5
+ *
6
+ * `audit-pii-coverage`'s R3 stages fourteen repositories whose `mapDoc`
7
+ * decrypts PII on EVERY read. The prescription — copy `SiteSettingsRepository`:
8
+ * leave `mapDoc` alone and expose plaintext through a NAMED getter with a
9
+ * masked variant — is right, and the migration had been staged for one reason:
10
+ *
11
+ * **`tsc` cannot find the call sites.**
12
+ *
13
+ * Measured 2026-10-17: 147 distinct files touch a staged repository. And
14
+ * `PayoutDocument.sellerEmail` is declared `string` whether the value in it is
15
+ * ciphertext or plaintext, so a call site that gets the wrong one COMPILES. It
16
+ * then either renders `enc:v1:…` to an admin or publishes a decrypted email.
17
+ * There is no compile error, no runtime error, and nothing to grep for.
18
+ *
19
+ * Compare the `perPage` → `pageSize` rename done the same day: renaming one
20
+ * interface member turned all 65 consumers into compile errors and `tsc`
21
+ * handed over the list. That is the difference between a safe sweep and a
22
+ * 147-file guess, and it is purely a property of the TYPE.
23
+ *
24
+ * ## How it works
25
+ *
26
+ * A branded string. `Encrypted<string>` is assignable FROM nothing but itself,
27
+ * so every reader that wants a plain `string` must go through one of the two
28
+ * named accessors below — and until it does, it is a compile error naming the
29
+ * exact file and line.
30
+ *
31
+ * ```ts
32
+ * // payout.sellerEmail → Encrypted<string> (what Firestore holds)
33
+ * // plaintext(payout.sellerEmail) → string (opt-in, named, auditable)
34
+ * // maskedEmail(payout.sellerEmail) → string (the UI default)
35
+ * ```
36
+ *
37
+ * The brand is erased at runtime: `Encrypted<string>` IS a string, so nothing
38
+ * changes about what is stored, sent or compared. It exists only to make the
39
+ * compiler ask the question at every site.
40
+ *
41
+ * ## 🛑 Branding a field is HALF a change, never a whole one
42
+ *
43
+ * The type must be made true in the same commit, by removing that
44
+ * repository's unconditional `mapDoc` decrypt. Branding a field whose value is
45
+ * still decrypted on read asserts something false, and the first `plaintext()`
46
+ * call would then double-decrypt — `decryptValue` passes a non-`enc:v1:`
47
+ * string through unchanged, so it would silently "work" and hide the lie.
48
+ *
49
+ * Convert ONE repository per change, smallest consumer count first. `tsc` then
50
+ * enumerates only that repository's readers, which is the whole point: a
51
+ * reviewable list per step instead of 147 at once.
52
+ */
53
+ declare const ENCRYPTED_BRAND: unique symbol;
54
+ /**
55
+ * A string that is CIPHERTEXT as it sits in Firestore.
56
+ *
57
+ * Erased at runtime — the VALUE is a string, so nothing changes about what is
58
+ * stored, sent or compared. The TYPE is not a string, and that is the point.
59
+ *
60
+ * ## 🛑 This was `T & { brand }`, and that version caught NO readers at all
61
+ *
62
+ * An intersection is a SUBTYPE of `string`, so `Encrypted<string>` was
63
+ * assignable to anything accepting a `string`. Measured directly: the write
64
+ * direction errored, while `maskName(cipher)`, `` `${cipher}` `` and
65
+ * `const s: string = cipher` all compiled in silence.
66
+ *
67
+ * So the fourteen-repository sweep enumerated every WRITE and not one READ —
68
+ * and this file's own docstring asserted the opposite, which is why the gap
69
+ * went unnoticed until `/reviews/[id]` was found rendering "Anonymous" for
70
+ * every reviewer (`findById` returned ciphertext, an `as Review` cast erased
71
+ * the brand, and `maskName` refuses ciphertext by design). Nine
72
+ * cross-repository writes were meanwhile double-encrypting PII, including the
73
+ * `upiId` two scheduled jobs send money to.
74
+ *
75
+ * A nominal shape is assignable to nothing that wants a `string`, so every
76
+ * reader becomes a compile error naming its file and line. That is the
77
+ * enumeration the intersection form could never produce.
78
+ *
79
+ * `__plain` is phantom — never read, never written, optional so no value has to
80
+ * carry it. It keeps `Encrypted<"a">` and `Encrypted<"b">` distinct rather than
81
+ * collapsing both to one opaque brand.
82
+ */
83
+ export type Encrypted<T extends string = string> = {
84
+ readonly [ENCRYPTED_BRAND]: "pii";
85
+ readonly __plain?: T;
86
+ };
87
+ /**
88
+ * A document type with its `Encrypted<string>` members as plain `string`.
89
+ *
90
+ * ONE definition of "the plaintext shape", so each feature's `<Doc>Plain`
91
+ * alias and `BaseRepository`'s write signature agree by construction. Thirteen
92
+ * hand-rolled copies of this mapped type is thirteen chances to get the
93
+ * `undefined` handling subtly different, and the difference only shows up as a
94
+ * cast somebody adds to make one call site compile (Root Cause #75).
95
+ *
96
+ * `Extract<T[K], undefined>` preserves optionality: a field declared
97
+ * `Encrypted<string> | undefined` stays `string | undefined`, rather than
98
+ * becoming required.
99
+ */
100
+ export type Plaintext<T> = {
101
+ [K in keyof T]: T[K] extends Encrypted<string> | null | undefined ? Extract<T[K], null | undefined> | string : Exclude<T[K], null | undefined> extends Date | ReadonlyArray<unknown> | ((...args: never[]) => unknown) ? T[K] : T[K] extends Date | ReadonlyArray<unknown> | ((...args: never[]) => unknown) ? T[K] : T[K] extends object | undefined ? Extract<T[K], undefined> | Plaintext<Exclude<T[K], undefined>> : T[K];
102
+ };
103
+ /**
104
+ * Mark a value as ciphertext. For a repository's own read path, where the value
105
+ * genuinely came out of Firestore encrypted.
106
+ *
107
+ * 🛑 Not for widening a plaintext value to satisfy a type. If a caller has
108
+ * plaintext and the field wants `Encrypted`, the value needs ENCRYPTING, not
109
+ * re-labelling — `encryptPii` is the function for that.
110
+ */
111
+ export declare const asEncrypted: <T extends string>(value: T) => Encrypted<T>;
112
+ /**
113
+ * Narrow a possibly-undefined ciphertext field. Saves every call site writing
114
+ * the same `value === undefined ? undefined : …` dance.
115
+ */
116
+ export declare const asEncryptedMaybe: <T extends string>(value: T | undefined | null) => Encrypted<T> | undefined;
117
+ export {};