medusa-storefront-data 2.5.8 → 2.5.10
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.
- package/dist/segment-data/default-page-input.json +191 -0
- package/dist/src/config.d.ts +3 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +31 -0
- package/dist/src/cookies.d.ts +23 -0
- package/dist/src/cookies.d.ts.map +1 -0
- package/dist/src/cookies.js +140 -0
- package/dist/src/edge.d.ts +3 -0
- package/dist/src/edge.d.ts.map +1 -0
- package/dist/src/edge.js +1 -0
- package/dist/src/middleware.d.ts +3 -0
- package/dist/src/middleware.d.ts.map +1 -0
- package/dist/src/middleware.js +1 -0
- package/dist/src/server/brand-pillars-from-categories.d.ts +8 -0
- package/dist/src/server/brand-pillars-from-categories.d.ts.map +1 -0
- package/dist/src/server/brand-pillars-from-categories.js +92 -0
- package/dist/src/server/cart.d.ts +96 -0
- package/dist/src/server/cart.d.ts.map +1 -0
- package/dist/src/server/cart.js +797 -0
- package/dist/src/server/categories.d.ts +4 -0
- package/dist/src/server/categories.d.ts.map +1 -0
- package/dist/src/server/categories.js +34 -0
- package/dist/src/server/collections.d.ts +8 -0
- package/dist/src/server/collections.d.ts.map +1 -0
- package/dist/src/server/collections.js +39 -0
- package/dist/src/server/config-merge.d.ts +3 -0
- package/dist/src/server/config-merge.d.ts.map +1 -0
- package/dist/src/server/config-merge.js +31 -0
- package/dist/src/server/contact.d.ts +34 -0
- package/dist/src/server/contact.d.ts.map +1 -0
- package/dist/src/server/contact.js +57 -0
- package/dist/src/server/customer-registration.d.ts +142 -0
- package/dist/src/server/customer-registration.d.ts.map +1 -0
- package/dist/src/server/customer-registration.js +295 -0
- package/dist/src/server/customer.d.ts +48 -0
- package/dist/src/server/customer.d.ts.map +1 -0
- package/dist/src/server/customer.js +413 -0
- package/dist/src/server/dynamic-config.d.ts +200 -0
- package/dist/src/server/dynamic-config.d.ts.map +1 -0
- package/dist/src/server/dynamic-config.js +788 -0
- package/dist/src/server/fulfillment.d.ts +5 -0
- package/dist/src/server/fulfillment.d.ts.map +1 -0
- package/dist/src/server/fulfillment.js +47 -0
- package/dist/src/server/guest.d.ts +81 -0
- package/dist/src/server/guest.d.ts.map +1 -0
- package/dist/src/server/guest.js +183 -0
- package/dist/src/server/help-faq-section-defaults.json +92 -0
- package/dist/src/server/help-sections/help-faq.d.ts +11 -0
- package/dist/src/server/help-sections/help-faq.d.ts.map +1 -0
- package/dist/src/server/help-sections/help-faq.js +6 -0
- package/dist/src/server/help-sections/index.d.ts +2 -0
- package/dist/src/server/help-sections/index.d.ts.map +1 -0
- package/dist/src/server/help-sections/index.js +1 -0
- package/dist/src/server/hero-banner-priority.d.ts +31 -0
- package/dist/src/server/hero-banner-priority.d.ts.map +1 -0
- package/dist/src/server/hero-banner-priority.js +26 -0
- package/dist/src/server/home-sections/about-brand.d.ts +9 -0
- package/dist/src/server/home-sections/about-brand.d.ts.map +1 -0
- package/dist/src/server/home-sections/about-brand.js +9 -0
- package/dist/src/server/home-sections/baptism-picks.d.ts +10 -0
- package/dist/src/server/home-sections/baptism-picks.d.ts.map +1 -0
- package/dist/src/server/home-sections/baptism-picks.js +27 -0
- package/dist/src/server/home-sections/baptism.d.ts +13 -0
- package/dist/src/server/home-sections/baptism.d.ts.map +1 -0
- package/dist/src/server/home-sections/baptism.js +43 -0
- package/dist/src/server/home-sections/blog-posts.d.ts +9 -0
- package/dist/src/server/home-sections/blog-posts.d.ts.map +1 -0
- package/dist/src/server/home-sections/blog-posts.js +9 -0
- package/dist/src/server/home-sections/brand-marquee.d.ts +8 -0
- package/dist/src/server/home-sections/brand-marquee.d.ts.map +1 -0
- package/dist/src/server/home-sections/brand-marquee.js +7 -0
- package/dist/src/server/home-sections/brand-pillars.d.ts +9 -0
- package/dist/src/server/home-sections/brand-pillars.d.ts.map +1 -0
- package/dist/src/server/home-sections/brand-pillars.js +9 -0
- package/dist/src/server/home-sections/category-pills.d.ts +9 -0
- package/dist/src/server/home-sections/category-pills.d.ts.map +1 -0
- package/dist/src/server/home-sections/category-pills.js +19 -0
- package/dist/src/server/home-sections/celebrity-trust.d.ts +12 -0
- package/dist/src/server/home-sections/celebrity-trust.d.ts.map +1 -0
- package/dist/src/server/home-sections/celebrity-trust.js +27 -0
- package/dist/src/server/home-sections/customer-stories.d.ts +9 -0
- package/dist/src/server/home-sections/customer-stories.d.ts.map +1 -0
- package/dist/src/server/home-sections/customer-stories.js +9 -0
- package/dist/src/server/home-sections/features.d.ts +9 -0
- package/dist/src/server/home-sections/features.d.ts.map +1 -0
- package/dist/src/server/home-sections/features.js +9 -0
- package/dist/src/server/home-sections/hero.d.ts +9 -0
- package/dist/src/server/home-sections/hero.d.ts.map +1 -0
- package/dist/src/server/home-sections/hero.js +9 -0
- package/dist/src/server/home-sections/instagram-posts.d.ts +9 -0
- package/dist/src/server/home-sections/instagram-posts.d.ts.map +1 -0
- package/dist/src/server/home-sections/instagram-posts.js +9 -0
- package/dist/src/server/home-sections/loved-by-moms.d.ts +12 -0
- package/dist/src/server/home-sections/loved-by-moms.d.ts.map +1 -0
- package/dist/src/server/home-sections/loved-by-moms.js +20 -0
- package/dist/src/server/home-sections/luxe-favourites.d.ts +11 -0
- package/dist/src/server/home-sections/luxe-favourites.d.ts.map +1 -0
- package/dist/src/server/home-sections/luxe-favourites.js +19 -0
- package/dist/src/server/home-sections/new-arrivals-classic.d.ts +8 -0
- package/dist/src/server/home-sections/new-arrivals-classic.d.ts.map +1 -0
- package/dist/src/server/home-sections/new-arrivals-classic.js +10 -0
- package/dist/src/server/home-sections/new-arrivals.d.ts +12 -0
- package/dist/src/server/home-sections/new-arrivals.d.ts.map +1 -0
- package/dist/src/server/home-sections/new-arrivals.js +28 -0
- package/dist/src/server/home-sections/promo-announcements.d.ts +11 -0
- package/dist/src/server/home-sections/promo-announcements.d.ts.map +1 -0
- package/dist/src/server/home-sections/promo-announcements.js +5 -0
- package/dist/src/server/home-sections/promo-countdown.d.ts +6 -0
- package/dist/src/server/home-sections/promo-countdown.d.ts.map +1 -0
- package/dist/src/server/home-sections/promo-countdown.js +5 -0
- package/dist/src/server/home-sections/shared.d.ts +10 -0
- package/dist/src/server/home-sections/shared.d.ts.map +1 -0
- package/dist/src/server/home-sections/shared.js +29 -0
- package/dist/src/server/home-sections/shop-by-age.d.ts +9 -0
- package/dist/src/server/home-sections/shop-by-age.d.ts.map +1 -0
- package/dist/src/server/home-sections/shop-by-age.js +17 -0
- package/dist/src/server/home-sections/shop-by-category.d.ts +10 -0
- package/dist/src/server/home-sections/shop-by-category.d.ts.map +1 -0
- package/dist/src/server/home-sections/shop-by-category.js +17 -0
- package/dist/src/server/home-sections/testimonials.d.ts +9 -0
- package/dist/src/server/home-sections/testimonials.d.ts.map +1 -0
- package/dist/src/server/home-sections/testimonials.js +9 -0
- package/dist/src/server/home-sections/theme-dresses.d.ts +12 -0
- package/dist/src/server/home-sections/theme-dresses.d.ts.map +1 -0
- package/dist/src/server/home-sections/theme-dresses.js +27 -0
- package/dist/src/server/home-sections/video-stories.d.ts +9 -0
- package/dist/src/server/home-sections/video-stories.d.ts.map +1 -0
- package/dist/src/server/home-sections/video-stories.js +9 -0
- package/dist/src/server/home-sections/why-choose-us.d.ts +9 -0
- package/dist/src/server/home-sections/why-choose-us.d.ts.map +1 -0
- package/dist/src/server/home-sections/why-choose-us.js +9 -0
- package/dist/src/server/home.d.ts +54 -0
- package/dist/src/server/home.d.ts.map +1 -0
- package/dist/src/server/home.js +1 -0
- package/dist/src/server/homepage-config.types.d.ts +405 -0
- package/dist/src/server/homepage-config.types.d.ts.map +1 -0
- package/dist/src/server/homepage-config.types.js +35 -0
- package/dist/src/server/homepage-section-defaults.d.ts +201 -0
- package/dist/src/server/homepage-section-defaults.d.ts.map +1 -0
- package/dist/src/server/homepage-section-defaults.js +192 -0
- package/dist/src/server/index.d.ts +26 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +25 -0
- package/dist/src/server/locale-actions.d.ts +14 -0
- package/dist/src/server/locale-actions.d.ts.map +1 -0
- package/dist/src/server/locale-actions.js +58 -0
- package/dist/src/server/locales.d.ts +8 -0
- package/dist/src/server/locales.d.ts.map +1 -0
- package/dist/src/server/locales.js +12 -0
- package/dist/src/server/normalize-homepage-config.d.ts +7 -0
- package/dist/src/server/normalize-homepage-config.d.ts.map +1 -0
- package/dist/src/server/normalize-homepage-config.js +281 -0
- package/dist/src/server/notifications.d.ts +2 -0
- package/dist/src/server/notifications.d.ts.map +1 -0
- package/dist/src/server/notifications.js +20 -0
- package/dist/src/server/onboarding.d.ts +2 -0
- package/dist/src/server/onboarding.d.ts.map +1 -0
- package/dist/src/server/onboarding.js +8 -0
- package/dist/src/server/orders.d.ts +63 -0
- package/dist/src/server/orders.d.ts.map +1 -0
- package/dist/src/server/orders.js +230 -0
- package/dist/src/server/page-input.d.ts +25 -0
- package/dist/src/server/page-input.d.ts.map +1 -0
- package/dist/src/server/page-input.js +172 -0
- package/dist/src/server/payment-details.d.ts +5 -0
- package/dist/src/server/payment-details.d.ts.map +1 -0
- package/dist/src/server/payment-details.js +28 -0
- package/dist/src/server/payment.d.ts +3 -0
- package/dist/src/server/payment.d.ts.map +1 -0
- package/dist/src/server/payment.js +13 -0
- package/dist/src/server/pincode.d.ts +7 -0
- package/dist/src/server/pincode.d.ts.map +1 -0
- package/dist/src/server/pincode.js +30 -0
- package/dist/src/server/products.d.ts +54 -0
- package/dist/src/server/products.d.ts.map +1 -0
- package/dist/src/server/products.js +154 -0
- package/dist/src/server/regions.d.ts +5 -0
- package/dist/src/server/regions.d.ts.map +1 -0
- package/dist/src/server/regions.js +57 -0
- package/dist/src/server/returns.d.ts +29 -0
- package/dist/src/server/returns.d.ts.map +1 -0
- package/dist/src/server/returns.js +132 -0
- package/dist/src/server/shoppable-looks.d.ts +17 -0
- package/dist/src/server/shoppable-looks.d.ts.map +1 -0
- package/dist/src/server/shoppable-looks.js +136 -0
- package/dist/src/server/storefront-cms.d.ts +11 -0
- package/dist/src/server/storefront-cms.d.ts.map +1 -0
- package/dist/src/server/storefront-cms.js +24 -0
- package/dist/src/server/swaps.d.ts +15 -0
- package/dist/src/server/swaps.d.ts.map +1 -0
- package/dist/src/server/swaps.js +89 -0
- package/dist/src/server/variants.d.ts +3 -0
- package/dist/src/server/variants.d.ts.map +1 -0
- package/dist/src/server/variants.js +15 -0
- package/dist/src/server/wishlist.d.ts +11 -0
- package/dist/src/server/wishlist.d.ts.map +1 -0
- package/dist/src/server/wishlist.js +49 -0
- package/dist/src/util/get-locale-header.d.ts +4 -0
- package/dist/src/util/get-locale-header.d.ts.map +1 -0
- package/dist/src/util/get-locale-header.js +7 -0
- package/dist/src/util/medusa-error.d.ts +2 -0
- package/dist/src/util/medusa-error.d.ts.map +1 -0
- package/dist/src/util/medusa-error.js +18 -0
- package/dist/src/util/revalidate-cart.d.ts +2 -0
- package/dist/src/util/revalidate-cart.d.ts.map +1 -0
- package/dist/src/util/revalidate-cart.js +8 -0
- package/dist/src/util/sort-products.d.ts +3 -0
- package/dist/src/util/sort-products.d.ts.map +1 -0
- package/dist/src/util/sort-products.js +1 -0
- package/dist/src/util/store-client.d.ts +11 -0
- package/dist/src/util/store-client.d.ts.map +1 -0
- package/dist/src/util/store-client.js +75 -0
- package/package.json +32 -20
- package/src/server/dynamic-config.ts +136 -0
- package/src/server/hero-banner-priority.ts +63 -0
- package/src/server/home-sections/customer-stories.ts +23 -0
- package/src/server/homepage-config.types.ts +18 -0
- package/src/server/homepage-section-defaults.ts +2 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
function asObject(v) {
|
|
2
|
+
return v && typeof v === "object" && !Array.isArray(v) ? v : null;
|
|
3
|
+
}
|
|
4
|
+
function asArray(v) {
|
|
5
|
+
return Array.isArray(v) ? v : [];
|
|
6
|
+
}
|
|
7
|
+
/** Map simplified banner row → legacy `homepage-banner` / `app-banner` entry. */
|
|
8
|
+
function legacyBannerEntry(row, prefix) {
|
|
9
|
+
const r = asObject(row);
|
|
10
|
+
if (!r)
|
|
11
|
+
return null;
|
|
12
|
+
const image = r.image ?? r[`${prefix}-image`];
|
|
13
|
+
if (!image)
|
|
14
|
+
return null;
|
|
15
|
+
return {
|
|
16
|
+
[prefix]: {
|
|
17
|
+
[`${prefix}-image`]: image,
|
|
18
|
+
[`${prefix}-title`]: r.title ?? r[`${prefix}-title`],
|
|
19
|
+
[`${prefix}-subtitle`]: r.subtitle ?? r[`${prefix}-subtitle`],
|
|
20
|
+
[`${prefix}-description`]: r.description ?? r[`${prefix}-description`],
|
|
21
|
+
[`${prefix}-button-name`]: r.buttonText ?? r.buttonName ?? r[`${prefix}-button-name`],
|
|
22
|
+
[`${prefix}-button-link`]: r.buttonLink ?? r[`${prefix}-button-link`],
|
|
23
|
+
...(prefix === "app-banner" && r.link != null
|
|
24
|
+
? { "app-banner-link": r.link }
|
|
25
|
+
: {}),
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function normalizeBanners(site) {
|
|
30
|
+
const banners = asObject(site?.banners) ?? asObject(site);
|
|
31
|
+
const desktopRaw = banners?.desktop ?? banners?.["homepage-banner-array"] ?? site?.["homepage-banner-array"];
|
|
32
|
+
const mobileRaw = banners?.mobile ?? banners?.["app-banner-array"] ?? site?.["app-banner-array"];
|
|
33
|
+
const desktop = asArray(desktopRaw)
|
|
34
|
+
.map((row) => legacyBannerEntry(row, "homepage-banner"))
|
|
35
|
+
.filter(Boolean);
|
|
36
|
+
const mobile = asArray(mobileRaw)
|
|
37
|
+
.map((row) => legacyBannerEntry(row, "app-banner"))
|
|
38
|
+
.filter(Boolean);
|
|
39
|
+
return { desktop, mobile };
|
|
40
|
+
}
|
|
41
|
+
function normalizeContact(site) {
|
|
42
|
+
const c = asObject(site?.contact) ?? asObject(site?.["contact-us"]);
|
|
43
|
+
if (!c)
|
|
44
|
+
return undefined;
|
|
45
|
+
return {
|
|
46
|
+
"contact-phone": c.phone ?? c["contact-phone"],
|
|
47
|
+
"contact-email": c.email ?? c["contact-email"],
|
|
48
|
+
"contact-whatsapp": c.whatsapp ?? c["contact-whatsapp"],
|
|
49
|
+
"contact-address": c.address ?? c["contact-address"],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function normalizeSocial(site) {
|
|
53
|
+
const raw = site?.social ?? site?.["social-links"];
|
|
54
|
+
return asArray(raw).map((item) => {
|
|
55
|
+
const row = asObject(item?.["social-link"]) ?? asObject(item);
|
|
56
|
+
if (!row)
|
|
57
|
+
return null;
|
|
58
|
+
return {
|
|
59
|
+
"social-link": {
|
|
60
|
+
"social-platform-name": row.name ?? row["social-platform-name"],
|
|
61
|
+
"social-platform-url": row.url ?? row["social-platform-url"],
|
|
62
|
+
"social-platform-icon": row.icon ?? row["social-platform-icon"],
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}).filter(Boolean);
|
|
66
|
+
}
|
|
67
|
+
function normalizeFaqs(site) {
|
|
68
|
+
const raw = site?.faqs ?? site?.["faq-array"];
|
|
69
|
+
return asArray(raw).map((item) => {
|
|
70
|
+
const f = asObject(item?.faq) ?? asObject(item);
|
|
71
|
+
if (!f)
|
|
72
|
+
return null;
|
|
73
|
+
return {
|
|
74
|
+
faq: {
|
|
75
|
+
"faq-category": f.category ?? f["faq-category"],
|
|
76
|
+
"faq-question": f.question ?? f["faq-question"],
|
|
77
|
+
"faq-answer": f.answer ?? f["faq-answer"],
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}).filter(Boolean);
|
|
81
|
+
}
|
|
82
|
+
function normalizeTestimonialItem(item) {
|
|
83
|
+
const r = asObject(item?.testimonial) ?? asObject(item);
|
|
84
|
+
if (!r)
|
|
85
|
+
return null;
|
|
86
|
+
const text = String(r.text ?? r.description ?? "").trim();
|
|
87
|
+
const name = String(r.name ?? "").trim();
|
|
88
|
+
if (!text || !name)
|
|
89
|
+
return null;
|
|
90
|
+
return { text, name, avatar: r.avatar, rating: r.rating };
|
|
91
|
+
}
|
|
92
|
+
function normalizeSections(sections) {
|
|
93
|
+
const out = { ...sections };
|
|
94
|
+
const promoAnnouncements = asObject(sections.promoAnnouncements);
|
|
95
|
+
if (promoAnnouncements?.messages) {
|
|
96
|
+
const messages = asArray(promoAnnouncements.messages)
|
|
97
|
+
.map((m) => {
|
|
98
|
+
if (typeof m === "string")
|
|
99
|
+
return m.trim();
|
|
100
|
+
const row = asObject(m);
|
|
101
|
+
return String(row?.message ?? row?.text ?? "").trim();
|
|
102
|
+
})
|
|
103
|
+
.filter(Boolean);
|
|
104
|
+
out.promoAnnouncements = { ...promoAnnouncements, messages };
|
|
105
|
+
}
|
|
106
|
+
const testimonials = asObject(sections.testimonials);
|
|
107
|
+
if (testimonials) {
|
|
108
|
+
const items = testimonials.items ??
|
|
109
|
+
testimonials.testimonials ??
|
|
110
|
+
testimonials.reviews;
|
|
111
|
+
if (Array.isArray(items)) {
|
|
112
|
+
out.testimonials = {
|
|
113
|
+
...testimonials,
|
|
114
|
+
items: items.map(normalizeTestimonialItem).filter(Boolean),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const promo = asObject(sections.promoCountdown);
|
|
119
|
+
if (promo) {
|
|
120
|
+
out.promoCountdown = {
|
|
121
|
+
code: promo.code ?? promo["promo-code"],
|
|
122
|
+
text: promo.text ?? promo.message ?? promo["promo-text"],
|
|
123
|
+
"end-at": promo.endAt ?? promo["end-at"],
|
|
124
|
+
active: promo.active ?? promo["promo-active"],
|
|
125
|
+
"cta-label": promo.ctaLabel ?? promo["cta-label"],
|
|
126
|
+
"cta-href": promo.ctaHref ?? promo["cta-href"],
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const baptism = asObject(sections.baptismPicks);
|
|
130
|
+
if (baptism?.looks) {
|
|
131
|
+
out.baptismPicks = {
|
|
132
|
+
title: baptism.title,
|
|
133
|
+
looks: asArray(baptism.looks).map((look) => {
|
|
134
|
+
const L = asObject(look?.look) ?? asObject(look);
|
|
135
|
+
if (!L)
|
|
136
|
+
return null;
|
|
137
|
+
return {
|
|
138
|
+
image: L.image,
|
|
139
|
+
"product-ids": L.productIds ?? L["product-ids"],
|
|
140
|
+
"product-handles": L.productHandles ?? L["product-handles"],
|
|
141
|
+
};
|
|
142
|
+
}).filter(Boolean),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const ig = asObject(sections.instagramPosts);
|
|
146
|
+
if (ig) {
|
|
147
|
+
out.instagramPosts = {
|
|
148
|
+
title: ig.title,
|
|
149
|
+
handle: ig.handle,
|
|
150
|
+
"profile-url": ig.profileUrl ?? ig["profile-url"],
|
|
151
|
+
"profile-image": ig.profileImage ?? ig["profile-image"],
|
|
152
|
+
posts: asArray(ig.posts).map((p) => {
|
|
153
|
+
const row = asObject(p?.post) ?? asObject(p);
|
|
154
|
+
return row ? { image: row.image, url: row.url ?? row.link } : null;
|
|
155
|
+
}).filter(Boolean),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
const about = asObject(sections.aboutBrand);
|
|
159
|
+
if (about) {
|
|
160
|
+
out.aboutBrand = {
|
|
161
|
+
eyebrow: about.eyebrow,
|
|
162
|
+
title: about.title,
|
|
163
|
+
description: about.description ?? about.text,
|
|
164
|
+
readMoreHref: about.readMoreHref ?? about["read-more-link"],
|
|
165
|
+
stats: about.stats,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
// brandPillars: title only in simplified CMS (cards from categories in storefront)
|
|
169
|
+
const pillars = asObject(sections.brandPillars);
|
|
170
|
+
if (pillars && !pillars.pillars) {
|
|
171
|
+
out.brandPillars = {
|
|
172
|
+
title: pillars.title,
|
|
173
|
+
description: pillars.description,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const helpFaq = asObject(sections.helpFaq);
|
|
177
|
+
if (helpFaq) {
|
|
178
|
+
const categories = asArray(helpFaq.categories)
|
|
179
|
+
.map((row) => {
|
|
180
|
+
const cat = asObject(row?.category) ?? asObject(row);
|
|
181
|
+
if (!cat)
|
|
182
|
+
return null;
|
|
183
|
+
const items = asArray(cat.items)
|
|
184
|
+
.map((item) => {
|
|
185
|
+
const faq = asObject(item?.faq) ?? asObject(item);
|
|
186
|
+
if (!faq)
|
|
187
|
+
return null;
|
|
188
|
+
const question = String(faq.question ?? faq["faq-question"] ?? "").trim();
|
|
189
|
+
const answer = String(faq.answer ?? faq["faq-answer"] ?? "").trim();
|
|
190
|
+
if (!question || !answer)
|
|
191
|
+
return null;
|
|
192
|
+
return { question, answer };
|
|
193
|
+
})
|
|
194
|
+
.filter(Boolean);
|
|
195
|
+
const category = String(cat.category ?? cat.name ?? "").trim();
|
|
196
|
+
if (!category || items.length === 0)
|
|
197
|
+
return null;
|
|
198
|
+
return {
|
|
199
|
+
category,
|
|
200
|
+
icon: cat.icon,
|
|
201
|
+
color: cat.color,
|
|
202
|
+
items,
|
|
203
|
+
};
|
|
204
|
+
})
|
|
205
|
+
.filter(Boolean);
|
|
206
|
+
if (categories.length) {
|
|
207
|
+
out.helpFaq = {
|
|
208
|
+
eyebrow: helpFaq.eyebrow,
|
|
209
|
+
title: helpFaq.title,
|
|
210
|
+
titleHighlight: helpFaq.titleHighlight,
|
|
211
|
+
subtitle: helpFaq.subtitle ?? helpFaq.description,
|
|
212
|
+
categories,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return out;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Accepts simplified `homepage-config` (site / banners / sections) or legacy shape.
|
|
220
|
+
* Storefront always receives the legacy `HomepageConfig` it already parses.
|
|
221
|
+
*/
|
|
222
|
+
export function normalizeHomepageConfig(input) {
|
|
223
|
+
if (!input || typeof input !== "object")
|
|
224
|
+
return {};
|
|
225
|
+
const raw = input;
|
|
226
|
+
const site = asObject(raw.site);
|
|
227
|
+
const hasSimplifiedSite = Boolean(site);
|
|
228
|
+
if (!hasSimplifiedSite) {
|
|
229
|
+
return raw;
|
|
230
|
+
}
|
|
231
|
+
const { desktop, mobile } = normalizeBanners(raw);
|
|
232
|
+
const sections = normalizeSections(asObject(raw.sections) ?? {});
|
|
233
|
+
const legacy = {
|
|
234
|
+
logo: site?.logo ?? raw.logo,
|
|
235
|
+
"website-description": site?.description ??
|
|
236
|
+
raw["website-description"],
|
|
237
|
+
sections: sections,
|
|
238
|
+
};
|
|
239
|
+
const headerNav = asObject(site?.headerNav) ?? asObject(site?.["header-nav"]) ?? asObject(site?.nav);
|
|
240
|
+
if (headerNav) {
|
|
241
|
+
legacy.headerNav = headerNav;
|
|
242
|
+
}
|
|
243
|
+
const footerNav = asObject(site?.footerNav) ??
|
|
244
|
+
asObject(site?.["footer-nav"]) ??
|
|
245
|
+
asObject(site?.footer);
|
|
246
|
+
if (footerNav) {
|
|
247
|
+
legacy.footerNav = footerNav;
|
|
248
|
+
}
|
|
249
|
+
const footerUi = asObject(site?.footerUi) ??
|
|
250
|
+
asObject(site?.["footer-ui"]) ??
|
|
251
|
+
asObject(site?.footer);
|
|
252
|
+
if (footerUi) {
|
|
253
|
+
legacy.footerUi = footerUi;
|
|
254
|
+
}
|
|
255
|
+
const headerUi = asObject(site?.headerUi) ??
|
|
256
|
+
asObject(site?.["header-ui"]) ??
|
|
257
|
+
asObject(site?.header);
|
|
258
|
+
if (headerUi) {
|
|
259
|
+
legacy.headerUi = headerUi;
|
|
260
|
+
}
|
|
261
|
+
const promoUi = asObject(site?.promoUi) ??
|
|
262
|
+
asObject(site?.["promo-ui"]) ??
|
|
263
|
+
asObject(site?.promo);
|
|
264
|
+
if (promoUi) {
|
|
265
|
+
legacy.promoUi = promoUi;
|
|
266
|
+
}
|
|
267
|
+
if (desktop.length)
|
|
268
|
+
legacy["homepage-banner-array"] = desktop;
|
|
269
|
+
if (mobile.length)
|
|
270
|
+
legacy["app-banner-array"] = mobile;
|
|
271
|
+
const contact = normalizeContact(site);
|
|
272
|
+
if (contact)
|
|
273
|
+
legacy["contact-us"] = contact;
|
|
274
|
+
const social = normalizeSocial(site);
|
|
275
|
+
if (social.length)
|
|
276
|
+
legacy["social-links"] = social;
|
|
277
|
+
const faqs = normalizeFaqs(site);
|
|
278
|
+
if (faqs.length)
|
|
279
|
+
legacy["faq-array"] = faqs;
|
|
280
|
+
return legacy;
|
|
281
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../../src/server/notifications.ts"],"names":[],"mappings":"AAKA,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,gBAgB9E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { sdk } from "../config";
|
|
3
|
+
import { getAuthHeaders } from "../cookies";
|
|
4
|
+
export async function registerNotificationToken(token, deviceInfo) {
|
|
5
|
+
const headers = (await getAuthHeaders());
|
|
6
|
+
try {
|
|
7
|
+
const result = await sdk.client.fetch(`/store/notification-tokens`, {
|
|
8
|
+
method: "POST",
|
|
9
|
+
body: {
|
|
10
|
+
token,
|
|
11
|
+
device_info: deviceInfo,
|
|
12
|
+
},
|
|
13
|
+
headers,
|
|
14
|
+
});
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../../src/server/onboarding.ts"],"names":[],"mappings":"AAIA,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,iBAIzD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { cookies as nextCookies } from "next/headers";
|
|
3
|
+
import { redirect } from "next/navigation";
|
|
4
|
+
export async function resetOnboardingState(orderId) {
|
|
5
|
+
const cookies = await nextCookies();
|
|
6
|
+
cookies.set("_medusa_onboarding", "false", { maxAge: -1 });
|
|
7
|
+
redirect(`http://localhost:7001/a/orders/${orderId}`);
|
|
8
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { HttpTypes } from "@medusajs/types";
|
|
2
|
+
export declare const retrieveOrder: (id: string) => Promise<HttpTypes.StoreOrder>;
|
|
3
|
+
export declare const listOrders: (limit?: number, offset?: number, filters?: Record<string, any>) => Promise<HttpTypes.StoreOrder[]>;
|
|
4
|
+
export declare const createTransferRequest: (state: {
|
|
5
|
+
success: boolean;
|
|
6
|
+
error: string | null;
|
|
7
|
+
order: HttpTypes.StoreOrder | null;
|
|
8
|
+
}, formData: FormData) => Promise<{
|
|
9
|
+
success: boolean;
|
|
10
|
+
error: string | null;
|
|
11
|
+
order: HttpTypes.StoreOrder | null;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const acceptTransferRequest: (id: string, token: string) => Promise<{
|
|
14
|
+
success: boolean;
|
|
15
|
+
error: null;
|
|
16
|
+
order: HttpTypes.StoreOrder;
|
|
17
|
+
} | {
|
|
18
|
+
success: boolean;
|
|
19
|
+
error: any;
|
|
20
|
+
order: null;
|
|
21
|
+
}>;
|
|
22
|
+
export declare const declineTransferRequest: (id: string, token: string) => Promise<{
|
|
23
|
+
success: boolean;
|
|
24
|
+
error: null;
|
|
25
|
+
order: HttpTypes.StoreOrder;
|
|
26
|
+
} | {
|
|
27
|
+
success: boolean;
|
|
28
|
+
error: any;
|
|
29
|
+
order: null;
|
|
30
|
+
}>;
|
|
31
|
+
export declare const downloadInvoice: (orderId: string) => Promise<{
|
|
32
|
+
success: boolean;
|
|
33
|
+
data: string;
|
|
34
|
+
error?: undefined;
|
|
35
|
+
} | {
|
|
36
|
+
success: boolean;
|
|
37
|
+
error: any;
|
|
38
|
+
data?: undefined;
|
|
39
|
+
}>;
|
|
40
|
+
export declare const cancelOrder: (orderId: string, reasonId?: string) => Promise<{
|
|
41
|
+
success: boolean;
|
|
42
|
+
error?: undefined;
|
|
43
|
+
} | {
|
|
44
|
+
success: boolean;
|
|
45
|
+
error: any;
|
|
46
|
+
}>;
|
|
47
|
+
export declare const reorderOrder: (orderId: string, skipVariantIds?: string[], forceReorder?: boolean) => Promise<{
|
|
48
|
+
success: boolean;
|
|
49
|
+
error: string;
|
|
50
|
+
inventory_issues: any;
|
|
51
|
+
data?: undefined;
|
|
52
|
+
} | {
|
|
53
|
+
success: boolean;
|
|
54
|
+
error: any;
|
|
55
|
+
inventory_issues?: undefined;
|
|
56
|
+
data?: undefined;
|
|
57
|
+
} | {
|
|
58
|
+
success: boolean;
|
|
59
|
+
data: any;
|
|
60
|
+
error?: undefined;
|
|
61
|
+
inventory_issues?: undefined;
|
|
62
|
+
}>;
|
|
63
|
+
//# sourceMappingURL=orders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../../src/server/orders.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAmC3C,eAAO,MAAM,aAAa,GAAU,IAAI,MAAM,kCA4B7C,CAAA;AAED,eAAO,MAAM,UAAU,GACrB,QAAO,MAAW,EAClB,SAAQ,MAAU,EAClB,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,oCAc9B,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,OAAO;IACL,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,SAAS,CAAC,UAAU,GAAG,IAAI,CAAA;CACnC,EACD,UAAU,QAAQ,KACjB,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,SAAS,CAAC,UAAU,GAAG,IAAI,CAAA;CACnC,CAoBA,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAU,IAAI,MAAM,EAAE,OAAO,MAAM;;;WAOpC,SAAS,CAAC,UAAU;;;;;EAKpD,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAU,IAAI,MAAM,EAAE,OAAO,MAAM;;;WAOrC,SAAS,CAAC,UAAU;;;;;EAKpD,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,SAAS,MAAM;;;;;;;;EAyBpD,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,SAAS,MAAM,EAAE,WAAW,MAAM;;;;;;EA2BnE,CAAA;AAED,eAAO,MAAM,YAAY,GACvB,SAAS,MAAM,EACf,iBAAiB,MAAM,EAAE,EACzB,eAAc,OAAe;;;;;;;;;;;;;;;EAkF9B,CAAA"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { cookies } from "next/headers";
|
|
3
|
+
import medusaError from "../util/medusa-error";
|
|
4
|
+
import { getCacheTag, setBuyNowCartId, removeBuyNowCartId, } from "../cookies";
|
|
5
|
+
import { listReturnReasons } from "./returns";
|
|
6
|
+
import { revalidateTag } from "next/cache";
|
|
7
|
+
import { extractReorderCartId, medusaGuestOrderCancel, medusaGuestOrderReorder, medusaOrderAcceptTransfer, medusaOrderCancel, medusaOrderDeclineTransfer, medusaOrderDownloadInvoice, medusaOrderList, medusaOrderReorder, medusaOrderRequestTransfer, medusaOrderRetrieve, MEDUSA_ORDER_DETAIL_FIELDS, } from "medusa-services/orders";
|
|
8
|
+
import { medusaCartRemoveLineItem, medusaCartRetrieve, medusaCartSkipMerge, medusaCartUpdate, } from "medusa-services/cart";
|
|
9
|
+
import { getGuestStoreClientOptions, getStoreClientOptions, getStoreClientOptionsWithToken, } from "../util/store-client";
|
|
10
|
+
function throwOrderError(error) {
|
|
11
|
+
if (error && typeof error === "object" && "response" in error) {
|
|
12
|
+
medusaError(error);
|
|
13
|
+
}
|
|
14
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
15
|
+
}
|
|
16
|
+
export const retrieveOrder = async (id) => {
|
|
17
|
+
const cookieStore = await cookies();
|
|
18
|
+
const token = cookieStore.get("_medusa_jwt")?.value;
|
|
19
|
+
const guestToken = !token
|
|
20
|
+
? (cookieStore.get("_medusa_guest_jwt")?.value ||
|
|
21
|
+
cookieStore.get("_medusa_guest_token")?.value)
|
|
22
|
+
: null;
|
|
23
|
+
try {
|
|
24
|
+
if (guestToken && !token) {
|
|
25
|
+
const options = await getStoreClientOptionsWithToken(guestToken);
|
|
26
|
+
const { order } = await medusaOrderRetrieve(id, options, {
|
|
27
|
+
fields: MEDUSA_ORDER_DETAIL_FIELDS,
|
|
28
|
+
});
|
|
29
|
+
if (!order) {
|
|
30
|
+
throw new Error("Order not found or access denied");
|
|
31
|
+
}
|
|
32
|
+
return order;
|
|
33
|
+
}
|
|
34
|
+
const options = await getStoreClientOptions();
|
|
35
|
+
const { order } = await medusaOrderRetrieve(id, options, {
|
|
36
|
+
fields: MEDUSA_ORDER_DETAIL_FIELDS,
|
|
37
|
+
});
|
|
38
|
+
return order;
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
throwOrderError(err);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
export const listOrders = async (limit = 10, offset = 0, filters) => {
|
|
45
|
+
try {
|
|
46
|
+
const options = await getStoreClientOptions();
|
|
47
|
+
const { orders } = await medusaOrderList(options, {
|
|
48
|
+
limit,
|
|
49
|
+
offset,
|
|
50
|
+
order: "-created_at",
|
|
51
|
+
...filters,
|
|
52
|
+
});
|
|
53
|
+
return orders;
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
throwOrderError(err);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
export const createTransferRequest = async (state, formData) => {
|
|
60
|
+
const id = formData.get("order_id");
|
|
61
|
+
if (!id) {
|
|
62
|
+
return { success: false, error: "Order ID is required", order: null };
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const options = await getStoreClientOptions();
|
|
66
|
+
const { order } = await medusaOrderRequestTransfer(id, options, {
|
|
67
|
+
fields: "id, email",
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
success: true,
|
|
71
|
+
error: null,
|
|
72
|
+
order: order,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
return { success: false, error: err.message, order: null };
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
export const acceptTransferRequest = async (id, token) => {
|
|
80
|
+
try {
|
|
81
|
+
const options = await getStoreClientOptions();
|
|
82
|
+
const { order } = await medusaOrderAcceptTransfer(id, token, options);
|
|
83
|
+
return {
|
|
84
|
+
success: true,
|
|
85
|
+
error: null,
|
|
86
|
+
order: order,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
return { success: false, error: err.message, order: null };
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
export const declineTransferRequest = async (id, token) => {
|
|
94
|
+
try {
|
|
95
|
+
const options = await getStoreClientOptions();
|
|
96
|
+
const { order } = await medusaOrderDeclineTransfer(id, token, options);
|
|
97
|
+
return {
|
|
98
|
+
success: true,
|
|
99
|
+
error: null,
|
|
100
|
+
order: order,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
return { success: false, error: err.message, order: null };
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
export const downloadInvoice = async (orderId) => {
|
|
108
|
+
try {
|
|
109
|
+
const cookieStore = await cookies();
|
|
110
|
+
const token = cookieStore.get("_medusa_jwt")?.value;
|
|
111
|
+
const guestToken = !token
|
|
112
|
+
? (cookieStore.get("_medusa_guest_jwt")?.value ||
|
|
113
|
+
cookieStore.get("_medusa_guest_token")?.value)
|
|
114
|
+
: null;
|
|
115
|
+
let arrayBuffer;
|
|
116
|
+
if (token) {
|
|
117
|
+
const options = await getStoreClientOptionsWithToken(token);
|
|
118
|
+
arrayBuffer = await medusaOrderDownloadInvoice(orderId, options, false);
|
|
119
|
+
}
|
|
120
|
+
else if (guestToken) {
|
|
121
|
+
const options = await getStoreClientOptionsWithToken(guestToken);
|
|
122
|
+
arrayBuffer = await medusaOrderDownloadInvoice(orderId, options, true);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
throw new Error("Unauthorized: No valid session found");
|
|
126
|
+
}
|
|
127
|
+
const base64 = Buffer.from(arrayBuffer).toString("base64");
|
|
128
|
+
return { success: true, data: base64 };
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
return { success: false, error: error.message };
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
export const cancelOrder = async (orderId, reasonId) => {
|
|
135
|
+
try {
|
|
136
|
+
const cookieStore = await cookies();
|
|
137
|
+
const token = cookieStore.get("_medusa_jwt")?.value;
|
|
138
|
+
const guestOptions = await getGuestStoreClientOptions();
|
|
139
|
+
let finalReasonId = reasonId;
|
|
140
|
+
if (!finalReasonId) {
|
|
141
|
+
const reasons = await listReturnReasons();
|
|
142
|
+
finalReasonId = reasons.find((r) => r.value === "other")?.id || reasons[0]?.id || "other";
|
|
143
|
+
}
|
|
144
|
+
if (token) {
|
|
145
|
+
const options = await getStoreClientOptionsWithToken(token);
|
|
146
|
+
await medusaOrderCancel(orderId, finalReasonId, options);
|
|
147
|
+
return { success: true };
|
|
148
|
+
}
|
|
149
|
+
if (guestOptions) {
|
|
150
|
+
await medusaGuestOrderCancel(orderId, finalReasonId, guestOptions);
|
|
151
|
+
return { success: true };
|
|
152
|
+
}
|
|
153
|
+
return { success: false, error: "Unauthorized: No valid session found" };
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
return { success: false, error: error.message };
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
export const reorderOrder = async (orderId, skipVariantIds, forceReorder = false) => {
|
|
160
|
+
try {
|
|
161
|
+
const cookieStore = await cookies();
|
|
162
|
+
const token = cookieStore.get("_medusa_jwt")?.value;
|
|
163
|
+
const guestOptions = await getGuestStoreClientOptions();
|
|
164
|
+
let result;
|
|
165
|
+
if (token) {
|
|
166
|
+
const options = await getStoreClientOptionsWithToken(token);
|
|
167
|
+
result = await medusaOrderReorder(orderId, options, { force_reorder: forceReorder });
|
|
168
|
+
}
|
|
169
|
+
else if (guestOptions) {
|
|
170
|
+
result = await medusaGuestOrderReorder(orderId, guestOptions, {
|
|
171
|
+
force_reorder: forceReorder,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
return { success: false, error: "Unauthorized: Please log in to reorder." };
|
|
176
|
+
}
|
|
177
|
+
if (!result.ok) {
|
|
178
|
+
if (result.status === 409 && result.data.inventory_issues) {
|
|
179
|
+
return {
|
|
180
|
+
success: false,
|
|
181
|
+
error: "Inventory issues found",
|
|
182
|
+
inventory_issues: result.data.inventory_issues,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
return { success: false, error: result.data.message || "Failed to reorder" };
|
|
186
|
+
}
|
|
187
|
+
const data = result.data;
|
|
188
|
+
const newCartId = extractReorderCartId(data);
|
|
189
|
+
const cartOptions = token
|
|
190
|
+
? await getStoreClientOptionsWithToken(token)
|
|
191
|
+
: guestOptions;
|
|
192
|
+
if (newCartId) {
|
|
193
|
+
try {
|
|
194
|
+
await medusaCartUpdate(newCartId, { metadata: { is_reorder: true } }, cartOptions);
|
|
195
|
+
await medusaCartSkipMerge(newCartId, cartOptions);
|
|
196
|
+
}
|
|
197
|
+
catch (updateErr) {
|
|
198
|
+
console.error("[Reorder] Error updating cart metadata or skipping merge:", updateErr);
|
|
199
|
+
}
|
|
200
|
+
if (skipVariantIds && skipVariantIds.length > 0) {
|
|
201
|
+
try {
|
|
202
|
+
const { cart } = await medusaCartRetrieve(newCartId, cartOptions);
|
|
203
|
+
const items = cart.items ?? [];
|
|
204
|
+
for (const item of items) {
|
|
205
|
+
const variantId = item.variant_id;
|
|
206
|
+
const lineId = item.id;
|
|
207
|
+
if (variantId &&
|
|
208
|
+
lineId &&
|
|
209
|
+
skipVariantIds.includes(variantId)) {
|
|
210
|
+
await medusaCartRemoveLineItem(newCartId, lineId, cartOptions);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch (removeErr) {
|
|
215
|
+
console.error("[Reorder] Error removing skipped items:", removeErr);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
await removeBuyNowCartId();
|
|
219
|
+
await setBuyNowCartId(newCartId);
|
|
220
|
+
revalidateTag("carts");
|
|
221
|
+
const cartCacheTag = await getCacheTag("carts");
|
|
222
|
+
if (cartCacheTag)
|
|
223
|
+
revalidateTag(cartCacheTag);
|
|
224
|
+
}
|
|
225
|
+
return { success: true, data };
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
return { success: false, error: error.message };
|
|
229
|
+
}
|
|
230
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import type { DynamicConfigResponse, HomepageConfig } from "./homepage-config.types";
|
|
3
|
+
/** Full `homepage-config` blob passed from the main project into pages and layout. */
|
|
4
|
+
export type StorefrontPageInput = HomepageConfig;
|
|
5
|
+
export declare const DEFAULT_PAGE_INPUT: StorefrontPageInput;
|
|
6
|
+
/**
|
|
7
|
+
* Merge CMS / main-project overrides onto package JSON defaults.
|
|
8
|
+
* Empty strings and empty arrays are ignored (same rules as section merge).
|
|
9
|
+
*/
|
|
10
|
+
export declare function mergePageInputWithDefaults(override?: HomepageConfig | null): StorefrontPageInput;
|
|
11
|
+
/** Resolve page input: explicit override, or package defaults. */
|
|
12
|
+
export declare function resolvePageInput(pageInput?: HomepageConfig | null): StorefrontPageInput;
|
|
13
|
+
/**
|
|
14
|
+
* Medusa plugin split keys (`site-branding`, `contact`, `faqs`, `homepage-sections`)
|
|
15
|
+
* → simplified `{ site, sections }` for {@link normalizeHomepageConfig}.
|
|
16
|
+
*/
|
|
17
|
+
export declare function simplifiedHomepageConfigFromDynamicResponse(response: DynamicConfigResponse | null | undefined): HomepageConfig | null;
|
|
18
|
+
/** CMS-only homepage config (no package JSON defaults). */
|
|
19
|
+
export declare function homepageConfigFromDynamicResponseNormalized(response: DynamicConfigResponse | null | undefined): HomepageConfig;
|
|
20
|
+
/**
|
|
21
|
+
* Build `homepage-config` from Medusa `GET /store/dynamic-config` (main project only).
|
|
22
|
+
* Supports legacy `homepage-config`, split plugin keys, and `hero-banners`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function homepageConfigFromDynamicResponse(response: DynamicConfigResponse | null | undefined): StorefrontPageInput;
|
|
25
|
+
//# sourceMappingURL=page-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-input.d.ts","sourceRoot":"","sources":["../../../src/server/page-input.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAGpB,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACf,MAAM,yBAAyB,CAAA;AA2FhC,sFAAsF;AACtF,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEhD,eAAO,MAAM,kBAAkB,EACM,mBAAmB,CAAA;AAExD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,GAC/B,mBAAmB,CA6BrB;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAC9B,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI,GAChC,mBAAmB,CAErB;AAED;;;GAGG;AACH,wBAAgB,2CAA2C,CACzD,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GACjD,cAAc,GAAG,IAAI,CAkCvB;AAED,2DAA2D;AAC3D,wBAAgB,2CAA2C,CACzD,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GACjD,cAAc,CAMhB;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GACjD,mBAAmB,CAGrB"}
|