@financial-times/cp-content-pipeline-schema 1.1.0 → 1.1.1

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 (30) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/lib/model/CapiResponse.js +5 -3
  3. package/lib/model/CapiResponse.js.map +1 -1
  4. package/lib/model/schemas/capi/article.d.ts +29 -26
  5. package/lib/model/schemas/capi/article.js +1 -0
  6. package/lib/model/schemas/capi/article.js.map +1 -1
  7. package/lib/model/schemas/capi/audio.d.ts +9 -6
  8. package/lib/model/schemas/capi/audio.js +1 -0
  9. package/lib/model/schemas/capi/audio.js.map +1 -1
  10. package/lib/model/schemas/capi/base-schema.d.ts +29 -26
  11. package/lib/model/schemas/capi/base-schema.js +14 -7
  12. package/lib/model/schemas/capi/base-schema.js.map +1 -1
  13. package/lib/model/schemas/capi/content-package.d.ts +29 -26
  14. package/lib/model/schemas/capi/content-package.js +1 -0
  15. package/lib/model/schemas/capi/content-package.js.map +1 -1
  16. package/lib/model/schemas/capi/live-blog-package.d.ts +29 -26
  17. package/lib/model/schemas/capi/live-blog-package.js +1 -0
  18. package/lib/model/schemas/capi/live-blog-package.js.map +1 -1
  19. package/lib/model/schemas/capi/placeholder.d.ts +29 -26
  20. package/lib/model/schemas/capi/placeholder.js +1 -0
  21. package/lib/model/schemas/capi/placeholder.js.map +1 -1
  22. package/package.json +1 -1
  23. package/src/model/CapiResponse.ts +8 -3
  24. package/src/model/schemas/capi/article.ts +1 -0
  25. package/src/model/schemas/capi/audio.ts +1 -0
  26. package/src/model/schemas/capi/base-schema.ts +22 -15
  27. package/src/model/schemas/capi/content-package.ts +1 -0
  28. package/src/model/schemas/capi/live-blog-package.ts +1 -0
  29. package/src/model/schemas/capi/placeholder.ts +1 -0
  30. package/tsconfig.tsbuildinfo +1 -1
@@ -28,8 +28,9 @@ export declare const liveBlogPackageSchema: import("zod").ZodObject<{
28
28
  predicate: string;
29
29
  type?: string | undefined;
30
30
  }>, "many">;
31
- webUrl: import("zod").ZodString;
32
- standout: import("zod").ZodObject<{
31
+ webUrl: import("zod").ZodOptional<import("zod").ZodString>;
32
+ canonicalWebUrl: import("zod").ZodOptional<import("zod").ZodString>;
33
+ standout: import("zod").ZodOptional<import("zod").ZodObject<{
33
34
  editorsChoice: import("zod").ZodBoolean;
34
35
  exclusive: import("zod").ZodBoolean;
35
36
  scoop: import("zod").ZodBoolean;
@@ -41,10 +42,10 @@ export declare const liveBlogPackageSchema: import("zod").ZodObject<{
41
42
  editorsChoice: boolean;
42
43
  exclusive: boolean;
43
44
  scoop: boolean;
44
- }>;
45
+ }>>;
45
46
  publishedDate: import("zod").ZodString;
46
47
  firstPublishedDate: import("zod").ZodString;
47
- accessLevel: import("zod").ZodUnion<[import("zod").ZodLiteral<"premium">, import("zod").ZodLiteral<"subscribed">, import("zod").ZodLiteral<"registered">, import("zod").ZodLiteral<"free">]>;
48
+ accessLevel: import("zod").ZodOptional<import("zod").ZodUnion<[import("zod").ZodLiteral<"premium">, import("zod").ZodLiteral<"subscribed">, import("zod").ZodLiteral<"registered">, import("zod").ZodLiteral<"free">]>>;
48
49
  canBeSyndicated: import("zod").ZodUnion<[import("zod").ZodLiteral<"yes">, import("zod").ZodLiteral<"no">, import("zod").ZodLiteral<"verify">, import("zod").ZodLiteral<"withContributorPayment">, import("zod").ZodLiteral<"unknown">]>;
49
50
  topper: import("zod").ZodOptional<import("zod").ZodObject<{
50
51
  headline: import("zod").ZodOptional<import("zod").ZodString>;
@@ -68,13 +69,13 @@ export declare const liveBlogPackageSchema: import("zod").ZodObject<{
68
69
  backgroundBox?: boolean | undefined;
69
70
  textShadow?: boolean | undefined;
70
71
  }>>;
71
- comments: import("zod").ZodObject<{
72
+ comments: import("zod").ZodOptional<import("zod").ZodObject<{
72
73
  enabled: import("zod").ZodBoolean;
73
74
  }, "strip", import("zod").ZodTypeAny, {
74
75
  enabled: boolean;
75
76
  }, {
76
77
  enabled: boolean;
77
- }>;
78
+ }>>;
78
79
  byline: import("zod").ZodOptional<import("zod").ZodString>;
79
80
  summary: import("zod").ZodObject<{
80
81
  bodyXML: import("zod").ZodString;
@@ -695,19 +696,9 @@ export declare const liveBlogPackageSchema: import("zod").ZodObject<{
695
696
  predicate: string;
696
697
  type?: string | undefined;
697
698
  }[];
698
- webUrl: string;
699
- standout: {
700
- editorsChoice: boolean;
701
- exclusive: boolean;
702
- scoop: boolean;
703
- };
704
699
  publishedDate: string;
705
700
  firstPublishedDate: string;
706
- accessLevel: "premium" | "subscribed" | "registered" | "free";
707
701
  canBeSyndicated: "unknown" | "yes" | "no" | "verify" | "withContributorPayment";
708
- comments: {
709
- enabled: boolean;
710
- };
711
702
  summary: {
712
703
  bodyXML: string;
713
704
  };
@@ -715,6 +706,14 @@ export declare const liveBlogPackageSchema: import("zod").ZodObject<{
715
706
  id: string;
716
707
  apiUrl: string;
717
708
  }[];
709
+ webUrl?: string | undefined;
710
+ canonicalWebUrl?: string | undefined;
711
+ standout?: {
712
+ editorsChoice: boolean;
713
+ exclusive: boolean;
714
+ scoop: boolean;
715
+ } | undefined;
716
+ accessLevel?: "premium" | "subscribed" | "registered" | "free" | undefined;
718
717
  topper?: {
719
718
  backgroundColour: string;
720
719
  layout: string;
@@ -723,6 +722,9 @@ export declare const liveBlogPackageSchema: import("zod").ZodObject<{
723
722
  backgroundBox?: boolean | undefined;
724
723
  textShadow?: boolean | undefined;
725
724
  } | undefined;
725
+ comments?: {
726
+ enabled: boolean;
727
+ } | undefined;
726
728
  byline?: string | undefined;
727
729
  alternativeTitles?: {
728
730
  promotionalTitle: string;
@@ -870,19 +872,9 @@ export declare const liveBlogPackageSchema: import("zod").ZodObject<{
870
872
  predicate: string;
871
873
  type?: string | undefined;
872
874
  }[];
873
- webUrl: string;
874
- standout: {
875
- editorsChoice: boolean;
876
- exclusive: boolean;
877
- scoop: boolean;
878
- };
879
875
  publishedDate: string;
880
876
  firstPublishedDate: string;
881
- accessLevel: "premium" | "subscribed" | "registered" | "free";
882
877
  canBeSyndicated: "unknown" | "yes" | "no" | "verify" | "withContributorPayment";
883
- comments: {
884
- enabled: boolean;
885
- };
886
878
  summary: {
887
879
  bodyXML: string;
888
880
  };
@@ -890,6 +882,14 @@ export declare const liveBlogPackageSchema: import("zod").ZodObject<{
890
882
  id: string;
891
883
  apiUrl: string;
892
884
  }[];
885
+ webUrl?: string | undefined;
886
+ canonicalWebUrl?: string | undefined;
887
+ standout?: {
888
+ editorsChoice: boolean;
889
+ exclusive: boolean;
890
+ scoop: boolean;
891
+ } | undefined;
892
+ accessLevel?: "premium" | "subscribed" | "registered" | "free" | undefined;
893
893
  topper?: {
894
894
  backgroundColour: string;
895
895
  layout: string;
@@ -898,6 +898,9 @@ export declare const liveBlogPackageSchema: import("zod").ZodObject<{
898
898
  backgroundBox?: boolean | undefined;
899
899
  textShadow?: boolean | undefined;
900
900
  } | undefined;
901
+ comments?: {
902
+ enabled: boolean;
903
+ } | undefined;
901
904
  byline?: string | undefined;
902
905
  alternativeTitles?: {
903
906
  promotionalTitle: string;
@@ -14,6 +14,7 @@ const liveBlogPackageMetadataSchema = base_schema_1.baseMetadataSchema.pick({
14
14
  id: true,
15
15
  annotations: true,
16
16
  webUrl: true,
17
+ canonicalWebUrl: true,
17
18
  type: true,
18
19
  types: true,
19
20
  standout: true,
@@ -1 +1 @@
1
- {"version":3,"file":"live-blog-package.js","sourceRoot":"","sources":["../../../../src/model/schemas/capi/live-blog-package.ts"],"names":[],"mappings":";;;AAAA,+CAIsB;AAEtB,MAAM,4BAA4B,GAAG,+BAAiB,CAAC,IAAI,CAAC;IAC1D,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;CACf,CAAC,CAAA;AAEF,MAAM,6BAA6B,GAAG,gCAAkB,CAAC,IAAI,CAAC;IAC5D,EAAE,EAAE,IAAI;IACR,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,IAAI;IACnB,kBAAkB,EAAE,IAAI;IACxB,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;CACf,CAAC,CAAA;AAEF,MAAM,0BAA0B,GAAG,6BAAe,CAAC,IAAI,CAAC;IACtD,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;CACb,CAAC,CAAA;AAEW,QAAA,qBAAqB,GAAG,4BAA4B;KAC9D,KAAK,CAAC,6BAA6B,CAAC;KACpC,KAAK,CAAC,0BAA0B,CAAC,CAAA"}
1
+ {"version":3,"file":"live-blog-package.js","sourceRoot":"","sources":["../../../../src/model/schemas/capi/live-blog-package.ts"],"names":[],"mappings":";;;AAAA,+CAIsB;AAEtB,MAAM,4BAA4B,GAAG,+BAAiB,CAAC,IAAI,CAAC;IAC1D,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;CACf,CAAC,CAAA;AAEF,MAAM,6BAA6B,GAAG,gCAAkB,CAAC,IAAI,CAAC;IAC5D,EAAE,EAAE,IAAI;IACR,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,IAAI;IACZ,eAAe,EAAE,IAAI;IACrB,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,IAAI;IACnB,kBAAkB,EAAE,IAAI;IACxB,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;CACf,CAAC,CAAA;AAEF,MAAM,0BAA0B,GAAG,6BAAe,CAAC,IAAI,CAAC;IACtD,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;CACb,CAAC,CAAA;AAEW,QAAA,qBAAqB,GAAG,4BAA4B;KAC9D,KAAK,CAAC,6BAA6B,CAAC;KACpC,KAAK,CAAC,0BAA0B,CAAC,CAAA"}
@@ -29,8 +29,9 @@ export declare const placeholderSchema: import("zod").ZodObject<{
29
29
  predicate: string;
30
30
  type?: string | undefined;
31
31
  }>, "many">;
32
- webUrl: import("zod").ZodString;
33
- standout: import("zod").ZodObject<{
32
+ webUrl: import("zod").ZodOptional<import("zod").ZodString>;
33
+ canonicalWebUrl: import("zod").ZodOptional<import("zod").ZodString>;
34
+ standout: import("zod").ZodOptional<import("zod").ZodObject<{
34
35
  editorsChoice: import("zod").ZodBoolean;
35
36
  exclusive: import("zod").ZodBoolean;
36
37
  scoop: import("zod").ZodBoolean;
@@ -42,10 +43,10 @@ export declare const placeholderSchema: import("zod").ZodObject<{
42
43
  editorsChoice: boolean;
43
44
  exclusive: boolean;
44
45
  scoop: boolean;
45
- }>;
46
+ }>>;
46
47
  publishedDate: import("zod").ZodString;
47
48
  firstPublishedDate: import("zod").ZodString;
48
- accessLevel: import("zod").ZodUnion<[import("zod").ZodLiteral<"premium">, import("zod").ZodLiteral<"subscribed">, import("zod").ZodLiteral<"registered">, import("zod").ZodLiteral<"free">]>;
49
+ accessLevel: import("zod").ZodOptional<import("zod").ZodUnion<[import("zod").ZodLiteral<"premium">, import("zod").ZodLiteral<"subscribed">, import("zod").ZodLiteral<"registered">, import("zod").ZodLiteral<"free">]>>;
49
50
  canBeSyndicated: import("zod").ZodUnion<[import("zod").ZodLiteral<"yes">, import("zod").ZodLiteral<"no">, import("zod").ZodLiteral<"verify">, import("zod").ZodLiteral<"withContributorPayment">, import("zod").ZodLiteral<"unknown">]>;
50
51
  topper: import("zod").ZodOptional<import("zod").ZodObject<{
51
52
  headline: import("zod").ZodOptional<import("zod").ZodString>;
@@ -69,13 +70,13 @@ export declare const placeholderSchema: import("zod").ZodObject<{
69
70
  backgroundBox?: boolean | undefined;
70
71
  textShadow?: boolean | undefined;
71
72
  }>>;
72
- comments: import("zod").ZodObject<{
73
+ comments: import("zod").ZodOptional<import("zod").ZodObject<{
73
74
  enabled: import("zod").ZodBoolean;
74
75
  }, "strip", import("zod").ZodTypeAny, {
75
76
  enabled: boolean;
76
77
  }, {
77
78
  enabled: boolean;
78
- }>;
79
+ }>>;
79
80
  containedIn: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
80
81
  apiUrl: import("zod").ZodString;
81
82
  id: import("zod").ZodString;
@@ -697,21 +698,19 @@ export declare const placeholderSchema: import("zod").ZodObject<{
697
698
  predicate: string;
698
699
  type?: string | undefined;
699
700
  }[];
700
- webUrl: string;
701
- standout: {
702
- editorsChoice: boolean;
703
- exclusive: boolean;
704
- scoop: boolean;
705
- };
706
701
  publishedDate: string;
707
702
  firstPublishedDate: string;
708
- accessLevel: "premium" | "subscribed" | "registered" | "free";
709
703
  canBeSyndicated: "unknown" | "yes" | "no" | "verify" | "withContributorPayment";
710
- comments: {
711
- enabled: boolean;
712
- };
713
704
  bodyXML: string;
714
705
  standfirst?: string | undefined;
706
+ webUrl?: string | undefined;
707
+ canonicalWebUrl?: string | undefined;
708
+ standout?: {
709
+ editorsChoice: boolean;
710
+ exclusive: boolean;
711
+ scoop: boolean;
712
+ } | undefined;
713
+ accessLevel?: "premium" | "subscribed" | "registered" | "free" | undefined;
715
714
  topper?: {
716
715
  backgroundColour: string;
717
716
  layout: string;
@@ -720,6 +719,9 @@ export declare const placeholderSchema: import("zod").ZodObject<{
720
719
  backgroundBox?: boolean | undefined;
721
720
  textShadow?: boolean | undefined;
722
721
  } | undefined;
722
+ comments?: {
723
+ enabled: boolean;
724
+ } | undefined;
723
725
  containedIn?: {
724
726
  id: string;
725
727
  apiUrl: string;
@@ -874,21 +876,19 @@ export declare const placeholderSchema: import("zod").ZodObject<{
874
876
  predicate: string;
875
877
  type?: string | undefined;
876
878
  }[];
877
- webUrl: string;
878
- standout: {
879
- editorsChoice: boolean;
880
- exclusive: boolean;
881
- scoop: boolean;
882
- };
883
879
  publishedDate: string;
884
880
  firstPublishedDate: string;
885
- accessLevel: "premium" | "subscribed" | "registered" | "free";
886
881
  canBeSyndicated: "unknown" | "yes" | "no" | "verify" | "withContributorPayment";
887
- comments: {
888
- enabled: boolean;
889
- };
890
882
  bodyXML: string;
891
883
  standfirst?: string | undefined;
884
+ webUrl?: string | undefined;
885
+ canonicalWebUrl?: string | undefined;
886
+ standout?: {
887
+ editorsChoice: boolean;
888
+ exclusive: boolean;
889
+ scoop: boolean;
890
+ } | undefined;
891
+ accessLevel?: "premium" | "subscribed" | "registered" | "free" | undefined;
892
892
  topper?: {
893
893
  backgroundColour: string;
894
894
  layout: string;
@@ -897,6 +897,9 @@ export declare const placeholderSchema: import("zod").ZodObject<{
897
897
  backgroundBox?: boolean | undefined;
898
898
  textShadow?: boolean | undefined;
899
899
  } | undefined;
900
+ comments?: {
901
+ enabled: boolean;
902
+ } | undefined;
900
903
  containedIn?: {
901
904
  id: string;
902
905
  apiUrl: string;
@@ -14,6 +14,7 @@ const placeholderMetadataSchema = base_schema_1.baseMetadataSchema.pick({
14
14
  id: true,
15
15
  annotations: true,
16
16
  webUrl: true,
17
+ canonicalWebUrl: true,
17
18
  type: true,
18
19
  types: true,
19
20
  standout: true,
@@ -1 +1 @@
1
- {"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../../../src/model/schemas/capi/placeholder.ts"],"names":[],"mappings":";;;AAAA,+CAIsB;AAEtB,MAAM,wBAAwB,GAAG,+BAAiB,CAAC,IAAI,CAAC;IACtD,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,iBAAiB,EAAE,IAAI;IACvB,sBAAsB,EAAE,IAAI;CAC7B,CAAC,CAAA;AAEF,MAAM,yBAAyB,GAAG,gCAAkB,CAAC,IAAI,CAAC;IACxD,EAAE,EAAE,IAAI;IACR,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,IAAI;IACnB,kBAAkB,EAAE,IAAI;IACxB,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;CAClB,CAAC,CAAA;AAEF,MAAM,sBAAsB,GAAG,6BAAe,CAAC,IAAI,CAAC;IAClD,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;CACb,CAAC,CAAA;AAEW,QAAA,iBAAiB,GAAG,wBAAwB;KACtD,KAAK,CAAC,yBAAyB,CAAC;KAChC,KAAK,CAAC,sBAAsB,CAAC,CAAA"}
1
+ {"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../../../src/model/schemas/capi/placeholder.ts"],"names":[],"mappings":";;;AAAA,+CAIsB;AAEtB,MAAM,wBAAwB,GAAG,+BAAiB,CAAC,IAAI,CAAC;IACtD,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,iBAAiB,EAAE,IAAI;IACvB,sBAAsB,EAAE,IAAI;CAC7B,CAAC,CAAA;AAEF,MAAM,yBAAyB,GAAG,gCAAkB,CAAC,IAAI,CAAC;IACxD,EAAE,EAAE,IAAI;IACR,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,IAAI;IACZ,eAAe,EAAE,IAAI;IACrB,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,IAAI;IACnB,kBAAkB,EAAE,IAAI;IACxB,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;CAClB,CAAC,CAAA;AAEF,MAAM,sBAAsB,GAAG,6BAAe,CAAC,IAAI,CAAC;IAClD,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;CACb,CAAC,CAAA;AAEW,QAAA,iBAAiB,GAAG,wBAAwB;KACtD,KAAK,CAAC,yBAAyB,CAAC;KAChC,KAAK,CAAC,sBAAsB,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@financial-times/cp-content-pipeline-schema",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -203,7 +203,11 @@ export class CapiResponse {
203
203
  return this.capiData.types
204
204
  }
205
205
  async url(vanity?: boolean | null) {
206
- const url = this.capiData.webUrl
206
+ const url =
207
+ this.capiData.webUrl ??
208
+ this.capiData.canonicalWebUrl ??
209
+ `https://www.ft.com/content/${this.id()}`
210
+
207
211
  if (vanity) {
208
212
  try {
209
213
  const vanityUrl = await this.context.dataSources.vanityUrls.get(url)
@@ -231,7 +235,7 @@ export class CapiResponse {
231
235
  return null
232
236
  }
233
237
  accessLevel(): LiteralUnionScalarValues<typeof AccessLevel> {
234
- return this.capiData.accessLevel
238
+ return this.capiData.accessLevel ?? 'subscribed'
235
239
  }
236
240
  canBeSyndicated(): LiteralUnionScalarValues<typeof CanBeSyndicated> {
237
241
  return this.capiData.canBeSyndicated
@@ -551,8 +555,9 @@ export class CapiResponse {
551
555
 
552
556
  commentsEnabled(): boolean {
553
557
  if ('comments' in this.capiData) {
554
- return this.capiData.comments.enabled
558
+ return this.capiData.comments?.enabled ?? false
555
559
  }
560
+
556
561
  return false
557
562
  }
558
563
 
@@ -17,6 +17,7 @@ const articleMetadataSchema = baseMetadataSchema.pick({
17
17
  id: true,
18
18
  annotations: true,
19
19
  webUrl: true,
20
+ canonicalWebUrl: true,
20
21
  type: true,
21
22
  types: true,
22
23
  standout: true,
@@ -14,6 +14,7 @@ const audioMetadataSchema = baseMetadataSchema.pick({
14
14
  id: true,
15
15
  annotations: true,
16
16
  webUrl: true,
17
+ canonicalWebUrl: true,
17
18
  types: true,
18
19
  publishedDate: true,
19
20
  firstPublishedDate: true,
@@ -120,23 +120,28 @@ export const CapiPerson = z.object({
120
120
  export const baseMetadataSchema = z.object({
121
121
  id: z.string(),
122
122
  annotations: Annotation.array(),
123
- webUrl: z.string(),
123
+ webUrl: z.string().optional(),
124
+ canonicalWebUrl: z.string().optional(),
124
125
  type: z.string(),
125
126
  types: z.string().array(),
126
- standout: z.object({
127
- editorsChoice: z.boolean(),
128
- exclusive: z.boolean(),
129
- scoop: z.boolean(),
130
- }),
127
+ standout: z
128
+ .object({
129
+ editorsChoice: z.boolean(),
130
+ exclusive: z.boolean(),
131
+ scoop: z.boolean(),
132
+ })
133
+ .optional(),
131
134
  publishedDate: z.string(),
132
135
  firstPublishedDate: z.string(),
133
136
  realtime: z.boolean(),
134
- accessLevel: z.union([
135
- z.literal('premium'),
136
- z.literal('subscribed'),
137
- z.literal('registered'),
138
- z.literal('free'),
139
- ]),
137
+ accessLevel: z
138
+ .union([
139
+ z.literal('premium'),
140
+ z.literal('subscribed'),
141
+ z.literal('registered'),
142
+ z.literal('free'),
143
+ ])
144
+ .optional(),
140
145
  canBeSyndicated: z.union([
141
146
  z.literal('yes'),
142
147
  z.literal('no'),
@@ -145,9 +150,11 @@ export const baseMetadataSchema = z.object({
145
150
  z.literal('unknown'),
146
151
  ]),
147
152
  topper: Topper.optional(),
148
- comments: z.object({
149
- enabled: z.boolean(),
150
- }),
153
+ comments: z
154
+ .object({
155
+ enabled: z.boolean(),
156
+ })
157
+ .optional(),
151
158
  containedIn: z
152
159
  .object({ apiUrl: z.string(), id: z.string() })
153
160
  .array()
@@ -26,6 +26,7 @@ const contentPackageMetadataSchema = baseMetadataSchema.pick({
26
26
  id: true,
27
27
  annotations: true,
28
28
  webUrl: true,
29
+ canonicalWebUrl: true,
29
30
  type: true,
30
31
  types: true,
31
32
  standout: true,
@@ -17,6 +17,7 @@ const liveBlogPackageMetadataSchema = baseMetadataSchema.pick({
17
17
  id: true,
18
18
  annotations: true,
19
19
  webUrl: true,
20
+ canonicalWebUrl: true,
20
21
  type: true,
21
22
  types: true,
22
23
  standout: true,
@@ -17,6 +17,7 @@ const placeholderMetadataSchema = baseMetadataSchema.pick({
17
17
  id: true,
18
18
  annotations: true,
19
19
  webUrl: true,
20
+ canonicalWebUrl: true,
20
21
  type: true,
21
22
  types: true,
22
23
  standout: true,