@proxima-io/storefront-core 0.3.0 → 0.8.2

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 (178) hide show
  1. package/README.md +68 -17
  2. package/dist/addresses/address-book.d.ts +36 -0
  3. package/dist/addresses/address-book.d.ts.map +1 -0
  4. package/dist/addresses/address-book.js +62 -0
  5. package/dist/addresses/address-book.js.map +1 -0
  6. package/dist/analytics/analytics.d.ts +28 -0
  7. package/dist/analytics/analytics.d.ts.map +1 -0
  8. package/dist/analytics/analytics.js +124 -0
  9. package/dist/analytics/analytics.js.map +1 -0
  10. package/dist/analytics/attribution.d.ts +28 -0
  11. package/dist/analytics/attribution.d.ts.map +1 -0
  12. package/dist/analytics/attribution.js +116 -0
  13. package/dist/analytics/attribution.js.map +1 -0
  14. package/dist/analytics/session.d.ts +12 -0
  15. package/dist/analytics/session.d.ts.map +1 -0
  16. package/dist/analytics/session.js +62 -0
  17. package/dist/analytics/session.js.map +1 -0
  18. package/dist/analytics/trackers.d.ts +29 -0
  19. package/dist/analytics/trackers.d.ts.map +1 -0
  20. package/dist/analytics/trackers.js +30 -0
  21. package/dist/analytics/trackers.js.map +1 -0
  22. package/dist/api/endpoints.d.ts +70 -0
  23. package/dist/api/endpoints.d.ts.map +1 -0
  24. package/dist/api/endpoints.js +70 -0
  25. package/dist/api/endpoints.js.map +1 -0
  26. package/dist/api/index.d.ts +3 -0
  27. package/dist/api/index.d.ts.map +1 -0
  28. package/dist/api/index.js +3 -0
  29. package/dist/api/index.js.map +1 -0
  30. package/dist/api/storefront-client.d.ts +50 -0
  31. package/dist/api/storefront-client.d.ts.map +1 -0
  32. package/dist/api/storefront-client.js +123 -0
  33. package/dist/api/storefront-client.js.map +1 -0
  34. package/dist/buyer/auth.d.ts +105 -0
  35. package/dist/buyer/auth.d.ts.map +1 -0
  36. package/dist/buyer/auth.js +215 -0
  37. package/dist/buyer/auth.js.map +1 -0
  38. package/dist/cache/cache.d.ts +31 -0
  39. package/dist/cache/cache.d.ts.map +1 -0
  40. package/dist/cache/cache.js +71 -0
  41. package/dist/cache/cache.js.map +1 -0
  42. package/dist/campaign/countdown.d.ts +40 -0
  43. package/dist/campaign/countdown.d.ts.map +1 -0
  44. package/dist/campaign/countdown.js +71 -0
  45. package/dist/campaign/countdown.js.map +1 -0
  46. package/dist/cart/cart.d.ts +57 -0
  47. package/dist/cart/cart.d.ts.map +1 -0
  48. package/dist/cart/cart.js +64 -0
  49. package/dist/cart/cart.js.map +1 -0
  50. package/dist/catalog/listings.d.ts +87 -0
  51. package/dist/catalog/listings.d.ts.map +1 -0
  52. package/dist/catalog/listings.js +140 -0
  53. package/dist/catalog/listings.js.map +1 -0
  54. package/dist/cms/payment-methods.d.ts +13 -0
  55. package/dist/cms/payment-methods.d.ts.map +1 -0
  56. package/dist/cms/payment-methods.js +41 -0
  57. package/dist/cms/payment-methods.js.map +1 -0
  58. package/dist/cms/website.d.ts +76 -0
  59. package/dist/cms/website.d.ts.map +1 -0
  60. package/dist/cms/website.js +146 -0
  61. package/dist/cms/website.js.map +1 -0
  62. package/dist/cookie-consent/consent.d.ts +22 -0
  63. package/dist/cookie-consent/consent.d.ts.map +1 -0
  64. package/dist/cookie-consent/consent.js +93 -0
  65. package/dist/cookie-consent/consent.js.map +1 -0
  66. package/dist/index.d.ts +45 -1310
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +42 -1576
  69. package/dist/index.js.map +1 -1
  70. package/dist/internal/http.d.ts +5 -0
  71. package/dist/internal/http.d.ts.map +1 -0
  72. package/dist/internal/http.js +27 -0
  73. package/dist/internal/http.js.map +1 -0
  74. package/dist/orders/guest.d.ts +9 -0
  75. package/dist/orders/guest.d.ts.map +1 -0
  76. package/dist/orders/guest.js +30 -0
  77. package/dist/orders/guest.js.map +1 -0
  78. package/dist/orders/orders.d.ts +23 -0
  79. package/dist/orders/orders.d.ts.map +1 -0
  80. package/dist/orders/orders.js +33 -0
  81. package/dist/orders/orders.js.map +1 -0
  82. package/dist/seo/engine-url.d.ts +26 -0
  83. package/dist/seo/engine-url.d.ts.map +1 -0
  84. package/dist/seo/engine-url.js +111 -0
  85. package/dist/seo/engine-url.js.map +1 -0
  86. package/dist/seo/hreflang.d.ts +19 -0
  87. package/dist/seo/hreflang.d.ts.map +1 -0
  88. package/dist/seo/hreflang.js +52 -0
  89. package/dist/seo/hreflang.js.map +1 -0
  90. package/dist/seo/indexnow.d.ts +24 -0
  91. package/dist/seo/indexnow.d.ts.map +1 -0
  92. package/dist/seo/indexnow.js +50 -0
  93. package/dist/seo/indexnow.js.map +1 -0
  94. package/dist/seo/json-ld.d.ts +57 -0
  95. package/dist/seo/json-ld.d.ts.map +1 -0
  96. package/dist/seo/json-ld.js +180 -0
  97. package/dist/seo/json-ld.js.map +1 -0
  98. package/dist/seo/page-seo.d.ts +21 -0
  99. package/dist/seo/page-seo.d.ts.map +1 -0
  100. package/dist/seo/page-seo.js +68 -0
  101. package/dist/seo/page-seo.js.map +1 -0
  102. package/dist/seo/robots.d.ts +23 -0
  103. package/dist/seo/robots.d.ts.map +1 -0
  104. package/dist/seo/robots.js +35 -0
  105. package/dist/seo/robots.js.map +1 -0
  106. package/dist/seo/sitemap.d.ts +35 -0
  107. package/dist/seo/sitemap.d.ts.map +1 -0
  108. package/dist/seo/sitemap.js +186 -0
  109. package/dist/seo/sitemap.js.map +1 -0
  110. package/dist/server/process.d.ts +136 -0
  111. package/dist/server/process.d.ts.map +1 -0
  112. package/dist/server/process.js +143 -0
  113. package/dist/server/process.js.map +1 -0
  114. package/dist/types/address.d.ts +40 -0
  115. package/dist/types/address.d.ts.map +1 -0
  116. package/dist/types/address.js +2 -0
  117. package/dist/types/address.js.map +1 -0
  118. package/dist/types/analytics.d.ts +79 -0
  119. package/dist/types/analytics.d.ts.map +1 -0
  120. package/dist/types/analytics.js +2 -0
  121. package/dist/types/analytics.js.map +1 -0
  122. package/dist/types/business.d.ts +95 -0
  123. package/dist/types/business.d.ts.map +1 -0
  124. package/dist/types/business.js +2 -0
  125. package/dist/types/business.js.map +1 -0
  126. package/dist/types/buyer.d.ts +144 -0
  127. package/dist/types/buyer.d.ts.map +1 -0
  128. package/dist/types/buyer.js +45 -0
  129. package/dist/types/buyer.js.map +1 -0
  130. package/dist/types/campaign.d.ts +51 -0
  131. package/dist/types/campaign.d.ts.map +1 -0
  132. package/dist/types/campaign.js +2 -0
  133. package/dist/types/campaign.js.map +1 -0
  134. package/dist/types/cart.d.ts +40 -0
  135. package/dist/types/cart.d.ts.map +1 -0
  136. package/dist/types/cart.js +2 -0
  137. package/dist/types/cart.js.map +1 -0
  138. package/dist/types/catalog.d.ts +164 -0
  139. package/dist/types/catalog.d.ts.map +1 -0
  140. package/dist/types/catalog.js +2 -0
  141. package/dist/types/catalog.js.map +1 -0
  142. package/dist/types/cms.d.ts +200 -0
  143. package/dist/types/cms.d.ts.map +1 -0
  144. package/dist/types/cms.js +2 -0
  145. package/dist/types/cms.js.map +1 -0
  146. package/dist/types/cookie-consent.d.ts +18 -0
  147. package/dist/types/cookie-consent.d.ts.map +1 -0
  148. package/dist/types/cookie-consent.js +7 -0
  149. package/dist/types/cookie-consent.js.map +1 -0
  150. package/dist/types/guest-order.d.ts +16 -0
  151. package/dist/types/guest-order.d.ts.map +1 -0
  152. package/dist/types/guest-order.js +9 -0
  153. package/dist/types/guest-order.js.map +1 -0
  154. package/dist/types/listing.d.ts +14 -0
  155. package/dist/types/listing.d.ts.map +1 -0
  156. package/dist/types/listing.js +2 -0
  157. package/dist/types/listing.js.map +1 -0
  158. package/dist/types/order.d.ts +40 -0
  159. package/dist/types/order.d.ts.map +1 -0
  160. package/dist/types/order.js +2 -0
  161. package/dist/types/order.js.map +1 -0
  162. package/dist/types/seo.d.ts +96 -0
  163. package/dist/types/seo.d.ts.map +1 -0
  164. package/dist/types/seo.js +2 -0
  165. package/dist/types/seo.js.map +1 -0
  166. package/dist/types/server-env.d.ts +19 -0
  167. package/dist/types/server-env.d.ts.map +1 -0
  168. package/dist/types/server-env.js +10 -0
  169. package/dist/types/server-env.js.map +1 -0
  170. package/dist/types/wishlist.d.ts +10 -0
  171. package/dist/types/wishlist.d.ts.map +1 -0
  172. package/dist/types/wishlist.js +2 -0
  173. package/dist/types/wishlist.js.map +1 -0
  174. package/dist/wishlist/wishlist.d.ts +28 -0
  175. package/dist/wishlist/wishlist.d.ts.map +1 -0
  176. package/dist/wishlist/wishlist.js +42 -0
  177. package/dist/wishlist/wishlist.js.map +1 -0
  178. package/package.json +1 -1
@@ -0,0 +1,29 @@
1
+ import { analytics } from './analytics.js';
2
+ import type { StorefrontAnalyticsConfig, StorefrontEventPayload } from '../types/analytics.js';
3
+ type AnalyticsClient = Pick<typeof analytics, 'init' | 'track' | 'flush'>;
4
+ /** Thin typed wrappers — optional DX layer over the analytics singleton. */
5
+ export declare function createStorefrontAnalyticsTrackers(client?: AnalyticsClient): {
6
+ init: (config: StorefrontAnalyticsConfig, options?: Parameters<typeof analytics.init>[1]) => void;
7
+ flush: (beacon?: boolean) => void;
8
+ pageView: () => void;
9
+ productView: (payload: StorefrontEventPayload) => void;
10
+ categoryView: (payload: StorefrontEventPayload) => void;
11
+ brandView: (payload: StorefrontEventPayload) => void;
12
+ search: (query: string, resultsCount: number) => void;
13
+ addToCart: (payload: StorefrontEventPayload) => void;
14
+ removeFromCart: (payload: StorefrontEventPayload) => void;
15
+ cartView: (payload: StorefrontEventPayload) => void;
16
+ checkoutStarted: (payload: StorefrontEventPayload) => void;
17
+ checkoutError: (payload: StorefrontEventPayload) => void;
18
+ orderCompleted: (payload: StorefrontEventPayload) => void;
19
+ notFound: (payload: StorefrontEventPayload) => void;
20
+ filterApplied: (payload: StorefrontEventPayload) => void;
21
+ sortChanged: (payload: StorefrontEventPayload) => void;
22
+ promotionView: (payload: StorefrontEventPayload) => void;
23
+ wishlistAdd: (payload: StorefrontEventPayload) => void;
24
+ loginCompleted: (method?: string) => void;
25
+ registerCompleted: () => void;
26
+ };
27
+ export type StorefrontAnalyticsTrackers = ReturnType<typeof createStorefrontAnalyticsTrackers>;
28
+ export {};
29
+ //# sourceMappingURL=trackers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackers.d.ts","sourceRoot":"","sources":["../../src/analytics/trackers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAuB,MAAM,uBAAuB,CAAC;AAEpH,KAAK,eAAe,GAAG,IAAI,CAAC,OAAO,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;AAM1E,4EAA4E;AAC5E,wBAAgB,iCAAiC,CAAC,MAAM,GAAE,eAA2B;mBAElE,yBAAyB,YAAY,UAAU,CAAC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBAEvE,OAAO;;2BAED,sBAAsB;4BACrB,sBAAsB;yBACzB,sBAAsB;oBAC3B,MAAM,gBAAgB,MAAM;yBAEvB,sBAAsB;8BACjB,sBAAsB;wBAC5B,sBAAsB;+BACf,sBAAsB;6BACxB,sBAAsB;8BACrB,sBAAsB;wBAC5B,sBAAsB;6BACjB,sBAAsB;2BACxB,sBAAsB;6BACpB,sBAAsB;2BACxB,sBAAsB;;;EAIhD;AAED,MAAM,MAAM,2BAA2B,GAAG,UAAU,CAAC,OAAO,iCAAiC,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { analytics } from './analytics.js';
2
+ function track(client, type, payload = {}) {
3
+ client.track(type, payload);
4
+ }
5
+ /** Thin typed wrappers — optional DX layer over the analytics singleton. */
6
+ export function createStorefrontAnalyticsTrackers(client = analytics) {
7
+ return {
8
+ init: (config, options) => client.init(config, options),
9
+ flush: (beacon) => client.flush(beacon),
10
+ pageView: () => track(client, 'page_view'),
11
+ productView: (payload) => track(client, 'product_view', payload),
12
+ categoryView: (payload) => track(client, 'category_view', payload),
13
+ brandView: (payload) => track(client, 'brand_view', payload),
14
+ search: (query, resultsCount) => track(client, 'search', { query, results_count: resultsCount }),
15
+ addToCart: (payload) => track(client, 'add_to_cart', payload),
16
+ removeFromCart: (payload) => track(client, 'remove_from_cart', payload),
17
+ cartView: (payload) => track(client, 'cart_view', payload),
18
+ checkoutStarted: (payload) => track(client, 'checkout_started', payload),
19
+ checkoutError: (payload) => track(client, 'checkout_error', payload),
20
+ orderCompleted: (payload) => track(client, 'order_completed', payload),
21
+ notFound: (payload) => track(client, 'not_found_page_viewed', payload),
22
+ filterApplied: (payload) => track(client, 'filter_applied', payload),
23
+ sortChanged: (payload) => track(client, 'sort_changed', payload),
24
+ promotionView: (payload) => track(client, 'promotion_view', payload),
25
+ wishlistAdd: (payload) => track(client, 'wishlist_add', payload),
26
+ loginCompleted: (method = 'password') => track(client, 'login_completed', { method }),
27
+ registerCompleted: () => track(client, 'register_completed'),
28
+ };
29
+ }
30
+ //# sourceMappingURL=trackers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackers.js","sourceRoot":"","sources":["../../src/analytics/trackers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK3C,SAAS,KAAK,CAAC,MAAuB,EAAE,IAAyB,EAAE,UAAkC,EAAE;IACrG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,iCAAiC,CAAC,SAA0B,SAAS;IACnF,OAAO;QACL,IAAI,EAAE,CAAC,MAAiC,EAAE,OAA8C,EAAE,EAAE,CAC1F,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;QAC9B,KAAK,EAAE,CAAC,MAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QACjD,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;QAC1C,WAAW,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC;QACxF,YAAY,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC;QAC1F,SAAS,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC;QACpF,MAAM,EAAE,CAAC,KAAa,EAAE,YAAoB,EAAE,EAAE,CAC9C,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;QACjE,SAAS,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC;QACrF,cAAc,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAC;QAC/F,QAAQ,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC;QAClF,eAAe,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAC;QAChG,aAAa,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC;QAC5F,cAAc,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC;QAC9F,QAAQ,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,uBAAuB,EAAE,OAAO,CAAC;QAC9F,aAAa,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC;QAC5F,WAAW,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC;QACxF,aAAa,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC;QAC5F,WAAW,EAAE,CAAC,OAA+B,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC;QACxF,cAAc,EAAE,CAAC,MAAM,GAAG,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,CAAC;QACrF,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,oBAAoB,CAAC;KAC7D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Storefront API route catalog.
3
+ * Public anonymous surface: `/api/v1/storefront/*`
4
+ * Authenticated customer surface: `/api/v1/store/*`
5
+ */
6
+ export declare const StorefrontEndpoints: {
7
+ readonly cms: {
8
+ readonly websites: () => string;
9
+ readonly resolveWebsite: () => string;
10
+ readonly composition: (websiteId: string) => string;
11
+ readonly render: () => string;
12
+ };
13
+ readonly business: {
14
+ readonly profile: () => string;
15
+ };
16
+ readonly campaigns: {
17
+ readonly list: () => string;
18
+ readonly bySlug: (slug: string) => string;
19
+ };
20
+ readonly catalog: {
21
+ readonly search: () => string;
22
+ readonly products: () => string;
23
+ readonly categories: () => string;
24
+ readonly categoryTree: () => string;
25
+ readonly categoryProducts: (slug: string) => string;
26
+ readonly brands: () => string;
27
+ readonly brandProducts: (slug: string) => string;
28
+ /** @deprecated raw catalog — use storefront products */
29
+ readonly legacyProducts: () => string;
30
+ readonly ubigeos: () => string;
31
+ };
32
+ readonly commerce: {
33
+ readonly validateCoupon: () => string;
34
+ };
35
+ readonly auth: {
36
+ readonly registrationForm: () => string;
37
+ readonly register: () => string;
38
+ readonly login: () => string;
39
+ readonly logout: () => string;
40
+ readonly refresh: () => string;
41
+ readonly forgotPassword: () => string;
42
+ readonly resetPassword: () => string;
43
+ readonly verifyEmail: () => string;
44
+ readonly resendVerification: () => string;
45
+ };
46
+ readonly buyer: {
47
+ readonly me: () => string;
48
+ readonly profile: () => string;
49
+ readonly orders: () => string;
50
+ readonly addresses: () => string;
51
+ readonly address: (addressId: number) => string;
52
+ readonly defaultAddress: (addressId: number) => string;
53
+ readonly wishlist: () => string;
54
+ readonly wishlistItem: (productId: string) => string;
55
+ };
56
+ readonly cart: {
57
+ readonly root: () => string;
58
+ readonly items: () => string;
59
+ readonly item: (itemId: number) => string;
60
+ readonly merge: () => string;
61
+ };
62
+ readonly checkout: () => string;
63
+ readonly orders: {
64
+ readonly byId: (orderId: string) => string;
65
+ };
66
+ readonly analytics: {
67
+ readonly events: () => string;
68
+ };
69
+ };
70
+ //# sourceMappingURL=endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../src/api/endpoints.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;0CAIH,MAAM;;;;;;;;gCAWhB,MAAM;;;;;;;0CAQI,MAAM;;uCAGT,MAAM;QAE5B,wDAAwD;;;;;;;;;;;;;;;;;;;;;;;sCA0BnC,MAAM;6CACC,MAAM;;2CAGR,MAAM;;;;;gCAMjB,MAAM;;;;;iCAOL,MAAM;;;;;CAMhB,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Storefront API route catalog.
3
+ * Public anonymous surface: `/api/v1/storefront/*`
4
+ * Authenticated customer surface: `/api/v1/store/*`
5
+ */
6
+ export const StorefrontEndpoints = {
7
+ cms: {
8
+ websites: () => '/api/v1/storefront/cms/websites',
9
+ resolveWebsite: () => '/api/v1/storefront/cms/websites/resolve',
10
+ composition: (websiteId) => `/api/v1/storefront/cms/websites/${websiteId}/pages/composition`,
11
+ render: () => '/api/v1/storefront/render',
12
+ },
13
+ business: {
14
+ profile: () => '/api/v1/storefront/business/profile',
15
+ },
16
+ campaigns: {
17
+ list: () => '/api/v1/storefront/campaigns',
18
+ bySlug: (slug) => `/api/v1/storefront/campaigns/${encodeURIComponent(slug)}`,
19
+ },
20
+ catalog: {
21
+ search: () => '/api/v1/storefront/search',
22
+ products: () => '/api/v1/storefront/products',
23
+ categories: () => '/api/v1/storefront/categories',
24
+ categoryTree: () => '/api/v1/storefront/categories/tree',
25
+ categoryProducts: (slug) => `/api/v1/storefront/categories/${encodeURIComponent(slug)}/products`,
26
+ brands: () => '/api/v1/storefront/brands',
27
+ brandProducts: (slug) => `/api/v1/storefront/brands/${encodeURIComponent(slug)}/products`,
28
+ /** @deprecated raw catalog — use storefront products */
29
+ legacyProducts: () => '/api/v1/products',
30
+ ubigeos: () => '/api/v1/catalog/locations/ubigeos',
31
+ },
32
+ commerce: {
33
+ validateCoupon: () => '/api/v1/storefront/coupons/validate',
34
+ },
35
+ auth: {
36
+ registrationForm: () => '/api/v1/store/auth/registration-form',
37
+ register: () => '/api/v1/store/auth/register',
38
+ login: () => '/api/v1/store/auth/login',
39
+ logout: () => '/api/v1/store/auth/logout',
40
+ refresh: () => '/api/v1/store/auth/refresh',
41
+ forgotPassword: () => '/api/v1/store/auth/forgot-password',
42
+ resetPassword: () => '/api/v1/store/auth/reset-password',
43
+ verifyEmail: () => '/api/v1/store/auth/verify-email',
44
+ resendVerification: () => '/api/v1/store/auth/resend-verification',
45
+ },
46
+ buyer: {
47
+ me: () => '/api/v1/store/me',
48
+ profile: () => '/api/v1/store/me/profile',
49
+ orders: () => '/api/v1/store/me/orders',
50
+ addresses: () => '/api/v1/store/me/addresses/',
51
+ address: (addressId) => `/api/v1/store/me/addresses/${addressId}`,
52
+ defaultAddress: (addressId) => `/api/v1/store/me/addresses/${addressId}/default`,
53
+ wishlist: () => '/api/v1/store/me/wishlist',
54
+ wishlistItem: (productId) => `/api/v1/store/me/wishlist/${productId}`,
55
+ },
56
+ cart: {
57
+ root: () => '/api/v1/storefront/cart',
58
+ items: () => '/api/v1/storefront/cart/items',
59
+ item: (itemId) => `/api/v1/storefront/cart/items/${itemId}`,
60
+ merge: () => '/api/v1/storefront/cart/merge',
61
+ },
62
+ checkout: () => '/api/v1/storefront/checkout',
63
+ orders: {
64
+ byId: (orderId) => `/api/v1/storefront/orders/${orderId}`,
65
+ },
66
+ analytics: {
67
+ events: () => '/api/v1/storefront/events',
68
+ },
69
+ };
70
+ //# sourceMappingURL=endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../src/api/endpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { StorefrontEndpoints } from './endpoints.js';
2
+ export { StorefrontClient, createStorefrontClient, type StorefrontClientConfig, type StorefrontRequestContext, type StorefrontRequestOptions, type QueryParams, } from './storefront-client.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,WAAW,GACjB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { StorefrontEndpoints } from './endpoints.js';
2
+ export { StorefrontClient, createStorefrontClient, } from './storefront-client.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GAKvB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,50 @@
1
+ export type StorefrontClientConfig = {
2
+ baseUrl: string;
3
+ serviceKey?: string;
4
+ fetch?: typeof fetch;
5
+ };
6
+ export type StorefrontRequestContext = {
7
+ businessId?: string;
8
+ locale?: string;
9
+ currency?: string;
10
+ token?: string | null;
11
+ sessionId?: string | null;
12
+ serviceKey?: string;
13
+ };
14
+ export type QueryParams = Record<string, string | number | boolean | undefined | null>;
15
+ export type StorefrontRequestOptions = StorefrontRequestContext & {
16
+ query?: QueryParams;
17
+ headers?: Record<string, string>;
18
+ /** Return null on 404 instead of throwing */
19
+ notFound?: 'null';
20
+ /** Plain Error: `${failPrefix}: ${status}` */
21
+ failPrefix?: string;
22
+ /** Address-style: Object.assign(new Error(failLabel), { status, detail }) */
23
+ failLabel?: string;
24
+ /** Do not throw on non-OK responses */
25
+ ignoreErrors?: boolean;
26
+ /** Return fallback on any non-OK response (e.g. ubigeo search) */
27
+ fallback?: unknown;
28
+ /** Abort after this many ms. Defaults to 10 000. Pass 0 to disable. */
29
+ timeoutMs?: number;
30
+ /** Custom abort signal — takes precedence over timeoutMs. */
31
+ signal?: AbortSignal;
32
+ };
33
+ type JsonRequestOptions = StorefrontRequestOptions & {
34
+ body?: unknown;
35
+ };
36
+ export declare class StorefrontClient {
37
+ private readonly baseUrl;
38
+ private readonly serviceKey?;
39
+ private readonly fetchImpl;
40
+ constructor(config: StorefrontClientConfig);
41
+ url(path: string, query?: QueryParams): URL;
42
+ request<T>(method: string, path: string, opts?: JsonRequestOptions): Promise<T>;
43
+ get<T>(path: string, opts?: StorefrontRequestOptions): Promise<T>;
44
+ post<T>(path: string, body?: unknown, opts?: StorefrontRequestOptions): Promise<T>;
45
+ patch<T>(path: string, body?: unknown, opts?: StorefrontRequestOptions): Promise<T>;
46
+ delete<T>(path: string, opts?: StorefrontRequestOptions): Promise<T>;
47
+ }
48
+ export declare function createStorefrontClient(config: Pick<StorefrontClientConfig, 'baseUrl' | 'serviceKey' | 'fetch'>): StorefrontClient;
49
+ export {};
50
+ //# sourceMappingURL=storefront-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storefront-client.d.ts","sourceRoot":"","sources":["../../src/api/storefront-client.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AAEvF,MAAM,MAAM,wBAAwB,GAAG,wBAAwB,GAAG;IAChE,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,KAAK,kBAAkB,GAAG,wBAAwB,GAAG;IACnD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AA0EF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAE7B,MAAM,EAAE,sBAAsB;IAM1C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,GAAG;IAMrC,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,CAAC,CAAC;IA6Cb,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlF,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,CAAC,CAAC;IAInF,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,CAAC,CAAC;CAGrE;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC,GACvE,gBAAgB,CAElB"}
@@ -0,0 +1,123 @@
1
+ import { apiError } from '../internal/http.js';
2
+ function appendQuery(url, query) {
3
+ if (!query)
4
+ return;
5
+ for (const [key, value] of Object.entries(query)) {
6
+ if (value !== undefined && value !== null) {
7
+ url.searchParams.set(key, String(value));
8
+ }
9
+ }
10
+ }
11
+ function buildHeaders(clientServiceKey, opts) {
12
+ const headers = { ...opts.headers };
13
+ if (opts.withJsonBody) {
14
+ headers['Content-Type'] = 'application/json';
15
+ }
16
+ if (opts.businessId) {
17
+ headers['X-Business-ID'] = opts.businessId;
18
+ }
19
+ if (opts.locale) {
20
+ headers['Accept-Language'] = opts.locale;
21
+ }
22
+ if (opts.currency) {
23
+ headers['X-Currency'] = opts.currency;
24
+ }
25
+ if (opts.token) {
26
+ headers['Authorization'] = `Bearer ${opts.token}`;
27
+ }
28
+ else {
29
+ const serviceKey = opts.serviceKey ?? clientServiceKey;
30
+ if (serviceKey) {
31
+ headers['Authorization'] = `Bearer ${serviceKey}`;
32
+ }
33
+ }
34
+ if (opts.sessionId && !opts.token) {
35
+ headers['X-Session-ID'] = opts.sessionId;
36
+ }
37
+ return headers;
38
+ }
39
+ async function parseJsonBody(response) {
40
+ if (response.status === 204) {
41
+ return undefined;
42
+ }
43
+ return response.json();
44
+ }
45
+ async function handleErrorResponse(response, opts) {
46
+ const data = await response.json().catch(() => ({}));
47
+ if (opts.failLabel) {
48
+ throw Object.assign(new Error(opts.failLabel), {
49
+ status: response.status,
50
+ detail: data.detail,
51
+ });
52
+ }
53
+ if (opts.failPrefix) {
54
+ throw new Error(`${opts.failPrefix}: ${response.status}`);
55
+ }
56
+ throw apiError(response.status, data);
57
+ }
58
+ export class StorefrontClient {
59
+ baseUrl;
60
+ serviceKey;
61
+ fetchImpl;
62
+ constructor(config) {
63
+ this.baseUrl = config.baseUrl.replace(/\/$/, '');
64
+ this.serviceKey = config.serviceKey;
65
+ this.fetchImpl = config.fetch ?? fetch;
66
+ }
67
+ url(path, query) {
68
+ const url = new URL(path, this.baseUrl);
69
+ appendQuery(url, query);
70
+ return url;
71
+ }
72
+ async request(method, path, opts = {}) {
73
+ const url = this.url(path, opts.query);
74
+ // Default 10 s timeout so a hung API never stalls SSR indefinitely.
75
+ // Callers can override with opts.signal or set opts.timeoutMs = 0 to disable.
76
+ const timeoutMs = opts.timeoutMs ?? 10_000;
77
+ const signal = opts.signal ??
78
+ (timeoutMs > 0 && typeof AbortSignal !== 'undefined' && 'timeout' in AbortSignal
79
+ ? AbortSignal.timeout(timeoutMs)
80
+ : undefined);
81
+ const init = {
82
+ method,
83
+ ...(signal ? { signal } : {}),
84
+ headers: buildHeaders(this.serviceKey, {
85
+ ...opts,
86
+ withJsonBody: opts.body !== undefined,
87
+ }),
88
+ };
89
+ if (opts.body !== undefined) {
90
+ init.body = JSON.stringify(opts.body);
91
+ }
92
+ const response = await this.fetchImpl(url, init);
93
+ if (opts.ignoreErrors) {
94
+ return parseJsonBody(response);
95
+ }
96
+ if (response.status === 404 && opts.notFound === 'null') {
97
+ return null;
98
+ }
99
+ if (!response.ok) {
100
+ if (opts.fallback !== undefined) {
101
+ return opts.fallback;
102
+ }
103
+ return handleErrorResponse(response, opts);
104
+ }
105
+ return parseJsonBody(response);
106
+ }
107
+ get(path, opts) {
108
+ return this.request('GET', path, opts);
109
+ }
110
+ post(path, body, opts) {
111
+ return this.request('POST', path, { ...opts, body });
112
+ }
113
+ patch(path, body, opts) {
114
+ return this.request('PATCH', path, { ...opts, body });
115
+ }
116
+ delete(path, opts) {
117
+ return this.request('DELETE', path, opts);
118
+ }
119
+ }
120
+ export function createStorefrontClient(config) {
121
+ return new StorefrontClient(config);
122
+ }
123
+ //# sourceMappingURL=storefront-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storefront-client.js","sourceRoot":"","sources":["../../src/api/storefront-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import type { ProximaApiConfig, ProximaWebsiteResponse } from '../types/cms.js';
2
+ import { type BuyerProfile, type BuyerProfileUpdateParams, type BuyerRegisterParams, type BuyerSession, type RegistrationForm } from '../types/buyer.js';
3
+ /**
4
+ * Fetch the merchant-configured registration form schema.
5
+ * Call this server-side in your /register page to know which fields to render
6
+ * and which are required. `email` and `password` are always prepended by the API.
7
+ *
8
+ * @example
9
+ * // src/pages/register.astro
10
+ * const form = await fetchRegistrationForm({ baseUrl: env.apiUrl }, website);
11
+ * // Pass `form` as a prop to a client component that renders the dynamic form
12
+ */
13
+ export declare function fetchRegistrationForm(config: Pick<ProximaApiConfig, "baseUrl">, website: Pick<ProximaWebsiteResponse, "business_id">): Promise<RegistrationForm>;
14
+ /**
15
+ * Register a new customer. The merchant decides which fields are required —
16
+ * call fetchRegistrationForm() first to know what to collect.
17
+ *
18
+ * Throws MissingFieldsError when the merchant marked fields as required but
19
+ * they were omitted, so you can mark exactly which inputs are invalid.
20
+ *
21
+ * @example
22
+ * try {
23
+ * const session = await registerBuyer(config, website, { email, password, fullName });
24
+ * } catch (e) {
25
+ * if (e instanceof MissingFieldsError) {
26
+ * e.missingFields.forEach(({ field }) => markError(field));
27
+ * }
28
+ * }
29
+ */
30
+ export declare function registerBuyer(config: Pick<ProximaApiConfig, "baseUrl">, website: Pick<ProximaWebsiteResponse, "business_id">, params: BuyerRegisterParams): Promise<BuyerSession>;
31
+ /**
32
+ * Authenticate a customer with email and password.
33
+ * Returns a BuyerSession with access_token and refresh_token.
34
+ * Throws { status: 401 } on wrong credentials.
35
+ */
36
+ export declare function loginBuyer(config: Pick<ProximaApiConfig, "baseUrl">, website: Pick<ProximaWebsiteResponse, "business_id">, params: {
37
+ email: string;
38
+ password: string;
39
+ captchaToken?: string | null;
40
+ }): Promise<BuyerSession>;
41
+ /** Invalidate the current session server-side. Best-effort — always clear the cookie too. */
42
+ export declare function logoutBuyer(config: Pick<ProximaApiConfig, "baseUrl">, website: Pick<ProximaWebsiteResponse, "business_id">, params: {
43
+ token: string;
44
+ }): Promise<void>;
45
+ /**
46
+ * Exchange a refresh token for a new access token.
47
+ * Call this when you get a 401 on any authenticated request.
48
+ * Throws { status: 401 } if the refresh token is expired or revoked.
49
+ *
50
+ * @example
51
+ * // In Astro middleware:
52
+ * try {
53
+ * const session = await refreshBuyerToken(config, website, { refreshToken });
54
+ * // Set new access_token cookie
55
+ * } catch {
56
+ * // Clear both cookies, redirect to login
57
+ * }
58
+ */
59
+ export declare function refreshBuyerToken(config: Pick<ProximaApiConfig, "baseUrl">, website: Pick<ProximaWebsiteResponse, "business_id">, params: {
60
+ refreshToken: string;
61
+ }): Promise<BuyerSession>;
62
+ /** Fetch the authenticated customer's full profile. */
63
+ export declare function fetchBuyerProfile(config: Pick<ProximaApiConfig, "baseUrl">, website: Pick<ProximaWebsiteResponse, "business_id">, params: {
64
+ token: string;
65
+ }): Promise<BuyerProfile>;
66
+ /**
67
+ * Update the authenticated customer's profile. Only the fields you include
68
+ * in `params` are changed — it's a partial update.
69
+ */
70
+ export declare function updateBuyerProfile(config: Pick<ProximaApiConfig, "baseUrl">, website: Pick<ProximaWebsiteResponse, "business_id">, params: {
71
+ token: string;
72
+ } & BuyerProfileUpdateParams): Promise<BuyerProfile>;
73
+ /**
74
+ * Send a password reset email. Always resolves — even if the email doesn't exist.
75
+ * Always show: "Si el email existe, recibirás un enlace para restablecer tu contraseña."
76
+ */
77
+ export declare function forgotPassword(config: Pick<ProximaApiConfig, "baseUrl">, website: Pick<ProximaWebsiteResponse, "business_id">, params: {
78
+ email: string;
79
+ captchaToken?: string | null;
80
+ }): Promise<void>;
81
+ /**
82
+ * Reset the customer's password using the token from the reset email link.
83
+ * The token is the `?token=` query param in the reset URL.
84
+ * On success, all active sessions are revoked — redirect to login.
85
+ * Throws { status: 400, data.detail: BUYER_AUTH_ERRORS.RESET_TOKEN_INVALID } on bad token.
86
+ */
87
+ export declare function resetPassword(config: Pick<ProximaApiConfig, "baseUrl">, params: {
88
+ token: string;
89
+ newPassword: string;
90
+ }): Promise<void>;
91
+ /**
92
+ * Verify the customer's email using the token from the verification email link.
93
+ * Throws { status: 400, data.detail: BUYER_AUTH_ERRORS.VERIFY_TOKEN_INVALID } on bad token.
94
+ */
95
+ export declare function verifyEmail(config: Pick<ProximaApiConfig, "baseUrl">, params: {
96
+ token: string;
97
+ }): Promise<void>;
98
+ /**
99
+ * Re-send the email verification link. Requires the customer to be authenticated.
100
+ * Throws { status: 400, data.detail: BUYER_AUTH_ERRORS.EMAIL_ALREADY_VERIFIED } if already verified.
101
+ */
102
+ export declare function resendVerification(config: Pick<ProximaApiConfig, "baseUrl">, website: Pick<ProximaWebsiteResponse, "business_id">, params: {
103
+ token: string;
104
+ }): Promise<void>;
105
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/buyer/auth.ts"],"names":[],"mappings":"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"}