@sixtyninecommerce/client 0.30.0 → 0.31.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 (352) hide show
  1. package/README.md +548 -14
  2. package/dist/admin/http.d.ts.map +1 -1
  3. package/dist/admin/http.js.map +1 -1
  4. package/dist/admin/types.d.ts.map +1 -1
  5. package/dist/build-client.d.ts +9 -0
  6. package/dist/build-client.d.ts.map +1 -0
  7. package/dist/build-client.js +58 -0
  8. package/dist/build-client.js.map +1 -0
  9. package/dist/cache-tags.d.ts +35 -1
  10. package/dist/cache-tags.d.ts.map +1 -1
  11. package/dist/cache-tags.js +39 -1
  12. package/dist/cache-tags.js.map +1 -1
  13. package/dist/client.d.ts +25 -0
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +9 -62
  16. package/dist/client.js.map +1 -1
  17. package/dist/commerce/age-verification.d.ts +7 -4
  18. package/dist/commerce/age-verification.d.ts.map +1 -1
  19. package/dist/commerce/age-verification.js +6 -4
  20. package/dist/commerce/age-verification.js.map +1 -1
  21. package/dist/commerce/arguments.d.ts +13 -0
  22. package/dist/commerce/arguments.d.ts.map +1 -0
  23. package/dist/commerce/arguments.js +19 -0
  24. package/dist/commerce/arguments.js.map +1 -0
  25. package/dist/commerce/branding.d.ts.map +1 -1
  26. package/dist/commerce/branding.js.map +1 -1
  27. package/dist/commerce/capabilities.d.ts +40 -0
  28. package/dist/commerce/capabilities.d.ts.map +1 -0
  29. package/dist/commerce/capabilities.js +41 -0
  30. package/dist/commerce/capabilities.js.map +1 -0
  31. package/dist/commerce/cart.d.ts +9 -12
  32. package/dist/commerce/cart.d.ts.map +1 -1
  33. package/dist/commerce/cart.js +6 -1
  34. package/dist/commerce/cart.js.map +1 -1
  35. package/dist/commerce/checkout.d.ts +95 -15
  36. package/dist/commerce/checkout.d.ts.map +1 -1
  37. package/dist/commerce/checkout.js +230 -10
  38. package/dist/commerce/checkout.js.map +1 -1
  39. package/dist/commerce/customer.d.ts +82 -38
  40. package/dist/commerce/customer.d.ts.map +1 -1
  41. package/dist/commerce/customer.js +146 -10
  42. package/dist/commerce/customer.js.map +1 -1
  43. package/dist/commerce/favorites.d.ts +2 -5
  44. package/dist/commerce/favorites.d.ts.map +1 -1
  45. package/dist/commerce/favorites.js.map +1 -1
  46. package/dist/commerce/index.d.ts +189 -133
  47. package/dist/commerce/index.d.ts.map +1 -1
  48. package/dist/commerce/index.js +9 -0
  49. package/dist/commerce/index.js.map +1 -1
  50. package/dist/commerce/order-states.d.ts +18 -0
  51. package/dist/commerce/order-states.d.ts.map +1 -0
  52. package/dist/commerce/order-states.js +30 -0
  53. package/dist/commerce/order-states.js.map +1 -0
  54. package/dist/commerce/parcel-pricing.d.ts +48 -0
  55. package/dist/commerce/parcel-pricing.d.ts.map +1 -0
  56. package/dist/commerce/parcel-pricing.js +39 -0
  57. package/dist/commerce/parcel-pricing.js.map +1 -0
  58. package/dist/commerce/parked-orders.d.ts +22 -0
  59. package/dist/commerce/parked-orders.d.ts.map +1 -0
  60. package/dist/commerce/parked-orders.js +47 -0
  61. package/dist/commerce/parked-orders.js.map +1 -0
  62. package/dist/commerce/payments.d.ts +12 -5
  63. package/dist/commerce/payments.d.ts.map +1 -1
  64. package/dist/commerce/payments.js +10 -1
  65. package/dist/commerce/payments.js.map +1 -1
  66. package/dist/commerce/placement-error.d.ts +17 -0
  67. package/dist/commerce/placement-error.d.ts.map +1 -1
  68. package/dist/commerce/placement-error.js.map +1 -1
  69. package/dist/commerce/products.d.ts +92 -38
  70. package/dist/commerce/products.d.ts.map +1 -1
  71. package/dist/commerce/products.js +157 -123
  72. package/dist/commerce/products.js.map +1 -1
  73. package/dist/commerce/queries.d.ts +197 -48
  74. package/dist/commerce/queries.d.ts.map +1 -1
  75. package/dist/commerce/queries.js +1289 -746
  76. package/dist/commerce/queries.js.map +1 -1
  77. package/dist/commerce/quotes.d.ts +5 -4
  78. package/dist/commerce/quotes.d.ts.map +1 -1
  79. package/dist/commerce/quotes.js +1 -36
  80. package/dist/commerce/quotes.js.map +1 -1
  81. package/dist/commerce/recommendations.d.ts +3 -3
  82. package/dist/commerce/recommendations.d.ts.map +1 -1
  83. package/dist/commerce/recommendations.js +3 -1
  84. package/dist/commerce/recommendations.js.map +1 -1
  85. package/dist/commerce/returns.d.ts +7 -6
  86. package/dist/commerce/returns.d.ts.map +1 -1
  87. package/dist/commerce/returns.js.map +1 -1
  88. package/dist/commerce/reviews.d.ts +24 -15
  89. package/dist/commerce/reviews.d.ts.map +1 -1
  90. package/dist/commerce/reviews.js +67 -50
  91. package/dist/commerce/reviews.js.map +1 -1
  92. package/dist/commerce/saved-lists.d.ts +15 -15
  93. package/dist/commerce/saved-lists.d.ts.map +1 -1
  94. package/dist/commerce/saved-lists.js +67 -56
  95. package/dist/commerce/saved-lists.js.map +1 -1
  96. package/dist/commerce/search.d.ts +3 -2
  97. package/dist/commerce/search.d.ts.map +1 -1
  98. package/dist/commerce/search.js +2 -2
  99. package/dist/commerce/search.js.map +1 -1
  100. package/dist/commerce/shipping.d.ts +11 -4
  101. package/dist/commerce/shipping.d.ts.map +1 -1
  102. package/dist/commerce/shipping.js +17 -2
  103. package/dist/commerce/shipping.js.map +1 -1
  104. package/dist/commerce/stock-notifications.d.ts +2 -0
  105. package/dist/commerce/stock-notifications.d.ts.map +1 -1
  106. package/dist/commerce/stock-notifications.js +2 -2
  107. package/dist/commerce/stock-notifications.js.map +1 -1
  108. package/dist/commerce/subscriptions.d.ts +35 -37
  109. package/dist/commerce/subscriptions.d.ts.map +1 -1
  110. package/dist/commerce/subscriptions.js +159 -120
  111. package/dist/commerce/subscriptions.js.map +1 -1
  112. package/dist/commerce/vat-validation.d.ts +6 -3
  113. package/dist/commerce/vat-validation.d.ts.map +1 -1
  114. package/dist/commerce/vat-validation.js +24 -19
  115. package/dist/commerce/vat-validation.js.map +1 -1
  116. package/dist/constants.d.ts.map +1 -1
  117. package/dist/constants.js.map +1 -1
  118. package/dist/content/assets.d.ts +5 -4
  119. package/dist/content/assets.d.ts.map +1 -1
  120. package/dist/content/assets.js.map +1 -1
  121. package/dist/content/collection-pages.d.ts +3 -2
  122. package/dist/content/collection-pages.d.ts.map +1 -1
  123. package/dist/content/collection-pages.js.map +1 -1
  124. package/dist/content/collections.d.ts +5 -4
  125. package/dist/content/collections.d.ts.map +1 -1
  126. package/dist/content/collections.js.map +1 -1
  127. package/dist/content/filtered-products.d.ts.map +1 -1
  128. package/dist/content/filtered-products.js.map +1 -1
  129. package/dist/content/form-field-types.d.ts +3 -3
  130. package/dist/content/form-field-types.d.ts.map +1 -1
  131. package/dist/content/form-field-types.js.map +1 -1
  132. package/dist/content/forms.d.ts +4 -3
  133. package/dist/content/forms.d.ts.map +1 -1
  134. package/dist/content/forms.js +3 -0
  135. package/dist/content/forms.js.map +1 -1
  136. package/dist/content/index.d.ts +18 -17
  137. package/dist/content/index.d.ts.map +1 -1
  138. package/dist/content/items.d.ts +5 -4
  139. package/dist/content/items.d.ts.map +1 -1
  140. package/dist/content/items.js +2 -0
  141. package/dist/content/items.js.map +1 -1
  142. package/dist/content/menus.d.ts +3 -2
  143. package/dist/content/menus.d.ts.map +1 -1
  144. package/dist/content/menus.js +7 -1
  145. package/dist/content/menus.js.map +1 -1
  146. package/dist/content/resolve.d.ts +3 -2
  147. package/dist/content/resolve.d.ts.map +1 -1
  148. package/dist/content/resolve.js +1 -1
  149. package/dist/content/resolve.js.map +1 -1
  150. package/dist/content/sitemap.d.ts +3 -2
  151. package/dist/content/sitemap.d.ts.map +1 -1
  152. package/dist/content/sitemap.js.map +1 -1
  153. package/dist/content/strings.d.ts +16 -2
  154. package/dist/content/strings.d.ts.map +1 -1
  155. package/dist/content/strings.js +32 -4
  156. package/dist/content/strings.js.map +1 -1
  157. package/dist/core/context.d.ts +127 -1
  158. package/dist/core/context.d.ts.map +1 -1
  159. package/dist/core/context.js +436 -45
  160. package/dist/core/context.js.map +1 -1
  161. package/dist/core/currency.d.ts +14 -0
  162. package/dist/core/currency.d.ts.map +1 -0
  163. package/dist/core/currency.js +52 -0
  164. package/dist/core/currency.js.map +1 -0
  165. package/dist/core/deprecation.d.ts +23 -0
  166. package/dist/core/deprecation.d.ts.map +1 -0
  167. package/dist/core/deprecation.js +81 -0
  168. package/dist/core/deprecation.js.map +1 -0
  169. package/dist/core/http.d.ts +15 -1
  170. package/dist/core/http.d.ts.map +1 -1
  171. package/dist/core/http.js +55 -3
  172. package/dist/core/http.js.map +1 -1
  173. package/dist/core/public-artifact.d.ts +72 -0
  174. package/dist/core/public-artifact.d.ts.map +1 -0
  175. package/dist/core/public-artifact.js +122 -0
  176. package/dist/core/public-artifact.js.map +1 -0
  177. package/dist/core/unknown-field-rejection.d.ts +18 -0
  178. package/dist/core/unknown-field-rejection.d.ts.map +1 -0
  179. package/dist/core/unknown-field-rejection.js +37 -0
  180. package/dist/core/unknown-field-rejection.js.map +1 -0
  181. package/dist/credit/credit-status.d.ts +2 -0
  182. package/dist/credit/credit-status.d.ts.map +1 -1
  183. package/dist/credit/credit-status.js +71 -19
  184. package/dist/credit/credit-status.js.map +1 -1
  185. package/dist/credit/index.d.ts +1 -1
  186. package/dist/credit/payment-terms.d.ts +3 -3
  187. package/dist/credit/payment-terms.d.ts.map +1 -1
  188. package/dist/credit/payment-terms.js +28 -24
  189. package/dist/credit/payment-terms.js.map +1 -1
  190. package/dist/currency/exchange.d.ts +7 -7
  191. package/dist/currency/exchange.d.ts.map +1 -1
  192. package/dist/currency/exchange.js +5 -1
  193. package/dist/currency/exchange.js.map +1 -1
  194. package/dist/errors.d.ts +17 -0
  195. package/dist/errors.d.ts.map +1 -1
  196. package/dist/errors.js +13 -0
  197. package/dist/errors.js.map +1 -1
  198. package/dist/events/index.d.ts +20 -7
  199. package/dist/events/index.d.ts.map +1 -1
  200. package/dist/events/index.js +17 -5
  201. package/dist/events/index.js.map +1 -1
  202. package/dist/events/payloads.d.ts +7 -4
  203. package/dist/events/payloads.d.ts.map +1 -1
  204. package/dist/events/payloads.js +6 -3
  205. package/dist/events/payloads.js.map +1 -1
  206. package/dist/feeds/index.d.ts +5 -0
  207. package/dist/feeds/index.d.ts.map +1 -0
  208. package/dist/feeds/index.js +12 -0
  209. package/dist/feeds/index.js.map +1 -0
  210. package/dist/feeds/types.d.ts +18 -0
  211. package/dist/feeds/types.d.ts.map +1 -0
  212. package/dist/feeds/types.js +8 -0
  213. package/dist/feeds/types.js.map +1 -0
  214. package/dist/generated/cms.d.ts +2136 -0
  215. package/dist/generated/cms.d.ts.map +1 -0
  216. package/dist/generated/cms.js +4 -0
  217. package/dist/generated/cms.js.map +1 -0
  218. package/dist/generated/plugins.d.ts +550 -0
  219. package/dist/generated/plugins.d.ts.map +1 -0
  220. package/dist/generated/plugins.js +4 -0
  221. package/dist/generated/plugins.js.map +1 -0
  222. package/dist/generated/shop.d.ts +5539 -0
  223. package/dist/generated/shop.d.ts.map +1 -0
  224. package/dist/generated/shop.js +5 -0
  225. package/dist/generated/shop.js.map +1 -0
  226. package/dist/graphql-document.d.ts +29 -0
  227. package/dist/graphql-document.d.ts.map +1 -0
  228. package/dist/graphql-document.js +21 -0
  229. package/dist/graphql-document.js.map +1 -0
  230. package/dist/index.d.ts +9 -4
  231. package/dist/index.d.ts.map +1 -1
  232. package/dist/index.js +4 -2
  233. package/dist/index.js.map +1 -1
  234. package/dist/media/urls.d.ts.map +1 -1
  235. package/dist/media/urls.js +12 -1
  236. package/dist/media/urls.js.map +1 -1
  237. package/dist/media/video.d.ts.map +1 -1
  238. package/dist/media/video.js.map +1 -1
  239. package/dist/multi-store.d.ts +200 -0
  240. package/dist/multi-store.d.ts.map +1 -0
  241. package/dist/multi-store.js +558 -0
  242. package/dist/multi-store.js.map +1 -0
  243. package/dist/navigation/routes.d.ts +4 -3
  244. package/dist/navigation/routes.d.ts.map +1 -1
  245. package/dist/navigation/routes.js.map +1 -1
  246. package/dist/next/artifact-handler.d.ts +21 -13
  247. package/dist/next/artifact-handler.d.ts.map +1 -1
  248. package/dist/next/artifact-handler.js +28 -66
  249. package/dist/next/artifact-handler.js.map +1 -1
  250. package/dist/next/event-revalidate-handler.d.ts +26 -6
  251. package/dist/next/event-revalidate-handler.d.ts.map +1 -1
  252. package/dist/next/event-revalidate-handler.js +126 -19
  253. package/dist/next/event-revalidate-handler.js.map +1 -1
  254. package/dist/next/feed-handler.d.ts +50 -0
  255. package/dist/next/feed-handler.d.ts.map +1 -0
  256. package/dist/next/feed-handler.js +61 -0
  257. package/dist/next/feed-handler.js.map +1 -0
  258. package/dist/next/index.d.ts +3 -1
  259. package/dist/next/index.d.ts.map +1 -1
  260. package/dist/next/index.js +1 -0
  261. package/dist/next/index.js.map +1 -1
  262. package/dist/next/metadata.d.ts.map +1 -1
  263. package/dist/next/metadata.js.map +1 -1
  264. package/dist/next/redirect-middleware.d.ts +5 -31
  265. package/dist/next/redirect-middleware.d.ts.map +1 -1
  266. package/dist/next/redirect-middleware.js +4 -46
  267. package/dist/next/redirect-middleware.js.map +1 -1
  268. package/dist/next/revalidate-handler.d.ts.map +1 -1
  269. package/dist/next/revalidate-handler.js.map +1 -1
  270. package/dist/pricing/index.d.ts.map +1 -1
  271. package/dist/pricing/index.js.map +1 -1
  272. package/dist/pricing/tax-display.js +1 -1
  273. package/dist/pricing/tax-display.js.map +1 -1
  274. package/dist/pricing/tiers.d.ts +3 -2
  275. package/dist/pricing/tiers.d.ts.map +1 -1
  276. package/dist/pricing/tiers.js.map +1 -1
  277. package/dist/pricing/validation.d.ts +63 -12
  278. package/dist/pricing/validation.d.ts.map +1 -1
  279. package/dist/pricing/validation.js +60 -12
  280. package/dist/pricing/validation.js.map +1 -1
  281. package/dist/redirects/index.d.ts.map +1 -1
  282. package/dist/redirects/index.js +2 -1
  283. package/dist/redirects/index.js.map +1 -1
  284. package/dist/redirects/store.d.ts.map +1 -1
  285. package/dist/redirects/store.js +6 -2
  286. package/dist/redirects/store.js.map +1 -1
  287. package/dist/redirects/types.d.ts +5 -2
  288. package/dist/redirects/types.d.ts.map +1 -1
  289. package/dist/revalidation/event-plan.d.ts +55 -4
  290. package/dist/revalidation/event-plan.d.ts.map +1 -1
  291. package/dist/revalidation/event-plan.js +115 -8
  292. package/dist/revalidation/event-plan.js.map +1 -1
  293. package/dist/revalidation/event-verify.d.ts +8 -37
  294. package/dist/revalidation/event-verify.d.ts.map +1 -1
  295. package/dist/revalidation/event-verify.js +7 -97
  296. package/dist/revalidation/event-verify.js.map +1 -1
  297. package/dist/revalidation/types.d.ts.map +1 -1
  298. package/dist/revalidation/url-context.d.ts +17 -0
  299. package/dist/revalidation/url-context.d.ts.map +1 -1
  300. package/dist/revalidation/url-context.js +35 -2
  301. package/dist/revalidation/url-context.js.map +1 -1
  302. package/dist/seo/ai.d.ts.map +1 -1
  303. package/dist/seo/ai.js.map +1 -1
  304. package/dist/seo/artifacts.d.ts +86 -4
  305. package/dist/seo/artifacts.d.ts.map +1 -1
  306. package/dist/seo/artifacts.js +115 -16
  307. package/dist/seo/artifacts.js.map +1 -1
  308. package/dist/seo/availability.d.ts +2 -2
  309. package/dist/seo/availability.d.ts.map +1 -1
  310. package/dist/seo/availability.js.map +1 -1
  311. package/dist/seo/index.d.ts +2 -0
  312. package/dist/seo/index.d.ts.map +1 -1
  313. package/dist/seo/index.js +3 -1
  314. package/dist/seo/index.js.map +1 -1
  315. package/dist/seo/json-ld.d.ts.map +1 -1
  316. package/dist/seo/json-ld.js.map +1 -1
  317. package/dist/seo/meta-tags.d.ts.map +1 -1
  318. package/dist/seo/meta-tags.js.map +1 -1
  319. package/dist/seo/metadata-parser.d.ts.map +1 -1
  320. package/dist/seo/metadata-parser.js.map +1 -1
  321. package/dist/seo/metadata-types.d.ts.map +1 -1
  322. package/dist/seo/robots.d.ts.map +1 -1
  323. package/dist/seo/robots.js.map +1 -1
  324. package/dist/seo/types.d.ts +9 -2
  325. package/dist/seo/types.d.ts.map +1 -1
  326. package/dist/seo/url-builder.d.ts +5 -3
  327. package/dist/seo/url-builder.d.ts.map +1 -1
  328. package/dist/seo/url-builder.js +3 -1
  329. package/dist/seo/url-builder.js.map +1 -1
  330. package/dist/types.d.ts +1226 -2522
  331. package/dist/types.d.ts.map +1 -1
  332. package/dist/web/artifact-responder.d.ts +69 -0
  333. package/dist/web/artifact-responder.d.ts.map +1 -0
  334. package/dist/web/artifact-responder.js +90 -0
  335. package/dist/web/artifact-responder.js.map +1 -0
  336. package/dist/web/feed-responder.d.ts +72 -0
  337. package/dist/web/feed-responder.d.ts.map +1 -0
  338. package/dist/web/feed-responder.js +81 -0
  339. package/dist/web/feed-responder.js.map +1 -0
  340. package/dist/web/index.d.ts +23 -0
  341. package/dist/web/index.d.ts.map +1 -0
  342. package/dist/web/index.js +19 -0
  343. package/dist/web/index.js.map +1 -0
  344. package/dist/web/redirect-middleware.d.ts +76 -0
  345. package/dist/web/redirect-middleware.d.ts.map +1 -0
  346. package/dist/web/redirect-middleware.js +94 -0
  347. package/dist/web/redirect-middleware.js.map +1 -0
  348. package/dist/web/respond.d.ts +20 -0
  349. package/dist/web/respond.d.ts.map +1 -0
  350. package/dist/web/respond.js +52 -0
  351. package/dist/web/respond.js.map +1 -0
  352. package/package.json +18 -2
@@ -0,0 +1,558 @@
1
+ /**
2
+ * One storefront process, several stores (headless spec §6.2, §12.2;
3
+ * multi-region §7.9).
4
+ *
5
+ * `createStorefrontClient({ resolveStore })` returns a store ROUTER. Each
6
+ * request asks it for a `StorefrontClient` of its own, assembled from two
7
+ * halves that never mix:
8
+ *
9
+ * - **Per store, shared by every request for that store:** the channel snapshot
10
+ * (frozen), the CDN, the redirect store and the fact that the code names a
11
+ * real store. Held in a bounded LRU; one CMS channel resolver serves them all.
12
+ * - **Per request, shared with nothing:** the sign-in, language, session
13
+ * currency, order scope, head and buyer address — a NEW `StoreContext` for
14
+ * every `forRequest`/`forStore`, so two concurrent requests (for one store or
15
+ * two) can never send each other's token or price in each other's currency.
16
+ *
17
+ * Which store a request is for is the storefront's own rule (ruling F8): a
18
+ * function from the request to a store code. Nothing is looked up on the
19
+ * platform; `storeFromHostMap` and `storeFromPathPrefix` cover a fixed list.
20
+ */
21
+ import { channelTenant, createDeprecationReporter, createTransport, PlatformError, } from '@sixtyninecommerce/core';
22
+ import { buildStorefrontClient } from './build-client.js';
23
+ import { storeCacheTag } from './cache-tags.js';
24
+ import { REQUEST_TIMEOUT_MS } from './constants.js';
25
+ import { assembleStoreContext, assertBuyerIp, assertCurrencyCode, assertCustomerToken, assertHeadKey, assertPrivateTokenRuntime, assertPrivateTokenShape, channelNotFound, createClientChannelResolver, readClientEndpoints, renameReporter, resolveCoreChannel, toChannelInfo, } from './core/context.js';
26
+ import { assertDeprecationHook, endpointDeprecationHook, methodDeprecationReporter, } from './core/deprecation.js';
27
+ import { StorefrontError, toStorefrontError } from './errors.js';
28
+ import { createRedirectStore } from './redirects/store.js';
29
+ /**
30
+ * Brand on every router, so the adapters (`/next`) can tell one from a
31
+ * single-store client. `Symbol.for`, so a second copy of this package in the
32
+ * same process still recognises it.
33
+ */
34
+ const MULTI_STORE_CLIENT = Symbol.for('@sixtyninecommerce/client:multi-store-client');
35
+ /** Where a router keeps the listeners `onRedirectError` registers. Package-internal. */
36
+ const REDIRECT_ERROR_LISTENERS = Symbol('redirect-error-listeners');
37
+ const CHANNEL_RESOLVER = Symbol('channel-resolver');
38
+ /**
39
+ * Forget what the router's shared channel resolver holds for a store code, so the next request
40
+ * for it asks the CMS again — `channel.renamed` delivers this before any request has to fail
41
+ * on the old code's rotated token (W8-16b). A no-op for anything that is not a router.
42
+ */
43
+ export function forgetStoreCode(router, storeCode) {
44
+ const channels = router[CHANNEL_RESOLVER];
45
+ channels?.invalidate(storeCode);
46
+ }
47
+ /**
48
+ * Hear about any of the router's stores failing to load its redirect map — the
49
+ * one signal that redirects have stopped refreshing (the stores keep serving
50
+ * their last good map). `createRedirectMiddleware({ client, onError })` wires
51
+ * its `onError` here. Returns the unsubscribe.
52
+ */
53
+ export function onRedirectError(router, listener) {
54
+ const listeners = router[REDIRECT_ERROR_LISTENERS];
55
+ if (!listeners)
56
+ return () => undefined;
57
+ listeners.add(listener);
58
+ return () => listeners.delete(listener);
59
+ }
60
+ /** Is this a store router (`createStorefrontClient({ resolveStore })`)? */
61
+ export function isMultiStoreClient(value) {
62
+ return (typeof value === 'object' &&
63
+ value !== null &&
64
+ value[MULTI_STORE_CLIENT] === true);
65
+ }
66
+ /** Does this config ask for a store router rather than one store's client? */
67
+ export function isMultiStoreConfig(config) {
68
+ return config.resolveStore !== undefined;
69
+ }
70
+ /**
71
+ * The client an adapter serves a request from: a router resolves the request
72
+ * (`null` when it belongs to no store the router serves — answer it 404); a
73
+ * single-store client, or its promise, is the answer as it always was.
74
+ */
75
+ export async function adapterClient(source, request) {
76
+ if (!isMultiStoreClient(source))
77
+ return source;
78
+ try {
79
+ return await source.forRequest(request);
80
+ }
81
+ catch (error) {
82
+ if (isStoreRefusal(error))
83
+ return null;
84
+ throw error;
85
+ }
86
+ }
87
+ /** The refusals that mean "no store here" — an adapter answers them 404, never 5xx. */
88
+ const STORE_REFUSAL_CODES = new Set([
89
+ 'STORE_NOT_RESOLVED',
90
+ 'STORE_NOT_ALLOWED',
91
+ 'CHANNEL_NOT_FOUND',
92
+ ]);
93
+ /** Did a router refuse because the request belongs to no store it serves? */
94
+ export function isStoreRefusal(error) {
95
+ return (error instanceof StorefrontError &&
96
+ error.statusCode === 404 &&
97
+ STORE_REFUSAL_CODES.has(error.code));
98
+ }
99
+ /**
100
+ * The tags an adapter's own upstream fetch carries: the bare tag, plus its
101
+ * store-scoped copy when the client serves one store of several.
102
+ */
103
+ export function adapterCacheTags(client, tag) {
104
+ // `context?.`: the adapters only ever needed `seo` or `feeds`, so a hand-made
105
+ // client without a context has always worked here, and still does.
106
+ const ctx = client.context;
107
+ return ctx?.storeScopedCacheTags ? [tag, storeCacheTag(ctx.channel.code, tag)] : [tag];
108
+ }
109
+ /** The Vendure root channel: never a tenant, never a store. */
110
+ const DEFAULT_CHANNEL_CODE = '__default_channel__';
111
+ /** Stores remembered at once unless `stores` lists more. */
112
+ const DEFAULT_MAX_STORES = 256;
113
+ /**
114
+ * Is this code a store? Organization workspaces (hubs) are mirrored into the
115
+ * CMS and answer `GET /channels/by-code/:code` with 200, so the lookup cannot
116
+ * tell; the Shop API refuses a hub's token with 404 `CHANNEL_NOT_FOUND`
117
+ * (multi-region #792). One read per store per channel id, never per request.
118
+ */
119
+ export const STORE_PROBE = /* GraphQL */ `
120
+ query StoreProbe {
121
+ activeChannel {
122
+ id
123
+ }
124
+ }
125
+ `;
126
+ function invalid(message) {
127
+ return new StorefrontError(message, 'cms', 400, 'INVALID_ARGUMENT');
128
+ }
129
+ function storeNotResolved() {
130
+ return new StorefrontError('No store serves this request: resolveStore returned no store code for it.', 'cms', 404, 'STORE_NOT_RESOLVED');
131
+ }
132
+ function storeNotAllowed(storeCode) {
133
+ return new StorefrontError(`Store code "${storeCode}" is not one this client serves. Add it to \`stores\`, or fix resolveStore.`, 'cms', 404, 'STORE_NOT_ALLOWED');
134
+ }
135
+ /** A non-empty store code, refused before it reaches any lookup. */
136
+ function readStoreCode(value, label) {
137
+ if (typeof value !== 'string' || value.trim() === '') {
138
+ throw invalid(`${label} must be a non-empty store code; got ${JSON.stringify(value)}`);
139
+ }
140
+ return value;
141
+ }
142
+ /** Validate one resolution. `null`/`undefined` is the resolver's "no store". */
143
+ function readResolution(resolution, label) {
144
+ if (resolution === null || resolution === undefined)
145
+ return null;
146
+ if (typeof resolution === 'string')
147
+ return { storeCode: readStoreCode(resolution, label) };
148
+ if (typeof resolution !== 'object' || Array.isArray(resolution)) {
149
+ throw invalid(`${label} must be a store code, { storeCode, head?, language? } or null; got ${JSON.stringify(resolution)}`);
150
+ }
151
+ const { storeCode, head, language } = resolution;
152
+ assertHeadKey(head, `${label}.head`);
153
+ if (language !== undefined && (typeof language !== 'string' || language.trim() === '')) {
154
+ throw invalid(`${label}.language must be a non-empty language code`);
155
+ }
156
+ return {
157
+ storeCode: readStoreCode(storeCode, `${label}.storeCode`),
158
+ ...(head !== undefined ? { head: head } : {}),
159
+ ...(language !== undefined ? { language: language } : {}),
160
+ };
161
+ }
162
+ /** A copy of the request the resolver may read but not change. */
163
+ function toStoreRequest(input) {
164
+ if (typeof input !== 'object' || input === null) {
165
+ throw invalid('forRequest needs a Request, or { url, headers }');
166
+ }
167
+ const rawUrl = input.url;
168
+ let url;
169
+ try {
170
+ url = new URL(rawUrl instanceof URL ? rawUrl.href : String(rawUrl));
171
+ }
172
+ catch {
173
+ throw invalid(`forRequest needs an absolute request URL; got ${JSON.stringify(String(rawUrl))}. On a node:http server, build it from the Host header you trust.`);
174
+ }
175
+ const rawHeaders = input.headers;
176
+ return { url, headers: new Headers(rawHeaders ?? {}) };
177
+ }
178
+ function assertRequestOptions(options) {
179
+ if (options === undefined)
180
+ return;
181
+ if (typeof options !== 'object' || options === null) {
182
+ throw invalid('Request options must be an object');
183
+ }
184
+ assertCustomerToken(options.customerToken);
185
+ assertCurrencyCode(options.currencyCode);
186
+ assertHeadKey(options.head, 'head');
187
+ if (options.languageCode !== undefined &&
188
+ (typeof options.languageCode !== 'string' || options.languageCode.trim() === '')) {
189
+ throw invalid('languageCode must be a non-empty language code');
190
+ }
191
+ }
192
+ /** The per-store private token lookup, refused at construction where it can be. */
193
+ function readPrivateTokens(option) {
194
+ if (option === undefined)
195
+ return () => undefined;
196
+ // FIRST, before anything else: a credential in a page is every visitor's.
197
+ assertPrivateTokenRuntime();
198
+ if (typeof option === 'string') {
199
+ throw invalid('privateToken is per store on a multi-store client: a private token is bound to ONE channel, and the platform ignores it on any other store. Pass { [storeCode]: token } or a function from the store code to its token.');
200
+ }
201
+ if (typeof option === 'function') {
202
+ return (storeCode) => {
203
+ const token = option(storeCode);
204
+ if (token === undefined)
205
+ return undefined;
206
+ if (typeof token !== 'string') {
207
+ throw invalid(`privateToken(${JSON.stringify(storeCode)}) must return a token or undefined`);
208
+ }
209
+ assertPrivateTokenShape(token);
210
+ return token;
211
+ };
212
+ }
213
+ if (typeof option !== 'object' || option === null || Array.isArray(option)) {
214
+ throw invalid('privateToken must be { [storeCode]: token } or a function');
215
+ }
216
+ const tokens = new Map();
217
+ for (const [storeCode, token] of Object.entries(option)) {
218
+ if (typeof token !== 'string') {
219
+ throw invalid(`privateToken["${storeCode}"] must be a string`);
220
+ }
221
+ assertPrivateTokenShape(token);
222
+ tokens.set(storeCode, token);
223
+ }
224
+ return (storeCode) => tokens.get(storeCode);
225
+ }
226
+ /** A config value that is one shopper's, refused on a router. */
227
+ const PER_SHOPPER_KEYS = ['customerToken', 'currencyCode', 'buyerIp'];
228
+ /**
229
+ * A frozen copy of the resolver's answer. Shared by every request for the
230
+ * store, so nothing a request (or a consumer) does to `client.context.channel`
231
+ * can reach the next request — a write throws in strict mode instead.
232
+ */
233
+ function freezeChannel(info) {
234
+ return Object.freeze({
235
+ ...toChannelInfo(info),
236
+ customFields: Object.freeze({ ...info.customFields }),
237
+ });
238
+ }
239
+ export function createMultiStoreClient(config) {
240
+ const raw = config;
241
+ if (raw.storeCode !== undefined) {
242
+ throw invalid('Pass storeCode (one store) or resolveStore (several stores per process), not both.');
243
+ }
244
+ if (typeof config.resolveStore !== 'function') {
245
+ throw invalid('resolveStore must be a function from the request to a store code');
246
+ }
247
+ const privateTokenFor = readPrivateTokens(config.privateToken);
248
+ for (const key of PER_SHOPPER_KEYS) {
249
+ if (raw[key] !== undefined) {
250
+ throw invalid(`${key} belongs to one shopper, and a multi-store client serves every request: pass it per request — forRequest(request, { ${key} }) — so no other request or store sends it.`);
251
+ }
252
+ }
253
+ assertHeadKey(config.head, 'head');
254
+ assertDeprecationHook(config.onDeprecation);
255
+ let allowed = null;
256
+ if (config.stores !== undefined) {
257
+ if (!Array.isArray(config.stores))
258
+ throw invalid('stores must be an array of store codes');
259
+ allowed = new Set(config.stores.map((code, i) => readStoreCode(code, `stores[${i}]`)));
260
+ }
261
+ const endpoints = readClientEndpoints(config);
262
+ // ONE resolver for every store: it caches per code, collapses concurrent
263
+ // lookups of one code, and heals a rotated token (spec §6.2).
264
+ const channels = createClientChannelResolver(endpoints);
265
+ const maxStores = Math.max(DEFAULT_MAX_STORES, allowed?.size ?? 0);
266
+ const bindings = new Map();
267
+ const building = new Map();
268
+ // A deprecated route is announced once per ROUTER, not once per request: the
269
+ // transports are rebuilt for every request, and each dedupes only its own.
270
+ const reportDeprecation = createDeprecationReporter(endpointDeprecationHook(config.onDeprecation));
271
+ // The same for a deprecated method of this SDK (`client.graphql()`): its hook once per router;
272
+ // without one, the process-wide line.
273
+ const reportDeprecatedMethod = methodDeprecationReporter(config.onDeprecation);
274
+ // A store resolved under its OLD code (renamed): said once per router (or once per process,
275
+ // by default), however many requests reach it.
276
+ const reportRename = renameReporter(config.onStoreRenamed, 'router');
277
+ // Who hears about a store's redirect map failing to load: the redirect
278
+ // middlewares built on this router (`createRedirectMiddleware({ client })`).
279
+ // The redirect stores are the router's, made before any middleware exists.
280
+ const redirectErrorListeners = new Set();
281
+ const reportRedirectError = (storeCode, error) => {
282
+ const labelled = new Error(`Redirects of store "${storeCode}": ${error.message}`, {
283
+ cause: error,
284
+ });
285
+ for (const listener of redirectErrorListeners) {
286
+ try {
287
+ listener(labelled);
288
+ }
289
+ catch (listenerError) {
290
+ // A throwing logger must not take a store's redirects down with it (the
291
+ // map keeps serving the last good snapshot either way) — but it must
292
+ // not hide the failure it was handed either, nor its own breakage.
293
+ console.warn(`[@sixtyninecommerce/client] the redirect onError handler threw while reporting: ${labelled.message}`, listenerError);
294
+ }
295
+ }
296
+ };
297
+ function remember(storeCode, binding) {
298
+ // Map order is recency: re-inserting moves the store to the back.
299
+ bindings.delete(storeCode);
300
+ bindings.set(storeCode, binding);
301
+ while (bindings.size > maxStores) {
302
+ const oldest = bindings.keys().next().value;
303
+ if (oldest === undefined)
304
+ break;
305
+ bindings.delete(oldest);
306
+ }
307
+ }
308
+ async function assertIsStore(storeCode, info, privateToken) {
309
+ if (info.code === DEFAULT_CHANNEL_CODE)
310
+ throw channelNotFound(storeCode);
311
+ const probe = createTransport({
312
+ urls: {
313
+ vendureUrl: endpoints.vendureUrl,
314
+ cmsUrl: endpoints.cmsUrl,
315
+ pluginsUrl: endpoints.pluginsUrl,
316
+ },
317
+ principal: { kind: 'anonymous' },
318
+ tenant: channelTenant(storeCode),
319
+ channels,
320
+ fetch: endpoints.fetch,
321
+ retry: {
322
+ attempts: Math.max(1, endpoints.retry.attempts),
323
+ baseDelayMs: endpoints.retry.baseDelayMs,
324
+ },
325
+ timeoutMs: REQUEST_TIMEOUT_MS,
326
+ ...(privateToken ? { storefrontToken: privateToken } : {}),
327
+ });
328
+ try {
329
+ await probe.graphql({ query: STORE_PROBE, api: 'shop' });
330
+ }
331
+ catch (error) {
332
+ // Worded like an unknown code, as the platform words it: the answer must
333
+ // not tell a prober that the code belongs to an organization.
334
+ if (error instanceof PlatformError && error.code === 'CHANNEL_NOT_FOUND') {
335
+ throw channelNotFound(storeCode);
336
+ }
337
+ throw toStorefrontError(error, 'vendure');
338
+ }
339
+ }
340
+ async function bindingFor(storeCode, privateToken) {
341
+ const info = await resolveCoreChannel(channels, storeCode, endpoints.cmsUrl);
342
+ // The router keeps resolving the code `resolveStore` names: that is the storefront's own
343
+ // rule, and only it knows when a store is renamed. Within the old code's window the answer
344
+ // is the store under its new code — every request's context (`snapshot`) and its tenant
345
+ // then use the new code — and the storefront is told to update its rule before the old
346
+ // code stops answering. Never remembered past that: the old code may later name another
347
+ // store, and this rule would then be pointing at it.
348
+ if (info.code !== storeCode) {
349
+ reportRename({
350
+ previousCode: storeCode,
351
+ code: info.code,
352
+ ...(info.previousCodeUntil ? { previousCodeUntil: info.previousCodeUntil } : {}),
353
+ },
354
+ // The window, not renamed_at: an undo or a stalled-job recovery rewrites the alias row
355
+ // with a fresh renamed_at but the same window, and that is no news to a router.
356
+ info.previousCodeUntil ?? '');
357
+ }
358
+ const known = bindings.get(storeCode);
359
+ if (known && known.channelId === info.id) {
360
+ // Same store; the resolver may have re-read it (TTL, a rotated token).
361
+ const current = known.source === info ? known : { ...known, source: info, snapshot: freezeChannel(info) };
362
+ remember(storeCode, current);
363
+ return current;
364
+ }
365
+ // New to this process, or the code now names a different channel: verify
366
+ // it is a store before anything is served for it. Concurrent first
367
+ // requests share one verification; a refusal is never remembered.
368
+ const key = `${storeCode}\u0000${info.id}`;
369
+ const pending = building.get(key);
370
+ if (pending)
371
+ return pending;
372
+ const build = (async () => {
373
+ await assertIsStore(storeCode, info, privateToken);
374
+ const binding = {
375
+ channelId: info.id,
376
+ source: info,
377
+ snapshot: freezeChannel(info),
378
+ redirects: createRedirectStore({
379
+ // The store's current code, read per load from its latest binding.
380
+ storeCode: () => bindings.get(storeCode)?.snapshot.code ?? info.code,
381
+ pluginsUrl: endpoints.pluginsUrl,
382
+ fetch: endpoints.fetch,
383
+ onError: (error) => reportRedirectError(info.code, error),
384
+ }),
385
+ };
386
+ remember(storeCode, binding);
387
+ return binding;
388
+ })();
389
+ building.set(key, build);
390
+ // Only our own slot, and on both outcomes, so a failure is retried by the
391
+ // next request instead of being handed to it.
392
+ const release = () => {
393
+ if (building.get(key) === build)
394
+ building.delete(key);
395
+ };
396
+ build.then(release, release);
397
+ return build;
398
+ }
399
+ async function clientFor(storeCode, target, options) {
400
+ // Everything that can be refused without the network is, first.
401
+ assertRequestOptions(options);
402
+ if (allowed !== null && !allowed.has(storeCode))
403
+ throw storeNotAllowed(storeCode);
404
+ if (storeCode === DEFAULT_CHANNEL_CODE)
405
+ throw channelNotFound(storeCode);
406
+ const privateToken = privateTokenFor(storeCode);
407
+ // Blank is refused; WITHOUT a token it is simply not sent (see the option).
408
+ assertBuyerIp(options?.buyerIp, true);
409
+ const binding = await bindingFor(storeCode, privateToken);
410
+ const shopper = {
411
+ languageCode: options?.languageCode ?? target?.language ?? config.defaultLanguageCode,
412
+ currencyCode: options?.currencyCode,
413
+ authToken: options?.customerToken,
414
+ privateToken,
415
+ buyerIp: privateToken !== undefined ? options?.buyerIp : undefined,
416
+ orderScope: options?.orderScope ?? config.orderScope,
417
+ head: options?.head ?? target?.head ?? config.head,
418
+ onAuthToken: options?.onAuthToken ?? config.onAuthToken,
419
+ onAuthExpired: options?.onAuthExpired ?? config.onAuthExpired,
420
+ onAuthCleared: options?.onAuthCleared ?? config.onAuthCleared,
421
+ };
422
+ const ctx = assembleStoreContext(endpoints, binding.snapshot, channels, shopper, {
423
+ storeScopedCacheTags: true,
424
+ onDeprecation: reportDeprecation,
425
+ reportDeprecatedMethod,
426
+ });
427
+ return buildStorefrontClient(ctx, binding.redirects);
428
+ }
429
+ const router = {
430
+ async forRequest(request, options) {
431
+ const storeRequest = toStoreRequest(request);
432
+ const target = readResolution(await config.resolveStore(storeRequest), 'resolveStore()');
433
+ if (target === null)
434
+ throw storeNotResolved();
435
+ return clientFor(target.storeCode, target, options);
436
+ },
437
+ async forStore(storeCode, options) {
438
+ return clientFor(readStoreCode(storeCode, 'storeCode'), null, options);
439
+ },
440
+ };
441
+ Object.defineProperty(router, MULTI_STORE_CLIENT, { value: true });
442
+ Object.defineProperty(router, REDIRECT_ERROR_LISTENERS, { value: redirectErrorListeners });
443
+ Object.defineProperty(router, CHANNEL_RESOLVER, { value: channels });
444
+ return router;
445
+ }
446
+ /** Lower-cased, without the trailing dot a fully-qualified host may carry. */
447
+ function normalizeHost(host) {
448
+ return host.trim().toLowerCase().replace(/\.$/, '');
449
+ }
450
+ /**
451
+ * A bare `host[:port]` parsed the way a request URL's host is — lower-cased and
452
+ * an internationalised name in punycode, so `bücher.example` and the
453
+ * `xn--bcher-kva.example` a browser sends are one key — or `null` when the value
454
+ * is not a bare authority (a path, a query, credentials).
455
+ */
456
+ function parseAuthority(value) {
457
+ let parsed;
458
+ try {
459
+ parsed = new URL(`http://${value.trim()}`);
460
+ }
461
+ catch {
462
+ return null;
463
+ }
464
+ const bare = parsed.pathname === '/' &&
465
+ parsed.search === '' &&
466
+ parsed.hash === '' &&
467
+ parsed.username === '' &&
468
+ parsed.password === '';
469
+ return bare ? parsed : null;
470
+ }
471
+ /**
472
+ * A resolver for a fixed list of addresses (ruling F8): the request's host →
473
+ * its store. A key with a port (`localhost:3000`) matches only that port; a
474
+ * key without one matches the host on any port. Anything unlisted resolves to
475
+ * `null` (404 `STORE_NOT_RESOLVED`).
476
+ *
477
+ * Decides by the `Host` header the server received, and only by the URL when
478
+ * the request carries none: a self-hosted Next.js server (`next start`, the
479
+ * standalone output) builds `request.url` on its OWN host (`localhost:3000`),
480
+ * so the URL alone would resolve no visitor to any store. Never by
481
+ * `X-Forwarded-Host`: a visitor can send that header, and a cache in front of
482
+ * you keys on the Host it saw — so trusting it would let anyone fill store A's
483
+ * cache with store B's pages. Behind a proxy that rewrites Host, write a
484
+ * resolver that reads the header your proxy guarantees.
485
+ *
486
+ * @example
487
+ * ```ts
488
+ * storeFromHostMap({
489
+ * 'fashion.example.com': 'fashion-store',
490
+ * 'trade.fashion.example.com': { storeCode: 'fashion-store', head: 'trade' },
491
+ * });
492
+ * ```
493
+ */
494
+ export function storeFromHostMap(map) {
495
+ if (typeof map !== 'object' || map === null) {
496
+ throw invalid('storeFromHostMap needs { [host]: storeCode | { storeCode, head?, language? } }');
497
+ }
498
+ const table = new Map();
499
+ for (const [host, resolution] of Object.entries(map)) {
500
+ const authority = /\s/.test(host.trim()) ? null : parseAuthority(host);
501
+ if (host.trim() === '' || authority === null) {
502
+ throw invalid(`storeFromHostMap: "${host}" is not a host`);
503
+ }
504
+ // A key with a port keeps it; one without is the bare hostname.
505
+ const key = normalizeHost(authority.port === '' ? authority.hostname : authority.host);
506
+ const target = readResolution(resolution, `storeFromHostMap["${host}"]`);
507
+ if (target === null)
508
+ throw invalid(`storeFromHostMap["${host}"] names no store`);
509
+ table.set(key, target);
510
+ }
511
+ const lookup = (host, hostname) => table.get(normalizeHost(host)) ?? table.get(normalizeHost(hostname)) ?? null;
512
+ return ({ url, headers }) => {
513
+ const sent = headers.get('host');
514
+ if (sent === null || sent.trim() === '')
515
+ return lookup(url.host, url.hostname);
516
+ // Parsed as a URL authority, so a port, an IPv6 literal and an IDN split
517
+ // the way `url.host` / `url.hostname` do; a value that is not one names no
518
+ // store.
519
+ const parsed = parseAuthority(sent);
520
+ return parsed === null ? null : lookup(parsed.host, parsed.hostname);
521
+ };
522
+ }
523
+ /**
524
+ * A resolver for stores under path prefixes (`/nl/…` → one store, `/be/…` →
525
+ * another). Matches whole segments only (`/nl` never matches `/nlx`), longest
526
+ * prefix first; `/` alone matches every path, as a fallback. Anything else
527
+ * resolves to `null` (404 `STORE_NOT_RESOLVED`).
528
+ *
529
+ * The prefix stays part of every URL: canonical links are built on each
530
+ * store's own main shop address (`storefrontUrl`, e.g. `https://example.com/nl`).
531
+ */
532
+ export function storeFromPathPrefix(map) {
533
+ if (typeof map !== 'object' || map === null) {
534
+ throw invalid('storeFromPathPrefix needs { [pathPrefix]: storeCode | { storeCode, head?, language? } }');
535
+ }
536
+ const entries = [];
537
+ for (const [prefix, resolution] of Object.entries(map)) {
538
+ if (!prefix.startsWith('/') || prefix.includes('?') || prefix.includes('#')) {
539
+ throw invalid(`storeFromPathPrefix: "${prefix}" must be a path starting with "/"`);
540
+ }
541
+ // The form `url.pathname` arrives in: percent-encoded, no trailing slash.
542
+ const encoded = new URL(prefix, 'https://prefix.invalid').pathname.replace(/\/+$/, '') || '/';
543
+ const target = readResolution(resolution, `storeFromPathPrefix["${prefix}"]`);
544
+ if (target === null)
545
+ throw invalid(`storeFromPathPrefix["${prefix}"] names no store`);
546
+ entries.push([encoded, target]);
547
+ }
548
+ entries.sort(([a], [b]) => b.length - a.length);
549
+ return ({ url }) => {
550
+ const path = url.pathname;
551
+ for (const [prefix, target] of entries) {
552
+ if (prefix === '/' || path === prefix || path.startsWith(`${prefix}/`))
553
+ return target;
554
+ }
555
+ return null;
556
+ };
557
+ }
558
+ //# sourceMappingURL=multi-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-store.js","sourceRoot":"","sources":["../src/multi-store.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import type { HttpClient } from '../core/http.js';
2
- import type { RequestOptions, ResolvedRoute, RouteEntry, RoutesResponse } from '../types.js';
2
+ import type { PublicRouteEntryDto, PublicRoutesResponseDto } from '../generated/plugins.js';
3
+ import type { RequestOptions, ResolvedRoute } from '../types.js';
3
4
  export declare function createRoutesMethods(http: HttpClient): {
4
- getRoutes(languageCode?: string, options?: RequestOptions): Promise<RoutesResponse>;
5
+ getRoutes(languageCode?: string, options?: RequestOptions): Promise<PublicRoutesResponseDto>;
5
6
  findRoute(path: string, languageCode?: string, options?: RequestOptions): Promise<ResolvedRoute | null>;
6
- getRoutesByType(type: "cms" | "collection" | "product", languageCode?: string, options?: RequestOptions): Promise<RouteEntry[]>;
7
+ getRoutesByType(type: PublicRouteEntryDto["type"], languageCode?: string, options?: RequestOptions): Promise<PublicRouteEntryDto[]>;
7
8
  };
8
9
  //# sourceMappingURL=routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/navigation/routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU;6BAEjB,MAAM,YAAY,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;oBAOjF,MAAM,iBACG,MAAM,YACX,cAAc,GACvB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;0BAmBxB,KAAK,GAAG,YAAY,GAAG,SAAS,iBACvB,MAAM,YACX,cAAc,GACvB,OAAO,CAAC,UAAU,EAAE,CAAC;EAgB3B"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/navigation/routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC5F,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU;6BAG/B,MAAM,YACX,cAAc,GACvB,OAAO,CAAC,uBAAuB,CAAC;oBAO3B,MAAM,iBACG,MAAM,YACX,cAAc,GACvB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;0BAmBxB,mBAAmB,CAAC,MAAM,CAAC,iBAClB,MAAM,YACX,cAAc,GACvB,OAAO,CAAC,mBAAmB,EAAE,CAAC;EAgBpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/navigation/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIrD,MAAM,UAAU,mBAAmB,CAAC,IAAgB;IAClD,OAAO;QACL,KAAK,CAAC,SAAS,CAAC,YAAqB,EAAE,OAAwB;YAC7D,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,IAAI,YAAY;gBAAE,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;YACtD,OAAO,IAAI,CAAC,UAAU,CAAiB,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC;QAED,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,YAAqB,EACrB,OAAwB;YAExB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CACpC,SAAS,EACT,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,EAC1D,OAAO,CACR,CAAC;YAEF,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;YAEvD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;wBAC/B,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7D,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,CAAC,eAAe,CACnB,IAAsC,EACtC,YAAqB,EACrB,OAAwB;YAExB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CACpC,SAAS,EACT,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,EAC1D,OAAO,CACR,CAAC;YAEF,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;wBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/navigation/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAKrD,MAAM,UAAU,mBAAmB,CAAC,IAAgB;IAClD,OAAO;QACL,KAAK,CAAC,SAAS,CACb,YAAqB,EACrB,OAAwB;YAExB,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,IAAI,YAAY;gBAAE,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;YACtD,OAAO,IAAI,CAAC,UAAU,CAA0B,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9E,CAAC;QAED,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,YAAqB,EACrB,OAAwB;YAExB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CACpC,SAAS,EACT,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,EAC1D,OAAO,CACR,CAAC;YAEF,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;YAEvD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;wBAC/B,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7D,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,CAAC,eAAe,CACnB,IAAiC,EACjC,YAAqB,EACrB,OAAwB;YAExB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CACpC,SAAS,EACT,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,EAC1D,OAAO,CACR,CAAC;YAEF,MAAM,MAAM,GAA0B,EAAE,CAAC;YACzC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;wBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}