@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
@@ -12,7 +12,7 @@ import type { LeadFlourish as LeadFlourishModel } from '../model/LeadFlourish';
12
12
  import type { FlourishSource as FlourishSourceModel } from '../model/FlourishSource';
13
13
  import type { ContentTree } from '@financial-times/content-tree';
14
14
  import type { ReferenceWithCAPIData } from '../resolvers/content-tree/references';
15
- import type { Video as VideoNode, ClipSet as ClipSetNode, OldClip as OldClipNode, RawImage as RawImageNode } from '../resolvers/content-tree/Workarounds';
15
+ import type { Video as VideoNode, Author as AuthorNode, ClipSet as ClipSetNode, OldClip as OldClipNode, RawImage as RawImageNode } from '../resolvers/content-tree/Workarounds';
16
16
  import type { QueryContext } from '../';
17
17
  export type Maybe<T> = T | null;
18
18
  export type InputMaybe<T> = Maybe<T>;
@@ -116,7 +116,7 @@ export type Scalars = {
116
116
  };
117
117
  export type Accessibility = {
118
118
  /** An array of captions for the clip. */
119
- readonly captions?: Maybe<ReadonlyArray<Maybe<Caption>>>;
119
+ readonly captions?: Maybe<ReadonlyArray<Caption>>;
120
120
  /** An abstract syntax tree of the transcript for the clip. */
121
121
  readonly transcript?: Maybe<RichText>;
122
122
  };
@@ -136,7 +136,7 @@ export type Article = Content & {
136
136
  /** An alternative title of the article. */
137
137
  readonly altTitle?: Maybe<AltTitle>;
138
138
  /** An array of concepts related to the article, eg. organisations or topics. */
139
- readonly annotations?: Maybe<ReadonlyArray<Maybe<Concept>>>;
139
+ readonly annotations: ReadonlyArray<ConceptInterface>;
140
140
  /** An abstract syntax tree of the article content. */
141
141
  readonly body?: Maybe<RichText>;
142
142
  /** The raw string of the XML as returned from ContentAPI. */
@@ -161,13 +161,15 @@ export type Article = Content & {
161
161
  readonly instantAlertConcept?: Maybe<Concept>;
162
162
  /** An image object containing the url and the caption, to be displayed usually before the article content. */
163
163
  readonly mainImage?: Maybe<Image>;
164
+ /** The number of milliseconds since the unix epoch the article was last changed, eg '1712140552443'. */
165
+ readonly modifiedTimestamp: Scalars['Float']['output'];
164
166
  /** The party that originated the article, eg. 'FT'. */
165
167
  readonly originatingParty?: Maybe<Scalars['String']['output']>;
166
168
  /** A string ID used to trace content publishes through the pipeline, e.g. 'republish_tid_JNhUrBjdXo'. */
167
- readonly publishReference: Scalars['String']['output'];
168
- /** The ISO string date the article was published, eg. '2024-04-03T10:35:52.443Z'. */
169
+ readonly publishReference?: Maybe<Scalars['String']['output']>;
170
+ /** The ISO string date the article was marked as published, eg. '2024-04-03T10:35:52.443Z'. */
169
171
  readonly publishedDate: Scalars['String']['output'];
170
- /** The number of milliseconds since the unix epoch the article was published, eg '1712140552443'. */
172
+ /** The number of milliseconds since the unix epoch the article was marked as published, eg '1712140552443'. */
171
173
  readonly publishedTimestamp: Scalars['Float']['output'];
172
174
  /** An introductory paragraph of the article. */
173
175
  readonly standfirst?: Maybe<Scalars['String']['output']>;
@@ -182,6 +184,9 @@ export type Article = Content & {
182
184
  /** The url of the concept. Vanity urls replace long, randomly generated urls - they are more user friendly and concise. Relative urls are relative to the current domain. */
183
185
  readonly url: Scalars['String']['output'];
184
186
  };
187
+ export type ArticleAnnotationsArgs = {
188
+ byPredicate?: InputMaybe<Scalars['String']['input']>;
189
+ };
185
190
  export type ArticleBylineArgs = {
186
191
  vanity?: InputMaybe<Scalars['Boolean']['input']>;
187
192
  };
@@ -197,7 +202,7 @@ export type Audio = Content & {
197
202
  /** An alternative title of the article. */
198
203
  readonly altTitle?: Maybe<AltTitle>;
199
204
  /** An array of concepts related to the article, eg. organisations or topics. */
200
- readonly annotations?: Maybe<ReadonlyArray<Maybe<Concept>>>;
205
+ readonly annotations: ReadonlyArray<ConceptInterface>;
201
206
  /** An abstract syntax tree of the article content. */
202
207
  readonly body?: Maybe<RichText>;
203
208
  /** The raw string of the XML as returned from ContentAPI. */
@@ -222,13 +227,15 @@ export type Audio = Content & {
222
227
  readonly mainImage?: Maybe<Image>;
223
228
  /** An array of media objects containing the url, the duration, the filesize and the media type. */
224
229
  readonly media?: Maybe<ReadonlyArray<Maybe<Media>>>;
230
+ /** The number of milliseconds since the unix epoch the article was last changed, eg '1712140552443'. */
231
+ readonly modifiedTimestamp: Scalars['Float']['output'];
225
232
  /** The party that originated the article, eg. 'FT'. */
226
233
  readonly originatingParty?: Maybe<Scalars['String']['output']>;
227
234
  /** A string ID used to trace content publishes through the pipeline, e.g. 'republish_tid_JNhUrBjdXo'. */
228
- readonly publishReference: Scalars['String']['output'];
229
- /** The ISO string date the article was published, eg. '2024-04-03T10:35:52.443Z'. */
235
+ readonly publishReference?: Maybe<Scalars['String']['output']>;
236
+ /** The ISO string date the article was marked as published, eg. '2024-04-03T10:35:52.443Z'. */
230
237
  readonly publishedDate: Scalars['String']['output'];
231
- /** The number of milliseconds since the unix epoch the article was published, eg '1712140552443'. */
238
+ /** The number of milliseconds since the unix epoch the article was marked as published, eg '1712140552443'. */
232
239
  readonly publishedTimestamp: Scalars['Float']['output'];
233
240
  /** An introductory paragraph of the article. */
234
241
  readonly standfirst?: Maybe<Scalars['String']['output']>;
@@ -243,6 +250,9 @@ export type Audio = Content & {
243
250
  /** The url of the concept. Vanity urls replace long, randomly generated urls - they are more user friendly and concise. Relative urls are relative to the current domain. */
244
251
  readonly url: Scalars['String']['output'];
245
252
  };
253
+ export type AudioAnnotationsArgs = {
254
+ byPredicate?: InputMaybe<Scalars['String']['input']>;
255
+ };
246
256
  export type AudioBylineArgs = {
247
257
  vanity?: InputMaybe<Scalars['Boolean']['input']>;
248
258
  };
@@ -250,6 +260,40 @@ export type AudioUrlArgs = {
250
260
  relative?: InputMaybe<Scalars['Boolean']['input']>;
251
261
  vanity?: InputMaybe<Scalars['Boolean']['input']>;
252
262
  };
263
+ /** An author is a concept that represents a person that was involved in the writing of an item of content. */
264
+ export type Author = ConceptInterface & {
265
+ /** The api url of the concept, eg. 'http://api.ft.com/things/a579350c-61ce-4c00-97ca-ddaa2e0cacf6'. */
266
+ readonly apiUrl?: Maybe<Scalars['String']['output']>;
267
+ /** The type of the concept, eg. 'http://www.ft.com/ontology/Topic'. */
268
+ readonly directType?: Maybe<Scalars['String']['output']>;
269
+ /** The unique identifier of the concept - a uuid or a url. */
270
+ readonly id: Scalars['ID']['output'];
271
+ /** Whether the concept is part of a package brand eg. 'ftSeries' or 'ftGuides'. */
272
+ readonly isPackageBrand?: Maybe<Scalars['Boolean']['output']>;
273
+ /** The People API data for the person referenced by this Author concept. */
274
+ readonly person: Person;
275
+ /** The relationship between the concept and the article, eg. 'http://www.ft.com/ontology/hasAuthor'. */
276
+ readonly predicate?: Maybe<Scalars['String']['output']>;
277
+ /** The preferred label of the concept, eg. 'Work & Careers'. */
278
+ readonly prefLabel: Scalars['String']['output'];
279
+ /** The type of the concept, eg. 'TOPIC'. */
280
+ readonly type?: Maybe<Scalars['String']['output']>;
281
+ /** An array of types, eg. ['http://www.ft.com/ontology/core/Thing', 'http://www.ft.com/ontology/Topic']. */
282
+ readonly types?: Maybe<ReadonlyArray<Scalars['String']['output']>>;
283
+ /** The url of the media, eg. 'https://next-media-api.ft.com/renditions/16868569859480/0x0.mp3'. */
284
+ readonly url: Scalars['String']['output'];
285
+ };
286
+ /** An author is a concept that represents a person that was involved in the writing of an item of content. */
287
+ export type AuthorUrlArgs = {
288
+ relative?: InputMaybe<Scalars['Boolean']['input']>;
289
+ vanity?: InputMaybe<Scalars['Boolean']['input']>;
290
+ };
291
+ export type AuthorReference = Reference & {
292
+ /** The concept for this author */
293
+ readonly concept?: Maybe<ConceptInterface>;
294
+ /** The type of the reference, 'author' */
295
+ readonly type: Scalars['String']['output'];
296
+ };
253
297
  export type BasicTopper = Topper & {
254
298
  /** Whether the topper should have a background box. */
255
299
  readonly backgroundBox?: Maybe<Scalars['Boolean']['output']>;
@@ -313,17 +357,23 @@ export type Clip = {
313
357
  export type ClipSet = Reference & {
314
358
  /** An object containing the accessibility details of the clip. */
315
359
  readonly accessibility?: Maybe<Accessibility>;
316
- /** Whether the clip should play automatically when loaded. */
360
+ /**
361
+ * Whether the clip should play automatically when loaded.
362
+ * @deprecated field is redundant as already returned in content-tree
363
+ */
317
364
  readonly autoplay?: Maybe<Scalars['Boolean']['output']>;
318
365
  /** Text describing the content of the clip, to be shown next to the clip. */
319
366
  readonly caption?: Maybe<Scalars['String']['output']>;
320
367
  /** An array of clips in the clip set. */
321
- readonly clips?: Maybe<ReadonlyArray<Maybe<Clip>>>;
368
+ readonly clips?: Maybe<ReadonlyArray<Clip>>;
322
369
  /** An array of content warnings for the clip set. */
323
- readonly contentWarning?: Maybe<ReadonlyArray<Maybe<Scalars['String']['output']>>>;
370
+ readonly contentWarning?: Maybe<ReadonlyArray<Scalars['String']['output']>>;
324
371
  /** The credit text of the clip, eg. 'Getty Images'. */
325
372
  readonly credits?: Maybe<Scalars['String']['output']>;
326
- /** The layout of the clip set, eg. 'in-line'. */
373
+ /**
374
+ * The layout of the clip set, eg. 'in-line'.
375
+ * @deprecated field is redundant as already returned in content-tree
376
+ */
327
377
  readonly dataLayout?: Maybe<Scalars['String']['output']>;
328
378
  /** The description of the clip. */
329
379
  readonly description?: Maybe<Scalars['String']['output']>;
@@ -331,9 +381,15 @@ export type ClipSet = Reference & {
331
381
  readonly displayTitle?: Maybe<Scalars['String']['output']>;
332
382
  /** The unique identifier of the clip set. */
333
383
  readonly id: Scalars['String']['output'];
334
- /** Whether the clip should loop. */
384
+ /**
385
+ * Whether the clip should loop.
386
+ * @deprecated field is redundant as already returned in content-tree
387
+ */
335
388
  readonly loop?: Maybe<Scalars['Boolean']['output']>;
336
- /** Whether the clip should be muted. */
389
+ /**
390
+ * Whether the clip should be muted.
391
+ * @deprecated field is redundant as already returned in content-tree
392
+ */
337
393
  readonly muted?: Maybe<Scalars['Boolean']['output']>;
338
394
  /** Whether the clip set should **not** include audio. */
339
395
  readonly noAudio?: Maybe<Scalars['Boolean']['output']>;
@@ -363,7 +419,33 @@ export type ClipSource = {
363
419
  readonly videoCodec?: Maybe<Scalars['String']['output']>;
364
420
  };
365
421
  /** A concept is supplemtary information item, like a location, person, organisation or topic. It is used to provide context to an article. */
366
- export type Concept = {
422
+ export type Concept = ConceptInterface & {
423
+ /** The api url of the concept, eg. 'http://api.ft.com/things/a579350c-61ce-4c00-97ca-ddaa2e0cacf6'. */
424
+ readonly apiUrl: Scalars['String']['output'];
425
+ /** The type of the concept, eg. 'http://www.ft.com/ontology/Topic'. */
426
+ readonly directType: Scalars['String']['output'];
427
+ /** The unique identifier of the concept - a uuid or a url. */
428
+ readonly id: Scalars['ID']['output'];
429
+ /** Whether the concept is part of a package brand eg. 'ftSeries' or 'ftGuides'. */
430
+ readonly isPackageBrand: Scalars['Boolean']['output'];
431
+ /** The relationship between the concept and the article, eg. 'http://www.ft.com/ontology/hasAuthor'. */
432
+ readonly predicate: Scalars['String']['output'];
433
+ /** The preferred label of the concept, eg. 'Work & Careers'. */
434
+ readonly prefLabel: Scalars['String']['output'];
435
+ /** The type of the concept, eg. 'TOPIC'. */
436
+ readonly type?: Maybe<Scalars['String']['output']>;
437
+ /** An array of types, eg. ['http://www.ft.com/ontology/core/Thing', 'http://www.ft.com/ontology/Topic']. */
438
+ readonly types: ReadonlyArray<Scalars['String']['output']>;
439
+ /** The url of the media, eg. 'https://next-media-api.ft.com/renditions/16868569859480/0x0.mp3'. */
440
+ readonly url: Scalars['String']['output'];
441
+ };
442
+ /** A concept is supplemtary information item, like a location, person, organisation or topic. It is used to provide context to an article. */
443
+ export type ConceptUrlArgs = {
444
+ relative?: InputMaybe<Scalars['Boolean']['input']>;
445
+ vanity?: InputMaybe<Scalars['Boolean']['input']>;
446
+ };
447
+ /** A concept is supplemtary information item, like a location, person, organisation or topic. It is used to provide context to an article. */
448
+ export type ConceptInterface = {
367
449
  /** The api url of the concept, eg. 'http://api.ft.com/things/a579350c-61ce-4c00-97ca-ddaa2e0cacf6'. */
368
450
  readonly apiUrl?: Maybe<Scalars['String']['output']>;
369
451
  /** The type of the concept, eg. 'http://www.ft.com/ontology/Topic'. */
@@ -384,7 +466,7 @@ export type Concept = {
384
466
  readonly url: Scalars['String']['output'];
385
467
  };
386
468
  /** A concept is supplemtary information item, like a location, person, organisation or topic. It is used to provide context to an article. */
387
- export type ConceptUrlArgs = {
469
+ export type ConceptInterfaceUrlArgs = {
388
470
  relative?: InputMaybe<Scalars['Boolean']['input']>;
389
471
  vanity?: InputMaybe<Scalars['Boolean']['input']>;
390
472
  };
@@ -396,7 +478,7 @@ export type Content = {
396
478
  /** An alternative title of the article. */
397
479
  readonly altTitle?: Maybe<AltTitle>;
398
480
  /** An array of concepts related to the article, eg. organisations or topics. */
399
- readonly annotations?: Maybe<ReadonlyArray<Maybe<Concept>>>;
481
+ readonly annotations: ReadonlyArray<ConceptInterface>;
400
482
  /** An abstract syntax tree of the article content. */
401
483
  readonly body?: Maybe<RichText>;
402
484
  /** The raw string of the XML as returned from ContentAPI. */
@@ -419,13 +501,15 @@ export type Content = {
419
501
  readonly instantAlertConcept?: Maybe<Concept>;
420
502
  /** An image object containing the url and the caption, to be displayed usually before the article content. */
421
503
  readonly mainImage?: Maybe<Image>;
504
+ /** The number of milliseconds since the unix epoch the article was last changed, eg '1712140552443'. */
505
+ readonly modifiedTimestamp: Scalars['Float']['output'];
422
506
  /** The party that originated the article, eg. 'FT'. */
423
507
  readonly originatingParty?: Maybe<Scalars['String']['output']>;
424
508
  /** A string ID used to trace content publishes through the pipeline, e.g. 'republish_tid_JNhUrBjdXo'. */
425
- readonly publishReference: Scalars['String']['output'];
426
- /** The ISO string date the article was published, eg. '2024-04-03T10:35:52.443Z'. */
509
+ readonly publishReference?: Maybe<Scalars['String']['output']>;
510
+ /** The ISO string date the article was marked as published, eg. '2024-04-03T10:35:52.443Z'. */
427
511
  readonly publishedDate: Scalars['String']['output'];
428
- /** The number of milliseconds since the unix epoch the article was published, eg '1712140552443'. */
512
+ /** The number of milliseconds since the unix epoch the article was marked as published, eg '1712140552443'. */
429
513
  readonly publishedTimestamp: Scalars['Float']['output'];
430
514
  /** An introductory paragraph of the article. */
431
515
  readonly standfirst?: Maybe<Scalars['String']['output']>;
@@ -440,6 +524,9 @@ export type Content = {
440
524
  /** The url of the concept. Vanity urls replace long, randomly generated urls - they are more user friendly and concise. Relative urls are relative to the current domain. */
441
525
  readonly url: Scalars['String']['output'];
442
526
  };
527
+ export type ContentAnnotationsArgs = {
528
+ byPredicate?: InputMaybe<Scalars['String']['input']>;
529
+ };
443
530
  export type ContentBylineArgs = {
444
531
  vanity?: InputMaybe<Scalars['Boolean']['input']>;
445
532
  };
@@ -455,7 +542,7 @@ export type ContentPackage = Content & {
455
542
  /** An alternative title of the article. */
456
543
  readonly altTitle?: Maybe<AltTitle>;
457
544
  /** An array of concepts related to the article, eg. organisations or topics. */
458
- readonly annotations?: Maybe<ReadonlyArray<Maybe<Concept>>>;
545
+ readonly annotations: ReadonlyArray<ConceptInterface>;
459
546
  /** An abstract syntax tree of the article content. */
460
547
  readonly body?: Maybe<RichText>;
461
548
  /** The raw string of the XML as returned from ContentAPI. */
@@ -482,13 +569,15 @@ export type ContentPackage = Content & {
482
569
  readonly instantAlertConcept?: Maybe<Concept>;
483
570
  /** An image object containing the url and the caption, to be displayed usually before the article content. */
484
571
  readonly mainImage?: Maybe<Image>;
572
+ /** The number of milliseconds since the unix epoch the article was last changed, eg '1712140552443'. */
573
+ readonly modifiedTimestamp: Scalars['Float']['output'];
485
574
  /** The party that originated the article, eg. 'FT'. */
486
575
  readonly originatingParty?: Maybe<Scalars['String']['output']>;
487
576
  /** A string ID used to trace content publishes through the pipeline, e.g. 'republish_tid_JNhUrBjdXo'. */
488
- readonly publishReference: Scalars['String']['output'];
489
- /** The ISO string date the article was published, eg. '2024-04-03T10:35:52.443Z'. */
577
+ readonly publishReference?: Maybe<Scalars['String']['output']>;
578
+ /** The ISO string date the article was marked as published, eg. '2024-04-03T10:35:52.443Z'. */
490
579
  readonly publishedDate: Scalars['String']['output'];
491
- /** The number of milliseconds since the unix epoch the article was published, eg '1712140552443'. */
580
+ /** The number of milliseconds since the unix epoch the article was marked as published, eg '1712140552443'. */
492
581
  readonly publishedTimestamp: Scalars['Float']['output'];
493
582
  /** An introductory paragraph of the article. */
494
583
  readonly standfirst?: Maybe<Scalars['String']['output']>;
@@ -505,6 +594,9 @@ export type ContentPackage = Content & {
505
594
  /** The url of the concept. Vanity urls replace long, randomly generated urls - they are more user friendly and concise. Relative urls are relative to the current domain. */
506
595
  readonly url: Scalars['String']['output'];
507
596
  };
597
+ export type ContentPackageAnnotationsArgs = {
598
+ byPredicate?: InputMaybe<Scalars['String']['input']>;
599
+ };
508
600
  export type ContentPackageBylineArgs = {
509
601
  vanity?: InputMaybe<Scalars['Boolean']['input']>;
510
602
  };
@@ -594,15 +686,17 @@ export type FlourishFallback = {
594
686
  };
595
687
  export type FlourishSource = {
596
688
  /** The format of the source, eg. 'standard'. */
597
- readonly format?: Maybe<Scalars['String']['output']>;
689
+ readonly format: Scalars['ImageFormat']['output'];
598
690
  /** The height of the source. */
599
- readonly height?: Maybe<Scalars['Int']['output']>;
691
+ readonly height: Scalars['Int']['output'];
692
+ /** The id of the source. */
693
+ readonly id: Scalars['String']['output'];
600
694
  /** The type of the source, e.g. visualisation for leadFlourish */
601
- readonly type?: Maybe<Scalars['String']['output']>;
695
+ readonly type: Scalars['String']['output'];
602
696
  /** The Origami image service url */
603
- readonly url?: Maybe<Scalars['String']['output']>;
697
+ readonly url: Scalars['String']['output'];
604
698
  /** The width of the source. */
605
- readonly width?: Maybe<Scalars['Int']['output']>;
699
+ readonly width: Scalars['Int']['output'];
606
700
  };
607
701
  export type FullBleedTopper = Topper & TopperWithBrand & TopperWithImages & TopperWithTheme & {
608
702
  /** Whether the topper should have a background box. */
@@ -650,7 +744,7 @@ export type Image = {
650
744
  /** The type of the image, eg. 'graphic'. */
651
745
  readonly type?: Maybe<Scalars['ImageType']['output']>;
652
746
  /** The url of the image, eg. 'https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3Aimage%3A0e7e7b6e-4e7b-11e9-bde6-79e4b4311f90?source=next&fit=scale-down&width=700'. */
653
- readonly url?: Maybe<Scalars['String']['output']>;
747
+ readonly url: Scalars['String']['output'];
654
748
  /** The width of the image in pixels. */
655
749
  readonly width?: Maybe<Scalars['Int']['output']>;
656
750
  };
@@ -676,7 +770,7 @@ export type ImageDesktop = Image & {
676
770
  /** The type of the image, eg. 'graphic'. */
677
771
  readonly type?: Maybe<Scalars['ImageType']['output']>;
678
772
  /** The url of the image, eg. 'https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3Aimage%3A0e7e7b6e-4e7b-11e9-bde6-79e4b4311f90?source=next&fit=scale-down&width=700'. */
679
- readonly url?: Maybe<Scalars['String']['output']>;
773
+ readonly url: Scalars['String']['output'];
680
774
  /** The width of the image in pixels. */
681
775
  readonly width?: Maybe<Scalars['Int']['output']>;
682
776
  };
@@ -702,7 +796,7 @@ export type ImageLandscape = Image & {
702
796
  /** The type of the image, eg. 'graphic'. */
703
797
  readonly type?: Maybe<Scalars['ImageType']['output']>;
704
798
  /** The url of the image, eg. 'https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3Aimage%3A0e7e7b6e-4e7b-11e9-bde6-79e4b4311f90?source=next&fit=scale-down&width=700'. */
705
- readonly url?: Maybe<Scalars['String']['output']>;
799
+ readonly url: Scalars['String']['output'];
706
800
  /** The width of the image in pixels. */
707
801
  readonly width?: Maybe<Scalars['Int']['output']>;
708
802
  };
@@ -728,7 +822,7 @@ export type ImageMobile = Image & {
728
822
  /** The type of the image, eg. 'graphic'. */
729
823
  readonly type?: Maybe<Scalars['ImageType']['output']>;
730
824
  /** The url of the image, eg. 'https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3Aimage%3A0e7e7b6e-4e7b-11e9-bde6-79e4b4311f90?source=next&fit=scale-down&width=700'. */
731
- readonly url?: Maybe<Scalars['String']['output']>;
825
+ readonly url: Scalars['String']['output'];
732
826
  /** The width of the image in pixels. */
733
827
  readonly width?: Maybe<Scalars['Int']['output']>;
734
828
  };
@@ -754,7 +848,7 @@ export type ImagePortrait = Image & {
754
848
  /** The type of the image, eg. 'graphic'. */
755
849
  readonly type?: Maybe<Scalars['ImageType']['output']>;
756
850
  /** The url of the image, eg. 'https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3Aimage%3A0e7e7b6e-4e7b-11e9-bde6-79e4b4311f90?source=next&fit=scale-down&width=700'. */
757
- readonly url?: Maybe<Scalars['String']['output']>;
851
+ readonly url: Scalars['String']['output'];
758
852
  /** The width of the image in pixels. */
759
853
  readonly width?: Maybe<Scalars['Int']['output']>;
760
854
  };
@@ -770,11 +864,11 @@ export type ImageSet = Reference & {
770
864
  };
771
865
  export type ImageSource = {
772
866
  /** The device pixel ratio. DPR is calculated as DPR = Physical Pixels (pixels seen on screen) / Logical Pixels (pixel that can fit in a given space). */
773
- readonly dpr?: Maybe<Scalars['Int']['output']>;
867
+ readonly dpr: Scalars['Int']['output'];
774
868
  /** The url of the image source, eg. 'https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3Aimage%3A0e7e7b6e-4e7b-11e9-bde6-79e4b4311f90?source=next&fit=scale-down&width=700'. */
775
869
  readonly url: Scalars['String']['output'];
776
870
  /** The width of the image source in pixels. */
777
- readonly width?: Maybe<Scalars['Int']['output']>;
871
+ readonly width: Scalars['Int']['output'];
778
872
  };
779
873
  export type ImageSquare = Image & {
780
874
  /** Text describing the content of the image, usually hidden from the user unless the image is not available. It is to be read by screen readers. */
@@ -794,7 +888,7 @@ export type ImageSquare = Image & {
794
888
  /** The type of the image, eg. 'graphic'. */
795
889
  readonly type?: Maybe<Scalars['ImageType']['output']>;
796
890
  /** The url of the image, eg. 'https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3Aimage%3A0e7e7b6e-4e7b-11e9-bde6-79e4b4311f90?source=next&fit=scale-down&width=700'. */
797
- readonly url?: Maybe<Scalars['String']['output']>;
891
+ readonly url: Scalars['String']['output'];
798
892
  /** The width of the image in pixels. */
799
893
  readonly width?: Maybe<Scalars['Int']['output']>;
800
894
  };
@@ -820,7 +914,7 @@ export type ImageSquareFtEdit = Image & {
820
914
  /** The type of the image, eg. 'graphic'. */
821
915
  readonly type?: Maybe<Scalars['ImageType']['output']>;
822
916
  /** The url of the image, eg. 'https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3Aimage%3A0e7e7b6e-4e7b-11e9-bde6-79e4b4311f90?source=next&fit=scale-down&width=700'. */
823
- readonly url?: Maybe<Scalars['String']['output']>;
917
+ readonly url: Scalars['String']['output'];
824
918
  /** The width of the image in pixels. */
825
919
  readonly width?: Maybe<Scalars['Int']['output']>;
826
920
  };
@@ -846,7 +940,7 @@ export type ImageStandard = Image & {
846
940
  /** The type of the image, eg. 'graphic'. */
847
941
  readonly type?: Maybe<Scalars['ImageType']['output']>;
848
942
  /** The url of the image, eg. 'https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3Aimage%3A0e7e7b6e-4e7b-11e9-bde6-79e4b4311f90?source=next&fit=scale-down&width=700'. */
849
- readonly url?: Maybe<Scalars['String']['output']>;
943
+ readonly url: Scalars['String']['output'];
850
944
  /** The width of the image in pixels. */
851
945
  readonly width?: Maybe<Scalars['Int']['output']>;
852
946
  };
@@ -872,7 +966,7 @@ export type ImageStandardInline = Image & {
872
966
  /** The type of the image, eg. 'graphic'. */
873
967
  readonly type?: Maybe<Scalars['ImageType']['output']>;
874
968
  /** The url of the image, eg. 'https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3Aimage%3A0e7e7b6e-4e7b-11e9-bde6-79e4b4311f90?source=next&fit=scale-down&width=700'. */
875
- readonly url?: Maybe<Scalars['String']['output']>;
969
+ readonly url: Scalars['String']['output'];
876
970
  /** The width of the image in pixels. */
877
971
  readonly width?: Maybe<Scalars['Int']['output']>;
878
972
  };
@@ -898,7 +992,7 @@ export type ImageWide = Image & {
898
992
  /** The type of the image, eg. 'graphic'. */
899
993
  readonly type?: Maybe<Scalars['ImageType']['output']>;
900
994
  /** The url of the image, eg. 'https://www.ft.com/__origami/service/image/v2/images/raw/ftcms%3Aimage%3A0e7e7b6e-4e7b-11e9-bde6-79e4b4311f90?source=next&fit=scale-down&width=700'. */
901
- readonly url?: Maybe<Scalars['String']['output']>;
995
+ readonly url: Scalars['String']['output'];
902
996
  /** The width of the image in pixels. */
903
997
  readonly width?: Maybe<Scalars['Int']['output']>;
904
998
  };
@@ -909,7 +1003,7 @@ export type ImageWideSourceSetArgs = {
909
1003
  /** Indicators are used to determine teaser styling. */
910
1004
  export type Indicators = {
911
1005
  /** The access level of the teaser, eg. 'free' or 'premium'. */
912
- readonly accessLevel?: Maybe<Scalars['AccessLevel']['output']>;
1006
+ readonly accessLevel: Scalars['AccessLevel']['output'];
913
1007
  /** Whether the teaser is a column, ie. has one author. */
914
1008
  readonly isColumn?: Maybe<Scalars['Boolean']['output']>;
915
1009
  /** Whether the teaser is an editor's choice. */
@@ -966,7 +1060,7 @@ export type LiveBlogPackage = Content & {
966
1060
  /** An alternative title of the article. */
967
1061
  readonly altTitle?: Maybe<AltTitle>;
968
1062
  /** An array of concepts related to the article, eg. organisations or topics. */
969
- readonly annotations?: Maybe<ReadonlyArray<Maybe<Concept>>>;
1063
+ readonly annotations: ReadonlyArray<ConceptInterface>;
970
1064
  /** An abstract syntax tree of the article content. */
971
1065
  readonly body?: Maybe<RichText>;
972
1066
  /** The raw string of the XML as returned from ContentAPI. */
@@ -991,15 +1085,17 @@ export type LiveBlogPackage = Content & {
991
1085
  readonly liveBlogPosts?: Maybe<ReadonlyArray<Maybe<Content>>>;
992
1086
  /** An image object containing the url and the caption, to be displayed usually before the article content. */
993
1087
  readonly mainImage?: Maybe<Image>;
1088
+ /** The number of milliseconds since the unix epoch the article was last changed, eg '1712140552443'. */
1089
+ readonly modifiedTimestamp: Scalars['Float']['output'];
994
1090
  /** The party that originated the article, eg. 'FT'. */
995
1091
  readonly originatingParty?: Maybe<Scalars['String']['output']>;
996
1092
  /** The pinned article of this live blog package. */
997
1093
  readonly pinnedPost?: Maybe<Content>;
998
1094
  /** A string ID used to trace content publishes through the pipeline, e.g. 'republish_tid_JNhUrBjdXo'. */
999
- readonly publishReference: Scalars['String']['output'];
1000
- /** The ISO string date the article was published, eg. '2024-04-03T10:35:52.443Z'. */
1095
+ readonly publishReference?: Maybe<Scalars['String']['output']>;
1096
+ /** The ISO string date the article was marked as published, eg. '2024-04-03T10:35:52.443Z'. */
1001
1097
  readonly publishedDate: Scalars['String']['output'];
1002
- /** The number of milliseconds since the unix epoch the article was published, eg '1712140552443'. */
1098
+ /** The number of milliseconds since the unix epoch the article was marked as published, eg '1712140552443'. */
1003
1099
  readonly publishedTimestamp: Scalars['Float']['output'];
1004
1100
  /** Whether the live blog package should be updated in real time. */
1005
1101
  readonly realtime?: Maybe<Scalars['Boolean']['output']>;
@@ -1016,12 +1112,12 @@ export type LiveBlogPackage = Content & {
1016
1112
  /** The url of the concept. Vanity urls replace long, randomly generated urls - they are more user friendly and concise. Relative urls are relative to the current domain. */
1017
1113
  readonly url: Scalars['String']['output'];
1018
1114
  };
1115
+ export type LiveBlogPackageAnnotationsArgs = {
1116
+ byPredicate?: InputMaybe<Scalars['String']['input']>;
1117
+ };
1019
1118
  export type LiveBlogPackageBylineArgs = {
1020
1119
  vanity?: InputMaybe<Scalars['Boolean']['input']>;
1021
1120
  };
1022
- export type LiveBlogPackageLiveBlogPostsArgs = {
1023
- includePinned?: InputMaybe<Scalars['Boolean']['input']>;
1024
- };
1025
1121
  export type LiveBlogPackageUrlArgs = {
1026
1122
  relative?: InputMaybe<Scalars['Boolean']['input']>;
1027
1123
  vanity?: InputMaybe<Scalars['Boolean']['input']>;
@@ -1034,8 +1130,12 @@ export type LiveBlogPost = Content & {
1034
1130
  /** An alternative title of the article. */
1035
1131
  readonly altTitle?: Maybe<AltTitle>;
1036
1132
  /** An array of concepts related to the article, eg. organisations or topics. */
1037
- readonly annotations?: Maybe<ReadonlyArray<Maybe<Concept>>>;
1038
- readonly authors?: Maybe<ReadonlyArray<Maybe<Person>>>;
1133
+ readonly annotations: ReadonlyArray<ConceptInterface>;
1134
+ /**
1135
+ * The People API data for the authors of the live blog post
1136
+ * @deprecated use Content.annotations(byPredicate: "http://www.ft.com/ontology/annotation/hasAuthor")
1137
+ */
1138
+ readonly authors: ReadonlyArray<Person>;
1039
1139
  /** An abstract syntax tree of the article content. */
1040
1140
  readonly body?: Maybe<RichText>;
1041
1141
  /** The raw string of the XML as returned from ContentAPI. */
@@ -1064,13 +1164,15 @@ export type LiveBlogPost = Content & {
1064
1164
  readonly isPinned?: Maybe<Scalars['Boolean']['output']>;
1065
1165
  /** An image object containing the url and the caption, to be displayed usually before the article content. */
1066
1166
  readonly mainImage?: Maybe<Image>;
1167
+ /** The number of milliseconds since the unix epoch the article was last changed, eg '1712140552443'. */
1168
+ readonly modifiedTimestamp: Scalars['Float']['output'];
1067
1169
  /** The party that originated the article, eg. 'FT'. */
1068
1170
  readonly originatingParty?: Maybe<Scalars['String']['output']>;
1069
1171
  /** A string ID used to trace content publishes through the pipeline, e.g. 'republish_tid_JNhUrBjdXo'. */
1070
- readonly publishReference: Scalars['String']['output'];
1071
- /** The ISO string date the article was published, eg. '2024-04-03T10:35:52.443Z'. */
1172
+ readonly publishReference?: Maybe<Scalars['String']['output']>;
1173
+ /** The ISO string date the article was marked as published, eg. '2024-04-03T10:35:52.443Z'. */
1072
1174
  readonly publishedDate: Scalars['String']['output'];
1073
- /** The number of milliseconds since the unix epoch the article was published, eg '1712140552443'. */
1175
+ /** The number of milliseconds since the unix epoch the article was marked as published, eg '1712140552443'. */
1074
1176
  readonly publishedTimestamp: Scalars['Float']['output'];
1075
1177
  /** An introductory paragraph of the article. */
1076
1178
  readonly standfirst?: Maybe<Scalars['String']['output']>;
@@ -1085,6 +1187,9 @@ export type LiveBlogPost = Content & {
1085
1187
  /** The url of the concept. Vanity urls replace long, randomly generated urls - they are more user friendly and concise. Relative urls are relative to the current domain. */
1086
1188
  readonly url: Scalars['String']['output'];
1087
1189
  };
1190
+ export type LiveBlogPostAnnotationsArgs = {
1191
+ byPredicate?: InputMaybe<Scalars['String']['input']>;
1192
+ };
1088
1193
  export type LiveBlogPostBylineArgs = {
1089
1194
  vanity?: InputMaybe<Scalars['Boolean']['input']>;
1090
1195
  };
@@ -1168,6 +1273,7 @@ export type PartnerContentTopper = Topper & {
1168
1273
  export type Person = {
1169
1274
  readonly headshot?: Maybe<Scalars['String']['output']>;
1170
1275
  readonly prefLabel?: Maybe<Scalars['String']['output']>;
1276
+ /** @deprecated use Concept.url instead */
1171
1277
  readonly streamPage?: Maybe<Scalars['String']['output']>;
1172
1278
  };
1173
1279
  export type PersonHeadshotArgs = {
@@ -1189,7 +1295,7 @@ export type Picture = {
1189
1295
  /** A set of images with different sizes and formats. */
1190
1296
  readonly images: ReadonlyArray<Image>;
1191
1297
  /** The layout width of the image, eg, 'standard'. */
1192
- readonly layoutWidth?: Maybe<Scalars['String']['output']>;
1298
+ readonly layoutWidth: Scalars['String']['output'];
1193
1299
  };
1194
1300
  export type PictureFullBleed = Picture & {
1195
1301
  /** The alt text of the image to be used for accessibility. */
@@ -1205,7 +1311,7 @@ export type PictureFullBleed = Picture & {
1205
1311
  /** A set of images with different sizes and formats. */
1206
1312
  readonly images: ReadonlyArray<Image>;
1207
1313
  /** The layout width of the image, eg, 'standard'. */
1208
- readonly layoutWidth?: Maybe<Scalars['String']['output']>;
1314
+ readonly layoutWidth: Scalars['String']['output'];
1209
1315
  };
1210
1316
  export type PictureInline = Picture & {
1211
1317
  /** The alt text of the image to be used for accessibility. */
@@ -1221,7 +1327,7 @@ export type PictureInline = Picture & {
1221
1327
  /** A set of images with different sizes and formats. */
1222
1328
  readonly images: ReadonlyArray<Image>;
1223
1329
  /** The layout width of the image, eg, 'standard'. */
1224
- readonly layoutWidth?: Maybe<Scalars['String']['output']>;
1330
+ readonly layoutWidth: Scalars['String']['output'];
1225
1331
  };
1226
1332
  export type PictureStandard = Picture & {
1227
1333
  /** The alt text of the image to be used for accessibility. */
@@ -1237,7 +1343,7 @@ export type PictureStandard = Picture & {
1237
1343
  /** A set of images with different sizes and formats. */
1238
1344
  readonly images: ReadonlyArray<Image>;
1239
1345
  /** The layout width of the image, eg, 'standard'. */
1240
- readonly layoutWidth?: Maybe<Scalars['String']['output']>;
1346
+ readonly layoutWidth: Scalars['String']['output'];
1241
1347
  };
1242
1348
  export type Placeholder = Content & {
1243
1349
  /** A scalar representing the access level of the article, eg. 'free'. */
@@ -1247,7 +1353,7 @@ export type Placeholder = Content & {
1247
1353
  /** An alternative title of the article. */
1248
1354
  readonly altTitle?: Maybe<AltTitle>;
1249
1355
  /** An array of concepts related to the article, eg. organisations or topics. */
1250
- readonly annotations?: Maybe<ReadonlyArray<Maybe<Concept>>>;
1356
+ readonly annotations: ReadonlyArray<ConceptInterface>;
1251
1357
  /** An abstract syntax tree of the article content. */
1252
1358
  readonly body?: Maybe<RichText>;
1253
1359
  /** The raw string of the XML as returned from ContentAPI. */
@@ -1272,13 +1378,15 @@ export type Placeholder = Content & {
1272
1378
  readonly instantAlertConcept?: Maybe<Concept>;
1273
1379
  /** An image object containing the url and the caption, to be displayed usually before the article content. */
1274
1380
  readonly mainImage?: Maybe<Image>;
1381
+ /** The number of milliseconds since the unix epoch the article was last changed, eg '1712140552443'. */
1382
+ readonly modifiedTimestamp: Scalars['Float']['output'];
1275
1383
  /** The party that originated the article, eg. 'FT'. */
1276
1384
  readonly originatingParty?: Maybe<Scalars['String']['output']>;
1277
1385
  /** A string ID used to trace content publishes through the pipeline, e.g. 'republish_tid_JNhUrBjdXo'. */
1278
- readonly publishReference: Scalars['String']['output'];
1279
- /** The ISO string date the article was published, eg. '2024-04-03T10:35:52.443Z'. */
1386
+ readonly publishReference?: Maybe<Scalars['String']['output']>;
1387
+ /** The ISO string date the article was marked as published, eg. '2024-04-03T10:35:52.443Z'. */
1280
1388
  readonly publishedDate: Scalars['String']['output'];
1281
- /** The number of milliseconds since the unix epoch the article was published, eg '1712140552443'. */
1389
+ /** The number of milliseconds since the unix epoch the article was marked as published, eg '1712140552443'. */
1282
1390
  readonly publishedTimestamp: Scalars['Float']['output'];
1283
1391
  /** An introductory paragraph of the article. */
1284
1392
  readonly standfirst?: Maybe<Scalars['String']['output']>;
@@ -1293,6 +1401,9 @@ export type Placeholder = Content & {
1293
1401
  /** The url of the concept. Vanity urls replace long, randomly generated urls - they are more user friendly and concise. Relative urls are relative to the current domain. */
1294
1402
  readonly url: Scalars['String']['output'];
1295
1403
  };
1404
+ export type PlaceholderAnnotationsArgs = {
1405
+ byPredicate?: InputMaybe<Scalars['String']['input']>;
1406
+ };
1296
1407
  export type PlaceholderBylineArgs = {
1297
1408
  vanity?: InputMaybe<Scalars['Boolean']['input']>;
1298
1409
  };
@@ -1431,13 +1542,13 @@ export type TableOfContents = {
1431
1542
  };
1432
1543
  export type Teaser = {
1433
1544
  /** The date the content of the teaser was first published. */
1434
- readonly firstPublishedDate?: Maybe<Scalars['String']['output']>;
1545
+ readonly firstPublishedDate: Scalars['String']['output'];
1435
1546
  /** The unique identifier of the teaser, a uuid or a url. */
1436
- readonly id?: Maybe<Scalars['String']['output']>;
1547
+ readonly id: Scalars['String']['output'];
1437
1548
  /** The image to be used as a thumbnail for the teaser. */
1438
1549
  readonly image?: Maybe<Image>;
1439
1550
  /** An object containing a map of indicator items to boolean values, eg. accessLevel, isOpinion. */
1440
- readonly indicators?: Maybe<Indicators>;
1551
+ readonly indicators: Indicators;
1441
1552
  /** An object containing the metadata details of the teaser, eg. id, url, prefLabel. */
1442
1553
  readonly metaAltLink?: Maybe<MetaLink>;
1443
1554
  /** An object containing the metadata details of the teaser, eg. id, url, prefLabel. */
@@ -1447,15 +1558,15 @@ export type Teaser = {
1447
1558
  /** The text to be displayed after the metadata of the teaser. */
1448
1559
  readonly metaSuffixText?: Maybe<Scalars['String']['output']>;
1449
1560
  /** The date the content of the teaser was published. */
1450
- readonly publishedDate?: Maybe<Scalars['String']['output']>;
1561
+ readonly publishedDate: Scalars['String']['output'];
1451
1562
  /** The introductory text of the teaser. */
1452
1563
  readonly standfirst?: Maybe<Scalars['String']['output']>;
1453
1564
  /** The theme to use for the teaser, eg. 'opinion' or 'news'. */
1454
- readonly theme?: Maybe<Scalars['String']['output']>;
1565
+ readonly theme: Scalars['String']['output'];
1455
1566
  /** The title of the teaser. */
1456
- readonly title?: Maybe<Scalars['String']['output']>;
1567
+ readonly title: Scalars['String']['output'];
1457
1568
  /** The type of the teaser, eg. 'article' or 'video'. */
1458
- readonly type?: Maybe<Scalars['String']['output']>;
1569
+ readonly type: Scalars['String']['output'];
1459
1570
  /** The url of the content that the teaser refers to. */
1460
1571
  readonly url: Scalars['String']['output'];
1461
1572
  };
@@ -1539,7 +1650,7 @@ export type TopperWithTheme = {
1539
1650
  };
1540
1651
  export type Tweet = Reference & {
1541
1652
  /** The raw HTML of the tweet. */
1542
- readonly html?: Maybe<Scalars['String']['output']>;
1653
+ readonly html: Scalars['String']['output'];
1543
1654
  /** The type of the reference, eg. 'tweet'. */
1544
1655
  readonly type: Scalars['String']['output'];
1545
1656
  };
@@ -1551,7 +1662,7 @@ export type Video = Content & {
1551
1662
  /** An alternative title of the article. */
1552
1663
  readonly altTitle?: Maybe<AltTitle>;
1553
1664
  /** An array of concepts related to the article, eg. organisations or topics. */
1554
- readonly annotations?: Maybe<ReadonlyArray<Maybe<Concept>>>;
1665
+ readonly annotations: ReadonlyArray<ConceptInterface>;
1555
1666
  /** An abstract syntax tree of the article content. */
1556
1667
  readonly body?: Maybe<RichText>;
1557
1668
  /** The raw string of the XML as returned from ContentAPI. */
@@ -1574,13 +1685,15 @@ export type Video = Content & {
1574
1685
  readonly instantAlertConcept?: Maybe<Concept>;
1575
1686
  /** An image object containing the url and the caption, to be displayed usually before the article content. */
1576
1687
  readonly mainImage?: Maybe<Image>;
1688
+ /** The number of milliseconds since the unix epoch the article was last changed, eg '1712140552443'. */
1689
+ readonly modifiedTimestamp: Scalars['Float']['output'];
1577
1690
  /** The party that originated the article, eg. 'FT'. */
1578
1691
  readonly originatingParty?: Maybe<Scalars['String']['output']>;
1579
1692
  /** A string ID used to trace content publishes through the pipeline, e.g. 'republish_tid_JNhUrBjdXo'. */
1580
- readonly publishReference: Scalars['String']['output'];
1581
- /** The ISO string date the article was published, eg. '2024-04-03T10:35:52.443Z'. */
1693
+ readonly publishReference?: Maybe<Scalars['String']['output']>;
1694
+ /** The ISO string date the article was marked as published, eg. '2024-04-03T10:35:52.443Z'. */
1582
1695
  readonly publishedDate: Scalars['String']['output'];
1583
- /** The number of milliseconds since the unix epoch the article was published, eg '1712140552443'. */
1696
+ /** The number of milliseconds since the unix epoch the article was marked as published, eg '1712140552443'. */
1584
1697
  readonly publishedTimestamp: Scalars['Float']['output'];
1585
1698
  /** An introductory paragraph of the article. */
1586
1699
  readonly standfirst?: Maybe<Scalars['String']['output']>;
@@ -1595,6 +1708,9 @@ export type Video = Content & {
1595
1708
  /** The url of the concept. Vanity urls replace long, randomly generated urls - they are more user friendly and concise. Relative urls are relative to the current domain. */
1596
1709
  readonly url: Scalars['String']['output'];
1597
1710
  };
1711
+ export type VideoAnnotationsArgs = {
1712
+ byPredicate?: InputMaybe<Scalars['String']['input']>;
1713
+ };
1598
1714
  export type VideoBylineArgs = {
1599
1715
  vanity?: InputMaybe<Scalars['Boolean']['input']>;
1600
1716
  };
@@ -1644,10 +1760,11 @@ export type ResolversUnionTypes<RefType extends Record<string, unknown>> = Resol
1644
1760
  }>;
1645
1761
  /** Mapping of interface types */
1646
1762
  export type ResolversInterfaceTypes<RefType extends Record<string, unknown>> = ResolversObject<{
1763
+ ConceptInterface: (ConceptModel) | (ConceptModel);
1647
1764
  Content: (CapiResponse) | (CapiResponse) | (CapiResponse) | (CapiResponse) | (CapiResponse) | (CapiResponse) | (CapiResponse);
1648
1765
  Image: (ImageModel) | (ImageModel) | (ImageModel) | (ImageModel) | (ImageModel) | (ImageModel) | (ImageModel) | (ImageModel) | (ImageModel);
1649
1766
  Picture: (PictureModel) | (PictureModel) | (PictureModel);
1650
- Reference: (ReferenceWithCAPIData<ClipSetNode | OldClipNode>) | (ReferenceWithCAPIData<ContentTree.Flourish>) | (ReferenceWithCAPIData<ContentTree.ImageSet>) | (ReferenceWithCAPIData<ContentTree.LayoutImage>) | (ReferenceWithCAPIData<ContentTree.ImageSet>) | (ReferenceWithCAPIData<RawImageNode>) | (ReferenceWithCAPIData<ContentTree.Recommended>) | (ReferenceWithCAPIData<ContentTree.ScrollyImage>) | (ReferenceWithCAPIData<ContentTree.Tweet>) | (ReferenceWithCAPIData<VideoNode>);
1767
+ Reference: (ReferenceWithCAPIData<AuthorNode>) | (ReferenceWithCAPIData<ClipSetNode | OldClipNode>) | (ReferenceWithCAPIData<ContentTree.Flourish>) | (ReferenceWithCAPIData<ContentTree.ImageSet>) | (ReferenceWithCAPIData<ContentTree.LayoutImage>) | (ReferenceWithCAPIData<ContentTree.ImageSet>) | (ReferenceWithCAPIData<RawImageNode>) | (ReferenceWithCAPIData<ContentTree.Recommended>) | (ReferenceWithCAPIData<ContentTree.ScrollyImage>) | (ReferenceWithCAPIData<ContentTree.Tweet>) | (ReferenceWithCAPIData<VideoNode>);
1651
1768
  Topper: (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel);
1652
1769
  TopperWithBrand: (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel);
1653
1770
  TopperWithHeadshot: (TopperModel) | (TopperModel);
@@ -1665,6 +1782,8 @@ export type ResolversTypes = ResolversObject<{
1665
1782
  AltTitle: ResolverTypeWrapper<AltTitle>;
1666
1783
  Article: ResolverTypeWrapper<CapiResponse>;
1667
1784
  Audio: ResolverTypeWrapper<CapiResponse>;
1785
+ Author: ResolverTypeWrapper<ConceptModel>;
1786
+ AuthorReference: ResolverTypeWrapper<ReferenceWithCAPIData<AuthorNode>>;
1668
1787
  BasicTopper: ResolverTypeWrapper<TopperModel>;
1669
1788
  Boolean: ResolverTypeWrapper<Scalars['Boolean']['output']>;
1670
1789
  BrandedTopper: ResolverTypeWrapper<TopperModel>;
@@ -1675,6 +1794,7 @@ export type ResolversTypes = ResolversObject<{
1675
1794
  ClipSet: ResolverTypeWrapper<ReferenceWithCAPIData<ClipSetNode | OldClipNode>>;
1676
1795
  ClipSource: ResolverTypeWrapper<ClipSource>;
1677
1796
  Concept: ResolverTypeWrapper<ConceptModel>;
1797
+ ConceptInterface: ResolverTypeWrapper<ConceptModel>;
1678
1798
  Content: ResolverTypeWrapper<ResolversInterfaceTypes<ResolversTypes>['Content']>;
1679
1799
  ContentPackage: ResolverTypeWrapper<CapiResponse>;
1680
1800
  ContentType: ResolverTypeWrapper<Scalars['ContentType']['output']>;
@@ -1762,6 +1882,8 @@ export type ResolversParentTypes = ResolversObject<{
1762
1882
  AltTitle: AltTitle;
1763
1883
  Article: CapiResponse;
1764
1884
  Audio: CapiResponse;
1885
+ Author: ConceptModel;
1886
+ AuthorReference: ReferenceWithCAPIData<AuthorNode>;
1765
1887
  BasicTopper: TopperModel;
1766
1888
  Boolean: Scalars['Boolean']['output'];
1767
1889
  BrandedTopper: TopperModel;
@@ -1772,6 +1894,7 @@ export type ResolversParentTypes = ResolversObject<{
1772
1894
  ClipSet: ReferenceWithCAPIData<ClipSetNode | OldClipNode>;
1773
1895
  ClipSource: ClipSource;
1774
1896
  Concept: ConceptModel;
1897
+ ConceptInterface: ConceptModel;
1775
1898
  Content: ResolversInterfaceTypes<ResolversParentTypes>['Content'];
1776
1899
  ContentPackage: CapiResponse;
1777
1900
  ContentType: Scalars['ContentType']['output'];
@@ -1853,7 +1976,7 @@ export interface AccessLevelScalarConfig extends GraphQLScalarTypeConfig<Resolve
1853
1976
  name: 'AccessLevel';
1854
1977
  }
1855
1978
  export type AccessibilityResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Accessibility'] = ResolversParentTypes['Accessibility']> = ResolversObject<{
1856
- captions: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Caption']>>>, ParentType, ContextType>;
1979
+ captions: Resolver<Maybe<ReadonlyArray<ResolversTypes['Caption']>>, ParentType, ContextType>;
1857
1980
  transcript: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
1858
1981
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
1859
1982
  }>;
@@ -1869,7 +1992,7 @@ export type ArticleResolvers<ContextType = QueryContext, ParentType extends Reso
1869
1992
  accessLevel: Resolver<Maybe<ResolversTypes['AccessLevel']>, ParentType, ContextType>;
1870
1993
  altStandfirst: Resolver<Maybe<ResolversTypes['AltStandfirst']>, ParentType, ContextType>;
1871
1994
  altTitle: Resolver<Maybe<ResolversTypes['AltTitle']>, ParentType, ContextType>;
1872
- annotations: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Concept']>>>, ParentType, ContextType>;
1995
+ annotations: Resolver<ReadonlyArray<ResolversTypes['ConceptInterface']>, ParentType, ContextType, Partial<ArticleAnnotationsArgs>>;
1873
1996
  body: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
1874
1997
  bodyXML: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1875
1998
  byline: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType, Partial<ArticleBylineArgs>>;
@@ -1882,8 +2005,9 @@ export type ArticleResolvers<ContextType = QueryContext, ParentType extends Reso
1882
2005
  id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
1883
2006
  instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
1884
2007
  mainImage: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
2008
+ modifiedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
1885
2009
  originatingParty: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1886
- publishReference: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2010
+ publishReference: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1887
2011
  publishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
1888
2012
  publishedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
1889
2013
  standfirst: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
@@ -1898,7 +2022,7 @@ export type AudioResolvers<ContextType = QueryContext, ParentType extends Resolv
1898
2022
  accessLevel: Resolver<Maybe<ResolversTypes['AccessLevel']>, ParentType, ContextType>;
1899
2023
  altStandfirst: Resolver<Maybe<ResolversTypes['AltStandfirst']>, ParentType, ContextType>;
1900
2024
  altTitle: Resolver<Maybe<ResolversTypes['AltTitle']>, ParentType, ContextType>;
1901
- annotations: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Concept']>>>, ParentType, ContextType>;
2025
+ annotations: Resolver<ReadonlyArray<ResolversTypes['ConceptInterface']>, ParentType, ContextType, Partial<AudioAnnotationsArgs>>;
1902
2026
  body: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
1903
2027
  bodyXML: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1904
2028
  byline: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType, Partial<AudioBylineArgs>>;
@@ -1911,8 +2035,9 @@ export type AudioResolvers<ContextType = QueryContext, ParentType extends Resolv
1911
2035
  instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
1912
2036
  mainImage: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
1913
2037
  media: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Media']>>>, ParentType, ContextType>;
2038
+ modifiedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
1914
2039
  originatingParty: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1915
- publishReference: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2040
+ publishReference: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1916
2041
  publishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
1917
2042
  publishedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
1918
2043
  standfirst: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
@@ -1923,6 +2048,24 @@ export type AudioResolvers<ContextType = QueryContext, ParentType extends Resolv
1923
2048
  url: Resolver<ResolversTypes['String'], ParentType, ContextType, Partial<AudioUrlArgs>>;
1924
2049
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
1925
2050
  }>;
2051
+ export type AuthorResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Author'] = ResolversParentTypes['Author']> = ResolversObject<{
2052
+ apiUrl: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2053
+ directType: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2054
+ id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
2055
+ isPackageBrand: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
2056
+ person: Resolver<ResolversTypes['Person'], ParentType, ContextType>;
2057
+ predicate: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2058
+ prefLabel: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2059
+ type: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2060
+ types: Resolver<Maybe<ReadonlyArray<ResolversTypes['String']>>, ParentType, ContextType>;
2061
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType, Partial<AuthorUrlArgs>>;
2062
+ __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2063
+ }>;
2064
+ export type AuthorReferenceResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['AuthorReference'] = ResolversParentTypes['AuthorReference']> = ResolversObject<{
2065
+ concept: Resolver<Maybe<ResolversTypes['ConceptInterface']>, ParentType, ContextType>;
2066
+ type: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2067
+ __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2068
+ }>;
1926
2069
  export type BasicTopperResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['BasicTopper'] = ResolversParentTypes['BasicTopper']> = ResolversObject<{
1927
2070
  backgroundBox: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
1928
2071
  backgroundColour: Resolver<Maybe<ResolversTypes['TopperBackgroundColour']>, ParentType, ContextType>;
@@ -1971,8 +2114,8 @@ export type ClipSetResolvers<ContextType = QueryContext, ParentType extends Reso
1971
2114
  accessibility: Resolver<Maybe<ResolversTypes['Accessibility']>, ParentType, ContextType>;
1972
2115
  autoplay: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
1973
2116
  caption: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1974
- clips: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Clip']>>>, ParentType, ContextType>;
1975
- contentWarning: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;
2117
+ clips: Resolver<Maybe<ReadonlyArray<ResolversTypes['Clip']>>, ParentType, ContextType>;
2118
+ contentWarning: Resolver<Maybe<ReadonlyArray<ResolversTypes['String']>>, ParentType, ContextType>;
1976
2119
  credits: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1977
2120
  dataLayout: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1978
2121
  description: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
@@ -1998,6 +2141,19 @@ export type ClipSourceResolvers<ContextType = QueryContext, ParentType extends R
1998
2141
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
1999
2142
  }>;
2000
2143
  export type ConceptResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Concept'] = ResolversParentTypes['Concept']> = ResolversObject<{
2144
+ apiUrl: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2145
+ directType: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2146
+ id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
2147
+ isPackageBrand: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
2148
+ predicate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2149
+ prefLabel: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2150
+ type: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2151
+ types: Resolver<ReadonlyArray<ResolversTypes['String']>, ParentType, ContextType>;
2152
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType, Partial<ConceptUrlArgs>>;
2153
+ __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2154
+ }>;
2155
+ export type ConceptInterfaceResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['ConceptInterface'] = ResolversParentTypes['ConceptInterface']> = ResolversObject<{
2156
+ __resolveType?: TypeResolveFn<'Author' | 'Concept', ParentType, ContextType>;
2001
2157
  apiUrl: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2002
2158
  directType: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2003
2159
  id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
@@ -2006,15 +2162,14 @@ export type ConceptResolvers<ContextType = QueryContext, ParentType extends Reso
2006
2162
  prefLabel: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2007
2163
  type: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2008
2164
  types: Resolver<Maybe<ReadonlyArray<ResolversTypes['String']>>, ParentType, ContextType>;
2009
- url: Resolver<ResolversTypes['String'], ParentType, ContextType, Partial<ConceptUrlArgs>>;
2010
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2165
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType, Partial<ConceptInterfaceUrlArgs>>;
2011
2166
  }>;
2012
2167
  export type ContentResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Content'] = ResolversParentTypes['Content']> = ResolversObject<{
2013
2168
  __resolveType?: TypeResolveFn<'Article' | 'Audio' | 'ContentPackage' | 'LiveBlogPackage' | 'LiveBlogPost' | 'Placeholder' | 'Video', ParentType, ContextType>;
2014
2169
  accessLevel: Resolver<Maybe<ResolversTypes['AccessLevel']>, ParentType, ContextType>;
2015
2170
  altStandfirst: Resolver<Maybe<ResolversTypes['AltStandfirst']>, ParentType, ContextType>;
2016
2171
  altTitle: Resolver<Maybe<ResolversTypes['AltTitle']>, ParentType, ContextType>;
2017
- annotations: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Concept']>>>, ParentType, ContextType>;
2172
+ annotations: Resolver<ReadonlyArray<ResolversTypes['ConceptInterface']>, ParentType, ContextType, Partial<ContentAnnotationsArgs>>;
2018
2173
  body: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
2019
2174
  bodyXML: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2020
2175
  byline: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType, Partial<ContentBylineArgs>>;
@@ -2026,8 +2181,9 @@ export type ContentResolvers<ContextType = QueryContext, ParentType extends Reso
2026
2181
  id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
2027
2182
  instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
2028
2183
  mainImage: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
2184
+ modifiedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
2029
2185
  originatingParty: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2030
- publishReference: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2186
+ publishReference: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2031
2187
  publishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2032
2188
  publishedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
2033
2189
  standfirst: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
@@ -2041,7 +2197,7 @@ export type ContentPackageResolvers<ContextType = QueryContext, ParentType exten
2041
2197
  accessLevel: Resolver<Maybe<ResolversTypes['AccessLevel']>, ParentType, ContextType>;
2042
2198
  altStandfirst: Resolver<Maybe<ResolversTypes['AltStandfirst']>, ParentType, ContextType>;
2043
2199
  altTitle: Resolver<Maybe<ResolversTypes['AltTitle']>, ParentType, ContextType>;
2044
- annotations: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Concept']>>>, ParentType, ContextType>;
2200
+ annotations: Resolver<ReadonlyArray<ResolversTypes['ConceptInterface']>, ParentType, ContextType, Partial<ContentPackageAnnotationsArgs>>;
2045
2201
  body: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
2046
2202
  bodyXML: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2047
2203
  byline: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType, Partial<ContentPackageBylineArgs>>;
@@ -2055,8 +2211,9 @@ export type ContentPackageResolvers<ContextType = QueryContext, ParentType exten
2055
2211
  id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
2056
2212
  instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
2057
2213
  mainImage: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
2214
+ modifiedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
2058
2215
  originatingParty: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2059
- publishReference: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2216
+ publishReference: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2060
2217
  publishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2061
2218
  publishedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
2062
2219
  standfirst: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
@@ -2120,11 +2277,12 @@ export type FlourishFallbackResolvers<ContextType = QueryContext, ParentType ext
2120
2277
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2121
2278
  }>;
2122
2279
  export type FlourishSourceResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['FlourishSource'] = ResolversParentTypes['FlourishSource']> = ResolversObject<{
2123
- format: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2124
- height: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2125
- type: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2126
- url: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2127
- width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2280
+ format: Resolver<ResolversTypes['ImageFormat'], ParentType, ContextType>;
2281
+ height: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
2282
+ id: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2283
+ type: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2284
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2285
+ width: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
2128
2286
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2129
2287
  }>;
2130
2288
  export interface FollowButtonVariantScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes['FollowButtonVariant'], any> {
@@ -2156,7 +2314,7 @@ export type ImageResolvers<ContextType = QueryContext, ParentType extends Resolv
2156
2314
  id: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2157
2315
  sourceSet: Resolver<ReadonlyArray<ResolversTypes['ImageSource']>, ParentType, ContextType, Partial<ImageSourceSetArgs>>;
2158
2316
  type: Resolver<Maybe<ResolversTypes['ImageType']>, ParentType, ContextType>;
2159
- url: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2317
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2160
2318
  width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2161
2319
  }>;
2162
2320
  export type ImageDesktopResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['ImageDesktop'] = ResolversParentTypes['ImageDesktop']> = ResolversObject<{
@@ -2168,7 +2326,7 @@ export type ImageDesktopResolvers<ContextType = QueryContext, ParentType extends
2168
2326
  id: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2169
2327
  sourceSet: Resolver<ReadonlyArray<ResolversTypes['ImageSource']>, ParentType, ContextType, Partial<ImageDesktopSourceSetArgs>>;
2170
2328
  type: Resolver<Maybe<ResolversTypes['ImageType']>, ParentType, ContextType>;
2171
- url: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2329
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2172
2330
  width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2173
2331
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2174
2332
  }>;
@@ -2184,7 +2342,7 @@ export type ImageLandscapeResolvers<ContextType = QueryContext, ParentType exten
2184
2342
  id: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2185
2343
  sourceSet: Resolver<ReadonlyArray<ResolversTypes['ImageSource']>, ParentType, ContextType, Partial<ImageLandscapeSourceSetArgs>>;
2186
2344
  type: Resolver<Maybe<ResolversTypes['ImageType']>, ParentType, ContextType>;
2187
- url: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2345
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2188
2346
  width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2189
2347
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2190
2348
  }>;
@@ -2197,7 +2355,7 @@ export type ImageMobileResolvers<ContextType = QueryContext, ParentType extends
2197
2355
  id: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2198
2356
  sourceSet: Resolver<ReadonlyArray<ResolversTypes['ImageSource']>, ParentType, ContextType, Partial<ImageMobileSourceSetArgs>>;
2199
2357
  type: Resolver<Maybe<ResolversTypes['ImageType']>, ParentType, ContextType>;
2200
- url: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2358
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2201
2359
  width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2202
2360
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2203
2361
  }>;
@@ -2210,7 +2368,7 @@ export type ImagePortraitResolvers<ContextType = QueryContext, ParentType extend
2210
2368
  id: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2211
2369
  sourceSet: Resolver<ReadonlyArray<ResolversTypes['ImageSource']>, ParentType, ContextType, Partial<ImagePortraitSourceSetArgs>>;
2212
2370
  type: Resolver<Maybe<ResolversTypes['ImageType']>, ParentType, ContextType>;
2213
- url: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2371
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2214
2372
  width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2215
2373
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2216
2374
  }>;
@@ -2220,9 +2378,9 @@ export type ImageSetResolvers<ContextType = QueryContext, ParentType extends Res
2220
2378
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2221
2379
  }>;
2222
2380
  export type ImageSourceResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['ImageSource'] = ResolversParentTypes['ImageSource']> = ResolversObject<{
2223
- dpr: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2381
+ dpr: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
2224
2382
  url: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2225
- width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2383
+ width: Resolver<ResolversTypes['Int'], ParentType, ContextType>;
2226
2384
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2227
2385
  }>;
2228
2386
  export type ImageSquareResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['ImageSquare'] = ResolversParentTypes['ImageSquare']> = ResolversObject<{
@@ -2234,7 +2392,7 @@ export type ImageSquareResolvers<ContextType = QueryContext, ParentType extends
2234
2392
  id: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2235
2393
  sourceSet: Resolver<ReadonlyArray<ResolversTypes['ImageSource']>, ParentType, ContextType, Partial<ImageSquareSourceSetArgs>>;
2236
2394
  type: Resolver<Maybe<ResolversTypes['ImageType']>, ParentType, ContextType>;
2237
- url: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2395
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2238
2396
  width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2239
2397
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2240
2398
  }>;
@@ -2247,7 +2405,7 @@ export type ImageSquareFtEditResolvers<ContextType = QueryContext, ParentType ex
2247
2405
  id: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2248
2406
  sourceSet: Resolver<ReadonlyArray<ResolversTypes['ImageSource']>, ParentType, ContextType, Partial<ImageSquareFtEditSourceSetArgs>>;
2249
2407
  type: Resolver<Maybe<ResolversTypes['ImageType']>, ParentType, ContextType>;
2250
- url: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2408
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2251
2409
  width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2252
2410
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2253
2411
  }>;
@@ -2260,7 +2418,7 @@ export type ImageStandardResolvers<ContextType = QueryContext, ParentType extend
2260
2418
  id: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2261
2419
  sourceSet: Resolver<ReadonlyArray<ResolversTypes['ImageSource']>, ParentType, ContextType, Partial<ImageStandardSourceSetArgs>>;
2262
2420
  type: Resolver<Maybe<ResolversTypes['ImageType']>, ParentType, ContextType>;
2263
- url: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2421
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2264
2422
  width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2265
2423
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2266
2424
  }>;
@@ -2273,7 +2431,7 @@ export type ImageStandardInlineResolvers<ContextType = QueryContext, ParentType
2273
2431
  id: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2274
2432
  sourceSet: Resolver<ReadonlyArray<ResolversTypes['ImageSource']>, ParentType, ContextType, Partial<ImageStandardInlineSourceSetArgs>>;
2275
2433
  type: Resolver<Maybe<ResolversTypes['ImageType']>, ParentType, ContextType>;
2276
- url: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2434
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2277
2435
  width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2278
2436
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2279
2437
  }>;
@@ -2289,12 +2447,12 @@ export type ImageWideResolvers<ContextType = QueryContext, ParentType extends Re
2289
2447
  id: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2290
2448
  sourceSet: Resolver<ReadonlyArray<ResolversTypes['ImageSource']>, ParentType, ContextType, Partial<ImageWideSourceSetArgs>>;
2291
2449
  type: Resolver<Maybe<ResolversTypes['ImageType']>, ParentType, ContextType>;
2292
- url: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2450
+ url: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2293
2451
  width: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
2294
2452
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2295
2453
  }>;
2296
2454
  export type IndicatorsResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Indicators'] = ResolversParentTypes['Indicators']> = ResolversObject<{
2297
- accessLevel: Resolver<Maybe<ResolversTypes['AccessLevel']>, ParentType, ContextType>;
2455
+ accessLevel: Resolver<ResolversTypes['AccessLevel'], ParentType, ContextType>;
2298
2456
  isColumn: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
2299
2457
  isEditorsChoice: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
2300
2458
  isExclusive: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
@@ -2340,7 +2498,7 @@ export type LiveBlogPackageResolvers<ContextType = QueryContext, ParentType exte
2340
2498
  accessLevel: Resolver<Maybe<ResolversTypes['AccessLevel']>, ParentType, ContextType>;
2341
2499
  altStandfirst: Resolver<Maybe<ResolversTypes['AltStandfirst']>, ParentType, ContextType>;
2342
2500
  altTitle: Resolver<Maybe<ResolversTypes['AltTitle']>, ParentType, ContextType>;
2343
- annotations: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Concept']>>>, ParentType, ContextType>;
2501
+ annotations: Resolver<ReadonlyArray<ResolversTypes['ConceptInterface']>, ParentType, ContextType, Partial<LiveBlogPackageAnnotationsArgs>>;
2344
2502
  body: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
2345
2503
  bodyXML: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2346
2504
  byline: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType, Partial<LiveBlogPackageBylineArgs>>;
@@ -2351,11 +2509,12 @@ export type LiveBlogPackageResolvers<ContextType = QueryContext, ParentType exte
2351
2509
  firstPublishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2352
2510
  id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
2353
2511
  instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
2354
- liveBlogPosts: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Content']>>>, ParentType, ContextType, Partial<LiveBlogPackageLiveBlogPostsArgs>>;
2512
+ liveBlogPosts: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Content']>>>, ParentType, ContextType>;
2355
2513
  mainImage: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
2514
+ modifiedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
2356
2515
  originatingParty: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2357
2516
  pinnedPost: Resolver<Maybe<ResolversTypes['Content']>, ParentType, ContextType>;
2358
- publishReference: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2517
+ publishReference: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2359
2518
  publishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2360
2519
  publishedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
2361
2520
  realtime: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
@@ -2371,8 +2530,8 @@ export type LiveBlogPostResolvers<ContextType = QueryContext, ParentType extends
2371
2530
  accessLevel: Resolver<Maybe<ResolversTypes['AccessLevel']>, ParentType, ContextType>;
2372
2531
  altStandfirst: Resolver<Maybe<ResolversTypes['AltStandfirst']>, ParentType, ContextType>;
2373
2532
  altTitle: Resolver<Maybe<ResolversTypes['AltTitle']>, ParentType, ContextType>;
2374
- annotations: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Concept']>>>, ParentType, ContextType>;
2375
- authors: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Person']>>>, ParentType, ContextType>;
2533
+ annotations: Resolver<ReadonlyArray<ResolversTypes['ConceptInterface']>, ParentType, ContextType, Partial<LiveBlogPostAnnotationsArgs>>;
2534
+ authors: Resolver<ReadonlyArray<ResolversTypes['Person']>, ParentType, ContextType>;
2376
2535
  body: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
2377
2536
  bodyXML: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2378
2537
  byline: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType, Partial<LiveBlogPostBylineArgs>>;
@@ -2387,8 +2546,9 @@ export type LiveBlogPostResolvers<ContextType = QueryContext, ParentType extends
2387
2546
  instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
2388
2547
  isPinned: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
2389
2548
  mainImage: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
2549
+ modifiedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
2390
2550
  originatingParty: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2391
- publishReference: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2551
+ publishReference: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2392
2552
  publishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2393
2553
  publishedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
2394
2554
  standfirst: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
@@ -2460,7 +2620,7 @@ export type PictureResolvers<ContextType = QueryContext, ParentType extends Reso
2460
2620
  fallbackImage: Resolver<ResolversTypes['Image'], ParentType, ContextType>;
2461
2621
  imageType: Resolver<ResolversTypes['ImageType'], ParentType, ContextType>;
2462
2622
  images: Resolver<ReadonlyArray<ResolversTypes['Image']>, ParentType, ContextType>;
2463
- layoutWidth: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2623
+ layoutWidth: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2464
2624
  }>;
2465
2625
  export type PictureFullBleedResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['PictureFullBleed'] = ResolversParentTypes['PictureFullBleed']> = ResolversObject<{
2466
2626
  alt: Resolver<ResolversTypes['String'], ParentType, ContextType>;
@@ -2469,7 +2629,7 @@ export type PictureFullBleedResolvers<ContextType = QueryContext, ParentType ext
2469
2629
  fallbackImage: Resolver<ResolversTypes['Image'], ParentType, ContextType>;
2470
2630
  imageType: Resolver<ResolversTypes['ImageType'], ParentType, ContextType>;
2471
2631
  images: Resolver<ReadonlyArray<ResolversTypes['Image']>, ParentType, ContextType>;
2472
- layoutWidth: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2632
+ layoutWidth: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2473
2633
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2474
2634
  }>;
2475
2635
  export type PictureInlineResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['PictureInline'] = ResolversParentTypes['PictureInline']> = ResolversObject<{
@@ -2479,7 +2639,7 @@ export type PictureInlineResolvers<ContextType = QueryContext, ParentType extend
2479
2639
  fallbackImage: Resolver<ResolversTypes['Image'], ParentType, ContextType>;
2480
2640
  imageType: Resolver<ResolversTypes['ImageType'], ParentType, ContextType>;
2481
2641
  images: Resolver<ReadonlyArray<ResolversTypes['Image']>, ParentType, ContextType>;
2482
- layoutWidth: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2642
+ layoutWidth: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2483
2643
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2484
2644
  }>;
2485
2645
  export type PictureStandardResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['PictureStandard'] = ResolversParentTypes['PictureStandard']> = ResolversObject<{
@@ -2489,14 +2649,14 @@ export type PictureStandardResolvers<ContextType = QueryContext, ParentType exte
2489
2649
  fallbackImage: Resolver<ResolversTypes['Image'], ParentType, ContextType>;
2490
2650
  imageType: Resolver<ResolversTypes['ImageType'], ParentType, ContextType>;
2491
2651
  images: Resolver<ReadonlyArray<ResolversTypes['Image']>, ParentType, ContextType>;
2492
- layoutWidth: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2652
+ layoutWidth: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2493
2653
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2494
2654
  }>;
2495
2655
  export type PlaceholderResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Placeholder'] = ResolversParentTypes['Placeholder']> = ResolversObject<{
2496
2656
  accessLevel: Resolver<Maybe<ResolversTypes['AccessLevel']>, ParentType, ContextType>;
2497
2657
  altStandfirst: Resolver<Maybe<ResolversTypes['AltStandfirst']>, ParentType, ContextType>;
2498
2658
  altTitle: Resolver<Maybe<ResolversTypes['AltTitle']>, ParentType, ContextType>;
2499
- annotations: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Concept']>>>, ParentType, ContextType>;
2659
+ annotations: Resolver<ReadonlyArray<ResolversTypes['ConceptInterface']>, ParentType, ContextType, Partial<PlaceholderAnnotationsArgs>>;
2500
2660
  body: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
2501
2661
  bodyXML: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2502
2662
  byline: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType, Partial<PlaceholderBylineArgs>>;
@@ -2509,8 +2669,9 @@ export type PlaceholderResolvers<ContextType = QueryContext, ParentType extends
2509
2669
  id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
2510
2670
  instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
2511
2671
  mainImage: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
2672
+ modifiedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
2512
2673
  originatingParty: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2513
- publishReference: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2674
+ publishReference: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2514
2675
  publishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2515
2676
  publishedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
2516
2677
  standfirst: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
@@ -2555,7 +2716,7 @@ export type RecommendedResolvers<ContextType = QueryContext, ParentType extends
2555
2716
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2556
2717
  }>;
2557
2718
  export type ReferenceResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Reference'] = ResolversParentTypes['Reference']> = ResolversObject<{
2558
- __resolveType?: TypeResolveFn<'ClipSet' | 'Flourish' | 'ImageSet' | 'LayoutImage' | 'MainImage' | 'RawImage' | 'Recommended' | 'ScrollyImage' | 'Tweet' | 'VideoReference', ParentType, ContextType>;
2719
+ __resolveType?: TypeResolveFn<'AuthorReference' | 'ClipSet' | 'Flourish' | 'ImageSet' | 'LayoutImage' | 'MainImage' | 'RawImage' | 'Recommended' | 'ScrollyImage' | 'Tweet' | 'VideoReference', ParentType, ContextType>;
2559
2720
  type: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2560
2721
  }>;
2561
2722
  export type RichTextResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['RichText'] = ResolversParentTypes['RichText']> = ResolversObject<{
@@ -2601,19 +2762,19 @@ export type TableOfContentsResolvers<ContextType = QueryContext, ParentType exte
2601
2762
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2602
2763
  }>;
2603
2764
  export type TeaserResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Teaser'] = ResolversParentTypes['Teaser']> = ResolversObject<{
2604
- firstPublishedDate: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2605
- id: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2765
+ firstPublishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2766
+ id: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2606
2767
  image: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
2607
- indicators: Resolver<Maybe<ResolversTypes['Indicators']>, ParentType, ContextType>;
2768
+ indicators: Resolver<ResolversTypes['Indicators'], ParentType, ContextType>;
2608
2769
  metaAltLink: Resolver<Maybe<ResolversTypes['MetaLink']>, ParentType, ContextType>;
2609
2770
  metaLink: Resolver<Maybe<ResolversTypes['MetaLink']>, ParentType, ContextType>;
2610
2771
  metaPrefixText: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2611
2772
  metaSuffixText: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2612
- publishedDate: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2773
+ publishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2613
2774
  standfirst: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2614
- theme: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2615
- title: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2616
- type: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2775
+ theme: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2776
+ title: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2777
+ type: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2617
2778
  url: Resolver<ResolversTypes['String'], ParentType, ContextType, Partial<TeaserUrlArgs>>;
2618
2779
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2619
2780
  }>;
@@ -2670,7 +2831,7 @@ export type TopperWithThemeResolvers<ContextType = QueryContext, ParentType exte
2670
2831
  layout: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2671
2832
  }>;
2672
2833
  export type TweetResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Tweet'] = ResolversParentTypes['Tweet']> = ResolversObject<{
2673
- html: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2834
+ html: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2674
2835
  type: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2675
2836
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
2676
2837
  }>;
@@ -2678,7 +2839,7 @@ export type VideoResolvers<ContextType = QueryContext, ParentType extends Resolv
2678
2839
  accessLevel: Resolver<Maybe<ResolversTypes['AccessLevel']>, ParentType, ContextType>;
2679
2840
  altStandfirst: Resolver<Maybe<ResolversTypes['AltStandfirst']>, ParentType, ContextType>;
2680
2841
  altTitle: Resolver<Maybe<ResolversTypes['AltTitle']>, ParentType, ContextType>;
2681
- annotations: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Concept']>>>, ParentType, ContextType>;
2842
+ annotations: Resolver<ReadonlyArray<ResolversTypes['ConceptInterface']>, ParentType, ContextType, Partial<VideoAnnotationsArgs>>;
2682
2843
  body: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
2683
2844
  bodyXML: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2684
2845
  byline: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType, Partial<VideoBylineArgs>>;
@@ -2690,8 +2851,9 @@ export type VideoResolvers<ContextType = QueryContext, ParentType extends Resolv
2690
2851
  id: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
2691
2852
  instantAlertConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
2692
2853
  mainImage: Resolver<Maybe<ResolversTypes['Image']>, ParentType, ContextType>;
2854
+ modifiedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
2693
2855
  originatingParty: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2694
- publishReference: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2856
+ publishReference: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
2695
2857
  publishedDate: Resolver<ResolversTypes['String'], ParentType, ContextType>;
2696
2858
  publishedTimestamp: Resolver<ResolversTypes['Float'], ParentType, ContextType>;
2697
2859
  standfirst: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
@@ -2715,6 +2877,8 @@ export type Resolvers<ContextType = QueryContext> = ResolversObject<{
2715
2877
  AltTitle: AltTitleResolvers<ContextType>;
2716
2878
  Article: ArticleResolvers<ContextType>;
2717
2879
  Audio: AudioResolvers<ContextType>;
2880
+ Author: AuthorResolvers<ContextType>;
2881
+ AuthorReference: AuthorReferenceResolvers<ContextType>;
2718
2882
  BasicTopper: BasicTopperResolvers<ContextType>;
2719
2883
  BrandedTopper: BrandedTopperResolvers<ContextType>;
2720
2884
  CanBeSyndicated: GraphQLScalarType;
@@ -2724,6 +2888,7 @@ export type Resolvers<ContextType = QueryContext> = ResolversObject<{
2724
2888
  ClipSet: ClipSetResolvers<ContextType>;
2725
2889
  ClipSource: ClipSourceResolvers<ContextType>;
2726
2890
  Concept: ConceptResolvers<ContextType>;
2891
+ ConceptInterface: ConceptInterfaceResolvers<ContextType>;
2727
2892
  Content: ContentResolvers<ContextType>;
2728
2893
  ContentPackage: ContentPackageResolvers<ContextType>;
2729
2894
  ContentType: GraphQLScalarType;