@financial-times/cp-content-pipeline-schema 2.15.0 → 3.0.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.
Files changed (161) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/lib/datasources/capi.d.ts +2 -2
  3. package/lib/datasources/capi.js +4 -2
  4. package/lib/datasources/capi.js.map +1 -1
  5. package/lib/datasources/capi.test.js +2 -2
  6. package/lib/fixtures/capiObject.d.ts +2 -2
  7. package/lib/fixtures/capiObject.js +2 -0
  8. package/lib/fixtures/capiObject.js.map +1 -1
  9. package/lib/fixtures/capiPerson.d.ts +1 -1
  10. package/lib/generated/index.d.ts +296 -131
  11. package/lib/helpers/decorateHeadshotUrl.d.ts +1 -2
  12. package/lib/helpers/decorateHeadshotUrl.js +2 -3
  13. package/lib/helpers/decorateHeadshotUrl.js.map +1 -1
  14. package/lib/model/Byline.d.ts +8 -10
  15. package/lib/model/Byline.js +34 -33
  16. package/lib/model/Byline.js.map +1 -1
  17. package/lib/model/Byline.test.js +105 -52
  18. package/lib/model/Byline.test.js.map +1 -1
  19. package/lib/model/CapiResponse.d.ts +12 -16
  20. package/lib/model/CapiResponse.js +38 -41
  21. package/lib/model/CapiResponse.js.map +1 -1
  22. package/lib/model/CapiResponse.test.js +7 -18
  23. package/lib/model/CapiResponse.test.js.map +1 -1
  24. package/lib/model/Clip.d.ts +1 -1
  25. package/lib/model/Concept.d.ts +1 -1
  26. package/lib/model/Concept.js +1 -2
  27. package/lib/model/Concept.js.map +1 -1
  28. package/lib/model/FlourishSource.d.ts +1 -1
  29. package/lib/model/FlourishSource.js.map +1 -1
  30. package/lib/model/Image.d.ts +1 -1
  31. package/lib/model/LeadFlourish.test.js +1 -0
  32. package/lib/model/LeadFlourish.test.js.map +1 -1
  33. package/lib/model/Person.d.ts +6 -12
  34. package/lib/model/Person.js +39 -66
  35. package/lib/model/Person.js.map +1 -1
  36. package/lib/model/Person.test.js +7 -60
  37. package/lib/model/Person.test.js.map +1 -1
  38. package/lib/model/Picture.d.ts +1 -1
  39. package/lib/model/RichText.d.ts +1 -2
  40. package/lib/model/Topper.d.ts +1 -1
  41. package/lib/model/Topper.js +10 -8
  42. package/lib/model/Topper.js.map +1 -1
  43. package/lib/model/Topper.test.js +9 -10
  44. package/lib/model/Topper.test.js.map +1 -1
  45. package/lib/model/schemas/capi/article.d.ts +7 -4
  46. package/lib/model/schemas/capi/article.js +1 -0
  47. package/lib/model/schemas/capi/article.js.map +1 -1
  48. package/lib/model/schemas/capi/audio.d.ts +7 -4
  49. package/lib/model/schemas/capi/audio.js +1 -0
  50. package/lib/model/schemas/capi/audio.js.map +1 -1
  51. package/lib/model/schemas/capi/base-schema.d.ts +14 -123
  52. package/lib/model/schemas/capi/base-schema.js +7 -6
  53. package/lib/model/schemas/capi/base-schema.js.map +1 -1
  54. package/lib/model/schemas/capi/content-package.d.ts +10 -5
  55. package/lib/model/schemas/capi/content-package.js +2 -0
  56. package/lib/model/schemas/capi/content-package.js.map +1 -1
  57. package/lib/model/schemas/capi/index.d.ts +41 -22
  58. package/lib/model/schemas/capi/internal-content.d.ts +24 -0
  59. package/lib/model/schemas/capi/internal-content.js +3 -0
  60. package/lib/model/schemas/capi/internal-content.js.map +1 -0
  61. package/lib/model/schemas/capi/live-blog-package.d.ts +7 -4
  62. package/lib/model/schemas/capi/live-blog-package.js +1 -0
  63. package/lib/model/schemas/capi/live-blog-package.js.map +1 -1
  64. package/lib/model/schemas/capi/placeholder.d.ts +7 -4
  65. package/lib/model/schemas/capi/placeholder.js +1 -0
  66. package/lib/model/schemas/capi/placeholder.js.map +1 -1
  67. package/lib/model/schemas/capi/video.d.ts +10 -5
  68. package/lib/model/schemas/capi/video.js +2 -0
  69. package/lib/model/schemas/capi/video.js.map +1 -1
  70. package/lib/resolvers/concept.d.ts +37 -2
  71. package/lib/resolvers/concept.js +17 -10
  72. package/lib/resolvers/concept.js.map +1 -1
  73. package/lib/resolvers/content-tree/Workarounds.d.ts +19 -11
  74. package/lib/resolvers/content-tree/references/Author.d.ts +4 -0
  75. package/lib/resolvers/content-tree/references/Author.js +14 -0
  76. package/lib/resolvers/content-tree/references/Author.js.map +1 -0
  77. package/lib/resolvers/content-tree/references/ClipSet.d.ts +1 -1
  78. package/lib/resolvers/content-tree/references/ClipSet.js +1 -1
  79. package/lib/resolvers/content-tree/references/ClipSet.js.map +1 -1
  80. package/lib/resolvers/content-tree/references/Flourish.d.ts +1 -1
  81. package/lib/resolvers/content-tree/references/Reference.d.ts +1 -1
  82. package/lib/resolvers/content-tree/references/index.d.ts +4 -2
  83. package/lib/resolvers/content-tree/references/index.js +4 -1
  84. package/lib/resolvers/content-tree/references/index.js.map +1 -1
  85. package/lib/resolvers/content-tree/updateTreeWithReferenceIds.d.ts +3 -3
  86. package/lib/resolvers/content-tree/updateTreeWithReferenceIds.js +2 -3
  87. package/lib/resolvers/content-tree/updateTreeWithReferenceIds.js.map +1 -1
  88. package/lib/resolvers/content.d.ts +27 -18
  89. package/lib/resolvers/content.js +4 -2
  90. package/lib/resolvers/content.js.map +1 -1
  91. package/lib/resolvers/image.d.ts +12 -12
  92. package/lib/resolvers/index.d.ts +89 -42
  93. package/lib/resolvers/leadFlourish.d.ts +2 -1
  94. package/lib/resolvers/leadFlourish.js +1 -0
  95. package/lib/resolvers/leadFlourish.js.map +1 -1
  96. package/lib/resolvers/person.d.ts +1 -1
  97. package/lib/resolvers/person.js +1 -1
  98. package/lib/resolvers/person.js.map +1 -1
  99. package/lib/resolvers/picture.d.ts +4 -4
  100. package/lib/resolvers/richText.d.ts +1 -1
  101. package/lib/resolvers/teaser.d.ts +1 -1
  102. package/lib/resolvers/topper.d.ts +3 -3
  103. package/package.json +1 -1
  104. package/queries/article.graphql +35 -13
  105. package/src/datasources/capi.test.ts +3 -3
  106. package/src/datasources/capi.ts +5 -3
  107. package/src/fixtures/capiObject.ts +4 -2
  108. package/src/fixtures/capiPerson.ts +1 -1
  109. package/src/generated/index.ts +321 -132
  110. package/src/helpers/decorateHeadshotUrl.ts +2 -2
  111. package/src/model/Byline.test.ts +136 -55
  112. package/src/model/Byline.ts +49 -39
  113. package/src/model/CapiResponse.test.ts +9 -25
  114. package/src/model/CapiResponse.ts +83 -56
  115. package/src/model/Clip.ts +1 -1
  116. package/src/model/Concept.ts +3 -3
  117. package/src/model/FlourishSource.ts +1 -1
  118. package/src/model/Image.test.ts +1 -1
  119. package/src/model/Image.ts +1 -1
  120. package/src/model/LeadFlourish.test.ts +1 -0
  121. package/src/model/Person.test.ts +11 -62
  122. package/src/model/Person.ts +47 -51
  123. package/src/model/Picture.test.ts +1 -1
  124. package/src/model/Picture.ts +1 -1
  125. package/src/model/Topper.test.ts +22 -18
  126. package/src/model/Topper.ts +10 -9
  127. package/src/model/__snapshots__/Byline.test.ts.snap +166 -27
  128. package/src/model/schemas/capi/article.ts +1 -0
  129. package/src/model/schemas/capi/audio.ts +1 -0
  130. package/src/model/schemas/capi/base-schema.ts +5 -4
  131. package/src/model/schemas/capi/content-package.ts +2 -0
  132. package/src/model/schemas/capi/internal-content.ts +45 -0
  133. package/src/model/schemas/capi/live-blog-package.ts +1 -0
  134. package/src/model/schemas/capi/placeholder.ts +1 -0
  135. package/src/model/schemas/capi/video.ts +2 -0
  136. package/src/resolvers/concept.ts +29 -12
  137. package/src/resolvers/content-tree/Workarounds.ts +39 -20
  138. package/src/resolvers/content-tree/references/Author.ts +18 -0
  139. package/src/resolvers/content-tree/references/ClipSet.ts +6 -8
  140. package/src/resolvers/content-tree/references/ImageSet.ts +1 -1
  141. package/src/resolvers/content-tree/references/ScrollyImage.ts +1 -1
  142. package/src/resolvers/content-tree/references/index.ts +6 -1
  143. package/src/resolvers/content-tree/updateTreeWithReferenceIds.ts +6 -8
  144. package/src/resolvers/content.ts +4 -2
  145. package/src/resolvers/leadFlourish.ts +1 -0
  146. package/src/resolvers/person.ts +1 -1
  147. package/src/types/n-display-metadata.d.ts +1 -1
  148. package/tsconfig.tsbuildinfo +1 -1
  149. package/typedefs/clip.graphql +2 -2
  150. package/typedefs/concept.graphql +64 -2
  151. package/typedefs/content.graphql +63 -39
  152. package/typedefs/image.graphql +12 -12
  153. package/typedefs/leadFlourish.graphql +32 -0
  154. package/typedefs/person.graphql +2 -2
  155. package/typedefs/picture.graphql +6 -6
  156. package/typedefs/references/author.graphql +7 -0
  157. package/typedefs/references/clipSet.graphql +14 -2
  158. package/typedefs/references/tweet.graphql +1 -1
  159. package/typedefs/teaser.graphql +10 -10
  160. package/src/types/internal-content.d.ts +0 -55
  161. package/typedefs/leadFlouish.graphql +0 -29
@@ -7,7 +7,7 @@ declare const resolvers: {
7
7
  fallbackImage: import("../generated").Resolver<import("../generated").ResolverTypeWrapper<import("../model/Image").Image>, import("../model/Picture").Picture, import("..").QueryContext, {}>;
8
8
  imageType: import("../generated").Resolver<import("../generated").ResolverTypeWrapper<"image" | "graphic">, import("../model/Picture").Picture, import("..").QueryContext, {}>;
9
9
  images: import("../generated").Resolver<readonly import("../generated").ResolverTypeWrapper<import("../model/Image").Image>[], import("../model/Picture").Picture, import("..").QueryContext, {}>;
10
- layoutWidth: import("../generated").Resolver<import("../generated").Maybe<import("../generated").ResolverTypeWrapper<string>>, import("../model/Picture").Picture, import("..").QueryContext, {}>;
10
+ layoutWidth: import("../generated").Resolver<import("../generated").ResolverTypeWrapper<string>, import("../model/Picture").Picture, import("..").QueryContext, {}>;
11
11
  };
12
12
  PictureStandard: {
13
13
  [x: string]: any;
@@ -18,7 +18,7 @@ declare const resolvers: {
18
18
  fallbackImage: import("../generated").Resolver<import("../generated").ResolverTypeWrapper<import("../model/Image").Image>, import("../model/Picture").Picture, import("..").QueryContext, {}>;
19
19
  imageType: import("../generated").Resolver<import("../generated").ResolverTypeWrapper<"image" | "graphic">, import("../model/Picture").Picture, import("..").QueryContext, {}>;
20
20
  images: import("../generated").Resolver<readonly import("../generated").ResolverTypeWrapper<import("../model/Image").Image>[], import("../model/Picture").Picture, import("..").QueryContext, {}>;
21
- layoutWidth: import("../generated").Resolver<import("../generated").Maybe<import("../generated").ResolverTypeWrapper<string>>, import("../model/Picture").Picture, import("..").QueryContext, {}>;
21
+ layoutWidth: import("../generated").Resolver<import("../generated").ResolverTypeWrapper<string>, import("../model/Picture").Picture, import("..").QueryContext, {}>;
22
22
  };
23
23
  PictureInline: {
24
24
  [x: string]: any;
@@ -29,7 +29,7 @@ declare const resolvers: {
29
29
  fallbackImage: import("../generated").Resolver<import("../generated").ResolverTypeWrapper<import("../model/Image").Image>, import("../model/Picture").Picture, import("..").QueryContext, {}>;
30
30
  imageType: import("../generated").Resolver<import("../generated").ResolverTypeWrapper<"image" | "graphic">, import("../model/Picture").Picture, import("..").QueryContext, {}>;
31
31
  images: import("../generated").Resolver<readonly import("../generated").ResolverTypeWrapper<import("../model/Image").Image>[], import("../model/Picture").Picture, import("..").QueryContext, {}>;
32
- layoutWidth: import("../generated").Resolver<import("../generated").Maybe<import("../generated").ResolverTypeWrapper<string>>, import("../model/Picture").Picture, import("..").QueryContext, {}>;
32
+ layoutWidth: import("../generated").Resolver<import("../generated").ResolverTypeWrapper<string>, import("../model/Picture").Picture, import("..").QueryContext, {}>;
33
33
  };
34
34
  PictureFullBleed: {
35
35
  [x: string]: any;
@@ -40,7 +40,7 @@ declare const resolvers: {
40
40
  fallbackImage: import("../generated").Resolver<import("../generated").ResolverTypeWrapper<import("../model/Image").Image>, import("../model/Picture").Picture, import("..").QueryContext, {}>;
41
41
  imageType: import("../generated").Resolver<import("../generated").ResolverTypeWrapper<"image" | "graphic">, import("../model/Picture").Picture, import("..").QueryContext, {}>;
42
42
  images: import("../generated").Resolver<readonly import("../generated").ResolverTypeWrapper<import("../model/Image").Image>[], import("../model/Picture").Picture, import("..").QueryContext, {}>;
43
- layoutWidth: import("../generated").Resolver<import("../generated").Maybe<import("../generated").ResolverTypeWrapper<string>>, import("../model/Picture").Picture, import("..").QueryContext, {}>;
43
+ layoutWidth: import("../generated").Resolver<import("../generated").ResolverTypeWrapper<string>, import("../model/Picture").Picture, import("..").QueryContext, {}>;
44
44
  };
45
45
  };
46
46
  export default resolvers;
@@ -2,7 +2,7 @@ declare const resolvers: {
2
2
  RichText: {
3
3
  raw: (parent: import("../model/RichText").RichText) => string | null;
4
4
  structured: (parent: import("../model/RichText").RichText, _: {}, context: import("..").QueryContext) => Promise<{
5
- tree: import("./content-tree/Workarounds").Body;
5
+ tree: import("@financial-times/content-tree").ContentTree.Parent;
6
6
  text: string;
7
7
  references: import("./content-tree/references").ReferenceWithCAPIData[];
8
8
  }>;
@@ -4,7 +4,7 @@ declare const resolvers: {
4
4
  type: (parent: import("../model/CapiResponse").CapiResponse) => string;
5
5
  metaLink: (parent: import("../model/CapiResponse").CapiResponse) => Promise<import("../model/Concept").Concept | import("../model/CapiResponse").CapiResponse | null>;
6
6
  metaAltLink: (parent: import("../model/CapiResponse").CapiResponse) => Promise<import("../model/Concept").Concept | null>;
7
- metaPrefixText: (parent: import("../model/CapiResponse").CapiResponse) => Promise<string>;
7
+ metaPrefixText: (parent: import("../model/CapiResponse").CapiResponse) => Promise<string | null>;
8
8
  metaSuffixText: () => null;
9
9
  image: (parent: import("../model/CapiResponse").CapiResponse) => import("../model/Image").CAPIImage | null;
10
10
  indicators(parent: import("../model/CapiResponse").CapiResponse): {
@@ -23,11 +23,11 @@ declare const resolvers: {
23
23
  genreConcept: (topper: import("../model/Topper").Topper) => import("../model/Concept").Concept | null;
24
24
  };
25
25
  TopperWithHeadshot: {
26
- headshot: (topper: import("../model/Topper").Topper, args: Partial<import("../generated").TopperWithHeadshotHeadshotArgs>) => string | Promise<string | null> | null;
26
+ headshot: (topper: import("../model/Topper").Topper, args: Partial<import("../generated").TopperWithHeadshotHeadshotArgs>) => Promise<string | null>;
27
27
  };
28
28
  PodcastTopper: {
29
29
  brandConcept: (topper: import("../model/Topper").Topper) => import("../model/Concept").Concept | null;
30
- headshot: (topper: import("../model/Topper").Topper, args: Partial<import("../generated").PodcastTopperHeadshotArgs>) => string | Promise<string | null> | null;
30
+ headshot: (topper: import("../model/Topper").Topper, args: Partial<import("../generated").PodcastTopperHeadshotArgs>) => Promise<string | null>;
31
31
  isLargeHeadline: (topper: import("../model/Topper").Topper) => boolean;
32
32
  layout: (topper: import("../model/Topper").Topper) => string;
33
33
  columnist: (topper: import("../model/Topper").Topper) => import("../model/Concept").Concept | null;
@@ -42,7 +42,7 @@ declare const resolvers: {
42
42
  textShadow: import("../generated").Resolver<import("../generated").Maybe<import("../generated").ResolverTypeWrapper<boolean>>, import("../model/Topper").Topper, import("..").QueryContext, {}>;
43
43
  };
44
44
  OpinionTopper: {
45
- headshot: (topper: import("../model/Topper").Topper, args: Partial<import("../generated").OpinionTopperHeadshotArgs>) => string | Promise<string | null> | null;
45
+ headshot: (topper: import("../model/Topper").Topper, args: Partial<import("../generated").OpinionTopperHeadshotArgs>) => Promise<string | null>;
46
46
  isLargeHeadline: (topper: import("../model/Topper").Topper) => boolean;
47
47
  layout: (topper: import("../model/Topper").Topper) => string;
48
48
  columnist: (topper: import("../model/Topper").Topper) => import("../model/Concept").Concept | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@financial-times/cp-content-pipeline-schema",
3
- "version": "2.15.0",
3
+ "version": "3.0.0",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -1,4 +1,4 @@
1
- fragment Concept on Concept {
1
+ fragment Concept on ConceptInterface {
2
2
  id
3
3
  prefLabel
4
4
  types
@@ -6,10 +6,22 @@ fragment Concept on Concept {
6
6
  directType
7
7
  isPackageBrand
8
8
  predicate
9
+
10
+ ...ConceptURLs
11
+ ...Author
12
+ }
13
+
14
+ fragment ConceptURLs on ConceptInterface {
9
15
  url(vanity: $useVanities)
10
16
  relativeUrl: url(relative: true, vanity: $useVanities)
11
17
  }
12
18
 
19
+ fragment Author on Author {
20
+ person {
21
+ ...Person
22
+ }
23
+ }
24
+
13
25
  fragment StructuredTree on StructuredContent {
14
26
  tree
15
27
  }
@@ -17,14 +29,13 @@ fragment StructuredTree on StructuredContent {
17
29
  fragment MetaLink on MetaLink {
18
30
  ... on Concept {
19
31
  id
20
- url
21
- relativeUrl: url(relative: true)
22
32
  prefLabel
33
+ ...ConceptURLs
23
34
  }
24
35
  ... on ContentPackage {
25
36
  id
26
- url
27
- relativeUrl: url(relative: true)
37
+ url: url(vanity: $useVanities)
38
+ relativeUrl: url(vanity: $useVanities, relative: true)
28
39
  prefLabel: title
29
40
  }
30
41
  }
@@ -82,6 +93,7 @@ fragment Person on Person {
82
93
  }
83
94
 
84
95
  fragment FlourishSource on FlourishSource {
96
+ id
85
97
  url
86
98
  type
87
99
  format
@@ -361,10 +373,6 @@ fragment Transcript on RichText {
361
373
 
362
374
  fragment ClipSet on ClipSet {
363
375
  type
364
- autoplay
365
- loop
366
- muted
367
- dataLayout
368
376
  id
369
377
  noAudio
370
378
  caption
@@ -483,6 +491,19 @@ fragment Indicators on Indicators {
483
491
  isOpinion
484
492
  }
485
493
 
494
+ fragment BylineAuthor on AuthorReference {
495
+ concept {
496
+ ...ConceptURLs
497
+ }
498
+ }
499
+
500
+ fragment Byline on StructuredContent {
501
+ tree
502
+ references {
503
+ ...BylineAuthor
504
+ }
505
+ }
506
+
486
507
  fragment PinnedPost on Content {
487
508
  __typename
488
509
  id
@@ -500,8 +521,8 @@ fragment PinnedPost on Content {
500
521
  altTitle {
501
522
  promotionalTitle
502
523
  }
503
- byline(vanity: $useVanities) {
504
- tree
524
+ byline {
525
+ ...Byline
505
526
  }
506
527
  accessLevel
507
528
  canBeSyndicated
@@ -538,6 +559,7 @@ fragment Content on Content {
538
559
  publishedDate
539
560
  publishedTimestamp
540
561
  firstPublishedDate
562
+ modifiedTimestamp
541
563
  publishReference
542
564
  standfirst
543
565
  topper {
@@ -555,8 +577,8 @@ fragment Content on Content {
555
577
  altTitle {
556
578
  promotionalTitle
557
579
  }
558
- byline(vanity: $useVanities) {
559
- tree
580
+ byline {
581
+ ...Byline
560
582
  }
561
583
  annotations {
562
584
  ...Concept
@@ -3,7 +3,7 @@ import { CapiDataSource } from './capi'
3
3
  import { QueryContext } from '..'
4
4
  import { KeyValueCache } from '@apollo/utils.keyvaluecache'
5
5
  import { CapiResponse } from '../model/CapiResponse'
6
- import { ContentTypeSchemas } from '../types/internal-content'
6
+ import { ContentTypeSchemas } from '../model/schemas/capi/internal-content'
7
7
 
8
8
  const logger = new Logger()
9
9
  const metrics = { count: jest.fn() }
@@ -63,8 +63,8 @@ describe('CapiDataSource', () => {
63
63
  expect.arrayContaining([
64
64
  expect.objectContaining({
65
65
  prefix: 'contentPipelineArticle',
66
- id
67
- })
66
+ id,
67
+ }),
68
68
  ])
69
69
  )
70
70
  })
@@ -1,6 +1,5 @@
1
1
  import { CapiResponse } from '../model/CapiResponse'
2
2
  import { InstrumentedRESTDataSource } from './instrumented'
3
- import { CapiPerson } from '../types/internal-content'
4
3
  import { AugmentedRequest } from '@apollo/datasource-rest'
5
4
  import {
6
5
  KeyValueCache,
@@ -8,6 +7,7 @@ import {
8
7
  } from '@apollo/utils.keyvaluecache'
9
8
  import { CapiList } from '../model/CapiList'
10
9
  import TimeoutError from '../helpers/timeout-error'
10
+ import { Person } from '../model/Person'
11
11
 
12
12
  const REQUEST_TIMEOUT = process.env.CAPI_DATASOURCE_REQUEST_TIMEOUT
13
13
  ? parseInt(process.env.CAPI_DATASOURCE_REQUEST_TIMEOUT)
@@ -79,10 +79,12 @@ export class CapiDataSource extends InstrumentedRESTDataSource {
79
79
  return CapiResponse.fromJSON(content, this.context, packageContainer)
80
80
  }
81
81
 
82
- getPerson(uuid: string): Promise<CapiPerson> {
83
- return this.get(`people/${uuid}`, {
82
+ async getPerson(uuid: string): Promise<Person> {
83
+ const person = await this.get(`people/${uuid}`, {
84
84
  cacheOptions: { ttl: this.peopleCacheTTL },
85
85
  })
86
+
87
+ return Person.fromJson(person, this.context)
86
88
  }
87
89
 
88
90
  async getList(uuid: string): Promise<CapiList> {
@@ -1,6 +1,6 @@
1
- import { InternalContent } from '../types/internal-content'
1
+ import { Article } from '../model/schemas/capi/internal-content'
2
2
 
3
- export const baseCapiObject: InternalContent = {
3
+ export const baseCapiObject: Article = {
4
4
  id: 'http://www.ft.com/thing/3071cae8-a27c-4ab4-a0d4-7bb00df1d477',
5
5
  type: 'http://www.ft.com/ontology/content/Article',
6
6
  types: ['http://www.ft.com/ontology/content/Article'],
@@ -57,5 +57,7 @@ export const baseCapiObject: InternalContent = {
57
57
  accessLevel: 'premium' as const,
58
58
  embeds: [],
59
59
  publishedDate: '2024-04-02T10:00:09.935Z',
60
+ lastModified: '2024-04-02T12:34:56.789Z',
60
61
  firstPublishedDate: '',
62
+ canBeSyndicated: 'yes',
61
63
  }
@@ -1,4 +1,4 @@
1
- import type { CapiPerson } from '../types/internal-content'
1
+ import type { CapiPerson } from '../model/schemas/capi/internal-content'
2
2
 
3
3
  export const capiPerson: CapiPerson =
4
4
  // http://api.ft.com/people/4076f4fd-723b-4ce5-9934-fb29416554fa