@sixtyninecommerce/client 0.24.0 → 0.25.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 (293) hide show
  1. package/README.md +21 -0
  2. package/dist/admin/forms.js +19 -0
  3. package/dist/admin/forms.js.map +1 -1
  4. package/dist/admin/http.d.ts +9 -0
  5. package/dist/admin/http.d.ts.map +1 -1
  6. package/dist/admin/http.js +3 -0
  7. package/dist/admin/http.js.map +1 -1
  8. package/dist/admin/index.d.ts +63 -0
  9. package/dist/admin/index.d.ts.map +1 -1
  10. package/dist/admin/index.js +67 -0
  11. package/dist/admin/index.js.map +1 -1
  12. package/dist/admin/redirects.d.ts +6 -0
  13. package/dist/admin/redirects.d.ts.map +1 -1
  14. package/dist/admin/redirects.js +12 -0
  15. package/dist/admin/redirects.js.map +1 -1
  16. package/dist/admin/types.d.ts +63 -0
  17. package/dist/admin/types.d.ts.map +1 -1
  18. package/dist/cache-tags.d.ts +19 -0
  19. package/dist/cache-tags.d.ts.map +1 -1
  20. package/dist/cache-tags.js +19 -0
  21. package/dist/cache-tags.js.map +1 -1
  22. package/dist/client.d.ts +17 -0
  23. package/dist/client.d.ts.map +1 -1
  24. package/dist/client.js +17 -0
  25. package/dist/client.js.map +1 -1
  26. package/dist/commerce/age-verification.js +3 -3
  27. package/dist/commerce/age-verification.js.map +1 -1
  28. package/dist/commerce/branding.js +7 -0
  29. package/dist/commerce/branding.js.map +1 -1
  30. package/dist/commerce/cart.js +25 -0
  31. package/dist/commerce/cart.js.map +1 -1
  32. package/dist/commerce/checkout.d.ts +68 -0
  33. package/dist/commerce/checkout.d.ts.map +1 -1
  34. package/dist/commerce/checkout.js +83 -0
  35. package/dist/commerce/checkout.js.map +1 -1
  36. package/dist/commerce/customer.d.ts +58 -0
  37. package/dist/commerce/customer.d.ts.map +1 -1
  38. package/dist/commerce/customer.js +65 -0
  39. package/dist/commerce/customer.js.map +1 -1
  40. package/dist/commerce/pickup-location-parser.d.ts +18 -0
  41. package/dist/commerce/pickup-location-parser.d.ts.map +1 -1
  42. package/dist/commerce/pickup-location-parser.js +28 -0
  43. package/dist/commerce/pickup-location-parser.js.map +1 -1
  44. package/dist/commerce/placement-error.d.ts +52 -0
  45. package/dist/commerce/placement-error.d.ts.map +1 -1
  46. package/dist/commerce/placement-error.js +87 -0
  47. package/dist/commerce/placement-error.js.map +1 -1
  48. package/dist/commerce/products.d.ts +48 -0
  49. package/dist/commerce/products.d.ts.map +1 -1
  50. package/dist/commerce/products.js +92 -0
  51. package/dist/commerce/products.js.map +1 -1
  52. package/dist/commerce/queries.d.ts +113 -27
  53. package/dist/commerce/queries.d.ts.map +1 -1
  54. package/dist/commerce/queries.js +188 -2
  55. package/dist/commerce/queries.js.map +1 -1
  56. package/dist/commerce/quotes.js +33 -0
  57. package/dist/commerce/quotes.js.map +1 -1
  58. package/dist/commerce/saved-lists.d.ts +7 -7
  59. package/dist/commerce/saved-lists.d.ts.map +1 -1
  60. package/dist/commerce/saved-lists.js +1 -1
  61. package/dist/commerce/search.js +3 -0
  62. package/dist/commerce/search.js.map +1 -1
  63. package/dist/commerce/shipping.js +3 -3
  64. package/dist/commerce/shipping.js.map +1 -1
  65. package/dist/commerce/stock-notifications.d.ts +11 -0
  66. package/dist/commerce/stock-notifications.d.ts.map +1 -1
  67. package/dist/commerce/stock-notifications.js +11 -0
  68. package/dist/commerce/stock-notifications.js.map +1 -1
  69. package/dist/commerce/vat-validation.js +4 -4
  70. package/dist/commerce/vat-validation.js.map +1 -1
  71. package/dist/constants.d.ts +31 -0
  72. package/dist/constants.d.ts.map +1 -1
  73. package/dist/constants.js +32 -0
  74. package/dist/constants.js.map +1 -1
  75. package/dist/content/asset-urls.d.ts +50 -0
  76. package/dist/content/asset-urls.d.ts.map +1 -1
  77. package/dist/content/asset-urls.js +92 -0
  78. package/dist/content/asset-urls.js.map +1 -1
  79. package/dist/content/assets.d.ts +15 -0
  80. package/dist/content/assets.d.ts.map +1 -1
  81. package/dist/content/assets.js +15 -0
  82. package/dist/content/assets.js.map +1 -1
  83. package/dist/content/collection-pages.d.ts +5 -0
  84. package/dist/content/collection-pages.d.ts.map +1 -1
  85. package/dist/content/collection-pages.js +8 -0
  86. package/dist/content/collection-pages.js.map +1 -1
  87. package/dist/content/collections.d.ts +14 -0
  88. package/dist/content/collections.d.ts.map +1 -1
  89. package/dist/content/collections.js +16 -0
  90. package/dist/content/collections.js.map +1 -1
  91. package/dist/content/filtered-products.d.ts +18 -0
  92. package/dist/content/filtered-products.d.ts.map +1 -1
  93. package/dist/content/filtered-products.js +16 -0
  94. package/dist/content/filtered-products.js.map +1 -1
  95. package/dist/content/form-field-types.d.ts +6 -0
  96. package/dist/content/form-field-types.d.ts.map +1 -1
  97. package/dist/content/form-field-types.js +12 -0
  98. package/dist/content/form-field-types.js.map +1 -1
  99. package/dist/content/forms.d.ts +16 -0
  100. package/dist/content/forms.d.ts.map +1 -1
  101. package/dist/content/forms.js +23 -0
  102. package/dist/content/forms.js.map +1 -1
  103. package/dist/content/items.d.ts +26 -0
  104. package/dist/content/items.d.ts.map +1 -1
  105. package/dist/content/items.js +33 -0
  106. package/dist/content/items.js.map +1 -1
  107. package/dist/content/resolve.js +6 -0
  108. package/dist/content/resolve.js.map +1 -1
  109. package/dist/content/sitemap.d.ts +5 -0
  110. package/dist/content/sitemap.d.ts.map +1 -1
  111. package/dist/content/sitemap.js +5 -0
  112. package/dist/content/sitemap.js.map +1 -1
  113. package/dist/core/context.js +6 -0
  114. package/dist/core/context.js.map +1 -1
  115. package/dist/core/headers.js +2 -0
  116. package/dist/core/headers.js.map +1 -1
  117. package/dist/core/http.d.ts +8 -0
  118. package/dist/core/http.d.ts.map +1 -1
  119. package/dist/core/http.js +89 -1
  120. package/dist/core/http.js.map +1 -1
  121. package/dist/credit/credit-status.js +2 -2
  122. package/dist/credit/credit-status.js.map +1 -1
  123. package/dist/credit/payment-terms.js +2 -2
  124. package/dist/credit/payment-terms.js.map +1 -1
  125. package/dist/currency/exchange.d.ts +11 -0
  126. package/dist/currency/exchange.d.ts.map +1 -1
  127. package/dist/currency/exchange.js +11 -0
  128. package/dist/currency/exchange.js.map +1 -1
  129. package/dist/errors.d.ts +50 -2
  130. package/dist/errors.d.ts.map +1 -1
  131. package/dist/errors.js +48 -2
  132. package/dist/errors.js.map +1 -1
  133. package/dist/events/envelope.d.ts +36 -0
  134. package/dist/events/envelope.d.ts.map +1 -1
  135. package/dist/events/envelope.js +12 -0
  136. package/dist/events/envelope.js.map +1 -1
  137. package/dist/events/index.d.ts +13 -0
  138. package/dist/events/index.d.ts.map +1 -1
  139. package/dist/events/index.js +13 -0
  140. package/dist/events/index.js.map +1 -1
  141. package/dist/events/payloads.d.ts +19 -0
  142. package/dist/events/payloads.d.ts.map +1 -1
  143. package/dist/events/payloads.js +12 -0
  144. package/dist/events/payloads.js.map +1 -1
  145. package/dist/index.d.ts +7 -0
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +7 -0
  148. package/dist/index.js.map +1 -1
  149. package/dist/media/index.js +2 -0
  150. package/dist/media/index.js.map +1 -1
  151. package/dist/media/urls.d.ts +52 -0
  152. package/dist/media/urls.d.ts.map +1 -1
  153. package/dist/media/urls.js +38 -0
  154. package/dist/media/urls.js.map +1 -1
  155. package/dist/media/video.d.ts +16 -0
  156. package/dist/media/video.d.ts.map +1 -1
  157. package/dist/media/video.js +16 -0
  158. package/dist/media/video.js.map +1 -1
  159. package/dist/next/artifact-handler.d.ts +22 -0
  160. package/dist/next/artifact-handler.d.ts.map +1 -1
  161. package/dist/next/artifact-handler.js +22 -0
  162. package/dist/next/artifact-handler.js.map +1 -1
  163. package/dist/next/event-revalidate-handler.d.ts +67 -0
  164. package/dist/next/event-revalidate-handler.d.ts.map +1 -1
  165. package/dist/next/event-revalidate-handler.js +48 -0
  166. package/dist/next/event-revalidate-handler.js.map +1 -1
  167. package/dist/next/index.d.ts +6 -0
  168. package/dist/next/index.d.ts.map +1 -1
  169. package/dist/next/index.js +6 -0
  170. package/dist/next/index.js.map +1 -1
  171. package/dist/next/json-ld.d.ts +9 -0
  172. package/dist/next/json-ld.d.ts.map +1 -1
  173. package/dist/next/json-ld.js +9 -0
  174. package/dist/next/json-ld.js.map +1 -1
  175. package/dist/next/metadata.d.ts +18 -0
  176. package/dist/next/metadata.d.ts.map +1 -1
  177. package/dist/next/metadata.js +21 -0
  178. package/dist/next/metadata.js.map +1 -1
  179. package/dist/next/redirect-middleware.d.ts +39 -0
  180. package/dist/next/redirect-middleware.d.ts.map +1 -1
  181. package/dist/next/redirect-middleware.js +32 -0
  182. package/dist/next/redirect-middleware.js.map +1 -1
  183. package/dist/next/revalidate-handler.d.ts +30 -0
  184. package/dist/next/revalidate-handler.d.ts.map +1 -1
  185. package/dist/next/revalidate-handler.js +22 -0
  186. package/dist/next/revalidate-handler.js.map +1 -1
  187. package/dist/order-scope.d.ts +27 -0
  188. package/dist/order-scope.d.ts.map +1 -1
  189. package/dist/order-scope.js +29 -0
  190. package/dist/order-scope.js.map +1 -1
  191. package/dist/pricing/format.d.ts +17 -0
  192. package/dist/pricing/format.d.ts.map +1 -1
  193. package/dist/pricing/format.js +19 -0
  194. package/dist/pricing/format.js.map +1 -1
  195. package/dist/pricing/index.d.ts +8 -1
  196. package/dist/pricing/index.d.ts.map +1 -1
  197. package/dist/pricing/index.js +18 -2
  198. package/dist/pricing/index.js.map +1 -1
  199. package/dist/pricing/tax-display.d.ts +77 -0
  200. package/dist/pricing/tax-display.d.ts.map +1 -1
  201. package/dist/pricing/tax-display.js +85 -0
  202. package/dist/pricing/tax-display.js.map +1 -1
  203. package/dist/pricing/tiers.d.ts +9 -0
  204. package/dist/pricing/tiers.d.ts.map +1 -1
  205. package/dist/pricing/tiers.js +9 -0
  206. package/dist/pricing/tiers.js.map +1 -1
  207. package/dist/pricing/validation.d.ts +56 -1
  208. package/dist/pricing/validation.d.ts.map +1 -1
  209. package/dist/pricing/validation.js +61 -0
  210. package/dist/pricing/validation.js.map +1 -1
  211. package/dist/redirects/index.d.ts +1 -0
  212. package/dist/redirects/index.d.ts.map +1 -1
  213. package/dist/redirects/index.js +1 -0
  214. package/dist/redirects/index.js.map +1 -1
  215. package/dist/redirects/store.d.ts +20 -0
  216. package/dist/redirects/store.d.ts.map +1 -1
  217. package/dist/redirects/store.js +57 -0
  218. package/dist/redirects/store.js.map +1 -1
  219. package/dist/redirects/types.d.ts +24 -0
  220. package/dist/redirects/types.d.ts.map +1 -1
  221. package/dist/redirects/types.js +1 -0
  222. package/dist/redirects/types.js.map +1 -1
  223. package/dist/revalidation/event-plan.d.ts +48 -0
  224. package/dist/revalidation/event-plan.d.ts.map +1 -1
  225. package/dist/revalidation/event-plan.js +61 -0
  226. package/dist/revalidation/event-plan.js.map +1 -1
  227. package/dist/revalidation/event-verify.d.ts +25 -0
  228. package/dist/revalidation/event-verify.d.ts.map +1 -1
  229. package/dist/revalidation/event-verify.js +27 -0
  230. package/dist/revalidation/event-verify.js.map +1 -1
  231. package/dist/revalidation/types.d.ts +20 -0
  232. package/dist/revalidation/types.d.ts.map +1 -1
  233. package/dist/revalidation/types.js +10 -0
  234. package/dist/revalidation/types.js.map +1 -1
  235. package/dist/revalidation/url-context.d.ts +25 -0
  236. package/dist/revalidation/url-context.d.ts.map +1 -1
  237. package/dist/revalidation/url-context.js +17 -0
  238. package/dist/revalidation/url-context.js.map +1 -1
  239. package/dist/revalidation/verify.d.ts +8 -0
  240. package/dist/revalidation/verify.d.ts.map +1 -1
  241. package/dist/revalidation/verify.js +8 -0
  242. package/dist/revalidation/verify.js.map +1 -1
  243. package/dist/seo/ai.d.ts +17 -0
  244. package/dist/seo/ai.d.ts.map +1 -1
  245. package/dist/seo/ai.js +12 -0
  246. package/dist/seo/ai.js.map +1 -1
  247. package/dist/seo/alternates.js +13 -0
  248. package/dist/seo/alternates.js.map +1 -1
  249. package/dist/seo/artifacts.d.ts +13 -0
  250. package/dist/seo/artifacts.d.ts.map +1 -1
  251. package/dist/seo/artifacts.js +19 -0
  252. package/dist/seo/artifacts.js.map +1 -1
  253. package/dist/seo/canonical.d.ts +15 -0
  254. package/dist/seo/canonical.d.ts.map +1 -1
  255. package/dist/seo/canonical.js +24 -0
  256. package/dist/seo/canonical.js.map +1 -1
  257. package/dist/seo/index.js +6 -0
  258. package/dist/seo/index.js.map +1 -1
  259. package/dist/seo/json-ld.d.ts +13 -0
  260. package/dist/seo/json-ld.d.ts.map +1 -1
  261. package/dist/seo/json-ld.js +32 -0
  262. package/dist/seo/json-ld.js.map +1 -1
  263. package/dist/seo/locale-tag.d.ts +31 -0
  264. package/dist/seo/locale-tag.d.ts.map +1 -1
  265. package/dist/seo/locale-tag.js +31 -0
  266. package/dist/seo/locale-tag.js.map +1 -1
  267. package/dist/seo/meta-tags.d.ts +29 -0
  268. package/dist/seo/meta-tags.d.ts.map +1 -1
  269. package/dist/seo/meta-tags.js +28 -0
  270. package/dist/seo/meta-tags.js.map +1 -1
  271. package/dist/seo/metadata-parser.d.ts +24 -0
  272. package/dist/seo/metadata-parser.d.ts.map +1 -1
  273. package/dist/seo/metadata-parser.js +38 -0
  274. package/dist/seo/metadata-parser.js.map +1 -1
  275. package/dist/seo/metadata-types.d.ts +16 -0
  276. package/dist/seo/metadata-types.d.ts.map +1 -1
  277. package/dist/seo/product-path.d.ts +96 -0
  278. package/dist/seo/product-path.d.ts.map +1 -1
  279. package/dist/seo/product-path.js +96 -0
  280. package/dist/seo/product-path.js.map +1 -1
  281. package/dist/seo/robots.d.ts +17 -0
  282. package/dist/seo/robots.d.ts.map +1 -1
  283. package/dist/seo/robots.js +12 -0
  284. package/dist/seo/robots.js.map +1 -1
  285. package/dist/seo/types.d.ts +39 -0
  286. package/dist/seo/types.d.ts.map +1 -1
  287. package/dist/seo/url-builder.d.ts +31 -0
  288. package/dist/seo/url-builder.d.ts.map +1 -1
  289. package/dist/seo/url-builder.js +36 -0
  290. package/dist/seo/url-builder.js.map +1 -1
  291. package/dist/types.d.ts +1163 -0
  292. package/dist/types.d.ts.map +1 -1
  293. package/package.json +1 -1
@@ -1,6 +1,22 @@
1
+ /**
2
+ * Event → revalidation mapping. Pure: no `next`, no I/O, so a pull-feed
3
+ * consumer can reuse it exactly as the webhook handler does.
4
+ *
5
+ * Path rules the whole module keeps:
6
+ * - Event paths are channel-relative and locale-UNPREFIXED. Each is composed
7
+ * per locale with the channel's own URL rule (`buildUrl`) and then mapped to
8
+ * a route path (default: the URL's pathname).
9
+ * - A commerce path prefix is never prepended and never stripped: commerce
10
+ * paths on the bus already carry it, and CMS paths never do — a CMS page may
11
+ * legitimately live at `/store/about` beside `commercePathPrefix: '/store'`.
12
+ * - Whenever an event cannot say which URLs moved (a truncated list, a moved
13
+ * base path, a rule change), the plan is the WHOLE site. Never quieter.
14
+ */
1
15
  import { collectionCacheTag, productCacheTag, SEO_ARTIFACT_TAG } from '../cache-tags.js';
2
16
  import { buildUrl } from '../seo/url-builder.js';
17
+ /** Above this many route paths, one whole-site revalidation replaces them — as the legacy dispatcher does. */
3
18
  export const DEFAULT_MAX_REVALIDATE_PATHS = 500;
19
+ /** A signed, known-type, version-1 event whose `data` does not match its contract. */
4
20
  export class EventPayloadError extends Error {
5
21
  constructor(message) {
6
22
  super(message);
@@ -15,6 +31,7 @@ function isRecord(value) {
15
31
  function isNonEmptyString(value) {
16
32
  return typeof value === 'string' && value.length > 0;
17
33
  }
34
+ /** Field readers that fail with the event type and the exact field in the message. */
18
35
  function reader(type) {
19
36
  const fail = (label, expected) => {
20
37
  throw new EventPayloadError(`${type}@1: ${label} must be ${expected}`);
@@ -53,6 +70,13 @@ function reader(type) {
53
70
  },
54
71
  };
55
72
  }
73
+ /**
74
+ * content.published | updated | unpublished — every entry's path and
75
+ * previous_path in that entry's own language, plus the default-language entry
76
+ * in every locale the payload does not list (those locales serve the default
77
+ * path). `status`, `is_published` and `changed` are deliberately not read: a
78
+ * body edit (every previous_path null) must still revalidate the page.
79
+ */
56
80
  const content = (data, r) => {
57
81
  if (r.boolean(data, 'paths_truncated'))
58
82
  return ALL;
@@ -66,6 +90,8 @@ const content = (data, r) => {
66
90
  return { language: r.string(entry, 'language_code', `data.paths[${i}].language_code`), urls };
67
91
  });
68
92
  const fallback = entries.find((entry) => entry.language === defaultLanguage);
93
+ // Off-contract (the default entry is mandatory): nothing says which URL the
94
+ // unlisted locales serve, so only a whole-site revalidation is never stale.
69
95
  if (!fallback)
70
96
  return ALL;
71
97
  const listed = new Set(entries.map((entry) => entry.language));
@@ -79,6 +105,11 @@ const content = (data, r) => {
79
105
  ],
80
106
  };
81
107
  };
108
+ /**
109
+ * content.collection.* — the index page in every locale. A moved base path
110
+ * moves every item path beneath it with no per-item event, so it is the whole
111
+ * site.
112
+ */
82
113
  const contentCollection = (data, r) => {
83
114
  const basePath = r.nullableString(data, 'base_path');
84
115
  if (r.nullableString(data, 'previous_base_path') !== null)
@@ -87,6 +118,7 @@ const contentCollection = (data, r) => {
87
118
  return NOTHING;
88
119
  return { kind: 'paths', expand: (locales) => locales.map((locale) => [basePath, locale]) };
89
120
  };
121
+ /** A membership change re-lists a category page whose own path did not move. */
90
122
  const membership = (data, r) => {
91
123
  const id = r.nullableString(data, 'collection_id');
92
124
  return id === null ? ALL : { kind: 'tags', tags: [collectionCacheTag(id)] };
@@ -96,6 +128,11 @@ const product = (data, r) => {
96
128
  return id === null ? ALL : { kind: 'tags', tags: [productCacheTag(id)] };
97
129
  };
98
130
  const URL_LOCALE_STRATEGIES = ['path-prefix', 'subdomain', 'none'];
131
+ /**
132
+ * channel.url_settings_changed — the rule every URL is built with moved, so the
133
+ * whole site. The payload is read in full because the handler adopts it as the
134
+ * new URL context.
135
+ */
99
136
  const channelSettings = (data, r) => {
100
137
  const overrides = r.array(data, 'commerce_path_prefix_overrides').map((raw, i) => {
101
138
  const label = `data.commerce_path_prefix_overrides[${i}]`;
@@ -121,6 +158,10 @@ const channelSettings = (data, r) => {
121
158
  },
122
159
  };
123
160
  };
161
+ /**
162
+ * seo.paths_changed — each entry in its OWN language only: the diff is keyed
163
+ * by (entity, language, path), so an entry names exactly one URL.
164
+ */
124
165
  const seoPaths = (data, r) => {
125
166
  if (r.boolean(data, 'added_truncated') || r.boolean(data, 'removed_truncated'))
126
167
  return ALL;
@@ -134,6 +175,7 @@ const seoPaths = (data, r) => {
134
175
  return { kind: 'paths', expand: () => pairs };
135
176
  };
136
177
  const whole = () => ALL;
178
+ /** Exhaustive over the vendored payload map: a type added there without a rule fails typecheck. */
137
179
  const CLASSIFIERS = {
138
180
  'content.published': content,
139
181
  'content.updated': content,
@@ -141,7 +183,11 @@ const CLASSIFIERS = {
141
183
  'content.collection.created': contentCollection,
142
184
  'content.collection.updated': contentCollection,
143
185
  'content.collection.removed': contentCollection,
186
+ // Shared furniture (menus, strings, forms, assets) renders on pages the
187
+ // platform cannot enumerate.
144
188
  'content.site_content_changed': whole,
189
+ // No path in the payload, and the category tree renders in navigation on
190
+ // every page. `changed: null` (a move) is never treated as quieter.
145
191
  'collection.created': whole,
146
192
  'collection.updated': whole,
147
193
  'collection.deleted': whole,
@@ -153,6 +199,11 @@ const CLASSIFIERS = {
153
199
  'product.deleted': product,
154
200
  'product_variant.price_changed': product,
155
201
  };
202
+ /**
203
+ * Classify an envelope. Unknown types and unsupported versions are skips, not
204
+ * errors — a subscriber on an older SDK must keep accepting newer events.
205
+ * Throws {@link EventPayloadError} for a known v1 type whose `data` is off-contract.
206
+ */
156
207
  export function classifyEvent(envelope) {
157
208
  const classify = Object.hasOwn(CLASSIFIERS, envelope.type)
158
209
  ? CLASSIFIERS[envelope.type]
@@ -186,6 +237,7 @@ function assertUrlContext(urls) {
186
237
  }
187
238
  return urls;
188
239
  }
240
+ /** Turn an intent into a plan, composing URLs only when the intent has paths. */
189
241
  export function planFromIntent(intent, urls, options) {
190
242
  switch (intent.kind) {
191
243
  case 'skip':
@@ -217,6 +269,15 @@ export function planFromIntent(intent, urls, options) {
217
269
  }
218
270
  }
219
271
  }
272
+ /**
273
+ * The revalidation a platform event calls for — the mapping
274
+ * `createEventRevalidateHandler` applies, for consumers of the pull feed or of
275
+ * their own webhook plumbing.
276
+ *
277
+ * Throws {@link EventPayloadError} when a known version-1 event's `data` does
278
+ * not match its contract, and `TypeError` when `urls` is unusable for an event
279
+ * that carries paths.
280
+ */
220
281
  export function planRevalidation(envelope, urls, options) {
221
282
  return planFromIntent(classifyEvent(envelope), urls, options);
222
283
  }
@@ -1 +1 @@
1
- {"version":3,"file":"event-plan.js","sourceRoot":"","sources":["../../src/revalidation/event-plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-plan.js","sourceRoot":"","sources":["../../src/revalidation/event-plan.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Verify one pushed platform-event delivery: signature, JSON, replay window,
3
+ * envelope shape — in that order, each with the status a dispatcher acts on.
4
+ */
1
5
  import type { PlatformEventEnvelope } from '../events/envelope.js';
2
6
  export declare const DEFAULT_EVENT_TOLERANCE_SECONDS = 300;
3
7
  export type EventDeliveryVerification = {
@@ -9,8 +13,29 @@ export type EventDeliveryVerification = {
9
13
  readonly reason: string;
10
14
  };
11
15
  export interface VerifyEventDeliveryOptions {
16
+ /** Maximum |now − delivered_at|, in seconds. Default 300. */
12
17
  toleranceSeconds?: number;
18
+ /** The instant to measure against. Default: the current time. */
13
19
  now?: Date;
14
20
  }
21
+ /**
22
+ * Verify a delivery the platform POSTed to a webhook subscription.
23
+ *
24
+ * `rawBody` must be the request body exactly as received — the signature is
25
+ * over those bytes, so parse-and-restringify fails every valid delivery.
26
+ *
27
+ * The replay window is measured against `delivered_at`, which the dispatcher
28
+ * restamps INSIDE the signed body on every attempt, and never against
29
+ * `occurred_at`: that one is immutable, so a retry an hour into the backoff
30
+ * ladder would be rejected. A body without a usable `delivered_at` is refused —
31
+ * falling back to `occurred_at` would reintroduce exactly that rejection.
32
+ *
33
+ * Statuses: 401 for a bad signature or a stale/missing `delivered_at`; 400 for
34
+ * a body that is signed but is not an envelope. The event `type` is read from
35
+ * the signed body only — the `x-webhook-event` header is not signed.
36
+ *
37
+ * Rejects (TypeError) when `toleranceSeconds` is not a positive finite number
38
+ * or `now` is not a valid Date — a configuration error, not a delivery outcome.
39
+ */
15
40
  export declare function verifyEventDelivery(rawBody: string, headers: Pick<Headers, 'get'>, secret: string, options?: VerifyEventDeliveryOptions): Promise<EventDeliveryVerification>;
16
41
  //# sourceMappingURL=event-verify.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-verify.d.ts","sourceRoot":"","sources":["../../src/revalidation/event-verify.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGnE,eAAO,MAAM,+BAA+B,MAAM,CAAC;AAEnD,MAAM,MAAM,yBAAyB,GACjC;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,MAAM,WAAW,0BAA0B;IAEzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAsDD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAC7B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,yBAAyB,CAAC,CA0CpC"}
1
+ {"version":3,"file":"event-verify.d.ts","sourceRoot":"","sources":["../../src/revalidation/event-verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGnE,eAAO,MAAM,+BAA+B,MAAM,CAAC;AAEnD,MAAM,MAAM,yBAAyB,GACjC;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,MAAM,WAAW,0BAA0B;IACzC,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAmCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAC7B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,yBAAyB,CAAC,CA0CpC"}
@@ -1,5 +1,11 @@
1
+ /**
2
+ * Verify one pushed platform-event delivery: signature, JSON, replay window,
3
+ * envelope shape — in that order, each with the status a dispatcher acts on.
4
+ */
1
5
  import { verifyWebhookSignature } from './verify.js';
2
6
  export const DEFAULT_EVENT_TOLERANCE_SECONDS = 300;
7
+ // Offset is mandatory: an offset-less string parses as HOST-local time, which
8
+ // shifts the replay window by the server's UTC offset.
3
9
  const ISO_INSTANT = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,9})?(Z|[+-]\d{2}:\d{2})$/;
4
10
  function isRecord(value) {
5
11
  return typeof value === 'object' && value !== null && !Array.isArray(value);
@@ -33,7 +39,28 @@ function envelopeShapeError(body) {
33
39
  return 'data must be a JSON object';
34
40
  return null;
35
41
  }
42
+ /**
43
+ * Verify a delivery the platform POSTed to a webhook subscription.
44
+ *
45
+ * `rawBody` must be the request body exactly as received — the signature is
46
+ * over those bytes, so parse-and-restringify fails every valid delivery.
47
+ *
48
+ * The replay window is measured against `delivered_at`, which the dispatcher
49
+ * restamps INSIDE the signed body on every attempt, and never against
50
+ * `occurred_at`: that one is immutable, so a retry an hour into the backoff
51
+ * ladder would be rejected. A body without a usable `delivered_at` is refused —
52
+ * falling back to `occurred_at` would reintroduce exactly that rejection.
53
+ *
54
+ * Statuses: 401 for a bad signature or a stale/missing `delivered_at`; 400 for
55
+ * a body that is signed but is not an envelope. The event `type` is read from
56
+ * the signed body only — the `x-webhook-event` header is not signed.
57
+ *
58
+ * Rejects (TypeError) when `toleranceSeconds` is not a positive finite number
59
+ * or `now` is not a valid Date — a configuration error, not a delivery outcome.
60
+ */
36
61
  export async function verifyEventDelivery(rawBody, headers, secret, options) {
62
+ // A NaN tolerance or an Invalid Date makes the window comparison false for
63
+ // every delivery — a correctly signed body would then replay forever.
37
64
  const toleranceSeconds = options?.toleranceSeconds ?? DEFAULT_EVENT_TOLERANCE_SECONDS;
38
65
  if (!Number.isFinite(toleranceSeconds) || toleranceSeconds <= 0) {
39
66
  throw new TypeError(`toleranceSeconds must be a positive number, got ${toleranceSeconds}`);
@@ -1 +1 @@
1
- {"version":3,"file":"event-verify.js","sourceRoot":"","sources":["../../src/revalidation/event-verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-verify.js","sourceRoot":"","sources":["../../src/revalidation/event-verify.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,34 @@
1
+ /**
2
+ * Wire contract for the legacy platform → storefront revalidation webhook
3
+ * (snake_case, matching the platform's merchant-webhook convention). The
4
+ * platform no longer sends it: its sender is retired, and storefronts receive
5
+ * platform events through `createEventRevalidateHandler`. The raw body is
6
+ * HMAC-SHA256-signed with the per-channel revalidation secret:
7
+ * `X-Webhook-Signature: sha256=<hex>` + `X-Webhook-Event: <event>`.
8
+ * Replay protection lives INSIDE the signed body: `occurred_at` (reject
9
+ * outside the tolerance window) and `id` (delivery UUID — idempotency key).
10
+ */
11
+ /**
12
+ * @deprecated The legacy SEO revalidation webhook body. Platform event
13
+ * deliveries use `PlatformEventEnvelope` (`@sixtyninecommerce/client/events`).
14
+ */
1
15
  export interface RevalidateWebhookPayload {
16
+ /** Delivery UUID — dedupe on this if you process deliveries statefully. */
2
17
  id: string;
18
+ /** e.g. 'seo.paths_changed.event' */
3
19
  event: string;
4
20
  channel_code: string;
21
+ /** ISO-8601 dispatch time — inside the signed body for replay checks. */
5
22
  occurred_at: string;
6
23
  entity: {
7
24
  type: string;
8
25
  id: string | null;
9
26
  };
27
+ /** Locale-expanded storefront-relative paths (e.g. "/nl/schoenen/rood"). */
10
28
  paths: string[];
29
+ /** revalidateTag targets (e.g. "seo-artifact" for the artifact proxies). */
11
30
  tags: string[];
31
+ /** 'all' → revalidate the whole layout instead of per-path. */
12
32
  scope: 'paths' | 'all';
13
33
  }
14
34
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/revalidation/types.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,wBAAwB;IAEvC,EAAE,EAAE,MAAM,CAAC;IAEX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAE5C,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/revalidation/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,2EAA2E;IAC3E,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC5C,4EAA4E;IAC5E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,+DAA+D;IAC/D,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC;CACxB"}
@@ -1,2 +1,12 @@
1
+ /**
2
+ * Wire contract for the legacy platform → storefront revalidation webhook
3
+ * (snake_case, matching the platform's merchant-webhook convention). The
4
+ * platform no longer sends it: its sender is retired, and storefronts receive
5
+ * platform events through `createEventRevalidateHandler`. The raw body is
6
+ * HMAC-SHA256-signed with the per-channel revalidation secret:
7
+ * `X-Webhook-Signature: sha256=<hex>` + `X-Webhook-Event: <event>`.
8
+ * Replay protection lives INSIDE the signed body: `occurred_at` (reject
9
+ * outside the tolerance window) and `id` (delivery UUID — idempotency key).
10
+ */
1
11
  export {};
2
12
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/revalidation/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/revalidation/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -1,17 +1,42 @@
1
+ /**
2
+ * What a revalidator needs to turn a channel-relative, locale-unprefixed event
3
+ * path into the storefront's own URL: the channel's URL rule set, and every
4
+ * language the storefront serves.
5
+ */
1
6
  import type { ChannelUrlSettingsChangedV1 } from '../events/payloads.js';
2
7
  import { type UrlStrategyConfig } from '../seo/url-builder.js';
3
8
  import type { StorefrontClient } from '../types.js';
4
9
  export interface UrlContext {
10
+ /** How the channel composes URLs — the same config the SEO module builds canonicals from. */
5
11
  readonly config: UrlStrategyConfig;
12
+ /**
13
+ * Every language the storefront serves. A path an event states for "every
14
+ * locale" is expanded over this list; the default language is always added.
15
+ */
6
16
  readonly locales: readonly string[];
7
17
  }
18
+ /** A lazily-read {@link UrlContext}, optionally able to drop a cached value. */
8
19
  export interface UrlContextSource {
9
20
  (): UrlContext | Promise<UrlContext>;
21
+ /** Called after `channel.url_settings_changed`, so the next read is fresh. */
10
22
  invalidate?(): void;
11
23
  }
24
+ /**
25
+ * A {@link UrlContextSource} backed by the client's `activeChannel` query —
26
+ * fresh custom fields AND `availableLanguageCodes`, which the client's startup
27
+ * channel snapshot does not carry. Read on first use and cached; a failed read
28
+ * is not cached, so the next delivery retries it. Accepts a client promise so a
29
+ * route module needs no top-level `await`.
30
+ */
12
31
  export declare function urlContextFromClient(client: Pick<StorefrontClient, 'commerce'> | Promise<Pick<StorefrontClient, 'commerce'>>): UrlContextSource & {
13
32
  invalidate(): void;
14
33
  };
34
+ /** The URL-shaping half of a `channel.url_settings_changed` payload. */
15
35
  export type ChannelUrlRuleSet = Omit<ChannelUrlSettingsChangedV1, 'channel_id' | 'changed'>;
36
+ /**
37
+ * The {@link UrlContext} a `channel.url_settings_changed` payload states — the
38
+ * channel's complete rule set AFTER the change — or `null` when it cannot be
39
+ * used as one: no storefront origin, or a truncated language/prefix list.
40
+ */
16
41
  export declare function urlContextFromChannelSettings(settings: ChannelUrlRuleSet): UrlContext | null;
17
42
  //# sourceMappingURL=url-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-context.d.ts","sourceRoot":"","sources":["../../src/revalidation/url-context.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,KAAK,iBAAiB,EAA0B,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,UAAU;IAEzB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAKnC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAGD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAErC,UAAU,CAAC,IAAI,IAAI,CAAC;CACrB;AASD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,GACvF,gBAAgB,GAAG;IAAE,UAAU,IAAI,IAAI,CAAA;CAAE,CAwB3C;AAGD,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,EAAE,YAAY,GAAG,SAAS,CAAC,CAAC;AAO5F,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,UAAU,GAAG,IAAI,CAwB5F"}
1
+ {"version":3,"file":"url-context.d.ts","sourceRoot":"","sources":["../../src/revalidation/url-context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,KAAK,iBAAiB,EAA0B,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,gFAAgF;AAChF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,8EAA8E;IAC9E,UAAU,CAAC,IAAI,IAAI,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,GACvF,gBAAgB,GAAG;IAAE,UAAU,IAAI,IAAI,CAAA;CAAE,CAwB3C;AAED,wEAAwE;AACxE,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,EAAE,YAAY,GAAG,SAAS,CAAC,CAAC;AAE5F;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,UAAU,GAAG,IAAI,CAwB5F"}
@@ -1,4 +1,16 @@
1
+ /**
2
+ * What a revalidator needs to turn a channel-relative, locale-unprefixed event
3
+ * path into the storefront's own URL: the channel's URL rule set, and every
4
+ * language the storefront serves.
5
+ */
1
6
  import { urlStrategyFromChannel } from '../seo/url-builder.js';
7
+ /**
8
+ * A {@link UrlContextSource} backed by the client's `activeChannel` query —
9
+ * fresh custom fields AND `availableLanguageCodes`, which the client's startup
10
+ * channel snapshot does not carry. Read on first use and cached; a failed read
11
+ * is not cached, so the next delivery retries it. Accepts a client promise so a
12
+ * route module needs no top-level `await`.
13
+ */
2
14
  export function urlContextFromClient(client) {
3
15
  let cached = null;
4
16
  const source = () => {
@@ -24,6 +36,11 @@ export function urlContextFromClient(client) {
24
36
  },
25
37
  });
26
38
  }
39
+ /**
40
+ * The {@link UrlContext} a `channel.url_settings_changed` payload states — the
41
+ * channel's complete rule set AFTER the change — or `null` when it cannot be
42
+ * used as one: no storefront origin, or a truncated language/prefix list.
43
+ */
27
44
  export function urlContextFromChannelSettings(settings) {
28
45
  if (settings.storefront_url === null ||
29
46
  settings.available_language_codes_truncated ||
@@ -1 +1 @@
1
- {"version":3,"file":"url-context.js","sourceRoot":"","sources":["../../src/revalidation/url-context.ts"],"names":[],"mappings":"AAOA,OAAO,EAA0B,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AA2BvF,MAAM,UAAU,oBAAoB,CAClC,MAAwF;IAExF,IAAI,MAAM,GAA+B,IAAI,CAAC;IAE9C,MAAM,MAAM,GAAG,GAAwB,EAAE;QACvC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC3D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC3D,OAAO;gBACL,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,mBAAmB,CAAC;gBACjF,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC;aAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,IAAI,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACd,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,GAAG,IAAI,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3B,UAAU;YACR,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAUD,MAAM,UAAU,6BAA6B,CAAC,QAA2B;IACvE,IACE,QAAQ,CAAC,cAAc,KAAK,IAAI;QAChC,QAAQ,CAAC,kCAAkC;QAC3C,QAAQ,CAAC,wCAAwC,EACjD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,QAAQ,CAAC,8BAA8B,CAAC;IAC1D,OAAO;QACL,MAAM,EAAE;YACN,aAAa,EAAE,QAAQ,CAAC,cAAc;YACtC,iBAAiB,EAAE,QAAQ,CAAC,mBAAmB;YAC/C,sBAAsB,EAAE,QAAQ,CAAC,yBAAyB;YAC1D,mBAAmB,EAAE,QAAQ,CAAC,qBAAqB;YACnD,kBAAkB,EAAE,QAAQ,CAAC,oBAAoB;YACjD,kBAAkB,EAAE,QAAQ,CAAC,oBAAoB;YACjD,8BAA8B,EAC5B,SAAS,CAAC,MAAM,GAAG,CAAC;gBAClB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC5E,CAAC,CAAC,IAAI;SACX;QACD,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,wBAAwB,CAAC;KAChD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"url-context.js","sourceRoot":"","sources":["../../src/revalidation/url-context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAA0B,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAoBvF;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAwF;IAExF,IAAI,MAAM,GAA+B,IAAI,CAAC;IAE9C,MAAM,MAAM,GAAG,GAAwB,EAAE;QACvC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC3D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC3D,OAAO;gBACL,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,mBAAmB,CAAC;gBACjF,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC;aAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,IAAI,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACd,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,GAAG,IAAI,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3B,UAAU;YACR,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAKD;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,QAA2B;IACvE,IACE,QAAQ,CAAC,cAAc,KAAK,IAAI;QAChC,QAAQ,CAAC,kCAAkC;QAC3C,QAAQ,CAAC,wCAAwC,EACjD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,QAAQ,CAAC,8BAA8B,CAAC;IAC1D,OAAO;QACL,MAAM,EAAE;YACN,aAAa,EAAE,QAAQ,CAAC,cAAc;YACtC,iBAAiB,EAAE,QAAQ,CAAC,mBAAmB;YAC/C,sBAAsB,EAAE,QAAQ,CAAC,yBAAyB;YAC1D,mBAAmB,EAAE,QAAQ,CAAC,qBAAqB;YACnD,kBAAkB,EAAE,QAAQ,CAAC,oBAAoB;YACjD,kBAAkB,EAAE,QAAQ,CAAC,oBAAoB;YACjD,8BAA8B,EAC5B,SAAS,CAAC,MAAM,GAAG,CAAC;gBAClB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC5E,CAAC,CAAC,IAAI;SACX;QACD,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,wBAAwB,CAAC;KAChD,CAAC;AACJ,CAAC"}
@@ -1,2 +1,10 @@
1
+ /**
2
+ * HMAC verification for platform webhooks, on Web Crypto so it runs in Node
3
+ * 18+, edge runtimes, and workers alike (hence async).
4
+ */
5
+ /**
6
+ * Verify an `X-Webhook-Signature: sha256=<hex>` header against the RAW
7
+ * request body. Constant-time via `crypto.subtle.verify`.
8
+ */
1
9
  export declare function verifyWebhookSignature(rawBody: string, signatureHeader: string | null | undefined, secret: string): Promise<boolean>;
2
10
  //# sourceMappingURL=verify.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/revalidation/verify.ts"],"names":[],"mappings":"AAkBA,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC1C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAgBlB"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/revalidation/verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC1C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAgBlB"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * HMAC verification for platform webhooks, on Web Crypto so it runs in Node
3
+ * 18+, edge runtimes, and workers alike (hence async).
4
+ */
1
5
  function hexToBytes(hex) {
2
6
  if (hex.length % 2 !== 0 || /[^0-9a-f]/i.test(hex))
3
7
  return null;
@@ -7,6 +11,10 @@ function hexToBytes(hex) {
7
11
  }
8
12
  return bytes;
9
13
  }
14
+ /**
15
+ * Verify an `X-Webhook-Signature: sha256=<hex>` header against the RAW
16
+ * request body. Constant-time via `crypto.subtle.verify`.
17
+ */
10
18
  export async function verifyWebhookSignature(rawBody, signatureHeader, secret) {
11
19
  if (!signatureHeader || !secret)
12
20
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/revalidation/verify.ts"],"names":[],"mappings":"AAKA,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAe,EACf,eAA0C,EAC1C,MAAc;IAEd,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE9C,MAAM,GAAG,GAAG,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;IAC/F,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAExD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACvC,KAAK,EACL,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EACtB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,QAAQ,CAAC,CACX,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/E,CAAC"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/revalidation/verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAe,EACf,eAA0C,EAC1C,MAAc;IAEd,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE9C,MAAM,GAAG,GAAG,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;IAC/F,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAExD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACvC,KAAK,EACL,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EACtB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,QAAQ,CAAC,CACX,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/E,CAAC"}
package/dist/seo/ai.d.ts CHANGED
@@ -1,3 +1,7 @@
1
+ /**
2
+ * AI / LLM-facing helpers: per-entity `<meta name="ai-summary">` content and
3
+ * `llms.txt` bullet rendering.
4
+ */
1
5
  import type { CmsItemMetadata, CollectionMetadata, ProductMetadata } from './metadata-types.js';
2
6
  import type { CmsItemForSeo, CollectionForSeo, ProductForSeo } from './types.js';
3
7
  export type AiSummaryInput = {
@@ -10,6 +14,11 @@ export type AiSummaryInput = {
10
14
  kind: 'cms';
11
15
  metadata: CmsItemMetadata | null;
12
16
  };
17
+ /**
18
+ * Returns the AI summary text or `null` when none is configured. Storefronts
19
+ * use this to render the `<meta name="ai-summary">` head tag and the embedded
20
+ * `<section data-ai-summary>` element.
21
+ */
13
22
  export declare function aiSummaryFor(input: AiSummaryInput): string | null;
14
23
  export type LlmsTxtEntryInput = ({
15
24
  kind: 'product';
@@ -24,9 +33,17 @@ export type LlmsTxtEntryInput = ({
24
33
  cms: CmsItemForSeo;
25
34
  metadata: CmsItemMetadata | null;
26
35
  }) & {
36
+ /** Resolved canonical URL of the page. The `.md` suffix is appended. */
27
37
  url: string;
38
+ /** Display name used as the bullet label. */
28
39
  name: string;
40
+ /** Optional fallback HTML description (stripped + truncated when no AI summary). */
29
41
  description?: string;
30
42
  };
43
+ /**
44
+ * Render one markdown bullet line for the channel's `/llms.txt` file.
45
+ * Format: `- [name](url.md): summary`. The storefront aggregates these
46
+ * across entities; the SDK only renders one row at a time.
47
+ */
31
48
  export declare function llmsTxtEntryFor(input: LlmsTxtEntryInput): string;
32
49
  //# sourceMappingURL=ai.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/seo/ai.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAcjF,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,CAAC;AAmBtD,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC5B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,GAC7E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAAE,GACzF;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,CACxE,GAAG;IAEF,GAAG,EAAE,MAAM,CAAC;IAEZ,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAOF,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAShE"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/seo/ai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAcjF,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,CAAC;AActD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC5B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,GAC7E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAAE,GACzF;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,CACxE,GAAG;IACF,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAShE"}
package/dist/seo/ai.js CHANGED
@@ -15,13 +15,24 @@ function summaryOf(input) {
15
15
  case 'cms':
16
16
  return input.metadata?.aiSummary ?? null;
17
17
  case 'collection':
18
+ // Collections carry no dedicated AI summary; fall back to SEO description.
18
19
  return input.metadata?.seoDescription ?? null;
19
20
  }
20
21
  }
22
+ /**
23
+ * Returns the AI summary text or `null` when none is configured. Storefronts
24
+ * use this to render the `<meta name="ai-summary">` head tag and the embedded
25
+ * `<section data-ai-summary>` element.
26
+ */
21
27
  export function aiSummaryFor(input) {
22
28
  const value = summaryOf(input)?.trim();
23
29
  return value && value.length > 0 ? value : null;
24
30
  }
31
+ /**
32
+ * Render one markdown bullet line for the channel's `/llms.txt` file.
33
+ * Format: `- [name](url.md): summary`. The storefront aggregates these
34
+ * across entities; the SDK only renders one row at a time.
35
+ */
25
36
  export function llmsTxtEntryFor(input) {
26
37
  const summary = aiSummaryFor(input)?.trim() ??
27
38
  input.metadata?.seoDescription?.trim() ??
@@ -32,6 +43,7 @@ export function llmsTxtEntryFor(input) {
32
43
  : `- [${input.name}](${urlWithSuffix})`;
33
44
  }
34
45
  function appendMdSuffix(url) {
46
+ // Preserve query/hash if present.
35
47
  const hashIdx = url.indexOf('#');
36
48
  const queryIdx = url.indexOf('?');
37
49
  const tailIdx = hashIdx === -1 ? queryIdx : queryIdx === -1 ? hashIdx : Math.min(hashIdx, queryIdx);
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/seo/ai.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,GAAW;IAC1C,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AACjD,CAAC;AAOD,SAAS,SAAS,CAAC,KAAqB;IACtC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,IAAI,IAAI,CAAC;QAC5C,KAAK,KAAK;YACR,OAAO,KAAK,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC;QAC3C,KAAK,YAAY;YAEf,OAAO,KAAK,CAAC,QAAQ,EAAE,cAAc,IAAI,IAAI,CAAC;IAClD,CAAC;AACH,CAAC;AAOD,MAAM,UAAU,YAAY,CAAC,KAAqB;IAChD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACvC,OAAO,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAoBD,MAAM,UAAU,eAAe,CAAC,KAAwB;IACtD,MAAM,OAAO,GACX,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE;QAC3B,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE;QACtC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,OAAO,OAAO;QACZ,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,aAAa,MAAM,OAAO,EAAE;QACnD,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,aAAa,GAAG,CAAC;AAC5C,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IAEjC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtF,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,GAAG,GAAG,KAAK,CAAC;IACvC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/seo/ai.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,GAAW;IAC1C,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AACjD,CAAC;AAOD,SAAS,SAAS,CAAC,KAAqB;IACtC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,IAAI,IAAI,CAAC;QAC5C,KAAK,KAAK;YACR,OAAO,KAAK,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC;QAC3C,KAAK,YAAY;YACf,2EAA2E;YAC3E,OAAO,KAAK,CAAC,QAAQ,EAAE,cAAc,IAAI,IAAI,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAqB;IAChD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACvC,OAAO,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAeD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAwB;IACtD,MAAM,OAAO,GACX,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE;QAC3B,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE;QACtC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,OAAO,OAAO;QACZ,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,aAAa,MAAM,OAAO,EAAE;QACnD,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,aAAa,GAAG,CAAC;AAC5C,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,kCAAkC;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtF,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,GAAG,GAAG,KAAK,CAAC;IACvC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AAC5D,CAAC"}
@@ -1,9 +1,17 @@
1
1
  import { canonicalFor } from './canonical.js';
2
2
  import { toBcp47 } from './locale-tag.js';
3
+ /**
4
+ * Languages an entity actually has a translation for. Google prefers hreflang
5
+ * pairs that resolve, so we only emit one row per existing translation.
6
+ */
3
7
  function translatedLanguagesFor(entity) {
4
8
  switch (entity.kind) {
5
9
  case 'product': {
6
10
  const fromProduct = (entity.translations ?? []).map((t) => t.languageCode);
11
+ // Root canonical slugs come from collections — if the canonical root
12
+ // has a translation in a language the product doesn't, we still can't
13
+ // reliably build that variant. Stick with product translations as the
14
+ // source of truth for what languages to emit.
7
15
  return fromProduct;
8
16
  }
9
17
  case 'collection':
@@ -14,9 +22,14 @@ function translatedLanguagesFor(entity) {
14
22
  }
15
23
  export function alternatesFor(cfg, entity) {
16
24
  const languages = Array.from(new Set(translatedLanguagesFor(entity)));
25
+ // Always include the default language — if the entity has no translations
26
+ // at all we still want `x-default` to point somewhere sensible.
17
27
  if (!languages.includes(cfg.defaultLanguageCode)) {
18
28
  languages.unshift(cfg.defaultLanguageCode);
19
29
  }
30
+ // `hreflang` must be BCP 47 — a raw `en_GB` makes Google drop the tag. The
31
+ // untouched Vendure code rides along in `languageCode` for the consumers that
32
+ // need that spelling (OpenGraph, and matching per-entity overrides).
20
33
  const rows = languages.map((lang) => ({
21
34
  hreflang: toBcp47(lang),
22
35
  href: canonicalFor(cfg, entity, lang),