@sixtyninecommerce/client 0.23.1 → 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.
- package/README.md +25 -0
- package/dist/admin/forms.js +19 -0
- package/dist/admin/forms.js.map +1 -1
- package/dist/admin/http.d.ts +9 -0
- package/dist/admin/http.d.ts.map +1 -1
- package/dist/admin/http.js +3 -0
- package/dist/admin/http.js.map +1 -1
- package/dist/admin/index.d.ts +63 -0
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +67 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/redirects.d.ts +6 -0
- package/dist/admin/redirects.d.ts.map +1 -1
- package/dist/admin/redirects.js +12 -0
- package/dist/admin/redirects.js.map +1 -1
- package/dist/admin/types.d.ts +63 -0
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/cache-tags.d.ts +19 -0
- package/dist/cache-tags.d.ts.map +1 -1
- package/dist/cache-tags.js +19 -0
- package/dist/cache-tags.js.map +1 -1
- package/dist/client.d.ts +17 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +17 -0
- package/dist/client.js.map +1 -1
- package/dist/commerce/age-verification.js +3 -3
- package/dist/commerce/age-verification.js.map +1 -1
- package/dist/commerce/branding.js +7 -0
- package/dist/commerce/branding.js.map +1 -1
- package/dist/commerce/cart.js +25 -0
- package/dist/commerce/cart.js.map +1 -1
- package/dist/commerce/checkout.d.ts +68 -0
- package/dist/commerce/checkout.d.ts.map +1 -1
- package/dist/commerce/checkout.js +83 -0
- package/dist/commerce/checkout.js.map +1 -1
- package/dist/commerce/customer.d.ts +58 -0
- package/dist/commerce/customer.d.ts.map +1 -1
- package/dist/commerce/customer.js +65 -0
- package/dist/commerce/customer.js.map +1 -1
- package/dist/commerce/index.d.ts +17 -1
- package/dist/commerce/index.d.ts.map +1 -1
- package/dist/commerce/pickup-location-parser.d.ts +18 -0
- package/dist/commerce/pickup-location-parser.d.ts.map +1 -1
- package/dist/commerce/pickup-location-parser.js +28 -0
- package/dist/commerce/pickup-location-parser.js.map +1 -1
- package/dist/commerce/placement-error.d.ts +52 -0
- package/dist/commerce/placement-error.d.ts.map +1 -1
- package/dist/commerce/placement-error.js +87 -0
- package/dist/commerce/placement-error.js.map +1 -1
- package/dist/commerce/products.d.ts +48 -0
- package/dist/commerce/products.d.ts.map +1 -1
- package/dist/commerce/products.js +95 -2
- package/dist/commerce/products.js.map +1 -1
- package/dist/commerce/queries.d.ts +114 -27
- package/dist/commerce/queries.d.ts.map +1 -1
- package/dist/commerce/queries.js +219 -1
- package/dist/commerce/queries.js.map +1 -1
- package/dist/commerce/quotes.js +33 -0
- package/dist/commerce/quotes.js.map +1 -1
- package/dist/commerce/saved-lists.d.ts +7 -7
- package/dist/commerce/saved-lists.d.ts.map +1 -1
- package/dist/commerce/saved-lists.js +1 -1
- package/dist/commerce/search.js +3 -0
- package/dist/commerce/search.js.map +1 -1
- package/dist/commerce/shipping.js +3 -3
- package/dist/commerce/shipping.js.map +1 -1
- package/dist/commerce/stock-notifications.d.ts +11 -0
- package/dist/commerce/stock-notifications.d.ts.map +1 -1
- package/dist/commerce/stock-notifications.js +11 -0
- package/dist/commerce/stock-notifications.js.map +1 -1
- package/dist/commerce/subscriptions.d.ts +32 -8
- package/dist/commerce/subscriptions.d.ts.map +1 -1
- package/dist/commerce/subscriptions.js +90 -2
- package/dist/commerce/subscriptions.js.map +1 -1
- package/dist/commerce/vat-validation.js +4 -4
- package/dist/commerce/vat-validation.js.map +1 -1
- package/dist/constants.d.ts +31 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +32 -0
- package/dist/constants.js.map +1 -1
- package/dist/content/asset-urls.d.ts +50 -0
- package/dist/content/asset-urls.d.ts.map +1 -1
- package/dist/content/asset-urls.js +92 -0
- package/dist/content/asset-urls.js.map +1 -1
- package/dist/content/assets.d.ts +15 -0
- package/dist/content/assets.d.ts.map +1 -1
- package/dist/content/assets.js +15 -0
- package/dist/content/assets.js.map +1 -1
- package/dist/content/collection-pages.d.ts +5 -0
- package/dist/content/collection-pages.d.ts.map +1 -1
- package/dist/content/collection-pages.js +8 -0
- package/dist/content/collection-pages.js.map +1 -1
- package/dist/content/collections.d.ts +14 -0
- package/dist/content/collections.d.ts.map +1 -1
- package/dist/content/collections.js +16 -0
- package/dist/content/collections.js.map +1 -1
- package/dist/content/filtered-products.d.ts +18 -0
- package/dist/content/filtered-products.d.ts.map +1 -1
- package/dist/content/filtered-products.js +16 -0
- package/dist/content/filtered-products.js.map +1 -1
- package/dist/content/form-field-types.d.ts +6 -0
- package/dist/content/form-field-types.d.ts.map +1 -1
- package/dist/content/form-field-types.js +12 -0
- package/dist/content/form-field-types.js.map +1 -1
- package/dist/content/forms.d.ts +16 -0
- package/dist/content/forms.d.ts.map +1 -1
- package/dist/content/forms.js +23 -0
- package/dist/content/forms.js.map +1 -1
- package/dist/content/items.d.ts +26 -0
- package/dist/content/items.d.ts.map +1 -1
- package/dist/content/items.js +33 -0
- package/dist/content/items.js.map +1 -1
- package/dist/content/resolve.js +6 -0
- package/dist/content/resolve.js.map +1 -1
- package/dist/content/sitemap.d.ts +5 -0
- package/dist/content/sitemap.d.ts.map +1 -1
- package/dist/content/sitemap.js +5 -0
- package/dist/content/sitemap.js.map +1 -1
- package/dist/core/context.js +6 -0
- package/dist/core/context.js.map +1 -1
- package/dist/core/headers.js +2 -0
- package/dist/core/headers.js.map +1 -1
- package/dist/core/http.d.ts +8 -0
- package/dist/core/http.d.ts.map +1 -1
- package/dist/core/http.js +89 -1
- package/dist/core/http.js.map +1 -1
- package/dist/credit/credit-status.js +2 -2
- package/dist/credit/credit-status.js.map +1 -1
- package/dist/credit/payment-terms.js +2 -2
- package/dist/credit/payment-terms.js.map +1 -1
- package/dist/currency/exchange.d.ts +11 -0
- package/dist/currency/exchange.d.ts.map +1 -1
- package/dist/currency/exchange.js +11 -0
- package/dist/currency/exchange.js.map +1 -1
- package/dist/errors.d.ts +50 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +50 -3
- package/dist/errors.js.map +1 -1
- package/dist/events/envelope.d.ts +36 -0
- package/dist/events/envelope.d.ts.map +1 -1
- package/dist/events/envelope.js +12 -0
- package/dist/events/envelope.js.map +1 -1
- package/dist/events/index.d.ts +13 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +13 -0
- package/dist/events/index.js.map +1 -1
- package/dist/events/payloads.d.ts +19 -0
- package/dist/events/payloads.d.ts.map +1 -1
- package/dist/events/payloads.js +12 -0
- package/dist/events/payloads.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/media/index.js +2 -0
- package/dist/media/index.js.map +1 -1
- package/dist/media/urls.d.ts +52 -0
- package/dist/media/urls.d.ts.map +1 -1
- package/dist/media/urls.js +38 -0
- package/dist/media/urls.js.map +1 -1
- package/dist/media/video.d.ts +16 -0
- package/dist/media/video.d.ts.map +1 -1
- package/dist/media/video.js +16 -0
- package/dist/media/video.js.map +1 -1
- package/dist/next/artifact-handler.d.ts +22 -0
- package/dist/next/artifact-handler.d.ts.map +1 -1
- package/dist/next/artifact-handler.js +22 -0
- package/dist/next/artifact-handler.js.map +1 -1
- package/dist/next/event-revalidate-handler.d.ts +67 -0
- package/dist/next/event-revalidate-handler.d.ts.map +1 -1
- package/dist/next/event-revalidate-handler.js +48 -0
- package/dist/next/event-revalidate-handler.js.map +1 -1
- package/dist/next/index.d.ts +6 -0
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +6 -0
- package/dist/next/index.js.map +1 -1
- package/dist/next/json-ld.d.ts +9 -0
- package/dist/next/json-ld.d.ts.map +1 -1
- package/dist/next/json-ld.js +9 -0
- package/dist/next/json-ld.js.map +1 -1
- package/dist/next/metadata.d.ts +18 -0
- package/dist/next/metadata.d.ts.map +1 -1
- package/dist/next/metadata.js +21 -0
- package/dist/next/metadata.js.map +1 -1
- package/dist/next/redirect-middleware.d.ts +39 -0
- package/dist/next/redirect-middleware.d.ts.map +1 -1
- package/dist/next/redirect-middleware.js +32 -0
- package/dist/next/redirect-middleware.js.map +1 -1
- package/dist/next/revalidate-handler.d.ts +30 -0
- package/dist/next/revalidate-handler.d.ts.map +1 -1
- package/dist/next/revalidate-handler.js +22 -0
- package/dist/next/revalidate-handler.js.map +1 -1
- package/dist/order-scope.d.ts +27 -0
- package/dist/order-scope.d.ts.map +1 -1
- package/dist/order-scope.js +29 -0
- package/dist/order-scope.js.map +1 -1
- package/dist/pricing/format.d.ts +17 -0
- package/dist/pricing/format.d.ts.map +1 -1
- package/dist/pricing/format.js +19 -0
- package/dist/pricing/format.js.map +1 -1
- package/dist/pricing/index.d.ts +8 -1
- package/dist/pricing/index.d.ts.map +1 -1
- package/dist/pricing/index.js +18 -2
- package/dist/pricing/index.js.map +1 -1
- package/dist/pricing/tax-display.d.ts +77 -0
- package/dist/pricing/tax-display.d.ts.map +1 -1
- package/dist/pricing/tax-display.js +85 -0
- package/dist/pricing/tax-display.js.map +1 -1
- package/dist/pricing/tiers.d.ts +9 -0
- package/dist/pricing/tiers.d.ts.map +1 -1
- package/dist/pricing/tiers.js +9 -0
- package/dist/pricing/tiers.js.map +1 -1
- package/dist/pricing/validation.d.ts +56 -1
- package/dist/pricing/validation.d.ts.map +1 -1
- package/dist/pricing/validation.js +61 -0
- package/dist/pricing/validation.js.map +1 -1
- package/dist/redirects/index.d.ts +1 -0
- package/dist/redirects/index.d.ts.map +1 -1
- package/dist/redirects/index.js +1 -0
- package/dist/redirects/index.js.map +1 -1
- package/dist/redirects/store.d.ts +20 -0
- package/dist/redirects/store.d.ts.map +1 -1
- package/dist/redirects/store.js +57 -0
- package/dist/redirects/store.js.map +1 -1
- package/dist/redirects/types.d.ts +24 -0
- package/dist/redirects/types.d.ts.map +1 -1
- package/dist/redirects/types.js +1 -0
- package/dist/redirects/types.js.map +1 -1
- package/dist/revalidation/event-plan.d.ts +48 -0
- package/dist/revalidation/event-plan.d.ts.map +1 -1
- package/dist/revalidation/event-plan.js +61 -0
- package/dist/revalidation/event-plan.js.map +1 -1
- package/dist/revalidation/event-verify.d.ts +25 -0
- package/dist/revalidation/event-verify.d.ts.map +1 -1
- package/dist/revalidation/event-verify.js +27 -0
- package/dist/revalidation/event-verify.js.map +1 -1
- package/dist/revalidation/types.d.ts +20 -0
- package/dist/revalidation/types.d.ts.map +1 -1
- package/dist/revalidation/types.js +10 -0
- package/dist/revalidation/types.js.map +1 -1
- package/dist/revalidation/url-context.d.ts +25 -0
- package/dist/revalidation/url-context.d.ts.map +1 -1
- package/dist/revalidation/url-context.js +17 -0
- package/dist/revalidation/url-context.js.map +1 -1
- package/dist/revalidation/verify.d.ts +8 -0
- package/dist/revalidation/verify.d.ts.map +1 -1
- package/dist/revalidation/verify.js +8 -0
- package/dist/revalidation/verify.js.map +1 -1
- package/dist/seo/ai.d.ts +17 -0
- package/dist/seo/ai.d.ts.map +1 -1
- package/dist/seo/ai.js +12 -0
- package/dist/seo/ai.js.map +1 -1
- package/dist/seo/alternates.js +13 -0
- package/dist/seo/alternates.js.map +1 -1
- package/dist/seo/artifacts.d.ts +13 -0
- package/dist/seo/artifacts.d.ts.map +1 -1
- package/dist/seo/artifacts.js +19 -0
- package/dist/seo/artifacts.js.map +1 -1
- package/dist/seo/canonical.d.ts +15 -0
- package/dist/seo/canonical.d.ts.map +1 -1
- package/dist/seo/canonical.js +24 -0
- package/dist/seo/canonical.js.map +1 -1
- package/dist/seo/index.js +6 -0
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/json-ld.d.ts +13 -0
- package/dist/seo/json-ld.d.ts.map +1 -1
- package/dist/seo/json-ld.js +32 -0
- package/dist/seo/json-ld.js.map +1 -1
- package/dist/seo/locale-tag.d.ts +31 -0
- package/dist/seo/locale-tag.d.ts.map +1 -1
- package/dist/seo/locale-tag.js +31 -0
- package/dist/seo/locale-tag.js.map +1 -1
- package/dist/seo/meta-tags.d.ts +29 -0
- package/dist/seo/meta-tags.d.ts.map +1 -1
- package/dist/seo/meta-tags.js +28 -0
- package/dist/seo/meta-tags.js.map +1 -1
- package/dist/seo/metadata-parser.d.ts +24 -0
- package/dist/seo/metadata-parser.d.ts.map +1 -1
- package/dist/seo/metadata-parser.js +38 -0
- package/dist/seo/metadata-parser.js.map +1 -1
- package/dist/seo/metadata-types.d.ts +16 -0
- package/dist/seo/metadata-types.d.ts.map +1 -1
- package/dist/seo/product-path.d.ts +96 -0
- package/dist/seo/product-path.d.ts.map +1 -1
- package/dist/seo/product-path.js +96 -0
- package/dist/seo/product-path.js.map +1 -1
- package/dist/seo/robots.d.ts +17 -0
- package/dist/seo/robots.d.ts.map +1 -1
- package/dist/seo/robots.js +12 -0
- package/dist/seo/robots.js.map +1 -1
- package/dist/seo/types.d.ts +39 -0
- package/dist/seo/types.d.ts.map +1 -1
- package/dist/seo/url-builder.d.ts +31 -0
- package/dist/seo/url-builder.d.ts.map +1 -1
- package/dist/seo/url-builder.js +36 -0
- package/dist/seo/url-builder.js.map +1 -1
- package/dist/types.d.ts +1283 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/redirects/store.js
CHANGED
|
@@ -1,25 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-process redirect map for a storefront.
|
|
3
|
+
*
|
|
4
|
+
* Fetches the platform's public per-channel snapshot once per TTL and matches
|
|
5
|
+
* pathnames against it in memory, so a middleware costs a Map lookup rather
|
|
6
|
+
* than a network hop. Revalidation is ETag-conditional: an unchanged map comes
|
|
7
|
+
* back as a 304 with no body.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately fail-open — a refresh failure keeps the last good map in service
|
|
10
|
+
* and reports through `onError` rather than throwing. A platform blip must not
|
|
11
|
+
* turn a tenant's working redirects into 404s.
|
|
12
|
+
*
|
|
13
|
+
* Only the FIRST load is awaited. Once a map exists, revalidation happens in the
|
|
14
|
+
* background and callers are served the current one: this runs in middleware
|
|
15
|
+
* ahead of every page render, so a slow platform must never become a slow store.
|
|
16
|
+
*/
|
|
1
17
|
import { DEFAULT_PLUGINS_URL } from '../constants.js';
|
|
2
18
|
import { REDIRECT_STATUS_CODES, } from './types.js';
|
|
3
19
|
const DEFAULT_TTL_MS = 60_000;
|
|
4
20
|
const DEFAULT_TIMEOUT_MS = 5_000;
|
|
21
|
+
/**
|
|
22
|
+
* How long a FAILED load is remembered before the next attempt. Deliberately
|
|
23
|
+
* well above `DEFAULT_TIMEOUT_MS`: if the two were equal, an outage would spend
|
|
24
|
+
* half of every cycle inside a fetch that callers are waiting on.
|
|
25
|
+
*/
|
|
5
26
|
const FAILURE_BACKOFF_MS = 30_000;
|
|
27
|
+
/** Base for lookup-path canonicalization only — never requested. */
|
|
6
28
|
const CANONICAL_BASE = 'https://redirect.invalid';
|
|
29
|
+
/**
|
|
30
|
+
* Match the platform's own source normalization: trailing slashes are stripped
|
|
31
|
+
* so `/a` and `/a/` are the same rule. The root path keeps its slash.
|
|
32
|
+
*/
|
|
7
33
|
export function normalizeLookupPath(pathname) {
|
|
8
34
|
const trimmed = pathname.trim();
|
|
9
35
|
if (trimmed === '' || trimmed === '/')
|
|
10
36
|
return '/';
|
|
11
37
|
const withLeadingSlash = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
|
|
38
|
+
// The platform stores the canonical percent-encoded form, which is also what
|
|
39
|
+
// a browser sends. Re-encoding here is idempotent and lets a caller pass the
|
|
40
|
+
// human-readable `/café` and still hit the `/caf%C3%A9` rule.
|
|
12
41
|
let canonical = withLeadingSlash;
|
|
13
42
|
try {
|
|
14
43
|
canonical = new URL(withLeadingSlash, CANONICAL_BASE).pathname;
|
|
15
44
|
}
|
|
16
45
|
catch {
|
|
46
|
+
// Not URL-shaped — fall through with the raw value rather than throwing
|
|
47
|
+
// out of a middleware's hot path.
|
|
17
48
|
}
|
|
18
49
|
return canonical.replace(/\/+$/, '') || '/';
|
|
19
50
|
}
|
|
20
51
|
function isRedirectStatusCode(value) {
|
|
21
52
|
return typeof value === 'number' && REDIRECT_STATUS_CODES.includes(value);
|
|
22
53
|
}
|
|
54
|
+
/** Parse the wire payload defensively — the platform is an external boundary. */
|
|
23
55
|
function parseSnapshot(raw) {
|
|
24
56
|
if (typeof raw !== 'object' || raw === null) {
|
|
25
57
|
throw new Error('Redirect snapshot is not an object');
|
|
@@ -63,6 +95,7 @@ export function createRedirectStore(config) {
|
|
|
63
95
|
let etag = null;
|
|
64
96
|
let freshUntil = 0;
|
|
65
97
|
let inFlight = null;
|
|
98
|
+
/** Set once a load has failed; cleared by the next success. */
|
|
66
99
|
let lastLoadFailed = false;
|
|
67
100
|
function indexOf(snapshot) {
|
|
68
101
|
const map = new Map();
|
|
@@ -100,12 +133,19 @@ export function createRedirectStore(config) {
|
|
|
100
133
|
clearTimeout(timeoutId);
|
|
101
134
|
}
|
|
102
135
|
}
|
|
136
|
+
/** One refresh at a time; concurrent callers share the in-flight request. */
|
|
103
137
|
function loadOnce() {
|
|
104
138
|
inFlight ??= load().finally(() => {
|
|
105
139
|
inFlight = null;
|
|
106
140
|
});
|
|
107
141
|
return inFlight;
|
|
108
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Load that is guaranteed to observe state as of NOW. An in-flight request
|
|
145
|
+
* may have been issued before the change we are being told about, so joining
|
|
146
|
+
* it would report success while leaving the stale map in place — chain a new
|
|
147
|
+
* load after it instead.
|
|
148
|
+
*/
|
|
109
149
|
function loadAfterInFlight() {
|
|
110
150
|
const pending = inFlight;
|
|
111
151
|
if (!pending)
|
|
@@ -115,8 +155,12 @@ export function createRedirectStore(config) {
|
|
|
115
155
|
function reportFailure(error) {
|
|
116
156
|
lastLoadFailed = true;
|
|
117
157
|
config.onError?.(error instanceof Error ? error : new Error(String(error)));
|
|
158
|
+
// Back off whether or not there is a map to fall back on. With a warm cache
|
|
159
|
+
// that means serving the last good map for another TTL; with a COLD one it
|
|
160
|
+
// is what stops every request paying the full fetch timeout.
|
|
118
161
|
freshUntil = Date.now() + (cached ? ttlMs : FAILURE_BACKOFF_MS);
|
|
119
162
|
}
|
|
163
|
+
/** Warm the map without anyone waiting on it. Never rejects. */
|
|
120
164
|
function refreshInBackground() {
|
|
121
165
|
void loadOnce().then(() => {
|
|
122
166
|
lastLoadFailed = false;
|
|
@@ -128,14 +172,25 @@ export function createRedirectStore(config) {
|
|
|
128
172
|
if (Date.now() < freshUntil) {
|
|
129
173
|
return cached;
|
|
130
174
|
}
|
|
175
|
+
// Stale-while-revalidate: once there IS a map, no caller ever waits on the
|
|
176
|
+
// network again. Revalidating in the foreground put one request per TTL —
|
|
177
|
+
// and every request concurrent with it — behind a round-trip that can run to
|
|
178
|
+
// `timeoutMs`, in middleware, ahead of a page render. Serving a map up to
|
|
179
|
+
// one TTL stale is what this store already accepts on error, so accepting it
|
|
180
|
+
// on a slow platform too is the consistent choice.
|
|
131
181
|
if (cached) {
|
|
132
182
|
refreshInBackground();
|
|
133
183
|
return cached;
|
|
134
184
|
}
|
|
185
|
+
// Cold cache AND we already know loads are failing: do not make this caller
|
|
186
|
+
// wait to rediscover that. Retry in the background and let the request
|
|
187
|
+
// through unredirected.
|
|
135
188
|
if (lastLoadFailed) {
|
|
136
189
|
refreshInBackground();
|
|
137
190
|
return null;
|
|
138
191
|
}
|
|
192
|
+
// The very first load IS awaited, so a healthy cold start never misses a
|
|
193
|
+
// redirect it had the data to serve.
|
|
139
194
|
try {
|
|
140
195
|
const snapshot = await loadOnce();
|
|
141
196
|
lastLoadFailed = false;
|
|
@@ -157,6 +212,8 @@ export function createRedirectStore(config) {
|
|
|
157
212
|
const snapshot = await ensureFresh();
|
|
158
213
|
if (snapshot)
|
|
159
214
|
return snapshot;
|
|
215
|
+
// No cached map to fall back on — the caller asked for data we do not
|
|
216
|
+
// have, so surface the load error rather than inventing an empty map.
|
|
160
217
|
return loadOnce();
|
|
161
218
|
},
|
|
162
219
|
async refresh() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/redirects/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/redirects/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
/** The redirect statuses the platform accepts. Mirrors the plugins service. */
|
|
1
2
|
export declare const REDIRECT_STATUS_CODES: readonly [301, 302, 303, 307, 308];
|
|
2
3
|
export type RedirectStatusCode = (typeof REDIRECT_STATUS_CODES)[number];
|
|
4
|
+
/** One stored rule. `from` is always a literal path; `to` is a path or an https URL. */
|
|
3
5
|
export interface RedirectRule {
|
|
4
6
|
from: string;
|
|
5
7
|
to: string;
|
|
@@ -7,26 +9,48 @@ export interface RedirectRule {
|
|
|
7
9
|
}
|
|
8
10
|
export interface RedirectSnapshot {
|
|
9
11
|
channelCode: string;
|
|
12
|
+
/** Content hash of the rule set — equal to the ETag the platform served. */
|
|
10
13
|
version: string;
|
|
14
|
+
/** ISO instant the platform rendered this snapshot. */
|
|
11
15
|
generatedAt: string;
|
|
12
16
|
rules: RedirectRule[];
|
|
17
|
+
/**
|
|
18
|
+
* Stored rows the platform could not express as an exact-path rule (legacy
|
|
19
|
+
* wildcard/pattern rows). Non-zero means the merchant has rows to clean up.
|
|
20
|
+
*/
|
|
13
21
|
unservableCount: number;
|
|
14
22
|
}
|
|
15
23
|
export interface RedirectMatch {
|
|
24
|
+
/** Resolved target, exactly as stored. */
|
|
16
25
|
to: string;
|
|
17
26
|
status: RedirectStatusCode;
|
|
18
27
|
}
|
|
19
28
|
export interface RedirectStoreConfig {
|
|
29
|
+
/** Store channel code, e.g. `fashion-store`. */
|
|
20
30
|
storeCode: string;
|
|
31
|
+
/** Plugins service origin. Defaults to the SDK's configured plugins URL. */
|
|
21
32
|
pluginsUrl?: string;
|
|
33
|
+
/** How long a fetched snapshot is served before revalidating. Default 60s. */
|
|
22
34
|
ttlMs?: number;
|
|
35
|
+
/** Upstream fetch timeout. Default 5s — a middleware must not hang a request. */
|
|
23
36
|
timeoutMs?: number;
|
|
24
37
|
fetch?: typeof globalThis.fetch;
|
|
38
|
+
/**
|
|
39
|
+
* Called when a refresh fails. The store keeps serving the last good snapshot
|
|
40
|
+
* (a platform blip must not break the storefront's URLs), so this callback is
|
|
41
|
+
* the only signal that revalidation is failing — wire it to your logger.
|
|
42
|
+
*/
|
|
25
43
|
onError?: (error: Error) => void;
|
|
26
44
|
}
|
|
27
45
|
export interface RedirectStore {
|
|
46
|
+
/**
|
|
47
|
+
* Look up one pathname. Returns null when nothing matches. Never throws:
|
|
48
|
+
* on a cold cache with an unreachable platform it resolves to null.
|
|
49
|
+
*/
|
|
28
50
|
match(pathname: string): Promise<RedirectMatch | null>;
|
|
51
|
+
/** The current snapshot, fetching or revalidating if the TTL has lapsed. */
|
|
29
52
|
snapshot(): Promise<RedirectSnapshot>;
|
|
53
|
+
/** Force a revalidation regardless of TTL. */
|
|
30
54
|
refresh(): Promise<RedirectSnapshot>;
|
|
31
55
|
}
|
|
32
56
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/redirects/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/redirects/types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,oCAAqC,CAAC;AACxE,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,wFAAwF;AACxF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACvD,4EAA4E;IAC5E,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtC,8CAA8C;IAC9C,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACtC"}
|
package/dist/redirects/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/redirects/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/redirects/types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC"}
|
|
@@ -1,23 +1,56 @@
|
|
|
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 type { PlatformEventEnvelope } from '../events/envelope.js';
|
|
2
16
|
import type { ChannelUrlRuleSet, UrlContext } from './url-context.js';
|
|
17
|
+
/** Above this many route paths, one whole-site revalidation replaces them — as the legacy dispatcher does. */
|
|
3
18
|
export declare const DEFAULT_MAX_REVALIDATE_PATHS = 500;
|
|
4
19
|
export type RevalidationSkipReason = 'unknown_type' | 'unsupported_schema_version';
|
|
5
20
|
export interface RevalidationPlan {
|
|
21
|
+
/** Route paths for `revalidatePath`, de-duplicated. Empty when `all`. */
|
|
6
22
|
readonly paths: string[];
|
|
23
|
+
/** Tags for `revalidateTag`. */
|
|
7
24
|
readonly tags: string[];
|
|
25
|
+
/** Revalidate the whole site — `revalidatePath('/', 'layout')`. */
|
|
8
26
|
readonly all: boolean;
|
|
27
|
+
/** Set when the event is not one this SDK acts on; the plan is then empty. */
|
|
9
28
|
readonly skipped?: RevalidationSkipReason;
|
|
29
|
+
/**
|
|
30
|
+
* Set by `createEventRevalidateHandler` when a path event's URLs could not be
|
|
31
|
+
* composed — the URL context could not be read or is unusable, or
|
|
32
|
+
* `toRoutePath` threw or returned a non-path — and it revalidated the whole
|
|
33
|
+
* site instead, answering 200. `planRevalidation` never sets it; it throws.
|
|
34
|
+
*/
|
|
10
35
|
readonly degraded?: RevalidationDegradedReason;
|
|
11
36
|
}
|
|
12
37
|
export type RevalidationDegradedReason = 'url_mapping_failed';
|
|
13
38
|
export interface RevalidationPlanOptions {
|
|
39
|
+
/** Above this many route paths, plan a whole-site revalidation instead. Default 500. */
|
|
14
40
|
maxPaths?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Map a composed storefront URL to the route path to revalidate, or `null` to
|
|
43
|
+
* skip it. Default: `url.pathname`. Override when your routes differ from your
|
|
44
|
+
* public URLs — e.g. `subdomain` locales rewritten to `/[locale]/...` routes.
|
|
45
|
+
*/
|
|
15
46
|
toRoutePath?(url: URL, locale: string): string | null;
|
|
16
47
|
}
|
|
48
|
+
/** A signed, known-type, version-1 event whose `data` does not match its contract. */
|
|
17
49
|
export declare class EventPayloadError extends Error {
|
|
18
50
|
constructor(message: string);
|
|
19
51
|
}
|
|
20
52
|
type PathPair = readonly [path: string, locale: string];
|
|
53
|
+
/** What an event asks for, before any URL is composed. Internal to the SDK. */
|
|
21
54
|
export type RevalidationIntent = {
|
|
22
55
|
readonly kind: 'skip';
|
|
23
56
|
readonly reason: RevalidationSkipReason;
|
|
@@ -31,9 +64,24 @@ export type RevalidationIntent = {
|
|
|
31
64
|
readonly kind: 'paths';
|
|
32
65
|
expand(locales: readonly string[]): PathPair[];
|
|
33
66
|
};
|
|
67
|
+
/**
|
|
68
|
+
* Classify an envelope. Unknown types and unsupported versions are skips, not
|
|
69
|
+
* errors — a subscriber on an older SDK must keep accepting newer events.
|
|
70
|
+
* Throws {@link EventPayloadError} for a known v1 type whose `data` is off-contract.
|
|
71
|
+
*/
|
|
34
72
|
export declare function classifyEvent(envelope: Pick<PlatformEventEnvelope, 'type' | 'schema_version' | 'data'>): RevalidationIntent;
|
|
35
73
|
export declare function resolveMaxPaths(maxPaths: number | undefined): number;
|
|
74
|
+
/** Turn an intent into a plan, composing URLs only when the intent has paths. */
|
|
36
75
|
export declare function planFromIntent(intent: RevalidationIntent, urls: UrlContext | null, options?: RevalidationPlanOptions): RevalidationPlan;
|
|
76
|
+
/**
|
|
77
|
+
* The revalidation a platform event calls for — the mapping
|
|
78
|
+
* `createEventRevalidateHandler` applies, for consumers of the pull feed or of
|
|
79
|
+
* their own webhook plumbing.
|
|
80
|
+
*
|
|
81
|
+
* Throws {@link EventPayloadError} when a known version-1 event's `data` does
|
|
82
|
+
* not match its contract, and `TypeError` when `urls` is unusable for an event
|
|
83
|
+
* that carries paths.
|
|
84
|
+
*/
|
|
37
85
|
export declare function planRevalidation(envelope: Pick<PlatformEventEnvelope, 'type' | 'schema_version' | 'data'>, urls: UrlContext, options?: RevalidationPlanOptions): RevalidationPlan;
|
|
38
86
|
export {};
|
|
39
87
|
//# sourceMappingURL=event-plan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-plan.d.ts","sourceRoot":"","sources":["../../src/revalidation/event-plan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-plan.d.ts","sourceRoot":"","sources":["../../src/revalidation/event-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEtE,8GAA8G;AAC9G,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG,4BAA4B,CAAC;AAEnF,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACzB,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACxB,mEAAmE;IACnE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,sBAAsB,CAAC;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,0BAA0B,CAAC;CAChD;AAED,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACvD;AAED,sFAAsF;AACtF,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,KAAK,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD,+EAA+E;AAC/E,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GAClE;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,iBAAiB,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAA;CAAE,CAAC;AAoM/E;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,gBAAgB,GAAG,MAAM,CAAC,GACxE,kBAAkB,CAQpB;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMpE;AAiBD,iFAAiF;AACjF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,UAAU,GAAG,IAAI,EACvB,OAAO,CAAC,EAAE,uBAAuB,GAChC,gBAAgB,CA2BlB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,gBAAgB,GAAG,MAAM,CAAC,EACzE,IAAI,EAAE,UAAU,EAChB,OAAO,CAAC,EAAE,uBAAuB,GAChC,gBAAgB,CAElB"}
|
|
@@ -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":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzF,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,8GAA8G;AAC9G,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAmChD,sFAAsF;AACtF,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAWD,MAAM,GAAG,GAAuB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAChD,MAAM,OAAO,GAAuB,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAExE,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,CAAC;AAID,sFAAsF;AACtF,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAS,EAAE;QACtD,MAAM,IAAI,iBAAiB,CAAC,GAAG,IAAI,OAAO,KAAK,YAAY,QAAQ,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC;IACF,OAAO;QACL,MAAM,CAAC,KAAc,EAAE,KAAa;YAClC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,CAAC,GAAS,EAAE,GAAW,EAAE,KAAK,GAAG,QAAQ,GAAG,EAAE;YAClD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACrE,CAAC;QACD,cAAc,CAAC,GAAS,EAAE,GAAW,EAAE,KAAK,GAAG,QAAQ,GAAG,EAAE;YAC1D,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,CAAC,GAAS,EAAE,GAAW,EAAE,KAAK,GAAG,QAAQ,GAAG,EAAE;YACnD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACvE,CAAC;QACD,KAAK,CAAC,GAAS,EAAE,GAAW,EAAE,KAAK,GAAG,QAAQ,GAAG,EAAE;YACjD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAChE,CAAC;QACD,WAAW,CAAC,GAAS,EAAE,GAAW;YAChC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;gBAC5E,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAmB,GAAS,EAAE,GAAW,EAAE,OAAqB;YACnE,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAU,CAAC;gBACjC,CAAC,CAAE,KAAW;gBACd,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,EAAE,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC;AAKD;;;;;;GAMG;AACH,MAAM,OAAO,GAAe,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;IACtC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC;QAAE,OAAO,GAAG,CAAC;IACnD,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG;YACX,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC;YACxD,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,cAAc,CAAC,iBAAiB,CAAC;SAC3E,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAClD,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,cAAc,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC;IAChG,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,eAAe,CAAC,CAAC;IAC7E,4EAA4E;IAC5E,4EAA4E;IAC5E,IAAI,CAAC,QAAQ;QAAE,OAAO,GAAG,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/D,OAAO;QACL,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAU,CAAC,CAAC;YACxF,GAAG,OAAO;iBACP,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;iBACvC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAU,CAAC,CAAC;SAC7E;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,iBAAiB,GAAe,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;IAChD,MAAM,QAAQ,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IACtE,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IACtC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;AAC7F,CAAC,CAAC;AAEF,gFAAgF;AAChF,MAAM,UAAU,GAAe,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;IACzC,MAAM,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACnD,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,OAAO,GAAe,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;IACtC,MAAM,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAChD,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAmC,CAAC,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAEnG;;;;GAIG;AACH,MAAM,eAAe,GAAe,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;IAC9C,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAC/E,MAAM,KAAK,GAAG,uCAAuC,CAAC,GAAG,CAAC;QAC1D,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACnC,OAAO;YACL,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,KAAK,gBAAgB,CAAC;YACzE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,KAAK,cAAc,CAAC;SACpE,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,KAAK;QACX,eAAe,EAAE;YACf,cAAc,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC;YACxD,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,qBAAqB,EAAE,qBAAqB,CAAC;YAChF,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,2BAA2B,CAAC;YACvE,oBAAoB,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAsB,CAAC;YACpE,8BAA8B,EAAE,SAAS;YACzC,wCAAwC,EAAE,CAAC,CAAC,OAAO,CACjD,IAAI,EACJ,0CAA0C,CAC3C;YACD,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,CAAC;YAC5D,qBAAqB,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,uBAAuB,CAAC;YAC9D,wBAAwB,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,0BAA0B,CAAC;YACzE,kCAAkC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,oCAAoC,CAAC;SAC1F;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,QAAQ,GAAe,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;IACvC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC;QAAE,OAAO,GAAG,CAAC;IAC3F,MAAM,KAAK,GAAI,CAAC,OAAO,EAAE,SAAS,CAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7D,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAY,EAAE;QAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,OAAO;YACL,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;YAClD,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC;SACrE,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,KAAK,GAAe,GAAG,EAAE,CAAC,GAAG,CAAC;AAEpC,mGAAmG;AACnG,MAAM,WAAW,GAAgD;IAC/D,mBAAmB,EAAE,OAAO;IAC5B,iBAAiB,EAAE,OAAO;IAC1B,qBAAqB,EAAE,OAAO;IAC9B,4BAA4B,EAAE,iBAAiB;IAC/C,4BAA4B,EAAE,iBAAiB;IAC/C,4BAA4B,EAAE,iBAAiB;IAC/C,wEAAwE;IACxE,6BAA6B;IAC7B,8BAA8B,EAAE,KAAK;IACrC,yEAAyE;IACzE,oEAAoE;IACpE,oBAAoB,EAAE,KAAK;IAC3B,oBAAoB,EAAE,KAAK;IAC3B,oBAAoB,EAAE,KAAK;IAC3B,+BAA+B,EAAE,UAAU;IAC3C,8BAA8B,EAAE,eAAe;IAC/C,mBAAmB,EAAE,QAAQ;IAC7B,iBAAiB,EAAE,OAAO;IAC1B,iBAAiB,EAAE,OAAO;IAC1B,iBAAiB,EAAE,OAAO;IAC1B,+BAA+B,EAAE,OAAO;CACzC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAyE;IAEzE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;QACxD,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAA+B,CAAC;QACvD,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAC/D,IAAI,QAAQ,CAAC,cAAc,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IACjG,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAA4B;IAC1D,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,4BAA4B,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,SAAS,CAAC,4CAA4C,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAuB;IAC/C,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAC;IACtF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,SAAS,CACjB,gEAAgE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAC5G,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,cAAc,CAC5B,MAA0B,EAC1B,IAAuB,EACvB,OAAiC;IAEjC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QACrE,KAAK,KAAK;YACR,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAC5D,KAAK,MAAM;YACT,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAC7E,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzE,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACvF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACrF,IAAI,KAAK,KAAK,IAAI;oBAAE,SAAS;gBAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxD,MAAM,IAAI,SAAS,CAAC,0DAA0D,CAAC,CAAC;gBAClF,CAAC;gBACD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,GAAG,QAAQ;gBAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;YACrF,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;YACjE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QACrE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAyE,EACzE,IAAgB,EAChB,OAAiC;IAEjC,OAAO,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -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":"
|
|
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":"
|
|
1
|
+
{"version":3,"file":"event-verify.js","sourceRoot":"","sources":["../../src/revalidation/event-verify.ts"],"names":[],"mappings":"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"}
|