@financial-times/cp-content-pipeline-schema 2.7.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/lib/datasources/capi.d.ts +1 -1
- package/lib/datasources/capi.js +14 -39
- package/lib/datasources/capi.js.map +1 -1
- package/lib/datasources/instrumented.d.ts +4 -1
- package/lib/datasources/instrumented.js +16 -16
- package/lib/datasources/instrumented.js.map +1 -1
- package/lib/datasources/origami-image.d.ts +1 -1
- package/lib/datasources/origami-image.js +7 -21
- package/lib/datasources/origami-image.js.map +1 -1
- package/lib/datasources/twitter.d.ts +1 -1
- package/lib/datasources/twitter.js +7 -21
- package/lib/datasources/twitter.js.map +1 -1
- package/lib/generated/index.d.ts +24 -0
- package/lib/model/CapiResponse.d.ts +2 -0
- package/lib/model/CapiResponse.js +40 -4
- package/lib/model/CapiResponse.js.map +1 -1
- package/lib/model/Concept.d.ts +0 -2
- package/lib/model/Concept.js +1 -57
- package/lib/model/Concept.js.map +1 -1
- package/lib/model/Concept.test.js +0 -40
- package/lib/model/Concept.test.js.map +1 -1
- package/lib/model/Image.js +8 -3
- package/lib/model/Image.js.map +1 -1
- package/lib/model/Person.d.ts +21 -0
- package/lib/model/Person.js +106 -0
- package/lib/model/Person.js.map +1 -0
- package/lib/model/Person.test.d.ts +1 -0
- package/lib/model/Person.test.js +96 -0
- package/lib/model/Person.test.js.map +1 -0
- package/lib/model/Topper.d.ts +2 -1
- package/lib/model/Topper.js +18 -16
- package/lib/model/Topper.js.map +1 -1
- package/lib/model/Topper.test.js +29 -0
- package/lib/model/Topper.test.js.map +1 -1
- package/lib/model/schemas/capi/base-schema.d.ts +3 -0
- package/lib/model/schemas/capi/base-schema.js +1 -0
- package/lib/model/schemas/capi/base-schema.js.map +1 -1
- package/lib/resolvers/content-tree/bodyXMLToTree.js +1 -1
- package/lib/resolvers/content-tree/bodyXMLToTree.js.map +1 -1
- package/lib/resolvers/content-tree/bodyXMLToTree.test.js +7 -7
- package/lib/resolvers/content-tree/bodyXMLToTree.test.js.map +1 -1
- package/lib/resolvers/content-tree/references/Flourish.js +7 -2
- package/lib/resolvers/content-tree/references/Flourish.js.map +1 -1
- package/lib/resolvers/content-tree/references/RawImage.js +7 -2
- package/lib/resolvers/content-tree/references/RawImage.js.map +1 -1
- package/lib/resolvers/content-tree/references/Recommended.js +1 -1
- package/lib/resolvers/content-tree/references/Recommended.js.map +1 -1
- package/lib/resolvers/content-tree/references/Tweet.js +7 -2
- package/lib/resolvers/content-tree/references/Tweet.js.map +1 -1
- package/lib/resolvers/content-tree/references/Video.js +15 -2
- package/lib/resolvers/content-tree/references/Video.js.map +1 -1
- package/lib/resolvers/content.d.ts +1 -0
- package/lib/resolvers/content.js +1 -0
- package/lib/resolvers/content.js.map +1 -1
- package/lib/resolvers/core.js +16 -1
- package/lib/resolvers/core.js.map +1 -1
- package/lib/resolvers/index.d.ts +9 -3
- package/lib/resolvers/index.js +2 -0
- package/lib/resolvers/index.js.map +1 -1
- package/lib/resolvers/person.d.ts +8 -0
- package/lib/resolvers/person.js +11 -0
- package/lib/resolvers/person.js.map +1 -0
- package/lib/resolvers/topper.d.ts +3 -3
- package/package.json +5 -2
- package/queries/article.graphql +9 -0
- package/src/datasources/capi.ts +16 -44
- package/src/datasources/instrumented.ts +29 -31
- package/src/datasources/origami-image.ts +11 -25
- package/src/datasources/twitter.ts +10 -24
- package/src/generated/index.ts +28 -0
- package/src/model/CapiResponse.ts +51 -6
- package/src/model/Concept.test.ts +0 -49
- package/src/model/Concept.ts +1 -32
- package/src/model/Image.ts +9 -4
- package/src/model/Person.test.ts +110 -0
- package/src/model/Person.ts +79 -0
- package/src/model/Topper.test.ts +37 -0
- package/src/model/Topper.ts +18 -23
- package/src/model/schemas/capi/base-schema.ts +1 -0
- package/src/resolvers/content-tree/bodyXMLToTree.test.ts +7 -7
- package/src/resolvers/content-tree/bodyXMLToTree.ts +1 -1
- package/src/resolvers/content-tree/references/Flourish.ts +7 -2
- package/src/resolvers/content-tree/references/RawImage.ts +7 -2
- package/src/resolvers/content-tree/references/Recommended.ts +1 -1
- package/src/resolvers/content-tree/references/Tweet.ts +7 -2
- package/src/resolvers/content-tree/references/Video.ts +18 -4
- package/src/resolvers/content.ts +1 -0
- package/src/resolvers/core.ts +18 -1
- package/src/resolvers/index.ts +2 -0
- package/src/resolvers/person.ts +12 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/typedefs/content.graphql +1 -0
- package/typedefs/person.graphql +5 -0
- package/typedefs/topper.graphql +3 -3
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { OperationalError } from '@dotcom-reliability-kit/errors'
|
|
1
2
|
import { TweetResolvers } from '../../../generated'
|
|
2
3
|
import isError from '../../../helpers/isError'
|
|
3
4
|
|
|
@@ -10,9 +11,13 @@ export const Tweet = {
|
|
|
10
11
|
return tweet.html
|
|
11
12
|
} catch (error) {
|
|
12
13
|
if (isError(error)) {
|
|
13
|
-
context.logger.
|
|
14
|
+
context.logger.warn({
|
|
14
15
|
event: 'RECOVERABLE_ERROR',
|
|
15
|
-
error
|
|
16
|
+
error: new OperationalError({
|
|
17
|
+
code: 'TWEET_EMBED_ERROR',
|
|
18
|
+
message: `Failed to get HTML embed for tweet ${parent.reference.id}`,
|
|
19
|
+
cause: error,
|
|
20
|
+
}),
|
|
16
21
|
})
|
|
17
22
|
}
|
|
18
23
|
return null
|
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
import { uuidFromUrl } from '../../../helpers/metadata'
|
|
2
2
|
import { VideoReferenceResolvers } from '../../../generated'
|
|
3
|
+
import { OperationalError } from '@dotcom-reliability-kit/errors'
|
|
3
4
|
|
|
4
5
|
export const Video = {
|
|
5
6
|
// This will override the original id from the parent that is a URL.
|
|
6
7
|
id: (parent) => uuidFromUrl(parent.reference.id),
|
|
7
8
|
|
|
8
9
|
async title(parent, _args, context) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
try {
|
|
11
|
+
const capiResponse = await context.dataSources.capi.getContent(
|
|
12
|
+
uuidFromUrl(parent.reference.id)
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
return capiResponse.title()
|
|
16
|
+
} catch (error) {
|
|
17
|
+
if (error instanceof Error) {
|
|
18
|
+
throw new OperationalError({
|
|
19
|
+
code: 'VIDEO_CONTENT_FETCH_ERROR',
|
|
20
|
+
message: `Error getting content object for video ${parent.reference.id}`,
|
|
21
|
+
cause: error,
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
throw error
|
|
26
|
+
}
|
|
13
27
|
},
|
|
14
28
|
|
|
15
29
|
type(parent) {
|
package/src/resolvers/content.ts
CHANGED
package/src/resolvers/core.ts
CHANGED
|
@@ -2,6 +2,7 @@ import fs from 'fs'
|
|
|
2
2
|
import path from 'path'
|
|
3
3
|
import { QueryResolvers, MutationResolvers } from '../generated'
|
|
4
4
|
import { CapiResponse } from '../model/CapiResponse'
|
|
5
|
+
import { BaseError, HttpError } from '@dotcom-reliability-kit/errors'
|
|
5
6
|
|
|
6
7
|
const packageJson = JSON.parse(
|
|
7
8
|
fs.readFileSync(path.resolve(__dirname, '../../package.json'), 'utf-8')
|
|
@@ -13,7 +14,23 @@ const resolvers = {
|
|
|
13
14
|
Query: {
|
|
14
15
|
version: () => version,
|
|
15
16
|
async content(_, args, context) {
|
|
16
|
-
|
|
17
|
+
try {
|
|
18
|
+
return await context.dataSources.capi.getContent(args.uuid)
|
|
19
|
+
} catch (error) {
|
|
20
|
+
if (
|
|
21
|
+
error instanceof BaseError &&
|
|
22
|
+
error.data.upstreamStatusCode === 404
|
|
23
|
+
) {
|
|
24
|
+
throw new HttpError({
|
|
25
|
+
code: 'CONTENT_NOT_FOUND',
|
|
26
|
+
message: `Content ${args.uuid} not found in Content API`,
|
|
27
|
+
statusCode: 404,
|
|
28
|
+
relatesToSystems: ['up-ica'],
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
throw error
|
|
33
|
+
}
|
|
17
34
|
},
|
|
18
35
|
contentFromJSON(_, { content }, context) {
|
|
19
36
|
return CapiResponse.fromJSON(content, context)
|
package/src/resolvers/index.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { default as richText } from './richText'
|
|
|
9
9
|
import { default as scalars } from './scalars'
|
|
10
10
|
import { default as teaser } from './teaser'
|
|
11
11
|
import { default as topper } from './topper'
|
|
12
|
+
import { default as person } from './person'
|
|
12
13
|
import { resolvers as references } from './content-tree/references'
|
|
13
14
|
import { Resolvers } from '../generated'
|
|
14
15
|
|
|
@@ -25,6 +26,7 @@ const resolvers = {
|
|
|
25
26
|
...scalars,
|
|
26
27
|
...teaser,
|
|
27
28
|
...topper,
|
|
29
|
+
...person,
|
|
28
30
|
} satisfies Resolvers
|
|
29
31
|
|
|
30
32
|
export default resolvers
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { PersonResolvers } from '../generated'
|
|
2
|
+
const resolvers = {
|
|
3
|
+
Person: {
|
|
4
|
+
headshot: (parent) => parent.headshot(),
|
|
5
|
+
prefLabel: (parent) => parent.prefLabel(),
|
|
6
|
+
streamPage: (parent) => parent.streamPage(),
|
|
7
|
+
},
|
|
8
|
+
} satisfies {
|
|
9
|
+
Person: PersonResolvers
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default resolvers
|