@financial-times/cp-content-pipeline-schema 3.7.1 → 3.7.3

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 CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.7.3](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v3.7.2...cp-content-pipeline-schema-v3.7.3) (2024-11-15)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * send a 400 when CAPI returns a 400 for main content ([152e3eb](https://github.com/Financial-Times/cp-content-pipeline/commit/152e3ebb9ef0e610ea38afd6232b205ed3b95a89))
9
+
10
+ ## [3.7.2](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v3.7.1...cp-content-pipeline-schema-v3.7.2) (2024-11-14)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * revert "Merge pull request [#1213](https://github.com/Financial-Times/cp-content-pipeline/issues/1213) from Financial-Times/no-fastcharts-metadata" ([fda6e63](https://github.com/Financial-Times/cp-content-pipeline/commit/fda6e6385b737927fd3f809cc47167927cf45fff))
16
+ * revert "Merge pull request [#1215](https://github.com/Financial-Times/cp-content-pipeline/issues/1215) from Financial-Times/no-image-service-for-u" ([c5998aa](https://github.com/Financial-Times/cp-content-pipeline/commit/c5998aab7d9fe848cbc7b1629b9291569e461981))
17
+
3
18
  ## [3.7.1](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v3.7.0...cp-content-pipeline-schema-v3.7.1) (2024-11-13)
4
19
 
5
20
 
@@ -8,6 +8,7 @@ const metadata_1 = require("../helpers/metadata");
8
8
  const imageService_1 = __importDefault(require("../helpers/imageService"));
9
9
  const literal_union_1 = require("../resolvers/literal-union");
10
10
  const scalars_1 = require("../resolvers/scalars");
11
+ const isError_1 = __importDefault(require("../helpers/isError"));
11
12
  const errors_1 = require("@dotcom-reliability-kit/errors");
12
13
  class CAPIImage {
13
14
  capiImage;
@@ -110,16 +111,24 @@ class CAPIImage {
110
111
  height: this.capiImage.pixelHeight,
111
112
  };
112
113
  }
113
- // HACK:KB:20241029 graphics and images in layouts don't have pixelWidth/
114
- // pixelHeight because of reasons. we want to avoid calling Image Service
115
- // to improve performance. skip calling Image Service for the time being
116
- this.context.logger.warn({
117
- event: 'SKIPPING_IMAGE_DIMENSIONS',
118
- message: 'Not calling Image Service to get graphics dimensions',
119
- url: this.capiImage.binaryUrl,
120
- type: this.type(),
121
- });
122
- return null;
114
+ try {
115
+ const imageMetadata = await this.#dataSources.origami.getImageMetadata(this.capiImage.binaryUrl);
116
+ return imageMetadata;
117
+ }
118
+ catch (error) {
119
+ if ((0, isError_1.default)(error)) {
120
+ this.context.logger.warn({
121
+ event: 'RECOVERABLE_ERROR',
122
+ error: new errors_1.OperationalError({
123
+ code: 'IMAGE_DIMENSIONS_ERROR',
124
+ message: `Failed to get dimensions for ${this.capiImage.binaryUrl}`,
125
+ url: this.capiImage.binaryUrl,
126
+ cause: error,
127
+ }),
128
+ });
129
+ }
130
+ return null;
131
+ }
123
132
  }
124
133
  credit() {
125
134
  return this.capiImage.copyright?.notice ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/model/Image.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/model/Image.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,7 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  const Image_1 = require("./Image");
7
- const logger_1 = __importDefault(require("@dotcom-reliability-kit/logger"));
4
+ const globals_1 = require("@jest/globals");
8
5
  const imageService_1 = require("../helpers/imageService");
9
6
  describe('Image', () => {
10
7
  const mockImage = {
@@ -13,32 +10,40 @@ describe('Image', () => {
13
10
  title: 'title',
14
11
  description: 'description',
15
12
  binaryUrl: 'cloudfront.com/image',
16
- pixelWidth: 5000,
17
- pixelHeight: 1000,
18
13
  };
19
14
  const graphic = {
20
15
  ...mockImage,
21
16
  type: 'http://www.ft.com/ontology/content/Graphic',
22
17
  };
18
+ const getImageMetadata = globals_1.jest.fn();
23
19
  const context = {
24
- logger: logger_1.default,
20
+ dataSources: {
21
+ origami: {
22
+ getImageMetadata,
23
+ },
24
+ capi: {},
25
+ vanityUrls: {},
26
+ },
25
27
  systemCode: 'image-test',
26
28
  };
29
+ beforeEach(() => {
30
+ getImageMetadata.mockReset();
31
+ });
27
32
  describe('sourceSet', () => {
28
33
  describe('An image that is provided with a high resolution', () => {
29
- it('transforms the URL to use the Origami Image Service', async () => {
34
+ let sourceSet;
35
+ beforeAll(async () => {
36
+ getImageMetadata.mockResolvedValue({ width: 5000, height: 1000 });
30
37
  const model = new Image_1.CAPIImage(mockImage, context);
31
- const sourceSet = await model.sourceSet({ width: 1000 });
38
+ sourceSet = await model.sourceSet({ width: 1000 });
39
+ });
40
+ it('transforms the URL to use the Origami Image Service', () => {
32
41
  expect(sourceSet.every((source) => source.url.startsWith('https://www.ft.com/__origami/service/image/v2'))).toBeTruthy();
33
42
  });
34
- it('resizes the image to the requested width', async () => {
35
- const model = new Image_1.CAPIImage(mockImage, context);
36
- const sourceSet = await model.sourceSet({ width: 1000 });
43
+ it('resizes the image to the requested width', () => {
37
44
  expect(sourceSet.every((source) => source.width === 1000 && source.url.includes('width=1000'))).toBeTruthy();
38
45
  });
39
- it('includes sourceSet for all the possible resolutions we can display the image at, given the requested width and the original source width', async () => {
40
- const model = new Image_1.CAPIImage(mockImage, context);
41
- const sourceSet = await model.sourceSet({ width: 1000 });
46
+ it('includes sourceSet for all the possible resolutions we can display the image at, given the requested width and the original source width', () => {
42
47
  expect(sourceSet.length).toEqual(5);
43
48
  expect(sourceSet[0]?.dpr).toEqual(1);
44
49
  expect(sourceSet[0]?.url).toMatch(/dpr=1/);
@@ -48,7 +53,8 @@ describe('Image', () => {
48
53
  });
49
54
  describe("An image that that isn't wide enough to generate high-resolution sourceSet for", () => {
50
55
  it('returns an array with a single resolution iamge service UR', async () => {
51
- const model = new Image_1.CAPIImage({ ...mockImage, pixelWidth: 1500, pixelHeight: 500 }, context);
56
+ getImageMetadata.mockResolvedValue({ width: 1500, height: 500 });
57
+ const model = new Image_1.CAPIImage(mockImage, context);
52
58
  const sourceSet = await model.sourceSet({ width: 1000 });
53
59
  expect(sourceSet.length).toEqual(1);
54
60
  expect(sourceSet[0]).toEqual({
@@ -60,7 +66,8 @@ describe('Image', () => {
60
66
  });
61
67
  describe('An image that that is smaller than the width that was requested', () => {
62
68
  it('returns the image at the same width as the original', async () => {
63
- const model = new Image_1.CAPIImage({ ...mockImage, pixelWidth: 500, pixelHeight: 500 }, context);
69
+ getImageMetadata.mockResolvedValue({ width: 500, height: 500 });
70
+ const model = new Image_1.CAPIImage(mockImage, context);
64
71
  const sourceSet = await model.sourceSet({ width: 1000 });
65
72
  expect(sourceSet.length).toEqual(1);
66
73
  expect(sourceSet[0]).toEqual({
@@ -72,7 +79,8 @@ describe('Image', () => {
72
79
  });
73
80
  describe('An image that that is bigger than the maximum width that was requested', () => {
74
81
  it('returns the image at the same width as the maximum width', async () => {
75
- const model = new Image_1.CAPIImage({ ...mockImage, pixelWidth: 4000, pixelHeight: 4000 }, context);
82
+ getImageMetadata.mockResolvedValue({ width: 4000, height: 4000 });
83
+ const model = new Image_1.CAPIImage(mockImage, context);
76
84
  const sourceSet = await model.sourceSet({ width: imageService_1.MAX_IMAGE_WIDTH });
77
85
  expect(sourceSet.length).toEqual(1);
78
86
  expect(sourceSet[0]?.width).toEqual(imageService_1.MAX_IMAGE_WIDTH);
@@ -80,7 +88,8 @@ describe('Image', () => {
80
88
  });
81
89
  describe('A large image with the maxDpr argumet passed', () => {
82
90
  it('only returns sourceSet up to and including the maxDpr', async () => {
83
- const model = new Image_1.CAPIImage({ ...mockImage, pixelWidth: 5000, pixelHeight: 500 }, context);
91
+ getImageMetadata.mockResolvedValue({ width: 5000, height: 500 });
92
+ const model = new Image_1.CAPIImage(mockImage, context);
84
93
  const sourceSet = await model.sourceSet({ width: 1000, maxDpr: 2 });
85
94
  expect(sourceSet.length).toEqual(2);
86
95
  expect(sourceSet[0]?.dpr).toEqual(1);
@@ -98,6 +107,31 @@ describe('Image', () => {
98
107
  };
99
108
  const model = new Image_1.CAPIImage(invalidImage, context);
100
109
  await expect(model.sourceSet({ width: 1000, maxDpr: 2 })).rejects.toThrow('not-a-uuid is not a valid Content API Image ID');
110
+ expect(getImageMetadata).not.toHaveBeenCalled();
111
+ });
112
+ });
113
+ describe('When the image service fails to return metadata', () => {
114
+ let sourceSet;
115
+ beforeEach(async () => {
116
+ getImageMetadata.mockRejectedValue(null);
117
+ const model = new Image_1.CAPIImage(mockImage, context);
118
+ sourceSet = await model.sourceSet({ width: 3000 });
119
+ });
120
+ it('returns an image service URL with the requested width and max DPR 2', () => {
121
+ expect(sourceSet).toMatchInlineSnapshot(`
122
+ Array [
123
+ Object {
124
+ "dpr": 1,
125
+ "url": "https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3A00000000-0000-0000-0000-000000000001?source=image-test&fit=scale-down&quality=highest&width=3000&dpr=1",
126
+ "width": 3000,
127
+ },
128
+ Object {
129
+ "dpr": 2,
130
+ "url": "https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3A00000000-0000-0000-0000-000000000001?source=image-test&fit=scale-down&quality=highest&width=3000&dpr=2",
131
+ "width": 3000,
132
+ },
133
+ ]
134
+ `);
101
135
  });
102
136
  });
103
137
  });
@@ -145,14 +179,16 @@ describe('Image', () => {
145
179
  });
146
180
  });
147
181
  describe('width/height', () => {
148
- it('returns the original width and height from capi data', async () => {
182
+ it('returns the original width and height from the image service metadata', async () => {
183
+ getImageMetadata.mockResolvedValue({ width: 100, height: 200 });
149
184
  const model = new Image_1.CAPIImage(mockImage, context);
150
185
  const { width, height } = (await model.dimensions()) || {};
151
- expect(width).toEqual(5000);
152
- expect(height).toEqual(1000);
186
+ expect(width).toEqual(100);
187
+ expect(height).toEqual(200);
153
188
  });
154
- it('returns null if no width and height in capi data', async () => {
155
- const model = new Image_1.CAPIImage({ ...mockImage, pixelHeight: undefined, pixelWidth: undefined }, context);
189
+ it('returns null if the image service metadata call fails', async () => {
190
+ getImageMetadata.mockRejectedValue(null);
191
+ const model = new Image_1.CAPIImage(mockImage, context);
156
192
  const dimensions = await model.dimensions();
157
193
  expect(dimensions).toEqual(null);
158
194
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Image.test.js","sourceRoot":"","sources":["../../src/model/Image.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Image.test.js","sourceRoot":"","sources":["../../src/model/Image.test.ts"],"names":[],"mappings":";;AAAA,mCAAmC;AACnC,2CAAoC;AAIpC,0DAAyD;AAGzD,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,MAAM,SAAS,GAAG;QAChB,EAAE,EAAE,iEAAiE;QACrE,IAAI,EAAE,0CAAmD;QACzD,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,sBAAsB;KAClC,CAAA;IAED,MAAM,OAAO,GAAG;QACd,GAAG,SAAS;QACZ,IAAI,EAAE,4CAAqD;KAC5D,CAAA;IAED,MAAM,gBAAgB,GAAG,cAAI,CAAC,EAAE,EAA8C,CAAA;IAE9E,MAAM,OAAO,GAAG;QACd,WAAW,EAAE;YACX,OAAO,EAAE;gBACP,gBAAgB;aACjB;YACD,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,EAAE;SACf;QACD,UAAU,EAAE,YAAY;KACE,CAAA;IAE5B,UAAU,CAAC,GAAG,EAAE;QACd,gBAAgB,CAAC,SAAS,EAAE,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAChE,IAAI,SAAwB,CAAA;YAE5B,SAAS,CAAC,KAAK,IAAI,EAAE;gBACnB,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;gBACjE,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;gBAC/C,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACpD,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;gBAC7D,MAAM,CACJ,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CACzB,MAAM,CAAC,GAAG,CAAC,UAAU,CACnB,+CAA+C,CAChD,CACF,CACF,CAAC,UAAU,EAAE,CAAA;YAChB,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;gBAClD,MAAM,CACJ,SAAS,CAAC,KAAK,CACb,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAC7D,CACF,CAAC,UAAU,EAAE,CAAA;YAChB,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,0IAA0I,EAAE,GAAG,EAAE;gBAClJ,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAC5C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gFAAgF,EAAE,GAAG,EAAE;YAC9F,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBAC1E,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;gBAChE,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;gBAC/C,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;gBACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC3B,GAAG,EAAE,CAAC;oBACN,GAAG,EAAE,yKAAyK;oBAC9K,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,iEAAiE,EAAE,GAAG,EAAE;YAC/E,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;gBACnE,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;gBAC/D,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;gBAC/C,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;gBACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC3B,GAAG,EAAE,CAAC;oBACN,GAAG,EAAE,wKAAwK;oBAC7K,KAAK,EAAE,GAAG;iBACX,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,wEAAwE,EAAE,GAAG,EAAE;YACtF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;gBACxE,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;gBACjE,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;gBAC/C,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,8BAAe,EAAE,CAAC,CAAA;gBACnE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,8BAAe,CAAC,CAAA;YACtD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;YAC5D,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;gBACrE,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;gBAChE,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;gBAC/C,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;gBACnE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YACtC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACvC,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;gBAC/B,MAAM,YAAY,GAAG;oBACnB,IAAI,EAAE,0CAAmD;oBACzD,EAAE,EAAE,YAAY;oBAChB,KAAK,EAAE,EAAE;oBACT,WAAW,EAAE,EAAE;oBACf,SAAS,EAAE,EAAE;iBACd,CAAA;gBACD,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;gBAClD,MAAM,MAAM,CACV,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAC5C,CAAC,OAAO,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAA;gBACnE,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;YACjD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;YAC/D,IAAI,SAAwB,CAAA;YAC5B,UAAU,CAAC,KAAK,IAAI,EAAE;gBACpB,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;gBACxC,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;gBAC/C,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACpD,CAAC,CAAC,CAAA;YACF,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;gBAC7E,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;SAavC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB;gBACE,GAAG,SAAS;gBACZ,MAAM,EAAE,SAAS;aAClB,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;YAClF,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB;gBACE,GAAG,SAAS;gBACZ,MAAM,EAAE,sBAAoD;aAC7D,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC1E,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB;gBACE,GAAG,SAAS;gBACZ,MAAM,EAAE,gBAAgB;aACzB,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB;gBACE,GAAG,SAAS;gBACZ,eAAe,EAAE,OAAO;aACzB,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB;gBACE,GAAG,SAAS;gBACZ,eAAe,EAAE,OAAO;aACzB,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,KAAK,GAAG,IAAI,iBAAS,CACzB;gBACE,GAAG,SAAS;aACb,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;YAC/D,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAA;YAC1D,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;YAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;YAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,kBAAkB,GAAG;gBACzB,GAAG,SAAS;gBACZ,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;aAClC,CAAA;YACD,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAA;YACxD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;YAChC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACpC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;YAChC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC9B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACnB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,KAAK,GAAG,IAAI,iBAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAA;YACvB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,GAAG,GAAG,IAAI,iBAAS,CACvB;gBACE,GAAG,SAAS;gBACZ,WAAW,EAAE,gCAAgC;aAC9C,EACD,OAAO,CACR,CAAC,GAAG,EAAE,CAAA;YACP,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;QAC9D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kGAAkG,EAAE,GAAG,EAAE;YAC1G,MAAM,GAAG,GAAG,IAAI,iBAAS,CACvB;gBACE,GAAG,SAAS;gBACZ,WAAW,EAAE,EAAE;aAChB,EACD,OAAO,CACR,CAAC,GAAG,EAAE,CAAA;YACP,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yGAAyG,EAAE,GAAG,EAAE;YACjH,MAAM,GAAG,GAAG,IAAI,iBAAS,CACvB;gBACE,GAAG,OAAO;gBACV,WAAW,EAAE,EAAE;aAChB,EACD,OAAO,CACR,CAAC,GAAG,EAAE,CAAA;YACP,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -12,6 +12,16 @@ const packageJson = JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(
12
12
  exports.version = packageJson.version;
13
13
  function handleContentError(error, uuid) {
14
14
  if (error instanceof errors_1.BaseError) {
15
+ if (error.data.upstreamStatusCode === 400) {
16
+ return new errors_1.HttpError({
17
+ code: 'CONTENT_BAD_REQUEST',
18
+ message: 'Bad request when requesting content from Content API',
19
+ cause: error,
20
+ uuid,
21
+ statusCode: 400,
22
+ relatesToSystems: ['up-ica'],
23
+ });
24
+ }
15
25
  if (error.data.upstreamStatusCode === 404) {
16
26
  return new errors_1.HttpError({
17
27
  code: 'CONTENT_NOT_FOUND',
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/resolvers/core.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AACnB,gDAAuB;AAEvB,wDAAoD;AACpD,2DAAqE;AAErE,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,SAAS,kBAAkB,CAAC,KAAc,EAAE,IAAY;IACtD,IAAI,KAAK,YAAY,kBAAS,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,GAAG,EAAE,CAAC;YAC1C,OAAO,IAAI,kBAAS,CAAC;gBACnB,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,kCAAkC;gBAC3C,KAAK,EAAE,KAAK;gBACZ,IAAI;gBACJ,UAAU,EAAE,GAAG;gBACf,gBAAgB,EAAE,CAAC,QAAQ,CAAC;aAC7B,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;YAC7C,MAAM,IAAI,kBAAS,CAAC;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,0CAA0C;gBACnD,UAAU,EAAE,GAAG;aAChB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,eAAO;QACtB,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO;YAC5B,IAAI,CAAC;gBACH,OAAO,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC7D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO;YACnB,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpD,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,CAAC;gBACX,OAAO,qBAAqB,IAAI,CAAC,IAAI,EAAE,CAAA;YACzC,CAAC;iBAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC5B,OAAO,WAAW,IAAI,CAAC,IAAI,SAAS,CAAA;YACtC,CAAC;iBAAM,CAAC;gBACN,OAAO,iBAAiB,CAAA;YAC1B,CAAC;QACH,CAAC;KACF;CAIF,CAAA;AAED,kBAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/resolvers/core.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@financial-times/cp-content-pipeline-schema",
3
- "version": "3.7.1",
3
+ "version": "3.7.3",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -1,8 +1,10 @@
1
1
  import { CAPIImage } from './Image'
2
- import logger from '@dotcom-reliability-kit/logger'
2
+ import { jest } from '@jest/globals'
3
3
  import type { QueryContext } from '..'
4
4
  import { Image } from './schemas/capi/internal-content'
5
+ import { OrigamiImageDataSource } from '../datasources/origami-image'
5
6
  import { MAX_IMAGE_WIDTH } from '../helpers/imageService'
7
+ import type { ImageSource } from '../generated'
6
8
 
7
9
  describe('Image', () => {
8
10
  const mockImage = {
@@ -11,8 +13,6 @@ describe('Image', () => {
11
13
  title: 'title',
12
14
  description: 'description',
13
15
  binaryUrl: 'cloudfront.com/image',
14
- pixelWidth: 5000,
15
- pixelHeight: 1000,
16
16
  }
17
17
 
18
18
  const graphic = {
@@ -20,17 +20,34 @@ describe('Image', () => {
20
20
  type: 'http://www.ft.com/ontology/content/Graphic' as const,
21
21
  }
22
22
 
23
+ const getImageMetadata = jest.fn<OrigamiImageDataSource['getImageMetadata']>()
24
+
23
25
  const context = {
24
- logger,
26
+ dataSources: {
27
+ origami: {
28
+ getImageMetadata,
29
+ },
30
+ capi: {},
31
+ vanityUrls: {},
32
+ },
25
33
  systemCode: 'image-test',
26
34
  } as unknown as QueryContext
27
35
 
36
+ beforeEach(() => {
37
+ getImageMetadata.mockReset()
38
+ })
39
+
28
40
  describe('sourceSet', () => {
29
41
  describe('An image that is provided with a high resolution', () => {
30
- it('transforms the URL to use the Origami Image Service', async () => {
42
+ let sourceSet: ImageSource[]
43
+
44
+ beforeAll(async () => {
45
+ getImageMetadata.mockResolvedValue({ width: 5000, height: 1000 })
31
46
  const model = new CAPIImage(mockImage, context)
32
- const sourceSet = await model.sourceSet({ width: 1000 })
47
+ sourceSet = await model.sourceSet({ width: 1000 })
48
+ })
33
49
 
50
+ it('transforms the URL to use the Origami Image Service', () => {
34
51
  expect(
35
52
  sourceSet.every((source) =>
36
53
  source.url.startsWith(
@@ -40,10 +57,7 @@ describe('Image', () => {
40
57
  ).toBeTruthy()
41
58
  })
42
59
 
43
- it('resizes the image to the requested width', async () => {
44
- const model = new CAPIImage(mockImage, context)
45
- const sourceSet = await model.sourceSet({ width: 1000 })
46
-
60
+ it('resizes the image to the requested width', () => {
47
61
  expect(
48
62
  sourceSet.every(
49
63
  (source) =>
@@ -52,9 +66,7 @@ describe('Image', () => {
52
66
  ).toBeTruthy()
53
67
  })
54
68
 
55
- it('includes sourceSet for all the possible resolutions we can display the image at, given the requested width and the original source width', async () => {
56
- const model = new CAPIImage(mockImage, context)
57
- const sourceSet = await model.sourceSet({ width: 1000 })
69
+ it('includes sourceSet for all the possible resolutions we can display the image at, given the requested width and the original source width', () => {
58
70
  expect(sourceSet.length).toEqual(5)
59
71
  expect(sourceSet[0]?.dpr).toEqual(1)
60
72
  expect(sourceSet[0]?.url).toMatch(/dpr=1/)
@@ -65,10 +77,8 @@ describe('Image', () => {
65
77
 
66
78
  describe("An image that that isn't wide enough to generate high-resolution sourceSet for", () => {
67
79
  it('returns an array with a single resolution iamge service UR', async () => {
68
- const model = new CAPIImage(
69
- { ...mockImage, pixelWidth: 1500, pixelHeight: 500 },
70
- context
71
- )
80
+ getImageMetadata.mockResolvedValue({ width: 1500, height: 500 })
81
+ const model = new CAPIImage(mockImage, context)
72
82
  const sourceSet = await model.sourceSet({ width: 1000 })
73
83
  expect(sourceSet.length).toEqual(1)
74
84
  expect(sourceSet[0]).toEqual({
@@ -81,10 +91,8 @@ describe('Image', () => {
81
91
 
82
92
  describe('An image that that is smaller than the width that was requested', () => {
83
93
  it('returns the image at the same width as the original', async () => {
84
- const model = new CAPIImage(
85
- { ...mockImage, pixelWidth: 500, pixelHeight: 500 },
86
- context
87
- )
94
+ getImageMetadata.mockResolvedValue({ width: 500, height: 500 })
95
+ const model = new CAPIImage(mockImage, context)
88
96
  const sourceSet = await model.sourceSet({ width: 1000 })
89
97
  expect(sourceSet.length).toEqual(1)
90
98
  expect(sourceSet[0]).toEqual({
@@ -97,10 +105,8 @@ describe('Image', () => {
97
105
 
98
106
  describe('An image that that is bigger than the maximum width that was requested', () => {
99
107
  it('returns the image at the same width as the maximum width', async () => {
100
- const model = new CAPIImage(
101
- { ...mockImage, pixelWidth: 4000, pixelHeight: 4000 },
102
- context
103
- )
108
+ getImageMetadata.mockResolvedValue({ width: 4000, height: 4000 })
109
+ const model = new CAPIImage(mockImage, context)
104
110
  const sourceSet = await model.sourceSet({ width: MAX_IMAGE_WIDTH })
105
111
  expect(sourceSet.length).toEqual(1)
106
112
  expect(sourceSet[0]?.width).toEqual(MAX_IMAGE_WIDTH)
@@ -109,10 +115,8 @@ describe('Image', () => {
109
115
 
110
116
  describe('A large image with the maxDpr argumet passed', () => {
111
117
  it('only returns sourceSet up to and including the maxDpr', async () => {
112
- const model = new CAPIImage(
113
- { ...mockImage, pixelWidth: 5000, pixelHeight: 500 },
114
- context
115
- )
118
+ getImageMetadata.mockResolvedValue({ width: 5000, height: 500 })
119
+ const model = new CAPIImage(mockImage, context)
116
120
  const sourceSet = await model.sourceSet({ width: 1000, maxDpr: 2 })
117
121
  expect(sourceSet.length).toEqual(2)
118
122
  expect(sourceSet[0]?.dpr).toEqual(1)
@@ -133,6 +137,32 @@ describe('Image', () => {
133
137
  await expect(
134
138
  model.sourceSet({ width: 1000, maxDpr: 2 })
135
139
  ).rejects.toThrow('not-a-uuid is not a valid Content API Image ID')
140
+ expect(getImageMetadata).not.toHaveBeenCalled()
141
+ })
142
+ })
143
+
144
+ describe('When the image service fails to return metadata', () => {
145
+ let sourceSet: ImageSource[]
146
+ beforeEach(async () => {
147
+ getImageMetadata.mockRejectedValue(null)
148
+ const model = new CAPIImage(mockImage, context)
149
+ sourceSet = await model.sourceSet({ width: 3000 })
150
+ })
151
+ it('returns an image service URL with the requested width and max DPR 2', () => {
152
+ expect(sourceSet).toMatchInlineSnapshot(`
153
+ Array [
154
+ Object {
155
+ "dpr": 1,
156
+ "url": "https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3A00000000-0000-0000-0000-000000000001?source=image-test&fit=scale-down&quality=highest&width=3000&dpr=1",
157
+ "width": 3000,
158
+ },
159
+ Object {
160
+ "dpr": 2,
161
+ "url": "https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3A00000000-0000-0000-0000-000000000001?source=image-test&fit=scale-down&quality=highest&width=3000&dpr=2",
162
+ "width": 3000,
163
+ },
164
+ ]
165
+ `)
136
166
  })
137
167
  })
138
168
  })
@@ -211,18 +241,17 @@ describe('Image', () => {
211
241
  })
212
242
 
213
243
  describe('width/height', () => {
214
- it('returns the original width and height from capi data', async () => {
244
+ it('returns the original width and height from the image service metadata', async () => {
245
+ getImageMetadata.mockResolvedValue({ width: 100, height: 200 })
215
246
  const model = new CAPIImage(mockImage, context)
216
247
  const { width, height } = (await model.dimensions()) || {}
217
- expect(width).toEqual(5000)
218
- expect(height).toEqual(1000)
248
+ expect(width).toEqual(100)
249
+ expect(height).toEqual(200)
219
250
  })
220
251
 
221
- it('returns null if no width and height in capi data', async () => {
222
- const model = new CAPIImage(
223
- { ...mockImage, pixelHeight: undefined, pixelWidth: undefined },
224
- context
225
- )
252
+ it('returns null if the image service metadata call fails', async () => {
253
+ getImageMetadata.mockRejectedValue(null)
254
+ const model = new CAPIImage(mockImage, context)
226
255
  const dimensions = await model.dimensions()
227
256
  expect(dimensions).toEqual(null)
228
257
  })
@@ -11,7 +11,8 @@ import {
11
11
  validLiteralUnionValue,
12
12
  } from '../resolvers/literal-union'
13
13
  import { ImageFormat, ImageType } from '../resolvers/scalars'
14
- import { BaseError } from '@dotcom-reliability-kit/errors'
14
+ import isError from '../helpers/isError'
15
+ import { BaseError, OperationalError } from '@dotcom-reliability-kit/errors'
15
16
  import type { ImageSource } from '../generated'
16
17
 
17
18
  export type ImageSourceArgs = {
@@ -156,18 +157,25 @@ export class CAPIImage implements Image {
156
157
  height: this.capiImage.pixelHeight,
157
158
  }
158
159
  }
159
-
160
- // HACK:KB:20241029 graphics and images in layouts don't have pixelWidth/
161
- // pixelHeight because of reasons. we want to avoid calling Image Service
162
- // to improve performance. skip calling Image Service for the time being
163
- this.context.logger.warn({
164
- event: 'SKIPPING_IMAGE_DIMENSIONS',
165
- message: 'Not calling Image Service to get graphics dimensions',
166
- url: this.capiImage.binaryUrl,
167
- type: this.type(),
168
- })
169
-
170
- return null
160
+ try {
161
+ const imageMetadata = await this.#dataSources.origami.getImageMetadata(
162
+ this.capiImage.binaryUrl
163
+ )
164
+ return imageMetadata
165
+ } catch (error) {
166
+ if (isError(error)) {
167
+ this.context.logger.warn({
168
+ event: 'RECOVERABLE_ERROR',
169
+ error: new OperationalError({
170
+ code: 'IMAGE_DIMENSIONS_ERROR',
171
+ message: `Failed to get dimensions for ${this.capiImage.binaryUrl}`,
172
+ url: this.capiImage.binaryUrl,
173
+ cause: error,
174
+ }),
175
+ })
176
+ }
177
+ return null
178
+ }
171
179
  }
172
180
 
173
181
  credit() {
@@ -12,6 +12,16 @@ export const version = packageJson.version
12
12
 
13
13
  function handleContentError(error: unknown, uuid: string): Error | unknown {
14
14
  if (error instanceof BaseError) {
15
+ if (error.data.upstreamStatusCode === 400) {
16
+ return new HttpError({
17
+ code: 'CONTENT_BAD_REQUEST',
18
+ message: 'Bad request when requesting content from Content API',
19
+ cause: error,
20
+ uuid,
21
+ statusCode: 400,
22
+ relatesToSystems: ['up-ica'],
23
+ })
24
+ }
15
25
  if (error.data.upstreamStatusCode === 404) {
16
26
  return new HttpError({
17
27
  code: 'CONTENT_NOT_FOUND',