@pvh-afl/graphql 1.1.17 → 1.1.18

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.
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.module.d.ts","sourceRoot":"","sources":["../src/graphql.module.ts"],"names":[],"mappings":"AAuBA,qBA4Ba,aAAa;CAAG"}
1
+ {"version":3,"file":"graphql.module.d.ts","sourceRoot":"","sources":["../src/graphql.module.ts"],"names":[],"mappings":"AAwBA,qBA6Ba,aAAa;CAAG"}
@@ -18,6 +18,7 @@ const serviceability_module_1 = require("./serviceability/serviceability.module"
18
18
  const store_locator_module_1 = require("./store-locator/store-locator.module");
19
19
  const order_tracking_module_1 = require("./order-tracking/order-tracking.module");
20
20
  const loyalty_module_1 = require("./loyalty/loyalty.module");
21
+ const static_pages_module_1 = require("./static-pages/static-pages.module");
21
22
  let GraphqlModule = class GraphqlModule {
22
23
  };
23
24
  exports.GraphqlModule = GraphqlModule;
@@ -48,6 +49,7 @@ exports.GraphqlModule = GraphqlModule = tslib_1.__decorate([
48
49
  store_locator_module_1.StoreLocatorModule,
49
50
  order_tracking_module_1.OrderTrackingModule,
50
51
  loyalty_module_1.LoyaltyModule,
52
+ static_pages_module_1.StaticPagesModule,
51
53
  ],
52
54
  })
53
55
  ], GraphqlModule);
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.module.js","sourceRoot":"","sources":["../src/graphql.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,2CAAkE;AAClE,+BAA4B;AAE5B,6DAAyD;AACzD,sEAAkE;AAClE,oDAAgD;AAChD,gEAA4D;AAC5D,iDAA6C;AAC7C,4EAAuE;AACvE,qFAAgF;AAChF,0DAAsD;AACtD,kFAA8E;AAC9E,+EAA0E;AAC1E,kFAA6E;AAC7E,6DAAyD;AAmClD,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IA5BzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,OAAO,CAAqB;gBACxC,MAAM,EAAE,qBAAY;gBACpB,cAAc,EAAE,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC;gBACrD,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,IAAI;gBACnB,OAAO,EAAE,CAAC,EAAE,GAAG,EAA6B,EAAE,EAAE,CAAC,CAAC;oBAChD,GAAG;oBACH,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,WAAW,EAAE,GAAG,CAAC,WAAW;iBAC7B,CAAC;aACH,CAAC;YACF,8BAAa;YACb,oCAAgB;YAChB,wBAAU;YACV,gCAAc;YACd,sBAAS;YACT,uCAAiB;YACjB,6CAAoB;YACpB,4BAAY;YACZ,4CAAoB;YACpB,yCAAkB;YAClB,2CAAmB;YACnB,8BAAa;SACd;KACF,CAAC;GACW,aAAa,CAAG"}
1
+ {"version":3,"file":"graphql.module.js","sourceRoot":"","sources":["../src/graphql.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,2CAAkE;AAClE,+BAA4B;AAE5B,6DAAyD;AACzD,sEAAkE;AAClE,oDAAgD;AAChD,gEAA4D;AAC5D,iDAA6C;AAC7C,4EAAuE;AACvE,qFAAgF;AAChF,0DAAsD;AACtD,kFAA8E;AAC9E,+EAA0E;AAC1E,kFAA6E;AAC7E,6DAAyD;AACzD,4EAAuE;AAoChE,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IA7BzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,OAAO,CAAqB;gBACxC,MAAM,EAAE,qBAAY;gBACpB,cAAc,EAAE,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC;gBACrD,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,IAAI;gBACnB,OAAO,EAAE,CAAC,EAAE,GAAG,EAA6B,EAAE,EAAE,CAAC,CAAC;oBAChD,GAAG;oBACH,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,WAAW,EAAE,GAAG,CAAC,WAAW;iBAC7B,CAAC;aACH,CAAC;YACF,8BAAa;YACb,oCAAgB;YAChB,wBAAU;YACV,gCAAc;YACd,sBAAS;YACT,uCAAiB;YACjB,6CAAoB;YACpB,4BAAY;YACZ,4CAAoB;YACpB,yCAAkB;YAClB,2CAAmB;YACnB,8BAAa;YACb,uCAAiB;SAClB;KACF,CAAC;GACW,aAAa,CAAG"}
package/dist/index.d.ts CHANGED
@@ -16,5 +16,6 @@ export * from './page-content';
16
16
  export * from './product-content';
17
17
  export * from './header';
18
18
  export * from './cms';
19
+ export * from './static-pages';
19
20
  export * from './common';
20
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,kBAAkB,CAAC;AAGjC,cAAc,WAAW,CAAC;AAG1B,cAAc,QAAQ,CAAC;AAGvB,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAG7B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,WAAW,CAAC;AAG1B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,UAAU,CAAC;AAGzB,cAAc,OAAO,CAAC;AAGtB,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,kBAAkB,CAAC;AAGjC,cAAc,WAAW,CAAC;AAG1B,cAAc,QAAQ,CAAC;AAGvB,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAG7B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,WAAW,CAAC;AAG1B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,UAAU,CAAC;AAGzB,cAAc,OAAO,CAAC;AAGtB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -32,6 +32,8 @@ tslib_1.__exportStar(require("./product-content"), exports);
32
32
  tslib_1.__exportStar(require("./header"), exports);
33
33
  // CMS
34
34
  tslib_1.__exportStar(require("./cms"), exports);
35
+ // Static Pages
36
+ tslib_1.__exportStar(require("./static-pages"), exports);
35
37
  // Common GraphQL utilities
36
38
  tslib_1.__exportStar(require("./common"), exports);
37
39
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,mDAAmD;AACnD,2DAAiC;AAEjC,UAAU;AACV,oDAA0B;AAE1B,OAAO;AACP,iDAAuB;AAEvB,0BAA0B;AAC1B,qDAA2B;AAE3B,aAAa;AACb,uDAA6B;AAE7B,iBAAiB;AACjB,2DAAiC;AAEjC,gBAAgB;AAChB,0DAAgC;AAEhC,iBAAiB;AACjB,2DAAiC;AAEjC,UAAU;AACV,oDAA0B;AAE1B,eAAe;AACf,yDAA+B;AAE/B,kBAAkB;AAClB,4DAAkC;AAElC,SAAS;AACT,mDAAyB;AAEzB,MAAM;AACN,gDAAsB;AAEtB,2BAA2B;AAC3B,mDAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,mDAAmD;AACnD,2DAAiC;AAEjC,UAAU;AACV,oDAA0B;AAE1B,OAAO;AACP,iDAAuB;AAEvB,0BAA0B;AAC1B,qDAA2B;AAE3B,aAAa;AACb,uDAA6B;AAE7B,iBAAiB;AACjB,2DAAiC;AAEjC,gBAAgB;AAChB,0DAAgC;AAEhC,iBAAiB;AACjB,2DAAiC;AAEjC,UAAU;AACV,oDAA0B;AAE1B,eAAe;AACf,yDAA+B;AAE/B,kBAAkB;AAClB,4DAAkC;AAElC,SAAS;AACT,mDAAyB;AAEzB,MAAM;AACN,gDAAsB;AAEtB,eAAe;AACf,yDAA+B;AAE/B,2BAA2B;AAC3B,mDAAyB"}
@@ -0,0 +1,5 @@
1
+ export * from './static-pages.module';
2
+ export * from './static-pages.service';
3
+ export * from './static-pages.resolver';
4
+ export * from './static-pages.types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/static-pages/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./static-pages.module"), exports);
5
+ tslib_1.__exportStar(require("./static-pages.service"), exports);
6
+ tslib_1.__exportStar(require("./static-pages.resolver"), exports);
7
+ tslib_1.__exportStar(require("./static-pages.types"), exports);
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/static-pages/index.ts"],"names":[],"mappings":";;;AAAA,gEAAsC;AACtC,iEAAuC;AACvC,kEAAwC;AACxC,+DAAqC"}
@@ -0,0 +1,3 @@
1
+ export declare class StaticPagesModule {
2
+ }
3
+ //# sourceMappingURL=static-pages.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-pages.module.d.ts","sourceRoot":"","sources":["../../src/static-pages/static-pages.module.ts"],"names":[],"mappings":"AAKA,qBAKa,iBAAiB;CAAG"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StaticPagesModule = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const core_1 = require("@pvh-afl/core");
7
+ const static_pages_resolver_1 = require("./static-pages.resolver");
8
+ const static_pages_service_1 = require("./static-pages.service");
9
+ let StaticPagesModule = class StaticPagesModule {
10
+ };
11
+ exports.StaticPagesModule = StaticPagesModule;
12
+ exports.StaticPagesModule = StaticPagesModule = tslib_1.__decorate([
13
+ (0, common_1.Module)({
14
+ imports: [core_1.ConfigModule, core_1.CacheModule],
15
+ providers: [static_pages_resolver_1.StaticPagesResolver, static_pages_service_1.StaticPagesService],
16
+ exports: [static_pages_service_1.StaticPagesService],
17
+ })
18
+ ], StaticPagesModule);
19
+ //# sourceMappingURL=static-pages.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-pages.module.js","sourceRoot":"","sources":["../../src/static-pages/static-pages.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAwC;AACxC,wCAA0D;AAC1D,mEAA8D;AAC9D,iEAA4D;AAOrD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,8CAAiB;4BAAjB,iBAAiB;IAL7B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,mBAAY,EAAE,kBAAW,CAAC;QACpC,SAAS,EAAE,CAAC,2CAAmB,EAAE,yCAAkB,CAAC;QACpD,OAAO,EAAE,CAAC,yCAAkB,CAAC;KAC9B,CAAC;GACW,iBAAiB,CAAG"}
@@ -0,0 +1,18 @@
1
+ import { StaticPagesService } from './static-pages.service';
2
+ import { StaticPage } from './static-pages.types';
3
+ interface GqlContext {
4
+ req: {
5
+ brand: string;
6
+ };
7
+ }
8
+ export declare class StaticPagesResolver {
9
+ private readonly staticPagesService;
10
+ constructor(staticPagesService: StaticPagesService);
11
+ /**
12
+ * Get a static page by slug.
13
+ * @param slug - Page slug (e.g., "privacy-policy", "terms-conditions")
14
+ */
15
+ staticPage(ctx: GqlContext, slug: string): Promise<StaticPage | null>;
16
+ }
17
+ export {};
18
+ //# sourceMappingURL=static-pages.resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-pages.resolver.d.ts","sourceRoot":"","sources":["../../src/static-pages/static-pages.resolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,UAAU,UAAU;IAClB,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACxB;AAED,qBAEa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,kBAAkB;IAEnE;;;OAGG;IAKG,UAAU,CACH,GAAG,EAAE,UAAU,EAK1B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;CAG9B"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StaticPagesResolver = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const graphql_1 = require("@nestjs/graphql");
6
+ const common_1 = require("@nestjs/common");
7
+ const core_1 = require("@pvh-afl/core");
8
+ const static_pages_service_1 = require("./static-pages.service");
9
+ const static_pages_types_1 = require("./static-pages.types");
10
+ let StaticPagesResolver = class StaticPagesResolver {
11
+ staticPagesService;
12
+ constructor(staticPagesService) {
13
+ this.staticPagesService = staticPagesService;
14
+ }
15
+ /**
16
+ * Get a static page by slug.
17
+ * @param slug - Page slug (e.g., "privacy-policy", "terms-conditions")
18
+ */
19
+ async staticPage(ctx, slug) {
20
+ return this.staticPagesService.getStaticPage(ctx.req.brand, slug);
21
+ }
22
+ };
23
+ exports.StaticPagesResolver = StaticPagesResolver;
24
+ tslib_1.__decorate([
25
+ (0, graphql_1.Query)(() => static_pages_types_1.StaticPage, {
26
+ description: 'Get a static page by slug',
27
+ nullable: true,
28
+ }),
29
+ tslib_1.__param(0, (0, graphql_1.Context)()),
30
+ tslib_1.__param(1, (0, graphql_1.Args)('slug', {
31
+ type: () => String,
32
+ description: 'Page slug (e.g., "privacy-policy", "terms-conditions")',
33
+ })),
34
+ tslib_1.__metadata("design:type", Function),
35
+ tslib_1.__metadata("design:paramtypes", [Object, String]),
36
+ tslib_1.__metadata("design:returntype", Promise)
37
+ ], StaticPagesResolver.prototype, "staticPage", null);
38
+ exports.StaticPagesResolver = StaticPagesResolver = tslib_1.__decorate([
39
+ (0, graphql_1.Resolver)(),
40
+ (0, common_1.UseGuards)(core_1.TenantGuard),
41
+ tslib_1.__metadata("design:paramtypes", [static_pages_service_1.StaticPagesService])
42
+ ], StaticPagesResolver);
43
+ //# sourceMappingURL=static-pages.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-pages.resolver.js","sourceRoot":"","sources":["../../src/static-pages/static-pages.resolver.ts"],"names":[],"mappings":";;;;AAAA,6CAAiE;AACjE,2CAA2C;AAC3C,wCAA4C;AAC5C,iEAA4D;AAC5D,6DAAkD;AAQ3C,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACD;IAA7B,YAA6B,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;IAAG,CAAC;IAEvE;;;OAGG;IAKG,AAAN,KAAK,CAAC,UAAU,CACH,GAAe,EAK1B,IAAY;QAEZ,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;CACF,CAAA;AArBY,kDAAmB;AAWxB;IAJL,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,+BAAU,EAAE;QACvB,WAAW,EAAE,2BAA2B;QACxC,QAAQ,EAAE,IAAI;KACf,CAAC;IAEC,mBAAA,IAAA,iBAAO,GAAE,CAAA;IACT,mBAAA,IAAA,cAAI,EAAC,MAAM,EAAE;QACZ,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM;QAClB,WAAW,EAAE,wDAAwD;KACtE,CAAC,CAAA;;;;qDAIH;8BApBU,mBAAmB;IAF/B,IAAA,kBAAQ,GAAE;IACV,IAAA,kBAAS,EAAC,kBAAW,CAAC;6CAE4B,yCAAkB;GADxD,mBAAmB,CAqB/B"}
@@ -0,0 +1,25 @@
1
+ import { ConfigService, CacheService } from '@pvh-afl/core';
2
+ import { StaticPage } from './static-pages.types';
3
+ export declare class StaticPagesService {
4
+ private readonly configService;
5
+ private readonly cacheService;
6
+ constructor(configService: ConfigService, cacheService: CacheService);
7
+ /**
8
+ * Get a static page by slug.
9
+ * Uses stale-while-revalidate caching with 24h TTL.
10
+ * @param brand - Brand identifier
11
+ * @param slug - Page slug (e.g., "privacy-policy", "terms-conditions")
12
+ */
13
+ getStaticPage(brand: string, slug: string): Promise<StaticPage | null>;
14
+ /**
15
+ * Fetch static page directly from Shopify Admin API.
16
+ * @param brand - Brand identifier
17
+ * @param slug - Page slug
18
+ */
19
+ fetchStaticPageFromShopify(brand: string, slug: string): Promise<StaticPage | null>;
20
+ /**
21
+ * Refresh cache in background (non-blocking).
22
+ */
23
+ private refreshInBackground;
24
+ }
25
+ //# sourceMappingURL=static-pages.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-pages.service.d.ts","sourceRoot":"","sources":["../../src/static-pages/static-pages.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAU,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAkBlD,qBACa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY;IAG7C;;;;;OAKG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAqC5E;;;;OAIG;IACG,0BAA0B,CAC9B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAsF7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAyB5B"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StaticPagesService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const core_1 = require("@pvh-afl/core");
7
+ let StaticPagesService = class StaticPagesService {
8
+ configService;
9
+ cacheService;
10
+ constructor(configService, cacheService) {
11
+ this.configService = configService;
12
+ this.cacheService = cacheService;
13
+ }
14
+ /**
15
+ * Get a static page by slug.
16
+ * Uses stale-while-revalidate caching with 24h TTL.
17
+ * @param brand - Brand identifier
18
+ * @param slug - Page slug (e.g., "privacy-policy", "terms-conditions")
19
+ */
20
+ async getStaticPage(brand, slug) {
21
+ const cacheKey = `static_page:${brand}:${slug}`;
22
+ // Try cache first
23
+ const cached = await this.cacheService.get(cacheKey);
24
+ if (cached) {
25
+ core_1.logger.info('Static page cache hit', {
26
+ brand,
27
+ slug,
28
+ isStale: cached.isStale,
29
+ });
30
+ // If stale, refresh in background
31
+ if (cached.isStale) {
32
+ this.refreshInBackground(brand, slug, cacheKey);
33
+ }
34
+ return cached.data;
35
+ }
36
+ // Cache miss - fetch from Shopify
37
+ core_1.logger.info('Static page cache miss, fetching from Shopify', {
38
+ brand,
39
+ slug,
40
+ });
41
+ const page = await this.fetchStaticPageFromShopify(brand, slug);
42
+ if (page) {
43
+ const { ttl, staleTTL } = this.configService.getStaticPagesCacheTTL(brand);
44
+ await this.cacheService.set(cacheKey, page, ttl, staleTTL);
45
+ }
46
+ return page;
47
+ }
48
+ /**
49
+ * Fetch static page directly from Shopify Admin API.
50
+ * @param brand - Brand identifier
51
+ * @param slug - Page slug
52
+ */
53
+ async fetchStaticPageFromShopify(brand, slug) {
54
+ const adminToken = this.configService.getShopifyAdminToken(brand);
55
+ const storeDomain = this.configService.getShopifyStoreDomain(brand);
56
+ if (!adminToken || !storeDomain) {
57
+ core_1.logger.error('Missing Shopify Admin API credentials', {
58
+ brand,
59
+ hasToken: !!adminToken,
60
+ hasDomain: !!storeDomain,
61
+ });
62
+ return null;
63
+ }
64
+ const graphqlUrl = `https://${storeDomain}/admin/api/2024-01/graphql.json`;
65
+ const query = `
66
+ query GetPageByHandle($query: String!) {
67
+ pages(first: 1, query: $query) {
68
+ nodes {
69
+ id
70
+ title
71
+ handle
72
+ body
73
+ }
74
+ }
75
+ }
76
+ `;
77
+ try {
78
+ const response = await fetch(graphqlUrl, {
79
+ method: 'POST',
80
+ headers: {
81
+ 'Content-Type': 'application/json',
82
+ 'X-Shopify-Access-Token': adminToken,
83
+ },
84
+ body: JSON.stringify({
85
+ query,
86
+ variables: {
87
+ query: `handle:${slug}`,
88
+ },
89
+ }),
90
+ });
91
+ if (!response.ok) {
92
+ core_1.logger.error('Shopify Admin API error', {
93
+ brand,
94
+ slug,
95
+ status: response.status,
96
+ statusText: response.statusText,
97
+ });
98
+ return null;
99
+ }
100
+ const result = (await response.json());
101
+ if (result.errors?.length) {
102
+ core_1.logger.error('Shopify GraphQL errors', {
103
+ brand,
104
+ slug,
105
+ errors: result.errors,
106
+ });
107
+ return null;
108
+ }
109
+ const pageNode = result.data?.pages.nodes[0];
110
+ if (!pageNode) {
111
+ core_1.logger.warn('Static page not found in Shopify', { brand, slug });
112
+ return null;
113
+ }
114
+ return {
115
+ title: pageNode.title,
116
+ handle: pageNode.handle,
117
+ body: pageNode.body,
118
+ };
119
+ }
120
+ catch (error) {
121
+ core_1.logger.error('Failed to fetch static page from Shopify', {
122
+ brand,
123
+ slug,
124
+ error: error instanceof Error ? error.message : 'Unknown',
125
+ });
126
+ return null;
127
+ }
128
+ }
129
+ /**
130
+ * Refresh cache in background (non-blocking).
131
+ */
132
+ refreshInBackground(brand, slug, cacheKey) {
133
+ // Fire and forget - don't await
134
+ this.fetchStaticPageFromShopify(brand, slug)
135
+ .then(async (page) => {
136
+ if (page) {
137
+ const { ttl, staleTTL } = this.configService.getStaticPagesCacheTTL(brand);
138
+ await this.cacheService.set(cacheKey, page, ttl, staleTTL);
139
+ core_1.logger.info('Static page cache refreshed in background', {
140
+ brand,
141
+ slug,
142
+ });
143
+ }
144
+ })
145
+ .catch((error) => {
146
+ core_1.logger.error('Background refresh failed', {
147
+ brand,
148
+ slug,
149
+ error: error instanceof Error ? error.message : 'Unknown',
150
+ });
151
+ });
152
+ }
153
+ };
154
+ exports.StaticPagesService = StaticPagesService;
155
+ exports.StaticPagesService = StaticPagesService = tslib_1.__decorate([
156
+ (0, common_1.Injectable)(),
157
+ tslib_1.__metadata("design:paramtypes", [core_1.ConfigService,
158
+ core_1.CacheService])
159
+ ], StaticPagesService);
160
+ //# sourceMappingURL=static-pages.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-pages.service.js","sourceRoot":"","sources":["../../src/static-pages/static-pages.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare class StaticPage {
2
+ title: string;
3
+ handle: string;
4
+ body: string;
5
+ }
6
+ //# sourceMappingURL=static-pages.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-pages.types.d.ts","sourceRoot":"","sources":["../../src/static-pages/static-pages.types.ts"],"names":[],"mappings":"AAEA,qBACa,UAAU;IAErB,KAAK,EAAE,MAAM,CAAC;IAGd,MAAM,EAAE,MAAM,CAAC;IAGf,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StaticPage = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const graphql_1 = require("@nestjs/graphql");
6
+ let StaticPage = class StaticPage {
7
+ title;
8
+ handle;
9
+ body;
10
+ };
11
+ exports.StaticPage = StaticPage;
12
+ tslib_1.__decorate([
13
+ (0, graphql_1.Field)(() => String, { description: 'Page title' }),
14
+ tslib_1.__metadata("design:type", String)
15
+ ], StaticPage.prototype, "title", void 0);
16
+ tslib_1.__decorate([
17
+ (0, graphql_1.Field)(() => String, { description: 'Page handle/slug' }),
18
+ tslib_1.__metadata("design:type", String)
19
+ ], StaticPage.prototype, "handle", void 0);
20
+ tslib_1.__decorate([
21
+ (0, graphql_1.Field)(() => String, { description: 'HTML body content' }),
22
+ tslib_1.__metadata("design:type", String)
23
+ ], StaticPage.prototype, "body", void 0);
24
+ exports.StaticPage = StaticPage = tslib_1.__decorate([
25
+ (0, graphql_1.ObjectType)({ description: 'Static page content from Shopify' })
26
+ ], StaticPage);
27
+ //# sourceMappingURL=static-pages.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-pages.types.js","sourceRoot":"","sources":["../../src/static-pages/static-pages.types.ts"],"names":[],"mappings":";;;;AAAA,6CAAoD;AAG7C,IAAM,UAAU,GAAhB,MAAM,UAAU;IAErB,KAAK,CAAS;IAGd,MAAM,CAAS;IAGf,IAAI,CAAS;CACd,CAAA;AATY,gCAAU;AAErB;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;;yCACrC;AAGd;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;;0CAC1C;AAGf;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;;wCAC7C;qBARF,UAAU;IADtB,IAAA,oBAAU,EAAC,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC;GACnD,UAAU,CAStB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pvh-afl/graphql",
3
- "version": "1.1.17",
3
+ "version": "1.1.18",
4
4
  "description": "AFL GraphQL - Shared GraphQL modules for multi-brand commerce platform",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",