@mohasinac/appkit 4.33.0 → 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 (89) 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/about/components/PolicyPageView.js +1 -1
  24. package/dist/features/admin/components/AdminProductEditorView.js +6 -1
  25. package/dist/features/admin/components/AdminSiteSettingsView.js +2 -6
  26. package/dist/features/admin/components/index.d.ts +0 -2
  27. package/dist/features/admin/components/index.js +0 -1
  28. package/dist/features/admin/schemas/admin-editor-forms.js +1 -1
  29. package/dist/features/admin/schemas/firestore.d.ts +0 -2
  30. package/dist/features/auctions/components/AuctionDetailPageView.js +4 -3
  31. package/dist/features/contact/components/ContactForm.js +46 -31
  32. package/dist/features/media/upload/MediaUploadList.d.ts +16 -1
  33. package/dist/features/media/upload/MediaUploadList.js +58 -8
  34. package/dist/features/orders/components/RefundRequestView.d.ts +26 -10
  35. package/dist/features/orders/components/RefundRequestView.js +108 -24
  36. package/dist/features/orders/schemas/firestore.d.ts +42 -0
  37. package/dist/features/orders/types/index.d.ts +24 -0
  38. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +5 -3
  39. package/dist/features/products/components/ProductDetailPageView.js +14 -2
  40. package/dist/features/products/components/ProductFeatureBadges.d.ts +9 -1
  41. package/dist/features/products/components/ProductFeatureBadges.js +17 -1
  42. package/dist/features/products/components/ProductForm.js +46 -10
  43. package/dist/features/products/components/ProductGrid.js +10 -1
  44. package/dist/features/products/constants/final-sale.d.ts +40 -0
  45. package/dist/features/products/constants/final-sale.js +40 -0
  46. package/dist/features/products/index.d.ts +1 -0
  47. package/dist/features/products/index.js +1 -0
  48. package/dist/features/products/schemas/firestore.d.ts +19 -2
  49. package/dist/features/products/schemas/firestore.js +4 -0
  50. package/dist/features/products/types/index.d.ts +2 -0
  51. package/dist/features/seller/components/SellerProductShell.d.ts +7 -0
  52. package/dist/features/seller/components/SellerProductShell.js +82 -11
  53. package/dist/features/seller/index.d.ts +1 -0
  54. package/dist/features/seller/index.js +1 -0
  55. package/dist/features/seller/schemas/product-form.d.ts +304 -0
  56. package/dist/features/seller/schemas/product-form.js +132 -0
  57. package/dist/features/seller/utils/product-draft-mapping.d.ts +117 -0
  58. package/dist/features/seller/utils/product-draft-mapping.js +147 -0
  59. package/dist/features/shell/SectionForm.js +62 -7
  60. package/dist/features/shell/form-sections.js +4 -0
  61. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +200 -0
  62. package/dist/index.d.ts +6 -3
  63. package/dist/index.js +12 -3
  64. package/dist/next/routing/route-map.d.ts +2 -0
  65. package/dist/next/routing/route-map.js +1 -0
  66. package/dist/schemas/registry.d.ts +271 -0
  67. package/dist/schemas/registry.js +9 -0
  68. package/dist/seed/_helpers/final-sale-fixtures.d.ts +35 -0
  69. package/dist/seed/_helpers/final-sale-fixtures.js +61 -0
  70. package/dist/seed/products-art-seed-data.js +9 -1
  71. package/dist/seed/products-auctions-seed-data.js +2 -1
  72. package/dist/seed/products-classifieds-seed-data.js +2 -1
  73. package/dist/seed/products-digital-codes-seed-data.js +2 -1
  74. package/dist/seed/products-live-items-seed-data.js +2 -1
  75. package/dist/seed/products-preorders-seed-data.d.ts +2 -138
  76. package/dist/seed/products-preorders-seed-data.js +2 -1
  77. package/dist/seed/products-prize-draws-seed-data.js +2 -1
  78. package/dist/seed/products-standard-seed-data.js +2 -1
  79. package/dist/seed/products-stickers-seed-data.js +9 -1
  80. package/dist/server.d.ts +6 -2
  81. package/dist/server.js +15 -2
  82. package/dist/styles.css +1 -1
  83. package/dist/tailwind-utilities.css +1 -1
  84. package/dist/tokens/motion.d.ts +12 -0
  85. package/dist/tokens/motion.js +12 -0
  86. package/dist/ui/components/CollapsibleSection.d.ts +18 -1
  87. package/dist/ui/components/CollapsibleSection.js +20 -3
  88. package/dist/ui/components/Motion.js +17 -1
  89. package/package.json +1 -1
@@ -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>[];
@@ -22,6 +22,7 @@
22
22
  import { PRODUCT_FIELDS } from "../constants/field-names";
23
23
  import { buildSearchTxt } from "../utils/search-txt";
24
24
  import { seedPhoto } from "./_helpers/media";
25
+ import { withFinalSale } from "./_helpers/final-sale-fixtures";
25
26
  const _rawPreordersSeedData = [
26
27
  {
27
28
  id: "preorder-beyblade-x-bx-08-wave",
@@ -296,7 +297,7 @@ const _rawPreordersSeedData = [
296
297
  updatedAt: new Date("2026-08-24"),
297
298
  },
298
299
  ];
299
- export const productsPreordersSeedData = _rawPreordersSeedData.map((p) => ({
300
+ export const productsPreordersSeedData = _rawPreordersSeedData.map((p) => withFinalSale({
300
301
  tags: [],
301
302
  stockQuantity: p.availableQuantity ?? 1,
302
303
  mainImage: p.images?.[0] ?? "",
@@ -22,6 +22,7 @@ import { withProductSearchTxt } from "./_helpers/product-search-txt";
22
22
  import { PRODUCT_FIELDS } from "../constants/field-names";
23
23
  import { buildSearchTxt } from "../utils/search-txt";
24
24
  import { seedPhoto } from "./_helpers/media";
25
+ import { withFinalSale } from "./_helpers/final-sale-fixtures";
25
26
  const _rawproductsPrizeDrawsSeedData = [
26
27
  {
27
28
  id: "prizedraw-beyblade-mystery-box",
@@ -408,4 +409,4 @@ const _rawproductsPrizeDrawsSeedData = [
408
409
  * the bottom of the array cannot ship without it — which is exactly how the
409
410
  * sold/depleted fixture in this file ended up unsearchable.
410
411
  */
411
- export const productsPrizeDrawsSeedData = _rawproductsPrizeDrawsSeedData.map(withProductSearchTxt);
412
+ export const productsPrizeDrawsSeedData = _rawproductsPrizeDrawsSeedData.map(withProductSearchTxt).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
  /*
29
30
  * Real Beyblade attributes per fixture — Root Cause #6 (standard was the
30
31
  * "richest" seed file by fixture count but never exercised customFields/
@@ -648,4 +649,4 @@ export const productsStandardSeedData = [
648
649
  ...(p.id ? SPEC_OVERRIDES[p.id] : undefined),
649
650
  listingType: PRODUCT_FIELDS.LISTING_TYPE_VALUES.STANDARD,
650
651
  })),
651
- ];
652
+ ].map(withFinalSale);
@@ -19,7 +19,8 @@
19
19
  import { PRODUCT_FIELDS } from "../constants/field-names";
20
20
  import { buildSearchTxt } from "../utils/search-txt";
21
21
  import { seedPhoto } from "./_helpers/media";
22
- export const productsStickersSeedData = [
22
+ import { withFinalSale } from "./_helpers/final-sale-fixtures";
23
+ const _rawProductsStickersSeedData = [
23
24
  {
24
25
  id: "stickers-beyblade-original-classic-sheet",
25
26
  slug: "stickers-beyblade-original-classic-sheet",
@@ -264,3 +265,10 @@ export const productsStickersSeedData = [
264
265
  ]),
265
266
  },
266
267
  ];
268
+ /*
269
+ * This file had no export wrapper at all — every other product seed file maps
270
+ * its raw array through one, and these two were the exception. Adding it here
271
+ * so the final-sale opt-outs are applied the same way everywhere rather than
272
+ * being hand-written into two records that reviewers would have to find.
273
+ */
274
+ export const productsStickersSeedData = _rawProductsStickersSeedData.map(withFinalSale);
package/dist/server.d.ts CHANGED
@@ -8,7 +8,7 @@ export { wrapAction, isOk, unwrap, } from "./_internal/shared/types/action-resul
8
8
  export type { ActionResult } from "./_internal/shared/types/action-result";
9
9
  export { setActionErrorReporter, hasActionErrorReporter, } from "./_internal/shared/types/action-error-reporter";
10
10
  export type { ActionErrorReport, ActionErrorReporter, } from "./_internal/shared/types/action-error-reporter";
11
- export { attachPaymentProofAction, adminVerifyPaymentAction, adminRequestProofReuploadAction, adminRejectPaymentAsFraudAction, raiseOrderDisputeAction, } from "./_internal/server/features/orders/actions";
11
+ export { attachPaymentProofAction, adminVerifyPaymentAction, adminRequestProofReuploadAction, adminRejectPaymentAsFraudAction, raiseOrderDisputeAction, requestReturnAction, } from "./_internal/server/features/orders/actions";
12
12
  export { wrapJobHandler, wrapScheduleHandler, wrapTriggerHandler, wrapCallableHandler, } from "./_internal/server/jobs/core/wrapJobHandler";
13
13
  export { analyzeLogs } from "./_internal/server/features/maintenance/analyze";
14
14
  export type { AnalyzeOptions, AnalyzeReport, } from "./_internal/server/features/maintenance/analyze";
@@ -530,7 +530,7 @@ export { LISTING_TYPE_REGISTRY, pluginFor, detectListingTypeFromSlug } from "./_
530
530
  export type { ListingTypePlugin } from "./_internal/shared/listing-types/_registry";
531
531
  export { applyMediaContextGuards, CONTEXT_LIMITS, } from "./_internal/server/features/media/contextGuards";
532
532
  export type { GuardResult, GuardError, GuardSuccess } from "./_internal/server/features/media/contextGuards";
533
- export { MEGABYTE, MAX_IMAGE_BYTES, MAX_PDF_BYTES, MAX_VIDEO_BYTES, MAX_LABEL, MAX_BYTES, ALLOWED_IMAGE_MIMES, ALLOWED_VIDEO_MIMES, ALLOWED_DOC_MIMES, ALLOWED_MIMES, ALLOWED_TYPES_LABEL, MIME_TO_EXT, PDF_MAGIC, VIDEO_CONVERSION_HINTS, classifyMime, isAllowedMime, maxBytesFor, getConversionHint, } from "./_internal/shared/media/limits";
533
+ export { MEGABYTE, MAX_IMAGE_BYTES, MAX_PDF_BYTES, MAX_VIDEO_BYTES, MAX_LABEL, MAX_BYTES, ALLOWED_IMAGE_MIMES, ALLOWED_VIDEO_MIMES, ALLOWED_DOC_MIMES, ALLOWED_MIMES, ALLOWED_TYPES_LABEL, MIME_TO_EXT, PDF_MAGIC, VIDEO_CONVERSION_HINTS, classifyMime, isAllowedMime, maxBytesFor, getConversionHint, PRODUCT_MAX_IMAGES, PRODUCT_MAX_VIDEOS, PRODUCT_IMAGE_INDEX_MAX, } from "./_internal/shared/media/limits";
534
534
  export type { MediaKind, AllowedImageMime, AllowedVideoMime, AllowedDocMime, AllowedMime, } from "./_internal/shared/media/limits";
535
535
  export { getServerPermissions, checkPermission, checkAnyPermission, makeAdminSectionLayout, } from "./_internal/server/features/auth/permissions";
536
536
  export type { ResolvedPermissions, AdminSectionLayoutOpts, } from "./_internal/server/features/auth/permissions";
@@ -581,3 +581,7 @@ export { validateActionIndexEntry, normaliseRoute, } from "./features/search/act
581
581
  export type { ActionIndexValidationContext, ActionIndexValidationIssue, } from "./features/search/action-index/validate-entry";
582
582
  export { ActionIndexRepository, actionIndexRepository, } from "./features/search/action-index/repository";
583
583
  export type { ActionIndexDocument } from "./features/search/action-index/repository";
584
+ export { REFUND_COPY } from "./_internal/shared/features/orders/refund-copy";
585
+ export { RETURN_REASON, FINAL_SALE_EXEMPT_REASONS, RETURN_REASON_LABEL, RETURN_REASON_GROUP_LABEL, isFinalSaleExempt, isReturnReason, selectableReturnReasons, } from "./_internal/shared/features/orders/return-reasons";
586
+ export type { ReturnReason } from "./_internal/shared/features/orders/return-reasons";
587
+ export { draftToProductInput, productToDraft, } from "./features/seller/utils/product-draft-mapping";
package/dist/server.js CHANGED
@@ -17,7 +17,11 @@ export { wrapAction, isOk, unwrap, } from "./_internal/shared/types/action-resul
17
17
  // server-side rather than from a client bootstrap.
18
18
  export { setActionErrorReporter, hasActionErrorReporter, } from "./_internal/shared/types/action-error-reporter";
19
19
  // [SERVER-ONLY] P-1 manual payment proof server actions.
20
- export { attachPaymentProofAction, adminVerifyPaymentAction, adminRequestProofReuploadAction, adminRejectPaymentAsFraudAction, raiseOrderDisputeAction, } from "./_internal/server/features/orders/actions";
20
+ export { attachPaymentProofAction, adminVerifyPaymentAction, adminRequestProofReuploadAction, adminRejectPaymentAsFraudAction, raiseOrderDisputeAction,
21
+ // Buyer return request. Was reachable only through `server-entry.ts`, which
22
+ // is the bare `@mohasinac/appkit` specifier — not `/server`, where every
23
+ // other order action lives and where a consumer would look for it.
24
+ requestReturnAction, } from "./_internal/server/features/orders/actions";
21
25
  // [SERVER-ONLY] Cloud Function handler wrappers — persist exceptions to
22
26
  // serverErrors (source: "function") before re-throwing so retry semantics
23
27
  // are preserved. Apply at the consumer's runtime adapter boundary.
@@ -1389,7 +1393,7 @@ export { LISTING_TYPE_REGISTRY, pluginFor, detectListingTypeFromSlug } from "./_
1389
1393
  // Media context guards — shared by /api/media/sign + legacy /api/media/upload.
1390
1394
  export { applyMediaContextGuards, CONTEXT_LIMITS, } from "./_internal/server/features/media/contextGuards";
1391
1395
  // Media upload limits — shared by /api/media/sign + /api/media/finalize + /api/media/upload.
1392
- export { MEGABYTE, MAX_IMAGE_BYTES, MAX_PDF_BYTES, MAX_VIDEO_BYTES, MAX_LABEL, MAX_BYTES, ALLOWED_IMAGE_MIMES, ALLOWED_VIDEO_MIMES, ALLOWED_DOC_MIMES, ALLOWED_MIMES, ALLOWED_TYPES_LABEL, MIME_TO_EXT, PDF_MAGIC, VIDEO_CONVERSION_HINTS, classifyMime, isAllowedMime, maxBytesFor, getConversionHint, } from "./_internal/shared/media/limits";
1396
+ export { MEGABYTE, MAX_IMAGE_BYTES, MAX_PDF_BYTES, MAX_VIDEO_BYTES, MAX_LABEL, MAX_BYTES, ALLOWED_IMAGE_MIMES, ALLOWED_VIDEO_MIMES, ALLOWED_DOC_MIMES, ALLOWED_MIMES, ALLOWED_TYPES_LABEL, MIME_TO_EXT, PDF_MAGIC, VIDEO_CONVERSION_HINTS, classifyMime, isAllowedMime, maxBytesFor, getConversionHint, PRODUCT_MAX_IMAGES, PRODUCT_MAX_VIDEOS, PRODUCT_IMAGE_INDEX_MAX, } from "./_internal/shared/media/limits";
1393
1397
  // ── RBAC server helpers ───────────────────────────────────────────────────────
1394
1398
  // getServerPermissions, checkPermission, makeAdminSectionLayout
1395
1399
  export { getServerPermissions, checkPermission, checkAnyPermission, makeAdminSectionLayout, } from "./_internal/server/features/auth/permissions";
@@ -1452,3 +1456,12 @@ export { COUNTRIES, COUNTRY_CODES, DEFAULT_COUNTRY, countryFor, postalPatternFor
1452
1456
  export { SUBDIVISIONS, subdivisionsFor } from "./constants/geo/subdivisions";
1453
1457
  export { validateActionIndexEntry, normaliseRoute, } from "./features/search/action-index/validate-entry";
1454
1458
  export { ActionIndexRepository, actionIndexRepository, } from "./features/search/action-index/repository";
1459
+ export { REFUND_COPY } from "./_internal/shared/features/orders/refund-copy";
1460
+ // Return / refund reasons — the closed enum the final-sale gate branches on.
1461
+ // See the module docstring for why the exempt set is "seller or carrier fault"
1462
+ // rather than "serious reasons".
1463
+ export { RETURN_REASON, FINAL_SALE_EXEMPT_REASONS, RETURN_REASON_LABEL, RETURN_REASON_GROUP_LABEL, isFinalSaleExempt, isReturnReason, selectableReturnReasons, } from "./_internal/shared/features/orders/return-reasons";
1464
+ // Seller listing form draft <-> product write payload. The flat form keys and
1465
+ // the nested document blocks are different shapes, and nothing translated
1466
+ // between them — see the module docstring.
1467
+ export { draftToProductInput, productToDraft, } from "./features/seller/utils/product-draft-mapping";