medusa-storefront-data 1.0.0 → 2.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.
Files changed (109) hide show
  1. package/dist/cookies.d.ts +2 -2
  2. package/dist/cookies.d.ts.map +1 -1
  3. package/dist/edge.d.ts +3 -0
  4. package/dist/edge.d.ts.map +1 -0
  5. package/dist/edge.js +1 -0
  6. package/dist/middleware.d.ts +3 -0
  7. package/dist/middleware.d.ts.map +1 -0
  8. package/dist/middleware.js +1 -0
  9. package/dist/server/cart.d.ts +9 -5
  10. package/dist/server/cart.d.ts.map +1 -1
  11. package/dist/server/cart.js +164 -194
  12. package/dist/server/categories.d.ts +3 -2
  13. package/dist/server/categories.d.ts.map +1 -1
  14. package/dist/server/categories.js +14 -51
  15. package/dist/server/collections.d.ts.map +1 -1
  16. package/dist/server/collections.js +16 -61
  17. package/dist/server/contact.d.ts +34 -0
  18. package/dist/server/contact.d.ts.map +1 -0
  19. package/dist/server/contact.js +57 -0
  20. package/dist/server/customer.d.ts +7 -7
  21. package/dist/server/customer.d.ts.map +1 -1
  22. package/dist/server/customer.js +95 -145
  23. package/dist/server/dynamic-config.d.ts.map +1 -1
  24. package/dist/server/dynamic-config.js +5 -2
  25. package/dist/server/fulfillment.d.ts +4 -3
  26. package/dist/server/fulfillment.d.ts.map +1 -1
  27. package/dist/server/fulfillment.js +16 -41
  28. package/dist/server/guest.d.ts +35 -63
  29. package/dist/server/guest.d.ts.map +1 -1
  30. package/dist/server/guest.js +81 -202
  31. package/dist/server/home.d.ts +15 -0
  32. package/dist/server/home.d.ts.map +1 -0
  33. package/dist/server/home.js +45 -0
  34. package/dist/server/index.d.ts +2 -0
  35. package/dist/server/index.d.ts.map +1 -1
  36. package/dist/server/index.js +2 -0
  37. package/dist/server/locale-actions.d.ts +1 -1
  38. package/dist/server/locale-actions.d.ts.map +1 -1
  39. package/dist/server/locale-actions.js +8 -13
  40. package/dist/server/locales.d.ts +2 -4
  41. package/dist/server/locales.d.ts.map +1 -1
  42. package/dist/server/locales.js +5 -13
  43. package/dist/server/orders.d.ts +5 -11
  44. package/dist/server/orders.d.ts.map +1 -1
  45. package/dist/server/orders.js +126 -267
  46. package/dist/server/payment-details.d.ts +4 -4
  47. package/dist/server/payment-details.d.ts.map +1 -1
  48. package/dist/server/payment-details.js +17 -42
  49. package/dist/server/payment.d.ts +2 -1
  50. package/dist/server/payment.d.ts.map +1 -1
  51. package/dist/server/payment.js +9 -21
  52. package/dist/server/pincode.d.ts +7 -0
  53. package/dist/server/pincode.d.ts.map +1 -0
  54. package/dist/server/pincode.js +30 -0
  55. package/dist/server/products.d.ts +15 -19
  56. package/dist/server/products.d.ts.map +1 -1
  57. package/dist/server/products.js +47 -178
  58. package/dist/server/regions.d.ts +1 -1
  59. package/dist/server/regions.d.ts.map +1 -1
  60. package/dist/server/regions.js +6 -3
  61. package/dist/server/returns.d.ts +4 -4
  62. package/dist/server/returns.d.ts.map +1 -1
  63. package/dist/server/returns.js +50 -154
  64. package/dist/server/swaps.d.ts +3 -3
  65. package/dist/server/swaps.d.ts.map +1 -1
  66. package/dist/server/swaps.js +22 -56
  67. package/dist/server/variants.d.ts.map +1 -1
  68. package/dist/server/variants.js +11 -22
  69. package/dist/server/wishlist.d.ts +11 -0
  70. package/dist/server/wishlist.d.ts.map +1 -0
  71. package/dist/server/wishlist.js +49 -0
  72. package/dist/util/get-locale-header.d.ts +1 -1
  73. package/dist/util/revalidate-cart.d.ts +2 -0
  74. package/dist/util/revalidate-cart.d.ts.map +1 -0
  75. package/dist/util/revalidate-cart.js +8 -0
  76. package/dist/util/sort-products.d.ts +3 -0
  77. package/dist/util/sort-products.d.ts.map +1 -0
  78. package/dist/util/sort-products.js +1 -0
  79. package/dist/util/store-client.d.ts +13 -0
  80. package/dist/util/store-client.d.ts.map +1 -0
  81. package/dist/util/store-client.js +77 -0
  82. package/package.json +95 -37
  83. package/src/edge.ts +2 -0
  84. package/src/middleware.ts +2 -2
  85. package/src/server/cart.ts +214 -267
  86. package/src/server/categories.ts +19 -72
  87. package/src/server/collections.ts +25 -82
  88. package/src/server/contact.ts +92 -0
  89. package/src/server/customer.ts +140 -189
  90. package/src/server/dynamic-config.ts +6 -2
  91. package/src/server/fulfillment.ts +27 -53
  92. package/src/server/guest.ts +159 -276
  93. package/src/server/home.ts +68 -0
  94. package/src/server/index.ts +1 -0
  95. package/src/server/locale-actions.ts +8 -15
  96. package/src/server/locales.ts +6 -18
  97. package/src/server/orders.ts +167 -337
  98. package/src/server/payment-details.ts +24 -52
  99. package/src/server/payment.ts +8 -28
  100. package/src/server/pincode.ts +49 -0
  101. package/src/server/products.ts +72 -235
  102. package/src/server/regions.ts +10 -6
  103. package/src/server/returns.ts +75 -189
  104. package/src/server/swaps.ts +90 -121
  105. package/src/server/variants.ts +9 -28
  106. package/src/util/revalidate-cart.ts +10 -0
  107. package/src/util/sort-products.ts +2 -47
  108. package/src/util/store-client.ts +93 -0
  109. package/src/services/middleware.ts +0 -54
@@ -1,32 +1,31 @@
1
1
  "use server";
2
- import { sdk } from "../config";
3
2
  import medusaError from "../util/medusa-error";
4
3
  import { revalidateTag } from "next/cache";
5
4
  import { redirect } from "next/navigation";
6
5
  import { cookies } from "next/headers";
7
6
  import { getAuthHeaders, getCacheTag, getCartId, removeAuthToken, removeCartId, removeSyncLock, setAuthToken, setCartId, } from "../cookies";
7
+ import { medusaAuthLogin, medusaAuthLogout, medusaAuthRegister, } from "medusa-services/auth";
8
+ import { isAccountDeletionPendingError, medusaCustomerCreate, medusaCustomerCreateAddress, medusaCustomerDeleteAddress, medusaCustomerRetrieve, medusaCustomerUpdate, medusaCustomerUpdateAddress, } from "medusa-services/customer";
9
+ import { medusaCartMerge, medusaCartTransfer } from "medusa-services/cart";
10
+ import { getAuthClientOptions, getMedusaBackendUrl, getStoreCartClientOptions, } from "../util/store-client";
8
11
  import { cache } from "react";
12
+ function throwCustomerError(error) {
13
+ if (error && typeof error === "object" && "response" in error) {
14
+ medusaError(error);
15
+ }
16
+ throw error instanceof Error ? error : new Error(String(error));
17
+ }
9
18
  export const retrieveCustomer = cache(async () => {
10
19
  const authHeaders = await getAuthHeaders();
11
- if (!authHeaders)
20
+ if (!("authorization" in authHeaders))
12
21
  return null;
13
- const headers = {
14
- ...authHeaders,
15
- };
16
22
  try {
17
- const { customer } = await sdk.client.fetch(`/store/customers/me`, {
18
- method: "GET",
19
- query: { fields: "*addresses" },
20
- headers: headers,
21
- cache: "no-store",
22
- });
23
+ const options = await getStoreCartClientOptions();
24
+ const { customer } = await medusaCustomerRetrieve(options, { fields: "*addresses" });
23
25
  return customer;
24
26
  }
25
27
  catch (error) {
26
- const errStr = error.toString().toLowerCase();
27
- // If the error indicates a pending deletion, return a special object
28
- if (errStr.includes("active account deletion request") ||
29
- (error.message && error.message.toLowerCase().includes("active account deletion request"))) {
28
+ if (isAccountDeletionPendingError(error)) {
30
29
  const cookieStore = await cookies();
31
30
  const cookieEmail = cookieStore.get("_medusa_customer_email")?.value;
32
31
  return { id: "pending_deletion", email: cookieEmail || "pending" };
@@ -35,16 +34,16 @@ export const retrieveCustomer = cache(async () => {
35
34
  }
36
35
  });
37
36
  export const updateCustomer = async (body) => {
38
- const headers = {
39
- ...(await getAuthHeaders()),
40
- };
41
- const updateRes = await sdk.store.customer
42
- .update(body, {}, headers)
43
- .then(({ customer }) => customer)
44
- .catch(medusaError);
45
- const cacheTag = await getCacheTag("customers");
46
- revalidateTag(cacheTag);
47
- return updateRes;
37
+ try {
38
+ const options = await getStoreCartClientOptions();
39
+ const { customer } = await medusaCustomerUpdate(body, options);
40
+ const cacheTag = await getCacheTag("customers");
41
+ revalidateTag(cacheTag);
42
+ return customer;
43
+ }
44
+ catch (e) {
45
+ throwCustomerError(e);
46
+ }
48
47
  };
49
48
  export async function signup(_currentState, formData) {
50
49
  const password = formData.get("password");
@@ -55,19 +54,12 @@ export async function signup(_currentState, formData) {
55
54
  phone: formData.get("phone")?.replace(/[^\d+]/g, ""),
56
55
  };
57
56
  try {
58
- const token = await sdk.auth.register("customer", "emailpass", {
59
- email: customerForm.email,
60
- password: password,
61
- });
57
+ const authOptions = await getAuthClientOptions();
58
+ const token = await medusaAuthRegister({ email: customerForm.email, password }, authOptions);
62
59
  await setAuthToken(token);
63
- const headers = {
64
- ...(await getAuthHeaders()),
65
- };
66
- const { customer: createdCustomer } = await sdk.store.customer.create(customerForm, {}, headers);
67
- const loginToken = await sdk.auth.login("customer", "emailpass", {
68
- email: customerForm.email,
69
- password,
70
- });
60
+ const options = await getStoreCartClientOptions();
61
+ const { customer: createdCustomer } = await medusaCustomerCreate(customerForm, options);
62
+ const loginToken = await medusaAuthLogin({ email: customerForm.email, password }, authOptions);
71
63
  await setAuthToken(loginToken);
72
64
  const customerCacheTag = await getCacheTag("customers");
73
65
  revalidateTag(customerCacheTag);
@@ -81,34 +73,30 @@ export async function signup(_currentState, formData) {
81
73
  export async function login(_currentState, formData) {
82
74
  let email = formData.get("email_or_phone");
83
75
  const password = formData.get("password");
84
- // Sanitize phone number: remove spaces, dashes, etc if it looks like a phone number
85
- // If it doesn't have '@', we treat it as a potential phone number and clean it
86
76
  if (email && !email.includes("@")) {
87
77
  email = email.replace(/[^\d+]/g, "");
88
78
  }
89
79
  let shouldRedirect = false;
90
80
  let countryCode = "in";
91
81
  try {
92
- const token = await sdk.auth.login("customer", "emailpass", { email_or_phone: email, password });
82
+ const authOptions = await getAuthClientOptions();
83
+ const token = await medusaAuthLogin({ email_or_phone: email, password }, authOptions);
93
84
  await setAuthToken(token);
94
- // Store email in cookie for deletion flow (needed for cancellation modal)
95
85
  const cookieStore = await cookies();
96
86
  cookieStore.set("_medusa_customer_email", email, { maxAge: 60 * 60 * 24 * 7, path: "/" });
97
- // Force a check to see if we are blocked
98
87
  try {
99
- await sdk.store.customer.retrieve({}, {
100
- authorization: `Bearer ${token}`
88
+ const options = await getStoreCartClientOptions();
89
+ await medusaCustomerRetrieve({
90
+ ...options,
91
+ authorization: `Bearer ${token}`,
101
92
  });
102
93
  }
103
94
  catch (err) {
104
- const errStr = err.toString().toLowerCase();
105
- if (errStr.includes("active account deletion request")) {
95
+ if (isAccountDeletionPendingError(err)) {
106
96
  return "ACCOUNT_DELETION_PENDING";
107
97
  }
108
- // If it's another error, we might still want to know, but deletion is our priority
109
98
  throw err;
110
99
  }
111
- // Transfer cart after login success - Moved here to ensure execution
112
100
  try {
113
101
  await transferCart(token);
114
102
  }
@@ -121,35 +109,36 @@ export async function login(_currentState, formData) {
121
109
  shouldRedirect = true;
122
110
  }
123
111
  catch (error) {
124
- const errorStr = error.toString().toLowerCase();
125
- if (errorStr.includes("active account deletion request") ||
126
- (error.message && error.message.toLowerCase().includes("active account deletion request"))) {
127
- // Still set email cookie even if blocked
112
+ if (isAccountDeletionPendingError(error)) {
128
113
  const cookieStore = await cookies();
129
114
  cookieStore.set("_medusa_customer_email", email, { maxAge: 60 * 60 * 24 * 7, path: "/" });
130
115
  return "ACCOUNT_DELETION_PENDING";
131
116
  }
117
+ const errorStr = String(error).toLowerCase();
132
118
  if (errorStr.includes("invalid") || errorStr.includes("401") || errorStr.includes("not found")) {
133
119
  return "Invalid credentials. Please try again.";
134
120
  }
135
- return error.message || error.toString();
121
+ return error instanceof Error ? error.message : String(error);
136
122
  }
137
123
  if (shouldRedirect) {
138
124
  const redirectUrl = formData.get("redirect_url");
139
- // Check if it's a "keep-me-here" context (Wishlist or Review Popups)
140
125
  const hasKeepContext = redirectUrl?.includes("login_context=keep");
141
- // Security + Context check
142
126
  if (redirectUrl && redirectUrl.startsWith("/") && hasKeepContext) {
143
127
  redirect(redirectUrl);
144
128
  }
145
129
  else {
146
- // DEFAULT: Always Home Page
147
130
  redirect(`/${countryCode}`);
148
131
  }
149
132
  }
150
133
  }
151
134
  export async function signout(countryCode) {
152
- await sdk.auth.logout();
135
+ try {
136
+ const authOptions = await getAuthClientOptions();
137
+ await medusaAuthLogout(authOptions);
138
+ }
139
+ catch {
140
+ // Continue local cleanup even if remote logout fails
141
+ }
153
142
  await removeAuthToken();
154
143
  await removeCartId();
155
144
  await removeSyncLock();
@@ -162,54 +151,34 @@ export async function signout(countryCode) {
162
151
  }
163
152
  export async function transferCart(token) {
164
153
  const cartId = await getCartId();
165
- const authHeaders = token
166
- ? { authorization: `Bearer ${token}` }
167
- : await getAuthHeaders();
154
+ const options = await getStoreCartClientOptions();
155
+ const mergeOptions = token
156
+ ? { ...options, authorization: `Bearer ${token}` }
157
+ : options;
168
158
  console.log("--- TransferCart Debug ---");
169
159
  console.log("Token provided:", !!token);
170
160
  console.log("Guest Cart ID:", cartId);
171
- const publishableKey = process.env.NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY;
172
- const backendUrl = process.env.MEDUSA_BACKEND_URL || process.env.NEXT_PUBLIC_MEDUSA_BACKEND_URL || "http://localhost:9000";
173
161
  try {
174
162
  console.log("Calling merge API (always)...");
175
- const response = await fetch(`${backendUrl}/store/carts/merge`, {
176
- method: "POST",
177
- headers: {
178
- "Content-Type": "application/json",
179
- "x-publishable-api-key": publishableKey || "",
180
- ...authHeaders,
181
- },
182
- // Only include body if cartId exists
183
- ...(cartId ? { body: JSON.stringify({ cart_id: cartId }) } : {}),
184
- cache: "no-store",
185
- });
186
- if (response.ok) {
187
- const data = await response.json();
163
+ const data = await medusaCartMerge(mergeOptions, cartId ?? undefined);
164
+ if (data) {
188
165
  console.log("--- Login Merge Response (JSON) ---");
189
166
  console.log(JSON.stringify(data, null, 2));
190
167
  console.log("-----------------------------------");
191
168
  const activeCartId = data.cart?.id || data.id || data.cart_id;
192
- if (activeCartId) {
169
+ if (activeCartId && typeof activeCartId === "string") {
193
170
  console.log("Storing Cart ID in cookie:", activeCartId);
194
171
  await setCartId(activeCartId);
195
172
  }
196
173
  }
197
- else if (response.status === 404) {
198
- // 404 is fine - it just means the customer has no active cart yet
199
- console.log("No active cart found for this customer (expected).");
200
- }
201
174
  else {
202
- const errorText = await response.text();
203
- console.log(`Merge API Info (${response.status}):`, errorText);
204
- if (cartId) {
205
- await sdk.store.cart.transferCart(cartId, {}, authHeaders).catch(() => { });
206
- }
175
+ console.log("No active cart found for this customer (expected).");
207
176
  }
208
177
  }
209
178
  catch (error) {
210
- console.error("Merge API error:", error.message);
179
+ console.error("Merge API error:", error instanceof Error ? error.message : error);
211
180
  if (cartId) {
212
- await sdk.store.cart.transferCart(cartId, {}, authHeaders).catch(() => { });
181
+ await medusaCartTransfer(cartId, mergeOptions).catch(() => { });
213
182
  }
214
183
  }
215
184
  console.log("--------------------------");
@@ -234,36 +203,30 @@ export const addCustomerAddress = async (currentState, formData) => {
234
203
  is_default_shipping: isDefaultShipping,
235
204
  metadata: {
236
205
  address_type: formData.get("address_type") || "HOME",
237
- }
238
- };
239
- const headers = {
240
- ...(await getAuthHeaders()),
206
+ },
241
207
  };
242
- return sdk.store.customer
243
- .createAddress(address, {}, headers)
244
- .then(async ({ customer }) => {
208
+ try {
209
+ const options = await getStoreCartClientOptions();
210
+ await medusaCustomerCreateAddress(address, options);
245
211
  const customerCacheTag = await getCacheTag("customers");
246
212
  revalidateTag(customerCacheTag);
247
213
  return { success: true, error: null };
248
- })
249
- .catch((err) => {
250
- return { success: false, error: err.toString() };
251
- });
214
+ }
215
+ catch (err) {
216
+ return { success: false, error: String(err) };
217
+ }
252
218
  };
253
219
  export const deleteCustomerAddress = async (addressId) => {
254
- const headers = {
255
- ...(await getAuthHeaders()),
256
- };
257
- await sdk.store.customer
258
- .deleteAddress(addressId, headers)
259
- .then(async () => {
220
+ try {
221
+ const options = await getStoreCartClientOptions();
222
+ await medusaCustomerDeleteAddress(addressId, options);
260
223
  const customerCacheTag = await getCacheTag("customers");
261
224
  revalidateTag(customerCacheTag);
262
225
  return { success: true, error: null };
263
- })
264
- .catch((err) => {
265
- return { success: false, error: err.toString() };
266
- });
226
+ }
227
+ catch (err) {
228
+ return { success: false, error: String(err) };
229
+ }
267
230
  };
268
231
  export const updateCustomerAddress = async (currentState, formData) => {
269
232
  const addressId = currentState.addressId || formData.get("addressId");
@@ -282,44 +245,38 @@ export const updateCustomerAddress = async (currentState, formData) => {
282
245
  country_code: formData.get("country_code"),
283
246
  metadata: {
284
247
  address_type: formData.get("address_type") || "HOME",
285
- }
248
+ },
286
249
  };
287
250
  const phone = formData.get("phone");
288
251
  if (phone) {
289
252
  address.phone = phone;
290
253
  }
291
- const headers = {
292
- ...(await getAuthHeaders()),
293
- };
294
- return sdk.store.customer
295
- .updateAddress(addressId, address, {}, headers)
296
- .then(async () => {
254
+ try {
255
+ const options = await getStoreCartClientOptions();
256
+ await medusaCustomerUpdateAddress(addressId, address, options);
297
257
  const customerCacheTag = await getCacheTag("customers");
298
258
  revalidateTag(customerCacheTag);
299
259
  return { success: true, error: null };
300
- })
301
- .catch((err) => {
302
- return { success: false, error: err.toString() };
303
- });
260
+ }
261
+ catch (err) {
262
+ return { success: false, error: String(err) };
263
+ }
304
264
  };
305
265
  export const setDefaultAddress = async (addressId) => {
306
- const headers = {
307
- ...(await getAuthHeaders()),
308
- };
309
- return sdk.store.customer
310
- .updateAddress(addressId, { is_default_shipping: true }, {}, headers)
311
- .then(async () => {
266
+ try {
267
+ const options = await getStoreCartClientOptions();
268
+ await medusaCustomerUpdateAddress(addressId, { is_default_shipping: true }, options);
312
269
  const customerCacheTag = await getCacheTag("customers");
313
270
  revalidateTag(customerCacheTag);
314
271
  return { success: true, error: null };
315
- })
316
- .catch((err) => {
317
- return { success: false, error: err.toString() };
318
- });
272
+ }
273
+ catch (err) {
274
+ return { success: false, error: String(err) };
275
+ }
319
276
  };
320
277
  export async function initiateGoogleAuth() {
321
278
  try {
322
- const backendUrl = process.env.MEDUSA_BACKEND_URL || process.env.NEXT_PUBLIC_MEDUSA_BACKEND_URL;
279
+ const backendUrl = getMedusaBackendUrl();
323
280
  if (!backendUrl) {
324
281
  return { error: "Backend URL not configured" };
325
282
  }
@@ -338,18 +295,13 @@ export async function initiateGoogleAuth() {
338
295
  if (!redirectUrl) {
339
296
  return { error: "No redirect URL received from Google OAuth" };
340
297
  }
341
- // Fix redirect URL: Remove country code prefix from callback URL if present
342
- // Example: https://chocomelon.in/in/auth/customer/google/callback -> https://chocomelon.in/auth/customer/google/callback
343
298
  try {
344
299
  const url = new URL(redirectUrl);
345
- const pathParts = url.pathname.split('/').filter(Boolean);
346
- // Check if path starts with country code pattern (2-3 letter code)
300
+ const pathParts = url.pathname.split("/").filter(Boolean);
347
301
  if (pathParts.length > 0 && /^[a-z]{2,3}$/i.test(pathParts[0])) {
348
- // Check if next part is 'auth'
349
- if (pathParts.length > 1 && pathParts[1] === 'auth') {
350
- // Remove country code from path
302
+ if (pathParts.length > 1 && pathParts[1] === "auth") {
351
303
  pathParts.shift();
352
- url.pathname = '/' + pathParts.join('/');
304
+ url.pathname = "/" + pathParts.join("/");
353
305
  redirectUrl = url.toString();
354
306
  }
355
307
  }
@@ -368,7 +320,7 @@ export async function handleGoogleAuthCallback(params) {
368
320
  if (!params.code || !params.state) {
369
321
  return { error: "Missing authentication parameters" };
370
322
  }
371
- const backendUrl = process.env.MEDUSA_BACKEND_URL || process.env.NEXT_PUBLIC_MEDUSA_BACKEND_URL;
323
+ const backendUrl = getMedusaBackendUrl();
372
324
  if (!backendUrl) {
373
325
  return { error: "Backend URL not configured" };
374
326
  }
@@ -403,13 +355,14 @@ export async function handleGoogleCallback(token, email, first_name, last_name)
403
355
  if (email && typeof email === "string") {
404
356
  const cookieStore = await cookies();
405
357
  cookieStore.set("_medusa_customer_email", email, { maxAge: 60 * 60 * 24 * 7, path: "/" });
406
- const headers = await getAuthHeaders();
407
- if (headers && "authorization" in headers) {
358
+ const options = await getStoreCartClientOptions();
359
+ if (options.authorization) {
408
360
  try {
409
- await sdk.store.customer.create({ email, ...(first_name && { first_name }), ...(last_name && { last_name }) }, {}, headers);
361
+ await medusaCustomerCreate({ email, ...(first_name && { first_name }), ...(last_name && { last_name }) }, options);
410
362
  }
411
363
  catch (err) {
412
364
  if (!err.message?.includes("already exists") && !err.message?.includes("duplicate")) {
365
+ // Ignore duplicate customer errors for OAuth sign-in
413
366
  }
414
367
  }
415
368
  }
@@ -429,7 +382,6 @@ export async function uploadProfileImage(formData) {
429
382
  if (!imageFile) {
430
383
  return { error: "No image file provided" };
431
384
  }
432
- // Create new FormData with 'files' field as expected by the backend
433
385
  const uploadFormData = new FormData();
434
386
  uploadFormData.append("files", imageFile);
435
387
  const { uploadStoreFiles } = await import("medusa-reviews-logic/server");
@@ -441,14 +393,12 @@ export async function uploadProfileImage(formData) {
441
393
  if (!imageUrl) {
442
394
  throw new Error("No image URL returned from server");
443
395
  }
444
- // Fetch current customer to preserve existing metadata
445
396
  const currentCustomer = await retrieveCustomer();
446
397
  const existingMetadata = currentCustomer?.metadata || {};
447
398
  const newMetadata = {
448
399
  ...existingMetadata,
449
400
  profile_image_url: imageUrl,
450
401
  };
451
- // Update customer metadata
452
402
  await updateCustomer({ metadata: newMetadata });
453
403
  const customerCacheTag = await getCacheTag("customers");
454
404
  if (customerCacheTag) {
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-config.d.ts","sourceRoot":"","sources":["../../src/server/dynamic-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dynamic-config.d.ts","sourceRoot":"","sources":["../../src/server/dynamic-config.ts"],"names":[],"mappings":"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"}
@@ -143,7 +143,7 @@ export const getFeaturesFromConfig = async () => {
143
143
  const homepageConfig = config?.["homepage-config"];
144
144
  if (!homepageConfig)
145
145
  return null;
146
- const title = homepageConfig["why-choose-us-title"] || "Why Choose Chocomelon?";
146
+ const title = homepageConfig["why-choose-us-title"] || "Why Choose Us?";
147
147
  const featuresRaw = homepageConfig["why-choose-us-features"] || [];
148
148
  const features = featuresRaw.map((item) => {
149
149
  const feature = item?.feature || item;
@@ -167,7 +167,10 @@ export const getContactInfoFromConfig = async () => {
167
167
  }
168
168
  return {
169
169
  phone: contactConfig["contact-phone"],
170
- email: contactConfig["contact-email"],
170
+ email: typeof contactConfig["contact-email"] === "string" &&
171
+ /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(contactConfig["contact-email"].trim())
172
+ ? contactConfig["contact-email"].trim()
173
+ : undefined,
171
174
  address: contactConfig["contact-address"],
172
175
  };
173
176
  }
@@ -1,4 +1,5 @@
1
- export declare const listCartShippingMethods: (cartId: string) => Promise<any>;
2
- export declare const calculatePriceForShippingOption: (optionId: string, cartId: string, data?: Record<string, unknown>) => Promise<any>;
3
- export declare const getShiprocketServiceability: (pincode: string, variant_id: string, cod?: number) => Promise<any>;
1
+ import { HttpTypes } from "@medusajs/types";
2
+ export declare const listCartShippingMethods: (cartId: string) => Promise<HttpTypes.StoreCartShippingOptionWithServiceZone[] | null>;
3
+ export declare const calculatePriceForShippingOption: (optionId: string, cartId: string, data?: Record<string, unknown>) => Promise<HttpTypes.StoreCartShippingOption | null>;
4
+ export declare const getShiprocketServiceability: (pincode: string, variant_id: string, cod?: number) => Promise<Record<string, unknown> | null>;
4
5
  //# sourceMappingURL=fulfillment.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fulfillment.d.ts","sourceRoot":"","sources":["../../src/server/fulfillment.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,uBAAuB,GAAU,QAAQ,MAAM,iBA0B3D,CAAA;AAED,eAAO,MAAM,+BAA+B,GAC1C,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,iBA8B/B,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAU,SAAS,MAAM,EAAE,YAAY,MAAM,EAAE,MAAK,MAAU,iBA2BrG,CAAA"}
1
+ {"version":3,"file":"fulfillment.d.ts","sourceRoot":"","sources":["../../src/server/fulfillment.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAQ3C,eAAO,MAAM,uBAAuB,GAAU,QAAQ,MAAM,uEA0B3D,CAAA;AAED,eAAO,MAAM,+BAA+B,GAC1C,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sDAc/B,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAU,SAAS,MAAM,EAAE,YAAY,MAAM,EAAE,MAAK,MAAU,4CAWrG,CAAA"}
@@ -1,6 +1,8 @@
1
1
  "use server";
2
2
  import { sdk } from "../config";
3
3
  import { getAuthHeaders, getCacheOptions } from "../cookies";
4
+ import { medusaShippingOptionCalculate, medusaShiprocketServiceability, } from "medusa-services/fulfillment";
5
+ import { getStoreCartClientOptions } from "../util/store-client";
4
6
  export const listCartShippingMethods = async (cartId) => {
5
7
  const headers = {
6
8
  ...(await getAuthHeaders()),
@@ -24,49 +26,22 @@ export const listCartShippingMethods = async (cartId) => {
24
26
  });
25
27
  };
26
28
  export const calculatePriceForShippingOption = async (optionId, cartId, data) => {
27
- const headers = {
28
- ...(await getAuthHeaders()),
29
- };
30
- const next = {
31
- ...(await getCacheOptions("fulfillment")),
32
- };
33
- const body = { cart_id: cartId, data };
34
- if (data) {
35
- body.data = data;
29
+ try {
30
+ const options = await getStoreCartClientOptions();
31
+ const { shipping_option } = await medusaShippingOptionCalculate(optionId, cartId, options, data);
32
+ return shipping_option;
36
33
  }
37
- return sdk.client
38
- .fetch(`/store/shipping-options/${optionId}/calculate`, {
39
- method: "POST",
40
- body,
41
- headers,
42
- next,
43
- })
44
- .then(({ shipping_option }) => shipping_option)
45
- .catch((e) => {
34
+ catch (e) {
46
35
  return null;
47
- });
36
+ }
48
37
  };
49
38
  export const getShiprocketServiceability = async (pincode, variant_id, cod = 0) => {
50
- const headers = {
51
- ...(await getAuthHeaders()),
52
- };
53
- return sdk.client
54
- .fetch(`/store/shiprocket/serviceability`, {
55
- method: "GET",
56
- query: {
57
- pincode,
58
- variant_id,
59
- cod: cod.toString(),
60
- },
61
- headers,
62
- cache: "no-store",
63
- })
64
- .then((data) => data)
65
- .catch(async (e) => {
66
- if (e.response) {
67
- const errorData = await e.response.json();
68
- throw new Error(errorData.message || "Failed to check serviceability");
69
- }
70
- throw e;
71
- });
39
+ try {
40
+ const options = await getStoreCartClientOptions();
41
+ return await medusaShiprocketServiceability({ pincode, variant_id, cod }, options);
42
+ }
43
+ catch {
44
+ // Missing variant dimensions or Shiprocket unavailable — checkout must continue.
45
+ return null;
46
+ }
72
47
  };