@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.
- package/dist/_tsup-dts-rollup.d.cts +23 -0
- package/dist/_tsup-dts-rollup.d.ts +23 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/financial-times-content-curation-client-2.4.0.tgz +0 -0
|
@@ -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(),
|
package/dist/index.cjs.map
CHANGED
|
@@ -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":";AAAA,SAAS,SAA0B;AAK5B,IAAM,eAAe,EAAE,KAAK;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,CAAC;AAKD,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACnC,YAAY,EAAE,OAAO;AAAA,EACrB,WAAW,EAAE,OAAO;AACrB,CAAC;AAKM,IAAM,wBAAwB,EACnC,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS,EAAE,OAAO;AAAA,EAClB,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,WAAW,EAAE,OAAO,EAAE,SAAS;AAChC,CAAC,EACA,OAAO;AAOF,IAAM,yBAAyB,mBAAmB,OAAO;AAAA,EAC/D,QAAQ,EAAE,QAAQ,OAAO;AAAA,EACzB,OAAO;AACR,CAAC,EAAE,OAAO;AAOH,SAAS,yBAA+C,YAAe;AAC7E,SAAO,mBAAmB,OAAO;AAAA,IAChC,QAAQ,EAAE,QAAQ,SAAS;AAAA,IAC3B,MAAM;AAAA,EACP,CAAC,EAAE,OAAO;AACX;AAKO,SAAS,kBAAwC,YAAe;AACtE,QAAM,gBAAgB,yBAAyB,UAAU;AACzD,QAAM,cAAc;AACpB,SAAO,EAAE,mBAAmB,UAAU,CAAC,eAAe,WAAW,CAAC;AACnE;;;ACvDO,IAAM,iBAAN,cAA6B,MAAM;AAAA,EAMzC,YACQ,SACA,YACA,WACN;AACD,UAAM,QAAQ,OAAO;AAJd;AACA;AACA;AAGP,SAAK,OAAO;AACZ,SAAK,OAAO,QAAQ;AACpB,SAAK,UAAU,QAAQ;AACvB,SAAK,OAAO,QAAQ;AACpB,SAAK,YAAY,QAAQ;AAAA,EAC1B;AAAA,EAhBO;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAcR;AAuBO,IAAM,gBAAN,MAAoB;AAAA,EAChB;AAAA,EAEV,YAAY,QAAyB;AACpC,SAAK,SAAS;AAAA,MACb,GAAG;AAAA,MACH,OAAO,OAAO,SAAS;AAAA,IACxB;AACA,SAAK,OAAO,UAAU,KAAK,OAAO,QAAQ,QAAQ,QAAQ,EAAE;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,QAIf,QACA,MACA,MAKuC;AAEvC,QAAI,cAAc,KAAK;AACvB,QAAI,KAAK,iBAAiB,KAAK,SAAS,QAAW;AAClD,oBAAc,KAAK,cAAc,MAAM,KAAK,IAAI;AAAA,IACjD;AAGA,UAAM,MAAM,IAAI,IAAI,KAAK,OAAO,UAAU,IAAI;AAG9C,UAAM,WAAW,MAAM,KAAK,OAAO,MAAO,IAAI,SAAS,GAAG;AAAA,MACzD;AAAA,MACA,SAAS;AAAA,QACR,gBAAgB;AAAA,QAChB,GAAI,KAAK,OAAO,SACb,EAAE,aAAa,KAAK,OAAO,OAAO,IAClC,EAAE,eAAe,UAAU,KAAK,OAAO,QAAQ,GAAG;AAAA,MACtD;AAAA,MACA,MAAM,cAAc,KAAK,UAAU,WAAW,IAAI;AAAA,IACnD,CAAC;AAED,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,UAAM,aAAa,kBAAkB,KAAK,kBAAkB,EAAE,MAAM,IAAI;AAExE,QAAI,WAAW,YAAY;AAC1B,YAAM,IAAI,eAAe,WAAW,OAAO,WAAW,YAAY,WAAW,SAAS;AAAA,IACvF,WAAW,EAAE,UAAU,aAAa;AACnC,YAAM,IAAI;AAAA,QACT;AAAA,UACC,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS;AAAA,QACV;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACZ;AAAA,IACD;AAEA,WAAO,WAAW;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKU,IACT,MACA,oBACuC;AACvC,WAAO,KAAK,QAAQ,OAAO,MAAM,EAAE,mBAAmB,CAAC;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKU,IACT,MACA,MACA,eACA,oBACuC;AACvC,WAAO,KAAK,QAAQ,OAAO,MAAM,EAAE,MAAM,eAAe,mBAAmB,CAAC;AAAA,EAC7E;AACD;;;ACxIA,SAAS,KAAAA,UAAS;;;ACAlB,SAAS,KAAAC,UAAS;AAGlB,IAAM,aAAaA,GAAE,OAAO,EAAE,OAAO,CAAC,MAAM,2BAA2B,KAAK,CAAC,GAAG;AAAA,EAC/E,SAAS;AACV,CAAC;AAGD,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EACpC,MAAMA,GAAE,QAAQ,MAAM;AAAA,EACtB,OAAOA,GAAE,OAAO;AAAA,IACf,MAAM;AAAA,EACP,CAAC;AACF,CAAC;AAGD,IAAM,kBAAkBA,GAAE,mBAAmB,QAAQ;AAAA,EACpD;AAAA,EACAA,GAAE,OAAO,EAAE,MAAMA,GAAE,QAAQ,MAAM,EAAE,CAAC;AAAA,EACpCA,GAAE,OAAO,EAAE,MAAMA,GAAE,QAAQ,QAAQ,EAAE,CAAC;AAAA,EACtCA,GAAE,OAAO,EAAE,MAAMA,GAAE,QAAQ,WAAW,EAAE,CAAC;AAAA,EACzCA,GAAE,OAAO,EAAE,MAAMA,GAAE,QAAQ,QAAQ,EAAE,CAAC;AACvC,CAAC;AAGD,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EACpC,MAAMA,GAAE,QAAQ,MAAM;AAAA,EACtB,MAAMA,GAAE,OAAO;AAAA,EACf,OAAOA,GAAE,MAAM,eAAe,EAAE,SAAS;AAC1C,CAAC;AAGD,IAAM,2BAA2BA,GAAE,OAAO;AAAA,EACzC,MAAMA,GAAE,QAAQ,WAAW;AAAA,EAC3B,SAASA,GAAE,MAAM,mBAAmB;AACrC,CAAC;AAGD,IAAM,kBAAkBA,GAAE,MAAM,CAAC,0BAA0B,mBAAmB,CAAC;AAGxE,IAAM,uBAAuBA,GAAE,OAAO;AAAA,EAC5C,MAAMA,GAAE,QAAQ,KAAK;AAAA,EACrB,SAASA,GACP,MAAM,eAAe,EACrB,IAAI,GAAG,EAAE,SAAS,+CAA+C,CAAC;AACrE,CAAC;;;ADlCD,IAAM,gBAAgBC,GAAE,OAAO;AAAA,EAC9B,MAAMA,GAAE,OAAO;AAAA,EACf,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AACjC,CAAC;AAMD,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EAClC,SAAS,cAAc,SAAS;AACjC,CAAC;AAOD,IAAM,wBAAwB,kBAAkB,OAAO;AAAA,EACtD,kBAAkBA,GAAE,KAAK,CAAC,cAAc,YAAY,CAAC;AACtD,CAAC;AAKD,IAAM,wBAAwBA,GAAE,OAAO,EAAE;AAAA,EACxC,CAAC,QAAQ;AACR,QAAI;AACH,WAAK,MAAM,GAAG;AACd,aAAO;AAAA,IACR,QAAQ;AACP,aAAO;AAAA,IACR;AAAA,EACD;AAAA,EACA,EAAE,SAAS,sBAAsB;AAClC;AAuBA,SAAS,kBAA2E,SAGjF;AACF,QAAM,EAAE,UAAU,WAAW,IAAI;AAMjC,QAAM,aAAaA,GAAE,OAAO;AAAA,IAC3B,MAAMA,GAAE,QAAQ,QAAQ;AAAA,IACxB,QAAQA,GAAE,QAAQ,EAAE,SAAS;AAAA,IAC7B,YAAY;AAAA,EACb,CAAC;AAMD,QAAM,cAAc,WAAW,OAAO;AAAA,IACrC,SAASA,GAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EACrC,CAAC;AAMD,QAAM,eAAe,WAAW,OAAO;AAAA,IACtC,SAASA,GAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,CAAC;AAED,SAAO,EAAE,aAAa,aAAa;AACpC;AAUA,IAAM,gBAAgB,kBAAkB;AAAA,EACvC,UAAU;AAAA,EACV,YAAY,kBAAkB,SAAS;AACxC,CAAC;AAKD,IAAM,uBAAuB,kBAAkB;AAAA,EAC9C,UAAU;AAAA,EACV,YAAY,sBAAsB,OAAO;AAAA,IACxC,qBAAqBA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA,IACzC,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,CAAC;AACF,CAAC;AAKD,IAAM,oBAAoB,kBAAkB;AAAA,EAC3C,UAAU;AAAA,EACV,YAAY,sBAAsB,OAAO;AAAA,IACxC,WAAWA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACtC,CAAC;AACF,CAAC;AAKD,IAAM,kBAAkB,kBAAkB;AAAA,EACzC,UAAU;AAAA,EACV,YAAY,kBAAkB,OAAO;AAAA,IACpC,cAAcA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA,IAClC,gBAAgBA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA,IACpC,aAAa;AAAA;AAAA,EACd,CAAC;AACF,CAAC;AAID,IAAM,aAAa,kBAAkB;AAAA,EACpC,UAAU;AAAA,EACV,YAAY,kBAAkB,OAAO;AAAA,IACpC,QAAQA,GAAE,OAAO,EAAE,KAAK;AAAA;AAAA,IACxB,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA;AAAA,EACnC,CAAC;AACF,CAAC;AAID,IAAM,cAAc,kBAAkB;AAAA,EACrC,UAAU;AAAA,EACV,YAAY,kBAAkB,OAAO;AAAA,IACpC,aAAa;AAAA,IACb,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,CAAC;AACF,CAAC;AAID,IAAM,YAAY,kBAAkB;AAAA,EACnC,UAAU;AAAA,EACV,YAAY,kBAAkB,OAAO;AAAA,IACpC,QAAQA,GAAE,OAAO,EAAE,KAAK;AAAA;AAAA,IACxB,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA;AAAA,EACnC,CAAC;AACF,CAAC;AAUM,IAAM,sBAAsBA,GAAE,mBAAmB,QAAQ;AAAA,EAC/D,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,UAAU;AACX,CAAU;AAMH,IAAM,uBAAuBA,GAAE,mBAAmB,QAAQ;AAAA,EAChE,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,UAAU;AACX,CAAU;AAMV,IAAM,2BAA2BA,GAAE,OAAO;AAAA,EACzC,OAAOA,GAAE,OAAO;AAAA,EAChB,QAAQA,GAAE,OAAO,EAAE,KAAK;AAAA,EACxB,eAAeA,GAAE,OAAO;AAAA,EACxB,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,iBAAiBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,cAAcA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AACzC,CAAC;AAOM,IAAM,2BAA2BA,GAAE,OAAO;AAAA,EAChD,YAAY;AAAA,EACZ,UAAUA,GAAE,MAAM,mBAAmB;AACtC,CAAC;AAOM,IAAM,+BAA+B,yBAAyB,OAAO;AAAA,EAC3E,YAAY,yBAAyB,OAAO;AAAA;AAAA,IAE3C,gBAAgBA,GAAE,OAAO,EAAE,KAAK;AAAA,EACjC,CAAC;AACF,CAAC;AAKM,IAAM,4BAA4BA,GAAE,OAAO;AAAA,EACjD,MAAMA,GAAE,QAAQ,MAAM;AAAA,EACtB,eAAeA,GAAE,OAAO;AAAA,EACxB,YAAY;AAAA,EACZ,UAAUA,GAAE,MAAM,oBAAoB;AACvC,CAAC;AAEM,IAAM,gCAAgC,0BAA0B,OAAO;AAAA,EAC7E,MAAMA,GAAE,QAAQ,UAAU;AAAA,EAC1B,YAAY,yBAAyB,OAAO;AAAA,IAC3C,gBAAgBA,GAAE,OAAO,EAAE,KAAK;AAAA,EACjC,CAAC;AACF,CAAC;;;AE9PM,IAAM,iBAAN,cAA6B,cAAc;AAAA,EACjD,MAAM,aAAa,QAAkD;AACpE,WAAO,KAAK,IAAI,gBAAgB,MAAM,cAAc,6BAA6B;AAAA,EAClF;AAAA,EAEA,MAAM,8BAA8B,gBAA4D;AAC/F,WAAO,KAAK;AAAA,MACX,qBAAqB,cAAc;AAAA,MACnC,8BAA8B,MAAM;AAAA,IACrC;AAAA,EACD;AAAA,EAEA,MAAM,gBACL,QACA,MACmC;AACnC,WAAO,KAAK;AAAA,MACX,gBAAgB,MAAM;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;;;AClCA,SAAS,KAAAC,UAAS;AAUlB,IAAM,4BAA4BA,GAAE,OAAO;AAAA,EAC1C,QAAQA,GAAE,QAAQ,UAAU;AAAA,EAC5B,YAAYA,GAAE,OAAO;AAAA,IACpB,IAAIA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA;AAAA,EACrB,CAAC;AACF,CAAC;AAED,IAAM,wBAAwBA,GAAE,OAAO;AAAA,EACtC,QAAQA,GAAE,QAAQ,MAAM;AAAA,EACxB,YAAYA,GAAE,OAAO;AAAA,IACpB,IAAIA,GAAE,OAAO,EAAE,KAAK;AAAA,IACpB,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AACF,CAAC;AAED,IAAM,6BAA6BA,GAAE,mBAAmB,UAAU;AAAA,EACjE;AAAA,EACA;AACD,CAAC;AAED,IAAM,qBAAqBA,GAAE,OAAO;AAAA,EACnC,MAAMA,GAAE,QAAQ,cAAc;AAAA,EAC9B,YAAYA,GAAE,OAAO;AAAA,IACpB,OAAOA,GAAE,OAAO;AAAA,IAChB,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,IACjC,cAAcA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACzC,CAAC;AACF,CAAC;AAED,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EACpC,MAAMA,GAAE,QAAQ,UAAU;AAAA,EAC1B,YAAYA,GAAE,OAAO;AAAA,IACpB,UAAUA,GAAE,OAAO;AAAA,EACpB,CAAC;AACF,CAAC;AAED,IAAM,wBAAwBA,GAAE,OAAO;AAAA,EACtC,MAAMA,GAAE,QAAQ,WAAW;AAAA,EAC3B,UAAUA,GAAE,MAAM,0BAA0B,EAAE,IAAI,CAAC;AAAA,EACnD,YAAYA,GAAE,OAAO;AAAA,IACpB,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,QAAQA,GAAE,KAAK,CAAC,SAAS,cAAc,YAAY,WAAW,CAAC,EAAE,QAAQ,UAAU;AAAA,IACnF,iBAAiBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACtC,CAAC;AACF,CAAC;AAED,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EACvC,MAAMA,GAAE,QAAQ,YAAY;AAAA,EAC5B,UAAUA,GAAE,MAAM,CAAC,CAAC;AAAA,EACpB,YAAYA,GAAE,OAAO;AAAA,IACpB,gBAAgBA,GAAE,OAAO;AAAA,IACzB,IAAIA,GAAE,OAAO;AAAA,IACb,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,QAAQA,GACN,OAAO;AAAA,MACP,OAAOA,GAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA,MAG5B,QAAQA,GAAE,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,MAAM;AAAA,IACxC,CAAC,EACA,QAAQ,EACR,SAAS;AAAA,EACZ,CAAC;AACF,CAAC;AAED,IAAM,oBAAoBA,GAAE,mBAAmB,QAAQ;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,CAAC;AAEM,IAAM,kCAAkCA,GAAE,OAAO;AAAA,EACvD,MAAMA,GAAE,OAAO,EAAE,KAAK;AAAA,EACtB,OAAOA,GAAE,OAAO;AAAA,EAChB,WAAWA,GAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EACtC,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,iBAAiBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,QAAQA,GAAE,MAAM,iBAAiB;AAClC,CAAC;;;AC5EM,IAAM,aAAN,cAAyB,cAAc;AAAA,EAC7C,MAAM,aAAa,QAA8C;AAChE,WAAO,KAAK,IAAI,YAAY,MAAM,cAAc,yBAAyB;AAAA,EAC1E;AAAA,EAEA,MAAM,0BAA0B,QAAoD;AACnF,WAAO,KAAK,IAAI,YAAY,MAAM,2BAA2B,+BAA+B;AAAA,EAC7F;AAAA,EAEA,MAAM,gBACL,QACA,MAC+B;AAC/B,WAAO,KAAK;AAAA,MACX,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;;;ACzBO,IAAM,YAAN,cAAwB,cAAc;AAAA;AAAA;AAAA;AAAA,EAI5C;AAAA,EACA;AAAA,EAEA,YAAY,QAAyB;AACpC,UAAM,MAAM;AAGZ,SAAK,WAAW,IAAI,eAAe,MAAM;AACzC,SAAK,OAAO,IAAI,WAAW,MAAM;AAAA,EAClC;AACD;","names":["z","z","z","z"]}
|
package/package.json
CHANGED
|
Binary file
|