@financial-times/cp-content-pipeline-schema 0.7.21 → 0.7.23
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/CHANGELOG.md +15 -0
- package/lib/helpers/isError.d.ts +1 -0
- package/lib/helpers/isError.js +7 -0
- package/lib/helpers/isError.js.map +1 -0
- package/lib/model/Image.js +2 -4
- package/lib/model/Image.js.map +1 -1
- package/lib/resolvers/content-tree/references/Flourish.d.ts +4 -3
- package/lib/resolvers/content-tree/references/Flourish.js +33 -8
- package/lib/resolvers/content-tree/references/Flourish.js.map +1 -1
- package/lib/resolvers/content-tree/references/RawImage.js +2 -4
- package/lib/resolvers/content-tree/references/RawImage.js.map +1 -1
- package/lib/resolvers/content-tree/references/Tweet.js +5 -4
- package/lib/resolvers/content-tree/references/Tweet.js.map +1 -1
- package/lib/resolvers/core.js +4 -4
- package/lib/resolvers/core.js.map +1 -1
- package/package.json +1 -1
- package/src/helpers/isError.ts +3 -0
- package/src/model/Image.ts +1 -5
- package/src/resolvers/content-tree/references/Flourish.ts +48 -11
- package/src/resolvers/content-tree/references/RawImage.ts +1 -4
- package/src/resolvers/content-tree/references/Tweet.ts +1 -4
- package/src/resolvers/core.ts +6 -4
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.7.23](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v0.7.22...cp-content-pipeline-schema-v0.7.23) (2023-07-31)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* gracefully handle error response from origami for flourish fallback images ([be99900](https://github.com/Financial-Times/cp-content-pipeline/commit/be999005e79c277cc9703852c07ecc35f221e190))
|
|
9
|
+
* log flourish error ([fdd3ea7](https://github.com/Financial-Times/cp-content-pipeline/commit/fdd3ea7f9b1192d4903ffdc8b5dd701e4b0578c0))
|
|
10
|
+
|
|
11
|
+
## [0.7.22](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v0.7.21...cp-content-pipeline-schema-v0.7.22) (2023-07-26)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* prefix cache key with url ([0629942](https://github.com/Financial-Times/cp-content-pipeline/commit/06299423d1905226959396b6df683b424f0708aa))
|
|
17
|
+
|
|
3
18
|
## [0.7.21](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v0.7.20...cp-content-pipeline-schema-v0.7.21) (2023-07-25)
|
|
4
19
|
|
|
5
20
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function isError(error: unknown): error is Error;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isError.js","sourceRoot":"","sources":["../../src/helpers/isError.ts"],"names":[],"mappings":";;AAAA,SAAwB,OAAO,CAAC,KAAc;IAC5C,OAAO,KAAK,YAAY,KAAK,CAAA;AAC/B,CAAC;AAFD,0BAEC"}
|
package/lib/model/Image.js
CHANGED
|
@@ -21,9 +21,7 @@ const imageService_1 = __importDefault(require("../helpers/imageService"));
|
|
|
21
21
|
const lib_1 = require("@dotcom-reliability-kit/log-error/lib");
|
|
22
22
|
const literal_union_1 = require("../resolvers/literal-union");
|
|
23
23
|
const scalars_1 = require("../resolvers/scalars");
|
|
24
|
-
|
|
25
|
-
return error instanceof Error;
|
|
26
|
-
}
|
|
24
|
+
const isError_1 = __importDefault(require("../helpers/isError"));
|
|
27
25
|
class CAPIImage {
|
|
28
26
|
constructor(capiImage, context, leadImage) {
|
|
29
27
|
this.capiImage = capiImage;
|
|
@@ -114,7 +112,7 @@ class CAPIImage {
|
|
|
114
112
|
return imageMetadata;
|
|
115
113
|
}
|
|
116
114
|
catch (error) {
|
|
117
|
-
if (
|
|
115
|
+
if ((0, isError_1.default)(error)) {
|
|
118
116
|
(0, lib_1.logRecoverableError)({
|
|
119
117
|
error,
|
|
120
118
|
logger: this.context.logger,
|
package/lib/model/Image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/model/Image.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,kDAAiD;AACjD,2EAAqD;AAOrD,+DAA2E;
|
|
1
|
+
{"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/model/Image.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { QueryContext } from '../../..';
|
|
1
2
|
export declare const Flourish: {
|
|
2
|
-
fallbackImage(parent: import(".").ReferenceWithCAPIData<import("@financial-times/content-tree").ContentTree.Flourish>, _args: {}, context:
|
|
3
|
-
type: string;
|
|
3
|
+
fallbackImage(parent: import(".").ReferenceWithCAPIData<import("@financial-times/content-tree").ContentTree.Flourish>, _args: {}, context: QueryContext): Promise<{
|
|
4
4
|
url: string;
|
|
5
|
-
|
|
5
|
+
type: string;
|
|
6
6
|
format: string;
|
|
7
|
+
sourceSet: never[];
|
|
7
8
|
width: number;
|
|
8
9
|
height: number;
|
|
9
10
|
}>;
|
|
@@ -5,29 +5,54 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Flourish = void 0;
|
|
7
7
|
const imageService_1 = __importDefault(require("../../../helpers/imageService"));
|
|
8
|
+
const isError_1 = __importDefault(require("../../../helpers/isError"));
|
|
9
|
+
const lib_1 = require("@dotcom-reliability-kit/log-error/lib");
|
|
8
10
|
exports.Flourish = {
|
|
9
11
|
async fallbackImage(parent, _args, context) {
|
|
10
|
-
const DEFAULT_WIDTH = 2626;
|
|
11
|
-
const DEFAULT_HEIGHT = 1459;
|
|
12
12
|
const type = parent.reference.flourishType;
|
|
13
13
|
const timestamp = typeof parent.reference.timestamp === 'string'
|
|
14
14
|
? parent.reference.timestamp
|
|
15
15
|
: false;
|
|
16
16
|
const flourishUrl = `https://public.flourish.studio/${type}/${parent.reference.id}/thumbnail${timestamp ? '?cacheBuster=' + timestamp : ''}`;
|
|
17
|
-
const imageMetadata = await
|
|
17
|
+
const imageMetadata = await getImageMetadata(context, flourishUrl);
|
|
18
|
+
const width = imageMetadata.width;
|
|
19
|
+
const height = imageMetadata.height;
|
|
18
20
|
const imageServiceWrappedUrl = (0, imageService_1.default)({
|
|
19
21
|
url: flourishUrl,
|
|
20
22
|
systemCode: context.systemCode ?? 'cp-content-pipeline',
|
|
21
|
-
width
|
|
23
|
+
width,
|
|
22
24
|
});
|
|
23
25
|
return {
|
|
24
|
-
type: 'image',
|
|
25
26
|
url: imageServiceWrappedUrl,
|
|
26
|
-
|
|
27
|
+
type: 'image',
|
|
27
28
|
format: 'standard',
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
sourceSet: [],
|
|
30
|
+
width,
|
|
31
|
+
height,
|
|
30
32
|
};
|
|
31
33
|
},
|
|
32
34
|
};
|
|
35
|
+
const getImageMetadata = async (context, flourishUrl) => {
|
|
36
|
+
const DEFAULT_WIDTH = 2626;
|
|
37
|
+
const DEFAULT_HEIGHT = 1459;
|
|
38
|
+
try {
|
|
39
|
+
const imageMetadata = await context.dataSources.origami.getImageMetadata(flourishUrl);
|
|
40
|
+
return {
|
|
41
|
+
width: imageMetadata?.width || DEFAULT_WIDTH,
|
|
42
|
+
height: imageMetadata?.height || DEFAULT_HEIGHT,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if ((0, isError_1.default)(error)) {
|
|
47
|
+
(0, lib_1.logRecoverableError)({
|
|
48
|
+
error,
|
|
49
|
+
logger: context.logger,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
width: DEFAULT_WIDTH,
|
|
54
|
+
height: DEFAULT_HEIGHT,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
};
|
|
33
58
|
//# sourceMappingURL=Flourish.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flourish.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/Flourish.ts"],"names":[],"mappings":";;;;;;AAAA,iFAA2D;
|
|
1
|
+
{"version":3,"file":"Flourish.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/Flourish.ts"],"names":[],"mappings":";;;;;;AAAA,iFAA2D;AAG3D,uEAA8C;AAC9C,+DAA2E;AAE9D,QAAA,QAAQ,GAAG;IACtB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAA;QAC1C,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,KAAK,QAAQ;YAC5C,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS;YAC5B,CAAC,CAAC,KAAK,CAAA;QAEX,MAAM,WAAW,GAAG,kCAAkC,IAAI,IACxD,MAAM,CAAC,SAAS,CAAC,EACnB,aAAa,SAAS,CAAC,CAAC,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QAE3D,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAElE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAA;QACjC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAA;QAEnC,MAAM,sBAAsB,GAAG,IAAA,sBAAe,EAAC;YAC7C,GAAG,EAAE,WAAW;YAChB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,qBAAqB;YACvD,KAAK;SACN,CAAC,CAAA;QAEF,OAAO;YACL,GAAG,EAAE,sBAAsB;YAC3B,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,EAAE;YACb,KAAK;YACL,MAAM;SACP,CAAA;IACH,CAAC;CAC0B,CAAA;AAO7B,MAAM,gBAAgB,GAAG,KAAK,EAC5B,OAAqB,EACrB,WAAmB,EACK,EAAE;IAC1B,MAAM,aAAa,GAAG,IAAI,CAAA;IAC1B,MAAM,cAAc,GAAG,IAAI,CAAA;IAE3B,IAAI;QACF,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CACtE,WAAW,CACZ,CAAA;QAED,OAAO;YACL,KAAK,EAAE,aAAa,EAAE,KAAK,IAAI,aAAa;YAC5C,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,cAAc;SAChD,CAAA;KACF;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,IAAA,iBAAO,EAAC,KAAK,CAAC,EAAE;YAClB,IAAA,yBAAmB,EAAC;gBAClB,KAAK;gBACL,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAA;SACH;QACD,OAAO;YACL,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,cAAc;SACvB,CAAA;KACF;AACH,CAAC,CAAA"}
|
|
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.RawImage = void 0;
|
|
7
7
|
const lib_1 = require("@dotcom-reliability-kit/log-error/lib");
|
|
8
8
|
const imageService_1 = __importDefault(require("../../../helpers/imageService"));
|
|
9
|
-
|
|
10
|
-
return error instanceof Error;
|
|
11
|
-
}
|
|
9
|
+
const isError_1 = __importDefault(require("../../../helpers/isError"));
|
|
12
10
|
class RawImageModel {
|
|
13
11
|
constructor(rawImage, context) {
|
|
14
12
|
this.rawImage = rawImage;
|
|
@@ -44,7 +42,7 @@ class RawImageModel {
|
|
|
44
42
|
return imageMetadata;
|
|
45
43
|
}
|
|
46
44
|
catch (error) {
|
|
47
|
-
if (
|
|
45
|
+
if ((0, isError_1.default)(error)) {
|
|
48
46
|
(0, lib_1.logRecoverableError)({
|
|
49
47
|
error,
|
|
50
48
|
logger: this.context.logger,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RawImage.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/RawImage.ts"],"names":[],"mappings":";;;;;;AAEA,+DAA2E;AAC3E,iFAA2D;
|
|
1
|
+
{"version":3,"file":"RawImage.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/RawImage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.Tweet = void 0;
|
|
4
7
|
const log_error_1 = require("@dotcom-reliability-kit/log-error");
|
|
5
|
-
|
|
6
|
-
return error instanceof Error;
|
|
7
|
-
}
|
|
8
|
+
const isError_1 = __importDefault(require("../../../helpers/isError"));
|
|
8
9
|
exports.Tweet = {
|
|
9
10
|
async html(parent, _args, context) {
|
|
10
11
|
try {
|
|
@@ -12,7 +13,7 @@ exports.Tweet = {
|
|
|
12
13
|
return tweet.html;
|
|
13
14
|
}
|
|
14
15
|
catch (error) {
|
|
15
|
-
if (
|
|
16
|
+
if ((0, isError_1.default)(error)) {
|
|
16
17
|
(0, log_error_1.logRecoverableError)({
|
|
17
18
|
error,
|
|
18
19
|
logger: context.logger,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tweet.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/Tweet.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Tweet.js","sourceRoot":"","sources":["../../../../src/resolvers/content-tree/references/Tweet.ts"],"names":[],"mappings":";;;;;;AAAA,iEAAuE;AAEvE,uEAA8C;AAEjC,QAAA,KAAK,GAAG;IACnB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO;QAC/B,IAAI;YACF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CACtD,MAAM,CAAC,SAAS,CAAC,EAAE,CACpB,CAAA;YACD,OAAO,KAAK,CAAC,IAAI,CAAA;SAClB;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,IAAA,iBAAO,EAAC,KAAK,CAAC,EAAE;gBAClB,IAAA,+BAAmB,EAAC;oBAClB,KAAK;oBACL,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB,CAAC,CAAA;aACH;YACD,OAAO,IAAI,CAAA;SACZ;IACH,CAAC;CACuB,CAAA"}
|
package/lib/resolvers/core.js
CHANGED
|
@@ -21,15 +21,15 @@ const resolvers = {
|
|
|
21
21
|
},
|
|
22
22
|
Mutation: {
|
|
23
23
|
invalidateRedisCache: async (_, args, context) => {
|
|
24
|
-
const
|
|
25
|
-
if (
|
|
24
|
+
const purged = await context.redisAdapter.delete(`capi:httpcache:https://api.ft.com/internalcontent/${args.uuid}`);
|
|
25
|
+
if (purged) {
|
|
26
26
|
return `Cache cleared for ${args.uuid}`;
|
|
27
27
|
}
|
|
28
|
-
else if (
|
|
28
|
+
else if (purged === false) {
|
|
29
29
|
return `No key '${args.uuid}' found`;
|
|
30
30
|
}
|
|
31
31
|
else {
|
|
32
|
-
return '
|
|
32
|
+
return 'REDIS_DEL_ERROR';
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
35
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/resolvers/core.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AACnB,gDAAuB;AAEvB,wDAAoD;AAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CACxE,CAAA;AAEY,QAAA,OAAO,GAAG,WAAW,CAAC,OAAO,CAAA;AAE1C,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,eAAO;QACtB,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO;YAC5B,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvD,CAAC;QACD,eAAe,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO;YACrC,OAAO,2BAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAChD,CAAC;KACF;IACD,QAAQ,EAAE;QACR,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YAC/C,MAAM,
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/resolvers/core.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AACnB,gDAAuB;AAEvB,wDAAoD;AAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CACxE,CAAA;AAEY,QAAA,OAAO,GAAG,WAAW,CAAC,OAAO,CAAA;AAE1C,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,eAAO;QACtB,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO;YAC5B,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvD,CAAC;QACD,eAAe,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO;YACrC,OAAO,2BAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAChD,CAAC;KACF;IACD,QAAQ,EAAE;QACR,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YAC/C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,CAC9C,qDAAqD,IAAI,CAAC,IAAI,EAAE,CACjE,CAAA;YAED,IAAI,MAAM,EAAE;gBACV,OAAO,qBAAqB,IAAI,CAAC,IAAI,EAAE,CAAA;aACxC;iBAAM,IAAI,MAAM,KAAK,KAAK,EAAE;gBAC3B,OAAO,WAAW,IAAI,CAAC,IAAI,SAAS,CAAA;aACrC;iBAAM;gBACL,OAAO,iBAAiB,CAAA;aACzB;QACH,CAAC;KACF;CAIF,CAAA;AAED,kBAAe,SAAS,CAAA"}
|
package/package.json
CHANGED
package/src/model/Image.ts
CHANGED
|
@@ -7,12 +7,12 @@ import type {
|
|
|
7
7
|
} from '../types/internal-content'
|
|
8
8
|
import type { QueryContext } from '..'
|
|
9
9
|
import { logRecoverableError } from '@dotcom-reliability-kit/log-error/lib'
|
|
10
|
-
import { ContentTree } from '@financial-times/content-tree'
|
|
11
10
|
import {
|
|
12
11
|
LiteralUnionScalarValues,
|
|
13
12
|
validLiteralUnionValue,
|
|
14
13
|
} from '../resolvers/literal-union'
|
|
15
14
|
import { ImageFormat, ImageType } from '../resolvers/scalars'
|
|
15
|
+
import isError from '../helpers/isError'
|
|
16
16
|
|
|
17
17
|
export type ImageSource = {
|
|
18
18
|
url: string
|
|
@@ -25,10 +25,6 @@ export type ImageSourceArgs = {
|
|
|
25
25
|
maxDpr?: number | null
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
function isError(error: unknown): error is Error {
|
|
29
|
-
return error instanceof Error
|
|
30
|
-
}
|
|
31
|
-
|
|
32
28
|
export interface Image {
|
|
33
29
|
type(): LiteralUnionScalarValues<typeof ImageType>
|
|
34
30
|
caption(): string | null
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import imageServiceUrl from '../../../helpers/imageService'
|
|
2
2
|
import { FlourishResolvers } from '../../../generated'
|
|
3
|
+
import { QueryContext } from '../../..'
|
|
4
|
+
import isError from '../../../helpers/isError'
|
|
5
|
+
import { logRecoverableError } from '@dotcom-reliability-kit/log-error/lib'
|
|
3
6
|
|
|
4
7
|
export const Flourish = {
|
|
5
8
|
async fallbackImage(parent, _args, context) {
|
|
6
|
-
const DEFAULT_WIDTH = 2626
|
|
7
|
-
const DEFAULT_HEIGHT = 1459
|
|
8
|
-
|
|
9
9
|
const type = parent.reference.flourishType
|
|
10
10
|
const timestamp =
|
|
11
11
|
typeof parent.reference.timestamp === 'string'
|
|
@@ -15,23 +15,60 @@ export const Flourish = {
|
|
|
15
15
|
const flourishUrl = `https://public.flourish.studio/${type}/${
|
|
16
16
|
parent.reference.id
|
|
17
17
|
}/thumbnail${timestamp ? '?cacheBuster=' + timestamp : ''}`
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
|
|
19
|
+
const imageMetadata = await getImageMetadata(context, flourishUrl)
|
|
20
|
+
|
|
21
|
+
const width = imageMetadata.width
|
|
22
|
+
const height = imageMetadata.height
|
|
21
23
|
|
|
22
24
|
const imageServiceWrappedUrl = imageServiceUrl({
|
|
23
25
|
url: flourishUrl,
|
|
24
26
|
systemCode: context.systemCode ?? 'cp-content-pipeline',
|
|
25
|
-
width
|
|
27
|
+
width,
|
|
26
28
|
})
|
|
27
29
|
|
|
28
30
|
return {
|
|
29
|
-
type: 'image',
|
|
30
31
|
url: imageServiceWrappedUrl,
|
|
31
|
-
|
|
32
|
+
type: 'image',
|
|
32
33
|
format: 'standard',
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
sourceSet: [],
|
|
35
|
+
width,
|
|
36
|
+
height,
|
|
35
37
|
}
|
|
36
38
|
},
|
|
37
39
|
} satisfies FlourishResolvers
|
|
40
|
+
|
|
41
|
+
type ImageMetadata = {
|
|
42
|
+
width: number
|
|
43
|
+
height: number
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const getImageMetadata = async (
|
|
47
|
+
context: QueryContext,
|
|
48
|
+
flourishUrl: string
|
|
49
|
+
): Promise<ImageMetadata> => {
|
|
50
|
+
const DEFAULT_WIDTH = 2626
|
|
51
|
+
const DEFAULT_HEIGHT = 1459
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
const imageMetadata = await context.dataSources.origami.getImageMetadata(
|
|
55
|
+
flourishUrl
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
width: imageMetadata?.width || DEFAULT_WIDTH,
|
|
60
|
+
height: imageMetadata?.height || DEFAULT_HEIGHT,
|
|
61
|
+
}
|
|
62
|
+
} catch (error) {
|
|
63
|
+
if (isError(error)) {
|
|
64
|
+
logRecoverableError({
|
|
65
|
+
error,
|
|
66
|
+
logger: context.logger,
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
width: DEFAULT_WIDTH,
|
|
71
|
+
height: DEFAULT_HEIGHT,
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -4,10 +4,7 @@ import { logRecoverableError } from '@dotcom-reliability-kit/log-error/lib'
|
|
|
4
4
|
import imageServiceUrl from '../../../helpers/imageService'
|
|
5
5
|
import { RawImage as RawImageNode } from '../Workarounds'
|
|
6
6
|
import { RawImageResolvers } from '../../../generated'
|
|
7
|
-
|
|
8
|
-
function isError(error: unknown): error is Error {
|
|
9
|
-
return error instanceof Error
|
|
10
|
-
}
|
|
7
|
+
import isError from '../../../helpers/isError'
|
|
11
8
|
|
|
12
9
|
class RawImageModel implements Image {
|
|
13
10
|
constructor(private rawImage: RawImageNode, private context: QueryContext) {}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { logRecoverableError } from '@dotcom-reliability-kit/log-error'
|
|
2
2
|
import { TweetResolvers } from '../../../generated'
|
|
3
|
-
|
|
4
|
-
function isError(error: unknown): error is Error {
|
|
5
|
-
return error instanceof Error
|
|
6
|
-
}
|
|
3
|
+
import isError from '../../../helpers/isError'
|
|
7
4
|
|
|
8
5
|
export const Tweet = {
|
|
9
6
|
async html(parent, _args, context) {
|
package/src/resolvers/core.ts
CHANGED
|
@@ -21,14 +21,16 @@ const resolvers = {
|
|
|
21
21
|
},
|
|
22
22
|
Mutation: {
|
|
23
23
|
invalidateRedisCache: async (_, args, context) => {
|
|
24
|
-
const
|
|
24
|
+
const purged = await context.redisAdapter.delete(
|
|
25
|
+
`capi:httpcache:https://api.ft.com/internalcontent/${args.uuid}`
|
|
26
|
+
)
|
|
25
27
|
|
|
26
|
-
if (
|
|
28
|
+
if (purged) {
|
|
27
29
|
return `Cache cleared for ${args.uuid}`
|
|
28
|
-
} else if (
|
|
30
|
+
} else if (purged === false) {
|
|
29
31
|
return `No key '${args.uuid}' found`
|
|
30
32
|
} else {
|
|
31
|
-
return '
|
|
33
|
+
return 'REDIS_DEL_ERROR'
|
|
32
34
|
}
|
|
33
35
|
},
|
|
34
36
|
},
|