@financial-times/cp-content-pipeline-schema 0.7.25 → 0.7.26

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 (40) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/lib/generated/index.d.ts +24 -0
  3. package/lib/model/CapiResponse.d.ts +2 -1
  4. package/lib/model/CapiResponse.js +3 -0
  5. package/lib/model/CapiResponse.js.map +1 -1
  6. package/lib/model/schemas/capi/article.d.ts +3 -0
  7. package/lib/model/schemas/capi/article.js +1 -0
  8. package/lib/model/schemas/capi/article.js.map +1 -1
  9. package/lib/model/schemas/capi/audio.d.ts +3 -0
  10. package/lib/model/schemas/capi/audio.js +1 -0
  11. package/lib/model/schemas/capi/audio.js.map +1 -1
  12. package/lib/model/schemas/capi/base-schema.d.ts +3 -0
  13. package/lib/model/schemas/capi/base-schema.js +5 -0
  14. package/lib/model/schemas/capi/base-schema.js.map +1 -1
  15. package/lib/model/schemas/capi/content-package.d.ts +3 -0
  16. package/lib/model/schemas/capi/content-package.js +1 -0
  17. package/lib/model/schemas/capi/content-package.js.map +1 -1
  18. package/lib/model/schemas/capi/live-blog-package.d.ts +3 -0
  19. package/lib/model/schemas/capi/live-blog-package.js +1 -0
  20. package/lib/model/schemas/capi/live-blog-package.js.map +1 -1
  21. package/lib/resolvers/content.d.ts +1 -0
  22. package/lib/resolvers/content.js +1 -0
  23. package/lib/resolvers/content.js.map +1 -1
  24. package/lib/resolvers/index.d.ts +2 -0
  25. package/lib/resolvers/scalars.d.ts +2 -0
  26. package/lib/resolvers/scalars.js +6 -1
  27. package/lib/resolvers/scalars.js.map +1 -1
  28. package/package.json +1 -1
  29. package/src/generated/index.ts +22 -0
  30. package/src/model/CapiResponse.ts +9 -1
  31. package/src/model/schemas/capi/article.ts +1 -0
  32. package/src/model/schemas/capi/audio.ts +1 -0
  33. package/src/model/schemas/capi/base-schema.ts +5 -0
  34. package/src/model/schemas/capi/content-package.ts +1 -0
  35. package/src/model/schemas/capi/live-blog-package.ts +1 -0
  36. package/src/resolvers/content.ts +1 -0
  37. package/src/resolvers/scalars.ts +6 -0
  38. package/tsconfig.tsbuildinfo +1 -1
  39. package/typedefs/content.graphql +8 -0
  40. package/typedefs/scalars.graphql +1 -0
@@ -26,6 +26,7 @@ export type Scalars = {
26
26
  Int: { input: number; output: number; }
27
27
  Float: { input: number; output: number; }
28
28
  AccessLevel: { input: 'premium' | 'subscribed' | 'registered' | 'free'; output: 'premium' | 'subscribed' | 'registered' | 'free'; }
29
+ CanBeSyndicated: { input: 'yes' | 'no' | 'verify'; output: 'yes' | 'no' | 'verify'; }
29
30
  ContentType: { input: 'Article' | 'Video' | 'Audio' | 'LiveBlogPackage' | 'LiveBlogPost' | 'ContentPackage' | 'Content' | 'MediaResource'; output: 'Article' | 'Video' | 'Audio' | 'LiveBlogPackage' | 'LiveBlogPost' | 'ContentPackage' | 'Content' | 'MediaResource'; }
30
31
  FollowButtonVariant: { input: 'standard' | 'inverse' | 'opinion' | 'alphaville' | 'monochrome' | 'inverse-monochrome'; output: 'standard' | 'inverse' | 'opinion' | 'alphaville' | 'monochrome' | 'inverse-monochrome'; }
31
32
  ImageFormat: { input: 'standard' | 'standard-inline' | 'desktop' | 'mobile' | 'wide' | 'square' | 'square-ftedit' | 'portrait' | 'landscape'; output: 'standard' | 'standard-inline' | 'desktop' | 'mobile' | 'wide' | 'square' | 'square-ftedit' | 'portrait' | 'landscape'; }
@@ -52,6 +53,7 @@ export type Article = Content & {
52
53
  readonly body?: Maybe<RichText>;
53
54
  readonly bodyXML?: Maybe<Scalars['String']['output']>;
54
55
  readonly byline?: Maybe<StructuredContent>;
56
+ readonly canBeSyndicated?: Maybe<Scalars['CanBeSyndicated']['output']>;
55
57
  readonly commentsEnabled?: Maybe<Scalars['Boolean']['output']>;
56
58
  readonly containedIn?: Maybe<Content>;
57
59
  readonly design?: Maybe<Design>;
@@ -81,6 +83,7 @@ export type Audio = Content & {
81
83
  readonly body?: Maybe<RichText>;
82
84
  readonly bodyXML?: Maybe<Scalars['String']['output']>;
83
85
  readonly byline?: Maybe<StructuredContent>;
86
+ readonly canBeSyndicated?: Maybe<Scalars['CanBeSyndicated']['output']>;
84
87
  readonly commentsEnabled?: Maybe<Scalars['Boolean']['output']>;
85
88
  readonly design?: Maybe<Design>;
86
89
  readonly firstPublishedDate: Scalars['String']['output'];
@@ -151,6 +154,7 @@ export type Content = {
151
154
  readonly body?: Maybe<RichText>;
152
155
  readonly bodyXML?: Maybe<Scalars['String']['output']>;
153
156
  readonly byline?: Maybe<StructuredContent>;
157
+ readonly canBeSyndicated?: Maybe<Scalars['CanBeSyndicated']['output']>;
154
158
  readonly commentsEnabled?: Maybe<Scalars['Boolean']['output']>;
155
159
  readonly design?: Maybe<Design>;
156
160
  readonly firstPublishedDate: Scalars['String']['output'];
@@ -179,6 +183,7 @@ export type ContentPackage = Content & {
179
183
  readonly body?: Maybe<RichText>;
180
184
  readonly bodyXML?: Maybe<Scalars['String']['output']>;
181
185
  readonly byline?: Maybe<StructuredContent>;
186
+ readonly canBeSyndicated?: Maybe<Scalars['CanBeSyndicated']['output']>;
182
187
  readonly commentsEnabled?: Maybe<Scalars['Boolean']['output']>;
183
188
  readonly contains?: Maybe<ReadonlyArray<Maybe<Teaser>>>;
184
189
  readonly design?: Maybe<Design>;
@@ -489,6 +494,7 @@ export type LiveBlogPackage = Content & {
489
494
  readonly body?: Maybe<RichText>;
490
495
  readonly bodyXML?: Maybe<Scalars['String']['output']>;
491
496
  readonly byline?: Maybe<StructuredContent>;
497
+ readonly canBeSyndicated?: Maybe<Scalars['CanBeSyndicated']['output']>;
492
498
  readonly commentsEnabled?: Maybe<Scalars['Boolean']['output']>;
493
499
  readonly design?: Maybe<Design>;
494
500
  readonly firstPublishedDate: Scalars['String']['output'];
@@ -519,6 +525,7 @@ export type LiveBlogPost = Content & {
519
525
  readonly body?: Maybe<RichText>;
520
526
  readonly bodyXML?: Maybe<Scalars['String']['output']>;
521
527
  readonly byline?: Maybe<StructuredContent>;
528
+ readonly canBeSyndicated?: Maybe<Scalars['CanBeSyndicated']['output']>;
522
529
  readonly commentsEnabled?: Maybe<Scalars['Boolean']['output']>;
523
530
  readonly design?: Maybe<Design>;
524
531
  readonly firstPublishedDate: Scalars['String']['output'];
@@ -785,6 +792,7 @@ export type Video = Content & {
785
792
  readonly body?: Maybe<RichText>;
786
793
  readonly bodyXML?: Maybe<Scalars['String']['output']>;
787
794
  readonly byline?: Maybe<StructuredContent>;
795
+ readonly canBeSyndicated?: Maybe<Scalars['CanBeSyndicated']['output']>;
788
796
  readonly commentsEnabled?: Maybe<Scalars['Boolean']['output']>;
789
797
  readonly design?: Maybe<Design>;
790
798
  readonly firstPublishedDate: Scalars['String']['output'];
@@ -904,6 +912,7 @@ export type ResolversTypes = ResolversObject<{
904
912
  BasicTopper: ResolverTypeWrapper<Omit<BasicTopper, 'displayConcept' | 'intro'> & { displayConcept?: Maybe<ResolversTypes['Concept']>, intro?: Maybe<ResolversTypes['RichText']> }>;
905
913
  Boolean: ResolverTypeWrapper<Scalars['Boolean']['output']>;
906
914
  BrandedTopper: ResolverTypeWrapper<Omit<BrandedTopper, 'brandConcept' | 'displayConcept' | 'genreConcept' | 'intro'> & { brandConcept?: Maybe<ResolversTypes['Concept']>, displayConcept?: Maybe<ResolversTypes['Concept']>, genreConcept?: Maybe<ResolversTypes['Concept']>, intro?: Maybe<ResolversTypes['RichText']> }>;
915
+ CanBeSyndicated: ResolverTypeWrapper<Scalars['CanBeSyndicated']['output']>;
907
916
  Concept: ResolverTypeWrapper<ConceptModel>;
908
917
  Content: ResolverTypeWrapper<ResolversInterfaceTypes<ResolversTypes>['Content']>;
909
918
  ContentPackage: ResolverTypeWrapper<CapiResponse>;
@@ -980,6 +989,7 @@ export type ResolversParentTypes = ResolversObject<{
980
989
  BasicTopper: Omit<BasicTopper, 'displayConcept' | 'intro'> & { displayConcept?: Maybe<ResolversParentTypes['Concept']>, intro?: Maybe<ResolversParentTypes['RichText']> };
981
990
  Boolean: Scalars['Boolean']['output'];
982
991
  BrandedTopper: Omit<BrandedTopper, 'brandConcept' | 'displayConcept' | 'genreConcept' | 'intro'> & { brandConcept?: Maybe<ResolversParentTypes['Concept']>, displayConcept?: Maybe<ResolversParentTypes['Concept']>, genreConcept?: Maybe<ResolversParentTypes['Concept']>, intro?: Maybe<ResolversParentTypes['RichText']> };
992
+ CanBeSyndicated: Scalars['CanBeSyndicated']['output'];
983
993
  Concept: ConceptModel;
984
994
  Content: ResolversInterfaceTypes<ResolversParentTypes>['Content'];
985
995
  ContentPackage: CapiResponse;
@@ -1068,6 +1078,7 @@ export type ArticleResolvers<ContextType = QueryContext, ParentType extends Reso
1068
1078
  body?: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
1069
1079
  bodyXML?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1070
1080
  byline?: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType>;
1081
+ canBeSyndicated?: Resolver<Maybe<ResolversTypes['CanBeSyndicated']>, ParentType, ContextType>;
1071
1082
  commentsEnabled?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
1072
1083
  containedIn?: Resolver<Maybe<ResolversTypes['Content']>, ParentType, ContextType>;
1073
1084
  design?: Resolver<Maybe<ResolversTypes['Design']>, ParentType, ContextType>;
@@ -1092,6 +1103,7 @@ export type AudioResolvers<ContextType = QueryContext, ParentType extends Resolv
1092
1103
  body?: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
1093
1104
  bodyXML?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1094
1105
  byline?: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType>;
1106
+ canBeSyndicated?: Resolver<Maybe<ResolversTypes['CanBeSyndicated']>, ParentType, ContextType>;
1095
1107
  commentsEnabled?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
1096
1108
  design?: Resolver<Maybe<ResolversTypes['Design']>, ParentType, ContextType>;
1097
1109
  firstPublishedDate?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
@@ -1134,6 +1146,10 @@ export type BrandedTopperResolvers<ContextType = QueryContext, ParentType extend
1134
1146
  __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
1135
1147
  }>;
1136
1148
 
1149
+ export interface CanBeSyndicatedScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes['CanBeSyndicated'], any> {
1150
+ name: 'CanBeSyndicated';
1151
+ }
1152
+
1137
1153
  export type ConceptResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['Concept'] = ResolversParentTypes['Concept']> = ResolversObject<{
1138
1154
  apiUrl?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
1139
1155
  directType?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
@@ -1155,6 +1171,7 @@ export type ContentResolvers<ContextType = QueryContext, ParentType extends Reso
1155
1171
  body?: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
1156
1172
  bodyXML?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1157
1173
  byline?: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType>;
1174
+ canBeSyndicated?: Resolver<Maybe<ResolversTypes['CanBeSyndicated']>, ParentType, ContextType>;
1158
1175
  commentsEnabled?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
1159
1176
  design?: Resolver<Maybe<ResolversTypes['Design']>, ParentType, ContextType>;
1160
1177
  firstPublishedDate?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
@@ -1177,6 +1194,7 @@ export type ContentPackageResolvers<ContextType = QueryContext, ParentType exten
1177
1194
  body?: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
1178
1195
  bodyXML?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1179
1196
  byline?: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType>;
1197
+ canBeSyndicated?: Resolver<Maybe<ResolversTypes['CanBeSyndicated']>, ParentType, ContextType>;
1180
1198
  commentsEnabled?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
1181
1199
  contains?: Resolver<Maybe<ReadonlyArray<Maybe<ResolversTypes['Teaser']>>>, ParentType, ContextType>;
1182
1200
  design?: Resolver<Maybe<ResolversTypes['Design']>, ParentType, ContextType>;
@@ -1462,6 +1480,7 @@ export type LiveBlogPackageResolvers<ContextType = QueryContext, ParentType exte
1462
1480
  body?: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
1463
1481
  bodyXML?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1464
1482
  byline?: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType>;
1483
+ canBeSyndicated?: Resolver<Maybe<ResolversTypes['CanBeSyndicated']>, ParentType, ContextType>;
1465
1484
  commentsEnabled?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
1466
1485
  design?: Resolver<Maybe<ResolversTypes['Design']>, ParentType, ContextType>;
1467
1486
  firstPublishedDate?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
@@ -1487,6 +1506,7 @@ export type LiveBlogPostResolvers<ContextType = QueryContext, ParentType extends
1487
1506
  body?: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
1488
1507
  bodyXML?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1489
1508
  byline?: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType>;
1509
+ canBeSyndicated?: Resolver<Maybe<ResolversTypes['CanBeSyndicated']>, ParentType, ContextType>;
1490
1510
  commentsEnabled?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
1491
1511
  design?: Resolver<Maybe<ResolversTypes['Design']>, ParentType, ContextType>;
1492
1512
  firstPublishedDate?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
@@ -1746,6 +1766,7 @@ export type VideoResolvers<ContextType = QueryContext, ParentType extends Resolv
1746
1766
  body?: Resolver<Maybe<ResolversTypes['RichText']>, ParentType, ContextType>;
1747
1767
  bodyXML?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
1748
1768
  byline?: Resolver<Maybe<ResolversTypes['StructuredContent']>, ParentType, ContextType>;
1769
+ canBeSyndicated?: Resolver<Maybe<ResolversTypes['CanBeSyndicated']>, ParentType, ContextType>;
1749
1770
  commentsEnabled?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
1750
1771
  design?: Resolver<Maybe<ResolversTypes['Design']>, ParentType, ContextType>;
1751
1772
  firstPublishedDate?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
@@ -1776,6 +1797,7 @@ export type Resolvers<ContextType = QueryContext> = ResolversObject<{
1776
1797
  Audio?: AudioResolvers<ContextType>;
1777
1798
  BasicTopper?: BasicTopperResolvers<ContextType>;
1778
1799
  BrandedTopper?: BrandedTopperResolvers<ContextType>;
1800
+ CanBeSyndicated?: GraphQLScalarType;
1779
1801
  Concept?: ConceptResolvers<ContextType>;
1780
1802
  Content?: ContentResolvers<ContextType>;
1781
1803
  ContentPackage?: ContentPackageResolvers<ContextType>;
@@ -21,7 +21,12 @@ import { Concept } from './Concept'
21
21
  import isError from '../helpers/isError'
22
22
  import { uuidFromUrl } from '../helpers/metadata'
23
23
  import { schemas } from './schemas/capi'
24
- import { AccessLevel, ContentType, PackageDesign } from '../resolvers/scalars'
24
+ import {
25
+ AccessLevel,
26
+ ContentType,
27
+ PackageDesign,
28
+ CanBeSyndicated,
29
+ } from '../resolvers/scalars'
25
30
  import {
26
31
  LiteralUnionScalarValues,
27
32
  validLiteralUnionValue,
@@ -227,6 +232,9 @@ export class CapiResponse {
227
232
  accessLevel(): LiteralUnionScalarValues<typeof AccessLevel> {
228
233
  return this.capiData.accessLevel
229
234
  }
235
+ canBeSyndicated(): LiteralUnionScalarValues<typeof CanBeSyndicated> {
236
+ return this.capiData.canBeSyndicated
237
+ }
230
238
  summary() {
231
239
  if ('summary' in this.capiData) return this.capiData.summary
232
240
  return null
@@ -23,6 +23,7 @@ const articleMetadataSchema = baseMetadataSchema.pick({
23
23
  publishedDate: true,
24
24
  firstPublishedDate: true,
25
25
  accessLevel: true,
26
+ canBeSyndicated: true,
26
27
  topper: true,
27
28
  comments: true,
28
29
  containedIn: true,
@@ -18,6 +18,7 @@ const audioMetadataSchema = baseMetadataSchema.pick({
18
18
  publishedDate: true,
19
19
  firstPublishedDate: true,
20
20
  accessLevel: true,
21
+ canBeSyndicated: true,
21
22
  })
22
23
 
23
24
  const audioMediaSchema = baseMediaSchema.pick({
@@ -137,6 +137,11 @@ export const baseMetadataSchema = z.object({
137
137
  z.literal('registered'),
138
138
  z.literal('free'),
139
139
  ]),
140
+ canBeSyndicated: z.union([
141
+ z.literal('yes'),
142
+ z.literal('no'),
143
+ z.literal('verify'),
144
+ ]),
140
145
  topper: Topper.optional(),
141
146
  comments: z.object({
142
147
  enabled: z.boolean(),
@@ -24,6 +24,7 @@ const contentPackageMetadataSchema = baseMetadataSchema.pick({
24
24
  publishedDate: true,
25
25
  firstPublishedDate: true,
26
26
  accessLevel: true,
27
+ canBeSyndicated: true,
27
28
  topper: true,
28
29
  comments: true,
29
30
  })
@@ -23,6 +23,7 @@ const liveBlogPackageMetadataSchema = baseMetadataSchema.pick({
23
23
  publishedDate: true,
24
24
  firstPublishedDate: true,
25
25
  accessLevel: true,
26
+ canBeSyndicated: true,
26
27
  topper: true,
27
28
  comments: true,
28
29
  })
@@ -44,6 +44,7 @@ const resolvers = {
44
44
  publishedDate: (parent) => parent.publishedDate(),
45
45
  annotations: (parent) => parent.annotations(),
46
46
  accessLevel: (parent) => parent.accessLevel(),
47
+ canBeSyndicated: (parent) => parent.canBeSyndicated(),
47
48
  commentsEnabled: (parent) => parent.commentsEnabled(),
48
49
  design: (parent) => parent.design(),
49
50
  },
@@ -88,6 +88,11 @@ export const AccessLevel = new LiteralUnionScalar<
88
88
  values: ['premium', 'subscribed', 'registered', 'free'],
89
89
  })
90
90
 
91
+ export const CanBeSyndicated = new LiteralUnionScalar<['yes', 'no', 'verify']>({
92
+ name: 'CanBeSyndicated',
93
+ values: ['yes', 'no', 'verify'],
94
+ })
95
+
91
96
  export const ImageType = new LiteralUnionScalar<['image', 'graphic']>({
92
97
  name: 'ImageType',
93
98
  values: ['image', 'graphic'],
@@ -131,6 +136,7 @@ const resolvers = {
131
136
  TopperBackgroundColour,
132
137
  FollowButtonVariant,
133
138
  AccessLevel,
139
+ CanBeSyndicated,
134
140
  ImageType,
135
141
  RichTextSource,
136
142
  ContentType,