medusa-storefront-data 1.0.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.
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +31 -0
- package/dist/cookies.d.ts +23 -0
- package/dist/cookies.d.ts.map +1 -0
- package/dist/cookies.js +140 -0
- package/dist/server/cart.d.ts +92 -0
- package/dist/server/cart.d.ts.map +1 -0
- package/dist/server/cart.js +827 -0
- package/dist/server/categories.d.ts +3 -0
- package/dist/server/categories.d.ts.map +1 -0
- package/dist/server/categories.js +71 -0
- package/dist/server/collections.d.ts +8 -0
- package/dist/server/collections.d.ts.map +1 -0
- package/dist/server/collections.js +84 -0
- package/dist/server/customer-registration.d.ts +142 -0
- package/dist/server/customer-registration.d.ts.map +1 -0
- package/dist/server/customer-registration.js +295 -0
- package/dist/server/customer.d.ts +48 -0
- package/dist/server/customer.d.ts.map +1 -0
- package/dist/server/customer.js +462 -0
- package/dist/server/dynamic-config.d.ts +125 -0
- package/dist/server/dynamic-config.d.ts.map +1 -0
- package/dist/server/dynamic-config.js +263 -0
- package/dist/server/fulfillment.d.ts +4 -0
- package/dist/server/fulfillment.d.ts.map +1 -0
- package/dist/server/fulfillment.js +72 -0
- package/dist/server/guest.d.ts +109 -0
- package/dist/server/guest.d.ts.map +1 -0
- package/dist/server/guest.js +304 -0
- package/dist/server/index.d.ts +21 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +20 -0
- package/dist/server/locale-actions.d.ts +14 -0
- package/dist/server/locale-actions.d.ts.map +1 -0
- package/dist/server/locale-actions.js +63 -0
- package/dist/server/locales.d.ts +10 -0
- package/dist/server/locales.d.ts.map +1 -0
- package/dist/server/locales.js +20 -0
- package/dist/server/notifications.d.ts +2 -0
- package/dist/server/notifications.d.ts.map +1 -0
- package/dist/server/notifications.js +20 -0
- package/dist/server/onboarding.d.ts +2 -0
- package/dist/server/onboarding.d.ts.map +1 -0
- package/dist/server/onboarding.js +8 -0
- package/dist/server/orders.d.ts +69 -0
- package/dist/server/orders.d.ts.map +1 -0
- package/dist/server/orders.js +371 -0
- package/dist/server/payment-details.d.ts +5 -0
- package/dist/server/payment-details.d.ts.map +1 -0
- package/dist/server/payment-details.js +53 -0
- package/dist/server/payment.d.ts +2 -0
- package/dist/server/payment.d.ts.map +1 -0
- package/dist/server/payment.js +25 -0
- package/dist/server/products.d.ts +58 -0
- package/dist/server/products.d.ts.map +1 -0
- package/dist/server/products.js +285 -0
- package/dist/server/regions.d.ts +5 -0
- package/dist/server/regions.d.ts.map +1 -0
- package/dist/server/regions.js +54 -0
- package/dist/server/returns.d.ts +29 -0
- package/dist/server/returns.d.ts.map +1 -0
- package/dist/server/returns.js +236 -0
- package/dist/server/swaps.d.ts +14 -0
- package/dist/server/swaps.d.ts.map +1 -0
- package/dist/server/swaps.js +123 -0
- package/dist/server/variants.d.ts +3 -0
- package/dist/server/variants.d.ts.map +1 -0
- package/dist/server/variants.js +26 -0
- package/dist/util/get-locale-header.d.ts +4 -0
- package/dist/util/get-locale-header.d.ts.map +1 -0
- package/dist/util/get-locale-header.js +7 -0
- package/dist/util/medusa-error.d.ts +2 -0
- package/dist/util/medusa-error.d.ts.map +1 -0
- package/dist/util/medusa-error.js +18 -0
- package/package.json +152 -0
- package/src/config.ts +39 -0
- package/src/cookies.ts +171 -0
- package/src/middleware.ts +2 -0
- package/src/server/cart.ts +1054 -0
- package/src/server/categories.ts +94 -0
- package/src/server/collections.ts +113 -0
- package/src/server/customer-registration.ts +349 -0
- package/src/server/customer.ts +581 -0
- package/src/server/dynamic-config.ts +403 -0
- package/src/server/fulfillment.ts +97 -0
- package/src/server/guest.ts +333 -0
- package/src/server/index.ts +21 -0
- package/src/server/locale-actions.ts +74 -0
- package/src/server/locales.ts +28 -0
- package/src/server/notifications.ts +22 -0
- package/src/server/onboarding.ts +9 -0
- package/src/server/orders.ts +467 -0
- package/src/server/payment-details.ts +69 -0
- package/src/server/payment.ts +35 -0
- package/src/server/products.ts +378 -0
- package/src/server/regions.ts +66 -0
- package/src/server/returns.ts +294 -0
- package/src/server/swaps.ts +150 -0
- package/src/server/variants.ts +38 -0
- package/src/server/wishlist.ts +64 -0
- package/src/services/middleware.ts +54 -0
- package/src/util/get-locale-header.ts +8 -0
- package/src/util/medusa-error.ts +19 -0
- package/src/util/sort-products.ts +47 -0
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
"use server"
|
|
2
|
+
|
|
3
|
+
import { cache } from "react"
|
|
4
|
+
import { getAuthHeaders } from "../cookies"
|
|
5
|
+
|
|
6
|
+
// Define the structure based on the actual API response and client usage
|
|
7
|
+
export interface DynamicConfig {
|
|
8
|
+
"homepage-config"?: {
|
|
9
|
+
logo?: string
|
|
10
|
+
"homepage-banner-array"?: Array<{
|
|
11
|
+
"homepage-banner"?: {
|
|
12
|
+
"homepage-banner-image"?: string
|
|
13
|
+
"homepage-banner-title"?: string
|
|
14
|
+
"homepage-banner-subtitle"?: string
|
|
15
|
+
"homepage-banner-description"?: string
|
|
16
|
+
"homepage-banner-button-name"?: string
|
|
17
|
+
"homepage-banner-button-link"?: string
|
|
18
|
+
}
|
|
19
|
+
}>
|
|
20
|
+
"app-banner-array"?: Array<{
|
|
21
|
+
"app-banner"?: {
|
|
22
|
+
"app-banner-image"?: string
|
|
23
|
+
"app-banner-title"?: string
|
|
24
|
+
"app-banner-subtitle"?: string
|
|
25
|
+
"app-banner-description"?: string
|
|
26
|
+
"app-banner-button-name"?: string
|
|
27
|
+
"app-banner-button-link"?: string
|
|
28
|
+
"app-banner-link"?: string
|
|
29
|
+
}
|
|
30
|
+
}>
|
|
31
|
+
"website-description"?: string
|
|
32
|
+
"website_description"?: string
|
|
33
|
+
"why-choose-us-title"?: string
|
|
34
|
+
"why-choose-us-features"?: Array<{
|
|
35
|
+
feature?: {
|
|
36
|
+
"feature-name"?: string
|
|
37
|
+
"feature-icon"?: string
|
|
38
|
+
}
|
|
39
|
+
// Handle potential direct structure if any
|
|
40
|
+
"feature-name"?: string
|
|
41
|
+
"feature-icon"?: string
|
|
42
|
+
}>
|
|
43
|
+
"contact-us"?: {
|
|
44
|
+
"contact-phone"?: string
|
|
45
|
+
"contact-email"?: string
|
|
46
|
+
"contact-address"?: string
|
|
47
|
+
}
|
|
48
|
+
"social-links"?: Array<{
|
|
49
|
+
"social-link"?: {
|
|
50
|
+
"social-platform-name"?: string
|
|
51
|
+
"social-platform-icon"?: string
|
|
52
|
+
"social-platform-url"?: string
|
|
53
|
+
}
|
|
54
|
+
// Handle potential direct structure if any
|
|
55
|
+
"social-platform-name"?: string
|
|
56
|
+
"social-platform-icon"?: string
|
|
57
|
+
"social-platform-url"?: string
|
|
58
|
+
}>
|
|
59
|
+
"promo-bar"?: {
|
|
60
|
+
"promo-text"?: string
|
|
61
|
+
"promo-code"?: string
|
|
62
|
+
"promo-value"?: string
|
|
63
|
+
"promo-active"?: boolean
|
|
64
|
+
}
|
|
65
|
+
// Allow for other properties
|
|
66
|
+
[key: string]: any
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export const getDynamicConfig = cache(async (): Promise<DynamicConfig | null> => {
|
|
71
|
+
try {
|
|
72
|
+
const publishableKey = process.env.NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY
|
|
73
|
+
const baseUrl = process.env.MEDUSA_BACKEND_URL || "http://localhost:9000"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
if (!publishableKey) {
|
|
78
|
+
|
|
79
|
+
return null
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const authHeaders = await getAuthHeaders()
|
|
83
|
+
|
|
84
|
+
const headers: Record<string, string> = {
|
|
85
|
+
"Content-Type": "application/json",
|
|
86
|
+
"Accept": "application/json",
|
|
87
|
+
"x-publishable-api-key": publishableKey,
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (authHeaders && "authorization" in authHeaders) {
|
|
91
|
+
headers["authorization"] = authHeaders.authorization
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const fetchStart = Date.now()
|
|
95
|
+
const response = await fetch(`${baseUrl}/store/dynamic-config`, {
|
|
96
|
+
method: "GET",
|
|
97
|
+
headers,
|
|
98
|
+
cache: "no-store",
|
|
99
|
+
})
|
|
100
|
+
const duration = Date.now() - fetchStart
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
|
|
106
|
+
return null
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const data = await response.json()
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
return data
|
|
113
|
+
} catch (error) {
|
|
114
|
+
|
|
115
|
+
return null
|
|
116
|
+
}
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
export const getLogoFromConfig = async (): Promise<string | null> => {
|
|
120
|
+
try {
|
|
121
|
+
const config = await getDynamicConfig()
|
|
122
|
+
const logo = config?.["homepage-config"]?.logo
|
|
123
|
+
|
|
124
|
+
return logo || null
|
|
125
|
+
} catch (error) {
|
|
126
|
+
|
|
127
|
+
return null
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export const getBannerImageFromConfig = async (): Promise<string | null> => {
|
|
132
|
+
try {
|
|
133
|
+
const config = await getDynamicConfig()
|
|
134
|
+
const bannerArray = config?.["homepage-config"]?.["homepage-banner-array"]
|
|
135
|
+
|
|
136
|
+
if (bannerArray && bannerArray.length > 0) {
|
|
137
|
+
const firstBanner = bannerArray[0]
|
|
138
|
+
const image = firstBanner?.["homepage-banner"]?.["homepage-banner-image"]
|
|
139
|
+
|
|
140
|
+
return image || null
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
return null
|
|
145
|
+
} catch (error) {
|
|
146
|
+
|
|
147
|
+
return null
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export const getMobileBannerFromConfig = async (): Promise<{ image: string | null; link: string | null }> => {
|
|
152
|
+
try {
|
|
153
|
+
const config = await getDynamicConfig()
|
|
154
|
+
const bannerArray = config?.["homepage-config"]?.["app-banner-array"]
|
|
155
|
+
|
|
156
|
+
if (bannerArray && bannerArray.length > 0) {
|
|
157
|
+
const firstBanner = bannerArray[0]
|
|
158
|
+
const image = firstBanner?.["app-banner"]?.["app-banner-image"] || null
|
|
159
|
+
const link = firstBanner?.["app-banner"]?.["app-banner-button-link"] || firstBanner?.["app-banner"]?.["app-banner-link"] || null
|
|
160
|
+
|
|
161
|
+
return { image, link }
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
return { image: null, link: null }
|
|
166
|
+
} catch (error) {
|
|
167
|
+
|
|
168
|
+
return { image: null, link: null }
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export const getHomeBannersFromConfig = async (): Promise<Array<{
|
|
173
|
+
image?: string;
|
|
174
|
+
title?: string;
|
|
175
|
+
subtitle?: string;
|
|
176
|
+
description?: string;
|
|
177
|
+
buttonName?: string;
|
|
178
|
+
buttonLink?: string;
|
|
179
|
+
}> | null> => {
|
|
180
|
+
try {
|
|
181
|
+
const config = await getDynamicConfig()
|
|
182
|
+
const bannerArray = config?.["homepage-config"]?.["homepage-banner-array"]
|
|
183
|
+
|
|
184
|
+
if (bannerArray && bannerArray.length > 0) {
|
|
185
|
+
return bannerArray.map(item => {
|
|
186
|
+
const banner = item["homepage-banner"]
|
|
187
|
+
return {
|
|
188
|
+
image: banner?.["homepage-banner-image"],
|
|
189
|
+
title: banner?.["homepage-banner-title"],
|
|
190
|
+
subtitle: banner?.["homepage-banner-subtitle"],
|
|
191
|
+
description: banner?.["homepage-banner-description"],
|
|
192
|
+
buttonName: banner?.["homepage-banner-button-name"],
|
|
193
|
+
buttonLink: banner?.["homepage-banner-button-link"],
|
|
194
|
+
}
|
|
195
|
+
})
|
|
196
|
+
}
|
|
197
|
+
return null
|
|
198
|
+
} catch (error) {
|
|
199
|
+
|
|
200
|
+
return null
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export const getAppBannersFromConfig = async (): Promise<Array<{
|
|
205
|
+
image?: string;
|
|
206
|
+
title?: string;
|
|
207
|
+
subtitle?: string;
|
|
208
|
+
description?: string;
|
|
209
|
+
buttonName?: string;
|
|
210
|
+
buttonLink?: string;
|
|
211
|
+
}> | null> => {
|
|
212
|
+
try {
|
|
213
|
+
const config = await getDynamicConfig()
|
|
214
|
+
const bannerArray = config?.["homepage-config"]?.["app-banner-array"]
|
|
215
|
+
|
|
216
|
+
if (bannerArray && bannerArray.length > 0) {
|
|
217
|
+
return bannerArray.map(item => {
|
|
218
|
+
const banner = item["app-banner"]
|
|
219
|
+
return {
|
|
220
|
+
image: banner?.["app-banner-image"],
|
|
221
|
+
title: banner?.["app-banner-title"],
|
|
222
|
+
subtitle: banner?.["app-banner-subtitle"],
|
|
223
|
+
description: banner?.["app-banner-description"],
|
|
224
|
+
buttonName: banner?.["app-banner-button-name"],
|
|
225
|
+
buttonLink: banner?.["app-banner-button-link"],
|
|
226
|
+
}
|
|
227
|
+
})
|
|
228
|
+
}
|
|
229
|
+
return null
|
|
230
|
+
} catch (error) {
|
|
231
|
+
|
|
232
|
+
return null
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Legacy function for backward compatibility
|
|
237
|
+
export const getMobileBannerImageFromConfig = async (): Promise<string | null> => {
|
|
238
|
+
const { image } = await getMobileBannerFromConfig()
|
|
239
|
+
return image
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
export const getWebsiteDescriptionFromConfig = async (): Promise<string | null> => {
|
|
243
|
+
try {
|
|
244
|
+
const config = await getDynamicConfig()
|
|
245
|
+
const homepageConfig = config?.["homepage-config"]
|
|
246
|
+
const desc = homepageConfig?.["website-description"] || homepageConfig?.["website_description"]
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
return desc || null
|
|
250
|
+
} catch (error) {
|
|
251
|
+
|
|
252
|
+
return null
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
export const getFeaturesFromConfig = async (): Promise<{ title: string; features: Array<{ name: string; icon: string }> } | null> => {
|
|
257
|
+
try {
|
|
258
|
+
const config = await getDynamicConfig()
|
|
259
|
+
const homepageConfig = config?.["homepage-config"]
|
|
260
|
+
|
|
261
|
+
if (!homepageConfig) return null
|
|
262
|
+
|
|
263
|
+
const title = homepageConfig["why-choose-us-title"] || "Why Choose Chocomelon?"
|
|
264
|
+
const featuresRaw = homepageConfig["why-choose-us-features"] || []
|
|
265
|
+
|
|
266
|
+
const features = featuresRaw.map((item: any) => {
|
|
267
|
+
const feature = item?.feature || item
|
|
268
|
+
return {
|
|
269
|
+
name: feature?.["feature-name"] || "",
|
|
270
|
+
icon: feature?.["feature-icon"] || "",
|
|
271
|
+
}
|
|
272
|
+
}).filter((f: any) => f.name && f.icon)
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
return { title, features }
|
|
276
|
+
} catch (error) {
|
|
277
|
+
|
|
278
|
+
return null
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export const getContactInfoFromConfig = async (): Promise<{ phone?: string; email?: string; address?: string } | null> => {
|
|
283
|
+
try {
|
|
284
|
+
const config = await getDynamicConfig()
|
|
285
|
+
const contactConfig = config?.["homepage-config"]?.["contact-us"]
|
|
286
|
+
|
|
287
|
+
if (!contactConfig) {
|
|
288
|
+
|
|
289
|
+
return null
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
return {
|
|
295
|
+
phone: contactConfig["contact-phone"],
|
|
296
|
+
email: contactConfig["contact-email"],
|
|
297
|
+
address: contactConfig["contact-address"],
|
|
298
|
+
}
|
|
299
|
+
} catch (error) {
|
|
300
|
+
|
|
301
|
+
return null
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export const getTestimonialsFromConfig = async (): Promise<{ title: string; testimonials: Array<{ id: string; text: string; name: string; rating: number; avatar?: string }> } | null> => {
|
|
306
|
+
try {
|
|
307
|
+
const config = await getDynamicConfig()
|
|
308
|
+
const homepageConfig = config?.["homepage-config"]
|
|
309
|
+
|
|
310
|
+
if (!homepageConfig) return null
|
|
311
|
+
|
|
312
|
+
const title = homepageConfig["rating-title"] || "Happy Parents Say About Us"
|
|
313
|
+
const ratings = homepageConfig["ratings"] || []
|
|
314
|
+
|
|
315
|
+
const testimonials = ratings.map((item: any, index: number) => {
|
|
316
|
+
const review = item?.review || item
|
|
317
|
+
return {
|
|
318
|
+
id: `review-${index}`,
|
|
319
|
+
text: review?.["review-description"] || "",
|
|
320
|
+
name: review?.["review-user-name"] || "",
|
|
321
|
+
rating: parseFloat(review?.["review-rating"] || "5"),
|
|
322
|
+
avatar: review?.["review-profile-image"] || undefined,
|
|
323
|
+
}
|
|
324
|
+
}).filter((t: any) => t.text && t.name)
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
return { title, testimonials }
|
|
329
|
+
} catch (error) {
|
|
330
|
+
|
|
331
|
+
return null
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
export const getSocialLinksFromConfig = async (): Promise<Array<{ name: string; url: string; icon?: string }> | null> => {
|
|
336
|
+
try {
|
|
337
|
+
const config = await getDynamicConfig()
|
|
338
|
+
const socialLinksRaw = config?.["homepage-config"]?.["social-links"] || []
|
|
339
|
+
|
|
340
|
+
const socialLinks = socialLinksRaw.map((item: any) => {
|
|
341
|
+
const link = item?.["social-link"] || item
|
|
342
|
+
return {
|
|
343
|
+
name: link?.["social-platform-name"] || "",
|
|
344
|
+
url: link?.["social-platform-url"] || "",
|
|
345
|
+
icon: link?.["social-platform-icon"] || undefined,
|
|
346
|
+
}
|
|
347
|
+
}).filter((l: any) => l.name && l.url)
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
return socialLinks.length > 0 ? socialLinks : null
|
|
351
|
+
} catch (error) {
|
|
352
|
+
|
|
353
|
+
return null
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
export const getFaqsFromConfig = async (): Promise<Array<{ category: string; items: Array<{ q: string; a: string }> }> | null> => {
|
|
358
|
+
try {
|
|
359
|
+
const config = await getDynamicConfig()
|
|
360
|
+
const faqsRaw = config?.["homepage-config"]?.["faq-array"] || []
|
|
361
|
+
|
|
362
|
+
if (!Array.isArray(faqsRaw) || faqsRaw.length === 0) return null
|
|
363
|
+
|
|
364
|
+
const categoriesMap: Record<string, { displayCategory: string, items: Array<{q: string; a: string}> }> = {}
|
|
365
|
+
|
|
366
|
+
faqsRaw.forEach((item: any) => {
|
|
367
|
+
const faq = item?.["faq"] || item
|
|
368
|
+
const displayCategory = (faq?.["faq-category"] || "General Questions").trim()
|
|
369
|
+
const categoryKey = displayCategory.toLowerCase()
|
|
370
|
+
const q = (faq?.["faq-question"] || "").trim()
|
|
371
|
+
const a = (faq?.["faq-answer"] || "").trim()
|
|
372
|
+
|
|
373
|
+
if (q && a) {
|
|
374
|
+
if (!categoriesMap[categoryKey]) categoriesMap[categoryKey] = { displayCategory, items: [] }
|
|
375
|
+
categoriesMap[categoryKey].items.push({ q, a })
|
|
376
|
+
}
|
|
377
|
+
})
|
|
378
|
+
|
|
379
|
+
const faqs = Object.values(categoriesMap).map(catData => ({
|
|
380
|
+
category: catData.displayCategory,
|
|
381
|
+
items: catData.items
|
|
382
|
+
}))
|
|
383
|
+
|
|
384
|
+
return faqs.length > 0 ? faqs : null
|
|
385
|
+
} catch (error) {
|
|
386
|
+
return null
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
export const getPromoBarConfig = async (): Promise<{ text: string | null; code: string | null; value: string | null; active: boolean }> => {
|
|
390
|
+
try {
|
|
391
|
+
const config = await getDynamicConfig()
|
|
392
|
+
const promoConfig = config?.["homepage-config"]?.["promo-bar"]
|
|
393
|
+
|
|
394
|
+
return {
|
|
395
|
+
text: promoConfig?.["promo-text"] || null,
|
|
396
|
+
code: promoConfig?.["promo-code"] || null,
|
|
397
|
+
value: promoConfig?.["promo-value"] || null,
|
|
398
|
+
active: promoConfig?.["promo-active"] ?? false
|
|
399
|
+
}
|
|
400
|
+
} catch (error) {
|
|
401
|
+
return { text: null, code: null, value: null, active: false }
|
|
402
|
+
}
|
|
403
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use server"
|
|
2
|
+
|
|
3
|
+
import { sdk } from "../config"
|
|
4
|
+
import { HttpTypes } from "@medusajs/types"
|
|
5
|
+
import { getAuthHeaders, getCacheOptions } from "../cookies"
|
|
6
|
+
|
|
7
|
+
export const listCartShippingMethods = async (cartId: string) => {
|
|
8
|
+
const headers = {
|
|
9
|
+
...(await getAuthHeaders()),
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const next = {
|
|
13
|
+
...(await getCacheOptions("fulfillment")),
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return sdk.client
|
|
17
|
+
.fetch<HttpTypes.StoreShippingOptionListResponse>(
|
|
18
|
+
`/store/shipping-options`,
|
|
19
|
+
{
|
|
20
|
+
method: "GET",
|
|
21
|
+
query: {
|
|
22
|
+
cart_id: cartId,
|
|
23
|
+
},
|
|
24
|
+
headers,
|
|
25
|
+
next,
|
|
26
|
+
cache: "force-cache",
|
|
27
|
+
}
|
|
28
|
+
)
|
|
29
|
+
.then(({ shipping_options }) => shipping_options)
|
|
30
|
+
.catch(() => {
|
|
31
|
+
return null
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const calculatePriceForShippingOption = async (
|
|
36
|
+
optionId: string,
|
|
37
|
+
cartId: string,
|
|
38
|
+
data?: Record<string, unknown>
|
|
39
|
+
) => {
|
|
40
|
+
const headers = {
|
|
41
|
+
...(await getAuthHeaders()),
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const next = {
|
|
45
|
+
...(await getCacheOptions("fulfillment")),
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const body = { cart_id: cartId, data }
|
|
49
|
+
|
|
50
|
+
if (data) {
|
|
51
|
+
body.data = data
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return sdk.client
|
|
55
|
+
.fetch<{ shipping_option: HttpTypes.StoreCartShippingOption }>(
|
|
56
|
+
`/store/shipping-options/${optionId}/calculate`,
|
|
57
|
+
{
|
|
58
|
+
method: "POST",
|
|
59
|
+
body,
|
|
60
|
+
headers,
|
|
61
|
+
next,
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
.then(({ shipping_option }) => shipping_option)
|
|
65
|
+
.catch((e) => {
|
|
66
|
+
return null
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export const getShiprocketServiceability = async (pincode: string, variant_id: string, cod: number = 0) => {
|
|
71
|
+
const headers = {
|
|
72
|
+
...(await getAuthHeaders()),
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return sdk.client
|
|
76
|
+
.fetch<any>(
|
|
77
|
+
`/store/shiprocket/serviceability`,
|
|
78
|
+
{
|
|
79
|
+
method: "GET",
|
|
80
|
+
query: {
|
|
81
|
+
pincode,
|
|
82
|
+
variant_id,
|
|
83
|
+
cod: cod.toString(),
|
|
84
|
+
},
|
|
85
|
+
headers,
|
|
86
|
+
cache: "no-store",
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
.then((data) => data)
|
|
90
|
+
.catch(async (e) => {
|
|
91
|
+
if (e.response) {
|
|
92
|
+
const errorData = await e.response.json()
|
|
93
|
+
throw new Error(errorData.message || "Failed to check serviceability")
|
|
94
|
+
}
|
|
95
|
+
throw e
|
|
96
|
+
})
|
|
97
|
+
}
|