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.
Files changed (105) hide show
  1. package/dist/config.d.ts +3 -0
  2. package/dist/config.d.ts.map +1 -0
  3. package/dist/config.js +31 -0
  4. package/dist/cookies.d.ts +23 -0
  5. package/dist/cookies.d.ts.map +1 -0
  6. package/dist/cookies.js +140 -0
  7. package/dist/server/cart.d.ts +92 -0
  8. package/dist/server/cart.d.ts.map +1 -0
  9. package/dist/server/cart.js +827 -0
  10. package/dist/server/categories.d.ts +3 -0
  11. package/dist/server/categories.d.ts.map +1 -0
  12. package/dist/server/categories.js +71 -0
  13. package/dist/server/collections.d.ts +8 -0
  14. package/dist/server/collections.d.ts.map +1 -0
  15. package/dist/server/collections.js +84 -0
  16. package/dist/server/customer-registration.d.ts +142 -0
  17. package/dist/server/customer-registration.d.ts.map +1 -0
  18. package/dist/server/customer-registration.js +295 -0
  19. package/dist/server/customer.d.ts +48 -0
  20. package/dist/server/customer.d.ts.map +1 -0
  21. package/dist/server/customer.js +462 -0
  22. package/dist/server/dynamic-config.d.ts +125 -0
  23. package/dist/server/dynamic-config.d.ts.map +1 -0
  24. package/dist/server/dynamic-config.js +263 -0
  25. package/dist/server/fulfillment.d.ts +4 -0
  26. package/dist/server/fulfillment.d.ts.map +1 -0
  27. package/dist/server/fulfillment.js +72 -0
  28. package/dist/server/guest.d.ts +109 -0
  29. package/dist/server/guest.d.ts.map +1 -0
  30. package/dist/server/guest.js +304 -0
  31. package/dist/server/index.d.ts +21 -0
  32. package/dist/server/index.d.ts.map +1 -0
  33. package/dist/server/index.js +20 -0
  34. package/dist/server/locale-actions.d.ts +14 -0
  35. package/dist/server/locale-actions.d.ts.map +1 -0
  36. package/dist/server/locale-actions.js +63 -0
  37. package/dist/server/locales.d.ts +10 -0
  38. package/dist/server/locales.d.ts.map +1 -0
  39. package/dist/server/locales.js +20 -0
  40. package/dist/server/notifications.d.ts +2 -0
  41. package/dist/server/notifications.d.ts.map +1 -0
  42. package/dist/server/notifications.js +20 -0
  43. package/dist/server/onboarding.d.ts +2 -0
  44. package/dist/server/onboarding.d.ts.map +1 -0
  45. package/dist/server/onboarding.js +8 -0
  46. package/dist/server/orders.d.ts +69 -0
  47. package/dist/server/orders.d.ts.map +1 -0
  48. package/dist/server/orders.js +371 -0
  49. package/dist/server/payment-details.d.ts +5 -0
  50. package/dist/server/payment-details.d.ts.map +1 -0
  51. package/dist/server/payment-details.js +53 -0
  52. package/dist/server/payment.d.ts +2 -0
  53. package/dist/server/payment.d.ts.map +1 -0
  54. package/dist/server/payment.js +25 -0
  55. package/dist/server/products.d.ts +58 -0
  56. package/dist/server/products.d.ts.map +1 -0
  57. package/dist/server/products.js +285 -0
  58. package/dist/server/regions.d.ts +5 -0
  59. package/dist/server/regions.d.ts.map +1 -0
  60. package/dist/server/regions.js +54 -0
  61. package/dist/server/returns.d.ts +29 -0
  62. package/dist/server/returns.d.ts.map +1 -0
  63. package/dist/server/returns.js +236 -0
  64. package/dist/server/swaps.d.ts +14 -0
  65. package/dist/server/swaps.d.ts.map +1 -0
  66. package/dist/server/swaps.js +123 -0
  67. package/dist/server/variants.d.ts +3 -0
  68. package/dist/server/variants.d.ts.map +1 -0
  69. package/dist/server/variants.js +26 -0
  70. package/dist/util/get-locale-header.d.ts +4 -0
  71. package/dist/util/get-locale-header.d.ts.map +1 -0
  72. package/dist/util/get-locale-header.js +7 -0
  73. package/dist/util/medusa-error.d.ts +2 -0
  74. package/dist/util/medusa-error.d.ts.map +1 -0
  75. package/dist/util/medusa-error.js +18 -0
  76. package/package.json +152 -0
  77. package/src/config.ts +39 -0
  78. package/src/cookies.ts +171 -0
  79. package/src/middleware.ts +2 -0
  80. package/src/server/cart.ts +1054 -0
  81. package/src/server/categories.ts +94 -0
  82. package/src/server/collections.ts +113 -0
  83. package/src/server/customer-registration.ts +349 -0
  84. package/src/server/customer.ts +581 -0
  85. package/src/server/dynamic-config.ts +403 -0
  86. package/src/server/fulfillment.ts +97 -0
  87. package/src/server/guest.ts +333 -0
  88. package/src/server/index.ts +21 -0
  89. package/src/server/locale-actions.ts +74 -0
  90. package/src/server/locales.ts +28 -0
  91. package/src/server/notifications.ts +22 -0
  92. package/src/server/onboarding.ts +9 -0
  93. package/src/server/orders.ts +467 -0
  94. package/src/server/payment-details.ts +69 -0
  95. package/src/server/payment.ts +35 -0
  96. package/src/server/products.ts +378 -0
  97. package/src/server/regions.ts +66 -0
  98. package/src/server/returns.ts +294 -0
  99. package/src/server/swaps.ts +150 -0
  100. package/src/server/variants.ts +38 -0
  101. package/src/server/wishlist.ts +64 -0
  102. package/src/services/middleware.ts +54 -0
  103. package/src/util/get-locale-header.ts +8 -0
  104. package/src/util/medusa-error.ts +19 -0
  105. package/src/util/sort-products.ts +47 -0
@@ -0,0 +1,371 @@
1
+ "use server";
2
+ import { cookies } from "next/headers";
3
+ import { sdk } from "../config";
4
+ import medusaError from "../util/medusa-error";
5
+ import { getAuthHeaders, getCacheOptions, getCacheTag, setBuyNowCartId, removeBuyNowCartId } from "../cookies";
6
+ import { listReturnReasons } from "./returns";
7
+ import { revalidateTag } from "next/cache";
8
+ export const retrieveOrder = async (id) => {
9
+ const cookieStore = await cookies();
10
+ const token = cookieStore.get("_medusa_jwt")?.value;
11
+ // Check for guest token if regular token is missing
12
+ const guestToken = !token
13
+ ? (cookieStore.get("_medusa_guest_jwt")?.value || cookieStore.get("_medusa_guest_token")?.value)
14
+ : null;
15
+ // Log token details for debugging (only first 20 chars for security)
16
+ const next = {
17
+ ...(await getCacheOptions("orders")),
18
+ };
19
+ // If guest user, use the main orders endpoint with guest token to get full details
20
+ if (guestToken && !token) {
21
+ const publishableKey = process.env.NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY;
22
+ const requestHeaders = {
23
+ "Authorization": `Bearer ${guestToken}`
24
+ };
25
+ if (publishableKey)
26
+ requestHeaders["x-publishable-api-key"] = publishableKey;
27
+ const response = await sdk.client.fetch(`/store/orders/${id}`, {
28
+ method: "GET",
29
+ headers: requestHeaders,
30
+ query: {
31
+ fields: "id,display_id,customer_id,email,created_at,status,fulfillment_status,payment_status,currency_code,subtotal,shipping_total,tax_total,discount_total,metadata,total,*payment_collections.payments,*items,*items.metadata,*items.variant,*items.variant.images,*items.variant.product,*items.variant.product.thumbnail,*items.variant.product.images,*items.variant.product.variants,*items.product,*items.product.thumbnail,*items.product.images,*items.product.variants,*fulfillments,*fulfillments.items,*fulfillments.location_id,*returns,*returns.items,*cart,*shipping_address,*billing_address,*region,*shipping_methods"
32
+ },
33
+ cache: "no-store"
34
+ });
35
+ if (!response || !response.order) {
36
+ throw new Error("Order not found or access denied");
37
+ }
38
+ return response.order;
39
+ }
40
+ // Regular logged-in user flow
41
+ const headers = {
42
+ ...(await getAuthHeaders()),
43
+ };
44
+ return sdk.client
45
+ .fetch(`/store/orders/${id}`, {
46
+ method: "GET",
47
+ query: {
48
+ fields: "id,display_id,customer_id,email,created_at,status,fulfillment_status,payment_status,currency_code,subtotal,shipping_total,tax_total,discount_total,metadata,total,*payment_collections.payments,*items,*items.metadata,*items.variant,*items.variant.images,*items.variant.product,*items.variant.product.variants,*items.product,*items.product.variants,*returns,*shipping_address,*billing_address,*region,*shipping_methods",
49
+ },
50
+ headers,
51
+ next,
52
+ cache: "no-store", // Changed from "force-cache" to "no-store" to always fetch fresh data
53
+ })
54
+ .then(({ order }) => {
55
+ return order;
56
+ })
57
+ .catch((err) => {
58
+ return medusaError(err);
59
+ });
60
+ };
61
+ export const listOrders = async (limit = 10, offset = 0, filters) => {
62
+ const headers = {
63
+ ...(await getAuthHeaders()),
64
+ };
65
+ const next = {
66
+ ...(await getCacheOptions("orders")),
67
+ };
68
+ return sdk.client
69
+ .fetch(`/store/orders`, {
70
+ method: "GET",
71
+ query: {
72
+ limit,
73
+ offset,
74
+ order: "-created_at",
75
+ fields: "*items,+items.metadata,*items.variant,*items.variant.images,*items.product,*returns",
76
+ ...filters,
77
+ },
78
+ headers,
79
+ next,
80
+ cache: "no-store",
81
+ })
82
+ .then(({ orders }) => orders)
83
+ .catch((err) => medusaError(err));
84
+ };
85
+ export const createTransferRequest = async (state, formData) => {
86
+ const id = formData.get("order_id");
87
+ if (!id) {
88
+ return { success: false, error: "Order ID is required", order: null };
89
+ }
90
+ const headers = await getAuthHeaders();
91
+ return await sdk.store.order
92
+ .requestTransfer(id, {}, {
93
+ fields: "id, email",
94
+ }, headers)
95
+ .then(({ order }) => ({ success: true, error: null, order }))
96
+ .catch((err) => ({ success: false, error: err.message, order: null }));
97
+ };
98
+ export const acceptTransferRequest = async (id, token) => {
99
+ const headers = await getAuthHeaders();
100
+ return await sdk.store.order
101
+ .acceptTransfer(id, { token }, {}, headers)
102
+ .then(({ order }) => ({ success: true, error: null, order }))
103
+ .catch((err) => ({ success: false, error: err.message, order: null }));
104
+ };
105
+ export const declineTransferRequest = async (id, token) => {
106
+ const headers = await getAuthHeaders();
107
+ return await sdk.store.order
108
+ .declineTransfer(id, { token }, {}, headers)
109
+ .then(({ order }) => ({ success: true, error: null, order }))
110
+ .catch((err) => ({ success: false, error: err.message, order: null }));
111
+ };
112
+ export const downloadInvoice = async (orderId) => {
113
+ try {
114
+ const cookieStore = await cookies();
115
+ const token = cookieStore.get("_medusa_jwt")?.value;
116
+ // Check for guest token if regular token is missing
117
+ const guestToken = !token
118
+ ? (cookieStore.get("_medusa_guest_jwt")?.value || cookieStore.get("_medusa_guest_token")?.value)
119
+ : null;
120
+ const headers = {
121
+ "x-publishable-api-key": process.env.NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY,
122
+ };
123
+ let url = `/store/invoice/download/${orderId}`;
124
+ if (token) {
125
+ headers["Cookie"] = `_medusa_jwt=${token}`;
126
+ headers["Authorization"] = `Bearer ${token}`;
127
+ }
128
+ else if (guestToken) {
129
+ // Use guest endpoint and token
130
+ url = `/store/guest/invoice/download/${orderId}`;
131
+ headers["Cookie"] = `_medusa_guest_jwt=${guestToken}`;
132
+ headers["Authorization"] = `Bearer ${guestToken}`;
133
+ }
134
+ const backendUrl = process.env.NEXT_PUBLIC_MEDUSA_BACKEND_URL || "http://localhost:9000";
135
+ const response = await fetch(`${backendUrl}${url}`, {
136
+ method: "GET",
137
+ headers,
138
+ cache: "no-store",
139
+ });
140
+ if (!response.ok) {
141
+ throw new Error(`Failed to download invoice: ${response.status} ${response.statusText}`);
142
+ }
143
+ const contentType = response.headers.get("content-type");
144
+ if (!contentType || !contentType.includes("application/pdf")) {
145
+ throw new Error("Server returned non-PDF content");
146
+ }
147
+ const arrayBuffer = await response.arrayBuffer();
148
+ if (arrayBuffer.byteLength === 0) {
149
+ throw new Error("Generated PDF is empty");
150
+ }
151
+ const base64 = Buffer.from(arrayBuffer).toString("base64");
152
+ return { success: true, data: base64 };
153
+ }
154
+ catch (error) {
155
+ return { success: false, error: error.message };
156
+ }
157
+ };
158
+ /**
159
+ * Cancel an order
160
+ */
161
+ export const cancelOrder = async (orderId, reasonId) => {
162
+ try {
163
+ const authHeaders = await getAuthHeaders();
164
+ const cookiesStore = await cookies();
165
+ const guestToken = cookiesStore.get("_medusa_guest_jwt")?.value || cookiesStore.get("_medusa_guest_token")?.value;
166
+ const publishableKey = process.env.NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY;
167
+ const backendUrl = process.env.NEXT_PUBLIC_MEDUSA_BACKEND_URL || "http://localhost:9000";
168
+ // 1. Regular logged-in user flow ALWAYS takes priority
169
+ const token = cookiesStore.get("_medusa_jwt")?.value;
170
+ if (token) {
171
+ let finalReasonId = reasonId;
172
+ if (!finalReasonId) {
173
+ const reasons = await listReturnReasons();
174
+ finalReasonId = reasons.find(r => r.value === "other")?.id || reasons[0]?.id || "other";
175
+ }
176
+ const headers = {
177
+ "Content-Type": "application/json",
178
+ "x-publishable-api-key": publishableKey,
179
+ "Authorization": `Bearer ${token}`
180
+ };
181
+ // Try the primary endpoint
182
+ let response = await fetch(`${backendUrl}/store/orders/cancel/${orderId}`, {
183
+ method: "POST",
184
+ headers,
185
+ body: JSON.stringify({ reason_id: finalReasonId }),
186
+ cache: "no-store",
187
+ });
188
+ // If the first endpoint fails with 404 or a resolution error, try the alternative format
189
+ if (!response.ok) {
190
+ const errorData = await response.json().catch(() => ({}));
191
+ if (response.status === 404 || (errorData.message && errorData.message.includes("resolve"))) {
192
+ const altResponse = await fetch(`${backendUrl}/store/orders/${orderId}/cancel`, {
193
+ method: "POST",
194
+ headers,
195
+ body: JSON.stringify({ reason_id: finalReasonId }),
196
+ cache: "no-store",
197
+ });
198
+ if (altResponse.ok)
199
+ return { success: true };
200
+ // If both fail, return the error from the second attempt
201
+ const altError = await altResponse.json().catch(() => ({ message: "Failed to cancel order" }));
202
+ return { success: false, error: altError.message || "Failed to cancel order" };
203
+ }
204
+ return { success: false, error: errorData.message || "Failed to cancel order" };
205
+ }
206
+ return { success: true };
207
+ }
208
+ // 2. Only if NOT logged in, check for guest user token
209
+ if (guestToken) {
210
+ let finalReasonId = reasonId;
211
+ if (!finalReasonId) {
212
+ const reasons = await listReturnReasons();
213
+ finalReasonId = reasons.find(r => r.value === "other")?.id || reasons[0]?.id || "other";
214
+ }
215
+ // Try guest endpoint
216
+ const response = await fetch(`${backendUrl}/store/guest-orders/${orderId}/cancel`, {
217
+ method: "POST",
218
+ headers: {
219
+ "Content-Type": "application/json",
220
+ "x-publishable-api-key": publishableKey,
221
+ "Authorization": `Bearer ${guestToken}`
222
+ },
223
+ body: JSON.stringify({ reason_id: finalReasonId }),
224
+ cache: "no-store",
225
+ });
226
+ if (!response.ok) {
227
+ // Fallback for guest as well
228
+ const altResponse = await fetch(`${backendUrl}/store/guest/orders/${orderId}/cancel`, {
229
+ method: "POST",
230
+ headers: {
231
+ "Content-Type": "application/json",
232
+ "x-publishable-api-key": publishableKey,
233
+ "Authorization": `Bearer ${guestToken}`
234
+ },
235
+ body: JSON.stringify({ reason_id: finalReasonId }),
236
+ cache: "no-store",
237
+ });
238
+ if (altResponse.ok)
239
+ return { success: true };
240
+ return { success: false, error: "Failed to cancel order" };
241
+ }
242
+ return { success: true };
243
+ }
244
+ // 3. Neither token found
245
+ return { success: false, error: "Unauthorized: No valid session found" };
246
+ }
247
+ catch (error) {
248
+ return { success: false, error: error.message };
249
+ }
250
+ };
251
+ /**
252
+ * Reorder an order (supports both logged-in and guest users)
253
+ */
254
+ export const reorderOrder = async (orderId, skipVariantIds, forceReorder = false) => {
255
+ try {
256
+ const cookieStore = await cookies();
257
+ const token = cookieStore.get("_medusa_jwt")?.value;
258
+ // Check for guest token if regular token is missing
259
+ const guestToken = !token
260
+ ? (cookieStore.get("_medusa_guest_jwt")?.value || cookieStore.get("_medusa_guest_token")?.value)
261
+ : null;
262
+ const publishableKey = process.env.NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY;
263
+ const backendUrl = process.env.NEXT_PUBLIC_MEDUSA_BACKEND_URL || "http://localhost:9000";
264
+ const headers = {
265
+ "Content-Type": "application/json",
266
+ "x-publishable-api-key": publishableKey,
267
+ };
268
+ // Determine the correct endpoint based on user type
269
+ let url = `${backendUrl}/store/orders/reorder/${orderId}`;
270
+ if (token) {
271
+ // IMPORTANT: The Order Management plugin requires an explicit Bearer token
272
+ // in the Authorization header to identify actor_id. Using getAuthHeaders()
273
+ // alone (which is cookie-based) is not enough for this custom endpoint.
274
+ headers["Authorization"] = `Bearer ${token}`;
275
+ }
276
+ else if (guestToken) {
277
+ // Use guest reorder endpoint
278
+ url = `${backendUrl}/store/guest-orders/${orderId}/reorder`;
279
+ headers["Authorization"] = `Bearer ${guestToken}`;
280
+ }
281
+ else {
282
+ return { success: false, error: "Unauthorized: Please log in to reorder." };
283
+ }
284
+ // Add force_reorder query param if requested
285
+ if (forceReorder) {
286
+ url += `?force_reorder=true`;
287
+ }
288
+ // Call the plugin's reorder endpoint (adds all items)
289
+ const response = await fetch(url, {
290
+ method: "POST",
291
+ headers,
292
+ cache: "no-store",
293
+ });
294
+ if (!response.ok) {
295
+ const errorBody = await response.json().catch(() => null);
296
+ // Handle 409 Conflict - Inventory Issues
297
+ if (response.status === 409 && errorBody?.inventory_issues) {
298
+ return {
299
+ success: false,
300
+ error: "Inventory issues found",
301
+ inventory_issues: errorBody.inventory_issues
302
+ };
303
+ }
304
+ const errorMsg = errorBody?.message || "Failed to reorder";
305
+ return { success: false, error: errorMsg };
306
+ }
307
+ const data = await response.json();
308
+ // Support multiple response formats: data.cart.id, data.id, or data.cart_id
309
+ const newCartId = data.cart?.id || data.id || data.cart_id || (data.reorder?.cart_id);
310
+ // Set the cart ID in cookies and revalidate
311
+ if (newCartId) {
312
+ // 1. Tag the cart as Buy Now to prevent merging and allow auto-restore,
313
+ // and add is_reorder flag to distinguish it
314
+ try {
315
+ await sdk.store.cart.update(newCartId, {
316
+ metadata: {
317
+ is_reorder: true
318
+ }
319
+ }, {}, {
320
+ ...headers,
321
+ cache: "no-store",
322
+ });
323
+ // 2. Ensure this new cart is not merged with existing ones (CRITICAL for Buy Now flow)
324
+ await sdk.client.fetch(`/store/carts/merge/skip`, {
325
+ method: "POST",
326
+ body: { cart_id: newCartId },
327
+ headers: headers,
328
+ });
329
+ }
330
+ catch (updateErr) {
331
+ console.error("[Reorder] Error updating cart metadata or skipping merge:", updateErr);
332
+ }
333
+ // FALLBACK: If skipVariantIds were provided but the plugin added everything,
334
+ // we manually remove the unwanted items from the new cart.
335
+ if (skipVariantIds && skipVariantIds.length > 0) {
336
+ try {
337
+ // Fetch the new cart to find line item IDs
338
+ const { cart } = await sdk.store.cart.retrieve(newCartId, {}, {
339
+ ...headers,
340
+ });
341
+ if (cart && cart.items) {
342
+ const itemsToRemove = cart.items.filter(item => item.variant_id && skipVariantIds.includes(item.variant_id));
343
+ // Delete unwanted items one by one
344
+ for (const item of itemsToRemove) {
345
+ await sdk.store.cart.deleteLineItem(newCartId, item.id, {}, {
346
+ ...headers,
347
+ });
348
+ }
349
+ }
350
+ }
351
+ catch (removeErr) {
352
+ console.error("[Reorder] Error removing skipped items:", removeErr);
353
+ // We continue anyway since the cart is created
354
+ }
355
+ }
356
+ // Use buy_now_cart_id instead of overwriting main cart
357
+ await removeBuyNowCartId();
358
+ await setBuyNowCartId(newCartId);
359
+ // Revalidate standard carts tag
360
+ revalidateTag("carts");
361
+ // Also revalidate specific cache tag if available
362
+ const cartCacheTag = await getCacheTag("carts");
363
+ if (cartCacheTag)
364
+ revalidateTag(cartCacheTag);
365
+ }
366
+ return { success: true, data };
367
+ }
368
+ catch (error) {
369
+ return { success: false, error: error.message };
370
+ }
371
+ };
@@ -0,0 +1,5 @@
1
+ export declare const listPaymentDetails: () => Promise<any>;
2
+ export declare const createPaymentDetail: (type: "upi" | "bank" | "card", detail_json: Record<string, string>) => Promise<any>;
3
+ export declare const makeDefaultPaymentDetail: (id: string) => Promise<any>;
4
+ export declare const deletePaymentDetail: (id: string) => Promise<any>;
5
+ //# sourceMappingURL=payment-details.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-details.d.ts","sourceRoot":"","sources":["../../src/server/payment-details.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB,oBAyB9B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC5B,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,EAC7B,aAAa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBAWtC,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAU,IAAI,MAAM,iBASxD,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAU,IAAI,MAAM,iBASnD,CAAA"}
@@ -0,0 +1,53 @@
1
+ "use server";
2
+ import { sdk } from "../config";
3
+ import { getAuthHeaders, getCacheOptions } from "../cookies";
4
+ export const listPaymentDetails = async () => {
5
+ const authHeaders = await getAuthHeaders();
6
+ // If no auth headers (guest user), don't even try to fetch
7
+ if (!authHeaders || Object.keys(authHeaders).length === 0) {
8
+ return [];
9
+ }
10
+ const headers = {
11
+ ...authHeaders,
12
+ };
13
+ const next = {
14
+ ...(await getCacheOptions("payment_details")),
15
+ };
16
+ return sdk.client
17
+ .fetch(`/store/payment-details`, {
18
+ method: "GET",
19
+ headers,
20
+ next,
21
+ cache: "no-store",
22
+ })
23
+ .then((res) => res.payment_details || [])
24
+ .catch(() => []);
25
+ };
26
+ export const createPaymentDetail = async (type, detail_json) => {
27
+ const headers = {
28
+ ...(await getAuthHeaders()),
29
+ };
30
+ return sdk.client.fetch(`/store/payment-details`, {
31
+ method: "POST",
32
+ headers,
33
+ body: { type, detail_json },
34
+ });
35
+ };
36
+ export const makeDefaultPaymentDetail = async (id) => {
37
+ const headers = {
38
+ ...(await getAuthHeaders()),
39
+ };
40
+ return sdk.client.fetch(`/store/payment-details/${id}/make-default`, {
41
+ method: "POST",
42
+ headers,
43
+ });
44
+ };
45
+ export const deletePaymentDetail = async (id) => {
46
+ const headers = {
47
+ ...(await getAuthHeaders()),
48
+ };
49
+ return sdk.client.fetch(`/store/payment-details/${id}`, {
50
+ method: "DELETE",
51
+ headers,
52
+ });
53
+ };
@@ -0,0 +1,2 @@
1
+ export declare const listCartPaymentMethods: (regionId: string) => Promise<any>;
2
+ //# sourceMappingURL=payment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment.d.ts","sourceRoot":"","sources":["../../src/server/payment.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,sBAAsB,GAAU,UAAU,MAAM,iBA4B5D,CAAA"}
@@ -0,0 +1,25 @@
1
+ "use server";
2
+ import { sdk } from "../config";
3
+ import { getAuthHeaders, getCacheOptions } from "../cookies";
4
+ export const listCartPaymentMethods = async (regionId) => {
5
+ const headers = {
6
+ ...(await getAuthHeaders()),
7
+ };
8
+ const next = {
9
+ ...(await getCacheOptions("payment_providers")),
10
+ };
11
+ return sdk.client
12
+ .fetch(`/store/payment-providers`, {
13
+ method: "GET",
14
+ query: { region_id: regionId },
15
+ headers,
16
+ next,
17
+ cache: "no-store",
18
+ })
19
+ .then(({ payment_providers }) => payment_providers.sort((a, b) => {
20
+ return a.id > b.id ? 1 : -1;
21
+ }))
22
+ .catch(() => {
23
+ return null;
24
+ });
25
+ };
@@ -0,0 +1,58 @@
1
+ import { HttpTypes } from "@medusajs/types";
2
+ import { SortOptions } from "@modules/store/components/refinement-list/sort-products";
3
+ export declare const listProducts: ({ pageParam, queryParams, countryCode, regionId, }: {
4
+ pageParam?: number;
5
+ queryParams?: HttpTypes.FindParams & HttpTypes.StoreProductListParams;
6
+ countryCode?: string;
7
+ regionId?: string;
8
+ }) => Promise<{
9
+ response: {
10
+ products: HttpTypes.StoreProduct[];
11
+ count: number;
12
+ };
13
+ nextPage: number | null;
14
+ queryParams?: HttpTypes.FindParams & HttpTypes.StoreProductListParams;
15
+ }>;
16
+ /**
17
+ * This will fetch 100 products to the Next.js cache and sort them based on the sortBy parameter.
18
+ * It will then return the paginated products based on the page and limit parameters.
19
+ */
20
+ export declare const listProductsWithSort: ({ page, queryParams, sortBy, countryCode, }: {
21
+ page?: number;
22
+ queryParams?: HttpTypes.FindParams & HttpTypes.StoreProductParams;
23
+ sortBy?: SortOptions;
24
+ countryCode: string;
25
+ }) => Promise<{
26
+ response: {
27
+ products: HttpTypes.StoreProduct[];
28
+ count: number;
29
+ };
30
+ nextPage: number | null;
31
+ queryParams?: HttpTypes.FindParams & HttpTypes.StoreProductParams;
32
+ }>;
33
+ /**
34
+ * Fetch products that have a specific tag value
35
+ */
36
+ export declare function getProductsByTag({ tagValue, limit, countryCode, }: {
37
+ tagValue: string;
38
+ limit?: number;
39
+ countryCode: string;
40
+ }): Promise<HttpTypes.StoreProduct[]>;
41
+ /**
42
+ * Fetch dynamic filter options from the backend API
43
+ */
44
+ export declare const getDynamicFilters: (countryCode: string) => Promise<{
45
+ genders: any;
46
+ productTypes: any;
47
+ materials: any;
48
+ colors: {
49
+ value: string;
50
+ label: string;
51
+ hex: string;
52
+ }[];
53
+ }>;
54
+ /**
55
+ * Fetch a single product by its handle
56
+ */
57
+ export declare function getProductByHandle(handle: string): Promise<HttpTypes.StoreProduct>;
58
+ //# sourceMappingURL=products.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../src/server/products.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAA;AAKrF,eAAO,MAAM,YAAY,GAAU,oDAKhC;IACD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,sBAAsB,CAAA;IACrE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,KAAG,OAAO,CAAC;IACV,QAAQ,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,WAAW,CAAC,EAAE,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,sBAAsB,CAAA;CACtE,CA6KA,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAU,6CAKxC;IACD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,kBAAkB,CAAA;IACjE,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;CACpB,KAAG,OAAO,CAAC;IACV,QAAQ,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,WAAW,CAAC,EAAE,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,kBAAkB,CAAA;CAClE,CA6BA,CAAA;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,QAAQ,EACR,KAAU,EACV,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;CACpB,qCAYA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAU,aAAa,MAAM;;;;;;;;;EA0F1D,CAAA;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,mCAOtD"}