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.
Files changed (218) hide show
  1. package/dist/segment-data/default-page-input.json +191 -0
  2. package/dist/src/config.d.ts +3 -0
  3. package/dist/src/config.d.ts.map +1 -0
  4. package/dist/src/config.js +31 -0
  5. package/dist/src/cookies.d.ts +23 -0
  6. package/dist/src/cookies.d.ts.map +1 -0
  7. package/dist/src/cookies.js +140 -0
  8. package/dist/src/edge.d.ts +3 -0
  9. package/dist/src/edge.d.ts.map +1 -0
  10. package/dist/src/edge.js +1 -0
  11. package/dist/src/middleware.d.ts +3 -0
  12. package/dist/src/middleware.d.ts.map +1 -0
  13. package/dist/src/middleware.js +1 -0
  14. package/dist/src/server/brand-pillars-from-categories.d.ts +8 -0
  15. package/dist/src/server/brand-pillars-from-categories.d.ts.map +1 -0
  16. package/dist/src/server/brand-pillars-from-categories.js +92 -0
  17. package/dist/src/server/cart.d.ts +96 -0
  18. package/dist/src/server/cart.d.ts.map +1 -0
  19. package/dist/src/server/cart.js +797 -0
  20. package/dist/src/server/categories.d.ts +4 -0
  21. package/dist/src/server/categories.d.ts.map +1 -0
  22. package/dist/src/server/categories.js +34 -0
  23. package/dist/src/server/collections.d.ts +8 -0
  24. package/dist/src/server/collections.d.ts.map +1 -0
  25. package/dist/src/server/collections.js +39 -0
  26. package/dist/src/server/config-merge.d.ts +3 -0
  27. package/dist/src/server/config-merge.d.ts.map +1 -0
  28. package/dist/src/server/config-merge.js +31 -0
  29. package/dist/src/server/contact.d.ts +34 -0
  30. package/dist/src/server/contact.d.ts.map +1 -0
  31. package/dist/src/server/contact.js +57 -0
  32. package/dist/src/server/customer-registration.d.ts +142 -0
  33. package/dist/src/server/customer-registration.d.ts.map +1 -0
  34. package/dist/src/server/customer-registration.js +295 -0
  35. package/dist/src/server/customer.d.ts +48 -0
  36. package/dist/src/server/customer.d.ts.map +1 -0
  37. package/dist/src/server/customer.js +413 -0
  38. package/dist/src/server/dynamic-config.d.ts +200 -0
  39. package/dist/src/server/dynamic-config.d.ts.map +1 -0
  40. package/dist/src/server/dynamic-config.js +788 -0
  41. package/dist/src/server/fulfillment.d.ts +5 -0
  42. package/dist/src/server/fulfillment.d.ts.map +1 -0
  43. package/dist/src/server/fulfillment.js +47 -0
  44. package/dist/src/server/guest.d.ts +81 -0
  45. package/dist/src/server/guest.d.ts.map +1 -0
  46. package/dist/src/server/guest.js +183 -0
  47. package/dist/src/server/help-faq-section-defaults.json +92 -0
  48. package/dist/src/server/help-sections/help-faq.d.ts +11 -0
  49. package/dist/src/server/help-sections/help-faq.d.ts.map +1 -0
  50. package/dist/src/server/help-sections/help-faq.js +6 -0
  51. package/dist/src/server/help-sections/index.d.ts +2 -0
  52. package/dist/src/server/help-sections/index.d.ts.map +1 -0
  53. package/dist/src/server/help-sections/index.js +1 -0
  54. package/dist/src/server/hero-banner-priority.d.ts +31 -0
  55. package/dist/src/server/hero-banner-priority.d.ts.map +1 -0
  56. package/dist/src/server/hero-banner-priority.js +26 -0
  57. package/dist/src/server/home-sections/about-brand.d.ts +9 -0
  58. package/dist/src/server/home-sections/about-brand.d.ts.map +1 -0
  59. package/dist/src/server/home-sections/about-brand.js +9 -0
  60. package/dist/src/server/home-sections/baptism-picks.d.ts +10 -0
  61. package/dist/src/server/home-sections/baptism-picks.d.ts.map +1 -0
  62. package/dist/src/server/home-sections/baptism-picks.js +27 -0
  63. package/dist/src/server/home-sections/baptism.d.ts +13 -0
  64. package/dist/src/server/home-sections/baptism.d.ts.map +1 -0
  65. package/dist/src/server/home-sections/baptism.js +43 -0
  66. package/dist/src/server/home-sections/blog-posts.d.ts +9 -0
  67. package/dist/src/server/home-sections/blog-posts.d.ts.map +1 -0
  68. package/dist/src/server/home-sections/blog-posts.js +9 -0
  69. package/dist/src/server/home-sections/brand-marquee.d.ts +8 -0
  70. package/dist/src/server/home-sections/brand-marquee.d.ts.map +1 -0
  71. package/dist/src/server/home-sections/brand-marquee.js +7 -0
  72. package/dist/src/server/home-sections/brand-pillars.d.ts +9 -0
  73. package/dist/src/server/home-sections/brand-pillars.d.ts.map +1 -0
  74. package/dist/src/server/home-sections/brand-pillars.js +9 -0
  75. package/dist/src/server/home-sections/category-pills.d.ts +9 -0
  76. package/dist/src/server/home-sections/category-pills.d.ts.map +1 -0
  77. package/dist/src/server/home-sections/category-pills.js +19 -0
  78. package/dist/src/server/home-sections/celebrity-trust.d.ts +12 -0
  79. package/dist/src/server/home-sections/celebrity-trust.d.ts.map +1 -0
  80. package/dist/src/server/home-sections/celebrity-trust.js +27 -0
  81. package/dist/src/server/home-sections/customer-stories.d.ts +9 -0
  82. package/dist/src/server/home-sections/customer-stories.d.ts.map +1 -0
  83. package/dist/src/server/home-sections/customer-stories.js +9 -0
  84. package/dist/src/server/home-sections/features.d.ts +9 -0
  85. package/dist/src/server/home-sections/features.d.ts.map +1 -0
  86. package/dist/src/server/home-sections/features.js +9 -0
  87. package/dist/src/server/home-sections/hero.d.ts +9 -0
  88. package/dist/src/server/home-sections/hero.d.ts.map +1 -0
  89. package/dist/src/server/home-sections/hero.js +9 -0
  90. package/dist/src/server/home-sections/instagram-posts.d.ts +9 -0
  91. package/dist/src/server/home-sections/instagram-posts.d.ts.map +1 -0
  92. package/dist/src/server/home-sections/instagram-posts.js +9 -0
  93. package/dist/src/server/home-sections/loved-by-moms.d.ts +12 -0
  94. package/dist/src/server/home-sections/loved-by-moms.d.ts.map +1 -0
  95. package/dist/src/server/home-sections/loved-by-moms.js +20 -0
  96. package/dist/src/server/home-sections/luxe-favourites.d.ts +11 -0
  97. package/dist/src/server/home-sections/luxe-favourites.d.ts.map +1 -0
  98. package/dist/src/server/home-sections/luxe-favourites.js +19 -0
  99. package/dist/src/server/home-sections/new-arrivals-classic.d.ts +8 -0
  100. package/dist/src/server/home-sections/new-arrivals-classic.d.ts.map +1 -0
  101. package/dist/src/server/home-sections/new-arrivals-classic.js +10 -0
  102. package/dist/src/server/home-sections/new-arrivals.d.ts +12 -0
  103. package/dist/src/server/home-sections/new-arrivals.d.ts.map +1 -0
  104. package/dist/src/server/home-sections/new-arrivals.js +28 -0
  105. package/dist/src/server/home-sections/promo-announcements.d.ts +11 -0
  106. package/dist/src/server/home-sections/promo-announcements.d.ts.map +1 -0
  107. package/dist/src/server/home-sections/promo-announcements.js +5 -0
  108. package/dist/src/server/home-sections/promo-countdown.d.ts +6 -0
  109. package/dist/src/server/home-sections/promo-countdown.d.ts.map +1 -0
  110. package/dist/src/server/home-sections/promo-countdown.js +5 -0
  111. package/dist/src/server/home-sections/shared.d.ts +10 -0
  112. package/dist/src/server/home-sections/shared.d.ts.map +1 -0
  113. package/dist/src/server/home-sections/shared.js +29 -0
  114. package/dist/src/server/home-sections/shop-by-age.d.ts +9 -0
  115. package/dist/src/server/home-sections/shop-by-age.d.ts.map +1 -0
  116. package/dist/src/server/home-sections/shop-by-age.js +17 -0
  117. package/dist/src/server/home-sections/shop-by-category.d.ts +10 -0
  118. package/dist/src/server/home-sections/shop-by-category.d.ts.map +1 -0
  119. package/dist/src/server/home-sections/shop-by-category.js +17 -0
  120. package/dist/src/server/home-sections/testimonials.d.ts +9 -0
  121. package/dist/src/server/home-sections/testimonials.d.ts.map +1 -0
  122. package/dist/src/server/home-sections/testimonials.js +9 -0
  123. package/dist/src/server/home-sections/theme-dresses.d.ts +12 -0
  124. package/dist/src/server/home-sections/theme-dresses.d.ts.map +1 -0
  125. package/dist/src/server/home-sections/theme-dresses.js +27 -0
  126. package/dist/src/server/home-sections/video-stories.d.ts +9 -0
  127. package/dist/src/server/home-sections/video-stories.d.ts.map +1 -0
  128. package/dist/src/server/home-sections/video-stories.js +9 -0
  129. package/dist/src/server/home-sections/why-choose-us.d.ts +9 -0
  130. package/dist/src/server/home-sections/why-choose-us.d.ts.map +1 -0
  131. package/dist/src/server/home-sections/why-choose-us.js +9 -0
  132. package/dist/src/server/home.d.ts +54 -0
  133. package/dist/src/server/home.d.ts.map +1 -0
  134. package/dist/src/server/home.js +1 -0
  135. package/dist/src/server/homepage-config.types.d.ts +405 -0
  136. package/dist/src/server/homepage-config.types.d.ts.map +1 -0
  137. package/dist/src/server/homepage-config.types.js +35 -0
  138. package/dist/src/server/homepage-section-defaults.d.ts +201 -0
  139. package/dist/src/server/homepage-section-defaults.d.ts.map +1 -0
  140. package/dist/src/server/homepage-section-defaults.js +192 -0
  141. package/dist/src/server/index.d.ts +26 -0
  142. package/dist/src/server/index.d.ts.map +1 -0
  143. package/dist/src/server/index.js +25 -0
  144. package/dist/src/server/locale-actions.d.ts +14 -0
  145. package/dist/src/server/locale-actions.d.ts.map +1 -0
  146. package/dist/src/server/locale-actions.js +58 -0
  147. package/dist/src/server/locales.d.ts +8 -0
  148. package/dist/src/server/locales.d.ts.map +1 -0
  149. package/dist/src/server/locales.js +12 -0
  150. package/dist/src/server/normalize-homepage-config.d.ts +7 -0
  151. package/dist/src/server/normalize-homepage-config.d.ts.map +1 -0
  152. package/dist/src/server/normalize-homepage-config.js +281 -0
  153. package/dist/src/server/notifications.d.ts +2 -0
  154. package/dist/src/server/notifications.d.ts.map +1 -0
  155. package/dist/src/server/notifications.js +20 -0
  156. package/dist/src/server/onboarding.d.ts +2 -0
  157. package/dist/src/server/onboarding.d.ts.map +1 -0
  158. package/dist/src/server/onboarding.js +8 -0
  159. package/dist/src/server/orders.d.ts +63 -0
  160. package/dist/src/server/orders.d.ts.map +1 -0
  161. package/dist/src/server/orders.js +230 -0
  162. package/dist/src/server/page-input.d.ts +25 -0
  163. package/dist/src/server/page-input.d.ts.map +1 -0
  164. package/dist/src/server/page-input.js +172 -0
  165. package/dist/src/server/payment-details.d.ts +5 -0
  166. package/dist/src/server/payment-details.d.ts.map +1 -0
  167. package/dist/src/server/payment-details.js +28 -0
  168. package/dist/src/server/payment.d.ts +3 -0
  169. package/dist/src/server/payment.d.ts.map +1 -0
  170. package/dist/src/server/payment.js +13 -0
  171. package/dist/src/server/pincode.d.ts +7 -0
  172. package/dist/src/server/pincode.d.ts.map +1 -0
  173. package/dist/src/server/pincode.js +30 -0
  174. package/dist/src/server/products.d.ts +54 -0
  175. package/dist/src/server/products.d.ts.map +1 -0
  176. package/dist/src/server/products.js +154 -0
  177. package/dist/src/server/regions.d.ts +5 -0
  178. package/dist/src/server/regions.d.ts.map +1 -0
  179. package/dist/src/server/regions.js +57 -0
  180. package/dist/src/server/returns.d.ts +29 -0
  181. package/dist/src/server/returns.d.ts.map +1 -0
  182. package/dist/src/server/returns.js +132 -0
  183. package/dist/src/server/shoppable-looks.d.ts +17 -0
  184. package/dist/src/server/shoppable-looks.d.ts.map +1 -0
  185. package/dist/src/server/shoppable-looks.js +136 -0
  186. package/dist/src/server/storefront-cms.d.ts +11 -0
  187. package/dist/src/server/storefront-cms.d.ts.map +1 -0
  188. package/dist/src/server/storefront-cms.js +24 -0
  189. package/dist/src/server/swaps.d.ts +15 -0
  190. package/dist/src/server/swaps.d.ts.map +1 -0
  191. package/dist/src/server/swaps.js +89 -0
  192. package/dist/src/server/variants.d.ts +3 -0
  193. package/dist/src/server/variants.d.ts.map +1 -0
  194. package/dist/src/server/variants.js +15 -0
  195. package/dist/src/server/wishlist.d.ts +11 -0
  196. package/dist/src/server/wishlist.d.ts.map +1 -0
  197. package/dist/src/server/wishlist.js +49 -0
  198. package/dist/src/util/get-locale-header.d.ts +4 -0
  199. package/dist/src/util/get-locale-header.d.ts.map +1 -0
  200. package/dist/src/util/get-locale-header.js +7 -0
  201. package/dist/src/util/medusa-error.d.ts +2 -0
  202. package/dist/src/util/medusa-error.d.ts.map +1 -0
  203. package/dist/src/util/medusa-error.js +18 -0
  204. package/dist/src/util/revalidate-cart.d.ts +2 -0
  205. package/dist/src/util/revalidate-cart.d.ts.map +1 -0
  206. package/dist/src/util/revalidate-cart.js +8 -0
  207. package/dist/src/util/sort-products.d.ts +3 -0
  208. package/dist/src/util/sort-products.d.ts.map +1 -0
  209. package/dist/src/util/sort-products.js +1 -0
  210. package/dist/src/util/store-client.d.ts +11 -0
  211. package/dist/src/util/store-client.d.ts.map +1 -0
  212. package/dist/src/util/store-client.js +75 -0
  213. package/package.json +32 -20
  214. package/src/server/dynamic-config.ts +136 -0
  215. package/src/server/hero-banner-priority.ts +63 -0
  216. package/src/server/home-sections/customer-stories.ts +23 -0
  217. package/src/server/homepage-config.types.ts +18 -0
  218. package/src/server/homepage-section-defaults.ts +2 -0
@@ -0,0 +1,172 @@
1
+ import "server-only";
2
+ import defaultPageInputJson from "../../segment-data/default-page-input.json";
3
+ import { mergeSectionBlock } from "./config-merge";
4
+ import { normalizeHomepageConfig } from "./normalize-homepage-config";
5
+ function asObject(v) {
6
+ return v && typeof v === "object" && !Array.isArray(v) ? v : null;
7
+ }
8
+ function asArray(v) {
9
+ return Array.isArray(v) ? v : [];
10
+ }
11
+ /** `hero-banners.homeBanners[].slide` from medusa-plugin-dynamic-config. */
12
+ function heroSlideRow(row) {
13
+ const rowObj = asObject(row);
14
+ if (!rowObj)
15
+ return null;
16
+ const slide = asObject(rowObj.slide) ?? rowObj;
17
+ const image = slide.image;
18
+ if (image == null || image === "")
19
+ return null;
20
+ return {
21
+ image,
22
+ title: slide.title,
23
+ subtitle: slide.subtitle,
24
+ description: slide.description,
25
+ buttonText: slide.buttonText ?? slide.buttonName,
26
+ buttonLink: slide.buttonLink,
27
+ };
28
+ }
29
+ function simplifiedConfigFromHeroBanners(response) {
30
+ if (!response || typeof response !== "object")
31
+ return null;
32
+ const root = asObject(response["hero-banners"]);
33
+ if (!root)
34
+ return null;
35
+ const desktop = asArray(root.homeBanners)
36
+ .map(heroSlideRow)
37
+ .filter((row) => row !== null);
38
+ const mobile = asArray(root.appBanners)
39
+ .map(heroSlideRow)
40
+ .filter((row) => row !== null);
41
+ if (!desktop.length && !mobile.length)
42
+ return null;
43
+ const banners = {};
44
+ if (desktop.length)
45
+ banners.desktop = desktop;
46
+ if (mobile.length)
47
+ banners.mobile = mobile;
48
+ return { site: { banners } };
49
+ }
50
+ function mergeHomepageConfigLayers(...layers) {
51
+ const defined = layers.filter(Boolean);
52
+ if (!defined.length)
53
+ return null;
54
+ if (defined.length === 1)
55
+ return defined[0];
56
+ const merged = {};
57
+ for (const layer of defined) {
58
+ const site = asObject(layer.site) ?? {};
59
+ const mergedSite = asObject(merged.site) ?? {};
60
+ const layerBanners = asObject(site.banners);
61
+ if (layerBanners) {
62
+ mergedSite.banners = {
63
+ ...(asObject(mergedSite.banners) ?? {}),
64
+ ...layerBanners,
65
+ };
66
+ }
67
+ for (const [key, value] of Object.entries(site)) {
68
+ if (key !== "banners" && value !== undefined)
69
+ mergedSite[key] = value;
70
+ }
71
+ if (Object.keys(mergedSite).length)
72
+ merged.site = mergedSite;
73
+ const sections = asObject(layer.sections);
74
+ if (sections) {
75
+ merged.sections = { ...(asObject(merged.sections) ?? {}), ...sections };
76
+ }
77
+ for (const [key, value] of Object.entries(layer)) {
78
+ if (key === "site" || key === "sections")
79
+ continue;
80
+ if (value !== undefined)
81
+ merged[key] = value;
82
+ }
83
+ }
84
+ return merged;
85
+ }
86
+ export const DEFAULT_PAGE_INPUT = defaultPageInputJson;
87
+ /**
88
+ * Merge CMS / main-project overrides onto package JSON defaults.
89
+ * Empty strings and empty arrays are ignored (same rules as section merge).
90
+ */
91
+ export function mergePageInputWithDefaults(override) {
92
+ if (!override)
93
+ return { ...DEFAULT_PAGE_INPUT };
94
+ const merged = mergeSectionBlock({ ...DEFAULT_PAGE_INPUT }, override);
95
+ const defaultSections = DEFAULT_PAGE_INPUT.sections ?? {};
96
+ const overrideSections = override.sections ?? {};
97
+ const mergedSections = { ...defaultSections };
98
+ for (const [key, value] of Object.entries(overrideSections)) {
99
+ const base = defaultSections[key];
100
+ const baseObj = base && typeof base === "object" && !Array.isArray(base)
101
+ ? base
102
+ : {};
103
+ const overrideObj = value && typeof value === "object" && !Array.isArray(value)
104
+ ? value
105
+ : typeof value === "string"
106
+ ? { text: value }
107
+ : {};
108
+ mergedSections[key] = mergeSectionBlock(baseObj, overrideObj);
109
+ }
110
+ merged.sections = mergedSections;
111
+ return merged;
112
+ }
113
+ /** Resolve page input: explicit override, or package defaults. */
114
+ export function resolvePageInput(pageInput) {
115
+ return mergePageInputWithDefaults(pageInput ?? null);
116
+ }
117
+ /**
118
+ * Medusa plugin split keys (`site-branding`, `contact`, `faqs`, `homepage-sections`)
119
+ * → simplified `{ site, sections }` for {@link normalizeHomepageConfig}.
120
+ */
121
+ export function simplifiedHomepageConfigFromDynamicResponse(response) {
122
+ if (!response || typeof response !== "object")
123
+ return null;
124
+ const siteBranding = asObject(response["site-branding"]);
125
+ const contact = asObject(response.contact);
126
+ const faqsRoot = asObject(response.faqs);
127
+ const homepageSections = asObject(response["homepage-sections"]);
128
+ const sectionsFromCms = asObject(homepageSections?.sections);
129
+ const hasSplitKeys = siteBranding || contact || faqsRoot || sectionsFromCms;
130
+ if (!hasSplitKeys)
131
+ return null;
132
+ const site = {};
133
+ if (siteBranding) {
134
+ if (siteBranding.logo != null)
135
+ site.logo = siteBranding.logo;
136
+ if (siteBranding.brandName != null)
137
+ site.brandName = siteBranding.brandName;
138
+ if (siteBranding.description != null) {
139
+ site.description = siteBranding.description;
140
+ }
141
+ }
142
+ if (contact)
143
+ site.contact = contact;
144
+ const sections = sectionsFromCms ? { ...sectionsFromCms } : {};
145
+ const helpFaq = asObject(faqsRoot?.helpFaq);
146
+ if (helpFaq)
147
+ sections.helpFaq = helpFaq;
148
+ const simplified = {};
149
+ if (Object.keys(site).length)
150
+ simplified.site = site;
151
+ if (Object.keys(sections).length)
152
+ simplified.sections = sections;
153
+ return Object.keys(simplified).length
154
+ ? simplified
155
+ : null;
156
+ }
157
+ /** CMS-only homepage config (no package JSON defaults). */
158
+ export function homepageConfigFromDynamicResponseNormalized(response) {
159
+ const legacy = response?.["homepage-config"] ?? null;
160
+ const fromSplit = simplifiedHomepageConfigFromDynamicResponse(response);
161
+ const fromHeroBanners = simplifiedConfigFromHeroBanners(response);
162
+ const raw = mergeHomepageConfigLayers(fromSplit, legacy, fromHeroBanners);
163
+ return normalizeHomepageConfig(raw);
164
+ }
165
+ /**
166
+ * Build `homepage-config` from Medusa `GET /store/dynamic-config` (main project only).
167
+ * Supports legacy `homepage-config`, split plugin keys, and `hero-banners`.
168
+ */
169
+ export function homepageConfigFromDynamicResponse(response) {
170
+ const normalized = homepageConfigFromDynamicResponseNormalized(response);
171
+ return mergePageInputWithDefaults(normalized);
172
+ }
@@ -0,0 +1,5 @@
1
+ export declare const listPaymentDetails: () => Promise<import("medusa-services/payment").StorePaymentDetail[]>;
2
+ export declare const createPaymentDetail: (type: "upi" | "bank" | "card", detail_json: Record<string, string>) => Promise<Record<string, unknown>>;
3
+ export declare const makeDefaultPaymentDetail: (id: string) => Promise<Record<string, unknown>>;
4
+ export declare const deletePaymentDetail: (id: string) => Promise<void>;
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":"AAUA,eAAO,MAAM,kBAAkB,uEAY9B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,EAC7B,aAAa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,qCAIpC,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAU,IAAI,MAAM,qCAGxD,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAU,IAAI,MAAM,kBAGnD,CAAA"}
@@ -0,0 +1,28 @@
1
+ "use server";
2
+ import { medusaPaymentDetailCreate, medusaPaymentDetailDelete, medusaPaymentDetailMakeDefault, medusaPaymentDetailsList, } from "medusa-services/payment";
3
+ import { getStoreClientOptions } from "../util/store-client";
4
+ export const listPaymentDetails = async () => {
5
+ try {
6
+ const options = await getStoreClientOptions();
7
+ if (!options.authorization) {
8
+ return [];
9
+ }
10
+ const { payment_details } = await medusaPaymentDetailsList(options);
11
+ return payment_details ?? [];
12
+ }
13
+ catch {
14
+ return [];
15
+ }
16
+ };
17
+ export const createPaymentDetail = async (type, detail_json) => {
18
+ const options = await getStoreClientOptions();
19
+ return medusaPaymentDetailCreate(type, detail_json, options);
20
+ };
21
+ export const makeDefaultPaymentDetail = async (id) => {
22
+ const options = await getStoreClientOptions();
23
+ return medusaPaymentDetailMakeDefault(id, options);
24
+ };
25
+ export const deletePaymentDetail = async (id) => {
26
+ const options = await getStoreClientOptions();
27
+ return medusaPaymentDetailDelete(id, options);
28
+ };
@@ -0,0 +1,3 @@
1
+ import { HttpTypes } from "@medusajs/types";
2
+ export declare const listCartPaymentMethods: (regionId: string) => Promise<HttpTypes.StorePaymentProvider[] | null>;
3
+ //# sourceMappingURL=payment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment.d.ts","sourceRoot":"","sources":["../../../src/server/payment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI3C,eAAO,MAAM,sBAAsB,GAAU,UAAU,MAAM,qDAQ5D,CAAA"}
@@ -0,0 +1,13 @@
1
+ "use server";
2
+ import { medusaPaymentProvidersList } from "medusa-services/payment";
3
+ import { getStoreClientOptions } from "../util/store-client";
4
+ export const listCartPaymentMethods = async (regionId) => {
5
+ try {
6
+ const options = await getStoreClientOptions();
7
+ const { payment_providers } = await medusaPaymentProvidersList(regionId, options);
8
+ return payment_providers.sort((a, b) => (a.id > b.id ? 1 : -1));
9
+ }
10
+ catch {
11
+ return null;
12
+ }
13
+ };
@@ -0,0 +1,7 @@
1
+ export type PincodeLookupResult = {
2
+ city: string;
3
+ province: string;
4
+ };
5
+ /** Resolve Indian pincode to district (city) and state. */
6
+ export declare function lookupIndianPincode(postalCode: string): Promise<PincodeLookupResult | null>;
7
+ //# sourceMappingURL=pincode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pincode.d.ts","sourceRoot":"","sources":["../../../src/server/pincode.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAQD,2DAA2D;AAC3D,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAgCrC"}
@@ -0,0 +1,30 @@
1
+ "use server";
2
+ function titleCase(value) {
3
+ return value
4
+ .toLowerCase()
5
+ .replace(/\b\w/g, (char) => char.toUpperCase());
6
+ }
7
+ /** Resolve Indian pincode to district (city) and state. */
8
+ export async function lookupIndianPincode(postalCode) {
9
+ const cleaned = postalCode.replace(/\D/g, "");
10
+ if (cleaned.length !== 6)
11
+ return null;
12
+ try {
13
+ const response = await fetch(`https://postal-pincode-api.vercel.app/api/v1/pincode/${cleaned}`, { next: { revalidate: 86400 } });
14
+ if (!response.ok)
15
+ return null;
16
+ const payload = await response.json();
17
+ const offices = payload?.data;
18
+ const match = offices?.find((office) => office.delivery) ?? offices?.[0];
19
+ if (match?.district && match?.state) {
20
+ return {
21
+ city: titleCase(match.district),
22
+ province: titleCase(match.state),
23
+ };
24
+ }
25
+ }
26
+ catch {
27
+ // ignore network errors
28
+ }
29
+ return null;
30
+ }
@@ -0,0 +1,54 @@
1
+ import { type SortOptions } from "../util/sort-products";
2
+ import { HttpTypes } from "@medusajs/types";
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
+ export declare const listProductsWithSort: ({ page, queryParams, sortBy, countryCode, }: {
17
+ page?: number;
18
+ queryParams?: HttpTypes.FindParams & HttpTypes.StoreProductParams;
19
+ sortBy?: SortOptions;
20
+ countryCode: string;
21
+ }) => Promise<{
22
+ response: {
23
+ products: HttpTypes.StoreProduct[];
24
+ count: number;
25
+ };
26
+ nextPage: number | null;
27
+ queryParams?: HttpTypes.FindParams & HttpTypes.StoreProductParams;
28
+ }>;
29
+ export declare function getProductsByTag({ tagValue, limit, countryCode, }: {
30
+ tagValue: string;
31
+ limit?: number;
32
+ countryCode: string;
33
+ }): Promise<HttpTypes.StoreProduct[]>;
34
+ export declare const getDynamicFilters: (_countryCode: string) => Promise<{
35
+ genders: {
36
+ value: string;
37
+ label: string;
38
+ }[];
39
+ productTypes: {
40
+ value: string;
41
+ label: string;
42
+ }[];
43
+ materials: {
44
+ value: string;
45
+ label: string;
46
+ }[];
47
+ colors: {
48
+ value: string;
49
+ label: string;
50
+ hex: string;
51
+ }[];
52
+ }>;
53
+ export declare function getProductByHandle(handle: string): Promise<HttpTypes.StoreProduct | undefined>;
54
+ //# sourceMappingURL=products.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../../src/server/products.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAU3C,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,CAsCA,CAAA;AAED,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,CAuBA,CAAA;AAED,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,eAAO,MAAM,iBAAiB,GAAU,cAAc,MAAM;;;;;;;;;;;;;;;;;;EAgF3D,CAAA;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,+CAItD"}
@@ -0,0 +1,154 @@
1
+ "use server";
2
+ import { getRegion, retrieveRegion } from "./regions";
3
+ import Color from "color";
4
+ import { medusaProductByHandle, medusaProductHelperFilters, medusaProductList, } from "medusa-services/products";
5
+ import { getStoreClientOptions } from "../util/store-client";
6
+ export const listProducts = async ({ pageParam = 1, queryParams, countryCode, regionId, }) => {
7
+ if (!countryCode && !regionId) {
8
+ throw new Error("Country code or region ID is required");
9
+ }
10
+ const limit = queryParams?.limit || 12;
11
+ let region;
12
+ if (countryCode) {
13
+ region = await getRegion(countryCode);
14
+ }
15
+ else {
16
+ region = await retrieveRegion(regionId);
17
+ }
18
+ if (!region) {
19
+ return {
20
+ response: { products: [], count: 0 },
21
+ nextPage: null,
22
+ };
23
+ }
24
+ const options = await getStoreClientOptions();
25
+ const { products, count, nextPage } = await medusaProductList(options, {
26
+ pageParam,
27
+ limit,
28
+ regionId: region.id,
29
+ queryParams: queryParams,
30
+ });
31
+ return {
32
+ response: {
33
+ products: products,
34
+ count,
35
+ },
36
+ nextPage,
37
+ queryParams,
38
+ };
39
+ };
40
+ export const listProductsWithSort = async ({ page = 1, queryParams, sortBy = "created_at_desc", countryCode, }) => {
41
+ const limit = queryParams?.limit || 12;
42
+ const { response: { products, count }, nextPage, } = await listProducts({
43
+ pageParam: page,
44
+ queryParams: {
45
+ ...queryParams,
46
+ limit,
47
+ },
48
+ countryCode,
49
+ });
50
+ return {
51
+ response: {
52
+ products,
53
+ count,
54
+ },
55
+ nextPage,
56
+ queryParams,
57
+ };
58
+ };
59
+ export async function getProductsByTag({ tagValue, limit = 12, countryCode, }) {
60
+ try {
61
+ const result = await listProducts({
62
+ queryParams: { tags: [tagValue], limit },
63
+ countryCode,
64
+ });
65
+ return result.response.products;
66
+ }
67
+ catch (error) {
68
+ console.error("Error fetching products by tag:", error);
69
+ return [];
70
+ }
71
+ }
72
+ export const getDynamicFilters = async (_countryCode) => {
73
+ try {
74
+ const options = await getStoreClientOptions();
75
+ if (!options.publishableApiKey) {
76
+ return { genders: [], productTypes: [], materials: [], colors: [] };
77
+ }
78
+ const data = await medusaProductHelperFilters(options);
79
+ const formatLabel = (str) => {
80
+ return str
81
+ .split(/[_-]/)
82
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
83
+ .join(" ");
84
+ };
85
+ const metadata = data.metadata || {};
86
+ const variantOptions = data.variant_options || [];
87
+ const colorSet = new Set();
88
+ variantOptions.forEach((o) => {
89
+ if (o.option_title.toLowerCase() === "color" || o.option_title.toLowerCase() === "colour") {
90
+ o.values?.forEach((v) => {
91
+ if (v)
92
+ colorSet.add(v.trim().toLowerCase());
93
+ });
94
+ }
95
+ });
96
+ if (metadata.color) {
97
+ metadata.color.forEach((c) => {
98
+ if (c) {
99
+ const parts = c
100
+ .split(/[,/\n\r]+/)
101
+ .map((s) => s.trim())
102
+ .filter(Boolean);
103
+ parts.forEach((p) => colorSet.add(p.toLowerCase()));
104
+ }
105
+ });
106
+ }
107
+ return {
108
+ genders: (metadata.gender || []).sort().map((g) => ({
109
+ value: g,
110
+ label: formatLabel(g),
111
+ })),
112
+ productTypes: (data.product_types || [])
113
+ .sort((a, b) => a.label.localeCompare(b.label))
114
+ .map((t) => ({
115
+ value: t.label,
116
+ label: formatLabel(t.label),
117
+ })),
118
+ materials: (metadata.material || []).sort().map((m) => ({
119
+ value: m,
120
+ label: formatLabel(m),
121
+ })),
122
+ colors: Array.from(colorSet)
123
+ .sort()
124
+ .map((c) => {
125
+ let hex = "";
126
+ try {
127
+ hex = Color(c.replace(/\s+/g, "").toLowerCase()).hex();
128
+ }
129
+ catch {
130
+ try {
131
+ hex = Color(c.toLowerCase()).hex();
132
+ }
133
+ catch {
134
+ // no hex
135
+ }
136
+ }
137
+ return {
138
+ value: c,
139
+ label: formatLabel(c),
140
+ hex,
141
+ };
142
+ }),
143
+ };
144
+ }
145
+ catch (error) {
146
+ console.error("Error fetching dynamic filters:", error);
147
+ return { genders: [], productTypes: [], materials: [], colors: [] };
148
+ }
149
+ };
150
+ export async function getProductByHandle(handle) {
151
+ const options = await getStoreClientOptions();
152
+ const product = await medusaProductByHandle(handle, options);
153
+ return product;
154
+ }
@@ -0,0 +1,5 @@
1
+ import { HttpTypes } from "@medusajs/types";
2
+ export declare const listRegions: () => Promise<HttpTypes.StoreRegion[]>;
3
+ export declare const retrieveRegion: (id: string) => Promise<HttpTypes.StoreRegion>;
4
+ export declare const getRegion: (countryCode: string) => Promise<HttpTypes.StoreRegion | null | undefined>;
5
+ //# sourceMappingURL=regions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regions.d.ts","sourceRoot":"","sources":["../../../src/server/regions.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAK3C,eAAO,MAAM,WAAW,wCAavB,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,IAAI,MAAM,mCAa9C,CAAA;AAID,eAAO,MAAM,SAAS,GAAU,aAAa,MAAM,sDA2BlD,CAAA"}
@@ -0,0 +1,57 @@
1
+ "use server";
2
+ import { sdk } from "../config";
3
+ import medusaError from "../util/medusa-error";
4
+ import { getCacheOptions } from "../cookies";
5
+ import { medusaRegionList } from "medusa-services/regions";
6
+ import { getStoreClientOptions } from "../util/store-client";
7
+ export const listRegions = async () => {
8
+ const next = {
9
+ ...(await getCacheOptions("regions")),
10
+ };
11
+ return sdk.client
12
+ .fetch(`/store/regions`, {
13
+ method: "GET",
14
+ next,
15
+ cache: "force-cache",
16
+ })
17
+ .then(({ regions }) => regions)
18
+ .catch(medusaError);
19
+ };
20
+ export const retrieveRegion = async (id) => {
21
+ const next = {
22
+ ...(await getCacheOptions(["regions", id].join("-"))),
23
+ };
24
+ return sdk.client
25
+ .fetch(`/store/regions/${id}`, {
26
+ method: "GET",
27
+ next,
28
+ cache: "force-cache",
29
+ })
30
+ .then(({ region }) => region)
31
+ .catch(medusaError);
32
+ };
33
+ const regionMap = new Map();
34
+ export const getRegion = async (countryCode) => {
35
+ try {
36
+ if (regionMap.has(countryCode)) {
37
+ return regionMap.get(countryCode);
38
+ }
39
+ const options = await getStoreClientOptions();
40
+ const { regions } = await medusaRegionList(options);
41
+ if (!regions?.length) {
42
+ return null;
43
+ }
44
+ regions.forEach((region) => {
45
+ region.countries?.forEach((c) => {
46
+ regionMap.set(c?.iso_2 ?? "", region);
47
+ });
48
+ });
49
+ const region = countryCode
50
+ ? regionMap.get(countryCode)
51
+ : regionMap.get("us");
52
+ return region ?? null;
53
+ }
54
+ catch (e) {
55
+ return null;
56
+ }
57
+ };
@@ -0,0 +1,29 @@
1
+ import { HttpTypes } from "@medusajs/types";
2
+ export declare const listReturnReasons: () => Promise<import("medusa-services/returns").StoreReturnReason[]>;
3
+ export declare const listReturnShippingOptions: (cartId: string, regionId?: string, productIds?: string[]) => Promise<HttpTypes.StoreShippingOption[]>;
4
+ export declare const createReturnRequest: (state: {
5
+ success: boolean;
6
+ error: string | null;
7
+ return: HttpTypes.StoreReturn | null;
8
+ }, formData: FormData) => Promise<{
9
+ success: boolean;
10
+ error: string | null;
11
+ return: HttpTypes.StoreReturn | null;
12
+ }>;
13
+ /**
14
+ * Link a payment method to a return (for Refund Destination)
15
+ */
16
+ export declare const updateReturnPayment: (returnId: string, paymentId: string) => Promise<{
17
+ success: boolean;
18
+ data: unknown;
19
+ error?: undefined;
20
+ } | {
21
+ success: boolean;
22
+ error: string;
23
+ data?: undefined;
24
+ }>;
25
+ /**
26
+ * List returns for an order or customer
27
+ */
28
+ export declare const listReturns: (orderId?: string) => Promise<import("medusa-services/returns").StoreReturnListResponse>;
29
+ //# sourceMappingURL=returns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"returns.d.ts","sourceRoot":"","sources":["../../../src/server/returns.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAK3C,eAAO,MAAM,iBAAiB,sEAG7B,CAAA;AAED,eAAO,MAAM,yBAAyB,GACpC,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,aAAa,MAAM,EAAE,KACpB,OAAO,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAOzC,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,OAAO;IACL,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAA;CACrC,EACD,UAAU,QAAQ,KACjB,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAA;CACrC,CAmFA,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAU,UAAU,MAAM,EAAE,WAAW,MAAM;;;;;;;;EAa5E,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,GAAU,UAAU,MAAM,uEA4BjD,CAAA"}