@mohasinac/appkit 4.33.1 → 4.34.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 (88) hide show
  1. package/dist/_internal/server/features/checkout/actions.js +9 -1
  2. package/dist/_internal/server/features/checkout/expand-order-items.js +9 -0
  3. package/dist/_internal/server/features/media/contextGuards.d.ts +3 -3
  4. package/dist/_internal/server/features/media/contextGuards.js +19 -5
  5. package/dist/_internal/server/features/orders/actions.d.ts +9 -0
  6. package/dist/_internal/server/features/orders/actions.js +47 -4
  7. package/dist/_internal/server/features/orders/adapters.js +10 -0
  8. package/dist/_internal/server/features/refunds/actions.d.ts +9 -1
  9. package/dist/_internal/server/features/refunds/actions.js +36 -3
  10. package/dist/_internal/server/features/site-settings/adapters.js +1 -1
  11. package/dist/_internal/shared/features/orders/refund-copy.d.ts +12 -0
  12. package/dist/_internal/shared/features/orders/refund-copy.js +12 -0
  13. package/dist/_internal/shared/features/orders/return-reasons.d.ts +59 -0
  14. package/dist/_internal/shared/features/orders/return-reasons.js +96 -0
  15. package/dist/_internal/shared/features/orders/schema.d.ts +30 -0
  16. package/dist/_internal/shared/features/orders/schema.js +20 -0
  17. package/dist/_internal/shared/features/products/schema.d.ts +12 -0
  18. package/dist/_internal/shared/features/products/schema.js +4 -1
  19. package/dist/_internal/shared/media/limits.d.ts +14 -0
  20. package/dist/_internal/shared/media/limits.js +29 -0
  21. package/dist/client.d.ts +9 -1
  22. package/dist/client.js +19 -1
  23. package/dist/features/admin/components/AdminProductEditorView.js +6 -1
  24. package/dist/features/admin/components/AdminSiteSettingsView.js +2 -6
  25. package/dist/features/admin/components/index.d.ts +0 -2
  26. package/dist/features/admin/components/index.js +0 -1
  27. package/dist/features/admin/schemas/admin-editor-forms.js +1 -1
  28. package/dist/features/admin/schemas/firestore.d.ts +0 -2
  29. package/dist/features/auctions/components/AuctionDetailPageView.js +4 -3
  30. package/dist/features/contact/components/ContactForm.js +46 -31
  31. package/dist/features/media/upload/MediaUploadList.d.ts +16 -1
  32. package/dist/features/media/upload/MediaUploadList.js +58 -8
  33. package/dist/features/orders/components/RefundRequestView.d.ts +26 -10
  34. package/dist/features/orders/components/RefundRequestView.js +108 -24
  35. package/dist/features/orders/schemas/firestore.d.ts +42 -0
  36. package/dist/features/orders/types/index.d.ts +24 -0
  37. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +5 -3
  38. package/dist/features/products/components/ProductDetailPageView.js +14 -2
  39. package/dist/features/products/components/ProductFeatureBadges.d.ts +9 -1
  40. package/dist/features/products/components/ProductFeatureBadges.js +17 -1
  41. package/dist/features/products/components/ProductForm.js +46 -10
  42. package/dist/features/products/components/ProductGrid.js +10 -1
  43. package/dist/features/products/constants/final-sale.d.ts +40 -0
  44. package/dist/features/products/constants/final-sale.js +40 -0
  45. package/dist/features/products/index.d.ts +1 -0
  46. package/dist/features/products/index.js +1 -0
  47. package/dist/features/products/schemas/firestore.d.ts +19 -2
  48. package/dist/features/products/schemas/firestore.js +4 -0
  49. package/dist/features/products/types/index.d.ts +2 -0
  50. package/dist/features/seller/components/SellerProductShell.d.ts +7 -0
  51. package/dist/features/seller/components/SellerProductShell.js +82 -11
  52. package/dist/features/seller/index.d.ts +1 -0
  53. package/dist/features/seller/index.js +1 -0
  54. package/dist/features/seller/schemas/product-form.d.ts +304 -0
  55. package/dist/features/seller/schemas/product-form.js +132 -0
  56. package/dist/features/seller/utils/product-draft-mapping.d.ts +117 -0
  57. package/dist/features/seller/utils/product-draft-mapping.js +147 -0
  58. package/dist/features/shell/SectionForm.js +62 -7
  59. package/dist/features/shell/form-sections.js +4 -0
  60. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +182 -0
  61. package/dist/index.d.ts +6 -3
  62. package/dist/index.js +12 -3
  63. package/dist/next/routing/route-map.d.ts +2 -0
  64. package/dist/next/routing/route-map.js +1 -0
  65. package/dist/schemas/registry.d.ts +271 -0
  66. package/dist/schemas/registry.js +9 -0
  67. package/dist/seed/_helpers/final-sale-fixtures.d.ts +35 -0
  68. package/dist/seed/_helpers/final-sale-fixtures.js +61 -0
  69. package/dist/seed/products-art-seed-data.js +9 -1
  70. package/dist/seed/products-auctions-seed-data.js +2 -1
  71. package/dist/seed/products-classifieds-seed-data.js +2 -1
  72. package/dist/seed/products-digital-codes-seed-data.js +2 -1
  73. package/dist/seed/products-live-items-seed-data.js +2 -1
  74. package/dist/seed/products-preorders-seed-data.d.ts +2 -138
  75. package/dist/seed/products-preorders-seed-data.js +2 -1
  76. package/dist/seed/products-prize-draws-seed-data.js +2 -1
  77. package/dist/seed/products-standard-seed-data.js +2 -1
  78. package/dist/seed/products-stickers-seed-data.js +9 -1
  79. package/dist/server.d.ts +6 -2
  80. package/dist/server.js +15 -2
  81. package/dist/styles.css +1 -1
  82. package/dist/tailwind-utilities.css +1 -1
  83. package/dist/tokens/motion.d.ts +12 -0
  84. package/dist/tokens/motion.js +12 -0
  85. package/dist/ui/components/CollapsibleSection.d.ts +18 -1
  86. package/dist/ui/components/CollapsibleSection.js +20 -3
  87. package/dist/ui/components/Motion.js +17 -1
  88. package/package.json +1 -1
@@ -4119,6 +4119,277 @@ export declare const SCHEMAS: {
4119
4119
  readonly "GET /api/search/suggestions": import("./types").ApiRouteSchema<import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny, import("zod").ZodTypeAny>;
4120
4120
  };
4121
4121
  readonly forms: {
4122
+ readonly product: import("zod").ZodObject<{
4123
+ title: import("zod").ZodOptional<import("zod").ZodString>;
4124
+ slug: import("zod").ZodOptional<import("zod").ZodString>;
4125
+ description: import("zod").ZodOptional<import("zod").ZodString>;
4126
+ category: import("zod").ZodOptional<import("zod").ZodString>;
4127
+ brand: import("zod").ZodOptional<import("zod").ZodString>;
4128
+ condition: import("zod").ZodOptional<import("zod").ZodString>;
4129
+ tags: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
4130
+ mainImage: import("zod").ZodOptional<import("zod").ZodString>;
4131
+ images: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
4132
+ video: import("zod").ZodOptional<import("zod").ZodObject<{
4133
+ url: import("zod").ZodString;
4134
+ type: import("zod").ZodOptional<import("zod").ZodLiteral<"video">>;
4135
+ thumbnailUrl: import("zod").ZodOptional<import("zod").ZodString>;
4136
+ source: import("zod").ZodOptional<import("zod").ZodEnum<["upload", "youtube", "external"]>>;
4137
+ youtubeId: import("zod").ZodOptional<import("zod").ZodString>;
4138
+ duration: import("zod").ZodOptional<import("zod").ZodNumber>;
4139
+ }, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
4140
+ url: import("zod").ZodString;
4141
+ type: import("zod").ZodOptional<import("zod").ZodLiteral<"video">>;
4142
+ thumbnailUrl: import("zod").ZodOptional<import("zod").ZodString>;
4143
+ source: import("zod").ZodOptional<import("zod").ZodEnum<["upload", "youtube", "external"]>>;
4144
+ youtubeId: import("zod").ZodOptional<import("zod").ZodString>;
4145
+ duration: import("zod").ZodOptional<import("zod").ZodNumber>;
4146
+ }, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
4147
+ url: import("zod").ZodString;
4148
+ type: import("zod").ZodOptional<import("zod").ZodLiteral<"video">>;
4149
+ thumbnailUrl: import("zod").ZodOptional<import("zod").ZodString>;
4150
+ source: import("zod").ZodOptional<import("zod").ZodEnum<["upload", "youtube", "external"]>>;
4151
+ youtubeId: import("zod").ZodOptional<import("zod").ZodString>;
4152
+ duration: import("zod").ZodOptional<import("zod").ZodNumber>;
4153
+ }, import("zod").ZodTypeAny, "passthrough">>>;
4154
+ youtubeId: import("zod").ZodOptional<import("zod").ZodString>;
4155
+ externalVideoUrl: import("zod").ZodOptional<import("zod").ZodString>;
4156
+ price: import("zod").ZodOptional<import("zod").ZodNumber>;
4157
+ compareAtPrice: import("zod").ZodOptional<import("zod").ZodNumber>;
4158
+ stockQuantity: import("zod").ZodOptional<import("zod").ZodNumber>;
4159
+ featured: import("zod").ZodOptional<import("zod").ZodBoolean>;
4160
+ isPromoted: import("zod").ZodOptional<import("zod").ZodBoolean>;
4161
+ isNew: import("zod").ZodOptional<import("zod").ZodBoolean>;
4162
+ isOnSale: import("zod").ZodOptional<import("zod").ZodBoolean>;
4163
+ allowOffers: import("zod").ZodOptional<import("zod").ZodBoolean>;
4164
+ minOfferPercent: import("zod").ZodOptional<import("zod").ZodNumber>;
4165
+ shippingPaidBy: import("zod").ZodOptional<import("zod").ZodEnum<["buyer", "seller"]>>;
4166
+ pickupAddressId: import("zod").ZodOptional<import("zod").ZodString>;
4167
+ insurance: import("zod").ZodOptional<import("zod").ZodBoolean>;
4168
+ insuranceCost: import("zod").ZodOptional<import("zod").ZodNumber>;
4169
+ gstRate: import("zod").ZodOptional<import("zod").ZodUnion<[import("zod").ZodLiteral<0>, import("zod").ZodLiteral<5>, import("zod").ZodLiteral<12>, import("zod").ZodLiteral<18>, import("zod").ZodLiteral<28>]>>;
4170
+ hsnCode: import("zod").ZodOptional<import("zod").ZodString>;
4171
+ finalSale: import("zod").ZodOptional<import("zod").ZodBoolean>;
4172
+ returnPolicy: import("zod").ZodOptional<import("zod").ZodString>;
4173
+ status: import("zod").ZodOptional<import("zod").ZodEnum<["draft", "published"]>>;
4174
+ seoTitle: import("zod").ZodOptional<import("zod").ZodString>;
4175
+ seoDescription: import("zod").ZodOptional<import("zod").ZodString>;
4176
+ barcodeId: import("zod").ZodOptional<import("zod").ZodString>;
4177
+ startingBid: import("zod").ZodOptional<import("zod").ZodNumber>;
4178
+ reservePrice: import("zod").ZodOptional<import("zod").ZodNumber>;
4179
+ buyNowPrice: import("zod").ZodOptional<import("zod").ZodNumber>;
4180
+ minBidIncrement: import("zod").ZodOptional<import("zod").ZodNumber>;
4181
+ auctionEndDate: import("zod").ZodOptional<import("zod").ZodString>;
4182
+ auctionShippingPaidBy: import("zod").ZodOptional<import("zod").ZodEnum<["winner", "seller"]>>;
4183
+ autoExtendable: import("zod").ZodOptional<import("zod").ZodBoolean>;
4184
+ auctionExtensionMinutes: import("zod").ZodOptional<import("zod").ZodNumber>;
4185
+ preOrderDeliveryDate: import("zod").ZodOptional<import("zod").ZodString>;
4186
+ preOrderDepositPercent: import("zod").ZodOptional<import("zod").ZodNumber>;
4187
+ preOrderMaxQuantity: import("zod").ZodOptional<import("zod").ZodNumber>;
4188
+ preOrderProductionStatus: import("zod").ZodOptional<import("zod").ZodEnum<["upcoming", "in_production", "ready_to_ship"]>>;
4189
+ preOrderCancellable: import("zod").ZodOptional<import("zod").ZodBoolean>;
4190
+ classifiedCity: import("zod").ZodOptional<import("zod").ZodString>;
4191
+ classifiedLocality: import("zod").ZodOptional<import("zod").ZodString>;
4192
+ classifiedPincode: import("zod").ZodOptional<import("zod").ZodString>;
4193
+ classifiedContactMethod: import("zod").ZodOptional<import("zod").ZodEnum<["chat", "phone", "both"]>>;
4194
+ classifiedAcceptsShipping: import("zod").ZodOptional<import("zod").ZodBoolean>;
4195
+ classifiedNegotiable: import("zod").ZodOptional<import("zod").ZodBoolean>;
4196
+ digitalCodeDelivery: import("zod").ZodOptional<import("zod").ZodEnum<["auto-claim", "manual-email"]>>;
4197
+ digitalCodePoolSize: import("zod").ZodOptional<import("zod").ZodNumber>;
4198
+ digitalCodeRedemptionInstructions: import("zod").ZodOptional<import("zod").ZodString>;
4199
+ digitalCodeExpiresAt: import("zod").ZodOptional<import("zod").ZodString>;
4200
+ liveSpecies: import("zod").ZodOptional<import("zod").ZodString>;
4201
+ liveAgeMonths: import("zod").ZodOptional<import("zod").ZodNumber>;
4202
+ liveSex: import("zod").ZodOptional<import("zod").ZodEnum<["male", "female", "unknown", "n/a"]>>;
4203
+ liveCareInfo: import("zod").ZodOptional<import("zod").ZodString>;
4204
+ liveTransportMethod: import("zod").ZodOptional<import("zod").ZodEnum<["courier", "in-person", "specialist"]>>;
4205
+ liveHandlingFee: import("zod").ZodOptional<import("zod").ZodNumber>;
4206
+ liveJurisdictions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
4207
+ liveCites: import("zod").ZodOptional<import("zod").ZodBoolean>;
4208
+ printSize: import("zod").ZodOptional<import("zod").ZodString>;
4209
+ printMaterial: import("zod").ZodOptional<import("zod").ZodString>;
4210
+ printFinish: import("zod").ZodOptional<import("zod").ZodString>;
4211
+ printEditionSize: import("zod").ZodOptional<import("zod").ZodNumber>;
4212
+ }, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
4213
+ title: import("zod").ZodOptional<import("zod").ZodString>;
4214
+ slug: import("zod").ZodOptional<import("zod").ZodString>;
4215
+ description: import("zod").ZodOptional<import("zod").ZodString>;
4216
+ category: import("zod").ZodOptional<import("zod").ZodString>;
4217
+ brand: import("zod").ZodOptional<import("zod").ZodString>;
4218
+ condition: import("zod").ZodOptional<import("zod").ZodString>;
4219
+ tags: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
4220
+ mainImage: import("zod").ZodOptional<import("zod").ZodString>;
4221
+ images: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
4222
+ video: import("zod").ZodOptional<import("zod").ZodObject<{
4223
+ url: import("zod").ZodString;
4224
+ type: import("zod").ZodOptional<import("zod").ZodLiteral<"video">>;
4225
+ thumbnailUrl: import("zod").ZodOptional<import("zod").ZodString>;
4226
+ source: import("zod").ZodOptional<import("zod").ZodEnum<["upload", "youtube", "external"]>>;
4227
+ youtubeId: import("zod").ZodOptional<import("zod").ZodString>;
4228
+ duration: import("zod").ZodOptional<import("zod").ZodNumber>;
4229
+ }, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
4230
+ url: import("zod").ZodString;
4231
+ type: import("zod").ZodOptional<import("zod").ZodLiteral<"video">>;
4232
+ thumbnailUrl: import("zod").ZodOptional<import("zod").ZodString>;
4233
+ source: import("zod").ZodOptional<import("zod").ZodEnum<["upload", "youtube", "external"]>>;
4234
+ youtubeId: import("zod").ZodOptional<import("zod").ZodString>;
4235
+ duration: import("zod").ZodOptional<import("zod").ZodNumber>;
4236
+ }, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
4237
+ url: import("zod").ZodString;
4238
+ type: import("zod").ZodOptional<import("zod").ZodLiteral<"video">>;
4239
+ thumbnailUrl: import("zod").ZodOptional<import("zod").ZodString>;
4240
+ source: import("zod").ZodOptional<import("zod").ZodEnum<["upload", "youtube", "external"]>>;
4241
+ youtubeId: import("zod").ZodOptional<import("zod").ZodString>;
4242
+ duration: import("zod").ZodOptional<import("zod").ZodNumber>;
4243
+ }, import("zod").ZodTypeAny, "passthrough">>>;
4244
+ youtubeId: import("zod").ZodOptional<import("zod").ZodString>;
4245
+ externalVideoUrl: import("zod").ZodOptional<import("zod").ZodString>;
4246
+ price: import("zod").ZodOptional<import("zod").ZodNumber>;
4247
+ compareAtPrice: import("zod").ZodOptional<import("zod").ZodNumber>;
4248
+ stockQuantity: import("zod").ZodOptional<import("zod").ZodNumber>;
4249
+ featured: import("zod").ZodOptional<import("zod").ZodBoolean>;
4250
+ isPromoted: import("zod").ZodOptional<import("zod").ZodBoolean>;
4251
+ isNew: import("zod").ZodOptional<import("zod").ZodBoolean>;
4252
+ isOnSale: import("zod").ZodOptional<import("zod").ZodBoolean>;
4253
+ allowOffers: import("zod").ZodOptional<import("zod").ZodBoolean>;
4254
+ minOfferPercent: import("zod").ZodOptional<import("zod").ZodNumber>;
4255
+ shippingPaidBy: import("zod").ZodOptional<import("zod").ZodEnum<["buyer", "seller"]>>;
4256
+ pickupAddressId: import("zod").ZodOptional<import("zod").ZodString>;
4257
+ insurance: import("zod").ZodOptional<import("zod").ZodBoolean>;
4258
+ insuranceCost: import("zod").ZodOptional<import("zod").ZodNumber>;
4259
+ gstRate: import("zod").ZodOptional<import("zod").ZodUnion<[import("zod").ZodLiteral<0>, import("zod").ZodLiteral<5>, import("zod").ZodLiteral<12>, import("zod").ZodLiteral<18>, import("zod").ZodLiteral<28>]>>;
4260
+ hsnCode: import("zod").ZodOptional<import("zod").ZodString>;
4261
+ finalSale: import("zod").ZodOptional<import("zod").ZodBoolean>;
4262
+ returnPolicy: import("zod").ZodOptional<import("zod").ZodString>;
4263
+ status: import("zod").ZodOptional<import("zod").ZodEnum<["draft", "published"]>>;
4264
+ seoTitle: import("zod").ZodOptional<import("zod").ZodString>;
4265
+ seoDescription: import("zod").ZodOptional<import("zod").ZodString>;
4266
+ barcodeId: import("zod").ZodOptional<import("zod").ZodString>;
4267
+ startingBid: import("zod").ZodOptional<import("zod").ZodNumber>;
4268
+ reservePrice: import("zod").ZodOptional<import("zod").ZodNumber>;
4269
+ buyNowPrice: import("zod").ZodOptional<import("zod").ZodNumber>;
4270
+ minBidIncrement: import("zod").ZodOptional<import("zod").ZodNumber>;
4271
+ auctionEndDate: import("zod").ZodOptional<import("zod").ZodString>;
4272
+ auctionShippingPaidBy: import("zod").ZodOptional<import("zod").ZodEnum<["winner", "seller"]>>;
4273
+ autoExtendable: import("zod").ZodOptional<import("zod").ZodBoolean>;
4274
+ auctionExtensionMinutes: import("zod").ZodOptional<import("zod").ZodNumber>;
4275
+ preOrderDeliveryDate: import("zod").ZodOptional<import("zod").ZodString>;
4276
+ preOrderDepositPercent: import("zod").ZodOptional<import("zod").ZodNumber>;
4277
+ preOrderMaxQuantity: import("zod").ZodOptional<import("zod").ZodNumber>;
4278
+ preOrderProductionStatus: import("zod").ZodOptional<import("zod").ZodEnum<["upcoming", "in_production", "ready_to_ship"]>>;
4279
+ preOrderCancellable: import("zod").ZodOptional<import("zod").ZodBoolean>;
4280
+ classifiedCity: import("zod").ZodOptional<import("zod").ZodString>;
4281
+ classifiedLocality: import("zod").ZodOptional<import("zod").ZodString>;
4282
+ classifiedPincode: import("zod").ZodOptional<import("zod").ZodString>;
4283
+ classifiedContactMethod: import("zod").ZodOptional<import("zod").ZodEnum<["chat", "phone", "both"]>>;
4284
+ classifiedAcceptsShipping: import("zod").ZodOptional<import("zod").ZodBoolean>;
4285
+ classifiedNegotiable: import("zod").ZodOptional<import("zod").ZodBoolean>;
4286
+ digitalCodeDelivery: import("zod").ZodOptional<import("zod").ZodEnum<["auto-claim", "manual-email"]>>;
4287
+ digitalCodePoolSize: import("zod").ZodOptional<import("zod").ZodNumber>;
4288
+ digitalCodeRedemptionInstructions: import("zod").ZodOptional<import("zod").ZodString>;
4289
+ digitalCodeExpiresAt: import("zod").ZodOptional<import("zod").ZodString>;
4290
+ liveSpecies: import("zod").ZodOptional<import("zod").ZodString>;
4291
+ liveAgeMonths: import("zod").ZodOptional<import("zod").ZodNumber>;
4292
+ liveSex: import("zod").ZodOptional<import("zod").ZodEnum<["male", "female", "unknown", "n/a"]>>;
4293
+ liveCareInfo: import("zod").ZodOptional<import("zod").ZodString>;
4294
+ liveTransportMethod: import("zod").ZodOptional<import("zod").ZodEnum<["courier", "in-person", "specialist"]>>;
4295
+ liveHandlingFee: import("zod").ZodOptional<import("zod").ZodNumber>;
4296
+ liveJurisdictions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
4297
+ liveCites: import("zod").ZodOptional<import("zod").ZodBoolean>;
4298
+ printSize: import("zod").ZodOptional<import("zod").ZodString>;
4299
+ printMaterial: import("zod").ZodOptional<import("zod").ZodString>;
4300
+ printFinish: import("zod").ZodOptional<import("zod").ZodString>;
4301
+ printEditionSize: import("zod").ZodOptional<import("zod").ZodNumber>;
4302
+ }, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
4303
+ title: import("zod").ZodOptional<import("zod").ZodString>;
4304
+ slug: import("zod").ZodOptional<import("zod").ZodString>;
4305
+ description: import("zod").ZodOptional<import("zod").ZodString>;
4306
+ category: import("zod").ZodOptional<import("zod").ZodString>;
4307
+ brand: import("zod").ZodOptional<import("zod").ZodString>;
4308
+ condition: import("zod").ZodOptional<import("zod").ZodString>;
4309
+ tags: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
4310
+ mainImage: import("zod").ZodOptional<import("zod").ZodString>;
4311
+ images: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
4312
+ video: import("zod").ZodOptional<import("zod").ZodObject<{
4313
+ url: import("zod").ZodString;
4314
+ type: import("zod").ZodOptional<import("zod").ZodLiteral<"video">>;
4315
+ thumbnailUrl: import("zod").ZodOptional<import("zod").ZodString>;
4316
+ source: import("zod").ZodOptional<import("zod").ZodEnum<["upload", "youtube", "external"]>>;
4317
+ youtubeId: import("zod").ZodOptional<import("zod").ZodString>;
4318
+ duration: import("zod").ZodOptional<import("zod").ZodNumber>;
4319
+ }, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
4320
+ url: import("zod").ZodString;
4321
+ type: import("zod").ZodOptional<import("zod").ZodLiteral<"video">>;
4322
+ thumbnailUrl: import("zod").ZodOptional<import("zod").ZodString>;
4323
+ source: import("zod").ZodOptional<import("zod").ZodEnum<["upload", "youtube", "external"]>>;
4324
+ youtubeId: import("zod").ZodOptional<import("zod").ZodString>;
4325
+ duration: import("zod").ZodOptional<import("zod").ZodNumber>;
4326
+ }, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
4327
+ url: import("zod").ZodString;
4328
+ type: import("zod").ZodOptional<import("zod").ZodLiteral<"video">>;
4329
+ thumbnailUrl: import("zod").ZodOptional<import("zod").ZodString>;
4330
+ source: import("zod").ZodOptional<import("zod").ZodEnum<["upload", "youtube", "external"]>>;
4331
+ youtubeId: import("zod").ZodOptional<import("zod").ZodString>;
4332
+ duration: import("zod").ZodOptional<import("zod").ZodNumber>;
4333
+ }, import("zod").ZodTypeAny, "passthrough">>>;
4334
+ youtubeId: import("zod").ZodOptional<import("zod").ZodString>;
4335
+ externalVideoUrl: import("zod").ZodOptional<import("zod").ZodString>;
4336
+ price: import("zod").ZodOptional<import("zod").ZodNumber>;
4337
+ compareAtPrice: import("zod").ZodOptional<import("zod").ZodNumber>;
4338
+ stockQuantity: import("zod").ZodOptional<import("zod").ZodNumber>;
4339
+ featured: import("zod").ZodOptional<import("zod").ZodBoolean>;
4340
+ isPromoted: import("zod").ZodOptional<import("zod").ZodBoolean>;
4341
+ isNew: import("zod").ZodOptional<import("zod").ZodBoolean>;
4342
+ isOnSale: import("zod").ZodOptional<import("zod").ZodBoolean>;
4343
+ allowOffers: import("zod").ZodOptional<import("zod").ZodBoolean>;
4344
+ minOfferPercent: import("zod").ZodOptional<import("zod").ZodNumber>;
4345
+ shippingPaidBy: import("zod").ZodOptional<import("zod").ZodEnum<["buyer", "seller"]>>;
4346
+ pickupAddressId: import("zod").ZodOptional<import("zod").ZodString>;
4347
+ insurance: import("zod").ZodOptional<import("zod").ZodBoolean>;
4348
+ insuranceCost: import("zod").ZodOptional<import("zod").ZodNumber>;
4349
+ gstRate: import("zod").ZodOptional<import("zod").ZodUnion<[import("zod").ZodLiteral<0>, import("zod").ZodLiteral<5>, import("zod").ZodLiteral<12>, import("zod").ZodLiteral<18>, import("zod").ZodLiteral<28>]>>;
4350
+ hsnCode: import("zod").ZodOptional<import("zod").ZodString>;
4351
+ finalSale: import("zod").ZodOptional<import("zod").ZodBoolean>;
4352
+ returnPolicy: import("zod").ZodOptional<import("zod").ZodString>;
4353
+ status: import("zod").ZodOptional<import("zod").ZodEnum<["draft", "published"]>>;
4354
+ seoTitle: import("zod").ZodOptional<import("zod").ZodString>;
4355
+ seoDescription: import("zod").ZodOptional<import("zod").ZodString>;
4356
+ barcodeId: import("zod").ZodOptional<import("zod").ZodString>;
4357
+ startingBid: import("zod").ZodOptional<import("zod").ZodNumber>;
4358
+ reservePrice: import("zod").ZodOptional<import("zod").ZodNumber>;
4359
+ buyNowPrice: import("zod").ZodOptional<import("zod").ZodNumber>;
4360
+ minBidIncrement: import("zod").ZodOptional<import("zod").ZodNumber>;
4361
+ auctionEndDate: import("zod").ZodOptional<import("zod").ZodString>;
4362
+ auctionShippingPaidBy: import("zod").ZodOptional<import("zod").ZodEnum<["winner", "seller"]>>;
4363
+ autoExtendable: import("zod").ZodOptional<import("zod").ZodBoolean>;
4364
+ auctionExtensionMinutes: import("zod").ZodOptional<import("zod").ZodNumber>;
4365
+ preOrderDeliveryDate: import("zod").ZodOptional<import("zod").ZodString>;
4366
+ preOrderDepositPercent: import("zod").ZodOptional<import("zod").ZodNumber>;
4367
+ preOrderMaxQuantity: import("zod").ZodOptional<import("zod").ZodNumber>;
4368
+ preOrderProductionStatus: import("zod").ZodOptional<import("zod").ZodEnum<["upcoming", "in_production", "ready_to_ship"]>>;
4369
+ preOrderCancellable: import("zod").ZodOptional<import("zod").ZodBoolean>;
4370
+ classifiedCity: import("zod").ZodOptional<import("zod").ZodString>;
4371
+ classifiedLocality: import("zod").ZodOptional<import("zod").ZodString>;
4372
+ classifiedPincode: import("zod").ZodOptional<import("zod").ZodString>;
4373
+ classifiedContactMethod: import("zod").ZodOptional<import("zod").ZodEnum<["chat", "phone", "both"]>>;
4374
+ classifiedAcceptsShipping: import("zod").ZodOptional<import("zod").ZodBoolean>;
4375
+ classifiedNegotiable: import("zod").ZodOptional<import("zod").ZodBoolean>;
4376
+ digitalCodeDelivery: import("zod").ZodOptional<import("zod").ZodEnum<["auto-claim", "manual-email"]>>;
4377
+ digitalCodePoolSize: import("zod").ZodOptional<import("zod").ZodNumber>;
4378
+ digitalCodeRedemptionInstructions: import("zod").ZodOptional<import("zod").ZodString>;
4379
+ digitalCodeExpiresAt: import("zod").ZodOptional<import("zod").ZodString>;
4380
+ liveSpecies: import("zod").ZodOptional<import("zod").ZodString>;
4381
+ liveAgeMonths: import("zod").ZodOptional<import("zod").ZodNumber>;
4382
+ liveSex: import("zod").ZodOptional<import("zod").ZodEnum<["male", "female", "unknown", "n/a"]>>;
4383
+ liveCareInfo: import("zod").ZodOptional<import("zod").ZodString>;
4384
+ liveTransportMethod: import("zod").ZodOptional<import("zod").ZodEnum<["courier", "in-person", "specialist"]>>;
4385
+ liveHandlingFee: import("zod").ZodOptional<import("zod").ZodNumber>;
4386
+ liveJurisdictions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
4387
+ liveCites: import("zod").ZodOptional<import("zod").ZodBoolean>;
4388
+ printSize: import("zod").ZodOptional<import("zod").ZodString>;
4389
+ printMaterial: import("zod").ZodOptional<import("zod").ZodString>;
4390
+ printFinish: import("zod").ZodOptional<import("zod").ZodString>;
4391
+ printEditionSize: import("zod").ZodOptional<import("zod").ZodNumber>;
4392
+ }, import("zod").ZodTypeAny, "passthrough">>;
4122
4393
  readonly blog: import("zod").ZodObject<{
4123
4394
  title: import("zod").ZodString;
4124
4395
  slug: import("zod").ZodString;
@@ -115,6 +115,7 @@ import { payoutMethodFormSchema } from "../features/store-extensions/schemas/pay
115
115
  import { shippingConfigFormSchema } from "../features/store-extensions/schemas/shipping-config-form";
116
116
  import { groupedListingFormSchema } from "../features/grouped/schemas/grouped-listing-form";
117
117
  import { sellerCouponFormSchema } from "../features/seller/schemas/coupon-form";
118
+ import { productDraftSchema } from "../features/seller/schemas/product-form";
118
119
  import { customRoleFormSchema } from "../features/store-extensions/schemas/custom-role-form";
119
120
  import { moderationReviewFormSchema } from "../features/store-extensions/schemas/moderation-review-form";
120
121
  import { reportReviewFormSchema } from "../features/store-extensions/schemas/report-review-form";
@@ -134,6 +135,14 @@ import { storeGoogleConfigUpdateSchema } from "../features/store-extensions/sche
134
135
  import { adminNotificationCreateSchema } from "../features/store-extensions/schemas/admin-notification-form";
135
136
  import { homepageSectionCreateSchema } from "../features/homepage/schemas/index";
136
137
  const forms = {
138
+ /*
139
+ * `product` was ABSENT from this map until 2026-09-04, and that absence is
140
+ * why the flat-vs-nested field loss in the seller listing form went
141
+ * unnoticed for as long as it did: `roundtrip-diff` reads this map, and an
142
+ * entity it cannot see is an entity it cannot protect — exactly as the
143
+ * comment above warns.
144
+ */
145
+ product: productDraftSchema,
137
146
  blog: blogDraftSchema,
138
147
  event: eventDraftSchema,
139
148
  productFeature: productFeatureFormSchema,
@@ -0,0 +1,35 @@
1
+ import type { ProductDocument } from "../../features/products/schemas";
2
+ /**
3
+ * Seeded listings that explicitly ACCEPT change-of-mind returns.
4
+ *
5
+ * `finalSale` is absent on every other fixture, and absent means final sale —
6
+ * so the default path is exercised by the bulk of the catalogue exactly as it
7
+ * will be in production, where the field did not exist until now and no
8
+ * pre-existing document carries it.
9
+ *
10
+ * One per listing type, deliberately. The "Final Sale" badge and the refund
11
+ * gate both branch on this, and a badge that renders identically on every row
12
+ * proves nothing: without at least one opted-out fixture per type there is no
13
+ * way to tell "the predicate works" from "the predicate returns a constant".
14
+ * That is the same reason the availability work seeded one unavailable row per
15
+ * type rather than trusting the shared checks.
16
+ *
17
+ * Ids are listed rather than a `finalSale: false` written inline at each
18
+ * record because the records live in nine files with five different export
19
+ * wrappers, and a per-record edit is invisible to review — this set can be
20
+ * read in one glance and cross-checked against the badge.
21
+ */
22
+ export declare const RETURNABLE_FIXTURE_IDS: ReadonlySet<string>;
23
+ /**
24
+ * Set `finalSale: false` on the opted-out fixtures and leave it ABSENT on
25
+ * every other record.
26
+ *
27
+ * Absent rather than `finalSale: true`, on purpose: writing the default
28
+ * explicitly would mean the seed never produces the shape that production data
29
+ * actually has, so `isFinalSale`'s handling of `undefined` — the only part of
30
+ * it that can be got wrong — would go untested by the entire fixture set.
31
+ *
32
+ * Pure and deterministic, so it does not reintroduce the `appkit-seed`
33
+ * idempotency problem of Root Cause #25.
34
+ */
35
+ export declare function withFinalSale(p: Partial<ProductDocument>): Partial<ProductDocument>;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Seeded listings that explicitly ACCEPT change-of-mind returns.
3
+ *
4
+ * `finalSale` is absent on every other fixture, and absent means final sale —
5
+ * so the default path is exercised by the bulk of the catalogue exactly as it
6
+ * will be in production, where the field did not exist until now and no
7
+ * pre-existing document carries it.
8
+ *
9
+ * One per listing type, deliberately. The "Final Sale" badge and the refund
10
+ * gate both branch on this, and a badge that renders identically on every row
11
+ * proves nothing: without at least one opted-out fixture per type there is no
12
+ * way to tell "the predicate works" from "the predicate returns a constant".
13
+ * That is the same reason the availability work seeded one unavailable row per
14
+ * type rather than trusting the shared checks.
15
+ *
16
+ * Ids are listed rather than a `finalSale: false` written inline at each
17
+ * record because the records live in nine files with five different export
18
+ * wrappers, and a per-record edit is invisible to review — this set can be
19
+ * read in one glance and cross-checked against the badge.
20
+ */
21
+ export const RETURNABLE_FIXTURE_IDS = new Set([
22
+ // standard
23
+ "product-beyblade-burst-valkyrie",
24
+ // auction
25
+ "auction-beyblade-x-shark-edge",
26
+ // pre-order
27
+ "preorder-beyblade-x-bx-09-glide-ring",
28
+ // prize-draw
29
+ "prizedraw-beyblade-scheduled-demo",
30
+ // classified
31
+ "classified-beyblade-x-starter-pune",
32
+ // digital-code
33
+ "digitalcode-beyblade-x-app-legendary-pack",
34
+ // live
35
+ "live-bonsai-juniper-10yr",
36
+ // art
37
+ "art-valkyrie-holographic-print",
38
+ // stickers
39
+ "stickers-beyblade-x-holographic-pack",
40
+ ]);
41
+ /**
42
+ * Set `finalSale: false` on the opted-out fixtures and leave it ABSENT on
43
+ * every other record.
44
+ *
45
+ * Absent rather than `finalSale: true`, on purpose: writing the default
46
+ * explicitly would mean the seed never produces the shape that production data
47
+ * actually has, so `isFinalSale`'s handling of `undefined` — the only part of
48
+ * it that can be got wrong — would go untested by the entire fixture set.
49
+ *
50
+ * Pure and deterministic, so it does not reintroduce the `appkit-seed`
51
+ * idempotency problem of Root Cause #25.
52
+ */
53
+ export function withFinalSale(p) {
54
+ // Spread FIRST so a record that sets `finalSale` itself keeps its own value;
55
+ // this helper only fills in the opt-outs it owns.
56
+ const next = { ...p };
57
+ if (typeof next.finalSale === "undefined" && next.id && RETURNABLE_FIXTURE_IDS.has(next.id)) {
58
+ next.finalSale = false;
59
+ }
60
+ return next;
61
+ }
@@ -20,7 +20,8 @@
20
20
  import { PRODUCT_FIELDS } from "../constants/field-names";
21
21
  import { buildSearchTxt } from "../utils/search-txt";
22
22
  import { seedPhoto } from "./_helpers/media";
23
- export const productsArtSeedData = [
23
+ import { withFinalSale } from "./_helpers/final-sale-fixtures";
24
+ const _rawProductsArtSeedData = [
24
25
  {
25
26
  id: "art-dranzer-phoenix-poster",
26
27
  slug: "art-dranzer-phoenix-poster",
@@ -277,3 +278,10 @@ export const productsArtSeedData = [
277
278
  ]),
278
279
  },
279
280
  ];
281
+ /*
282
+ * This file had no export wrapper at all — every other product seed file maps
283
+ * its raw array through one, and these two were the exception. Adding it here
284
+ * so the final-sale opt-outs are applied the same way everywhere rather than
285
+ * being hand-written into two records that reviewers would have to find.
286
+ */
287
+ export const productsArtSeedData = _rawProductsArtSeedData.map(withFinalSale);
@@ -25,6 +25,7 @@
25
25
  import { PRODUCT_FIELDS } from "../constants/field-names";
26
26
  import { buildSearchTxt } from "../utils/search-txt";
27
27
  import { seedPhoto } from "./_helpers/media";
28
+ import { withFinalSale } from "./_helpers/final-sale-fixtures";
28
29
  function withTokens(p) {
29
30
  return {
30
31
  tags: [],
@@ -442,4 +443,4 @@ export const productsAuctionsSeedData = [
442
443
  createdAt: new Date("2026-08-10"),
443
444
  updatedAt: new Date("2026-08-24"),
444
445
  },
445
- ].map(withTokens);
446
+ ].map(withTokens).map(withFinalSale);
@@ -28,6 +28,7 @@ import { withProductSearchTxt } from "./_helpers/product-search-txt";
28
28
  import { PRODUCT_FIELDS } from "../constants/field-names";
29
29
  import { buildSearchTxt } from "../utils/search-txt";
30
30
  import { seedPhoto } from "./_helpers/media";
31
+ import { withFinalSale } from "./_helpers/final-sale-fixtures";
31
32
  const _rawproductsClassifiedsSeedData = [
32
33
  {
33
34
  id: "classified-beyblade-stadium-set",
@@ -421,4 +422,4 @@ const _rawproductsClassifiedsSeedData = [
421
422
  * the bottom of the array cannot ship without it — which is exactly how the
422
423
  * sold/depleted fixture in this file ended up unsearchable.
423
424
  */
424
- export const productsClassifiedsSeedData = _rawproductsClassifiedsSeedData.map(withProductSearchTxt);
425
+ export const productsClassifiedsSeedData = _rawproductsClassifiedsSeedData.map(withProductSearchTxt).map(withFinalSale);
@@ -21,6 +21,7 @@ import { withProductSearchTxt } from "./_helpers/product-search-txt";
21
21
  import { PRODUCT_FIELDS } from "../constants/field-names";
22
22
  import { buildSearchTxt } from "../utils/search-txt";
23
23
  import { seedPhoto } from "./_helpers/media";
24
+ import { withFinalSale } from "./_helpers/final-sale-fixtures";
24
25
  const _rawproductsDigitalCodesSeedData = [
25
26
  {
26
27
  id: "digitalcode-beyblade-x-app-starter-pack",
@@ -399,4 +400,4 @@ const _rawproductsDigitalCodesSeedData = [
399
400
  * the bottom of the array cannot ship without it — which is exactly how the
400
401
  * sold/depleted fixture in this file ended up unsearchable.
401
402
  */
402
- export const productsDigitalCodesSeedData = _rawproductsDigitalCodesSeedData.map(withProductSearchTxt);
403
+ export const productsDigitalCodesSeedData = _rawproductsDigitalCodesSeedData.map(withProductSearchTxt).map(withFinalSale);
@@ -34,6 +34,7 @@ import { withProductSearchTxt } from "./_helpers/product-search-txt";
34
34
  import { PRODUCT_FIELDS } from "../constants/field-names";
35
35
  import { buildSearchTxt } from "../utils/search-txt";
36
36
  import { seedPhoto } from "./_helpers/media";
37
+ import { withFinalSale } from "./_helpers/final-sale-fixtures";
37
38
  const _rawproductsLiveItemsSeedData = [
38
39
  {
39
40
  id: "live-golden-retriever-puppy",
@@ -230,4 +231,4 @@ const _rawproductsLiveItemsSeedData = [
230
231
  * the bottom of the array cannot ship without it — which is exactly how the
231
232
  * sold/depleted fixture in this file ended up unsearchable.
232
233
  */
233
- export const productsLiveItemsSeedData = _rawproductsLiveItemsSeedData.map(withProductSearchTxt);
234
+ export const productsLiveItemsSeedData = _rawproductsLiveItemsSeedData.map(withProductSearchTxt).map(withFinalSale);
@@ -1,138 +1,2 @@
1
- export declare const productsPreordersSeedData: {
2
- listingType: "pre-order";
3
- searchTxt: string[];
4
- title?: string | undefined;
5
- description?: string | undefined;
6
- slug?: string | undefined;
7
- isTestData?: boolean | undefined;
8
- testDataExpiresAt?: Date | undefined;
9
- seoTitle?: string | undefined;
10
- seoDescription?: string | undefined;
11
- seoKeywords?: string[] | undefined;
12
- categorySlugs?: string[] | undefined;
13
- categoryNames?: string[] | undefined;
14
- category?: string | undefined;
15
- categoryName?: string | undefined;
16
- subcategory?: string | undefined;
17
- brand?: string | undefined;
18
- brandSlug?: string | undefined;
19
- price?: number | undefined;
20
- currency?: string | undefined;
21
- stockQuantity: number;
22
- availableQuantity?: number | undefined;
23
- mainImage: string;
24
- images?: string[] | undefined;
25
- video?: import("..").ProductVideoField | undefined;
26
- status?: import("..").ProductStatus | undefined;
27
- storeId?: string | undefined;
28
- storeName?: string | undefined;
29
- storeSlug?: string | undefined;
30
- storeRating?: number | undefined;
31
- storeReviewCount?: number | undefined;
32
- featured?: boolean | undefined;
33
- tags: string[];
34
- specifications?: import("..").ProductSpecification[] | undefined;
35
- features?: string[] | undefined;
36
- shippingInfo?: string | undefined;
37
- returnPolicy?: string | undefined;
38
- condition?: "new" | "like_new" | "good" | "fair" | "poor" | "used" | "refurbished" | "broken" | "graded" | undefined;
39
- insurance?: boolean | undefined;
40
- insuranceCost?: number | undefined;
41
- shippingPaidBy?: "seller" | "buyer" | undefined;
42
- auctionEndDate?: Date | undefined;
43
- startingBid?: number | undefined;
44
- currentBid?: number | undefined;
45
- bidCount?: number | undefined;
46
- leadingBidderId?: string | undefined;
47
- reservePrice?: number | undefined;
48
- buyNowPrice?: number | undefined;
49
- minBidIncrement?: number | undefined;
50
- autoExtendable?: boolean | undefined;
51
- auctionExtensionMinutes?: number | undefined;
52
- auctionOriginalEndDate?: Date | undefined;
53
- auctionShippingPaidBy?: "seller" | "winner" | undefined;
54
- bidsHaveStarted?: boolean | undefined;
55
- grading?: import("../features/products").ProductGrading | undefined;
56
- card?: import("../features/products").ProductCardMetadata | undefined;
57
- classified?: import("../features/products").ProductClassifiedMeta | undefined;
58
- digitalCode?: import("../features/products").ProductDigitalCodeMeta | undefined;
59
- liveItem?: import("../features/products").ProductLiveItemMeta | undefined;
60
- catalogProductId?: string | undefined;
61
- preOrderDeliveryDate?: Date | undefined;
62
- preOrderDepositPercent?: number | undefined;
63
- preOrderDepositAmount?: number | undefined;
64
- preOrderMaxQuantity?: number | undefined;
65
- preOrderCurrentCount?: number | undefined;
66
- preOrderProductionStatus?: "upcoming" | "in_production" | "ready_to_ship" | undefined;
67
- preOrderCancellable?: boolean | undefined;
68
- preOrderClosed?: boolean | undefined;
69
- isPromoted?: boolean | undefined;
70
- isOnSale?: boolean | undefined;
71
- isSold?: boolean | undefined;
72
- allowShipBeforeEmiComplete?: boolean | undefined;
73
- gstRate?: 0 | 5 | 12 | 18 | 28 | undefined;
74
- hsnCode?: string | undefined;
75
- printMeta?: import("../features/products").ProductPrintMeta | undefined;
76
- promotionEndDate?: Date | undefined;
77
- pickupAddressId?: string | undefined;
78
- viewCount?: number | undefined;
79
- avgRating?: number | undefined;
80
- reviewCount?: number | undefined;
81
- bulkDiscounts?: {
82
- quantity: number;
83
- discountPercent: number;
84
- }[] | undefined;
85
- ingredients?: string[] | undefined;
86
- howToUse?: string[] | undefined;
87
- allowOffers?: boolean | undefined;
88
- minOfferPercent?: number | undefined;
89
- customFields?: import("../features/products").CustomField[] | undefined;
90
- customSections?: import("../features/products").CustomSection[] | undefined;
91
- sublistingCategoryId?: string | undefined;
92
- groupId?: string | undefined;
93
- isGroupParent?: boolean | undefined;
94
- groupParentSlug?: string | undefined;
95
- groupChildSlugs?: string[] | undefined;
96
- groupTitle?: string | undefined;
97
- groupIcon?: string | undefined;
98
- sublistingIcon?: string | undefined;
99
- maxPerUser?: number | undefined;
100
- partOfBundleIds?: string[] | undefined;
101
- partOfBundleTitles?: string[] | undefined;
102
- isPartOfBundle?: boolean | undefined;
103
- sourceShipmentId?: string | undefined;
104
- sourceShipmentLotId?: string | undefined;
105
- sourceShipmentItemId?: string | undefined;
106
- sourceCatalogueItemId?: string | undefined;
107
- sourceCatalogueOwnerId?: string | undefined;
108
- prizeDrawItems?: import("../features/products").PrizeDrawItem[] | undefined;
109
- pricePerEntry?: number | undefined;
110
- prizeMaxEntries?: number | undefined;
111
- prizeCurrentEntries?: number | undefined;
112
- prizeRevealWindowStart?: Date | undefined;
113
- prizeRevealWindowEnd?: Date | undefined;
114
- prizeRevealStatus?: "pending" | "open" | "closed" | undefined;
115
- prizeDrawDurationDays?: number | undefined;
116
- prizeGithubFileUrl?: string | undefined;
117
- prizeDrawMode?: "reveal" | "lottery" | undefined;
118
- prizeRevealMode?: "instant" | "scheduled" | undefined;
119
- lotteryConfig?: import("..").LotteryConfig | undefined;
120
- shipping?: {
121
- allowedProviderIds?: string[];
122
- overrides?: Array<{
123
- providerId: string;
124
- fee?: number;
125
- etaDaysMin?: number;
126
- etaDaysMax?: number;
127
- }>;
128
- } | undefined;
129
- physicalLocation?: {
130
- zone: string;
131
- shelf: string;
132
- bin: string;
133
- } | undefined;
134
- barcodeId?: string | undefined;
135
- id?: string | undefined;
136
- createdAt?: Date | undefined;
137
- updatedAt?: Date | undefined;
138
- }[];
1
+ import { ProductDocument } from "../features/products/schemas/firestore";
2
+ export declare const productsPreordersSeedData: Partial<ProductDocument>[];