@ecomiq/core 0.1.9 → 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 (274) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +39 -2
  3. package/dist/_virtual/_rolldown/runtime-C6LprzCP.cjs +22 -0
  4. package/dist/api.cjs +117 -102
  5. package/dist/api.d.cts +33 -37
  6. package/dist/api.d.ts +33 -37
  7. package/dist/api.js +116 -100
  8. package/dist/client.cjs +499 -1676
  9. package/dist/client.d.cts +156 -15
  10. package/dist/client.d.ts +156 -15
  11. package/dist/client.js +500 -1675
  12. package/dist/index.cjs +333 -2092
  13. package/dist/index.d.cts +53 -1127
  14. package/dist/index.d.ts +53 -1127
  15. package/dist/index.js +52 -1895
  16. package/dist/libs/bounded-read-cache-Abmb5VnJ.js +41 -0
  17. package/dist/libs/bounded-read-cache-D4644LJo.cjs +41 -0
  18. package/dist/libs/catalog-link-key-B7l5KZsF.js +9 -0
  19. package/dist/libs/catalog-link-key-CZTHJBGD.cjs +9 -0
  20. package/dist/libs/catalog-link-key.d.cts +2 -0
  21. package/dist/libs/catalog-link-key.d.ts +2 -0
  22. package/dist/libs/graphql-_6Y8lR_Q.js +49 -0
  23. package/dist/libs/graphql-selection-Cj51WkJn.cjs +21 -0
  24. package/dist/libs/graphql-selection-H1RMh6VD.js +21 -0
  25. package/dist/libs/graphql-selection.d.cts +3 -0
  26. package/dist/libs/graphql-selection.d.ts +3 -0
  27. package/dist/libs/graphql-wJH7HaQU.cjs +50 -0
  28. package/dist/libs/graphql.d.cts +24 -0
  29. package/dist/libs/graphql.d.ts +24 -0
  30. package/dist/models/amounts-cKBCecl7.js +5 -0
  31. package/dist/models/amounts-lmg89eJQ.cjs +4 -0
  32. package/dist/models/articles-C-4JvT2Z.js +27 -0
  33. package/dist/models/articles-xHCXLKDK.cjs +30 -0
  34. package/dist/models/articles.d.cts +46 -0
  35. package/dist/models/articles.d.ts +46 -0
  36. package/dist/models/catalog-links-BzJeyBy4.js +80 -0
  37. package/dist/models/catalog-links-c4LADGf_.cjs +88 -0
  38. package/dist/models/catalog-links.d.cts +39 -0
  39. package/dist/models/catalog-links.d.ts +39 -0
  40. package/dist/models/categories-CKkJY8_P.js +42 -0
  41. package/dist/models/categories-DZ5i5kwi.cjs +45 -0
  42. package/dist/models/categories.d.cts +54 -0
  43. package/dist/models/categories.d.ts +54 -0
  44. package/dist/models/collections.cjs +13 -22
  45. package/dist/models/collections.d.cts +23 -56
  46. package/dist/models/collections.d.ts +23 -56
  47. package/dist/models/collections.js +12 -20
  48. package/dist/models/complaint-book-D5INpuI2.cjs +64 -0
  49. package/dist/models/complaint-book-QpQZe7Xl.js +58 -0
  50. package/dist/models/complaint-book.d.cts +71 -0
  51. package/dist/models/complaint-book.d.ts +71 -0
  52. package/dist/models/customer-address.cjs +39 -38
  53. package/dist/models/customer-address.d.cts +59 -158
  54. package/dist/models/customer-address.d.ts +59 -158
  55. package/dist/models/customer-address.js +38 -36
  56. package/dist/models/customer-order.cjs +181 -142
  57. package/dist/models/customer-order.d.cts +430 -858
  58. package/dist/models/customer-order.d.ts +430 -858
  59. package/dist/models/customer-order.js +178 -141
  60. package/dist/models/customer-profile.cjs +121 -118
  61. package/dist/models/customer-profile.d.cts +89 -174
  62. package/dist/models/customer-profile.d.ts +89 -174
  63. package/dist/models/customer-profile.js +121 -116
  64. package/dist/models/customer-registration-C13knqyv.js +28 -0
  65. package/dist/models/customer-registration-EZ0yZgGr.cjs +31 -0
  66. package/dist/models/customer-registration.d.cts +66 -0
  67. package/dist/models/customer-registration.d.ts +66 -0
  68. package/dist/models/customer-session-BiX0TXhO.js +41 -0
  69. package/dist/models/customer-session-JeQiC8Yx.cjs +45 -0
  70. package/dist/models/customer-session.d.cts +61 -0
  71. package/dist/models/customer-session.d.ts +61 -0
  72. package/dist/models/geo.cjs +52 -49
  73. package/dist/models/geo.d.cts +141 -270
  74. package/dist/models/geo.d.ts +141 -270
  75. package/dist/models/geo.js +51 -47
  76. package/dist/models/ids.cjs +8 -11
  77. package/dist/models/ids.d.cts +7 -10
  78. package/dist/models/ids.d.ts +7 -10
  79. package/dist/models/ids.js +7 -9
  80. package/dist/models/order-draft-CnHJ0btL.js +37 -0
  81. package/dist/models/order-draft-PFBZfRRR.cjs +39 -0
  82. package/dist/models/order-draft.d.cts +51 -0
  83. package/dist/models/order-draft.d.ts +51 -0
  84. package/dist/models/order-review--xGlZKtS.cjs +18 -0
  85. package/dist/models/order-review-egGeCaqB.js +17 -0
  86. package/dist/models/order-review.d.cts +22 -0
  87. package/dist/models/order-review.d.ts +22 -0
  88. package/dist/models/order-status-CS_OeSPY.cjs +66 -0
  89. package/dist/models/order-status-CgaLkU0M.js +60 -0
  90. package/dist/models/order-status.d.cts +298 -0
  91. package/dist/models/order-status.d.ts +298 -0
  92. package/dist/models/payment-methods--VUUZpMz.js +17 -0
  93. package/dist/models/payment-methods-CmK08zBM.cjs +19 -0
  94. package/dist/models/payment-methods.d.cts +28 -0
  95. package/dist/models/payment-methods.d.ts +28 -0
  96. package/dist/models/products.cjs +215 -194
  97. package/dist/models/products.d.cts +612 -1354
  98. package/dist/models/products.d.ts +612 -1354
  99. package/dist/models/products.js +211 -187
  100. package/dist/models/search.cjs +13 -23
  101. package/dist/models/search.d.cts +21 -51
  102. package/dist/models/search.d.ts +21 -51
  103. package/dist/models/search.js +12 -21
  104. package/dist/models/sellers.cjs +44 -0
  105. package/dist/models/sellers.d.cts +82 -0
  106. package/dist/models/sellers.d.ts +82 -0
  107. package/dist/models/sellers.js +38 -0
  108. package/dist/models/settings.cjs +205 -236
  109. package/dist/models/settings.d.cts +853 -6940
  110. package/dist/models/settings.d.ts +853 -6940
  111. package/dist/models/settings.js +213 -239
  112. package/dist/models/storefront-cart.cjs +144 -118
  113. package/dist/models/storefront-cart.d.cts +246 -706
  114. package/dist/models/storefront-cart.d.ts +246 -706
  115. package/dist/models/storefront-cart.js +141 -117
  116. package/dist/models/storefront-checkout.cjs +212 -297
  117. package/dist/models/storefront-checkout.d.cts +654 -2449
  118. package/dist/models/storefront-checkout.d.ts +654 -2449
  119. package/dist/models/storefront-checkout.js +208 -297
  120. package/dist/models/storefront-reviews.cjs +58 -43
  121. package/dist/models/storefront-reviews.d.cts +71 -139
  122. package/dist/models/storefront-reviews.d.ts +71 -139
  123. package/dist/models/storefront-reviews.js +55 -42
  124. package/dist/models/tracking-CiIAhQW0.js +33 -0
  125. package/dist/models/tracking-wNyzQ6Bp.cjs +36 -0
  126. package/dist/models/tracking.d.cts +26 -0
  127. package/dist/models/tracking.d.ts +26 -0
  128. package/dist/models/urls-B0ZODOwH.cjs +35 -0
  129. package/dist/models/urls-Dt_dTt4Q.js +33 -0
  130. package/dist/models/urls.d.cts +201 -0
  131. package/dist/models/urls.d.ts +201 -0
  132. package/dist/redirects.cjs +113 -0
  133. package/dist/redirects.d.cts +11 -0
  134. package/dist/redirects.d.ts +11 -0
  135. package/dist/redirects.js +108 -0
  136. package/dist/services/article.service-DBsOvflH.js +10 -0
  137. package/dist/services/article.service-zmTkbbPV.cjs +11 -0
  138. package/dist/services/article.service.d.cts +4 -0
  139. package/dist/services/article.service.d.ts +4 -0
  140. package/dist/services/cart.service-B0D8s6jI.cjs +37 -0
  141. package/dist/services/cart.service-yMCz9oQP.js +33 -0
  142. package/dist/services/cart.service.d.cts +527 -0
  143. package/dist/services/cart.service.d.ts +527 -0
  144. package/dist/services/catalog-link.service-BQ2d-EPX.js +8 -0
  145. package/dist/services/catalog-link.service-DiB-OVjn.cjs +8 -0
  146. package/dist/services/category.service-8tieYX2r.js +6 -0
  147. package/dist/services/category.service-BsSJZV2B.cjs +6 -0
  148. package/dist/services/checkout.service-CC-3tm2y.js +60 -0
  149. package/dist/services/checkout.service-CG8KrDNY.cjs +69 -0
  150. package/dist/services/checkout.service.d.cts +439 -0
  151. package/dist/services/checkout.service.d.ts +439 -0
  152. package/dist/services/collection.service-C4QETpuI.js +11 -0
  153. package/dist/services/collection.service-DHGN3rhs.cjs +12 -0
  154. package/dist/services/complaint-book.service-C7TxltQe.cjs +13 -0
  155. package/dist/services/complaint-book.service-DXiVyKdD.js +12 -0
  156. package/dist/services/complaint-book.service.d.cts +4 -0
  157. package/dist/services/complaint-book.service.d.ts +4 -0
  158. package/dist/services/customer-address.service-Ca4qla_R.cjs +51 -0
  159. package/dist/services/customer-address.service-xEThx7cQ.js +47 -0
  160. package/dist/services/customer-address.service.d.cts +19 -0
  161. package/dist/services/customer-address.service.d.ts +19 -0
  162. package/dist/services/customer-order.service-DLGgT0xa.cjs +54 -0
  163. package/dist/services/customer-order.service-qHoRBuyX.js +51 -0
  164. package/dist/services/customer-order.service.d.cts +34 -0
  165. package/dist/services/customer-order.service.d.ts +34 -0
  166. package/dist/services/customer-registration.service-C3BNyCHP.cjs +10 -0
  167. package/dist/services/customer-registration.service-CxcWD2hf.js +9 -0
  168. package/dist/services/customer-registration.service.d.cts +5 -0
  169. package/dist/services/customer-registration.service.d.ts +5 -0
  170. package/dist/services/customer-session.service-4YgfbWRB.js +16 -0
  171. package/dist/services/customer-session.service-Bd8pLC2v.cjs +19 -0
  172. package/dist/services/customer.service-BM0NrOxP.cjs +26 -0
  173. package/dist/services/customer.service-BoU6l2-R.js +25 -0
  174. package/dist/services/customer.service.d.cts +10 -0
  175. package/dist/services/customer.service.d.ts +10 -0
  176. package/dist/services/geo.service-C32R7N8W.js +39 -0
  177. package/dist/services/geo.service-JeTT3Wun.cjs +42 -0
  178. package/dist/services/geo.service.d.cts +10 -0
  179. package/dist/services/geo.service.d.ts +10 -0
  180. package/dist/services/layout.service-BkvLzl1g.cjs +50 -0
  181. package/dist/services/layout.service-DmbeMOkK.js +50 -0
  182. package/dist/services/layout.service.d.cts +9 -0
  183. package/dist/services/layout.service.d.ts +9 -0
  184. package/dist/services/order-draft.service-D9gy-OPr.cjs +14 -0
  185. package/dist/services/order-draft.service-DYPR_pcV.js +13 -0
  186. package/dist/services/order-draft.service.d.cts +4 -0
  187. package/dist/services/order-draft.service.d.ts +4 -0
  188. package/dist/services/order-review.service-BEr-FB6_.cjs +11 -0
  189. package/dist/services/order-review.service-PdBPUsxE.js +11 -0
  190. package/dist/services/order-review.service.d.cts +7 -0
  191. package/dist/services/order-review.service.d.ts +7 -0
  192. package/dist/services/order-status.service-Cn7dsaJo.cjs +26 -0
  193. package/dist/services/order-status.service-MC9hVpP-.js +23 -0
  194. package/dist/services/order-status.service.d.cts +16 -0
  195. package/dist/services/order-status.service.d.ts +16 -0
  196. package/dist/services/page.service-CWhWCjMQ.js +7 -0
  197. package/dist/services/page.service-DmCSeMiR.cjs +7 -0
  198. package/dist/services/page.service.d.cts +4 -0
  199. package/dist/services/page.service.d.ts +4 -0
  200. package/dist/services/payment-method.service-CEt_nB4R.cjs +7 -0
  201. package/dist/services/payment-method.service-CjKbAsOh.js +7 -0
  202. package/dist/services/payment-method.service.d.cts +4 -0
  203. package/dist/services/payment-method.service.d.ts +4 -0
  204. package/dist/services/product.service-B05Qmbuh.js +35 -0
  205. package/dist/services/product.service-B7OFZWB1.cjs +37 -0
  206. package/dist/services/product.service.d.cts +231 -0
  207. package/dist/services/product.service.d.ts +231 -0
  208. package/dist/services/review.service-CO2icjpu.cjs +46 -0
  209. package/dist/services/review.service-De1YkhFp.js +43 -0
  210. package/dist/services/review.service.d.cts +28 -0
  211. package/dist/services/review.service.d.ts +28 -0
  212. package/dist/services/search.service-Bx1zbTHJ.cjs +10 -0
  213. package/dist/services/search.service-DSBMhaSY.js +10 -0
  214. package/dist/services/search.service.d.cts +9 -0
  215. package/dist/services/search.service.d.ts +9 -0
  216. package/dist/services/seller.service-D11WHhbC.cjs +10 -0
  217. package/dist/services/seller.service-DUptDTv4.js +9 -0
  218. package/dist/services/seller.service.d.cts +42 -0
  219. package/dist/services/seller.service.d.ts +42 -0
  220. package/dist/services/tracking.service-CPK1B69N.js +11 -0
  221. package/dist/services/tracking.service-DqOoi8qr.cjs +11 -0
  222. package/dist/services/tracking.service.d.cts +7 -0
  223. package/dist/services/tracking.service.d.ts +7 -0
  224. package/dist/services/url.service-B-nC14Ue.cjs +19 -0
  225. package/dist/services/url.service-CLW0Tc7S.js +18 -0
  226. package/dist/storefront-cache-revision.cjs +23 -0
  227. package/dist/storefront-cache-revision.d.cts +16 -0
  228. package/dist/storefront-cache-revision.d.ts +16 -0
  229. package/dist/storefront-cache-revision.js +17 -0
  230. package/dist/storefront-routes.cjs +14 -0
  231. package/dist/storefront-routes.d.cts +11 -0
  232. package/dist/storefront-routes.d.ts +11 -0
  233. package/dist/storefront-routes.js +12 -0
  234. package/dist/utils-CDEC5xcY.cjs +139 -0
  235. package/dist/utils-DK7qa54o.js +136 -0
  236. package/dist/utils.d.cts +3 -0
  237. package/dist/utils.d.ts +3 -0
  238. package/dist/video-links-CbRO0m8V.js +47 -0
  239. package/dist/video-links-ClryQjPH.cjs +47 -0
  240. package/dist/video-links.d.cts +7 -0
  241. package/dist/video-links.d.ts +7 -0
  242. package/package.json +28 -11
  243. package/dist/api.cjs.map +0 -1
  244. package/dist/api.js.map +0 -1
  245. package/dist/client-Ba1r_uiO.d.ts +0 -195
  246. package/dist/client-Cqcnv2tC.d.cts +0 -195
  247. package/dist/client.cjs.map +0 -1
  248. package/dist/client.js.map +0 -1
  249. package/dist/index.cjs.map +0 -1
  250. package/dist/index.js.map +0 -1
  251. package/dist/models/collections.cjs.map +0 -1
  252. package/dist/models/collections.js.map +0 -1
  253. package/dist/models/customer-address.cjs.map +0 -1
  254. package/dist/models/customer-address.js.map +0 -1
  255. package/dist/models/customer-order.cjs.map +0 -1
  256. package/dist/models/customer-order.js.map +0 -1
  257. package/dist/models/customer-profile.cjs.map +0 -1
  258. package/dist/models/customer-profile.js.map +0 -1
  259. package/dist/models/geo.cjs.map +0 -1
  260. package/dist/models/geo.js.map +0 -1
  261. package/dist/models/ids.cjs.map +0 -1
  262. package/dist/models/ids.js.map +0 -1
  263. package/dist/models/products.cjs.map +0 -1
  264. package/dist/models/products.js.map +0 -1
  265. package/dist/models/search.cjs.map +0 -1
  266. package/dist/models/search.js.map +0 -1
  267. package/dist/models/settings.cjs.map +0 -1
  268. package/dist/models/settings.js.map +0 -1
  269. package/dist/models/storefront-cart.cjs.map +0 -1
  270. package/dist/models/storefront-cart.js.map +0 -1
  271. package/dist/models/storefront-checkout.cjs.map +0 -1
  272. package/dist/models/storefront-checkout.js.map +0 -1
  273. package/dist/models/storefront-reviews.cjs.map +0 -1
  274. package/dist/models/storefront-reviews.js.map +0 -1
@@ -0,0 +1,41 @@
1
+ // src/libs/bounded-read-cache.ts
2
+ /** Small per-client LRU of resolved values for short-lived public reads. */
3
+ var BoundedReadCache = class {
4
+ maxEntries;
5
+ entries = /* @__PURE__ */ new Map();
6
+ generation = 0;
7
+ constructor(maxEntries) {
8
+ this.maxEntries = maxEntries;
9
+ if (!Number.isInteger(maxEntries) || maxEntries < 1) throw new Error("BoundedReadCache requiere al menos una entrada");
10
+ }
11
+ read(key, ttlMs, load) {
12
+ const cached = this.entries.get(key);
13
+ if (cached && cached.expiresAt > Date.now()) {
14
+ this.entries.delete(key);
15
+ this.entries.set(key, cached);
16
+ return Promise.resolve(cached.data);
17
+ }
18
+ if (cached) this.entries.delete(key);
19
+ const generation = this.generation;
20
+ return load().then((data) => {
21
+ if (generation === this.generation && ttlMs > 0) {
22
+ this.entries.delete(key);
23
+ while (this.entries.size >= this.maxEntries) {
24
+ const oldest = this.entries.keys().next().value;
25
+ if (oldest === void 0) break;
26
+ this.entries.delete(oldest);
27
+ }
28
+ this.entries.set(key, {
29
+ data,
30
+ expiresAt: Date.now() + ttlMs
31
+ });
32
+ }
33
+ return data;
34
+ });
35
+ }
36
+ clear() {
37
+ this.generation += 1;
38
+ this.entries.clear();
39
+ }
40
+ };
41
+ export { BoundedReadCache };
@@ -0,0 +1,41 @@
1
+ // src/libs/bounded-read-cache.ts
2
+ /** Small per-client LRU of resolved values for short-lived public reads. */
3
+ var BoundedReadCache = class {
4
+ maxEntries;
5
+ entries = /* @__PURE__ */ new Map();
6
+ generation = 0;
7
+ constructor(maxEntries) {
8
+ this.maxEntries = maxEntries;
9
+ if (!Number.isInteger(maxEntries) || maxEntries < 1) throw new Error("BoundedReadCache requiere al menos una entrada");
10
+ }
11
+ read(key, ttlMs, load) {
12
+ const cached = this.entries.get(key);
13
+ if (cached && cached.expiresAt > Date.now()) {
14
+ this.entries.delete(key);
15
+ this.entries.set(key, cached);
16
+ return Promise.resolve(cached.data);
17
+ }
18
+ if (cached) this.entries.delete(key);
19
+ const generation = this.generation;
20
+ return load().then((data) => {
21
+ if (generation === this.generation && ttlMs > 0) {
22
+ this.entries.delete(key);
23
+ while (this.entries.size >= this.maxEntries) {
24
+ const oldest = this.entries.keys().next().value;
25
+ if (oldest === void 0) break;
26
+ this.entries.delete(oldest);
27
+ }
28
+ this.entries.set(key, {
29
+ data,
30
+ expiresAt: Date.now() + ttlMs
31
+ });
32
+ }
33
+ return data;
34
+ });
35
+ }
36
+ clear() {
37
+ this.generation += 1;
38
+ this.entries.clear();
39
+ }
40
+ };
41
+ exports.BoundedReadCache = BoundedReadCache;
@@ -0,0 +1,9 @@
1
+ // src/libs/catalog-link-key.ts
2
+ function catalogLinkKey(link) {
3
+ return JSON.stringify([
4
+ link.url,
5
+ link.reference?.type ?? null,
6
+ link.reference?.id ?? null
7
+ ]);
8
+ }
9
+ export { catalogLinkKey };
@@ -0,0 +1,9 @@
1
+ // src/libs/catalog-link-key.ts
2
+ function catalogLinkKey(link) {
3
+ return JSON.stringify([
4
+ link.url,
5
+ link.reference?.type ?? null,
6
+ link.reference?.id ?? null
7
+ ]);
8
+ }
9
+ exports.catalogLinkKey = catalogLinkKey;
@@ -0,0 +1,2 @@
1
+ import { CatalogLink } from "../models/catalog-links.cjs";
2
+ export declare function catalogLinkKey(link: CatalogLink): string;
@@ -0,0 +1,2 @@
1
+ import { CatalogLink } from "../models/catalog-links.js";
2
+ export declare function catalogLinkKey(link: CatalogLink): string;
@@ -0,0 +1,49 @@
1
+ import { z } from "zod";
2
+ // src/libs/graphql.ts
3
+ const GraphQLErrorSchema = z.object({
4
+ message: z.string(),
5
+ locations: z.array(z.object({
6
+ line: z.number(),
7
+ column: z.number()
8
+ })).optional(),
9
+ path: z.array(z.union([z.string(), z.number()])).optional(),
10
+ extensions: z.record(z.string(), z.unknown()).optional()
11
+ }).passthrough();
12
+ var GraphQLResponseError = class extends Error {
13
+ errors;
14
+ data;
15
+ constructor(errors, data) {
16
+ super(errors[0]?.message ?? "GraphQL returned an error");
17
+ this.errors = errors;
18
+ this.data = data;
19
+ this.name = "GraphQLResponseError";
20
+ }
21
+ };
22
+ async function executeGraphQL(api, domain, document, dataSchema, variables, options = {}) {
23
+ if (!document.trim()) throw new Error("GraphQL document is required");
24
+ const headers = { "x-Store-Domain": domain };
25
+ if (options.cache === "no-store") headers["cache-control"] = "no-store";
26
+ else if (options.allowStale === false) headers["cache-control"] = "max-stale=0";
27
+ const response = await api.post("graphql", {
28
+ query: document,
29
+ variables
30
+ }, z.object({
31
+ data: z.unknown().optional(),
32
+ errors: z.array(GraphQLErrorSchema).optional()
33
+ }), {
34
+ headers,
35
+ signal: options.signal
36
+ });
37
+ if (response.errors?.length) throw new GraphQLResponseError(response.errors, response.data);
38
+ if (response.data == null) throw new GraphQLResponseError([{ message: "GraphQL response did not include data" }]);
39
+ const parsed = dataSchema.safeParse(response.data);
40
+ if (!parsed.success) {
41
+ const issue = parsed.error.issues[0];
42
+ throw new GraphQLResponseError([{
43
+ message: `Unexpected GraphQL data: ${issue?.path.join(".")} ${issue?.message}`,
44
+ extensions: { code: "INVALID_RESPONSE" }
45
+ }], response.data);
46
+ }
47
+ return parsed.data;
48
+ }
49
+ export { GraphQLResponseError, executeGraphQL };
@@ -0,0 +1,21 @@
1
+ let zod = require("zod");
2
+ // src/libs/graphql-selection.ts
3
+ function unwrap(schema) {
4
+ let current = schema;
5
+ for (;;) if (current instanceof zod.z.ZodOptional || current instanceof zod.z.ZodNullable) current = current.unwrap();
6
+ else if (current instanceof zod.z.ZodDefault) current = current.unwrap();
7
+ else if (current instanceof zod.z.ZodPipe) current = current.in;
8
+ else if (current instanceof zod.z.ZodArray) current = current.element;
9
+ else return current;
10
+ }
11
+ /** GraphQL selection for every field of a Zod model, so REST and GraphQL share one contract. */
12
+ function graphQLSelection(schema) {
13
+ const object = unwrap(schema);
14
+ if (!(object instanceof zod.z.ZodObject)) throw new Error("graphQLSelection requiere un objeto Zod");
15
+ return Object.entries(object.shape).map(([key, value]) => {
16
+ const field = unwrap(value);
17
+ if (field instanceof zod.z.ZodUnion || field instanceof zod.z.ZodDiscriminatedUnion) throw new Error(`graphQLSelection no admite uniones (${key})`);
18
+ return field instanceof zod.z.ZodObject ? `${key} { ${graphQLSelection(field)} }` : key;
19
+ }).join(" ");
20
+ }
21
+ exports.graphQLSelection = graphQLSelection;
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ // src/libs/graphql-selection.ts
3
+ function unwrap(schema) {
4
+ let current = schema;
5
+ for (;;) if (current instanceof z.ZodOptional || current instanceof z.ZodNullable) current = current.unwrap();
6
+ else if (current instanceof z.ZodDefault) current = current.unwrap();
7
+ else if (current instanceof z.ZodPipe) current = current.in;
8
+ else if (current instanceof z.ZodArray) current = current.element;
9
+ else return current;
10
+ }
11
+ /** GraphQL selection for every field of a Zod model, so REST and GraphQL share one contract. */
12
+ function graphQLSelection(schema) {
13
+ const object = unwrap(schema);
14
+ if (!(object instanceof z.ZodObject)) throw new Error("graphQLSelection requiere un objeto Zod");
15
+ return Object.entries(object.shape).map(([key, value]) => {
16
+ const field = unwrap(value);
17
+ if (field instanceof z.ZodUnion || field instanceof z.ZodDiscriminatedUnion) throw new Error(`graphQLSelection no admite uniones (${key})`);
18
+ return field instanceof z.ZodObject ? `${key} { ${graphQLSelection(field)} }` : key;
19
+ }).join(" ");
20
+ }
21
+ export { graphQLSelection };
@@ -0,0 +1,3 @@
1
+ import { z } from "zod";
2
+ /** GraphQL selection for every field of a Zod model, so REST and GraphQL share one contract. */
3
+ export declare function graphQLSelection(schema: z.core.$ZodType): string;
@@ -0,0 +1,3 @@
1
+ import { z } from "zod";
2
+ /** GraphQL selection for every field of a Zod model, so REST and GraphQL share one contract. */
3
+ export declare function graphQLSelection(schema: z.core.$ZodType): string;
@@ -0,0 +1,50 @@
1
+ let zod = require("zod");
2
+ // src/libs/graphql.ts
3
+ const GraphQLErrorSchema = zod.z.object({
4
+ message: zod.z.string(),
5
+ locations: zod.z.array(zod.z.object({
6
+ line: zod.z.number(),
7
+ column: zod.z.number()
8
+ })).optional(),
9
+ path: zod.z.array(zod.z.union([zod.z.string(), zod.z.number()])).optional(),
10
+ extensions: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
11
+ }).passthrough();
12
+ var GraphQLResponseError = class extends Error {
13
+ errors;
14
+ data;
15
+ constructor(errors, data) {
16
+ super(errors[0]?.message ?? "GraphQL returned an error");
17
+ this.errors = errors;
18
+ this.data = data;
19
+ this.name = "GraphQLResponseError";
20
+ }
21
+ };
22
+ async function executeGraphQL(api, domain, document, dataSchema, variables, options = {}) {
23
+ if (!document.trim()) throw new Error("GraphQL document is required");
24
+ const headers = { "x-Store-Domain": domain };
25
+ if (options.cache === "no-store") headers["cache-control"] = "no-store";
26
+ else if (options.allowStale === false) headers["cache-control"] = "max-stale=0";
27
+ const response = await api.post("graphql", {
28
+ query: document,
29
+ variables
30
+ }, zod.z.object({
31
+ data: zod.z.unknown().optional(),
32
+ errors: zod.z.array(GraphQLErrorSchema).optional()
33
+ }), {
34
+ headers,
35
+ signal: options.signal
36
+ });
37
+ if (response.errors?.length) throw new GraphQLResponseError(response.errors, response.data);
38
+ if (response.data == null) throw new GraphQLResponseError([{ message: "GraphQL response did not include data" }]);
39
+ const parsed = dataSchema.safeParse(response.data);
40
+ if (!parsed.success) {
41
+ const issue = parsed.error.issues[0];
42
+ throw new GraphQLResponseError([{
43
+ message: `Unexpected GraphQL data: ${issue?.path.join(".")} ${issue?.message}`,
44
+ extensions: { code: "INVALID_RESPONSE" }
45
+ }], response.data);
46
+ }
47
+ return parsed.data;
48
+ }
49
+ exports.GraphQLResponseError = GraphQLResponseError;
50
+ exports.executeGraphQL = executeGraphQL;
@@ -0,0 +1,24 @@
1
+ import "../api.cjs";
2
+ import { z } from "zod";
3
+ export type GraphQLVariables = Record<string, unknown>;
4
+ export interface GraphQLRequestOptions {
5
+ signal?: AbortSignal;
6
+ cache?: 'no-store';
7
+ allowStale?: boolean;
8
+ }
9
+ declare const GraphQLErrorSchema: z.ZodObject<{
10
+ message: z.ZodString;
11
+ locations: z.ZodOptional<z.ZodArray<z.ZodObject<{
12
+ line: z.ZodNumber;
13
+ column: z.ZodNumber;
14
+ }, z.core.$strip>>>;
15
+ path: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
16
+ extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
17
+ }, z.core.$loose>;
18
+ export type GraphQLError = z.infer<typeof GraphQLErrorSchema>;
19
+ export declare class GraphQLResponseError extends Error {
20
+ readonly errors: GraphQLError[];
21
+ readonly data?: unknown;
22
+ constructor(errors: GraphQLError[], data?: unknown);
23
+ }
24
+ export {};
@@ -0,0 +1,24 @@
1
+ import "../api.js";
2
+ import { z } from "zod";
3
+ export type GraphQLVariables = Record<string, unknown>;
4
+ export interface GraphQLRequestOptions {
5
+ signal?: AbortSignal;
6
+ cache?: 'no-store';
7
+ allowStale?: boolean;
8
+ }
9
+ declare const GraphQLErrorSchema: z.ZodObject<{
10
+ message: z.ZodString;
11
+ locations: z.ZodOptional<z.ZodArray<z.ZodObject<{
12
+ line: z.ZodNumber;
13
+ column: z.ZodNumber;
14
+ }, z.core.$strip>>>;
15
+ path: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
16
+ extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
17
+ }, z.core.$loose>;
18
+ export type GraphQLError = z.infer<typeof GraphQLErrorSchema>;
19
+ export declare class GraphQLResponseError extends Error {
20
+ readonly errors: GraphQLError[];
21
+ readonly data?: unknown;
22
+ constructor(errors: GraphQLError[], data?: unknown);
23
+ }
24
+ export {};
@@ -0,0 +1,5 @@
1
+ import { z } from "zod";
2
+ // src/models/amounts.ts
3
+ /** The API sends discounts as negative adjustments; consumers get the positive amount taken off. */
4
+ const DiscountAmountSchema = z.number().transform((amount) => -amount);
5
+ export { DiscountAmountSchema };
@@ -0,0 +1,4 @@
1
+ // src/models/amounts.ts
2
+ /** The API sends discounts as negative adjustments; consumers get the positive amount taken off. */
3
+ const DiscountAmountSchema = require("zod").z.number().transform((amount) => -amount);
4
+ exports.DiscountAmountSchema = DiscountAmountSchema;
@@ -0,0 +1,27 @@
1
+ import { EntityIdSchema } from "./ids.js";
2
+ import { z } from "zod";
3
+ // src/models/articles.ts
4
+ const ArticleSummarySchema = z.object({
5
+ id: EntityIdSchema,
6
+ title: z.string(),
7
+ slug: z.string(),
8
+ author: z.string(),
9
+ folder: z.string().nullable(),
10
+ tags: z.array(z.string()),
11
+ coverUrl: z.string().nullable(),
12
+ excerpt: z.string().nullable(),
13
+ publishedOn: z.string()
14
+ });
15
+ const ArticleSchema = ArticleSummarySchema.extend({
16
+ body: z.string(),
17
+ seoTitle: z.string().nullable(),
18
+ seoDescription: z.string().nullable()
19
+ });
20
+ const ArticlesSchema = z.array(ArticleSummarySchema);
21
+ const ListArticlesParamsSchema = z.object({
22
+ search: z.string().trim().min(1).optional(),
23
+ folder: z.string().trim().min(1).optional(),
24
+ tag: z.string().trim().min(1).optional(),
25
+ limit: z.number().int().positive().max(100).optional()
26
+ });
27
+ export { ArticleSchema, ArticleSummarySchema, ArticlesSchema, ListArticlesParamsSchema };
@@ -0,0 +1,30 @@
1
+ const require_models_ids = require("./ids.cjs");
2
+ let zod = require("zod");
3
+ // src/models/articles.ts
4
+ const ArticleSummarySchema = zod.z.object({
5
+ id: require_models_ids.EntityIdSchema,
6
+ title: zod.z.string(),
7
+ slug: zod.z.string(),
8
+ author: zod.z.string(),
9
+ folder: zod.z.string().nullable(),
10
+ tags: zod.z.array(zod.z.string()),
11
+ coverUrl: zod.z.string().nullable(),
12
+ excerpt: zod.z.string().nullable(),
13
+ publishedOn: zod.z.string()
14
+ });
15
+ const ArticleSchema = ArticleSummarySchema.extend({
16
+ body: zod.z.string(),
17
+ seoTitle: zod.z.string().nullable(),
18
+ seoDescription: zod.z.string().nullable()
19
+ });
20
+ const ArticlesSchema = zod.z.array(ArticleSummarySchema);
21
+ const ListArticlesParamsSchema = zod.z.object({
22
+ search: zod.z.string().trim().min(1).optional(),
23
+ folder: zod.z.string().trim().min(1).optional(),
24
+ tag: zod.z.string().trim().min(1).optional(),
25
+ limit: zod.z.number().int().positive().max(100).optional()
26
+ });
27
+ exports.ArticleSchema = ArticleSchema;
28
+ exports.ArticleSummarySchema = ArticleSummarySchema;
29
+ exports.ArticlesSchema = ArticlesSchema;
30
+ exports.ListArticlesParamsSchema = ListArticlesParamsSchema;
@@ -0,0 +1,46 @@
1
+ import { z } from "zod";
2
+ export declare const ArticleSummarySchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ title: z.ZodString;
5
+ slug: z.ZodString;
6
+ author: z.ZodString;
7
+ folder: z.ZodNullable<z.ZodString>;
8
+ tags: z.ZodArray<z.ZodString>;
9
+ coverUrl: z.ZodNullable<z.ZodString>;
10
+ excerpt: z.ZodNullable<z.ZodString>;
11
+ publishedOn: z.ZodString;
12
+ }, z.core.$strip>;
13
+ export declare const ArticleSchema: z.ZodObject<{
14
+ id: z.ZodString;
15
+ title: z.ZodString;
16
+ slug: z.ZodString;
17
+ author: z.ZodString;
18
+ folder: z.ZodNullable<z.ZodString>;
19
+ tags: z.ZodArray<z.ZodString>;
20
+ coverUrl: z.ZodNullable<z.ZodString>;
21
+ excerpt: z.ZodNullable<z.ZodString>;
22
+ publishedOn: z.ZodString;
23
+ body: z.ZodString;
24
+ seoTitle: z.ZodNullable<z.ZodString>;
25
+ seoDescription: z.ZodNullable<z.ZodString>;
26
+ }, z.core.$strip>;
27
+ export declare const ArticlesSchema: z.ZodArray<z.ZodObject<{
28
+ id: z.ZodString;
29
+ title: z.ZodString;
30
+ slug: z.ZodString;
31
+ author: z.ZodString;
32
+ folder: z.ZodNullable<z.ZodString>;
33
+ tags: z.ZodArray<z.ZodString>;
34
+ coverUrl: z.ZodNullable<z.ZodString>;
35
+ excerpt: z.ZodNullable<z.ZodString>;
36
+ publishedOn: z.ZodString;
37
+ }, z.core.$strip>>;
38
+ export declare const ListArticlesParamsSchema: z.ZodObject<{
39
+ search: z.ZodOptional<z.ZodString>;
40
+ folder: z.ZodOptional<z.ZodString>;
41
+ tag: z.ZodOptional<z.ZodString>;
42
+ limit: z.ZodOptional<z.ZodNumber>;
43
+ }, z.core.$strip>;
44
+ export type ArticleSummary = z.infer<typeof ArticleSummarySchema>;
45
+ export type Article = z.infer<typeof ArticleSchema>;
46
+ export type ListArticlesParams = z.infer<typeof ListArticlesParamsSchema>;
@@ -0,0 +1,46 @@
1
+ import { z } from "zod";
2
+ export declare const ArticleSummarySchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ title: z.ZodString;
5
+ slug: z.ZodString;
6
+ author: z.ZodString;
7
+ folder: z.ZodNullable<z.ZodString>;
8
+ tags: z.ZodArray<z.ZodString>;
9
+ coverUrl: z.ZodNullable<z.ZodString>;
10
+ excerpt: z.ZodNullable<z.ZodString>;
11
+ publishedOn: z.ZodString;
12
+ }, z.core.$strip>;
13
+ export declare const ArticleSchema: z.ZodObject<{
14
+ id: z.ZodString;
15
+ title: z.ZodString;
16
+ slug: z.ZodString;
17
+ author: z.ZodString;
18
+ folder: z.ZodNullable<z.ZodString>;
19
+ tags: z.ZodArray<z.ZodString>;
20
+ coverUrl: z.ZodNullable<z.ZodString>;
21
+ excerpt: z.ZodNullable<z.ZodString>;
22
+ publishedOn: z.ZodString;
23
+ body: z.ZodString;
24
+ seoTitle: z.ZodNullable<z.ZodString>;
25
+ seoDescription: z.ZodNullable<z.ZodString>;
26
+ }, z.core.$strip>;
27
+ export declare const ArticlesSchema: z.ZodArray<z.ZodObject<{
28
+ id: z.ZodString;
29
+ title: z.ZodString;
30
+ slug: z.ZodString;
31
+ author: z.ZodString;
32
+ folder: z.ZodNullable<z.ZodString>;
33
+ tags: z.ZodArray<z.ZodString>;
34
+ coverUrl: z.ZodNullable<z.ZodString>;
35
+ excerpt: z.ZodNullable<z.ZodString>;
36
+ publishedOn: z.ZodString;
37
+ }, z.core.$strip>>;
38
+ export declare const ListArticlesParamsSchema: z.ZodObject<{
39
+ search: z.ZodOptional<z.ZodString>;
40
+ folder: z.ZodOptional<z.ZodString>;
41
+ tag: z.ZodOptional<z.ZodString>;
42
+ limit: z.ZodOptional<z.ZodNumber>;
43
+ }, z.core.$strip>;
44
+ export type ArticleSummary = z.infer<typeof ArticleSummarySchema>;
45
+ export type Article = z.infer<typeof ArticleSchema>;
46
+ export type ListArticlesParams = z.infer<typeof ListArticlesParamsSchema>;
@@ -0,0 +1,80 @@
1
+ import { catalogLinkKey } from "../libs/catalog-link-key-B7l5KZsF.js";
2
+ import { z } from "zod";
3
+ // src/models/catalog-links.ts
4
+ const CATALOG_LINK_ID = /^[1-9][0-9]{0,18}$/;
5
+ const CATALOG_LINK_MAX_LENGTH = 2048;
6
+ const CatalogLinkReferenceSchema = z.object({
7
+ type: z.enum(["product", "category"]),
8
+ id: z.string().regex(CATALOG_LINK_ID)
9
+ }).strict();
10
+ const CatalogLinkSchema = z.object({
11
+ url: z.string().max(CATALOG_LINK_MAX_LENGTH),
12
+ reference: CatalogLinkReferenceSchema.nullish()
13
+ }).strict();
14
+ const CatalogLinksResponseSchema = z.object({ links: z.array(CatalogLinkSchema) });
15
+ const FRAMEWORK_SEGMENTS = /* @__PURE__ */ new Set([
16
+ "account",
17
+ "api",
18
+ "assets",
19
+ "auth",
20
+ "blog",
21
+ "cart",
22
+ "checkout",
23
+ "collections",
24
+ "drafts",
25
+ "geo",
26
+ "orders",
27
+ "pages",
28
+ "review",
29
+ "search",
30
+ "sellers",
31
+ "thank-you",
32
+ "track",
33
+ "_build",
34
+ "_ecomiq",
35
+ "__ecomiq",
36
+ "_server",
37
+ ".well-known"
38
+ ]);
39
+ const FRAMEWORK_PATHS = /* @__PURE__ */ new Set([
40
+ "",
41
+ "/products",
42
+ "/categories",
43
+ "/login",
44
+ "/register",
45
+ "/demo",
46
+ "/ping",
47
+ "/robots.txt",
48
+ "/sitemap.xml",
49
+ "/favicon.ico",
50
+ "/__manifest"
51
+ ]);
52
+ function isCatalogLinkCandidate(link) {
53
+ if (link.url.length > 2048) return false;
54
+ if (link.url.includes("\\")) return false;
55
+ if (link.url.startsWith("//")) return false;
56
+ if (!link.url.startsWith("/") && !/^https?:\/\//i.test(link.url)) return false;
57
+ try {
58
+ const url = new URL(link.url, "https://storefront.invalid");
59
+ if (link.reference) return true;
60
+ const path = url.pathname.toLowerCase().replace(/\/+$/, "");
61
+ const first = path.split("/")[1] ?? "";
62
+ return !FRAMEWORK_PATHS.has(path) && !FRAMEWORK_SEGMENTS.has(first) && !path.endsWith(".data");
63
+ } catch {
64
+ return false;
65
+ }
66
+ }
67
+ function readCatalogLink(link) {
68
+ const parsed = CatalogLinkSchema.safeParse(link);
69
+ if (parsed.success) return parsed.data;
70
+ return { url: link.url };
71
+ }
72
+ function catalogLinkCandidates(links) {
73
+ const unique = /* @__PURE__ */ new Map();
74
+ for (const link of links) if (isCatalogLinkCandidate(link)) unique.set(catalogLinkKey(link), {
75
+ url: link.url,
76
+ reference: link.reference ?? null
77
+ });
78
+ return [...unique.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([, link]) => link);
79
+ }
80
+ export { CATALOG_LINK_ID, CATALOG_LINK_MAX_LENGTH, CatalogLinkReferenceSchema, CatalogLinkSchema, CatalogLinksResponseSchema, catalogLinkCandidates, catalogLinkKey, isCatalogLinkCandidate, readCatalogLink };
@@ -0,0 +1,88 @@
1
+ const require_catalog_link_key = require("../libs/catalog-link-key-CZTHJBGD.cjs");
2
+ let zod = require("zod");
3
+ // src/models/catalog-links.ts
4
+ const CATALOG_LINK_ID = /^[1-9][0-9]{0,18}$/;
5
+ const CATALOG_LINK_MAX_LENGTH = 2048;
6
+ const CatalogLinkReferenceSchema = zod.z.object({
7
+ type: zod.z.enum(["product", "category"]),
8
+ id: zod.z.string().regex(CATALOG_LINK_ID)
9
+ }).strict();
10
+ const CatalogLinkSchema = zod.z.object({
11
+ url: zod.z.string().max(CATALOG_LINK_MAX_LENGTH),
12
+ reference: CatalogLinkReferenceSchema.nullish()
13
+ }).strict();
14
+ const CatalogLinksResponseSchema = zod.z.object({ links: zod.z.array(CatalogLinkSchema) });
15
+ const FRAMEWORK_SEGMENTS = /* @__PURE__ */ new Set([
16
+ "account",
17
+ "api",
18
+ "assets",
19
+ "auth",
20
+ "blog",
21
+ "cart",
22
+ "checkout",
23
+ "collections",
24
+ "drafts",
25
+ "geo",
26
+ "orders",
27
+ "pages",
28
+ "review",
29
+ "search",
30
+ "sellers",
31
+ "thank-you",
32
+ "track",
33
+ "_build",
34
+ "_ecomiq",
35
+ "__ecomiq",
36
+ "_server",
37
+ ".well-known"
38
+ ]);
39
+ const FRAMEWORK_PATHS = /* @__PURE__ */ new Set([
40
+ "",
41
+ "/products",
42
+ "/categories",
43
+ "/login",
44
+ "/register",
45
+ "/demo",
46
+ "/ping",
47
+ "/robots.txt",
48
+ "/sitemap.xml",
49
+ "/favicon.ico",
50
+ "/__manifest"
51
+ ]);
52
+ function isCatalogLinkCandidate(link) {
53
+ if (link.url.length > 2048) return false;
54
+ if (link.url.includes("\\")) return false;
55
+ if (link.url.startsWith("//")) return false;
56
+ if (!link.url.startsWith("/") && !/^https?:\/\//i.test(link.url)) return false;
57
+ try {
58
+ const url = new URL(link.url, "https://storefront.invalid");
59
+ if (link.reference) return true;
60
+ const path = url.pathname.toLowerCase().replace(/\/+$/, "");
61
+ const first = path.split("/")[1] ?? "";
62
+ return !FRAMEWORK_PATHS.has(path) && !FRAMEWORK_SEGMENTS.has(first) && !path.endsWith(".data");
63
+ } catch {
64
+ return false;
65
+ }
66
+ }
67
+ function readCatalogLink(link) {
68
+ const parsed = CatalogLinkSchema.safeParse(link);
69
+ if (parsed.success) return parsed.data;
70
+ return { url: link.url };
71
+ }
72
+ function catalogLinkCandidates(links) {
73
+ const unique = /* @__PURE__ */ new Map();
74
+ for (const link of links) if (isCatalogLinkCandidate(link)) unique.set(require_catalog_link_key.catalogLinkKey(link), {
75
+ url: link.url,
76
+ reference: link.reference ?? null
77
+ });
78
+ return [...unique.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([, link]) => link);
79
+ }
80
+ exports.CATALOG_LINK_ID = CATALOG_LINK_ID;
81
+ exports.CATALOG_LINK_MAX_LENGTH = CATALOG_LINK_MAX_LENGTH;
82
+ exports.CatalogLinkReferenceSchema = CatalogLinkReferenceSchema;
83
+ exports.CatalogLinkSchema = CatalogLinkSchema;
84
+ exports.CatalogLinksResponseSchema = CatalogLinksResponseSchema;
85
+ exports.catalogLinkCandidates = catalogLinkCandidates;
86
+ exports.catalogLinkKey = require_catalog_link_key.catalogLinkKey;
87
+ exports.isCatalogLinkCandidate = isCatalogLinkCandidate;
88
+ exports.readCatalogLink = readCatalogLink;