@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.
- package/dist/graphql.module.d.ts.map +1 -1
- package/dist/graphql.module.js +2 -0
- package/dist/graphql.module.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/static-pages/index.d.ts +5 -0
- package/dist/static-pages/index.d.ts.map +1 -0
- package/dist/static-pages/index.js +8 -0
- package/dist/static-pages/index.js.map +1 -0
- package/dist/static-pages/static-pages.module.d.ts +3 -0
- package/dist/static-pages/static-pages.module.d.ts.map +1 -0
- package/dist/static-pages/static-pages.module.js +19 -0
- package/dist/static-pages/static-pages.module.js.map +1 -0
- package/dist/static-pages/static-pages.resolver.d.ts +18 -0
- package/dist/static-pages/static-pages.resolver.d.ts.map +1 -0
- package/dist/static-pages/static-pages.resolver.js +43 -0
- package/dist/static-pages/static-pages.resolver.js.map +1 -0
- package/dist/static-pages/static-pages.service.d.ts +25 -0
- package/dist/static-pages/static-pages.service.d.ts.map +1 -0
- package/dist/static-pages/static-pages.service.js +160 -0
- package/dist/static-pages/static-pages.service.js.map +1 -0
- package/dist/static-pages/static-pages.types.d.ts +6 -0
- package/dist/static-pages/static-pages.types.d.ts.map +1 -0
- package/dist/static-pages/static-pages.types.js +27 -0
- package/dist/static-pages/static-pages.types.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql.module.d.ts","sourceRoot":"","sources":["../src/graphql.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graphql.module.d.ts","sourceRoot":"","sources":["../src/graphql.module.ts"],"names":[],"mappings":"AAwBA,qBA6Ba,aAAa;CAAG"}
|
package/dist/graphql.module.js
CHANGED
|
@@ -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;
|
|
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
package/dist/index.d.ts.map
CHANGED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|