@pvh-afl/core 1.0.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 +97 -0
- package/dist/cache/cache.module.d.ts +3 -0
- package/dist/cache/cache.module.d.ts.map +1 -0
- package/dist/cache/cache.module.js +17 -0
- package/dist/cache/cache.module.js.map +1 -0
- package/dist/cache/cache.service.d.ts +38 -0
- package/dist/cache/cache.service.d.ts.map +1 -0
- package/dist/cache/cache.service.js +173 -0
- package/dist/cache/cache.service.js.map +1 -0
- package/dist/cache/index.d.ts +3 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +6 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/common/guards/tenant.guard.d.ts +8 -0
- package/dist/common/guards/tenant.guard.d.ts.map +1 -0
- package/dist/common/guards/tenant.guard.js +44 -0
- package/dist/common/guards/tenant.guard.js.map +1 -0
- package/dist/common/index.d.ts +3 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +6 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/logger.d.ts +7 -0
- package/dist/common/logger.d.ts.map +1 -0
- package/dist/common/logger.js +28 -0
- package/dist/common/logger.js.map +1 -0
- package/dist/config/config.module.d.ts +3 -0
- package/dist/config/config.module.d.ts.map +1 -0
- package/dist/config/config.module.js +17 -0
- package/dist/config/config.module.js.map +1 -0
- package/dist/config/config.service.d.ts +55 -0
- package/dist/config/config.service.d.ts.map +1 -0
- package/dist/config/config.service.js +212 -0
- package/dist/config/config.service.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/base-integration.service.d.ts +59 -0
- package/dist/integrations/base-integration.service.d.ts.map +1 -0
- package/dist/integrations/base-integration.service.js +227 -0
- package/dist/integrations/base-integration.service.js.map +1 -0
- package/dist/integrations/commerce/commerce.types.d.ts +301 -0
- package/dist/integrations/commerce/commerce.types.d.ts.map +1 -0
- package/dist/integrations/commerce/commerce.types.js +9 -0
- package/dist/integrations/commerce/commerce.types.js.map +1 -0
- package/dist/integrations/commerce/index.d.ts +4 -0
- package/dist/integrations/commerce/index.d.ts.map +1 -0
- package/dist/integrations/commerce/index.js +7 -0
- package/dist/integrations/commerce/index.js.map +1 -0
- package/dist/integrations/commerce/shopify-admin.service.d.ts +35 -0
- package/dist/integrations/commerce/shopify-admin.service.d.ts.map +1 -0
- package/dist/integrations/commerce/shopify-admin.service.js +269 -0
- package/dist/integrations/commerce/shopify-admin.service.js.map +1 -0
- package/dist/integrations/commerce/shopify.service.d.ts +43 -0
- package/dist/integrations/commerce/shopify.service.d.ts.map +1 -0
- package/dist/integrations/commerce/shopify.service.js +735 -0
- package/dist/integrations/commerce/shopify.service.js.map +1 -0
- package/dist/integrations/index.d.ts +9 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +18 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/integration.factory.d.ts +23 -0
- package/dist/integrations/integration.factory.d.ts.map +1 -0
- package/dist/integrations/integration.factory.js +119 -0
- package/dist/integrations/integration.factory.js.map +1 -0
- package/dist/integrations/integration.types.d.ts +80 -0
- package/dist/integrations/integration.types.d.ts.map +1 -0
- package/dist/integrations/integration.types.js +9 -0
- package/dist/integrations/integration.types.js.map +1 -0
- package/dist/integrations/integrations.module.d.ts +3 -0
- package/dist/integrations/integrations.module.d.ts.map +1 -0
- package/dist/integrations/integrations.module.js +46 -0
- package/dist/integrations/integrations.module.js.map +1 -0
- package/dist/integrations/loyalty/capillary-auth.service.d.ts +30 -0
- package/dist/integrations/loyalty/capillary-auth.service.d.ts.map +1 -0
- package/dist/integrations/loyalty/capillary-auth.service.js +112 -0
- package/dist/integrations/loyalty/capillary-auth.service.js.map +1 -0
- package/dist/integrations/loyalty/capillary-coupon.service.d.ts +24 -0
- package/dist/integrations/loyalty/capillary-coupon.service.d.ts.map +1 -0
- package/dist/integrations/loyalty/capillary-coupon.service.js +383 -0
- package/dist/integrations/loyalty/capillary-coupon.service.js.map +1 -0
- package/dist/integrations/loyalty/capillary.types.d.ts +218 -0
- package/dist/integrations/loyalty/capillary.types.d.ts.map +1 -0
- package/dist/integrations/loyalty/capillary.types.js +21 -0
- package/dist/integrations/loyalty/capillary.types.js.map +1 -0
- package/dist/integrations/loyalty/index.d.ts +4 -0
- package/dist/integrations/loyalty/index.d.ts.map +1 -0
- package/dist/integrations/loyalty/index.js +7 -0
- package/dist/integrations/loyalty/index.js.map +1 -0
- package/dist/integrations/oms/index.d.ts +4 -0
- package/dist/integrations/oms/index.d.ts.map +1 -0
- package/dist/integrations/oms/index.js +7 -0
- package/dist/integrations/oms/index.js.map +1 -0
- package/dist/integrations/oms/omuni-auth.service.d.ts +29 -0
- package/dist/integrations/oms/omuni-auth.service.d.ts.map +1 -0
- package/dist/integrations/oms/omuni-auth.service.js +164 -0
- package/dist/integrations/oms/omuni-auth.service.js.map +1 -0
- package/dist/integrations/oms/omuni.service.d.ts +17 -0
- package/dist/integrations/oms/omuni.service.d.ts.map +1 -0
- package/dist/integrations/oms/omuni.service.js +128 -0
- package/dist/integrations/oms/omuni.service.js.map +1 -0
- package/dist/integrations/oms/omuni.types.d.ts +65 -0
- package/dist/integrations/oms/omuni.types.d.ts.map +1 -0
- package/dist/integrations/oms/omuni.types.js +3 -0
- package/dist/integrations/oms/omuni.types.js.map +1 -0
- package/dist/integrations/shopify-theme/index.d.ts +3 -0
- package/dist/integrations/shopify-theme/index.d.ts.map +1 -0
- package/dist/integrations/shopify-theme/index.js +6 -0
- package/dist/integrations/shopify-theme/index.js.map +1 -0
- package/dist/integrations/shopify-theme/shopify-theme.module.d.ts +3 -0
- package/dist/integrations/shopify-theme/shopify-theme.module.d.ts.map +1 -0
- package/dist/integrations/shopify-theme/shopify-theme.module.js +16 -0
- package/dist/integrations/shopify-theme/shopify-theme.module.js.map +1 -0
- package/dist/integrations/shopify-theme/shopify-theme.service.d.ts +35 -0
- package/dist/integrations/shopify-theme/shopify-theme.service.d.ts.map +1 -0
- package/dist/integrations/shopify-theme/shopify-theme.service.js +155 -0
- package/dist/integrations/shopify-theme/shopify-theme.service.js.map +1 -0
- package/dist/queue/index.d.ts +3 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +8 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/queue.module.d.ts +3 -0
- package/dist/queue/queue.module.d.ts.map +1 -0
- package/dist/queue/queue.module.js +17 -0
- package/dist/queue/queue.module.js.map +1 -0
- package/dist/queue/queue.service.d.ts +20 -0
- package/dist/queue/queue.service.d.ts.map +1 -0
- package/dist/queue/queue.service.js +119 -0
- package/dist/queue/queue.service.js.map +1 -0
- package/dist/theme/header-content.service.d.ts +142 -0
- package/dist/theme/header-content.service.d.ts.map +1 -0
- package/dist/theme/header-content.service.js +626 -0
- package/dist/theme/header-content.service.js.map +1 -0
- package/dist/theme/index.d.ts +5 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +17 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-content.interfaces.d.ts +79 -0
- package/dist/theme/theme-content.interfaces.d.ts.map +1 -0
- package/dist/theme/theme-content.interfaces.js +14 -0
- package/dist/theme/theme-content.interfaces.js.map +1 -0
- package/dist/theme/theme-content.service.d.ts +125 -0
- package/dist/theme/theme-content.service.d.ts.map +1 -0
- package/dist/theme/theme-content.service.js +738 -0
- package/dist/theme/theme-content.service.js.map +1 -0
- package/dist/theme/theme.module.d.ts +46 -0
- package/dist/theme/theme.module.d.ts.map +1 -0
- package/dist/theme/theme.module.js +76 -0
- package/dist/theme/theme.module.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,626 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HeaderContentService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const cache_service_1 = require("../cache/cache.service");
|
|
7
|
+
const config_service_1 = require("../config/config.service");
|
|
8
|
+
const shopify_theme_1 = require("../integrations/shopify-theme");
|
|
9
|
+
const logger_1 = require("../common/logger");
|
|
10
|
+
// GraphQL Queries
|
|
11
|
+
const MENU_QUERY = `
|
|
12
|
+
query Menu($handle: String!) {
|
|
13
|
+
menu(handle: $handle) {
|
|
14
|
+
items {
|
|
15
|
+
title
|
|
16
|
+
url
|
|
17
|
+
type
|
|
18
|
+
resourceId
|
|
19
|
+
items {
|
|
20
|
+
title
|
|
21
|
+
url
|
|
22
|
+
type
|
|
23
|
+
resourceId
|
|
24
|
+
items {
|
|
25
|
+
title
|
|
26
|
+
url
|
|
27
|
+
type
|
|
28
|
+
resourceId
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
`;
|
|
35
|
+
const METAOBJECT_QUERY = `
|
|
36
|
+
query Metaobject($handle: String!, $type: String!) {
|
|
37
|
+
metaobject(handle: { handle: $handle, type: $type }) {
|
|
38
|
+
fields {
|
|
39
|
+
key
|
|
40
|
+
value
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
`;
|
|
45
|
+
const PROMO_METAOBJECT_QUERY = `
|
|
46
|
+
query PromoMetaobject($handle: String!) {
|
|
47
|
+
metaobject(handle: { type: "megamenu_promo", handle: $handle }) {
|
|
48
|
+
handle
|
|
49
|
+
fields {
|
|
50
|
+
key
|
|
51
|
+
value
|
|
52
|
+
references(first: 50) {
|
|
53
|
+
edges {
|
|
54
|
+
node {
|
|
55
|
+
... on Metaobject {
|
|
56
|
+
fields {
|
|
57
|
+
key
|
|
58
|
+
value
|
|
59
|
+
reference {
|
|
60
|
+
... on MediaImage {
|
|
61
|
+
image {
|
|
62
|
+
url
|
|
63
|
+
altText
|
|
64
|
+
width
|
|
65
|
+
height
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
`;
|
|
78
|
+
let HeaderContentService = class HeaderContentService {
|
|
79
|
+
cacheService;
|
|
80
|
+
configService;
|
|
81
|
+
shopifyThemeService;
|
|
82
|
+
refreshInProgress = new Set();
|
|
83
|
+
constructor(cacheService, configService, shopifyThemeService) {
|
|
84
|
+
this.cacheService = cacheService;
|
|
85
|
+
this.configService = configService;
|
|
86
|
+
this.shopifyThemeService = shopifyThemeService;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Build cache key for header content.
|
|
90
|
+
* Pattern: ${brand}:header:${menuHandle}
|
|
91
|
+
*/
|
|
92
|
+
buildCacheKey(brand, menuHandle) {
|
|
93
|
+
return `${brand}:header:${menuHandle}`;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get header content with stale-while-revalidate semantics.
|
|
97
|
+
* Returns cached data immediately, triggers background refresh if stale.
|
|
98
|
+
* On cache miss, fetches on-demand (synchronously).
|
|
99
|
+
*/
|
|
100
|
+
async getHeaderContent(brand, menuHandle) {
|
|
101
|
+
const handle = menuHandle || 'main-menu';
|
|
102
|
+
const cacheKey = this.buildCacheKey(brand, handle);
|
|
103
|
+
const cached = await this.cacheService.get(cacheKey);
|
|
104
|
+
// Cache HIT
|
|
105
|
+
if (cached) {
|
|
106
|
+
if (cached.isStale) {
|
|
107
|
+
logger_1.logger.info('Header content is stale, triggering background refresh', {
|
|
108
|
+
brand,
|
|
109
|
+
cacheKey,
|
|
110
|
+
});
|
|
111
|
+
// Background refresh - fire and forget
|
|
112
|
+
this.refreshHeaderInBackground(brand, cacheKey);
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
success: true,
|
|
116
|
+
data: cached.data,
|
|
117
|
+
isStale: cached.isStale,
|
|
118
|
+
triggeredRefresh: cached.isStale,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
// Cache MISS - fetch on-demand (sync)
|
|
122
|
+
logger_1.logger.info('Header content cache miss, fetching fresh data', {
|
|
123
|
+
brand,
|
|
124
|
+
cacheKey,
|
|
125
|
+
});
|
|
126
|
+
const content = await this.fetchHeaderContentFresh(brand);
|
|
127
|
+
if (!content) {
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
error: {
|
|
131
|
+
code: 'HEADER_FETCH_FAILED',
|
|
132
|
+
message: 'Failed to fetch header content',
|
|
133
|
+
},
|
|
134
|
+
isStale: false,
|
|
135
|
+
triggeredRefresh: false,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
success: true,
|
|
140
|
+
data: content,
|
|
141
|
+
isStale: false,
|
|
142
|
+
triggeredRefresh: false,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Fetch header-group.json from Shopify and process header content.
|
|
147
|
+
* Used for both cache miss and background refresh.
|
|
148
|
+
*/
|
|
149
|
+
async fetchHeaderContentFresh(brand) {
|
|
150
|
+
const rawHeaderGroup = await this.shopifyThemeService.fetchThemeFile(brand, 'sections/header-group.json');
|
|
151
|
+
if (!rawHeaderGroup) {
|
|
152
|
+
logger_1.logger.error('Failed to fetch header-group.json', { brand });
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
return this.fetchAndCacheHeaderContent(brand, rawHeaderGroup);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Background refresh with deduplication.
|
|
159
|
+
* Prevents concurrent refreshes for the same cache key.
|
|
160
|
+
*/
|
|
161
|
+
async refreshHeaderInBackground(brand, cacheKey) {
|
|
162
|
+
if (this.refreshInProgress.has(cacheKey)) {
|
|
163
|
+
logger_1.logger.info('Header refresh already in progress, skipping', { cacheKey });
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
this.refreshInProgress.add(cacheKey);
|
|
167
|
+
try {
|
|
168
|
+
await this.fetchHeaderContentFresh(brand);
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
this.refreshInProgress.delete(cacheKey);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Fetch menu items and metaobject, process, and cache the header content.
|
|
176
|
+
* Fails entirely if any API call fails - no partial caching.
|
|
177
|
+
*/
|
|
178
|
+
async fetchAndCacheHeaderContent(brand, rawHeaderGroup) {
|
|
179
|
+
// Extract menu handle from header settings
|
|
180
|
+
const headerSection = rawHeaderGroup.sections?.header;
|
|
181
|
+
const menuHandle = headerSection?.settings?.menu;
|
|
182
|
+
if (!menuHandle) {
|
|
183
|
+
logger_1.logger.warn('No menu handle found in header-group.json', { brand });
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
const cacheKey = this.buildCacheKey(brand, menuHandle);
|
|
187
|
+
logger_1.logger.info('Fetching header content', {
|
|
188
|
+
brand,
|
|
189
|
+
menuHandle,
|
|
190
|
+
cacheKey,
|
|
191
|
+
});
|
|
192
|
+
try {
|
|
193
|
+
// Extract mega menu config from header-group.json blocks
|
|
194
|
+
const megaMenuConfig = this.extractMegaMenuConfig(rawHeaderGroup);
|
|
195
|
+
const allPromoHandles = [...new Set([...megaMenuConfig.values()].flat())];
|
|
196
|
+
// Fetch menu, metaobject, and promo data in parallel
|
|
197
|
+
const [menuData, metaobjectData, promoDataMap] = await Promise.all([
|
|
198
|
+
this.fetchMenu(brand, menuHandle),
|
|
199
|
+
this.fetchMenuMetaobject(brand, menuHandle),
|
|
200
|
+
this.fetchAllPromos(brand, allPromoHandles),
|
|
201
|
+
]);
|
|
202
|
+
if (!menuData) {
|
|
203
|
+
logger_1.logger.error('Failed to fetch menu data', { brand, menuHandle });
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
// Metaobject is optional - menu can work without section mappings
|
|
207
|
+
const sectionMappings = metaobjectData
|
|
208
|
+
? this.parseSectionMappings(metaobjectData)
|
|
209
|
+
: new Map();
|
|
210
|
+
// Process and merge the data
|
|
211
|
+
const curatedContent = this.processHeaderContent(rawHeaderGroup, menuHandle, menuData, sectionMappings, megaMenuConfig, promoDataMap);
|
|
212
|
+
// Cache the processed content
|
|
213
|
+
const { defaultTTL, staleTTL } = this.configService.getCacheTTL(brand);
|
|
214
|
+
await this.cacheService.set(cacheKey, curatedContent, defaultTTL, staleTTL);
|
|
215
|
+
logger_1.logger.info('Header content cached', {
|
|
216
|
+
brand,
|
|
217
|
+
menuHandle,
|
|
218
|
+
cacheKey,
|
|
219
|
+
itemCount: curatedContent.menu.items.length,
|
|
220
|
+
});
|
|
221
|
+
return curatedContent;
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
logger_1.logger.error('Failed to fetch and cache header content', {
|
|
225
|
+
brand,
|
|
226
|
+
menuHandle,
|
|
227
|
+
error: error instanceof Error ? error.message : 'Unknown',
|
|
228
|
+
});
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Fetch menu items from Storefront API
|
|
234
|
+
*/
|
|
235
|
+
async fetchMenu(brand, handle) {
|
|
236
|
+
const storefrontToken = this.configService.getShopifyStorefrontToken(brand);
|
|
237
|
+
const graphqlUrl = this.configService.getShopifyGraphqlUrl(brand);
|
|
238
|
+
if (!storefrontToken || !graphqlUrl) {
|
|
239
|
+
logger_1.logger.error('Missing Storefront API configuration', {
|
|
240
|
+
brand,
|
|
241
|
+
hasToken: !!storefrontToken,
|
|
242
|
+
hasUrl: !!graphqlUrl,
|
|
243
|
+
});
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
try {
|
|
247
|
+
const response = await fetch(graphqlUrl, {
|
|
248
|
+
method: 'POST',
|
|
249
|
+
headers: {
|
|
250
|
+
'Content-Type': 'application/json',
|
|
251
|
+
'X-Shopify-Storefront-Access-Token': storefrontToken,
|
|
252
|
+
},
|
|
253
|
+
body: JSON.stringify({
|
|
254
|
+
query: MENU_QUERY,
|
|
255
|
+
variables: { handle },
|
|
256
|
+
}),
|
|
257
|
+
});
|
|
258
|
+
const result = (await response.json());
|
|
259
|
+
if (result.errors?.length) {
|
|
260
|
+
logger_1.logger.error('Storefront API errors fetching menu', {
|
|
261
|
+
brand,
|
|
262
|
+
handle,
|
|
263
|
+
errors: result.errors.map((e) => e.message),
|
|
264
|
+
});
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
const items = result.data?.menu?.items;
|
|
268
|
+
if (!items) {
|
|
269
|
+
logger_1.logger.warn('No menu items found', { brand, handle });
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
logger_1.logger.info('Menu fetched from Storefront API', {
|
|
273
|
+
brand,
|
|
274
|
+
handle,
|
|
275
|
+
itemCount: items.length,
|
|
276
|
+
});
|
|
277
|
+
return items;
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
logger_1.logger.error('Failed to fetch menu from Storefront API', {
|
|
281
|
+
brand,
|
|
282
|
+
handle,
|
|
283
|
+
error: error instanceof Error ? error.message : 'Unknown',
|
|
284
|
+
});
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Fetch menu metaobject from Storefront API
|
|
290
|
+
*/
|
|
291
|
+
async fetchMenuMetaobject(brand, handle) {
|
|
292
|
+
const storefrontToken = this.configService.getShopifyStorefrontToken(brand);
|
|
293
|
+
const graphqlUrl = this.configService.getShopifyGraphqlUrl(brand);
|
|
294
|
+
if (!storefrontToken || !graphqlUrl) {
|
|
295
|
+
logger_1.logger.error('Missing Storefront API configuration for metaobject', {
|
|
296
|
+
brand,
|
|
297
|
+
hasToken: !!storefrontToken,
|
|
298
|
+
hasUrl: !!graphqlUrl,
|
|
299
|
+
});
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
try {
|
|
303
|
+
const response = await fetch(graphqlUrl, {
|
|
304
|
+
method: 'POST',
|
|
305
|
+
headers: {
|
|
306
|
+
'Content-Type': 'application/json',
|
|
307
|
+
'X-Shopify-Storefront-Access-Token': storefrontToken,
|
|
308
|
+
},
|
|
309
|
+
body: JSON.stringify({
|
|
310
|
+
query: METAOBJECT_QUERY,
|
|
311
|
+
variables: { handle, type: 'menu' },
|
|
312
|
+
}),
|
|
313
|
+
});
|
|
314
|
+
const result = (await response.json());
|
|
315
|
+
if (result.errors?.length) {
|
|
316
|
+
logger_1.logger.error('Storefront API errors fetching metaobject', {
|
|
317
|
+
brand,
|
|
318
|
+
handle,
|
|
319
|
+
errors: result.errors.map((e) => e.message),
|
|
320
|
+
});
|
|
321
|
+
return null;
|
|
322
|
+
}
|
|
323
|
+
const fields = result.data?.metaobject?.fields;
|
|
324
|
+
if (!fields) {
|
|
325
|
+
logger_1.logger.warn('No metaobject fields found', { brand, handle });
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
logger_1.logger.info('Menu metaobject fetched from Storefront API', {
|
|
329
|
+
brand,
|
|
330
|
+
handle,
|
|
331
|
+
fieldCount: fields.length,
|
|
332
|
+
});
|
|
333
|
+
return fields;
|
|
334
|
+
}
|
|
335
|
+
catch (error) {
|
|
336
|
+
logger_1.logger.error('Failed to fetch menu metaobject from Storefront API', {
|
|
337
|
+
brand,
|
|
338
|
+
handle,
|
|
339
|
+
error: error instanceof Error ? error.message : 'Unknown',
|
|
340
|
+
});
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Parse section mappings from metaobject JSON field
|
|
346
|
+
*/
|
|
347
|
+
parseSectionMappings(fields) {
|
|
348
|
+
const mappings = new Map();
|
|
349
|
+
const jsonField = fields.find((f) => f.key === 'json');
|
|
350
|
+
if (!jsonField?.value) {
|
|
351
|
+
return mappings;
|
|
352
|
+
}
|
|
353
|
+
try {
|
|
354
|
+
const parsed = JSON.parse(jsonField.value);
|
|
355
|
+
for (const [, mapping] of Object.entries(parsed)) {
|
|
356
|
+
if (mapping.handle && Array.isArray(mapping.sections)) {
|
|
357
|
+
mappings.set(mapping.handle, mapping.sections);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
logger_1.logger.info('Parsed section mappings', {
|
|
361
|
+
count: mappings.size,
|
|
362
|
+
handles: Array.from(mappings.keys()),
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
catch (error) {
|
|
366
|
+
logger_1.logger.error('Failed to parse metaobject JSON field', {
|
|
367
|
+
error: error instanceof Error ? error.message : 'Unknown',
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
return mappings;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Process and merge header content
|
|
374
|
+
*/
|
|
375
|
+
processHeaderContent(rawHeaderGroup, menuHandle, menuItems, sectionMappings, megaMenuConfig, promoDataMap) {
|
|
376
|
+
// Extract header settings (excluding the menu handle since we have the full menu)
|
|
377
|
+
const headerSection = rawHeaderGroup.sections?.header;
|
|
378
|
+
const headerSettings = headerSection?.settings
|
|
379
|
+
? { ...headerSection.settings }
|
|
380
|
+
: {};
|
|
381
|
+
// Curate menu items with section mappings and mega menu data
|
|
382
|
+
const curatedItems = this.curateMenuItems(menuItems, sectionMappings, megaMenuConfig, promoDataMap);
|
|
383
|
+
return {
|
|
384
|
+
headerSettings,
|
|
385
|
+
menu: {
|
|
386
|
+
handle: menuHandle,
|
|
387
|
+
items: curatedItems,
|
|
388
|
+
},
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Recursively curate menu items and attach section mappings and mega menus
|
|
393
|
+
*/
|
|
394
|
+
curateMenuItems(items, sectionMappings, megaMenuConfig, promoDataMap) {
|
|
395
|
+
return items.map((item) => {
|
|
396
|
+
const curated = {
|
|
397
|
+
title: item.title,
|
|
398
|
+
url: item.url,
|
|
399
|
+
type: item.type,
|
|
400
|
+
resourceId: item.resourceId,
|
|
401
|
+
};
|
|
402
|
+
// Extract handle from URL to match section mappings
|
|
403
|
+
const urlHandle = this.extractHandleFromUrl(item.url);
|
|
404
|
+
if (urlHandle && sectionMappings.has(urlHandle)) {
|
|
405
|
+
curated.sections = sectionMappings.get(urlHandle);
|
|
406
|
+
}
|
|
407
|
+
// Get promos for this parent item
|
|
408
|
+
const promoHandles = megaMenuConfig.get(item.title);
|
|
409
|
+
const parentPromos = promoHandles
|
|
410
|
+
?.map((h) => promoDataMap.get(h))
|
|
411
|
+
.filter((p) => p !== undefined) ?? [];
|
|
412
|
+
// Build categoryTitle -> promo map for child matching
|
|
413
|
+
const promoByCategoryTitle = new Map();
|
|
414
|
+
for (const promo of parentPromos) {
|
|
415
|
+
if (promo.categoryTitle) {
|
|
416
|
+
promoByCategoryTitle.set(promo.categoryTitle, promo);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
// Process children and attach matching promos by categoryTitle
|
|
420
|
+
if (item.items && item.items.length > 0) {
|
|
421
|
+
curated.items = item.items.map((child) => {
|
|
422
|
+
const curatedChild = this.curateMenuItem(child, sectionMappings);
|
|
423
|
+
// Match child title to promo categoryTitle
|
|
424
|
+
const matchingPromo = promoByCategoryTitle.get(child.title);
|
|
425
|
+
if (matchingPromo) {
|
|
426
|
+
curatedChild.megaMenu = { promos: [matchingPromo] };
|
|
427
|
+
}
|
|
428
|
+
return curatedChild;
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
return curated;
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Curate a single menu item (without mega menu logic)
|
|
436
|
+
*/
|
|
437
|
+
curateMenuItem(item, sectionMappings) {
|
|
438
|
+
const curated = {
|
|
439
|
+
title: item.title,
|
|
440
|
+
url: item.url,
|
|
441
|
+
type: item.type,
|
|
442
|
+
resourceId: item.resourceId,
|
|
443
|
+
};
|
|
444
|
+
const urlHandle = this.extractHandleFromUrl(item.url);
|
|
445
|
+
if (urlHandle && sectionMappings.has(urlHandle)) {
|
|
446
|
+
curated.sections = sectionMappings.get(urlHandle);
|
|
447
|
+
}
|
|
448
|
+
// Process nested items (third level doesn't get mega menus)
|
|
449
|
+
if (item.items && item.items.length > 0) {
|
|
450
|
+
curated.items = item.items.map((child) => this.curateMenuItem(child, sectionMappings));
|
|
451
|
+
}
|
|
452
|
+
return curated;
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Extract handle from URL path
|
|
456
|
+
*/
|
|
457
|
+
extractHandleFromUrl(url) {
|
|
458
|
+
if (!url)
|
|
459
|
+
return null;
|
|
460
|
+
try {
|
|
461
|
+
const path = url.startsWith('http') ? new URL(url).pathname : url;
|
|
462
|
+
const segments = path.split('/').filter(Boolean);
|
|
463
|
+
return segments[segments.length - 1] || null;
|
|
464
|
+
}
|
|
465
|
+
catch {
|
|
466
|
+
return null;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Extract mega menu configuration from header-group.json blocks.
|
|
471
|
+
*/
|
|
472
|
+
extractMegaMenuConfig(rawHeaderGroup) {
|
|
473
|
+
const config = new Map();
|
|
474
|
+
for (const section of Object.values(rawHeaderGroup.sections || {})) {
|
|
475
|
+
if (!section.blocks)
|
|
476
|
+
continue;
|
|
477
|
+
for (const block of Object.values(section.blocks)) {
|
|
478
|
+
if (block.type === 'mega_menu' && block.settings) {
|
|
479
|
+
const menuItem = block.settings.menu_item;
|
|
480
|
+
const promos = block.settings.promos;
|
|
481
|
+
if (menuItem && promos?.length) {
|
|
482
|
+
config.set(menuItem, promos);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
if (config.size > 0) {
|
|
488
|
+
logger_1.logger.info('Extracted mega menu config', {
|
|
489
|
+
menuItems: Array.from(config.keys()),
|
|
490
|
+
totalPromos: Array.from(config.values()).flat().length,
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
return config;
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Fetch a single promo metaobject from Storefront API
|
|
497
|
+
*/
|
|
498
|
+
async fetchPromoMetaobject(brand, handle) {
|
|
499
|
+
const storefrontToken = this.configService.getShopifyStorefrontToken(brand);
|
|
500
|
+
const graphqlUrl = this.configService.getShopifyGraphqlUrl(brand);
|
|
501
|
+
if (!storefrontToken || !graphqlUrl) {
|
|
502
|
+
logger_1.logger.error('Missing Storefront API configuration for promo metaobject', {
|
|
503
|
+
brand,
|
|
504
|
+
handle,
|
|
505
|
+
});
|
|
506
|
+
return null;
|
|
507
|
+
}
|
|
508
|
+
try {
|
|
509
|
+
const response = await fetch(graphqlUrl, {
|
|
510
|
+
method: 'POST',
|
|
511
|
+
headers: {
|
|
512
|
+
'Content-Type': 'application/json',
|
|
513
|
+
'X-Shopify-Storefront-Access-Token': storefrontToken,
|
|
514
|
+
},
|
|
515
|
+
body: JSON.stringify({
|
|
516
|
+
query: PROMO_METAOBJECT_QUERY,
|
|
517
|
+
variables: { handle },
|
|
518
|
+
}),
|
|
519
|
+
});
|
|
520
|
+
const result = (await response.json());
|
|
521
|
+
if (result.errors?.length) {
|
|
522
|
+
logger_1.logger.error('Storefront API errors fetching promo metaobject', {
|
|
523
|
+
brand,
|
|
524
|
+
handle,
|
|
525
|
+
errors: result.errors.map((e) => e.message),
|
|
526
|
+
});
|
|
527
|
+
return null;
|
|
528
|
+
}
|
|
529
|
+
const metaobject = result.data?.metaobject;
|
|
530
|
+
if (!metaobject) {
|
|
531
|
+
logger_1.logger.warn('No promo metaobject found', { brand, handle });
|
|
532
|
+
return null;
|
|
533
|
+
}
|
|
534
|
+
return this.parsePromoMetaobject(metaobject);
|
|
535
|
+
}
|
|
536
|
+
catch (error) {
|
|
537
|
+
logger_1.logger.error('Failed to fetch promo metaobject from Storefront API', {
|
|
538
|
+
brand,
|
|
539
|
+
handle,
|
|
540
|
+
error: error instanceof Error ? error.message : 'Unknown',
|
|
541
|
+
});
|
|
542
|
+
return null;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Parse promo metaobject response into MegaMenuPromoData
|
|
547
|
+
*/
|
|
548
|
+
parsePromoMetaobject(metaobject) {
|
|
549
|
+
if (!metaobject)
|
|
550
|
+
return null;
|
|
551
|
+
const categoryTitleField = metaobject.fields.find((f) => f.key === 'category_title');
|
|
552
|
+
const cardsField = metaobject.fields.find((f) => f.key === 'cards');
|
|
553
|
+
const cards = [];
|
|
554
|
+
if (cardsField?.references?.edges) {
|
|
555
|
+
for (const edge of cardsField.references.edges) {
|
|
556
|
+
const card = this.parsePromoCard(edge.node.fields);
|
|
557
|
+
if (card) {
|
|
558
|
+
cards.push(card);
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
return {
|
|
563
|
+
categoryTitle: categoryTitleField?.value || undefined,
|
|
564
|
+
cards,
|
|
565
|
+
};
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* Parse a promo card from metaobject fields
|
|
569
|
+
*/
|
|
570
|
+
parsePromoCard(fields) {
|
|
571
|
+
const titleField = fields.find((f) => f.key === 'title');
|
|
572
|
+
const linkField = fields.find((f) => f.key === 'link');
|
|
573
|
+
const imageField = fields.find((f) => f.key === 'image');
|
|
574
|
+
if (!titleField?.value || !linkField?.value) {
|
|
575
|
+
return null;
|
|
576
|
+
}
|
|
577
|
+
const card = {
|
|
578
|
+
title: titleField.value,
|
|
579
|
+
link: linkField.value,
|
|
580
|
+
};
|
|
581
|
+
if (imageField?.reference?.image) {
|
|
582
|
+
card.image = {
|
|
583
|
+
url: imageField.reference.image.url,
|
|
584
|
+
altText: imageField.reference.image.altText,
|
|
585
|
+
width: imageField.reference.image.width,
|
|
586
|
+
height: imageField.reference.image.height,
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
return card;
|
|
590
|
+
}
|
|
591
|
+
/**
|
|
592
|
+
* Fetch all promo metaobjects in parallel
|
|
593
|
+
*/
|
|
594
|
+
async fetchAllPromos(brand, handles) {
|
|
595
|
+
const promoMap = new Map();
|
|
596
|
+
if (handles.length === 0) {
|
|
597
|
+
return promoMap;
|
|
598
|
+
}
|
|
599
|
+
logger_1.logger.info('Fetching promo metaobjects', {
|
|
600
|
+
brand,
|
|
601
|
+
count: handles.length,
|
|
602
|
+
handles,
|
|
603
|
+
});
|
|
604
|
+
const results = await Promise.all(handles.map((handle) => this.fetchPromoMetaobject(brand, handle)));
|
|
605
|
+
for (let i = 0; i < handles.length; i++) {
|
|
606
|
+
const promo = results[i];
|
|
607
|
+
if (promo) {
|
|
608
|
+
promoMap.set(handles[i], promo);
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
logger_1.logger.info('Fetched promo metaobjects', {
|
|
612
|
+
brand,
|
|
613
|
+
requested: handles.length,
|
|
614
|
+
found: promoMap.size,
|
|
615
|
+
});
|
|
616
|
+
return promoMap;
|
|
617
|
+
}
|
|
618
|
+
};
|
|
619
|
+
exports.HeaderContentService = HeaderContentService;
|
|
620
|
+
exports.HeaderContentService = HeaderContentService = tslib_1.__decorate([
|
|
621
|
+
(0, common_1.Injectable)(),
|
|
622
|
+
tslib_1.__metadata("design:paramtypes", [cache_service_1.CacheService,
|
|
623
|
+
config_service_1.ConfigService,
|
|
624
|
+
shopify_theme_1.ShopifyThemeService])
|
|
625
|
+
], HeaderContentService);
|
|
626
|
+
//# sourceMappingURL=header-content.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-content.service.js","sourceRoot":"","sources":["../../src/theme/header-content.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { ThemeModule, ThemeModuleOptions } from './theme.module';
|
|
2
|
+
export { ThemeContentService, CuratedThemeContent, ThemeContentResult, } from './theme-content.service';
|
|
3
|
+
export { HeaderContentService, CuratedMenuItem, CuratedHeaderContent, HeaderContentResult, HeaderError, } from './header-content.service';
|
|
4
|
+
export { IThemeCollectionService, IThemeProductService, ThemeProduct, ThemeCollection, ThemeMoney, ThemeImage, THEME_COLLECTION_SERVICE, THEME_PRODUCT_SERVICE, } from './theme-content.interfaces';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,UAAU,EACV,UAAU,EACV,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.THEME_PRODUCT_SERVICE = exports.THEME_COLLECTION_SERVICE = exports.HeaderContentService = exports.ThemeContentService = exports.ThemeModule = void 0;
|
|
4
|
+
// Theme module
|
|
5
|
+
var theme_module_1 = require("./theme.module");
|
|
6
|
+
Object.defineProperty(exports, "ThemeModule", { enumerable: true, get: function () { return theme_module_1.ThemeModule; } });
|
|
7
|
+
// Theme content service
|
|
8
|
+
var theme_content_service_1 = require("./theme-content.service");
|
|
9
|
+
Object.defineProperty(exports, "ThemeContentService", { enumerable: true, get: function () { return theme_content_service_1.ThemeContentService; } });
|
|
10
|
+
// Header content service
|
|
11
|
+
var header_content_service_1 = require("./header-content.service");
|
|
12
|
+
Object.defineProperty(exports, "HeaderContentService", { enumerable: true, get: function () { return header_content_service_1.HeaderContentService; } });
|
|
13
|
+
// Interfaces for dependency injection
|
|
14
|
+
var theme_content_interfaces_1 = require("./theme-content.interfaces");
|
|
15
|
+
Object.defineProperty(exports, "THEME_COLLECTION_SERVICE", { enumerable: true, get: function () { return theme_content_interfaces_1.THEME_COLLECTION_SERVICE; } });
|
|
16
|
+
Object.defineProperty(exports, "THEME_PRODUCT_SERVICE", { enumerable: true, get: function () { return theme_content_interfaces_1.THEME_PRODUCT_SERVICE; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|