@financial-times/content-curation-client 2.4.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.
@@ -1771,6 +1771,7 @@ declare const HomepageStructureInputSchema: z.ZodObject<{
1771
1771
  properties: z.ZodObject<{
1772
1772
  title: z.ZodString;
1773
1773
  pageId: z.ZodString;
1774
+ publicationId: z.ZodString;
1774
1775
  conceptId: z.ZodOptional<z.ZodString>;
1775
1776
  metaDescription: z.ZodOptional<z.ZodString>;
1776
1777
  pageTheme: z.ZodOptional<z.ZodString>;
@@ -1781,6 +1782,7 @@ declare const HomepageStructureInputSchema: z.ZodObject<{
1781
1782
  }, "strip", z.ZodTypeAny, {
1782
1783
  title: string;
1783
1784
  pageId: string;
1785
+ publicationId: string;
1784
1786
  homepageListId: string;
1785
1787
  conceptId?: string | undefined;
1786
1788
  metaDescription?: string | undefined;
@@ -1790,6 +1792,7 @@ declare const HomepageStructureInputSchema: z.ZodObject<{
1790
1792
  }, {
1791
1793
  title: string;
1792
1794
  pageId: string;
1795
+ publicationId: string;
1793
1796
  homepageListId: string;
1794
1797
  conceptId?: string | undefined;
1795
1798
  metaDescription?: string | undefined;
@@ -1801,6 +1804,7 @@ declare const HomepageStructureInputSchema: z.ZodObject<{
1801
1804
  properties: {
1802
1805
  title: string;
1803
1806
  pageId: string;
1807
+ publicationId: string;
1804
1808
  homepageListId: string;
1805
1809
  conceptId?: string | undefined;
1806
1810
  metaDescription?: string | undefined;
@@ -1937,6 +1941,7 @@ declare const HomepageStructureInputSchema: z.ZodObject<{
1937
1941
  properties: {
1938
1942
  title: string;
1939
1943
  pageId: string;
1944
+ publicationId: string;
1940
1945
  homepageListId: string;
1941
1946
  conceptId?: string | undefined;
1942
1947
  metaDescription?: string | undefined;
@@ -2941,6 +2946,7 @@ declare const HomepageStructureOutputSchema: z.ZodObject<{
2941
2946
  properties: z.ZodObject<{
2942
2947
  title: z.ZodString;
2943
2948
  pageId: z.ZodString;
2949
+ publicationId: z.ZodString;
2944
2950
  conceptId: z.ZodOptional<z.ZodString>;
2945
2951
  metaDescription: z.ZodOptional<z.ZodString>;
2946
2952
  pageTheme: z.ZodOptional<z.ZodString>;
@@ -2951,6 +2957,7 @@ declare const HomepageStructureOutputSchema: z.ZodObject<{
2951
2957
  }, "strip", z.ZodTypeAny, {
2952
2958
  title: string;
2953
2959
  pageId: string;
2960
+ publicationId: string;
2954
2961
  homepageListId: string;
2955
2962
  conceptId?: string | undefined;
2956
2963
  metaDescription?: string | undefined;
@@ -2960,6 +2967,7 @@ declare const HomepageStructureOutputSchema: z.ZodObject<{
2960
2967
  }, {
2961
2968
  title: string;
2962
2969
  pageId: string;
2970
+ publicationId: string;
2963
2971
  homepageListId: string;
2964
2972
  conceptId?: string | undefined;
2965
2973
  metaDescription?: string | undefined;
@@ -2972,6 +2980,7 @@ declare const HomepageStructureOutputSchema: z.ZodObject<{
2972
2980
  properties: {
2973
2981
  title: string;
2974
2982
  pageId: string;
2983
+ publicationId: string;
2975
2984
  homepageListId: string;
2976
2985
  conceptId?: string | undefined;
2977
2986
  metaDescription?: string | undefined;
@@ -3110,6 +3119,7 @@ declare const HomepageStructureOutputSchema: z.ZodObject<{
3110
3119
  properties: {
3111
3120
  title: string;
3112
3121
  pageId: string;
3122
+ publicationId: string;
3113
3123
  homepageListId: string;
3114
3124
  conceptId?: string | undefined;
3115
3125
  metaDescription?: string | undefined;
@@ -3470,6 +3480,7 @@ export { LegacyPageStructureOutput as LegacyPageStructureOutput_alias_1 }
3470
3480
 
3471
3481
  declare const LegacyPageStructureOutputSchema: z.ZodObject<{
3472
3482
  uuid: z.ZodString;
3483
+ title: z.ZodString;
3473
3484
  conceptId: z.ZodOptional<z.ZodString>;
3474
3485
  themeName: z.ZodOptional<z.ZodString>;
3475
3486
  metaDescription: z.ZodOptional<z.ZodString>;
@@ -3678,6 +3689,7 @@ declare const LegacyPageStructureOutputSchema: z.ZodObject<{
3678
3689
  children: [];
3679
3690
  }>]>, "many">;
3680
3691
  }, "strip", z.ZodTypeAny, {
3692
+ title: string;
3681
3693
  uuid: string;
3682
3694
  blocks: ({
3683
3695
  type: "topper-basic";
@@ -3727,6 +3739,7 @@ declare const LegacyPageStructureOutputSchema: z.ZodObject<{
3727
3739
  metaDescription?: string | undefined;
3728
3740
  themeName?: string | undefined;
3729
3741
  }, {
3742
+ title: string;
3730
3743
  uuid: string;
3731
3744
  blocks: ({
3732
3745
  type: "topper-basic";
@@ -3804,6 +3817,7 @@ declare const PageStructureInputSchema: z.ZodObject<{
3804
3817
  properties: z.ZodObject<{
3805
3818
  title: z.ZodString;
3806
3819
  pageId: z.ZodString;
3820
+ publicationId: z.ZodString;
3807
3821
  conceptId: z.ZodOptional<z.ZodString>;
3808
3822
  metaDescription: z.ZodOptional<z.ZodString>;
3809
3823
  pageTheme: z.ZodOptional<z.ZodString>;
@@ -3812,6 +3826,7 @@ declare const PageStructureInputSchema: z.ZodObject<{
3812
3826
  }, "strip", z.ZodTypeAny, {
3813
3827
  title: string;
3814
3828
  pageId: string;
3829
+ publicationId: string;
3815
3830
  conceptId?: string | undefined;
3816
3831
  metaDescription?: string | undefined;
3817
3832
  pageTheme?: string | undefined;
@@ -3820,6 +3835,7 @@ declare const PageStructureInputSchema: z.ZodObject<{
3820
3835
  }, {
3821
3836
  title: string;
3822
3837
  pageId: string;
3838
+ publicationId: string;
3823
3839
  conceptId?: string | undefined;
3824
3840
  metaDescription?: string | undefined;
3825
3841
  pageTheme?: string | undefined;
@@ -4686,6 +4702,7 @@ declare const PageStructureInputSchema: z.ZodObject<{
4686
4702
  properties: {
4687
4703
  title: string;
4688
4704
  pageId: string;
4705
+ publicationId: string;
4689
4706
  conceptId?: string | undefined;
4690
4707
  metaDescription?: string | undefined;
4691
4708
  pageTheme?: string | undefined;
@@ -4821,6 +4838,7 @@ declare const PageStructureInputSchema: z.ZodObject<{
4821
4838
  properties: {
4822
4839
  title: string;
4823
4840
  pageId: string;
4841
+ publicationId: string;
4824
4842
  conceptId?: string | undefined;
4825
4843
  metaDescription?: string | undefined;
4826
4844
  pageTheme?: string | undefined;
@@ -4970,6 +4988,7 @@ declare const PageStructureOutputSchema: z.ZodObject<{
4970
4988
  properties: z.ZodObject<{
4971
4989
  title: z.ZodString;
4972
4990
  pageId: z.ZodString;
4991
+ publicationId: z.ZodString;
4973
4992
  conceptId: z.ZodOptional<z.ZodString>;
4974
4993
  metaDescription: z.ZodOptional<z.ZodString>;
4975
4994
  pageTheme: z.ZodOptional<z.ZodString>;
@@ -4978,6 +4997,7 @@ declare const PageStructureOutputSchema: z.ZodObject<{
4978
4997
  }, "strip", z.ZodTypeAny, {
4979
4998
  title: string;
4980
4999
  pageId: string;
5000
+ publicationId: string;
4981
5001
  conceptId?: string | undefined;
4982
5002
  metaDescription?: string | undefined;
4983
5003
  pageTheme?: string | undefined;
@@ -4986,6 +5006,7 @@ declare const PageStructureOutputSchema: z.ZodObject<{
4986
5006
  }, {
4987
5007
  title: string;
4988
5008
  pageId: string;
5009
+ publicationId: string;
4989
5010
  conceptId?: string | undefined;
4990
5011
  metaDescription?: string | undefined;
4991
5012
  pageTheme?: string | undefined;
@@ -5853,6 +5874,7 @@ declare const PageStructureOutputSchema: z.ZodObject<{
5853
5874
  properties: {
5854
5875
  title: string;
5855
5876
  pageId: string;
5877
+ publicationId: string;
5856
5878
  conceptId?: string | undefined;
5857
5879
  metaDescription?: string | undefined;
5858
5880
  pageTheme?: string | undefined;
@@ -5990,6 +6012,7 @@ declare const PageStructureOutputSchema: z.ZodObject<{
5990
6012
  properties: {
5991
6013
  title: string;
5992
6014
  pageId: string;
6015
+ publicationId: string;
5993
6016
  conceptId?: string | undefined;
5994
6017
  metaDescription?: string | undefined;
5995
6018
  pageTheme?: string | undefined;
@@ -1771,6 +1771,7 @@ declare const HomepageStructureInputSchema: z.ZodObject<{
1771
1771
  properties: z.ZodObject<{
1772
1772
  title: z.ZodString;
1773
1773
  pageId: z.ZodString;
1774
+ publicationId: z.ZodString;
1774
1775
  conceptId: z.ZodOptional<z.ZodString>;
1775
1776
  metaDescription: z.ZodOptional<z.ZodString>;
1776
1777
  pageTheme: z.ZodOptional<z.ZodString>;
@@ -1781,6 +1782,7 @@ declare const HomepageStructureInputSchema: z.ZodObject<{
1781
1782
  }, "strip", z.ZodTypeAny, {
1782
1783
  title: string;
1783
1784
  pageId: string;
1785
+ publicationId: string;
1784
1786
  homepageListId: string;
1785
1787
  conceptId?: string | undefined;
1786
1788
  metaDescription?: string | undefined;
@@ -1790,6 +1792,7 @@ declare const HomepageStructureInputSchema: z.ZodObject<{
1790
1792
  }, {
1791
1793
  title: string;
1792
1794
  pageId: string;
1795
+ publicationId: string;
1793
1796
  homepageListId: string;
1794
1797
  conceptId?: string | undefined;
1795
1798
  metaDescription?: string | undefined;
@@ -1801,6 +1804,7 @@ declare const HomepageStructureInputSchema: z.ZodObject<{
1801
1804
  properties: {
1802
1805
  title: string;
1803
1806
  pageId: string;
1807
+ publicationId: string;
1804
1808
  homepageListId: string;
1805
1809
  conceptId?: string | undefined;
1806
1810
  metaDescription?: string | undefined;
@@ -1937,6 +1941,7 @@ declare const HomepageStructureInputSchema: z.ZodObject<{
1937
1941
  properties: {
1938
1942
  title: string;
1939
1943
  pageId: string;
1944
+ publicationId: string;
1940
1945
  homepageListId: string;
1941
1946
  conceptId?: string | undefined;
1942
1947
  metaDescription?: string | undefined;
@@ -2941,6 +2946,7 @@ declare const HomepageStructureOutputSchema: z.ZodObject<{
2941
2946
  properties: z.ZodObject<{
2942
2947
  title: z.ZodString;
2943
2948
  pageId: z.ZodString;
2949
+ publicationId: z.ZodString;
2944
2950
  conceptId: z.ZodOptional<z.ZodString>;
2945
2951
  metaDescription: z.ZodOptional<z.ZodString>;
2946
2952
  pageTheme: z.ZodOptional<z.ZodString>;
@@ -2951,6 +2957,7 @@ declare const HomepageStructureOutputSchema: z.ZodObject<{
2951
2957
  }, "strip", z.ZodTypeAny, {
2952
2958
  title: string;
2953
2959
  pageId: string;
2960
+ publicationId: string;
2954
2961
  homepageListId: string;
2955
2962
  conceptId?: string | undefined;
2956
2963
  metaDescription?: string | undefined;
@@ -2960,6 +2967,7 @@ declare const HomepageStructureOutputSchema: z.ZodObject<{
2960
2967
  }, {
2961
2968
  title: string;
2962
2969
  pageId: string;
2970
+ publicationId: string;
2963
2971
  homepageListId: string;
2964
2972
  conceptId?: string | undefined;
2965
2973
  metaDescription?: string | undefined;
@@ -2972,6 +2980,7 @@ declare const HomepageStructureOutputSchema: z.ZodObject<{
2972
2980
  properties: {
2973
2981
  title: string;
2974
2982
  pageId: string;
2983
+ publicationId: string;
2975
2984
  homepageListId: string;
2976
2985
  conceptId?: string | undefined;
2977
2986
  metaDescription?: string | undefined;
@@ -3110,6 +3119,7 @@ declare const HomepageStructureOutputSchema: z.ZodObject<{
3110
3119
  properties: {
3111
3120
  title: string;
3112
3121
  pageId: string;
3122
+ publicationId: string;
3113
3123
  homepageListId: string;
3114
3124
  conceptId?: string | undefined;
3115
3125
  metaDescription?: string | undefined;
@@ -3470,6 +3480,7 @@ export { LegacyPageStructureOutput as LegacyPageStructureOutput_alias_1 }
3470
3480
 
3471
3481
  declare const LegacyPageStructureOutputSchema: z.ZodObject<{
3472
3482
  uuid: z.ZodString;
3483
+ title: z.ZodString;
3473
3484
  conceptId: z.ZodOptional<z.ZodString>;
3474
3485
  themeName: z.ZodOptional<z.ZodString>;
3475
3486
  metaDescription: z.ZodOptional<z.ZodString>;
@@ -3678,6 +3689,7 @@ declare const LegacyPageStructureOutputSchema: z.ZodObject<{
3678
3689
  children: [];
3679
3690
  }>]>, "many">;
3680
3691
  }, "strip", z.ZodTypeAny, {
3692
+ title: string;
3681
3693
  uuid: string;
3682
3694
  blocks: ({
3683
3695
  type: "topper-basic";
@@ -3727,6 +3739,7 @@ declare const LegacyPageStructureOutputSchema: z.ZodObject<{
3727
3739
  metaDescription?: string | undefined;
3728
3740
  themeName?: string | undefined;
3729
3741
  }, {
3742
+ title: string;
3730
3743
  uuid: string;
3731
3744
  blocks: ({
3732
3745
  type: "topper-basic";
@@ -3804,6 +3817,7 @@ declare const PageStructureInputSchema: z.ZodObject<{
3804
3817
  properties: z.ZodObject<{
3805
3818
  title: z.ZodString;
3806
3819
  pageId: z.ZodString;
3820
+ publicationId: z.ZodString;
3807
3821
  conceptId: z.ZodOptional<z.ZodString>;
3808
3822
  metaDescription: z.ZodOptional<z.ZodString>;
3809
3823
  pageTheme: z.ZodOptional<z.ZodString>;
@@ -3812,6 +3826,7 @@ declare const PageStructureInputSchema: z.ZodObject<{
3812
3826
  }, "strip", z.ZodTypeAny, {
3813
3827
  title: string;
3814
3828
  pageId: string;
3829
+ publicationId: string;
3815
3830
  conceptId?: string | undefined;
3816
3831
  metaDescription?: string | undefined;
3817
3832
  pageTheme?: string | undefined;
@@ -3820,6 +3835,7 @@ declare const PageStructureInputSchema: z.ZodObject<{
3820
3835
  }, {
3821
3836
  title: string;
3822
3837
  pageId: string;
3838
+ publicationId: string;
3823
3839
  conceptId?: string | undefined;
3824
3840
  metaDescription?: string | undefined;
3825
3841
  pageTheme?: string | undefined;
@@ -4686,6 +4702,7 @@ declare const PageStructureInputSchema: z.ZodObject<{
4686
4702
  properties: {
4687
4703
  title: string;
4688
4704
  pageId: string;
4705
+ publicationId: string;
4689
4706
  conceptId?: string | undefined;
4690
4707
  metaDescription?: string | undefined;
4691
4708
  pageTheme?: string | undefined;
@@ -4821,6 +4838,7 @@ declare const PageStructureInputSchema: z.ZodObject<{
4821
4838
  properties: {
4822
4839
  title: string;
4823
4840
  pageId: string;
4841
+ publicationId: string;
4824
4842
  conceptId?: string | undefined;
4825
4843
  metaDescription?: string | undefined;
4826
4844
  pageTheme?: string | undefined;
@@ -4970,6 +4988,7 @@ declare const PageStructureOutputSchema: z.ZodObject<{
4970
4988
  properties: z.ZodObject<{
4971
4989
  title: z.ZodString;
4972
4990
  pageId: z.ZodString;
4991
+ publicationId: z.ZodString;
4973
4992
  conceptId: z.ZodOptional<z.ZodString>;
4974
4993
  metaDescription: z.ZodOptional<z.ZodString>;
4975
4994
  pageTheme: z.ZodOptional<z.ZodString>;
@@ -4978,6 +4997,7 @@ declare const PageStructureOutputSchema: z.ZodObject<{
4978
4997
  }, "strip", z.ZodTypeAny, {
4979
4998
  title: string;
4980
4999
  pageId: string;
5000
+ publicationId: string;
4981
5001
  conceptId?: string | undefined;
4982
5002
  metaDescription?: string | undefined;
4983
5003
  pageTheme?: string | undefined;
@@ -4986,6 +5006,7 @@ declare const PageStructureOutputSchema: z.ZodObject<{
4986
5006
  }, {
4987
5007
  title: string;
4988
5008
  pageId: string;
5009
+ publicationId: string;
4989
5010
  conceptId?: string | undefined;
4990
5011
  metaDescription?: string | undefined;
4991
5012
  pageTheme?: string | undefined;
@@ -5853,6 +5874,7 @@ declare const PageStructureOutputSchema: z.ZodObject<{
5853
5874
  properties: {
5854
5875
  title: string;
5855
5876
  pageId: string;
5877
+ publicationId: string;
5856
5878
  conceptId?: string | undefined;
5857
5879
  metaDescription?: string | undefined;
5858
5880
  pageTheme?: string | undefined;
@@ -5990,6 +6012,7 @@ declare const PageStructureOutputSchema: z.ZodObject<{
5990
6012
  properties: {
5991
6013
  title: string;
5992
6014
  pageId: string;
6015
+ publicationId: string;
5993
6016
  conceptId?: string | undefined;
5994
6017
  metaDescription?: string | undefined;
5995
6018
  pageTheme?: string | undefined;
package/dist/index.cjs CHANGED
@@ -256,6 +256,7 @@ var SliceApiOutputSchema = _zod.z.discriminatedUnion("type", [
256
256
  var BasePagePropertiesSchema = _zod.z.object({
257
257
  title: _zod.z.string(),
258
258
  pageId: _zod.z.string().uuid(),
259
+ publicationId: _zod.z.string(),
259
260
  conceptId: _zod.z.string().optional(),
260
261
  metaDescription: _zod.z.string().optional(),
261
262
  pageTheme: _zod.z.string().optional(),
@@ -372,6 +373,7 @@ var LegacyBlockSchema = _zod.z.discriminatedUnion("type", [
372
373
  ]);
373
374
  var LegacyPageStructureOutputSchema = _zod.z.object({
374
375
  uuid: _zod.z.string().uuid(),
376
+ title: _zod.z.string(),
375
377
  conceptId: _zod.z.string().uuid().optional(),
376
378
  themeName: _zod.z.string().optional(),
377
379
  metaDescription: _zod.z.string().optional(),
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/circleci/repo/packages/content-curation-client/dist/index.cjs","../src/schemas/response.ts","../src/base.ts","../src/schemas/ftpink/page/index.ts","../src/schemas/prosemirror.ts","../src/homepage.ts","../src/schemas/ftpink/legacyHubPage/index.ts","../src/page.ts","../src/client.ts"],"names":[],"mappings":"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","file":"/home/circleci/repo/packages/content-curation-client/dist/index.cjs","sourcesContent":[null,"import { z, type ZodTypeAny } from \"zod\";\n\n/**\n * Strongly‐typed enum for all possible API error codes.\n */\nexport const ApiErrorCode = z.enum([\n\t\"UNAUTHORIZED\",\n\t\"NOT_FOUND\",\n\t\"INTERNAL_SERVER_ERROR\",\n\t\"INVALID_INPUT_DATA\",\n]);\n\n/**\n * Fields shared by both success and error envelopes (but not the discriminant).\n */\nconst BaseEnvelopeFields = z.object({\n\tstatusCode: z.number(),\n\trequestId: z.string(),\n});\n\n/**\n * Specific details carried in an error payload.\n */\nexport const ApiErrorPayloadSchema = z\n\t.object({\n\t\tcode: ApiErrorCode,\n\t\tmessage: z.string(),\n\t\tdetails: z.string().optional(),\n\t\tpath: z.string().optional(),\n\t\ttimestamp: z.string().optional(),\n\t})\n\t.strict();\n\nexport type ApiErrorPayload = z.infer<typeof ApiErrorPayloadSchema>;\n\n/**\n * Full “envelope” when the API has failed.\n */\nexport const ApiErrorResponseSchema = BaseEnvelopeFields.extend({\n\tstatus: z.literal(\"error\"),\n\terror: ApiErrorPayloadSchema,\n}).strict();\n\nexport type ApiErrorResponse = z.infer<typeof ApiErrorResponseSchema>;\n\n/**\n * Schema for a successful API response, given some data schema T.\n */\nexport function ApiSuccessResponseSchema<T extends ZodTypeAny>(dataSchema: T) {\n\treturn BaseEnvelopeFields.extend({\n\t\tstatus: z.literal(\"success\"),\n\t\tdata: dataSchema,\n\t}).strict();\n}\n\n/**\n * Union of success or error envelopes, discriminated on `status`.\n */\nexport function ApiResponseSchema<T extends ZodTypeAny>(dataSchema: T) {\n\tconst successSchema = ApiSuccessResponseSchema(dataSchema);\n\tconst errorSchema = ApiErrorResponseSchema;\n\treturn z.discriminatedUnion(\"status\", [successSchema, errorSchema]);\n}\n","import type { z, ZodTypeAny } from \"zod\";\nimport type { ApiErrorPayloadSchema } from \"./schemas/response\";\nimport { ApiResponseSchema } from \"./schemas/response\";\n\n/**\n * API-level error thrown when { status: 'error' } is returned\n */\nexport class ApiClientError extends Error {\n\tpublic code: string;\n\tpublic details?: string;\n\tpublic path?: string;\n\tpublic timestamp?: string;\n\n\tconstructor(\n\t\tpublic payload: z.infer<typeof ApiErrorPayloadSchema>,\n\t\tpublic statusCode: number,\n\t\tpublic requestId?: string,\n\t) {\n\t\tsuper(payload.message);\n\t\tthis.name = \"ApiError\";\n\t\tthis.code = payload.code;\n\t\tthis.details = payload.details;\n\t\tthis.path = payload.path;\n\t\tthis.timestamp = payload.timestamp;\n\t}\n}\n\n/**\n * Configuration options for the API client\n */\nexport type ApiClientConfig =\n\t| {\n\t\t\t// Standard configuration.\n\t\t\t// Intended for external clients using an API key issued via API Gateway.\n\t\t\tbaseUrl: string;\n\t\t\tapiKey: string;\n\t\t\tapiToken?: never;\n\t\t\tfetch?: typeof fetch;\n\t }\n\t| {\n\t\t\t// Alternative configuration.\n\t\t\t// Reserved for client with access to a bearer token (e.g. The e2e tests).\n\t\t\tbaseUrl: string;\n\t\t\tapiKey?: never;\n\t\t\tapiToken: string;\n\t\t\tfetch?: typeof fetch;\n\t };\n\nexport class BaseApiClient {\n\tprotected config: ApiClientConfig;\n\n\tconstructor(config: ApiClientConfig) {\n\t\tthis.config = {\n\t\t\t...config,\n\t\t\tfetch: config.fetch || fetch,\n\t\t};\n\t\tthis.config.baseUrl = this.config.baseUrl.replace(/\\/+$/, \"\"); // strip trailing slashes\n\t}\n\n\t/**\n\t * Generic HTTP request to a JSON API\n\t */\n\tprotected async request<\n\t\tReqSchema extends ZodTypeAny | undefined,\n\t\tResponseDataSchema extends ZodTypeAny,\n\t>(\n\t\tmethod: \"GET\" | \"PUT\" | \"POST\" | \"DELETE\",\n\t\tpath: string,\n\t\topts: {\n\t\t\trequestSchema?: ReqSchema;\n\t\t\tbody?: ReqSchema extends ZodTypeAny ? z.infer<ReqSchema> : unknown;\n\t\t\tresponseDataSchema: ResponseDataSchema;\n\t\t},\n\t): Promise<z.infer<ResponseDataSchema>> {\n\t\t// Validate request body if provided\n\t\tlet bodyPayload = opts.body;\n\t\tif (opts.requestSchema && opts.body !== undefined) {\n\t\t\tbodyPayload = opts.requestSchema.parse(opts.body);\n\t\t}\n\n\t\t// Build URL + query string\n\t\tconst url = new URL(this.config.baseUrl + path);\n\n\t\t// Perform fetch\n\t\tconst response = await this.config.fetch!(url.toString(), {\n\t\t\tmethod,\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t...(this.config.apiKey\n\t\t\t\t\t? { \"x-api-key\": this.config.apiKey }\n\t\t\t\t\t: { Authorization: `Bearer ${this.config.apiToken}` }),\n\t\t\t},\n\t\t\tbody: bodyPayload ? JSON.stringify(bodyPayload) : undefined,\n\t\t});\n\n\t\tconst json = await response.json();\n\t\tconst parsedJson = ApiResponseSchema(opts.responseDataSchema).parse(json);\n\n\t\tif (\"error\" in parsedJson) {\n\t\t\tthrow new ApiClientError(parsedJson.error, parsedJson.statusCode, parsedJson.requestId);\n\t\t} else if (!(\"data\" in parsedJson)) {\n\t\t\tthrow new ApiClientError(\n\t\t\t\t{\n\t\t\t\t\tcode: \"INTERNAL_SERVER_ERROR\",\n\t\t\t\t\tmessage: \"Unexpected API response format\",\n\t\t\t\t\tdetails: 'Response did not contain expected \"data\" field',\n\t\t\t\t},\n\t\t\t\t500,\n\t\t\t\tparsedJson.requestId,\n\t\t\t);\n\t\t}\n\n\t\treturn parsedJson.data;\n\t}\n\n\t/**\n\t * GET convenience method inferring response type from schema\n\t */\n\tprotected get<ResponseDataSchema extends ZodTypeAny>(\n\t\tpath: string,\n\t\tresponseDataSchema: ResponseDataSchema,\n\t): Promise<z.infer<ResponseDataSchema>> {\n\t\treturn this.request(\"GET\", path, { responseDataSchema });\n\t}\n\n\t/**\n\t * PUT convenience method inferring both request and response types\n\t */\n\tprotected put<ReqSchema extends ZodTypeAny, ResponseDataSchema extends ZodTypeAny>(\n\t\tpath: string,\n\t\tbody: z.infer<ReqSchema>,\n\t\trequestSchema: ReqSchema,\n\t\tresponseDataSchema: ResponseDataSchema,\n\t): Promise<z.infer<ResponseDataSchema>> {\n\t\treturn this.request(\"PUT\", path, { body, requestSchema, responseDataSchema });\n\t}\n}\n","import { z } from \"zod\";\nimport { ProseMirrorDocSchema } from \"../../prosemirror\";\n\n//\n// 1) REUSABLE SCHEMAS FOR COMMON STRUCTURES\n//\n\n/**\n * A generic schema representing a heading used across various slices.\n * - `text`: The display text of the heading.\n * - `href`: An optional URL that the heading links to.\n */\nconst HeadingSchema = z.object({\n\ttext: z.string(),\n\thref: z.string().url().optional(),\n});\n\n/**\n * Base “properties” common to most page slices.\n * - `heading`: An optional heading object for slices that can display a title.\n */\nconst BasePageItemProps = z.object({\n\theading: HeadingSchema.optional(),\n});\n\n/**\n * Extended properties for any “graphics”-type slice.\n * In addition to base properties, these slices must specify how the graphic is displayed.\n * - `displayBehaviour`: Determines if the graphic stands alone or is associated with other content.\n */\nconst BaseGraphicsItemProps = BasePageItemProps.extend({\n\tdisplayBehaviour: z.enum([\"standalone\", \"associated\"]),\n});\n\n/**\n * A schema to validate that a string is valid JSON.\n */\nconst ValidJSONStringSchema = z.string().refine(\n\t(val) => {\n\t\ttry {\n\t\t\tJSON.parse(val);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t},\n\t{ message: \"Invalid JSON string\" },\n);\n\n//\n// 2) GENERIC HELPER TO DEFINE “SLICE” INPUT/OUTPUT SCHEMAS\n//\n\n/**\n * A union type to represent either a Zod object schema or an optional Zod object schema.\n */\ntype OptionalOrRequiredZodObject = z.AnyZodObject | z.ZodOptional<z.AnyZodObject>;\n\n/**\n * Helper function that, given:\n * - `typeName`: A string literal identifying the slice type.\n * - `propsShape`: A Zod schema describing the slice’s `properties`.\n *\n * Returns an object containing two schemas:\n * - `InputSchema`: For client-side input; `sliceId` is optional.\n * - `OutputSchema`: For server-side/output; `sliceId` is required.\n *\n * This is useful because when defining slices we often want to allow -\n * clients to submit slices without an ID (e.g., when creating new slices),\n */\nfunction defineSliceSchema<T extends string, P extends OptionalOrRequiredZodObject>(options: {\n\ttypeName: T;\n\tpropsShape: P;\n}) {\n\tconst { typeName, propsShape } = options;\n\n\t// Base schema shared by both input and output:\n\t// - `type`: Literal string identifying which slice this is.\n\t// - `hidden`: Optional flag to mark the slice as hidden.\n\t// - `properties`: The detailed properties shape for the slice.\n\tconst BaseSchema = z.object({\n\t\ttype: z.literal(typeName),\n\t\thidden: z.boolean().optional(),\n\t\tproperties: propsShape,\n\t});\n\n\t/**\n\t * Input schema: For client submissions.\n\t * - `sliceId` is optional because the client might not specify it yet.\n\t */\n\tconst InputSchema = BaseSchema.extend({\n\t\tsliceId: z.string().uuid().optional(),\n\t});\n\n\t/**\n\t * Output schema: For persisted or server-returned data.\n\t * - `sliceId` is required (each saved slice must have an ID).\n\t */\n\tconst OutputSchema = BaseSchema.extend({\n\t\tsliceId: z.string().uuid(),\n\t});\n\n\treturn { InputSchema, OutputSchema };\n}\n\n//\n// 3) DEFINE INDIVIDUAL SLICE TYPES (INPUT & OUTPUT) USING THE HELPER\n//\n\n// 3.A “HomepageSlice”\n// - A generic homepage slice that may include an optional heading.\n// - Input: Clients can pass `properties` or omit entirely.\n// - Output: Always includes a `properties` object (may be empty) and a required `sliceId`.\nconst HomepageSlice = defineSliceSchema({\n\ttypeName: \"HomepageSlice\",\n\tpropsShape: BasePageItemProps.optional(),\n});\n\n// 3.B “FlourishGraphicSlice”\n// - A slice to embed or reference a Flourish graphic by its ID.\n// - Extends graphic base properties with `flourishId`.\nconst FlourishGraphicSlice = defineSliceSchema({\n\ttypeName: \"FlourishGraphic\",\n\tpropsShape: BaseGraphicsItemProps.extend({\n\t\tflourishDescription: z.string().optional(), // Optional description for the Flourish graphic\n\t\tflourishId: z.string().nonempty(),\n\t}),\n});\n\n// 3.C “CustomIframeSlice”\n// - A slice that renders a custom iframe.\n// - Extends graphic base properties with `iframeSrc`.\nconst CustomIframeSlice = defineSliceSchema({\n\ttypeName: \"CustomIframe\",\n\tpropsShape: BaseGraphicsItemProps.extend({\n\t\tiframeSrc: z.string().url().nonempty(),\n\t}),\n});\n\n// 3.D “ExperimentSlice”\n// - A slice for embedding experimental content.\n// - Requires an `experimentId`, `experimentName`, and a JSON string (`contentJson`).\nconst ExperimentSlice = defineSliceSchema({\n\ttypeName: \"Experiment\",\n\tpropsShape: BasePageItemProps.extend({\n\t\texperimentId: z.string().nonempty(), // Unique ID for the experiment\n\t\texperimentName: z.string().nonempty(), // Human-readable name of the experiment\n\t\tcontentJson: ValidJSONStringSchema, // The experiment’s JSON payload as a valid JSON string\n\t}),\n});\n\n// 3.E \"Strip\"\n// - A slice that displays a strip of content.\nconst StripSlice = defineSliceSchema({\n\ttypeName: \"Strip\",\n\tpropsShape: BasePageItemProps.extend({\n\t\tlistId: z.string().uuid(), // The ID of the strip to display\n\t\tmaxStories: z.number().int().min(1), // Maximum number of stories to display in the strip\n\t}),\n});\n\n// 3.F \"TopperSlice\"\n// - A slice that displays a topper section with description and optional strapline.\nconst TopperSlice = defineSliceSchema({\n\ttypeName: \"Topper\",\n\tpropsShape: BasePageItemProps.extend({\n\t\tdescription: ProseMirrorDocSchema,\n\t\tstrapline: z.string().optional(),\n\t}),\n});\n\n// 3.F \"Hero\"\n// - A slice that represents a Hero on the page. It references a Spark List.\nconst HeroSlice = defineSliceSchema({\n\ttypeName: \"Hero\",\n\tpropsShape: BasePageItemProps.extend({\n\t\tlistId: z.string().uuid(), // The ID of the spark list to display\n\t\tmaxStories: z.number().int().min(1), // Maximum number of stories to display in the strip\n\t}),\n});\n\n//\n// 4) COMPOSE DISCRIMINATED UNIONS FOR “SLICE API” INPUT & OUTPUT\n//\n\n/**\n * All possible slice inputs for the Page API.\n * This discriminated union allows Zod to pick the correct schema based on the `type` field.\n */\nexport const SliceApiInputSchema = z.discriminatedUnion(\"type\", [\n\tHomepageSlice.InputSchema,\n\tFlourishGraphicSlice.InputSchema,\n\tCustomIframeSlice.InputSchema,\n\tExperimentSlice.InputSchema,\n\tStripSlice.InputSchema,\n\tTopperSlice.InputSchema,\n\tHeroSlice.InputSchema,\n] as const);\n\n/**\n * All possible slice outputs for the Page API.\n * The same discriminated union but with each slice requiring `sliceId`.\n */\nexport const SliceApiOutputSchema = z.discriminatedUnion(\"type\", [\n\tHomepageSlice.OutputSchema,\n\tFlourishGraphicSlice.OutputSchema,\n\tCustomIframeSlice.OutputSchema,\n\tExperimentSlice.OutputSchema,\n\tStripSlice.OutputSchema,\n\tTopperSlice.OutputSchema,\n\tHeroSlice.OutputSchema,\n] as const);\n\n//\n// 5) WRAPPER SCHEMAS FOR THE ENTIRE PAGE STRUCTURE\n//\n\nconst BasePagePropertiesSchema = z.object({\n\ttitle: z.string(),\n\tpageId: z.string().uuid(),\n\tconceptId: z.string().optional(),\n\tmetaDescription: z.string().optional(),\n\tpageTheme: z.string().optional(),\n\tsponsorText: z.string().optional(),\n\tsponsorImage: z.string().url().optional(),\n});\n\n/**\n * Page structure as submitted by clients.\n * - `properties`: Metadata about the page\n * - `children`: Array of slice inputs (each with an optional `sliceId`).\n */\nexport const PageStructureInputSchema = z.object({\n\tproperties: BasePagePropertiesSchema,\n\tchildren: z.array(SliceApiInputSchema),\n});\n\n/**\n * Page structure as submitted by clients.\n * - `properties`: Metadata about the page (title, list ID, page ID).\n * - `children`: Array of slice inputs (each with an optional `sliceId`).\n */\nexport const HomepageStructureInputSchema = PageStructureInputSchema.extend({\n\tproperties: BasePagePropertiesSchema.extend({\n\t\t// This is optional for the input. If clients don't send it, we generate a uuid.\n\t\thomepageListId: z.string().uuid(),\n\t}),\n});\n\n/**\n * Page structure as stored or returned by the server.\n */\nexport const PageStructureOutputSchema = z.object({\n\ttype: z.literal(\"Page\"),\n\tschemaVersion: z.number(),\n\tproperties: BasePagePropertiesSchema,\n\tchildren: z.array(SliceApiOutputSchema),\n});\n\nexport const HomepageStructureOutputSchema = PageStructureOutputSchema.extend({\n\ttype: z.literal(\"Homepage\"),\n\tproperties: BasePagePropertiesSchema.extend({\n\t\thomepageListId: z.string().uuid(),\n\t}),\n});\n\n//\n// 6) EXPORT TYPES FOR CONSUMPTION IN CODE\n//\n\n/** Client-side type for page structure input */\nexport type PageStructureInput = z.infer<typeof PageStructureInputSchema>;\n\n/** Server-side type for page structure output */\nexport type PageStructureOutput = z.infer<typeof PageStructureOutputSchema>;\n\n/** Client-side type for homepage structure input */\nexport type HomepageStructureInput = z.infer<typeof HomepageStructureInputSchema>;\n\n/** Server-side type for homepage structure output */\nexport type HomepageStructureOutput = z.infer<typeof HomepageStructureOutputSchema>;\n\n/** Union of all possible slice outputs for type-checking convenience */\nexport type Slice = z.infer<typeof SliceApiOutputSchema>;\n\n/** Individual slice output types */\nexport type HomepageSliceType = z.infer<typeof HomepageSlice.OutputSchema>;\nexport type FlourishGraphicSliceType = z.infer<typeof FlourishGraphicSlice.OutputSchema>;\nexport type CustomIframeSliceType = z.infer<typeof CustomIframeSlice.OutputSchema>;\nexport type ExperimentSliceType = z.infer<typeof ExperimentSlice.OutputSchema>;\nexport type StripSliceType = z.infer<typeof StripSlice.OutputSchema>;\nexport type TopperSliceType = z.infer<typeof TopperSlice.OutputSchema>;\nexport type HeroSliceType = z.infer<typeof HeroSlice.OutputSchema>;\n\n/**\n * Union type for interactive slices (i.e., the ones rendering visual components).\n * Useful for code that cares specifically about slices with visual/interactive content.\n */\nexport type InteractiveSlice = FlourishGraphicSliceType | CustomIframeSliceType;\n","import { z } from \"zod\";\n\n/** Accept http(s) and mailto: (matches your editor config) */\nconst HrefSchema = z.string().refine((v) => /^(https?:\\/\\/|mailto:).+/.test(v), {\n\tmessage: \"Expected http(s):// or mailto: URL\",\n});\n\n/** Link mark. */\nconst ProseMirrorLinkMark = z.object({\n\ttype: z.literal(\"link\"),\n\tattrs: z.object({\n\t\thref: HrefSchema,\n\t}),\n});\n\n/** Supported text marks */\nconst ProseMirrorMark = z.discriminatedUnion(\"type\", [\n\tProseMirrorLinkMark,\n\tz.object({ type: z.literal(\"bold\") }),\n\tz.object({ type: z.literal(\"italic\") }),\n\tz.object({ type: z.literal(\"underline\") }),\n\tz.object({ type: z.literal(\"strike\") }),\n]);\n\n/** Text node */\nconst ProseMirrorTextNode = z.object({\n\ttype: z.literal(\"text\"),\n\ttext: z.string(),\n\tmarks: z.array(ProseMirrorMark).optional(),\n});\n\n/** Paragraph node — content can be empty/omitted */\nconst ProseMirrorParagraphNode = z.object({\n\ttype: z.literal(\"paragraph\"),\n\tcontent: z.array(ProseMirrorTextNode),\n});\n\n/** ProseMirror Node Union. */\nconst ProseMirrorNode = z.union([ProseMirrorParagraphNode, ProseMirrorTextNode]);\n\n/** Root node of a ProseMirror document - enforcing at least 1 paragraph */\nexport const ProseMirrorDocSchema = z.object({\n\ttype: z.literal(\"doc\"),\n\tcontent: z\n\t\t.array(ProseMirrorNode)\n\t\t.min(1, { message: \"Document must contain at least one paragraph\" }),\n});\n\n/** Rich text editor TS type. */\nexport type RichTextEditorType = z.infer<typeof ProseMirrorDocSchema>;\n\nexport {};\n","import { BaseApiClient } from \"./base\";\nimport {\n\tHomepageStructureInputSchema,\n\tHomepageStructureOutputSchema,\n\ttype HomepageStructureInput,\n\ttype HomepageStructureOutput,\n} from \"./schemas/ftpink/page\";\n\n/**\n * Client for Homepage structure endpoints\n */\nexport class HomepageClient extends BaseApiClient {\n\tasync getStructure(pageId: string): Promise<HomepageStructureOutput> {\n\t\treturn this.get(`/v1/homepage/${pageId}/structure`, HomepageStructureOutputSchema);\n\t}\n\n\tasync getStructuresByHomepageListId(homepageListId: string): Promise<HomepageStructureOutput[]> {\n\t\treturn this.get(\n\t\t\t`/v1/homepage/list/${homepageListId}/structures`,\n\t\t\tHomepageStructureOutputSchema.array(),\n\t\t);\n\t}\n\n\tasync upsertStructure(\n\t\tpageId: string,\n\t\tdata: Omit<HomepageStructureInput, \"type\">,\n\t): Promise<HomepageStructureOutput> {\n\t\treturn this.put(\n\t\t\t`/v1/homepage/${pageId}/structure`,\n\t\t\tdata,\n\t\t\tHomepageStructureInputSchema,\n\t\t\tHomepageStructureOutputSchema,\n\t\t);\n\t}\n}\n","import { z } from \"zod\";\n\n/**\n * -----------------------------------------\n * Legacy API Schemas & Types\n *\n * These schemas map to expected types for Hub Pages rendered by dotcom-pages.\n * -----------------------------------------\n */\n\nconst LegacyFlourishChildSchema = z.object({\n\tsource: z.literal(\"flourish\"),\n\tproperties: z.object({\n\t\tid: z.string().min(1), // e.g. \"visualisation/21901162\"\n\t}),\n});\n\nconst LegacyListChildSchema = z.object({\n\tsource: z.literal(\"list\"),\n\tproperties: z.object({\n\t\tid: z.string().uuid(),\n\t\tmaxItems: z.number().optional(),\n\t}),\n});\n\nconst LegacyContainerChildSchema = z.discriminatedUnion(\"source\", [\n\tLegacyFlourishChildSchema,\n\tLegacyListChildSchema,\n]);\n\nconst LegacyTopperSchema = z.object({\n\ttype: z.literal(\"topper-basic\"),\n\tproperties: z.object({\n\t\ttitle: z.string(),\n\t\tsponsorText: z.string().optional(),\n\t\tsponsorImage: z.string().url().optional(),\n\t}),\n});\n\nconst LegacyInfoBoxSchema = z.object({\n\ttype: z.literal(\"info-box\"),\n\tproperties: z.object({\n\t\tbodyHTML: z.string(),\n\t}),\n});\n\nconst LegacyContainerSchema = z.object({\n\ttype: z.literal(\"container\"),\n\tchildren: z.array(LegacyContainerChildSchema).min(1),\n\tproperties: z.object({\n\t\ttitle: z.string().optional(),\n\t\tdesign: z.enum([\"chart\", \"four-story\", \"freeform\", \"hero-lead\"]).default(\"freeform\"),\n\t\tbackgroundColor: z.string().optional(),\n\t}),\n});\n\nconst LegacyExperimentSchema = z.object({\n\ttype: z.literal(\"experiment\"),\n\tchildren: z.tuple([]),\n\tproperties: z.object({\n\t\texperimentName: z.string(),\n\t\tid: z.string(),\n\t\ttitle: z.string().optional(),\n\t\tconfig: z\n\t\t\t.object({\n\t\t\t\tvalue: z.unknown().optional(),\n\t\t\t\t// Hub pages support experiments with HTML and Text.\n\t\t\t\t// For now we just support JSON. As we migrate pages, this may change.\n\t\t\t\tformat: z.enum([\"json\"]).default(\"json\"),\n\t\t\t})\n\t\t\t.partial()\n\t\t\t.optional(),\n\t}),\n});\n\nconst LegacyBlockSchema = z.discriminatedUnion(\"type\", [\n\tLegacyTopperSchema,\n\tLegacyInfoBoxSchema,\n\tLegacyContainerSchema,\n\tLegacyExperimentSchema,\n]);\n\nexport const LegacyPageStructureOutputSchema = z.object({\n\tuuid: z.string().uuid(),\n\tconceptId: z.string().uuid().optional(),\n\tthemeName: z.string().optional(),\n\tmetaDescription: z.string().optional(),\n\tblocks: z.array(LegacyBlockSchema),\n});\n\nexport type LegacyPageStructureOutput = z.infer<typeof LegacyPageStructureOutputSchema>;\nexport type LegacyBlock = z.infer<typeof LegacyBlockSchema>;\n","import { BaseApiClient } from \"./base\";\nimport type { LegacyPageStructureOutput } from \"./schemas/ftpink/legacyHubPage\";\nimport { LegacyPageStructureOutputSchema } from \"./schemas/ftpink/legacyHubPage\";\nimport {\n\tPageStructureInputSchema,\n\tPageStructureOutputSchema,\n\ttype PageStructureInput,\n\ttype PageStructureOutput,\n} from \"./schemas/ftpink/page\";\n\n/**\n * Client for Page structure endpoints\n */\nexport class PageClient extends BaseApiClient {\n\tasync getStructure(pageId: string): Promise<PageStructureOutput> {\n\t\treturn this.get(`/v1/page/${pageId}/structure`, PageStructureOutputSchema);\n\t}\n\n\tasync getLegacyHubPageStructure(pageId: string): Promise<LegacyPageStructureOutput> {\n\t\treturn this.get(`/v1/page/${pageId}/legacyHubPageStructure`, LegacyPageStructureOutputSchema);\n\t}\n\n\tasync upsertStructure(\n\t\tpageId: string,\n\t\tdata: Omit<PageStructureInput, \"type\">,\n\t): Promise<PageStructureOutput> {\n\t\treturn this.put(\n\t\t\t`/v1/page/${pageId}/structure`,\n\t\t\tdata,\n\t\t\tPageStructureInputSchema,\n\t\t\tPageStructureOutputSchema,\n\t\t);\n\t}\n}\n","import type { ApiClientConfig } from \"./base\";\nimport { BaseApiClient } from \"./base\";\nimport { HomepageClient } from \"./homepage\";\nimport { PageClient } from \"./page\";\n\n/**\n * Main API client that provides access to all API endpoints\n */\nexport class ApiClient extends BaseApiClient {\n\t/**\n\t * Homepage API endpoints\n\t */\n\thomepage: HomepageClient;\n\tpage: PageClient;\n\n\tconstructor(config: ApiClientConfig) {\n\t\tsuper(config);\n\n\t\t// Initialize sub-clients\n\t\tthis.homepage = new HomepageClient(config);\n\t\tthis.page = new PageClient(config);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["/home/circleci/repo/packages/content-curation-client/dist/index.cjs","../src/schemas/response.ts","../src/base.ts","../src/schemas/ftpink/page/index.ts","../src/schemas/prosemirror.ts","../src/homepage.ts","../src/schemas/ftpink/legacyHubPage/index.ts","../src/page.ts","../src/client.ts"],"names":[],"mappings":"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","file":"/home/circleci/repo/packages/content-curation-client/dist/index.cjs","sourcesContent":[null,"import { z, type ZodTypeAny } from \"zod\";\n\n/**\n * Strongly‐typed enum for all possible API error codes.\n */\nexport const ApiErrorCode = z.enum([\n\t\"UNAUTHORIZED\",\n\t\"NOT_FOUND\",\n\t\"INTERNAL_SERVER_ERROR\",\n\t\"INVALID_INPUT_DATA\",\n]);\n\n/**\n * Fields shared by both success and error envelopes (but not the discriminant).\n */\nconst BaseEnvelopeFields = z.object({\n\tstatusCode: z.number(),\n\trequestId: z.string(),\n});\n\n/**\n * Specific details carried in an error payload.\n */\nexport const ApiErrorPayloadSchema = z\n\t.object({\n\t\tcode: ApiErrorCode,\n\t\tmessage: z.string(),\n\t\tdetails: z.string().optional(),\n\t\tpath: z.string().optional(),\n\t\ttimestamp: z.string().optional(),\n\t})\n\t.strict();\n\nexport type ApiErrorPayload = z.infer<typeof ApiErrorPayloadSchema>;\n\n/**\n * Full “envelope” when the API has failed.\n */\nexport const ApiErrorResponseSchema = BaseEnvelopeFields.extend({\n\tstatus: z.literal(\"error\"),\n\terror: ApiErrorPayloadSchema,\n}).strict();\n\nexport type ApiErrorResponse = z.infer<typeof ApiErrorResponseSchema>;\n\n/**\n * Schema for a successful API response, given some data schema T.\n */\nexport function ApiSuccessResponseSchema<T extends ZodTypeAny>(dataSchema: T) {\n\treturn BaseEnvelopeFields.extend({\n\t\tstatus: z.literal(\"success\"),\n\t\tdata: dataSchema,\n\t}).strict();\n}\n\n/**\n * Union of success or error envelopes, discriminated on `status`.\n */\nexport function ApiResponseSchema<T extends ZodTypeAny>(dataSchema: T) {\n\tconst successSchema = ApiSuccessResponseSchema(dataSchema);\n\tconst errorSchema = ApiErrorResponseSchema;\n\treturn z.discriminatedUnion(\"status\", [successSchema, errorSchema]);\n}\n","import type { z, ZodTypeAny } from \"zod\";\nimport type { ApiErrorPayloadSchema } from \"./schemas/response\";\nimport { ApiResponseSchema } from \"./schemas/response\";\n\n/**\n * API-level error thrown when { status: 'error' } is returned\n */\nexport class ApiClientError extends Error {\n\tpublic code: string;\n\tpublic details?: string;\n\tpublic path?: string;\n\tpublic timestamp?: string;\n\n\tconstructor(\n\t\tpublic payload: z.infer<typeof ApiErrorPayloadSchema>,\n\t\tpublic statusCode: number,\n\t\tpublic requestId?: string,\n\t) {\n\t\tsuper(payload.message);\n\t\tthis.name = \"ApiError\";\n\t\tthis.code = payload.code;\n\t\tthis.details = payload.details;\n\t\tthis.path = payload.path;\n\t\tthis.timestamp = payload.timestamp;\n\t}\n}\n\n/**\n * Configuration options for the API client\n */\nexport type ApiClientConfig =\n\t| {\n\t\t\t// Standard configuration.\n\t\t\t// Intended for external clients using an API key issued via API Gateway.\n\t\t\tbaseUrl: string;\n\t\t\tapiKey: string;\n\t\t\tapiToken?: never;\n\t\t\tfetch?: typeof fetch;\n\t }\n\t| {\n\t\t\t// Alternative configuration.\n\t\t\t// Reserved for client with access to a bearer token (e.g. The e2e tests).\n\t\t\tbaseUrl: string;\n\t\t\tapiKey?: never;\n\t\t\tapiToken: string;\n\t\t\tfetch?: typeof fetch;\n\t };\n\nexport class BaseApiClient {\n\tprotected config: ApiClientConfig;\n\n\tconstructor(config: ApiClientConfig) {\n\t\tthis.config = {\n\t\t\t...config,\n\t\t\tfetch: config.fetch || fetch,\n\t\t};\n\t\tthis.config.baseUrl = this.config.baseUrl.replace(/\\/+$/, \"\"); // strip trailing slashes\n\t}\n\n\t/**\n\t * Generic HTTP request to a JSON API\n\t */\n\tprotected async request<\n\t\tReqSchema extends ZodTypeAny | undefined,\n\t\tResponseDataSchema extends ZodTypeAny,\n\t>(\n\t\tmethod: \"GET\" | \"PUT\" | \"POST\" | \"DELETE\",\n\t\tpath: string,\n\t\topts: {\n\t\t\trequestSchema?: ReqSchema;\n\t\t\tbody?: ReqSchema extends ZodTypeAny ? z.infer<ReqSchema> : unknown;\n\t\t\tresponseDataSchema: ResponseDataSchema;\n\t\t},\n\t): Promise<z.infer<ResponseDataSchema>> {\n\t\t// Validate request body if provided\n\t\tlet bodyPayload = opts.body;\n\t\tif (opts.requestSchema && opts.body !== undefined) {\n\t\t\tbodyPayload = opts.requestSchema.parse(opts.body);\n\t\t}\n\n\t\t// Build URL + query string\n\t\tconst url = new URL(this.config.baseUrl + path);\n\n\t\t// Perform fetch\n\t\tconst response = await this.config.fetch!(url.toString(), {\n\t\t\tmethod,\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t...(this.config.apiKey\n\t\t\t\t\t? { \"x-api-key\": this.config.apiKey }\n\t\t\t\t\t: { Authorization: `Bearer ${this.config.apiToken}` }),\n\t\t\t},\n\t\t\tbody: bodyPayload ? JSON.stringify(bodyPayload) : undefined,\n\t\t});\n\n\t\tconst json = await response.json();\n\t\tconst parsedJson = ApiResponseSchema(opts.responseDataSchema).parse(json);\n\n\t\tif (\"error\" in parsedJson) {\n\t\t\tthrow new ApiClientError(parsedJson.error, parsedJson.statusCode, parsedJson.requestId);\n\t\t} else if (!(\"data\" in parsedJson)) {\n\t\t\tthrow new ApiClientError(\n\t\t\t\t{\n\t\t\t\t\tcode: \"INTERNAL_SERVER_ERROR\",\n\t\t\t\t\tmessage: \"Unexpected API response format\",\n\t\t\t\t\tdetails: 'Response did not contain expected \"data\" field',\n\t\t\t\t},\n\t\t\t\t500,\n\t\t\t\tparsedJson.requestId,\n\t\t\t);\n\t\t}\n\n\t\treturn parsedJson.data;\n\t}\n\n\t/**\n\t * GET convenience method inferring response type from schema\n\t */\n\tprotected get<ResponseDataSchema extends ZodTypeAny>(\n\t\tpath: string,\n\t\tresponseDataSchema: ResponseDataSchema,\n\t): Promise<z.infer<ResponseDataSchema>> {\n\t\treturn this.request(\"GET\", path, { responseDataSchema });\n\t}\n\n\t/**\n\t * PUT convenience method inferring both request and response types\n\t */\n\tprotected put<ReqSchema extends ZodTypeAny, ResponseDataSchema extends ZodTypeAny>(\n\t\tpath: string,\n\t\tbody: z.infer<ReqSchema>,\n\t\trequestSchema: ReqSchema,\n\t\tresponseDataSchema: ResponseDataSchema,\n\t): Promise<z.infer<ResponseDataSchema>> {\n\t\treturn this.request(\"PUT\", path, { body, requestSchema, responseDataSchema });\n\t}\n}\n","import { z } from \"zod\";\nimport { ProseMirrorDocSchema } from \"../../prosemirror\";\n\n//\n// 1) REUSABLE SCHEMAS FOR COMMON STRUCTURES\n//\n\n/**\n * A generic schema representing a heading used across various slices.\n * - `text`: The display text of the heading.\n * - `href`: An optional URL that the heading links to.\n */\nconst HeadingSchema = z.object({\n\ttext: z.string(),\n\thref: z.string().url().optional(),\n});\n\n/**\n * Base “properties” common to most page slices.\n * - `heading`: An optional heading object for slices that can display a title.\n */\nconst BasePageItemProps = z.object({\n\theading: HeadingSchema.optional(),\n});\n\n/**\n * Extended properties for any “graphics”-type slice.\n * In addition to base properties, these slices must specify how the graphic is displayed.\n * - `displayBehaviour`: Determines if the graphic stands alone or is associated with other content.\n */\nconst BaseGraphicsItemProps = BasePageItemProps.extend({\n\tdisplayBehaviour: z.enum([\"standalone\", \"associated\"]),\n});\n\n/**\n * A schema to validate that a string is valid JSON.\n */\nconst ValidJSONStringSchema = z.string().refine(\n\t(val) => {\n\t\ttry {\n\t\t\tJSON.parse(val);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t},\n\t{ message: \"Invalid JSON string\" },\n);\n\n//\n// 2) GENERIC HELPER TO DEFINE “SLICE” INPUT/OUTPUT SCHEMAS\n//\n\n/**\n * A union type to represent either a Zod object schema or an optional Zod object schema.\n */\ntype OptionalOrRequiredZodObject = z.AnyZodObject | z.ZodOptional<z.AnyZodObject>;\n\n/**\n * Helper function that, given:\n * - `typeName`: A string literal identifying the slice type.\n * - `propsShape`: A Zod schema describing the slice’s `properties`.\n *\n * Returns an object containing two schemas:\n * - `InputSchema`: For client-side input; `sliceId` is optional.\n * - `OutputSchema`: For server-side/output; `sliceId` is required.\n *\n * This is useful because when defining slices we often want to allow -\n * clients to submit slices without an ID (e.g., when creating new slices),\n */\nfunction defineSliceSchema<T extends string, P extends OptionalOrRequiredZodObject>(options: {\n\ttypeName: T;\n\tpropsShape: P;\n}) {\n\tconst { typeName, propsShape } = options;\n\n\t// Base schema shared by both input and output:\n\t// - `type`: Literal string identifying which slice this is.\n\t// - `hidden`: Optional flag to mark the slice as hidden.\n\t// - `properties`: The detailed properties shape for the slice.\n\tconst BaseSchema = z.object({\n\t\ttype: z.literal(typeName),\n\t\thidden: z.boolean().optional(),\n\t\tproperties: propsShape,\n\t});\n\n\t/**\n\t * Input schema: For client submissions.\n\t * - `sliceId` is optional because the client might not specify it yet.\n\t */\n\tconst InputSchema = BaseSchema.extend({\n\t\tsliceId: z.string().uuid().optional(),\n\t});\n\n\t/**\n\t * Output schema: For persisted or server-returned data.\n\t * - `sliceId` is required (each saved slice must have an ID).\n\t */\n\tconst OutputSchema = BaseSchema.extend({\n\t\tsliceId: z.string().uuid(),\n\t});\n\n\treturn { InputSchema, OutputSchema };\n}\n\n//\n// 3) DEFINE INDIVIDUAL SLICE TYPES (INPUT & OUTPUT) USING THE HELPER\n//\n\n// 3.A “HomepageSlice”\n// - A generic homepage slice that may include an optional heading.\n// - Input: Clients can pass `properties` or omit entirely.\n// - Output: Always includes a `properties` object (may be empty) and a required `sliceId`.\nconst HomepageSlice = defineSliceSchema({\n\ttypeName: \"HomepageSlice\",\n\tpropsShape: BasePageItemProps.optional(),\n});\n\n// 3.B “FlourishGraphicSlice”\n// - A slice to embed or reference a Flourish graphic by its ID.\n// - Extends graphic base properties with `flourishId`.\nconst FlourishGraphicSlice = defineSliceSchema({\n\ttypeName: \"FlourishGraphic\",\n\tpropsShape: BaseGraphicsItemProps.extend({\n\t\tflourishDescription: z.string().optional(), // Optional description for the Flourish graphic\n\t\tflourishId: z.string().nonempty(),\n\t}),\n});\n\n// 3.C “CustomIframeSlice”\n// - A slice that renders a custom iframe.\n// - Extends graphic base properties with `iframeSrc`.\nconst CustomIframeSlice = defineSliceSchema({\n\ttypeName: \"CustomIframe\",\n\tpropsShape: BaseGraphicsItemProps.extend({\n\t\tiframeSrc: z.string().url().nonempty(),\n\t}),\n});\n\n// 3.D “ExperimentSlice”\n// - A slice for embedding experimental content.\n// - Requires an `experimentId`, `experimentName`, and a JSON string (`contentJson`).\nconst ExperimentSlice = defineSliceSchema({\n\ttypeName: \"Experiment\",\n\tpropsShape: BasePageItemProps.extend({\n\t\texperimentId: z.string().nonempty(), // Unique ID for the experiment\n\t\texperimentName: z.string().nonempty(), // Human-readable name of the experiment\n\t\tcontentJson: ValidJSONStringSchema, // The experiment’s JSON payload as a valid JSON string\n\t}),\n});\n\n// 3.E \"Strip\"\n// - A slice that displays a strip of content.\nconst StripSlice = defineSliceSchema({\n\ttypeName: \"Strip\",\n\tpropsShape: BasePageItemProps.extend({\n\t\tlistId: z.string().uuid(), // The ID of the strip to display\n\t\tmaxStories: z.number().int().min(1), // Maximum number of stories to display in the strip\n\t}),\n});\n\n// 3.F \"TopperSlice\"\n// - A slice that displays a topper section with description and optional strapline.\nconst TopperSlice = defineSliceSchema({\n\ttypeName: \"Topper\",\n\tpropsShape: BasePageItemProps.extend({\n\t\tdescription: ProseMirrorDocSchema,\n\t\tstrapline: z.string().optional(),\n\t}),\n});\n\n// 3.F \"Hero\"\n// - A slice that represents a Hero on the page. It references a Spark List.\nconst HeroSlice = defineSliceSchema({\n\ttypeName: \"Hero\",\n\tpropsShape: BasePageItemProps.extend({\n\t\tlistId: z.string().uuid(), // The ID of the spark list to display\n\t\tmaxStories: z.number().int().min(1), // Maximum number of stories to display in the strip\n\t}),\n});\n\n//\n// 4) COMPOSE DISCRIMINATED UNIONS FOR “SLICE API” INPUT & OUTPUT\n//\n\n/**\n * All possible slice inputs for the Page API.\n * This discriminated union allows Zod to pick the correct schema based on the `type` field.\n */\nexport const SliceApiInputSchema = z.discriminatedUnion(\"type\", [\n\tHomepageSlice.InputSchema,\n\tFlourishGraphicSlice.InputSchema,\n\tCustomIframeSlice.InputSchema,\n\tExperimentSlice.InputSchema,\n\tStripSlice.InputSchema,\n\tTopperSlice.InputSchema,\n\tHeroSlice.InputSchema,\n] as const);\n\n/**\n * All possible slice outputs for the Page API.\n * The same discriminated union but with each slice requiring `sliceId`.\n */\nexport const SliceApiOutputSchema = z.discriminatedUnion(\"type\", [\n\tHomepageSlice.OutputSchema,\n\tFlourishGraphicSlice.OutputSchema,\n\tCustomIframeSlice.OutputSchema,\n\tExperimentSlice.OutputSchema,\n\tStripSlice.OutputSchema,\n\tTopperSlice.OutputSchema,\n\tHeroSlice.OutputSchema,\n] as const);\n\n//\n// 5) WRAPPER SCHEMAS FOR THE ENTIRE PAGE STRUCTURE\n//\n\nconst BasePagePropertiesSchema = z.object({\n\ttitle: z.string(),\n\tpageId: z.string().uuid(),\n\tpublicationId: z.string(),\n\tconceptId: z.string().optional(),\n\tmetaDescription: z.string().optional(),\n\tpageTheme: z.string().optional(),\n\tsponsorText: z.string().optional(),\n\tsponsorImage: z.string().url().optional(),\n});\n\n/**\n * Page structure as submitted by clients.\n * - `properties`: Metadata about the page\n * - `children`: Array of slice inputs (each with an optional `sliceId`).\n */\nexport const PageStructureInputSchema = z.object({\n\tproperties: BasePagePropertiesSchema,\n\tchildren: z.array(SliceApiInputSchema),\n});\n\n/**\n * Page structure as submitted by clients.\n * - `properties`: Metadata about the page (title, list ID, page ID).\n * - `children`: Array of slice inputs (each with an optional `sliceId`).\n */\nexport const HomepageStructureInputSchema = PageStructureInputSchema.extend({\n\tproperties: BasePagePropertiesSchema.extend({\n\t\t// This is optional for the input. If clients don't send it, we generate a uuid.\n\t\thomepageListId: z.string().uuid(),\n\t}),\n});\n\n/**\n * Page structure as stored or returned by the server.\n */\nexport const PageStructureOutputSchema = z.object({\n\ttype: z.literal(\"Page\"),\n\tschemaVersion: z.number(),\n\tproperties: BasePagePropertiesSchema,\n\tchildren: z.array(SliceApiOutputSchema),\n});\n\nexport const HomepageStructureOutputSchema = PageStructureOutputSchema.extend({\n\ttype: z.literal(\"Homepage\"),\n\tproperties: BasePagePropertiesSchema.extend({\n\t\thomepageListId: z.string().uuid(),\n\t}),\n});\n\n//\n// 6) EXPORT TYPES FOR CONSUMPTION IN CODE\n//\n\n/** Client-side type for page structure input */\nexport type PageStructureInput = z.infer<typeof PageStructureInputSchema>;\n\n/** Server-side type for page structure output */\nexport type PageStructureOutput = z.infer<typeof PageStructureOutputSchema>;\n\n/** Client-side type for homepage structure input */\nexport type HomepageStructureInput = z.infer<typeof HomepageStructureInputSchema>;\n\n/** Server-side type for homepage structure output */\nexport type HomepageStructureOutput = z.infer<typeof HomepageStructureOutputSchema>;\n\n/** Union of all possible slice outputs for type-checking convenience */\nexport type Slice = z.infer<typeof SliceApiOutputSchema>;\n\n/** Individual slice output types */\nexport type HomepageSliceType = z.infer<typeof HomepageSlice.OutputSchema>;\nexport type FlourishGraphicSliceType = z.infer<typeof FlourishGraphicSlice.OutputSchema>;\nexport type CustomIframeSliceType = z.infer<typeof CustomIframeSlice.OutputSchema>;\nexport type ExperimentSliceType = z.infer<typeof ExperimentSlice.OutputSchema>;\nexport type StripSliceType = z.infer<typeof StripSlice.OutputSchema>;\nexport type TopperSliceType = z.infer<typeof TopperSlice.OutputSchema>;\nexport type HeroSliceType = z.infer<typeof HeroSlice.OutputSchema>;\n\n/**\n * Union type for interactive slices (i.e., the ones rendering visual components).\n * Useful for code that cares specifically about slices with visual/interactive content.\n */\nexport type InteractiveSlice = FlourishGraphicSliceType | CustomIframeSliceType;\n","import { z } from \"zod\";\n\n/** Accept http(s) and mailto: (matches your editor config) */\nconst HrefSchema = z.string().refine((v) => /^(https?:\\/\\/|mailto:).+/.test(v), {\n\tmessage: \"Expected http(s):// or mailto: URL\",\n});\n\n/** Link mark. */\nconst ProseMirrorLinkMark = z.object({\n\ttype: z.literal(\"link\"),\n\tattrs: z.object({\n\t\thref: HrefSchema,\n\t}),\n});\n\n/** Supported text marks */\nconst ProseMirrorMark = z.discriminatedUnion(\"type\", [\n\tProseMirrorLinkMark,\n\tz.object({ type: z.literal(\"bold\") }),\n\tz.object({ type: z.literal(\"italic\") }),\n\tz.object({ type: z.literal(\"underline\") }),\n\tz.object({ type: z.literal(\"strike\") }),\n]);\n\n/** Text node */\nconst ProseMirrorTextNode = z.object({\n\ttype: z.literal(\"text\"),\n\ttext: z.string(),\n\tmarks: z.array(ProseMirrorMark).optional(),\n});\n\n/** Paragraph node — content can be empty/omitted */\nconst ProseMirrorParagraphNode = z.object({\n\ttype: z.literal(\"paragraph\"),\n\tcontent: z.array(ProseMirrorTextNode),\n});\n\n/** ProseMirror Node Union. */\nconst ProseMirrorNode = z.union([ProseMirrorParagraphNode, ProseMirrorTextNode]);\n\n/** Root node of a ProseMirror document - enforcing at least 1 paragraph */\nexport const ProseMirrorDocSchema = z.object({\n\ttype: z.literal(\"doc\"),\n\tcontent: z\n\t\t.array(ProseMirrorNode)\n\t\t.min(1, { message: \"Document must contain at least one paragraph\" }),\n});\n\n/** Rich text editor TS type. */\nexport type RichTextEditorType = z.infer<typeof ProseMirrorDocSchema>;\n\nexport {};\n","import { BaseApiClient } from \"./base\";\nimport {\n\tHomepageStructureInputSchema,\n\tHomepageStructureOutputSchema,\n\ttype HomepageStructureInput,\n\ttype HomepageStructureOutput,\n} from \"./schemas/ftpink/page\";\n\n/**\n * Client for Homepage structure endpoints\n */\nexport class HomepageClient extends BaseApiClient {\n\tasync getStructure(pageId: string): Promise<HomepageStructureOutput> {\n\t\treturn this.get(`/v1/homepage/${pageId}/structure`, HomepageStructureOutputSchema);\n\t}\n\n\tasync getStructuresByHomepageListId(homepageListId: string): Promise<HomepageStructureOutput[]> {\n\t\treturn this.get(\n\t\t\t`/v1/homepage/list/${homepageListId}/structures`,\n\t\t\tHomepageStructureOutputSchema.array(),\n\t\t);\n\t}\n\n\tasync upsertStructure(\n\t\tpageId: string,\n\t\tdata: Omit<HomepageStructureInput, \"type\">,\n\t): Promise<HomepageStructureOutput> {\n\t\treturn this.put(\n\t\t\t`/v1/homepage/${pageId}/structure`,\n\t\t\tdata,\n\t\t\tHomepageStructureInputSchema,\n\t\t\tHomepageStructureOutputSchema,\n\t\t);\n\t}\n}\n","import { z } from \"zod\";\n\n/**\n * -----------------------------------------\n * Legacy API Schemas & Types\n *\n * These schemas map to expected types for Hub Pages rendered by dotcom-pages.\n * -----------------------------------------\n */\n\nconst LegacyFlourishChildSchema = z.object({\n\tsource: z.literal(\"flourish\"),\n\tproperties: z.object({\n\t\tid: z.string().min(1), // e.g. \"visualisation/21901162\"\n\t}),\n});\n\nconst LegacyListChildSchema = z.object({\n\tsource: z.literal(\"list\"),\n\tproperties: z.object({\n\t\tid: z.string().uuid(),\n\t\tmaxItems: z.number().optional(),\n\t}),\n});\n\nconst LegacyContainerChildSchema = z.discriminatedUnion(\"source\", [\n\tLegacyFlourishChildSchema,\n\tLegacyListChildSchema,\n]);\n\nconst LegacyTopperSchema = z.object({\n\ttype: z.literal(\"topper-basic\"),\n\tproperties: z.object({\n\t\ttitle: z.string(),\n\t\tsponsorText: z.string().optional(),\n\t\tsponsorImage: z.string().url().optional(),\n\t}),\n});\n\nconst LegacyInfoBoxSchema = z.object({\n\ttype: z.literal(\"info-box\"),\n\tproperties: z.object({\n\t\tbodyHTML: z.string(),\n\t}),\n});\n\nconst LegacyContainerSchema = z.object({\n\ttype: z.literal(\"container\"),\n\tchildren: z.array(LegacyContainerChildSchema).min(1),\n\tproperties: z.object({\n\t\ttitle: z.string().optional(),\n\t\tdesign: z.enum([\"chart\", \"four-story\", \"freeform\", \"hero-lead\"]).default(\"freeform\"),\n\t\tbackgroundColor: z.string().optional(),\n\t}),\n});\n\nconst LegacyExperimentSchema = z.object({\n\ttype: z.literal(\"experiment\"),\n\tchildren: z.tuple([]),\n\tproperties: z.object({\n\t\texperimentName: z.string(),\n\t\tid: z.string(),\n\t\ttitle: z.string().optional(),\n\t\tconfig: z\n\t\t\t.object({\n\t\t\t\tvalue: z.unknown().optional(),\n\t\t\t\t// Hub pages support experiments with HTML and Text.\n\t\t\t\t// For now we just support JSON. As we migrate pages, this may change.\n\t\t\t\tformat: z.enum([\"json\"]).default(\"json\"),\n\t\t\t})\n\t\t\t.partial()\n\t\t\t.optional(),\n\t}),\n});\n\nconst LegacyBlockSchema = z.discriminatedUnion(\"type\", [\n\tLegacyTopperSchema,\n\tLegacyInfoBoxSchema,\n\tLegacyContainerSchema,\n\tLegacyExperimentSchema,\n]);\n\nexport const LegacyPageStructureOutputSchema = z.object({\n\tuuid: z.string().uuid(),\n\ttitle: z.string(),\n\tconceptId: z.string().uuid().optional(),\n\tthemeName: z.string().optional(),\n\tmetaDescription: z.string().optional(),\n\tblocks: z.array(LegacyBlockSchema),\n});\n\nexport type LegacyPageStructureOutput = z.infer<typeof LegacyPageStructureOutputSchema>;\nexport type LegacyBlock = z.infer<typeof LegacyBlockSchema>;\n","import { BaseApiClient } from \"./base\";\nimport type { LegacyPageStructureOutput } from \"./schemas/ftpink/legacyHubPage\";\nimport { LegacyPageStructureOutputSchema } from \"./schemas/ftpink/legacyHubPage\";\nimport {\n\tPageStructureInputSchema,\n\tPageStructureOutputSchema,\n\ttype PageStructureInput,\n\ttype PageStructureOutput,\n} from \"./schemas/ftpink/page\";\n\n/**\n * Client for Page structure endpoints\n */\nexport class PageClient extends BaseApiClient {\n\tasync getStructure(pageId: string): Promise<PageStructureOutput> {\n\t\treturn this.get(`/v1/page/${pageId}/structure`, PageStructureOutputSchema);\n\t}\n\n\tasync getLegacyHubPageStructure(pageId: string): Promise<LegacyPageStructureOutput> {\n\t\treturn this.get(`/v1/page/${pageId}/legacyHubPageStructure`, LegacyPageStructureOutputSchema);\n\t}\n\n\tasync upsertStructure(\n\t\tpageId: string,\n\t\tdata: Omit<PageStructureInput, \"type\">,\n\t): Promise<PageStructureOutput> {\n\t\treturn this.put(\n\t\t\t`/v1/page/${pageId}/structure`,\n\t\t\tdata,\n\t\t\tPageStructureInputSchema,\n\t\t\tPageStructureOutputSchema,\n\t\t);\n\t}\n}\n","import type { ApiClientConfig } from \"./base\";\nimport { BaseApiClient } from \"./base\";\nimport { HomepageClient } from \"./homepage\";\nimport { PageClient } from \"./page\";\n\n/**\n * Main API client that provides access to all API endpoints\n */\nexport class ApiClient extends BaseApiClient {\n\t/**\n\t * Homepage API endpoints\n\t */\n\thomepage: HomepageClient;\n\tpage: PageClient;\n\n\tconstructor(config: ApiClientConfig) {\n\t\tsuper(config);\n\n\t\t// Initialize sub-clients\n\t\tthis.homepage = new HomepageClient(config);\n\t\tthis.page = new PageClient(config);\n\t}\n}\n"]}
package/dist/index.js CHANGED
@@ -256,6 +256,7 @@ var SliceApiOutputSchema = z3.discriminatedUnion("type", [
256
256
  var BasePagePropertiesSchema = z3.object({
257
257
  title: z3.string(),
258
258
  pageId: z3.string().uuid(),
259
+ publicationId: z3.string(),
259
260
  conceptId: z3.string().optional(),
260
261
  metaDescription: z3.string().optional(),
261
262
  pageTheme: z3.string().optional(),
@@ -372,6 +373,7 @@ var LegacyBlockSchema = z4.discriminatedUnion("type", [
372
373
  ]);
373
374
  var LegacyPageStructureOutputSchema = z4.object({
374
375
  uuid: z4.string().uuid(),
376
+ title: z4.string(),
375
377
  conceptId: z4.string().uuid().optional(),
376
378
  themeName: z4.string().optional(),
377
379
  metaDescription: z4.string().optional(),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schemas/response.ts","../src/base.ts","../src/schemas/ftpink/page/index.ts","../src/schemas/prosemirror.ts","../src/homepage.ts","../src/schemas/ftpink/legacyHubPage/index.ts","../src/page.ts","../src/client.ts"],"sourcesContent":["import { z, type ZodTypeAny } from \"zod\";\n\n/**\n * Strongly‐typed enum for all possible API error codes.\n */\nexport const ApiErrorCode = z.enum([\n\t\"UNAUTHORIZED\",\n\t\"NOT_FOUND\",\n\t\"INTERNAL_SERVER_ERROR\",\n\t\"INVALID_INPUT_DATA\",\n]);\n\n/**\n * Fields shared by both success and error envelopes (but not the discriminant).\n */\nconst BaseEnvelopeFields = z.object({\n\tstatusCode: z.number(),\n\trequestId: z.string(),\n});\n\n/**\n * Specific details carried in an error payload.\n */\nexport const ApiErrorPayloadSchema = z\n\t.object({\n\t\tcode: ApiErrorCode,\n\t\tmessage: z.string(),\n\t\tdetails: z.string().optional(),\n\t\tpath: z.string().optional(),\n\t\ttimestamp: z.string().optional(),\n\t})\n\t.strict();\n\nexport type ApiErrorPayload = z.infer<typeof ApiErrorPayloadSchema>;\n\n/**\n * Full “envelope” when the API has failed.\n */\nexport const ApiErrorResponseSchema = BaseEnvelopeFields.extend({\n\tstatus: z.literal(\"error\"),\n\terror: ApiErrorPayloadSchema,\n}).strict();\n\nexport type ApiErrorResponse = z.infer<typeof ApiErrorResponseSchema>;\n\n/**\n * Schema for a successful API response, given some data schema T.\n */\nexport function ApiSuccessResponseSchema<T extends ZodTypeAny>(dataSchema: T) {\n\treturn BaseEnvelopeFields.extend({\n\t\tstatus: z.literal(\"success\"),\n\t\tdata: dataSchema,\n\t}).strict();\n}\n\n/**\n * Union of success or error envelopes, discriminated on `status`.\n */\nexport function ApiResponseSchema<T extends ZodTypeAny>(dataSchema: T) {\n\tconst successSchema = ApiSuccessResponseSchema(dataSchema);\n\tconst errorSchema = ApiErrorResponseSchema;\n\treturn z.discriminatedUnion(\"status\", [successSchema, errorSchema]);\n}\n","import type { z, ZodTypeAny } from \"zod\";\nimport type { ApiErrorPayloadSchema } from \"./schemas/response\";\nimport { ApiResponseSchema } from \"./schemas/response\";\n\n/**\n * API-level error thrown when { status: 'error' } is returned\n */\nexport class ApiClientError extends Error {\n\tpublic code: string;\n\tpublic details?: string;\n\tpublic path?: string;\n\tpublic timestamp?: string;\n\n\tconstructor(\n\t\tpublic payload: z.infer<typeof ApiErrorPayloadSchema>,\n\t\tpublic statusCode: number,\n\t\tpublic requestId?: string,\n\t) {\n\t\tsuper(payload.message);\n\t\tthis.name = \"ApiError\";\n\t\tthis.code = payload.code;\n\t\tthis.details = payload.details;\n\t\tthis.path = payload.path;\n\t\tthis.timestamp = payload.timestamp;\n\t}\n}\n\n/**\n * Configuration options for the API client\n */\nexport type ApiClientConfig =\n\t| {\n\t\t\t// Standard configuration.\n\t\t\t// Intended for external clients using an API key issued via API Gateway.\n\t\t\tbaseUrl: string;\n\t\t\tapiKey: string;\n\t\t\tapiToken?: never;\n\t\t\tfetch?: typeof fetch;\n\t }\n\t| {\n\t\t\t// Alternative configuration.\n\t\t\t// Reserved for client with access to a bearer token (e.g. The e2e tests).\n\t\t\tbaseUrl: string;\n\t\t\tapiKey?: never;\n\t\t\tapiToken: string;\n\t\t\tfetch?: typeof fetch;\n\t };\n\nexport class BaseApiClient {\n\tprotected config: ApiClientConfig;\n\n\tconstructor(config: ApiClientConfig) {\n\t\tthis.config = {\n\t\t\t...config,\n\t\t\tfetch: config.fetch || fetch,\n\t\t};\n\t\tthis.config.baseUrl = this.config.baseUrl.replace(/\\/+$/, \"\"); // strip trailing slashes\n\t}\n\n\t/**\n\t * Generic HTTP request to a JSON API\n\t */\n\tprotected async request<\n\t\tReqSchema extends ZodTypeAny | undefined,\n\t\tResponseDataSchema extends ZodTypeAny,\n\t>(\n\t\tmethod: \"GET\" | \"PUT\" | \"POST\" | \"DELETE\",\n\t\tpath: string,\n\t\topts: {\n\t\t\trequestSchema?: ReqSchema;\n\t\t\tbody?: ReqSchema extends ZodTypeAny ? z.infer<ReqSchema> : unknown;\n\t\t\tresponseDataSchema: ResponseDataSchema;\n\t\t},\n\t): Promise<z.infer<ResponseDataSchema>> {\n\t\t// Validate request body if provided\n\t\tlet bodyPayload = opts.body;\n\t\tif (opts.requestSchema && opts.body !== undefined) {\n\t\t\tbodyPayload = opts.requestSchema.parse(opts.body);\n\t\t}\n\n\t\t// Build URL + query string\n\t\tconst url = new URL(this.config.baseUrl + path);\n\n\t\t// Perform fetch\n\t\tconst response = await this.config.fetch!(url.toString(), {\n\t\t\tmethod,\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t...(this.config.apiKey\n\t\t\t\t\t? { \"x-api-key\": this.config.apiKey }\n\t\t\t\t\t: { Authorization: `Bearer ${this.config.apiToken}` }),\n\t\t\t},\n\t\t\tbody: bodyPayload ? JSON.stringify(bodyPayload) : undefined,\n\t\t});\n\n\t\tconst json = await response.json();\n\t\tconst parsedJson = ApiResponseSchema(opts.responseDataSchema).parse(json);\n\n\t\tif (\"error\" in parsedJson) {\n\t\t\tthrow new ApiClientError(parsedJson.error, parsedJson.statusCode, parsedJson.requestId);\n\t\t} else if (!(\"data\" in parsedJson)) {\n\t\t\tthrow new ApiClientError(\n\t\t\t\t{\n\t\t\t\t\tcode: \"INTERNAL_SERVER_ERROR\",\n\t\t\t\t\tmessage: \"Unexpected API response format\",\n\t\t\t\t\tdetails: 'Response did not contain expected \"data\" field',\n\t\t\t\t},\n\t\t\t\t500,\n\t\t\t\tparsedJson.requestId,\n\t\t\t);\n\t\t}\n\n\t\treturn parsedJson.data;\n\t}\n\n\t/**\n\t * GET convenience method inferring response type from schema\n\t */\n\tprotected get<ResponseDataSchema extends ZodTypeAny>(\n\t\tpath: string,\n\t\tresponseDataSchema: ResponseDataSchema,\n\t): Promise<z.infer<ResponseDataSchema>> {\n\t\treturn this.request(\"GET\", path, { responseDataSchema });\n\t}\n\n\t/**\n\t * PUT convenience method inferring both request and response types\n\t */\n\tprotected put<ReqSchema extends ZodTypeAny, ResponseDataSchema extends ZodTypeAny>(\n\t\tpath: string,\n\t\tbody: z.infer<ReqSchema>,\n\t\trequestSchema: ReqSchema,\n\t\tresponseDataSchema: ResponseDataSchema,\n\t): Promise<z.infer<ResponseDataSchema>> {\n\t\treturn this.request(\"PUT\", path, { body, requestSchema, responseDataSchema });\n\t}\n}\n","import { z } from \"zod\";\nimport { ProseMirrorDocSchema } from \"../../prosemirror\";\n\n//\n// 1) REUSABLE SCHEMAS FOR COMMON STRUCTURES\n//\n\n/**\n * A generic schema representing a heading used across various slices.\n * - `text`: The display text of the heading.\n * - `href`: An optional URL that the heading links to.\n */\nconst HeadingSchema = z.object({\n\ttext: z.string(),\n\thref: z.string().url().optional(),\n});\n\n/**\n * Base “properties” common to most page slices.\n * - `heading`: An optional heading object for slices that can display a title.\n */\nconst BasePageItemProps = z.object({\n\theading: HeadingSchema.optional(),\n});\n\n/**\n * Extended properties for any “graphics”-type slice.\n * In addition to base properties, these slices must specify how the graphic is displayed.\n * - `displayBehaviour`: Determines if the graphic stands alone or is associated with other content.\n */\nconst BaseGraphicsItemProps = BasePageItemProps.extend({\n\tdisplayBehaviour: z.enum([\"standalone\", \"associated\"]),\n});\n\n/**\n * A schema to validate that a string is valid JSON.\n */\nconst ValidJSONStringSchema = z.string().refine(\n\t(val) => {\n\t\ttry {\n\t\t\tJSON.parse(val);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t},\n\t{ message: \"Invalid JSON string\" },\n);\n\n//\n// 2) GENERIC HELPER TO DEFINE “SLICE” INPUT/OUTPUT SCHEMAS\n//\n\n/**\n * A union type to represent either a Zod object schema or an optional Zod object schema.\n */\ntype OptionalOrRequiredZodObject = z.AnyZodObject | z.ZodOptional<z.AnyZodObject>;\n\n/**\n * Helper function that, given:\n * - `typeName`: A string literal identifying the slice type.\n * - `propsShape`: A Zod schema describing the slice’s `properties`.\n *\n * Returns an object containing two schemas:\n * - `InputSchema`: For client-side input; `sliceId` is optional.\n * - `OutputSchema`: For server-side/output; `sliceId` is required.\n *\n * This is useful because when defining slices we often want to allow -\n * clients to submit slices without an ID (e.g., when creating new slices),\n */\nfunction defineSliceSchema<T extends string, P extends OptionalOrRequiredZodObject>(options: {\n\ttypeName: T;\n\tpropsShape: P;\n}) {\n\tconst { typeName, propsShape } = options;\n\n\t// Base schema shared by both input and output:\n\t// - `type`: Literal string identifying which slice this is.\n\t// - `hidden`: Optional flag to mark the slice as hidden.\n\t// - `properties`: The detailed properties shape for the slice.\n\tconst BaseSchema = z.object({\n\t\ttype: z.literal(typeName),\n\t\thidden: z.boolean().optional(),\n\t\tproperties: propsShape,\n\t});\n\n\t/**\n\t * Input schema: For client submissions.\n\t * - `sliceId` is optional because the client might not specify it yet.\n\t */\n\tconst InputSchema = BaseSchema.extend({\n\t\tsliceId: z.string().uuid().optional(),\n\t});\n\n\t/**\n\t * Output schema: For persisted or server-returned data.\n\t * - `sliceId` is required (each saved slice must have an ID).\n\t */\n\tconst OutputSchema = BaseSchema.extend({\n\t\tsliceId: z.string().uuid(),\n\t});\n\n\treturn { InputSchema, OutputSchema };\n}\n\n//\n// 3) DEFINE INDIVIDUAL SLICE TYPES (INPUT & OUTPUT) USING THE HELPER\n//\n\n// 3.A “HomepageSlice”\n// - A generic homepage slice that may include an optional heading.\n// - Input: Clients can pass `properties` or omit entirely.\n// - Output: Always includes a `properties` object (may be empty) and a required `sliceId`.\nconst HomepageSlice = defineSliceSchema({\n\ttypeName: \"HomepageSlice\",\n\tpropsShape: BasePageItemProps.optional(),\n});\n\n// 3.B “FlourishGraphicSlice”\n// - A slice to embed or reference a Flourish graphic by its ID.\n// - Extends graphic base properties with `flourishId`.\nconst FlourishGraphicSlice = defineSliceSchema({\n\ttypeName: \"FlourishGraphic\",\n\tpropsShape: BaseGraphicsItemProps.extend({\n\t\tflourishDescription: z.string().optional(), // Optional description for the Flourish graphic\n\t\tflourishId: z.string().nonempty(),\n\t}),\n});\n\n// 3.C “CustomIframeSlice”\n// - A slice that renders a custom iframe.\n// - Extends graphic base properties with `iframeSrc`.\nconst CustomIframeSlice = defineSliceSchema({\n\ttypeName: \"CustomIframe\",\n\tpropsShape: BaseGraphicsItemProps.extend({\n\t\tiframeSrc: z.string().url().nonempty(),\n\t}),\n});\n\n// 3.D “ExperimentSlice”\n// - A slice for embedding experimental content.\n// - Requires an `experimentId`, `experimentName`, and a JSON string (`contentJson`).\nconst ExperimentSlice = defineSliceSchema({\n\ttypeName: \"Experiment\",\n\tpropsShape: BasePageItemProps.extend({\n\t\texperimentId: z.string().nonempty(), // Unique ID for the experiment\n\t\texperimentName: z.string().nonempty(), // Human-readable name of the experiment\n\t\tcontentJson: ValidJSONStringSchema, // The experiment’s JSON payload as a valid JSON string\n\t}),\n});\n\n// 3.E \"Strip\"\n// - A slice that displays a strip of content.\nconst StripSlice = defineSliceSchema({\n\ttypeName: \"Strip\",\n\tpropsShape: BasePageItemProps.extend({\n\t\tlistId: z.string().uuid(), // The ID of the strip to display\n\t\tmaxStories: z.number().int().min(1), // Maximum number of stories to display in the strip\n\t}),\n});\n\n// 3.F \"TopperSlice\"\n// - A slice that displays a topper section with description and optional strapline.\nconst TopperSlice = defineSliceSchema({\n\ttypeName: \"Topper\",\n\tpropsShape: BasePageItemProps.extend({\n\t\tdescription: ProseMirrorDocSchema,\n\t\tstrapline: z.string().optional(),\n\t}),\n});\n\n// 3.F \"Hero\"\n// - A slice that represents a Hero on the page. It references a Spark List.\nconst HeroSlice = defineSliceSchema({\n\ttypeName: \"Hero\",\n\tpropsShape: BasePageItemProps.extend({\n\t\tlistId: z.string().uuid(), // The ID of the spark list to display\n\t\tmaxStories: z.number().int().min(1), // Maximum number of stories to display in the strip\n\t}),\n});\n\n//\n// 4) COMPOSE DISCRIMINATED UNIONS FOR “SLICE API” INPUT & OUTPUT\n//\n\n/**\n * All possible slice inputs for the Page API.\n * This discriminated union allows Zod to pick the correct schema based on the `type` field.\n */\nexport const SliceApiInputSchema = z.discriminatedUnion(\"type\", [\n\tHomepageSlice.InputSchema,\n\tFlourishGraphicSlice.InputSchema,\n\tCustomIframeSlice.InputSchema,\n\tExperimentSlice.InputSchema,\n\tStripSlice.InputSchema,\n\tTopperSlice.InputSchema,\n\tHeroSlice.InputSchema,\n] as const);\n\n/**\n * All possible slice outputs for the Page API.\n * The same discriminated union but with each slice requiring `sliceId`.\n */\nexport const SliceApiOutputSchema = z.discriminatedUnion(\"type\", [\n\tHomepageSlice.OutputSchema,\n\tFlourishGraphicSlice.OutputSchema,\n\tCustomIframeSlice.OutputSchema,\n\tExperimentSlice.OutputSchema,\n\tStripSlice.OutputSchema,\n\tTopperSlice.OutputSchema,\n\tHeroSlice.OutputSchema,\n] as const);\n\n//\n// 5) WRAPPER SCHEMAS FOR THE ENTIRE PAGE STRUCTURE\n//\n\nconst BasePagePropertiesSchema = z.object({\n\ttitle: z.string(),\n\tpageId: z.string().uuid(),\n\tconceptId: z.string().optional(),\n\tmetaDescription: z.string().optional(),\n\tpageTheme: z.string().optional(),\n\tsponsorText: z.string().optional(),\n\tsponsorImage: z.string().url().optional(),\n});\n\n/**\n * Page structure as submitted by clients.\n * - `properties`: Metadata about the page\n * - `children`: Array of slice inputs (each with an optional `sliceId`).\n */\nexport const PageStructureInputSchema = z.object({\n\tproperties: BasePagePropertiesSchema,\n\tchildren: z.array(SliceApiInputSchema),\n});\n\n/**\n * Page structure as submitted by clients.\n * - `properties`: Metadata about the page (title, list ID, page ID).\n * - `children`: Array of slice inputs (each with an optional `sliceId`).\n */\nexport const HomepageStructureInputSchema = PageStructureInputSchema.extend({\n\tproperties: BasePagePropertiesSchema.extend({\n\t\t// This is optional for the input. If clients don't send it, we generate a uuid.\n\t\thomepageListId: z.string().uuid(),\n\t}),\n});\n\n/**\n * Page structure as stored or returned by the server.\n */\nexport const PageStructureOutputSchema = z.object({\n\ttype: z.literal(\"Page\"),\n\tschemaVersion: z.number(),\n\tproperties: BasePagePropertiesSchema,\n\tchildren: z.array(SliceApiOutputSchema),\n});\n\nexport const HomepageStructureOutputSchema = PageStructureOutputSchema.extend({\n\ttype: z.literal(\"Homepage\"),\n\tproperties: BasePagePropertiesSchema.extend({\n\t\thomepageListId: z.string().uuid(),\n\t}),\n});\n\n//\n// 6) EXPORT TYPES FOR CONSUMPTION IN CODE\n//\n\n/** Client-side type for page structure input */\nexport type PageStructureInput = z.infer<typeof PageStructureInputSchema>;\n\n/** Server-side type for page structure output */\nexport type PageStructureOutput = z.infer<typeof PageStructureOutputSchema>;\n\n/** Client-side type for homepage structure input */\nexport type HomepageStructureInput = z.infer<typeof HomepageStructureInputSchema>;\n\n/** Server-side type for homepage structure output */\nexport type HomepageStructureOutput = z.infer<typeof HomepageStructureOutputSchema>;\n\n/** Union of all possible slice outputs for type-checking convenience */\nexport type Slice = z.infer<typeof SliceApiOutputSchema>;\n\n/** Individual slice output types */\nexport type HomepageSliceType = z.infer<typeof HomepageSlice.OutputSchema>;\nexport type FlourishGraphicSliceType = z.infer<typeof FlourishGraphicSlice.OutputSchema>;\nexport type CustomIframeSliceType = z.infer<typeof CustomIframeSlice.OutputSchema>;\nexport type ExperimentSliceType = z.infer<typeof ExperimentSlice.OutputSchema>;\nexport type StripSliceType = z.infer<typeof StripSlice.OutputSchema>;\nexport type TopperSliceType = z.infer<typeof TopperSlice.OutputSchema>;\nexport type HeroSliceType = z.infer<typeof HeroSlice.OutputSchema>;\n\n/**\n * Union type for interactive slices (i.e., the ones rendering visual components).\n * Useful for code that cares specifically about slices with visual/interactive content.\n */\nexport type InteractiveSlice = FlourishGraphicSliceType | CustomIframeSliceType;\n","import { z } from \"zod\";\n\n/** Accept http(s) and mailto: (matches your editor config) */\nconst HrefSchema = z.string().refine((v) => /^(https?:\\/\\/|mailto:).+/.test(v), {\n\tmessage: \"Expected http(s):// or mailto: URL\",\n});\n\n/** Link mark. */\nconst ProseMirrorLinkMark = z.object({\n\ttype: z.literal(\"link\"),\n\tattrs: z.object({\n\t\thref: HrefSchema,\n\t}),\n});\n\n/** Supported text marks */\nconst ProseMirrorMark = z.discriminatedUnion(\"type\", [\n\tProseMirrorLinkMark,\n\tz.object({ type: z.literal(\"bold\") }),\n\tz.object({ type: z.literal(\"italic\") }),\n\tz.object({ type: z.literal(\"underline\") }),\n\tz.object({ type: z.literal(\"strike\") }),\n]);\n\n/** Text node */\nconst ProseMirrorTextNode = z.object({\n\ttype: z.literal(\"text\"),\n\ttext: z.string(),\n\tmarks: z.array(ProseMirrorMark).optional(),\n});\n\n/** Paragraph node — content can be empty/omitted */\nconst ProseMirrorParagraphNode = z.object({\n\ttype: z.literal(\"paragraph\"),\n\tcontent: z.array(ProseMirrorTextNode),\n});\n\n/** ProseMirror Node Union. */\nconst ProseMirrorNode = z.union([ProseMirrorParagraphNode, ProseMirrorTextNode]);\n\n/** Root node of a ProseMirror document - enforcing at least 1 paragraph */\nexport const ProseMirrorDocSchema = z.object({\n\ttype: z.literal(\"doc\"),\n\tcontent: z\n\t\t.array(ProseMirrorNode)\n\t\t.min(1, { message: \"Document must contain at least one paragraph\" }),\n});\n\n/** Rich text editor TS type. */\nexport type RichTextEditorType = z.infer<typeof ProseMirrorDocSchema>;\n\nexport {};\n","import { BaseApiClient } from \"./base\";\nimport {\n\tHomepageStructureInputSchema,\n\tHomepageStructureOutputSchema,\n\ttype HomepageStructureInput,\n\ttype HomepageStructureOutput,\n} from \"./schemas/ftpink/page\";\n\n/**\n * Client for Homepage structure endpoints\n */\nexport class HomepageClient extends BaseApiClient {\n\tasync getStructure(pageId: string): Promise<HomepageStructureOutput> {\n\t\treturn this.get(`/v1/homepage/${pageId}/structure`, HomepageStructureOutputSchema);\n\t}\n\n\tasync getStructuresByHomepageListId(homepageListId: string): Promise<HomepageStructureOutput[]> {\n\t\treturn this.get(\n\t\t\t`/v1/homepage/list/${homepageListId}/structures`,\n\t\t\tHomepageStructureOutputSchema.array(),\n\t\t);\n\t}\n\n\tasync upsertStructure(\n\t\tpageId: string,\n\t\tdata: Omit<HomepageStructureInput, \"type\">,\n\t): Promise<HomepageStructureOutput> {\n\t\treturn this.put(\n\t\t\t`/v1/homepage/${pageId}/structure`,\n\t\t\tdata,\n\t\t\tHomepageStructureInputSchema,\n\t\t\tHomepageStructureOutputSchema,\n\t\t);\n\t}\n}\n","import { z } from \"zod\";\n\n/**\n * -----------------------------------------\n * Legacy API Schemas & Types\n *\n * These schemas map to expected types for Hub Pages rendered by dotcom-pages.\n * -----------------------------------------\n */\n\nconst LegacyFlourishChildSchema = z.object({\n\tsource: z.literal(\"flourish\"),\n\tproperties: z.object({\n\t\tid: z.string().min(1), // e.g. \"visualisation/21901162\"\n\t}),\n});\n\nconst LegacyListChildSchema = z.object({\n\tsource: z.literal(\"list\"),\n\tproperties: z.object({\n\t\tid: z.string().uuid(),\n\t\tmaxItems: z.number().optional(),\n\t}),\n});\n\nconst LegacyContainerChildSchema = z.discriminatedUnion(\"source\", [\n\tLegacyFlourishChildSchema,\n\tLegacyListChildSchema,\n]);\n\nconst LegacyTopperSchema = z.object({\n\ttype: z.literal(\"topper-basic\"),\n\tproperties: z.object({\n\t\ttitle: z.string(),\n\t\tsponsorText: z.string().optional(),\n\t\tsponsorImage: z.string().url().optional(),\n\t}),\n});\n\nconst LegacyInfoBoxSchema = z.object({\n\ttype: z.literal(\"info-box\"),\n\tproperties: z.object({\n\t\tbodyHTML: z.string(),\n\t}),\n});\n\nconst LegacyContainerSchema = z.object({\n\ttype: z.literal(\"container\"),\n\tchildren: z.array(LegacyContainerChildSchema).min(1),\n\tproperties: z.object({\n\t\ttitle: z.string().optional(),\n\t\tdesign: z.enum([\"chart\", \"four-story\", \"freeform\", \"hero-lead\"]).default(\"freeform\"),\n\t\tbackgroundColor: z.string().optional(),\n\t}),\n});\n\nconst LegacyExperimentSchema = z.object({\n\ttype: z.literal(\"experiment\"),\n\tchildren: z.tuple([]),\n\tproperties: z.object({\n\t\texperimentName: z.string(),\n\t\tid: z.string(),\n\t\ttitle: z.string().optional(),\n\t\tconfig: z\n\t\t\t.object({\n\t\t\t\tvalue: z.unknown().optional(),\n\t\t\t\t// Hub pages support experiments with HTML and Text.\n\t\t\t\t// For now we just support JSON. As we migrate pages, this may change.\n\t\t\t\tformat: z.enum([\"json\"]).default(\"json\"),\n\t\t\t})\n\t\t\t.partial()\n\t\t\t.optional(),\n\t}),\n});\n\nconst LegacyBlockSchema = z.discriminatedUnion(\"type\", [\n\tLegacyTopperSchema,\n\tLegacyInfoBoxSchema,\n\tLegacyContainerSchema,\n\tLegacyExperimentSchema,\n]);\n\nexport const LegacyPageStructureOutputSchema = z.object({\n\tuuid: z.string().uuid(),\n\tconceptId: z.string().uuid().optional(),\n\tthemeName: z.string().optional(),\n\tmetaDescription: z.string().optional(),\n\tblocks: z.array(LegacyBlockSchema),\n});\n\nexport type LegacyPageStructureOutput = z.infer<typeof LegacyPageStructureOutputSchema>;\nexport type LegacyBlock = z.infer<typeof LegacyBlockSchema>;\n","import { BaseApiClient } from \"./base\";\nimport type { LegacyPageStructureOutput } from \"./schemas/ftpink/legacyHubPage\";\nimport { LegacyPageStructureOutputSchema } from \"./schemas/ftpink/legacyHubPage\";\nimport {\n\tPageStructureInputSchema,\n\tPageStructureOutputSchema,\n\ttype PageStructureInput,\n\ttype PageStructureOutput,\n} from \"./schemas/ftpink/page\";\n\n/**\n * Client for Page structure endpoints\n */\nexport class PageClient extends BaseApiClient {\n\tasync getStructure(pageId: string): Promise<PageStructureOutput> {\n\t\treturn this.get(`/v1/page/${pageId}/structure`, PageStructureOutputSchema);\n\t}\n\n\tasync getLegacyHubPageStructure(pageId: string): Promise<LegacyPageStructureOutput> {\n\t\treturn this.get(`/v1/page/${pageId}/legacyHubPageStructure`, LegacyPageStructureOutputSchema);\n\t}\n\n\tasync upsertStructure(\n\t\tpageId: string,\n\t\tdata: Omit<PageStructureInput, \"type\">,\n\t): Promise<PageStructureOutput> {\n\t\treturn this.put(\n\t\t\t`/v1/page/${pageId}/structure`,\n\t\t\tdata,\n\t\t\tPageStructureInputSchema,\n\t\t\tPageStructureOutputSchema,\n\t\t);\n\t}\n}\n","import type { ApiClientConfig } from \"./base\";\nimport { BaseApiClient } from \"./base\";\nimport { HomepageClient } from \"./homepage\";\nimport { PageClient } from \"./page\";\n\n/**\n * Main API client that provides access to all API endpoints\n */\nexport class ApiClient extends BaseApiClient {\n\t/**\n\t * Homepage API endpoints\n\t */\n\thomepage: HomepageClient;\n\tpage: PageClient;\n\n\tconstructor(config: ApiClientConfig) {\n\t\tsuper(config);\n\n\t\t// Initialize sub-clients\n\t\tthis.homepage = new HomepageClient(config);\n\t\tthis.page = new PageClient(config);\n\t}\n}\n"],"mappings":"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","names":["z","z","z","z"]}
1
+ {"version":3,"sources":["../src/schemas/response.ts","../src/base.ts","../src/schemas/ftpink/page/index.ts","../src/schemas/prosemirror.ts","../src/homepage.ts","../src/schemas/ftpink/legacyHubPage/index.ts","../src/page.ts","../src/client.ts"],"sourcesContent":["import { z, type ZodTypeAny } from \"zod\";\n\n/**\n * Strongly‐typed enum for all possible API error codes.\n */\nexport const ApiErrorCode = z.enum([\n\t\"UNAUTHORIZED\",\n\t\"NOT_FOUND\",\n\t\"INTERNAL_SERVER_ERROR\",\n\t\"INVALID_INPUT_DATA\",\n]);\n\n/**\n * Fields shared by both success and error envelopes (but not the discriminant).\n */\nconst BaseEnvelopeFields = z.object({\n\tstatusCode: z.number(),\n\trequestId: z.string(),\n});\n\n/**\n * Specific details carried in an error payload.\n */\nexport const ApiErrorPayloadSchema = z\n\t.object({\n\t\tcode: ApiErrorCode,\n\t\tmessage: z.string(),\n\t\tdetails: z.string().optional(),\n\t\tpath: z.string().optional(),\n\t\ttimestamp: z.string().optional(),\n\t})\n\t.strict();\n\nexport type ApiErrorPayload = z.infer<typeof ApiErrorPayloadSchema>;\n\n/**\n * Full “envelope” when the API has failed.\n */\nexport const ApiErrorResponseSchema = BaseEnvelopeFields.extend({\n\tstatus: z.literal(\"error\"),\n\terror: ApiErrorPayloadSchema,\n}).strict();\n\nexport type ApiErrorResponse = z.infer<typeof ApiErrorResponseSchema>;\n\n/**\n * Schema for a successful API response, given some data schema T.\n */\nexport function ApiSuccessResponseSchema<T extends ZodTypeAny>(dataSchema: T) {\n\treturn BaseEnvelopeFields.extend({\n\t\tstatus: z.literal(\"success\"),\n\t\tdata: dataSchema,\n\t}).strict();\n}\n\n/**\n * Union of success or error envelopes, discriminated on `status`.\n */\nexport function ApiResponseSchema<T extends ZodTypeAny>(dataSchema: T) {\n\tconst successSchema = ApiSuccessResponseSchema(dataSchema);\n\tconst errorSchema = ApiErrorResponseSchema;\n\treturn z.discriminatedUnion(\"status\", [successSchema, errorSchema]);\n}\n","import type { z, ZodTypeAny } from \"zod\";\nimport type { ApiErrorPayloadSchema } from \"./schemas/response\";\nimport { ApiResponseSchema } from \"./schemas/response\";\n\n/**\n * API-level error thrown when { status: 'error' } is returned\n */\nexport class ApiClientError extends Error {\n\tpublic code: string;\n\tpublic details?: string;\n\tpublic path?: string;\n\tpublic timestamp?: string;\n\n\tconstructor(\n\t\tpublic payload: z.infer<typeof ApiErrorPayloadSchema>,\n\t\tpublic statusCode: number,\n\t\tpublic requestId?: string,\n\t) {\n\t\tsuper(payload.message);\n\t\tthis.name = \"ApiError\";\n\t\tthis.code = payload.code;\n\t\tthis.details = payload.details;\n\t\tthis.path = payload.path;\n\t\tthis.timestamp = payload.timestamp;\n\t}\n}\n\n/**\n * Configuration options for the API client\n */\nexport type ApiClientConfig =\n\t| {\n\t\t\t// Standard configuration.\n\t\t\t// Intended for external clients using an API key issued via API Gateway.\n\t\t\tbaseUrl: string;\n\t\t\tapiKey: string;\n\t\t\tapiToken?: never;\n\t\t\tfetch?: typeof fetch;\n\t }\n\t| {\n\t\t\t// Alternative configuration.\n\t\t\t// Reserved for client with access to a bearer token (e.g. The e2e tests).\n\t\t\tbaseUrl: string;\n\t\t\tapiKey?: never;\n\t\t\tapiToken: string;\n\t\t\tfetch?: typeof fetch;\n\t };\n\nexport class BaseApiClient {\n\tprotected config: ApiClientConfig;\n\n\tconstructor(config: ApiClientConfig) {\n\t\tthis.config = {\n\t\t\t...config,\n\t\t\tfetch: config.fetch || fetch,\n\t\t};\n\t\tthis.config.baseUrl = this.config.baseUrl.replace(/\\/+$/, \"\"); // strip trailing slashes\n\t}\n\n\t/**\n\t * Generic HTTP request to a JSON API\n\t */\n\tprotected async request<\n\t\tReqSchema extends ZodTypeAny | undefined,\n\t\tResponseDataSchema extends ZodTypeAny,\n\t>(\n\t\tmethod: \"GET\" | \"PUT\" | \"POST\" | \"DELETE\",\n\t\tpath: string,\n\t\topts: {\n\t\t\trequestSchema?: ReqSchema;\n\t\t\tbody?: ReqSchema extends ZodTypeAny ? z.infer<ReqSchema> : unknown;\n\t\t\tresponseDataSchema: ResponseDataSchema;\n\t\t},\n\t): Promise<z.infer<ResponseDataSchema>> {\n\t\t// Validate request body if provided\n\t\tlet bodyPayload = opts.body;\n\t\tif (opts.requestSchema && opts.body !== undefined) {\n\t\t\tbodyPayload = opts.requestSchema.parse(opts.body);\n\t\t}\n\n\t\t// Build URL + query string\n\t\tconst url = new URL(this.config.baseUrl + path);\n\n\t\t// Perform fetch\n\t\tconst response = await this.config.fetch!(url.toString(), {\n\t\t\tmethod,\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t...(this.config.apiKey\n\t\t\t\t\t? { \"x-api-key\": this.config.apiKey }\n\t\t\t\t\t: { Authorization: `Bearer ${this.config.apiToken}` }),\n\t\t\t},\n\t\t\tbody: bodyPayload ? JSON.stringify(bodyPayload) : undefined,\n\t\t});\n\n\t\tconst json = await response.json();\n\t\tconst parsedJson = ApiResponseSchema(opts.responseDataSchema).parse(json);\n\n\t\tif (\"error\" in parsedJson) {\n\t\t\tthrow new ApiClientError(parsedJson.error, parsedJson.statusCode, parsedJson.requestId);\n\t\t} else if (!(\"data\" in parsedJson)) {\n\t\t\tthrow new ApiClientError(\n\t\t\t\t{\n\t\t\t\t\tcode: \"INTERNAL_SERVER_ERROR\",\n\t\t\t\t\tmessage: \"Unexpected API response format\",\n\t\t\t\t\tdetails: 'Response did not contain expected \"data\" field',\n\t\t\t\t},\n\t\t\t\t500,\n\t\t\t\tparsedJson.requestId,\n\t\t\t);\n\t\t}\n\n\t\treturn parsedJson.data;\n\t}\n\n\t/**\n\t * GET convenience method inferring response type from schema\n\t */\n\tprotected get<ResponseDataSchema extends ZodTypeAny>(\n\t\tpath: string,\n\t\tresponseDataSchema: ResponseDataSchema,\n\t): Promise<z.infer<ResponseDataSchema>> {\n\t\treturn this.request(\"GET\", path, { responseDataSchema });\n\t}\n\n\t/**\n\t * PUT convenience method inferring both request and response types\n\t */\n\tprotected put<ReqSchema extends ZodTypeAny, ResponseDataSchema extends ZodTypeAny>(\n\t\tpath: string,\n\t\tbody: z.infer<ReqSchema>,\n\t\trequestSchema: ReqSchema,\n\t\tresponseDataSchema: ResponseDataSchema,\n\t): Promise<z.infer<ResponseDataSchema>> {\n\t\treturn this.request(\"PUT\", path, { body, requestSchema, responseDataSchema });\n\t}\n}\n","import { z } from \"zod\";\nimport { ProseMirrorDocSchema } from \"../../prosemirror\";\n\n//\n// 1) REUSABLE SCHEMAS FOR COMMON STRUCTURES\n//\n\n/**\n * A generic schema representing a heading used across various slices.\n * - `text`: The display text of the heading.\n * - `href`: An optional URL that the heading links to.\n */\nconst HeadingSchema = z.object({\n\ttext: z.string(),\n\thref: z.string().url().optional(),\n});\n\n/**\n * Base “properties” common to most page slices.\n * - `heading`: An optional heading object for slices that can display a title.\n */\nconst BasePageItemProps = z.object({\n\theading: HeadingSchema.optional(),\n});\n\n/**\n * Extended properties for any “graphics”-type slice.\n * In addition to base properties, these slices must specify how the graphic is displayed.\n * - `displayBehaviour`: Determines if the graphic stands alone or is associated with other content.\n */\nconst BaseGraphicsItemProps = BasePageItemProps.extend({\n\tdisplayBehaviour: z.enum([\"standalone\", \"associated\"]),\n});\n\n/**\n * A schema to validate that a string is valid JSON.\n */\nconst ValidJSONStringSchema = z.string().refine(\n\t(val) => {\n\t\ttry {\n\t\t\tJSON.parse(val);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t},\n\t{ message: \"Invalid JSON string\" },\n);\n\n//\n// 2) GENERIC HELPER TO DEFINE “SLICE” INPUT/OUTPUT SCHEMAS\n//\n\n/**\n * A union type to represent either a Zod object schema or an optional Zod object schema.\n */\ntype OptionalOrRequiredZodObject = z.AnyZodObject | z.ZodOptional<z.AnyZodObject>;\n\n/**\n * Helper function that, given:\n * - `typeName`: A string literal identifying the slice type.\n * - `propsShape`: A Zod schema describing the slice’s `properties`.\n *\n * Returns an object containing two schemas:\n * - `InputSchema`: For client-side input; `sliceId` is optional.\n * - `OutputSchema`: For server-side/output; `sliceId` is required.\n *\n * This is useful because when defining slices we often want to allow -\n * clients to submit slices without an ID (e.g., when creating new slices),\n */\nfunction defineSliceSchema<T extends string, P extends OptionalOrRequiredZodObject>(options: {\n\ttypeName: T;\n\tpropsShape: P;\n}) {\n\tconst { typeName, propsShape } = options;\n\n\t// Base schema shared by both input and output:\n\t// - `type`: Literal string identifying which slice this is.\n\t// - `hidden`: Optional flag to mark the slice as hidden.\n\t// - `properties`: The detailed properties shape for the slice.\n\tconst BaseSchema = z.object({\n\t\ttype: z.literal(typeName),\n\t\thidden: z.boolean().optional(),\n\t\tproperties: propsShape,\n\t});\n\n\t/**\n\t * Input schema: For client submissions.\n\t * - `sliceId` is optional because the client might not specify it yet.\n\t */\n\tconst InputSchema = BaseSchema.extend({\n\t\tsliceId: z.string().uuid().optional(),\n\t});\n\n\t/**\n\t * Output schema: For persisted or server-returned data.\n\t * - `sliceId` is required (each saved slice must have an ID).\n\t */\n\tconst OutputSchema = BaseSchema.extend({\n\t\tsliceId: z.string().uuid(),\n\t});\n\n\treturn { InputSchema, OutputSchema };\n}\n\n//\n// 3) DEFINE INDIVIDUAL SLICE TYPES (INPUT & OUTPUT) USING THE HELPER\n//\n\n// 3.A “HomepageSlice”\n// - A generic homepage slice that may include an optional heading.\n// - Input: Clients can pass `properties` or omit entirely.\n// - Output: Always includes a `properties` object (may be empty) and a required `sliceId`.\nconst HomepageSlice = defineSliceSchema({\n\ttypeName: \"HomepageSlice\",\n\tpropsShape: BasePageItemProps.optional(),\n});\n\n// 3.B “FlourishGraphicSlice”\n// - A slice to embed or reference a Flourish graphic by its ID.\n// - Extends graphic base properties with `flourishId`.\nconst FlourishGraphicSlice = defineSliceSchema({\n\ttypeName: \"FlourishGraphic\",\n\tpropsShape: BaseGraphicsItemProps.extend({\n\t\tflourishDescription: z.string().optional(), // Optional description for the Flourish graphic\n\t\tflourishId: z.string().nonempty(),\n\t}),\n});\n\n// 3.C “CustomIframeSlice”\n// - A slice that renders a custom iframe.\n// - Extends graphic base properties with `iframeSrc`.\nconst CustomIframeSlice = defineSliceSchema({\n\ttypeName: \"CustomIframe\",\n\tpropsShape: BaseGraphicsItemProps.extend({\n\t\tiframeSrc: z.string().url().nonempty(),\n\t}),\n});\n\n// 3.D “ExperimentSlice”\n// - A slice for embedding experimental content.\n// - Requires an `experimentId`, `experimentName`, and a JSON string (`contentJson`).\nconst ExperimentSlice = defineSliceSchema({\n\ttypeName: \"Experiment\",\n\tpropsShape: BasePageItemProps.extend({\n\t\texperimentId: z.string().nonempty(), // Unique ID for the experiment\n\t\texperimentName: z.string().nonempty(), // Human-readable name of the experiment\n\t\tcontentJson: ValidJSONStringSchema, // The experiment’s JSON payload as a valid JSON string\n\t}),\n});\n\n// 3.E \"Strip\"\n// - A slice that displays a strip of content.\nconst StripSlice = defineSliceSchema({\n\ttypeName: \"Strip\",\n\tpropsShape: BasePageItemProps.extend({\n\t\tlistId: z.string().uuid(), // The ID of the strip to display\n\t\tmaxStories: z.number().int().min(1), // Maximum number of stories to display in the strip\n\t}),\n});\n\n// 3.F \"TopperSlice\"\n// - A slice that displays a topper section with description and optional strapline.\nconst TopperSlice = defineSliceSchema({\n\ttypeName: \"Topper\",\n\tpropsShape: BasePageItemProps.extend({\n\t\tdescription: ProseMirrorDocSchema,\n\t\tstrapline: z.string().optional(),\n\t}),\n});\n\n// 3.F \"Hero\"\n// - A slice that represents a Hero on the page. It references a Spark List.\nconst HeroSlice = defineSliceSchema({\n\ttypeName: \"Hero\",\n\tpropsShape: BasePageItemProps.extend({\n\t\tlistId: z.string().uuid(), // The ID of the spark list to display\n\t\tmaxStories: z.number().int().min(1), // Maximum number of stories to display in the strip\n\t}),\n});\n\n//\n// 4) COMPOSE DISCRIMINATED UNIONS FOR “SLICE API” INPUT & OUTPUT\n//\n\n/**\n * All possible slice inputs for the Page API.\n * This discriminated union allows Zod to pick the correct schema based on the `type` field.\n */\nexport const SliceApiInputSchema = z.discriminatedUnion(\"type\", [\n\tHomepageSlice.InputSchema,\n\tFlourishGraphicSlice.InputSchema,\n\tCustomIframeSlice.InputSchema,\n\tExperimentSlice.InputSchema,\n\tStripSlice.InputSchema,\n\tTopperSlice.InputSchema,\n\tHeroSlice.InputSchema,\n] as const);\n\n/**\n * All possible slice outputs for the Page API.\n * The same discriminated union but with each slice requiring `sliceId`.\n */\nexport const SliceApiOutputSchema = z.discriminatedUnion(\"type\", [\n\tHomepageSlice.OutputSchema,\n\tFlourishGraphicSlice.OutputSchema,\n\tCustomIframeSlice.OutputSchema,\n\tExperimentSlice.OutputSchema,\n\tStripSlice.OutputSchema,\n\tTopperSlice.OutputSchema,\n\tHeroSlice.OutputSchema,\n] as const);\n\n//\n// 5) WRAPPER SCHEMAS FOR THE ENTIRE PAGE STRUCTURE\n//\n\nconst BasePagePropertiesSchema = z.object({\n\ttitle: z.string(),\n\tpageId: z.string().uuid(),\n\tpublicationId: z.string(),\n\tconceptId: z.string().optional(),\n\tmetaDescription: z.string().optional(),\n\tpageTheme: z.string().optional(),\n\tsponsorText: z.string().optional(),\n\tsponsorImage: z.string().url().optional(),\n});\n\n/**\n * Page structure as submitted by clients.\n * - `properties`: Metadata about the page\n * - `children`: Array of slice inputs (each with an optional `sliceId`).\n */\nexport const PageStructureInputSchema = z.object({\n\tproperties: BasePagePropertiesSchema,\n\tchildren: z.array(SliceApiInputSchema),\n});\n\n/**\n * Page structure as submitted by clients.\n * - `properties`: Metadata about the page (title, list ID, page ID).\n * - `children`: Array of slice inputs (each with an optional `sliceId`).\n */\nexport const HomepageStructureInputSchema = PageStructureInputSchema.extend({\n\tproperties: BasePagePropertiesSchema.extend({\n\t\t// This is optional for the input. If clients don't send it, we generate a uuid.\n\t\thomepageListId: z.string().uuid(),\n\t}),\n});\n\n/**\n * Page structure as stored or returned by the server.\n */\nexport const PageStructureOutputSchema = z.object({\n\ttype: z.literal(\"Page\"),\n\tschemaVersion: z.number(),\n\tproperties: BasePagePropertiesSchema,\n\tchildren: z.array(SliceApiOutputSchema),\n});\n\nexport const HomepageStructureOutputSchema = PageStructureOutputSchema.extend({\n\ttype: z.literal(\"Homepage\"),\n\tproperties: BasePagePropertiesSchema.extend({\n\t\thomepageListId: z.string().uuid(),\n\t}),\n});\n\n//\n// 6) EXPORT TYPES FOR CONSUMPTION IN CODE\n//\n\n/** Client-side type for page structure input */\nexport type PageStructureInput = z.infer<typeof PageStructureInputSchema>;\n\n/** Server-side type for page structure output */\nexport type PageStructureOutput = z.infer<typeof PageStructureOutputSchema>;\n\n/** Client-side type for homepage structure input */\nexport type HomepageStructureInput = z.infer<typeof HomepageStructureInputSchema>;\n\n/** Server-side type for homepage structure output */\nexport type HomepageStructureOutput = z.infer<typeof HomepageStructureOutputSchema>;\n\n/** Union of all possible slice outputs for type-checking convenience */\nexport type Slice = z.infer<typeof SliceApiOutputSchema>;\n\n/** Individual slice output types */\nexport type HomepageSliceType = z.infer<typeof HomepageSlice.OutputSchema>;\nexport type FlourishGraphicSliceType = z.infer<typeof FlourishGraphicSlice.OutputSchema>;\nexport type CustomIframeSliceType = z.infer<typeof CustomIframeSlice.OutputSchema>;\nexport type ExperimentSliceType = z.infer<typeof ExperimentSlice.OutputSchema>;\nexport type StripSliceType = z.infer<typeof StripSlice.OutputSchema>;\nexport type TopperSliceType = z.infer<typeof TopperSlice.OutputSchema>;\nexport type HeroSliceType = z.infer<typeof HeroSlice.OutputSchema>;\n\n/**\n * Union type for interactive slices (i.e., the ones rendering visual components).\n * Useful for code that cares specifically about slices with visual/interactive content.\n */\nexport type InteractiveSlice = FlourishGraphicSliceType | CustomIframeSliceType;\n","import { z } from \"zod\";\n\n/** Accept http(s) and mailto: (matches your editor config) */\nconst HrefSchema = z.string().refine((v) => /^(https?:\\/\\/|mailto:).+/.test(v), {\n\tmessage: \"Expected http(s):// or mailto: URL\",\n});\n\n/** Link mark. */\nconst ProseMirrorLinkMark = z.object({\n\ttype: z.literal(\"link\"),\n\tattrs: z.object({\n\t\thref: HrefSchema,\n\t}),\n});\n\n/** Supported text marks */\nconst ProseMirrorMark = z.discriminatedUnion(\"type\", [\n\tProseMirrorLinkMark,\n\tz.object({ type: z.literal(\"bold\") }),\n\tz.object({ type: z.literal(\"italic\") }),\n\tz.object({ type: z.literal(\"underline\") }),\n\tz.object({ type: z.literal(\"strike\") }),\n]);\n\n/** Text node */\nconst ProseMirrorTextNode = z.object({\n\ttype: z.literal(\"text\"),\n\ttext: z.string(),\n\tmarks: z.array(ProseMirrorMark).optional(),\n});\n\n/** Paragraph node — content can be empty/omitted */\nconst ProseMirrorParagraphNode = z.object({\n\ttype: z.literal(\"paragraph\"),\n\tcontent: z.array(ProseMirrorTextNode),\n});\n\n/** ProseMirror Node Union. */\nconst ProseMirrorNode = z.union([ProseMirrorParagraphNode, ProseMirrorTextNode]);\n\n/** Root node of a ProseMirror document - enforcing at least 1 paragraph */\nexport const ProseMirrorDocSchema = z.object({\n\ttype: z.literal(\"doc\"),\n\tcontent: z\n\t\t.array(ProseMirrorNode)\n\t\t.min(1, { message: \"Document must contain at least one paragraph\" }),\n});\n\n/** Rich text editor TS type. */\nexport type RichTextEditorType = z.infer<typeof ProseMirrorDocSchema>;\n\nexport {};\n","import { BaseApiClient } from \"./base\";\nimport {\n\tHomepageStructureInputSchema,\n\tHomepageStructureOutputSchema,\n\ttype HomepageStructureInput,\n\ttype HomepageStructureOutput,\n} from \"./schemas/ftpink/page\";\n\n/**\n * Client for Homepage structure endpoints\n */\nexport class HomepageClient extends BaseApiClient {\n\tasync getStructure(pageId: string): Promise<HomepageStructureOutput> {\n\t\treturn this.get(`/v1/homepage/${pageId}/structure`, HomepageStructureOutputSchema);\n\t}\n\n\tasync getStructuresByHomepageListId(homepageListId: string): Promise<HomepageStructureOutput[]> {\n\t\treturn this.get(\n\t\t\t`/v1/homepage/list/${homepageListId}/structures`,\n\t\t\tHomepageStructureOutputSchema.array(),\n\t\t);\n\t}\n\n\tasync upsertStructure(\n\t\tpageId: string,\n\t\tdata: Omit<HomepageStructureInput, \"type\">,\n\t): Promise<HomepageStructureOutput> {\n\t\treturn this.put(\n\t\t\t`/v1/homepage/${pageId}/structure`,\n\t\t\tdata,\n\t\t\tHomepageStructureInputSchema,\n\t\t\tHomepageStructureOutputSchema,\n\t\t);\n\t}\n}\n","import { z } from \"zod\";\n\n/**\n * -----------------------------------------\n * Legacy API Schemas & Types\n *\n * These schemas map to expected types for Hub Pages rendered by dotcom-pages.\n * -----------------------------------------\n */\n\nconst LegacyFlourishChildSchema = z.object({\n\tsource: z.literal(\"flourish\"),\n\tproperties: z.object({\n\t\tid: z.string().min(1), // e.g. \"visualisation/21901162\"\n\t}),\n});\n\nconst LegacyListChildSchema = z.object({\n\tsource: z.literal(\"list\"),\n\tproperties: z.object({\n\t\tid: z.string().uuid(),\n\t\tmaxItems: z.number().optional(),\n\t}),\n});\n\nconst LegacyContainerChildSchema = z.discriminatedUnion(\"source\", [\n\tLegacyFlourishChildSchema,\n\tLegacyListChildSchema,\n]);\n\nconst LegacyTopperSchema = z.object({\n\ttype: z.literal(\"topper-basic\"),\n\tproperties: z.object({\n\t\ttitle: z.string(),\n\t\tsponsorText: z.string().optional(),\n\t\tsponsorImage: z.string().url().optional(),\n\t}),\n});\n\nconst LegacyInfoBoxSchema = z.object({\n\ttype: z.literal(\"info-box\"),\n\tproperties: z.object({\n\t\tbodyHTML: z.string(),\n\t}),\n});\n\nconst LegacyContainerSchema = z.object({\n\ttype: z.literal(\"container\"),\n\tchildren: z.array(LegacyContainerChildSchema).min(1),\n\tproperties: z.object({\n\t\ttitle: z.string().optional(),\n\t\tdesign: z.enum([\"chart\", \"four-story\", \"freeform\", \"hero-lead\"]).default(\"freeform\"),\n\t\tbackgroundColor: z.string().optional(),\n\t}),\n});\n\nconst LegacyExperimentSchema = z.object({\n\ttype: z.literal(\"experiment\"),\n\tchildren: z.tuple([]),\n\tproperties: z.object({\n\t\texperimentName: z.string(),\n\t\tid: z.string(),\n\t\ttitle: z.string().optional(),\n\t\tconfig: z\n\t\t\t.object({\n\t\t\t\tvalue: z.unknown().optional(),\n\t\t\t\t// Hub pages support experiments with HTML and Text.\n\t\t\t\t// For now we just support JSON. As we migrate pages, this may change.\n\t\t\t\tformat: z.enum([\"json\"]).default(\"json\"),\n\t\t\t})\n\t\t\t.partial()\n\t\t\t.optional(),\n\t}),\n});\n\nconst LegacyBlockSchema = z.discriminatedUnion(\"type\", [\n\tLegacyTopperSchema,\n\tLegacyInfoBoxSchema,\n\tLegacyContainerSchema,\n\tLegacyExperimentSchema,\n]);\n\nexport const LegacyPageStructureOutputSchema = z.object({\n\tuuid: z.string().uuid(),\n\ttitle: z.string(),\n\tconceptId: z.string().uuid().optional(),\n\tthemeName: z.string().optional(),\n\tmetaDescription: z.string().optional(),\n\tblocks: z.array(LegacyBlockSchema),\n});\n\nexport type LegacyPageStructureOutput = z.infer<typeof LegacyPageStructureOutputSchema>;\nexport type LegacyBlock = z.infer<typeof LegacyBlockSchema>;\n","import { BaseApiClient } from \"./base\";\nimport type { LegacyPageStructureOutput } from \"./schemas/ftpink/legacyHubPage\";\nimport { LegacyPageStructureOutputSchema } from \"./schemas/ftpink/legacyHubPage\";\nimport {\n\tPageStructureInputSchema,\n\tPageStructureOutputSchema,\n\ttype PageStructureInput,\n\ttype PageStructureOutput,\n} from \"./schemas/ftpink/page\";\n\n/**\n * Client for Page structure endpoints\n */\nexport class PageClient extends BaseApiClient {\n\tasync getStructure(pageId: string): Promise<PageStructureOutput> {\n\t\treturn this.get(`/v1/page/${pageId}/structure`, PageStructureOutputSchema);\n\t}\n\n\tasync getLegacyHubPageStructure(pageId: string): Promise<LegacyPageStructureOutput> {\n\t\treturn this.get(`/v1/page/${pageId}/legacyHubPageStructure`, LegacyPageStructureOutputSchema);\n\t}\n\n\tasync upsertStructure(\n\t\tpageId: string,\n\t\tdata: Omit<PageStructureInput, \"type\">,\n\t): Promise<PageStructureOutput> {\n\t\treturn this.put(\n\t\t\t`/v1/page/${pageId}/structure`,\n\t\t\tdata,\n\t\t\tPageStructureInputSchema,\n\t\t\tPageStructureOutputSchema,\n\t\t);\n\t}\n}\n","import type { ApiClientConfig } from \"./base\";\nimport { BaseApiClient } from \"./base\";\nimport { HomepageClient } from \"./homepage\";\nimport { PageClient } from \"./page\";\n\n/**\n * Main API client that provides access to all API endpoints\n */\nexport class ApiClient extends BaseApiClient {\n\t/**\n\t * Homepage API endpoints\n\t */\n\thomepage: HomepageClient;\n\tpage: PageClient;\n\n\tconstructor(config: ApiClientConfig) {\n\t\tsuper(config);\n\n\t\t// Initialize sub-clients\n\t\tthis.homepage = new HomepageClient(config);\n\t\tthis.page = new PageClient(config);\n\t}\n}\n"],"mappings":"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","names":["z","z","z","z"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@financial-times/content-curation-client",
3
- "version": "2.4.0",
3
+ "version": "3.0.0",
4
4
  "description": "Client library for Content Curation API",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",