@sixtyninecommerce/client 0.22.1 → 0.23.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 +51 -0
- package/dist/cache-tags.d.ts +8 -0
- package/dist/cache-tags.d.ts.map +1 -0
- package/dist/cache-tags.js +15 -0
- package/dist/cache-tags.js.map +1 -0
- package/dist/commerce/index.d.ts +2 -0
- package/dist/commerce/index.d.ts.map +1 -1
- package/dist/commerce/products.d.ts +3 -1
- package/dist/commerce/products.d.ts.map +1 -1
- package/dist/commerce/products.js +33 -9
- package/dist/commerce/products.js.map +1 -1
- package/dist/commerce/queries.d.ts +1 -0
- package/dist/commerce/queries.d.ts.map +1 -1
- package/dist/commerce/queries.js +10 -4
- package/dist/commerce/queries.js.map +1 -1
- package/dist/commerce/search.d.ts +1 -1
- package/dist/commerce/search.d.ts.map +1 -1
- package/dist/commerce/search.js +7 -1
- package/dist/commerce/search.js.map +1 -1
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +6 -0
- package/dist/core/context.js.map +1 -1
- package/dist/core/http.d.ts +6 -0
- package/dist/core/http.d.ts.map +1 -1
- package/dist/core/http.js +26 -2
- package/dist/core/http.js.map +1 -1
- package/dist/events/index.d.ts +8 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +4 -0
- package/dist/events/index.js.map +1 -1
- package/dist/events/payloads.d.ts +154 -0
- package/dist/events/payloads.d.ts.map +1 -0
- package/dist/events/payloads.js +2 -0
- package/dist/events/payloads.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/navigation/routes.d.ts +2 -2
- package/dist/navigation/routes.d.ts.map +1 -1
- package/dist/navigation/routes.js +2 -1
- package/dist/navigation/routes.js.map +1 -1
- package/dist/next/artifact-handler.d.ts.map +1 -1
- package/dist/next/artifact-handler.js +5 -2
- package/dist/next/artifact-handler.js.map +1 -1
- package/dist/next/event-revalidate-handler.d.ts +14 -0
- package/dist/next/event-revalidate-handler.d.ts.map +1 -0
- package/dist/next/event-revalidate-handler.js +102 -0
- package/dist/next/event-revalidate-handler.js.map +1 -0
- package/dist/next/index.d.ts +5 -0
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +2 -0
- package/dist/next/index.js.map +1 -1
- package/dist/next/revalidate-handler.d.ts.map +1 -1
- package/dist/next/revalidate-handler.js.map +1 -1
- package/dist/revalidation/event-plan.d.ts +39 -0
- package/dist/revalidation/event-plan.d.ts.map +1 -0
- package/dist/revalidation/event-plan.js +223 -0
- package/dist/revalidation/event-plan.js.map +1 -0
- package/dist/revalidation/event-verify.d.ts +16 -0
- package/dist/revalidation/event-verify.d.ts.map +1 -0
- package/dist/revalidation/event-verify.js +74 -0
- package/dist/revalidation/event-verify.js.map +1 -0
- package/dist/revalidation/types.d.ts.map +1 -1
- package/dist/revalidation/url-context.d.ts +17 -0
- package/dist/revalidation/url-context.d.ts.map +1 -0
- package/dist/revalidation/url-context.js +49 -0
- package/dist/revalidation/url-context.js.map +1 -0
- package/dist/seo/url-builder.d.ts +2 -1
- package/dist/seo/url-builder.d.ts.map +1 -1
- package/dist/seo/url-builder.js +5 -2
- package/dist/seo/url-builder.js.map +1 -1
- package/dist/types.d.ts +12 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revalidate-handler.js","sourceRoot":"","sources":["../../src/next/revalidate-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"revalidate-handler.js","sourceRoot":"","sources":["../../src/next/revalidate-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { PlatformEventEnvelope } from '../events/envelope.js';
|
|
2
|
+
import type { ChannelUrlRuleSet, UrlContext } from './url-context.js';
|
|
3
|
+
export declare const DEFAULT_MAX_REVALIDATE_PATHS = 500;
|
|
4
|
+
export type RevalidationSkipReason = 'unknown_type' | 'unsupported_schema_version';
|
|
5
|
+
export interface RevalidationPlan {
|
|
6
|
+
readonly paths: string[];
|
|
7
|
+
readonly tags: string[];
|
|
8
|
+
readonly all: boolean;
|
|
9
|
+
readonly skipped?: RevalidationSkipReason;
|
|
10
|
+
readonly degraded?: RevalidationDegradedReason;
|
|
11
|
+
}
|
|
12
|
+
export type RevalidationDegradedReason = 'url_mapping_failed';
|
|
13
|
+
export interface RevalidationPlanOptions {
|
|
14
|
+
maxPaths?: number;
|
|
15
|
+
toRoutePath?(url: URL, locale: string): string | null;
|
|
16
|
+
}
|
|
17
|
+
export declare class EventPayloadError extends Error {
|
|
18
|
+
constructor(message: string);
|
|
19
|
+
}
|
|
20
|
+
type PathPair = readonly [path: string, locale: string];
|
|
21
|
+
export type RevalidationIntent = {
|
|
22
|
+
readonly kind: 'skip';
|
|
23
|
+
readonly reason: RevalidationSkipReason;
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: 'all';
|
|
26
|
+
readonly channelSettings?: ChannelUrlRuleSet;
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: 'tags';
|
|
29
|
+
readonly tags: readonly string[];
|
|
30
|
+
} | {
|
|
31
|
+
readonly kind: 'paths';
|
|
32
|
+
expand(locales: readonly string[]): PathPair[];
|
|
33
|
+
};
|
|
34
|
+
export declare function classifyEvent(envelope: Pick<PlatformEventEnvelope, 'type' | 'schema_version' | 'data'>): RevalidationIntent;
|
|
35
|
+
export declare function resolveMaxPaths(maxPaths: number | undefined): number;
|
|
36
|
+
export declare function planFromIntent(intent: RevalidationIntent, urls: UrlContext | null, options?: RevalidationPlanOptions): RevalidationPlan;
|
|
37
|
+
export declare function planRevalidation(envelope: Pick<PlatformEventEnvelope, 'type' | 'schema_version' | 'data'>, urls: UrlContext, options?: RevalidationPlanOptions): RevalidationPlan;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=event-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-plan.d.ts","sourceRoot":"","sources":["../../src/revalidation/event-plan.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGtE,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,MAAM,MAAM,sBAAsB,GAAG,cAAc,GAAG,4BAA4B,CAAC;AAEnF,MAAM,WAAW,gBAAgB;IAE/B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAEzB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAExB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IAEtB,QAAQ,CAAC,OAAO,CAAC,EAAE,sBAAsB,CAAC;IAO1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,0BAA0B,CAAC;CAChD;AAED,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IAEtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,WAAW,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACvD;AAGD,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,KAAK,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAGxD,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;AAyM/E,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;AAkBD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,UAAU,GAAG,IAAI,EACvB,OAAO,CAAC,EAAE,uBAAuB,GAChC,gBAAgB,CA2BlB;AAWD,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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { collectionCacheTag, productCacheTag, SEO_ARTIFACT_TAG } from '../cache-tags.js';
|
|
2
|
+
import { buildUrl } from '../seo/url-builder.js';
|
|
3
|
+
export const DEFAULT_MAX_REVALIDATE_PATHS = 500;
|
|
4
|
+
export class EventPayloadError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'EventPayloadError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
const ALL = { kind: 'all' };
|
|
11
|
+
const NOTHING = { kind: 'paths', expand: () => [] };
|
|
12
|
+
function isRecord(value) {
|
|
13
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
14
|
+
}
|
|
15
|
+
function isNonEmptyString(value) {
|
|
16
|
+
return typeof value === 'string' && value.length > 0;
|
|
17
|
+
}
|
|
18
|
+
function reader(type) {
|
|
19
|
+
const fail = (label, expected) => {
|
|
20
|
+
throw new EventPayloadError(`${type}@1: ${label} must be ${expected}`);
|
|
21
|
+
};
|
|
22
|
+
return {
|
|
23
|
+
record(value, label) {
|
|
24
|
+
return isRecord(value) ? value : fail(label, 'an object');
|
|
25
|
+
},
|
|
26
|
+
string(obj, key, label = `data.${key}`) {
|
|
27
|
+
const value = obj[key];
|
|
28
|
+
return typeof value === 'string' ? value : fail(label, 'a string');
|
|
29
|
+
},
|
|
30
|
+
nullableString(obj, key, label = `data.${key}`) {
|
|
31
|
+
const value = obj[key];
|
|
32
|
+
return value === null || typeof value === 'string' ? value : fail(label, 'a string or null');
|
|
33
|
+
},
|
|
34
|
+
boolean(obj, key, label = `data.${key}`) {
|
|
35
|
+
const value = obj[key];
|
|
36
|
+
return typeof value === 'boolean' ? value : fail(label, 'a boolean');
|
|
37
|
+
},
|
|
38
|
+
array(obj, key, label = `data.${key}`) {
|
|
39
|
+
const value = obj[key];
|
|
40
|
+
return Array.isArray(value) ? value : fail(label, 'an array');
|
|
41
|
+
},
|
|
42
|
+
stringArray(obj, key) {
|
|
43
|
+
const value = obj[key];
|
|
44
|
+
return Array.isArray(value) && value.every((item) => typeof item === 'string')
|
|
45
|
+
? value
|
|
46
|
+
: fail(`data.${key}`, 'an array of strings');
|
|
47
|
+
},
|
|
48
|
+
oneOf(obj, key, allowed) {
|
|
49
|
+
const value = obj[key];
|
|
50
|
+
return allowed.includes(value)
|
|
51
|
+
? value
|
|
52
|
+
: fail(`data.${key}`, `one of ${allowed.join(', ')}`);
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const content = (data, r) => {
|
|
57
|
+
if (r.boolean(data, 'paths_truncated'))
|
|
58
|
+
return ALL;
|
|
59
|
+
const defaultLanguage = r.string(data, 'default_language_code');
|
|
60
|
+
const entries = r.array(data, 'paths').map((raw, i) => {
|
|
61
|
+
const entry = r.record(raw, `data.paths[${i}]`);
|
|
62
|
+
const urls = [
|
|
63
|
+
r.nullableString(entry, 'path', `data.paths[${i}].path`),
|
|
64
|
+
r.nullableString(entry, 'previous_path', `data.paths[${i}].previous_path`),
|
|
65
|
+
].filter((path) => path !== null);
|
|
66
|
+
return { language: r.string(entry, 'language_code', `data.paths[${i}].language_code`), urls };
|
|
67
|
+
});
|
|
68
|
+
const fallback = entries.find((entry) => entry.language === defaultLanguage);
|
|
69
|
+
if (!fallback)
|
|
70
|
+
return ALL;
|
|
71
|
+
const listed = new Set(entries.map((entry) => entry.language));
|
|
72
|
+
return {
|
|
73
|
+
kind: 'paths',
|
|
74
|
+
expand: (locales) => [
|
|
75
|
+
...entries.flatMap((entry) => entry.urls.map((path) => [path, entry.language])),
|
|
76
|
+
...locales
|
|
77
|
+
.filter((locale) => !listed.has(locale))
|
|
78
|
+
.flatMap((locale) => fallback.urls.map((path) => [path, locale])),
|
|
79
|
+
],
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
const contentCollection = (data, r) => {
|
|
83
|
+
const basePath = r.nullableString(data, 'base_path');
|
|
84
|
+
if (r.nullableString(data, 'previous_base_path') !== null)
|
|
85
|
+
return ALL;
|
|
86
|
+
if (basePath === null)
|
|
87
|
+
return NOTHING;
|
|
88
|
+
return { kind: 'paths', expand: (locales) => locales.map((locale) => [basePath, locale]) };
|
|
89
|
+
};
|
|
90
|
+
const membership = (data, r) => {
|
|
91
|
+
const id = r.nullableString(data, 'collection_id');
|
|
92
|
+
return id === null ? ALL : { kind: 'tags', tags: [collectionCacheTag(id)] };
|
|
93
|
+
};
|
|
94
|
+
const product = (data, r) => {
|
|
95
|
+
const id = r.nullableString(data, 'product_id');
|
|
96
|
+
return id === null ? ALL : { kind: 'tags', tags: [productCacheTag(id)] };
|
|
97
|
+
};
|
|
98
|
+
const URL_LOCALE_STRATEGIES = ['path-prefix', 'subdomain', 'none'];
|
|
99
|
+
const channelSettings = (data, r) => {
|
|
100
|
+
const overrides = r.array(data, 'commerce_path_prefix_overrides').map((raw, i) => {
|
|
101
|
+
const label = `data.commerce_path_prefix_overrides[${i}]`;
|
|
102
|
+
const entry = r.record(raw, label);
|
|
103
|
+
return {
|
|
104
|
+
language_code: r.string(entry, 'language_code', `${label}.language_code`),
|
|
105
|
+
path_prefix: r.string(entry, 'path_prefix', `${label}.path_prefix`),
|
|
106
|
+
};
|
|
107
|
+
});
|
|
108
|
+
return {
|
|
109
|
+
kind: 'all',
|
|
110
|
+
channelSettings: {
|
|
111
|
+
storefront_url: r.nullableString(data, 'storefront_url'),
|
|
112
|
+
url_locale_strategy: r.oneOf(data, 'url_locale_strategy', URL_LOCALE_STRATEGIES),
|
|
113
|
+
url_locale_prefix_default: r.boolean(data, 'url_locale_prefix_default'),
|
|
114
|
+
commerce_path_prefix: r.nullableString(data, 'commerce_path_prefix'),
|
|
115
|
+
commerce_path_prefix_overrides: overrides,
|
|
116
|
+
commerce_path_prefix_overrides_truncated: r.boolean(data, 'commerce_path_prefix_overrides_truncated'),
|
|
117
|
+
product_path_segment: r.string(data, 'product_path_segment'),
|
|
118
|
+
default_language_code: r.string(data, 'default_language_code'),
|
|
119
|
+
available_language_codes: r.stringArray(data, 'available_language_codes'),
|
|
120
|
+
available_language_codes_truncated: r.boolean(data, 'available_language_codes_truncated'),
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
const seoPaths = (data, r) => {
|
|
125
|
+
if (r.boolean(data, 'added_truncated') || r.boolean(data, 'removed_truncated'))
|
|
126
|
+
return ALL;
|
|
127
|
+
const pairs = ['added', 'removed'].flatMap((list) => r.array(data, list).map((raw, i) => {
|
|
128
|
+
const entry = r.record(raw, `data.${list}[${i}]`);
|
|
129
|
+
return [
|
|
130
|
+
r.string(entry, 'path', `data.${list}[${i}].path`),
|
|
131
|
+
r.string(entry, 'language_code', `data.${list}[${i}].language_code`),
|
|
132
|
+
];
|
|
133
|
+
}));
|
|
134
|
+
return { kind: 'paths', expand: () => pairs };
|
|
135
|
+
};
|
|
136
|
+
const whole = () => ALL;
|
|
137
|
+
const CLASSIFIERS = {
|
|
138
|
+
'content.published': content,
|
|
139
|
+
'content.updated': content,
|
|
140
|
+
'content.unpublished': content,
|
|
141
|
+
'content.collection.created': contentCollection,
|
|
142
|
+
'content.collection.updated': contentCollection,
|
|
143
|
+
'content.collection.removed': contentCollection,
|
|
144
|
+
'content.site_content_changed': whole,
|
|
145
|
+
'collection.created': whole,
|
|
146
|
+
'collection.updated': whole,
|
|
147
|
+
'collection.deleted': whole,
|
|
148
|
+
'collection.membership_changed': membership,
|
|
149
|
+
'channel.url_settings_changed': channelSettings,
|
|
150
|
+
'seo.paths_changed': seoPaths,
|
|
151
|
+
'product.created': product,
|
|
152
|
+
'product.updated': product,
|
|
153
|
+
'product.deleted': product,
|
|
154
|
+
'product_variant.price_changed': product,
|
|
155
|
+
};
|
|
156
|
+
export function classifyEvent(envelope) {
|
|
157
|
+
const classify = Object.hasOwn(CLASSIFIERS, envelope.type)
|
|
158
|
+
? CLASSIFIERS[envelope.type]
|
|
159
|
+
: undefined;
|
|
160
|
+
if (!classify)
|
|
161
|
+
return { kind: 'skip', reason: 'unknown_type' };
|
|
162
|
+
if (envelope.schema_version !== 1)
|
|
163
|
+
return { kind: 'skip', reason: 'unsupported_schema_version' };
|
|
164
|
+
const r = reader(envelope.type);
|
|
165
|
+
return classify(r.record(envelope.data, 'data'), r);
|
|
166
|
+
}
|
|
167
|
+
export function resolveMaxPaths(maxPaths) {
|
|
168
|
+
if (maxPaths === undefined)
|
|
169
|
+
return DEFAULT_MAX_REVALIDATE_PATHS;
|
|
170
|
+
if (!Number.isInteger(maxPaths) || maxPaths < 1) {
|
|
171
|
+
throw new TypeError(`maxPaths must be a positive integer, got ${String(maxPaths)}`);
|
|
172
|
+
}
|
|
173
|
+
return maxPaths;
|
|
174
|
+
}
|
|
175
|
+
function assertUrlContext(urls) {
|
|
176
|
+
if (!urls)
|
|
177
|
+
throw new TypeError('A UrlContext is required to plan path revalidations');
|
|
178
|
+
if (!Array.isArray(urls.locales) || !urls.locales.every(isNonEmptyString)) {
|
|
179
|
+
throw new TypeError('UrlContext.locales must be an array of language codes');
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
new URL(urls.config.storefrontUrl);
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
throw new TypeError(`UrlContext.config.storefrontUrl must be an absolute URL, got ${JSON.stringify(urls.config.storefrontUrl)}`);
|
|
186
|
+
}
|
|
187
|
+
return urls;
|
|
188
|
+
}
|
|
189
|
+
export function planFromIntent(intent, urls, options) {
|
|
190
|
+
switch (intent.kind) {
|
|
191
|
+
case 'skip':
|
|
192
|
+
return { paths: [], tags: [], all: false, skipped: intent.reason };
|
|
193
|
+
case 'all':
|
|
194
|
+
return { paths: [], tags: [SEO_ARTIFACT_TAG], all: true };
|
|
195
|
+
case 'tags':
|
|
196
|
+
return { paths: [], tags: [...intent.tags, SEO_ARTIFACT_TAG], all: false };
|
|
197
|
+
case 'paths': {
|
|
198
|
+
const maxPaths = resolveMaxPaths(options?.maxPaths);
|
|
199
|
+
const context = assertUrlContext(urls);
|
|
200
|
+
const toRoutePath = options?.toRoutePath ?? ((url) => url.pathname);
|
|
201
|
+
const locales = [...new Set([context.config.defaultLanguageCode, ...context.locales])];
|
|
202
|
+
const paths = new Set();
|
|
203
|
+
for (const [path, locale] of intent.expand(locales)) {
|
|
204
|
+
const route = toRoutePath(new URL(buildUrl(context.config, [path], locale)), locale);
|
|
205
|
+
if (route === null)
|
|
206
|
+
continue;
|
|
207
|
+
if (typeof route !== 'string' || !route.startsWith('/')) {
|
|
208
|
+
throw new TypeError(`toRoutePath must return a path starting with "/" or null`);
|
|
209
|
+
}
|
|
210
|
+
paths.add(route);
|
|
211
|
+
}
|
|
212
|
+
if (paths.size > maxPaths)
|
|
213
|
+
return { paths: [], tags: [SEO_ARTIFACT_TAG], all: true };
|
|
214
|
+
if (paths.size === 0)
|
|
215
|
+
return { paths: [], tags: [], all: false };
|
|
216
|
+
return { paths: [...paths], tags: [SEO_ARTIFACT_TAG], all: false };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
export function planRevalidation(envelope, urls, options) {
|
|
221
|
+
return planFromIntent(classifyEvent(envelope), urls, options);
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=event-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-plan.js","sourceRoot":"","sources":["../../src/revalidation/event-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PlatformEventEnvelope } from '../events/envelope.js';
|
|
2
|
+
export declare const DEFAULT_EVENT_TOLERANCE_SECONDS = 300;
|
|
3
|
+
export type EventDeliveryVerification = {
|
|
4
|
+
readonly ok: true;
|
|
5
|
+
readonly envelope: PlatformEventEnvelope;
|
|
6
|
+
} | {
|
|
7
|
+
readonly ok: false;
|
|
8
|
+
readonly status: 400 | 401;
|
|
9
|
+
readonly reason: string;
|
|
10
|
+
};
|
|
11
|
+
export interface VerifyEventDeliveryOptions {
|
|
12
|
+
toleranceSeconds?: number;
|
|
13
|
+
now?: Date;
|
|
14
|
+
}
|
|
15
|
+
export declare function verifyEventDelivery(rawBody: string, headers: Pick<Headers, 'get'>, secret: string, options?: VerifyEventDeliveryOptions): Promise<EventDeliveryVerification>;
|
|
16
|
+
//# sourceMappingURL=event-verify.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { verifyWebhookSignature } from './verify.js';
|
|
2
|
+
export const DEFAULT_EVENT_TOLERANCE_SECONDS = 300;
|
|
3
|
+
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
|
+
function isRecord(value) {
|
|
5
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
6
|
+
}
|
|
7
|
+
function envelopeShapeError(body) {
|
|
8
|
+
const { id, type, schema_version, channel_code, occurred_at, sequence, aggregate, data } = body;
|
|
9
|
+
if (typeof id !== 'string' || id.length === 0)
|
|
10
|
+
return 'id must be a non-empty string';
|
|
11
|
+
if (typeof type !== 'string' || type.length === 0)
|
|
12
|
+
return 'type must be a non-empty string';
|
|
13
|
+
if (!Number.isInteger(schema_version) || schema_version < 1) {
|
|
14
|
+
return 'schema_version must be a positive integer';
|
|
15
|
+
}
|
|
16
|
+
if (typeof channel_code !== 'string')
|
|
17
|
+
return 'channel_code must be a string';
|
|
18
|
+
if (typeof occurred_at !== 'string')
|
|
19
|
+
return 'occurred_at must be a string';
|
|
20
|
+
if (!Number.isInteger(sequence) || sequence < 0) {
|
|
21
|
+
return 'sequence must be a non-negative integer';
|
|
22
|
+
}
|
|
23
|
+
if (!isRecord(aggregate) || typeof aggregate.type !== 'string') {
|
|
24
|
+
return 'aggregate.type must be a string';
|
|
25
|
+
}
|
|
26
|
+
if (aggregate.id !== null && typeof aggregate.id !== 'string') {
|
|
27
|
+
return 'aggregate.id must be a string or null';
|
|
28
|
+
}
|
|
29
|
+
if (body.trace_id !== null && typeof body.trace_id !== 'string') {
|
|
30
|
+
return 'trace_id must be a string or null';
|
|
31
|
+
}
|
|
32
|
+
if (!isRecord(data))
|
|
33
|
+
return 'data must be a JSON object';
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
export async function verifyEventDelivery(rawBody, headers, secret, options) {
|
|
37
|
+
const toleranceSeconds = options?.toleranceSeconds ?? DEFAULT_EVENT_TOLERANCE_SECONDS;
|
|
38
|
+
if (!Number.isFinite(toleranceSeconds) || toleranceSeconds <= 0) {
|
|
39
|
+
throw new TypeError(`toleranceSeconds must be a positive number, got ${toleranceSeconds}`);
|
|
40
|
+
}
|
|
41
|
+
const now = options?.now ?? new Date();
|
|
42
|
+
if (!(now instanceof Date) || Number.isNaN(now.getTime())) {
|
|
43
|
+
throw new TypeError('now must be a valid Date');
|
|
44
|
+
}
|
|
45
|
+
const toleranceMs = toleranceSeconds * 1000;
|
|
46
|
+
if (!(await verifyWebhookSignature(rawBody, headers.get('x-webhook-signature'), secret))) {
|
|
47
|
+
return { ok: false, status: 401, reason: 'invalid signature' };
|
|
48
|
+
}
|
|
49
|
+
let body;
|
|
50
|
+
try {
|
|
51
|
+
body = JSON.parse(rawBody);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return { ok: false, status: 400, reason: 'invalid JSON body' };
|
|
55
|
+
}
|
|
56
|
+
if (!isRecord(body))
|
|
57
|
+
return { ok: false, status: 400, reason: 'body must be a JSON object' };
|
|
58
|
+
const deliveredAt = body.delivered_at;
|
|
59
|
+
const deliveredMs = typeof deliveredAt === 'string' && ISO_INSTANT.test(deliveredAt)
|
|
60
|
+
? Date.parse(deliveredAt)
|
|
61
|
+
: Number.NaN;
|
|
62
|
+
if (Number.isNaN(deliveredMs)) {
|
|
63
|
+
return { ok: false, status: 401, reason: 'missing or invalid delivered_at' };
|
|
64
|
+
}
|
|
65
|
+
const nowMs = now.getTime();
|
|
66
|
+
if (Math.abs(nowMs - deliveredMs) > toleranceMs) {
|
|
67
|
+
return { ok: false, status: 401, reason: 'delivery outside tolerance window' };
|
|
68
|
+
}
|
|
69
|
+
const shapeError = envelopeShapeError(body);
|
|
70
|
+
if (shapeError)
|
|
71
|
+
return { ok: false, status: 400, reason: `invalid envelope: ${shapeError}` };
|
|
72
|
+
return { ok: true, envelope: body };
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=event-verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-verify.js","sourceRoot":"","sources":["../../src/revalidation/event-verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/revalidation/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/revalidation/types.ts"],"names":[],"mappings":"AAaA,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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ChannelUrlSettingsChangedV1 } from '../events/payloads.js';
|
|
2
|
+
import { type UrlStrategyConfig } from '../seo/url-builder.js';
|
|
3
|
+
import type { StorefrontClient } from '../types.js';
|
|
4
|
+
export interface UrlContext {
|
|
5
|
+
readonly config: UrlStrategyConfig;
|
|
6
|
+
readonly locales: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export interface UrlContextSource {
|
|
9
|
+
(): UrlContext | Promise<UrlContext>;
|
|
10
|
+
invalidate?(): void;
|
|
11
|
+
}
|
|
12
|
+
export declare function urlContextFromClient(client: Pick<StorefrontClient, 'commerce'> | Promise<Pick<StorefrontClient, 'commerce'>>): UrlContextSource & {
|
|
13
|
+
invalidate(): void;
|
|
14
|
+
};
|
|
15
|
+
export type ChannelUrlRuleSet = Omit<ChannelUrlSettingsChangedV1, 'channel_id' | 'changed'>;
|
|
16
|
+
export declare function urlContextFromChannelSettings(settings: ChannelUrlRuleSet): UrlContext | null;
|
|
17
|
+
//# sourceMappingURL=url-context.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { urlStrategyFromChannel } from '../seo/url-builder.js';
|
|
2
|
+
export function urlContextFromClient(client) {
|
|
3
|
+
let cached = null;
|
|
4
|
+
const source = () => {
|
|
5
|
+
if (cached)
|
|
6
|
+
return cached;
|
|
7
|
+
const read = Promise.resolve(client).then(async (resolved) => {
|
|
8
|
+
const channel = await resolved.commerce.getActiveChannel();
|
|
9
|
+
return {
|
|
10
|
+
config: urlStrategyFromChannel(channel.customFields, channel.defaultLanguageCode),
|
|
11
|
+
locales: [...channel.availableLanguageCodes],
|
|
12
|
+
};
|
|
13
|
+
});
|
|
14
|
+
cached = read;
|
|
15
|
+
read.catch(() => {
|
|
16
|
+
if (cached === read)
|
|
17
|
+
cached = null;
|
|
18
|
+
});
|
|
19
|
+
return read;
|
|
20
|
+
};
|
|
21
|
+
return Object.assign(source, {
|
|
22
|
+
invalidate() {
|
|
23
|
+
cached = null;
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
export function urlContextFromChannelSettings(settings) {
|
|
28
|
+
if (settings.storefront_url === null ||
|
|
29
|
+
settings.available_language_codes_truncated ||
|
|
30
|
+
settings.commerce_path_prefix_overrides_truncated) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const overrides = settings.commerce_path_prefix_overrides;
|
|
34
|
+
return {
|
|
35
|
+
config: {
|
|
36
|
+
storefrontUrl: settings.storefront_url,
|
|
37
|
+
urlLocaleStrategy: settings.url_locale_strategy,
|
|
38
|
+
urlLocalePrefixDefault: settings.url_locale_prefix_default,
|
|
39
|
+
defaultLanguageCode: settings.default_language_code,
|
|
40
|
+
productPathSegment: settings.product_path_segment,
|
|
41
|
+
commercePathPrefix: settings.commerce_path_prefix,
|
|
42
|
+
commercePathPrefixTranslations: overrides.length > 0
|
|
43
|
+
? Object.fromEntries(overrides.map((o) => [o.language_code, o.path_prefix]))
|
|
44
|
+
: null,
|
|
45
|
+
},
|
|
46
|
+
locales: [...settings.available_language_codes],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=url-context.js.map
|
|
@@ -0,0 +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,4 +1,4 @@
|
|
|
1
|
-
import type { StoreContext } from '../types.js';
|
|
1
|
+
import type { ChannelCustomFields, StoreContext } from '../types.js';
|
|
2
2
|
import type { UrlLocaleStrategy } from './types.js';
|
|
3
3
|
export interface UrlStrategyConfig {
|
|
4
4
|
storefrontUrl: string;
|
|
@@ -10,6 +10,7 @@ export interface UrlStrategyConfig {
|
|
|
10
10
|
commercePathPrefixTranslations?: Record<string, string> | null;
|
|
11
11
|
}
|
|
12
12
|
export declare function readUrlStrategy(ctx: StoreContext): UrlStrategyConfig;
|
|
13
|
+
export declare function urlStrategyFromChannel(customFields: ChannelCustomFields | null | undefined, defaultLanguageCode: string): UrlStrategyConfig;
|
|
13
14
|
export declare function commercePrefixFor(cfg: UrlStrategyConfig, locale: string): string;
|
|
14
15
|
export declare function buildUrl(cfg: UrlStrategyConfig, segments: string[], locale?: string): string;
|
|
15
16
|
//# sourceMappingURL=url-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-builder.d.ts","sourceRoot":"","sources":["../../src/seo/url-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"url-builder.d.ts","sourceRoot":"","sources":["../../src/seo/url-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,sBAAsB,EAAE,OAAO,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAM5B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAMnC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC,8BAA8B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAChE;AAOD,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,iBAAiB,CAEpE;AAOD,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EACpD,mBAAmB,EAAE,MAAM,GAC1B,iBAAiB,CA2BnB;AA2BD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAOhF;AAOD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAwC5F"}
|
package/dist/seo/url-builder.js
CHANGED
|
@@ -2,7 +2,10 @@ import { StorefrontError } from '../errors.js';
|
|
|
2
2
|
import { toDnsLabel } from './locale-tag.js';
|
|
3
3
|
import { normalizeProductPathSegment } from './product-path.js';
|
|
4
4
|
export function readUrlStrategy(ctx) {
|
|
5
|
-
|
|
5
|
+
return urlStrategyFromChannel(ctx.channel.customFields, ctx.channel.defaultLanguageCode);
|
|
6
|
+
}
|
|
7
|
+
export function urlStrategyFromChannel(customFields, defaultLanguageCode) {
|
|
8
|
+
const cf = customFields ?? {};
|
|
6
9
|
const storefrontUrl = typeof cf.storefrontUrl === 'string' ? cf.storefrontUrl.trim() : '';
|
|
7
10
|
if (!storefrontUrl) {
|
|
8
11
|
throw new StorefrontError('Channel.customFields.storefrontUrl is not set. Configure it in the dashboard SEO settings before emitting canonical URLs.', 'cms');
|
|
@@ -13,7 +16,7 @@ export function readUrlStrategy(ctx) {
|
|
|
13
16
|
storefrontUrl: storefrontUrl.replace(/\/+$/, ''),
|
|
14
17
|
urlLocaleStrategy,
|
|
15
18
|
urlLocalePrefixDefault: cf.urlLocalePrefixDefault === true,
|
|
16
|
-
defaultLanguageCode
|
|
19
|
+
defaultLanguageCode,
|
|
17
20
|
productPathSegment: normalizeProductPathSegment(typeof cf.productPathSegment === 'string' ? cf.productPathSegment : null),
|
|
18
21
|
commercePathPrefix: typeof cf.commercePathPrefix === 'string' ? cf.commercePathPrefix : null,
|
|
19
22
|
commercePathPrefixTranslations: parsePrefixTranslations(typeof cf.commercePathPrefixTranslations === 'string'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-builder.js","sourceRoot":"","sources":["../../src/seo/url-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AA6BhE,MAAM,UAAU,eAAe,CAAC,GAAiB;IAC/C,
|
|
1
|
+
{"version":3,"file":"url-builder.js","sourceRoot":"","sources":["../../src/seo/url-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -4,7 +4,11 @@ export interface RetryConfig {
|
|
|
4
4
|
}
|
|
5
5
|
export interface RequestOptions {
|
|
6
6
|
signal?: AbortSignal;
|
|
7
|
+
cacheTags?: readonly string[];
|
|
7
8
|
}
|
|
9
|
+
export type CacheTagResolver = (tags: readonly string[], request: {
|
|
10
|
+
readonly operation: string;
|
|
11
|
+
}) => readonly string[];
|
|
8
12
|
export type OrderScope = 'CONSUMER' | 'TRADE';
|
|
9
13
|
export interface StorefrontClientConfig {
|
|
10
14
|
storeCode: string;
|
|
@@ -19,6 +23,7 @@ export interface StorefrontClientConfig {
|
|
|
19
23
|
onAuthCleared?: () => void;
|
|
20
24
|
retry?: RetryConfig;
|
|
21
25
|
orderScope?: OrderScope;
|
|
26
|
+
cacheTags?: boolean | CacheTagResolver;
|
|
22
27
|
}
|
|
23
28
|
export interface ChannelCustomFields {
|
|
24
29
|
maintenanceMode?: boolean;
|
|
@@ -164,6 +169,7 @@ export interface StoreContext {
|
|
|
164
169
|
attempts: number;
|
|
165
170
|
baseDelayMs: number;
|
|
166
171
|
};
|
|
172
|
+
cacheTags?: boolean | CacheTagResolver;
|
|
167
173
|
}
|
|
168
174
|
export interface GraphQLResponse<T = unknown> {
|
|
169
175
|
data: T;
|
|
@@ -1338,6 +1344,9 @@ export interface RouteEntry {
|
|
|
1338
1344
|
source?: string;
|
|
1339
1345
|
canonical?: boolean;
|
|
1340
1346
|
}
|
|
1347
|
+
export interface ResolvedRoute extends RouteEntry {
|
|
1348
|
+
readonly cacheTags: readonly string[];
|
|
1349
|
+
}
|
|
1341
1350
|
export interface RoutesMetadata {
|
|
1342
1351
|
default_language: string;
|
|
1343
1352
|
available_languages: string[];
|
|
@@ -1981,6 +1990,7 @@ export interface CommerceModule {
|
|
|
1981
1990
|
getProductById(id: string, options?: RequestOptions): Promise<Product>;
|
|
1982
1991
|
getProducts(listOptions?: ProductListOptions, options?: RequestOptions): Promise<PaginatedList<ProductSummary>>;
|
|
1983
1992
|
getProductsInCollection(collectionSlug: string, listOptions?: CollectionProductListOptions, options?: RequestOptions): Promise<PaginatedList<CollectionProductSummary>>;
|
|
1993
|
+
getProductsInCollectionById(collectionId: string, listOptions?: CollectionProductListOptions, options?: RequestOptions): Promise<PaginatedList<CollectionProductSummary>>;
|
|
1984
1994
|
getFacets(options?: RequestOptions): Promise<Facet[]>;
|
|
1985
1995
|
searchProducts(input: SearchInput, options?: RequestOptions): Promise<SearchResult>;
|
|
1986
1996
|
getActiveOrder(): Promise<Order | null>;
|
|
@@ -2022,6 +2032,7 @@ export interface CommerceModule {
|
|
|
2022
2032
|
reorder(orderCode: string): Promise<ReorderResult>;
|
|
2023
2033
|
getCollections(listOptions?: CollectionListOptions, options?: RequestOptions): Promise<Collection[]>;
|
|
2024
2034
|
getCollection(slug: string, options?: RequestOptions): Promise<CollectionDetail>;
|
|
2035
|
+
getCollectionById(id: string, options?: RequestOptions): Promise<CollectionDetail>;
|
|
2025
2036
|
updateCustomer(input: UpdateCustomerInput): Promise<Customer>;
|
|
2026
2037
|
updatePassword(currentPassword: string, newPassword: string): Promise<void>;
|
|
2027
2038
|
requestPasswordReset(emailAddress: string): Promise<void>;
|
|
@@ -2156,7 +2167,7 @@ export interface ContentModule {
|
|
|
2156
2167
|
}
|
|
2157
2168
|
export interface NavigationModule {
|
|
2158
2169
|
getRoutes(languageCode?: string, options?: RequestOptions): Promise<RoutesResponse>;
|
|
2159
|
-
findRoute(path: string, languageCode?: string, options?: RequestOptions): Promise<
|
|
2170
|
+
findRoute(path: string, languageCode?: string, options?: RequestOptions): Promise<ResolvedRoute | null>;
|
|
2160
2171
|
getRoutesByType(type: 'cms' | 'collection' | 'product', languageCode?: string, options?: RequestOptions): Promise<RouteEntry[]>;
|
|
2161
2172
|
}
|
|
2162
2173
|
export interface PricingModule {
|