@cloudfleet/sdk 0.0.1-c386d40 → 0.0.1-c3c7509

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.
@@ -368,24 +368,8 @@ export const ChartSchema = {
368
368
  },
369
369
  status: {
370
370
  type: 'string',
371
- description: 'Status of the chart deployment.',
372
- example: 'active',
373
- enum: [
374
- 'InstallSucceeded',
375
- 'InstallFailed',
376
- 'UpgradeSucceeded',
377
- 'UpgradeFailed',
378
- 'TestSucceeded',
379
- 'TestFailed',
380
- 'RollbackSucceeded',
381
- 'RollbackFailed',
382
- 'UninstallSucceeded',
383
- 'UninstallFailed',
384
- 'ArtifactFailed',
385
- 'DependencyNotReady',
386
- 'Progressing',
387
- 'SourceNotReady'
388
- ]
371
+ description: 'Status of the chart deployment (Flux HelmRelease Ready condition reason, e.g. InstallSucceeded, UpgradeFailed, Progressing).',
372
+ example: 'InstallSucceeded'
389
373
  },
390
374
  version_current: {
391
375
  type: 'string',
@@ -456,22 +440,12 @@ export const ClusterCreateInputSchema = {
456
440
  tier: {
457
441
  type: 'string',
458
442
  description: 'Tier of the cluster.',
443
+ default: 'basic',
459
444
  example: 'pro',
460
445
  enum: [
461
446
  'basic',
462
- 'pro'
463
- ]
464
- },
465
- region: {
466
- type: 'string',
467
- description: 'Cloudfleet control plane region. One of "staging-1a", "northamerica-central-1", "europe-central-1a", "northamerica-central-1a". This field can not be updated after creation.',
468
- default: 'staging-1a',
469
- example: 'northamerica-central-1a',
470
- enum: [
471
- 'staging-1a',
472
- 'northamerica-central-1',
473
- 'europe-central-1a',
474
- 'northamerica-central-1a'
447
+ 'pro',
448
+ 'enterprise'
475
449
  ]
476
450
  },
477
451
  version_channel: {
@@ -479,20 +453,105 @@ export const ClusterCreateInputSchema = {
479
453
  pattern: '^(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$',
480
454
  description: 'Version of the kubernetes cluster.',
481
455
  default: '1.x.x-cfke.x',
482
- example: '1.x.x-cfke.x',
456
+ example: '1.x.x-cfke.x'
457
+ },
458
+ release_channel: {
459
+ type: 'string',
460
+ description: 'Release channel for the cluster\'s control plane.',
461
+ default: 'rapid',
462
+ example: 'rapid',
483
463
  enum: [
484
- '1.x.x-cfke.x',
485
- '1.31.x-cfke.x',
486
- '1.32.x-cfke.x',
487
- '1.33.x-cfke.x'
464
+ 'rapid',
465
+ 'stable',
466
+ 'extended'
488
467
  ]
468
+ },
469
+ features: {
470
+ type: 'object',
471
+ properties: {
472
+ gpu_sharing_strategy: {
473
+ type: 'string',
474
+ description: 'GPU sharing strategy.',
475
+ default: 'none',
476
+ example: 'none',
477
+ enum: [
478
+ 'none',
479
+ 'mps',
480
+ 'time_slicing'
481
+ ]
482
+ },
483
+ gpu_max_shared_clients_per_gpu: {
484
+ type: 'integer',
485
+ minimum: 2,
486
+ maximum: 48,
487
+ description: 'Maximum number of pods that may share a single GPU.',
488
+ default: 4,
489
+ example: 10
490
+ },
491
+ cilium_socket_lb_host_namespace_only: {
492
+ type: 'boolean',
493
+ description: 'Restrict Cilium socket load-balancing to the host namespace. Required for the Tailscale operator and Istio.',
494
+ example: false
495
+ }
496
+ },
497
+ additionalProperties: false,
498
+ description: 'Cluster feature toggles.',
499
+ default: {
500
+ gpu_sharing_strategy: 'none',
501
+ gpu_max_shared_clients_per_gpu: 4,
502
+ cilium_socket_lb_host_namespace_only: false
503
+ }
504
+ },
505
+ region: {
506
+ type: 'string',
507
+ description: 'Cloudfleet control plane region. This field can not be updated after creation.',
508
+ example: 'europe-central-1a'
509
+ },
510
+ networking: {
511
+ type: 'object',
512
+ properties: {
513
+ pod_cidr: {
514
+ type: 'string',
515
+ description: 'CIDR block for pod IPs.',
516
+ default: '10.244.0.0/16'
517
+ },
518
+ service_cidr: {
519
+ type: 'string',
520
+ description: 'CIDR block for service IPs.',
521
+ default: '10.96.0.0/12'
522
+ },
523
+ dual_stack: {
524
+ type: 'boolean',
525
+ description: 'Enable IPv4+IPv6 dual-stack networking.'
526
+ },
527
+ pod_cidr_v6: {
528
+ type: 'string',
529
+ description: 'IPv6 pod CIDR. Requires dual_stack.',
530
+ default: '2001:db8:1:2::/48'
531
+ },
532
+ service_cidr_v6: {
533
+ type: 'string',
534
+ description: 'IPv6 service CIDR. Requires dual_stack.',
535
+ default: '2001:db8:1:1::/112'
536
+ }
537
+ },
538
+ additionalProperties: false,
539
+ description: 'Cluster networking configuration. Immutable after creation.',
540
+ default: {
541
+ pod_cidr: '10.244.0.0/16',
542
+ service_cidr: '10.96.0.0/12',
543
+ dual_stack: false,
544
+ pod_cidr_v6: '2001:db8:1:2::/48',
545
+ service_cidr_v6: '2001:db8:1:1::/112'
546
+ }
489
547
  }
490
548
  },
491
549
  required: [
492
550
  'name',
493
- 'tier'
551
+ 'region'
494
552
  ],
495
- additionalProperties: false
553
+ additionalProperties: false,
554
+ description: 'Mutable cluster configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
496
555
  };
497
556
  export const ClusterJoinInformationSchema = {
498
557
  type: 'object',
@@ -513,11 +572,21 @@ export const ClusterJoinInformationSchema = {
513
572
  description: 'Cluster DNS IP address. This is the IP address of the kube-dns service in the cluster.',
514
573
  example: '10.96.0.10'
515
574
  },
575
+ pod_cidr: {
576
+ type: 'string',
577
+ description: 'Pod CIDR for the cluster. Used to configure iptables rules on nodes to prevent Tailscale routing loops.',
578
+ example: '10.244.0.0/16'
579
+ },
516
580
  auth_key: {
517
581
  type: 'string',
518
582
  description: 'Authentication key for the cluster.',
519
583
  example: 'tskey-auth-kBV8wr1dk911CNTRL-...'
520
584
  },
585
+ login_server: {
586
+ type: 'string',
587
+ description: 'Coordination server the node registers against. Empty on data plane v1 clusters, where the node advertises its own tag instead. A non-empty value requires a client that declares the dataplane-v2 capability.',
588
+ example: 'https://415026b6-f00f-44f8-968d-fc6ef4d0fc6d.fabric.europe-central-1a.cfke.io'
589
+ },
521
590
  bootstrap_token: {
522
591
  type: 'string',
523
592
  description: 'Bootstrap token for the cluster.',
@@ -588,7 +657,9 @@ export const ClusterJoinInformationSchema = {
588
657
  'certificate_authority',
589
658
  'endpoint',
590
659
  'cluster_dns',
660
+ 'pod_cidr',
591
661
  'auth_key',
662
+ 'login_server',
592
663
  'bootstrap_token',
593
664
  'versions',
594
665
  'third_party_api_access_config'
@@ -609,24 +680,123 @@ export const ClusterSchema = {
609
680
  tier: {
610
681
  type: 'string',
611
682
  description: 'Tier of the cluster.',
683
+ default: 'basic',
612
684
  example: 'pro',
613
685
  enum: [
614
686
  'basic',
615
- 'pro'
687
+ 'pro',
688
+ 'enterprise'
616
689
  ]
617
690
  },
618
- region: {
691
+ version_channel: {
692
+ type: 'string',
693
+ pattern: '^(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$',
694
+ description: 'Version of the kubernetes cluster.',
695
+ default: '1.x.x-cfke.x',
696
+ example: '1.x.x-cfke.x'
697
+ },
698
+ release_channel: {
619
699
  type: 'string',
620
- description: 'Cloudfleet control plane region. One of "staging-1a", "northamerica-central-1", "europe-central-1a", "northamerica-central-1a". This field can not be updated after creation.',
621
- default: 'staging-1a',
622
- example: 'northamerica-central-1a',
700
+ description: 'Release channel for the cluster\'s control plane.',
701
+ default: 'rapid',
702
+ example: 'rapid',
623
703
  enum: [
624
- 'staging-1a',
625
- 'northamerica-central-1',
626
- 'europe-central-1a',
627
- 'northamerica-central-1a'
704
+ 'rapid',
705
+ 'stable',
706
+ 'extended'
628
707
  ]
629
708
  },
709
+ features: {
710
+ type: 'object',
711
+ properties: {
712
+ gpu_sharing_strategy: {
713
+ type: 'string',
714
+ description: 'GPU sharing strategy.',
715
+ default: 'none',
716
+ example: 'none',
717
+ enum: [
718
+ 'none',
719
+ 'mps',
720
+ 'time_slicing'
721
+ ]
722
+ },
723
+ gpu_max_shared_clients_per_gpu: {
724
+ type: 'integer',
725
+ minimum: 2,
726
+ maximum: 48,
727
+ description: 'Maximum number of pods that may share a single GPU.',
728
+ default: 4,
729
+ example: 10
730
+ },
731
+ cilium_socket_lb_host_namespace_only: {
732
+ type: 'boolean',
733
+ description: 'Restrict Cilium socket load-balancing to the host namespace. Required for the Tailscale operator and Istio.',
734
+ example: false
735
+ }
736
+ },
737
+ required: [
738
+ 'gpu_sharing_strategy',
739
+ 'gpu_max_shared_clients_per_gpu',
740
+ 'cilium_socket_lb_host_namespace_only'
741
+ ],
742
+ additionalProperties: false,
743
+ description: 'Cluster feature toggles.',
744
+ default: {
745
+ gpu_sharing_strategy: 'none',
746
+ gpu_max_shared_clients_per_gpu: 4,
747
+ cilium_socket_lb_host_namespace_only: false
748
+ }
749
+ },
750
+ region: {
751
+ type: 'string',
752
+ description: 'Cloudfleet control plane region. This field can not be updated after creation.',
753
+ example: 'europe-central-1a'
754
+ },
755
+ networking: {
756
+ type: 'object',
757
+ properties: {
758
+ pod_cidr: {
759
+ type: 'string',
760
+ description: 'CIDR block for pod IPs.',
761
+ default: '10.244.0.0/16'
762
+ },
763
+ service_cidr: {
764
+ type: 'string',
765
+ description: 'CIDR block for service IPs.',
766
+ default: '10.96.0.0/12'
767
+ },
768
+ dual_stack: {
769
+ type: 'boolean',
770
+ description: 'Enable IPv4+IPv6 dual-stack networking.'
771
+ },
772
+ pod_cidr_v6: {
773
+ type: 'string',
774
+ description: 'IPv6 pod CIDR. Requires dual_stack.',
775
+ default: '2001:db8:1:2::/48'
776
+ },
777
+ service_cidr_v6: {
778
+ type: 'string',
779
+ description: 'IPv6 service CIDR. Requires dual_stack.',
780
+ default: '2001:db8:1:1::/112'
781
+ }
782
+ },
783
+ required: [
784
+ 'pod_cidr',
785
+ 'service_cidr',
786
+ 'dual_stack',
787
+ 'pod_cidr_v6',
788
+ 'service_cidr_v6'
789
+ ],
790
+ additionalProperties: false,
791
+ description: 'Cluster networking configuration. Immutable after creation.',
792
+ default: {
793
+ pod_cidr: '10.244.0.0/16',
794
+ service_cidr: '10.96.0.0/12',
795
+ dual_stack: false,
796
+ pod_cidr_v6: '2001:db8:1:2::/48',
797
+ service_cidr_v6: '2001:db8:1:1::/112'
798
+ }
799
+ },
630
800
  id: {
631
801
  type: 'string',
632
802
  format: 'uuid',
@@ -635,16 +805,13 @@ export const ClusterSchema = {
635
805
  },
636
806
  status: {
637
807
  type: 'string',
638
- description: 'Status of the cluster. When creating a new cluster, set to `active`. When deleting a clusters, set to `deleted`.',
639
- example: 'active',
808
+ description: 'Status of the cluster.',
809
+ example: 'deployed',
640
810
  enum: [
641
- 'active',
642
- 'disabled',
643
- 'deleted',
644
811
  'creating',
645
812
  'deployed',
646
- 'failed',
647
- 'updating'
813
+ 'updating',
814
+ 'disabled'
648
815
  ]
649
816
  },
650
817
  endpoint: {
@@ -652,8 +819,8 @@ export const ClusterSchema = {
652
819
  {
653
820
  type: 'string',
654
821
  format: 'uri',
655
- description: 'URL signed by the private CA of the Kubernetes cluster control plane. This is the endpoint that kubectl uses to connect to the cluster. (Deprecated, use endpoint_public instead)',
656
- example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.cloudfleet.dev:6443'
822
+ description: 'URL signed by a public CA of the Kubernetes cluster control plane. This is the endpoint that kubectl uses to connect to the cluster.',
823
+ example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.io'
657
824
  },
658
825
  {
659
826
  type: 'string',
@@ -668,7 +835,7 @@ export const ClusterSchema = {
668
835
  {
669
836
  type: 'string',
670
837
  format: 'uri',
671
- description: 'URL signed by a public CA of the Kubernetes cluster control plane. This is the endpoint that kubectl uses to connect to the cluster.',
838
+ description: 'Deprecated alias of `endpoint`; retained for backward compatibility.',
672
839
  example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.io'
673
840
  },
674
841
  {
@@ -703,21 +870,22 @@ export const ClusterSchema = {
703
870
  type: 'boolean',
704
871
  description: 'Indicates if the cluster is ready to be used.',
705
872
  example: true
706
- },
707
- version_channel: {
708
- type: 'string',
709
- pattern: '^(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$',
710
- description: 'Version of the kubernetes cluster.',
711
- example: '1.x.x-cfke.x'
712
873
  }
713
874
  },
714
875
  required: [
715
876
  'name',
716
877
  'tier',
878
+ 'version_channel',
879
+ 'release_channel',
880
+ 'features',
881
+ 'region',
882
+ 'networking',
717
883
  'id',
718
- 'status'
884
+ 'status',
885
+ 'ready'
719
886
  ],
720
- additionalProperties: false
887
+ additionalProperties: false,
888
+ description: 'Mutable cluster configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
721
889
  };
722
890
  export const ClusterUpdateInputSchema = {
723
891
  type: 'object',
@@ -733,23 +901,74 @@ export const ClusterUpdateInputSchema = {
733
901
  tier: {
734
902
  type: 'string',
735
903
  description: 'Tier of the cluster.',
904
+ default: 'basic',
736
905
  example: 'pro',
737
906
  enum: [
738
907
  'basic',
739
- 'pro'
908
+ 'pro',
909
+ 'enterprise'
740
910
  ]
741
911
  },
742
912
  version_channel: {
743
913
  type: 'string',
744
914
  pattern: '^(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$',
745
915
  description: 'Version of the kubernetes cluster.',
916
+ default: '1.x.x-cfke.x',
746
917
  example: '1.x.x-cfke.x'
918
+ },
919
+ release_channel: {
920
+ type: 'string',
921
+ description: 'Release channel for the cluster\'s control plane.',
922
+ default: 'rapid',
923
+ example: 'rapid',
924
+ enum: [
925
+ 'rapid',
926
+ 'stable',
927
+ 'extended'
928
+ ]
929
+ },
930
+ features: {
931
+ type: 'object',
932
+ properties: {
933
+ gpu_sharing_strategy: {
934
+ type: 'string',
935
+ description: 'GPU sharing strategy.',
936
+ default: 'none',
937
+ example: 'none',
938
+ enum: [
939
+ 'none',
940
+ 'mps',
941
+ 'time_slicing'
942
+ ]
943
+ },
944
+ gpu_max_shared_clients_per_gpu: {
945
+ type: 'integer',
946
+ minimum: 2,
947
+ maximum: 48,
948
+ description: 'Maximum number of pods that may share a single GPU.',
949
+ default: 4,
950
+ example: 10
951
+ },
952
+ cilium_socket_lb_host_namespace_only: {
953
+ type: 'boolean',
954
+ description: 'Restrict Cilium socket load-balancing to the host namespace. Required for the Tailscale operator and Istio.',
955
+ example: false
956
+ }
957
+ },
958
+ additionalProperties: false,
959
+ description: 'Cluster feature toggles.',
960
+ default: {
961
+ gpu_sharing_strategy: 'none',
962
+ gpu_max_shared_clients_per_gpu: 4,
963
+ cilium_socket_lb_host_namespace_only: false
964
+ }
747
965
  }
748
966
  },
749
967
  required: [
750
- 'tier'
968
+ 'name'
751
969
  ],
752
- additionalProperties: false
970
+ additionalProperties: false,
971
+ description: 'Mutable cluster configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
753
972
  };
754
973
  export const FleetCreateInputSchema = {
755
974
  type: 'object',
@@ -795,8 +1014,8 @@ export const FleetCreateInputSchema = {
795
1014
  type: 'string',
796
1015
  maxLength: 64,
797
1016
  minLength: 64,
798
- pattern: '^[A-Za-z0-9]+$',
799
- description: 'Hetzner Cloud API token with read / write access (64 alphanumeric characters). Omit this field to keep the existing value.'
1017
+ pattern: '^([A-Za-z0-9]{64}|\\*{64})$',
1018
+ description: 'Hetzner Cloud API token with read/write access (64 alphanumeric characters). Write-only: reads return a redacted placeholder, never the token. Omit the field, or send the placeholder back unchanged, to keep the existing key. Send a new value to rotate it.'
800
1019
  }
801
1020
  },
802
1021
  required: [
@@ -1021,7 +1240,8 @@ export const FleetCreateInputSchema = {
1021
1240
  'z3'
1022
1241
  ]
1023
1242
  },
1024
- description: 'Allowed values for `cfke.io/instance-family`.'
1243
+ description: 'Allowed values for `cfke.io/instance-family`.',
1244
+ default: []
1025
1245
  },
1026
1246
  'topology.kubernetes.io/region': {
1027
1247
  type: 'array',
@@ -1094,15 +1314,27 @@ export const FleetCreateInputSchema = {
1094
1314
  'us-west4'
1095
1315
  ]
1096
1316
  },
1097
- description: 'Allowed values for `topology.kubernetes.io/region`.'
1317
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
1318
+ default: []
1098
1319
  }
1099
1320
  },
1100
1321
  additionalProperties: false,
1101
- description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together. Omit a field to place no restriction on that key.'
1322
+ description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together.',
1323
+ default: {
1324
+ 'karpenter.sh/capacity-type': [
1325
+ 'on-demand',
1326
+ 'spot'
1327
+ ],
1328
+ 'kubernetes.io/arch': [
1329
+ 'amd64'
1330
+ ],
1331
+ 'cfke.io/instance-family': [],
1332
+ 'topology.kubernetes.io/region': []
1333
+ }
1102
1334
  },
1103
1335
  scalingProfile: {
1104
1336
  type: 'string',
1105
- description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
1337
+ description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet. Full-overwrite: omit to reset to the default (`conservative`).',
1106
1338
  default: 'conservative',
1107
1339
  example: 'conservative',
1108
1340
  enum: [
@@ -1122,7 +1354,8 @@ export const FleetCreateInputSchema = {
1122
1354
  required: [
1123
1355
  'id'
1124
1356
  ],
1125
- additionalProperties: false
1357
+ additionalProperties: false,
1358
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
1126
1359
  };
1127
1360
  export const FleetSchema = {
1128
1361
  type: 'object',
@@ -1392,7 +1625,8 @@ export const FleetSchema = {
1392
1625
  'z3'
1393
1626
  ]
1394
1627
  },
1395
- description: 'Allowed values for `cfke.io/instance-family`.'
1628
+ description: 'Allowed values for `cfke.io/instance-family`.',
1629
+ default: []
1396
1630
  },
1397
1631
  'topology.kubernetes.io/region': {
1398
1632
  type: 'array',
@@ -1465,15 +1699,31 @@ export const FleetSchema = {
1465
1699
  'us-west4'
1466
1700
  ]
1467
1701
  },
1468
- description: 'Allowed values for `topology.kubernetes.io/region`.'
1702
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
1703
+ default: []
1469
1704
  }
1470
1705
  },
1706
+ required: [
1707
+ 'karpenter.sh/capacity-type',
1708
+ 'kubernetes.io/arch'
1709
+ ],
1471
1710
  additionalProperties: false,
1472
- description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together. Omit a field to place no restriction on that key.'
1711
+ description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together.',
1712
+ default: {
1713
+ 'karpenter.sh/capacity-type': [
1714
+ 'on-demand',
1715
+ 'spot'
1716
+ ],
1717
+ 'kubernetes.io/arch': [
1718
+ 'amd64'
1719
+ ],
1720
+ 'cfke.io/instance-family': [],
1721
+ 'topology.kubernetes.io/region': []
1722
+ }
1473
1723
  },
1474
1724
  scalingProfile: {
1475
1725
  type: 'string',
1476
- description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
1726
+ description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet. Full-overwrite: omit to reset to the default (`conservative`).',
1477
1727
  default: 'conservative',
1478
1728
  example: 'conservative',
1479
1729
  enum: [
@@ -1488,13 +1738,38 @@ export const FleetSchema = {
1488
1738
  pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
1489
1739
  description: 'Unique identifier of the kubernetes fleet.',
1490
1740
  example: 'new-clouds-fleet'
1741
+ },
1742
+ ready: {
1743
+ type: 'boolean',
1744
+ description: 'Indicates whether the fleet configuration is healthy.',
1745
+ example: true
1746
+ },
1747
+ status_message: {
1748
+ type: 'string',
1749
+ description: 'Human-readable reason the fleet is not ready. Present only when `ready` is false.',
1750
+ example: 'Invalid provider permissions.'
1751
+ },
1752
+ created_at: {
1753
+ type: 'string',
1754
+ description: 'Creation date and time of the fleet.',
1755
+ example: '2024-09-12T09:11:27Z'
1756
+ },
1757
+ updated_at: {
1758
+ type: 'string',
1759
+ description: 'Date and time the fleet was last updated.',
1760
+ example: '2024-09-12T09:11:27Z'
1491
1761
  }
1492
1762
  },
1493
1763
  required: [
1764
+ 'constraints',
1494
1765
  'scalingProfile',
1495
- 'id'
1766
+ 'id',
1767
+ 'ready',
1768
+ 'created_at',
1769
+ 'updated_at'
1496
1770
  ],
1497
- additionalProperties: false
1771
+ additionalProperties: false,
1772
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
1498
1773
  };
1499
1774
  export const FleetUpdateInputSchema = {
1500
1775
  type: 'object',
@@ -1540,8 +1815,8 @@ export const FleetUpdateInputSchema = {
1540
1815
  type: 'string',
1541
1816
  maxLength: 64,
1542
1817
  minLength: 64,
1543
- pattern: '^[A-Za-z0-9]+$',
1544
- description: 'Hetzner Cloud API token with read / write access (64 alphanumeric characters). Omit this field to keep the existing value.'
1818
+ pattern: '^([A-Za-z0-9]{64}|\\*{64})$',
1819
+ description: 'Hetzner Cloud API token with read/write access (64 alphanumeric characters). Write-only: reads return a redacted placeholder, never the token. Omit the field, or send the placeholder back unchanged, to keep the existing key. Send a new value to rotate it.'
1545
1820
  }
1546
1821
  },
1547
1822
  required: [
@@ -1580,7 +1855,11 @@ export const FleetUpdateInputSchema = {
1580
1855
  ]
1581
1856
  },
1582
1857
  minItems: 1,
1583
- description: 'Allowed values for `karpenter.sh/capacity-type`.'
1858
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
1859
+ default: [
1860
+ 'on-demand',
1861
+ 'spot'
1862
+ ]
1584
1863
  },
1585
1864
  'kubernetes.io/arch': {
1586
1865
  type: 'array',
@@ -1592,7 +1871,10 @@ export const FleetUpdateInputSchema = {
1592
1871
  ]
1593
1872
  },
1594
1873
  minItems: 1,
1595
- description: 'Allowed values for `kubernetes.io/arch`.'
1874
+ description: 'Allowed values for `kubernetes.io/arch`.',
1875
+ default: [
1876
+ 'amd64'
1877
+ ]
1596
1878
  },
1597
1879
  'cfke.io/instance-family': {
1598
1880
  type: 'array',
@@ -1759,7 +2041,8 @@ export const FleetUpdateInputSchema = {
1759
2041
  'z3'
1760
2042
  ]
1761
2043
  },
1762
- description: 'Allowed values for `cfke.io/instance-family`.'
2044
+ description: 'Allowed values for `cfke.io/instance-family`.',
2045
+ default: []
1763
2046
  },
1764
2047
  'topology.kubernetes.io/region': {
1765
2048
  type: 'array',
@@ -1832,15 +2115,28 @@ export const FleetUpdateInputSchema = {
1832
2115
  'us-west4'
1833
2116
  ]
1834
2117
  },
1835
- description: 'Allowed values for `topology.kubernetes.io/region`.'
2118
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
2119
+ default: []
1836
2120
  }
1837
2121
  },
1838
2122
  additionalProperties: false,
1839
- description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together. Omit a field to place no restriction on that key.'
2123
+ description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together.',
2124
+ default: {
2125
+ 'karpenter.sh/capacity-type': [
2126
+ 'on-demand',
2127
+ 'spot'
2128
+ ],
2129
+ 'kubernetes.io/arch': [
2130
+ 'amd64'
2131
+ ],
2132
+ 'cfke.io/instance-family': [],
2133
+ 'topology.kubernetes.io/region': []
2134
+ }
1840
2135
  },
1841
2136
  scalingProfile: {
1842
2137
  type: 'string',
1843
- description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
2138
+ description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet. Full-overwrite: omit to reset to the default (`conservative`).',
2139
+ default: 'conservative',
1844
2140
  example: 'conservative',
1845
2141
  enum: [
1846
2142
  'aggressive',
@@ -1848,10 +2144,8 @@ export const FleetUpdateInputSchema = {
1848
2144
  ]
1849
2145
  }
1850
2146
  },
1851
- required: [
1852
- 'scalingProfile'
1853
- ],
1854
- additionalProperties: false
2147
+ additionalProperties: false,
2148
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
1855
2149
  };
1856
2150
  export const InviteCreateInputSchema = {
1857
2151
  type: 'object',
@@ -1925,6 +2219,170 @@ export const InviteSchema = {
1925
2219
  ],
1926
2220
  additionalProperties: false
1927
2221
  };
2222
+ export const InvoicePaymentAttemptSchema = {
2223
+ type: 'object',
2224
+ properties: {
2225
+ invoice_id: {
2226
+ type: 'string',
2227
+ description: 'Identifier of the invoice.',
2228
+ example: 'in_1234567890xCrwxghOTj1234'
2229
+ },
2230
+ number: {
2231
+ type: 'string',
2232
+ nullable: true,
2233
+ description: 'Invoice number. Null if the invoice has no number.',
2234
+ example: 'CF-0042'
2235
+ },
2236
+ amount: {
2237
+ type: 'number',
2238
+ format: 'float',
2239
+ description: 'Amount outstanding when the charge was attempted, in the smallest currency unit.',
2240
+ example: 4200
2241
+ },
2242
+ currency: {
2243
+ type: 'string',
2244
+ description: 'Currency of the invoice.',
2245
+ example: 'eur'
2246
+ },
2247
+ status: {
2248
+ type: 'string',
2249
+ description: 'Outcome for this invoice: `paid`, `processing` (accepted, not yet settled), `requires_action` (awaiting customer authentication), or `failed` (declined).',
2250
+ example: 'paid',
2251
+ enum: [
2252
+ 'paid',
2253
+ 'processing',
2254
+ 'requires_action',
2255
+ 'failed'
2256
+ ]
2257
+ },
2258
+ client_secret: {
2259
+ type: 'string',
2260
+ nullable: true,
2261
+ description: 'Client secret used to complete customer authentication. Set only when `status` is `requires_action`.',
2262
+ example: 'pi_3MtwBwLkdIwHu7ix28a3tqPa_secret_YrKJUKribcBjcG8HVhfZluoGH'
2263
+ },
2264
+ failure_code: {
2265
+ type: 'string',
2266
+ nullable: true,
2267
+ description: 'Decline code. Set only when `status` is `failed`.',
2268
+ example: 'insufficient_funds'
2269
+ },
2270
+ failure_message: {
2271
+ type: 'string',
2272
+ nullable: true,
2273
+ description: 'Explanation of the decline, suitable for display. Set only when `status` is `failed`.',
2274
+ example: 'Your card has insufficient funds.'
2275
+ }
2276
+ },
2277
+ required: [
2278
+ 'invoice_id',
2279
+ 'number',
2280
+ 'amount',
2281
+ 'currency',
2282
+ 'status',
2283
+ 'client_secret',
2284
+ 'failure_code',
2285
+ 'failure_message'
2286
+ ],
2287
+ additionalProperties: false
2288
+ };
2289
+ export const InvoicePaymentResultSchema = {
2290
+ type: 'object',
2291
+ properties: {
2292
+ code: {
2293
+ type: 'string',
2294
+ description: 'Overall outcome: `paid` (nothing outstanding), `processing` (all accepted, not yet settled), `action_required` (one or more await customer authentication), `partially_paid`, `failed`, `nothing_due`, or `bank_transfer_due` (the organization pays by bank transfer; nothing was charged).',
2295
+ example: 'partially_paid',
2296
+ enum: [
2297
+ 'paid',
2298
+ 'processing',
2299
+ 'action_required',
2300
+ 'partially_paid',
2301
+ 'failed',
2302
+ 'nothing_due',
2303
+ 'bank_transfer_due'
2304
+ ]
2305
+ },
2306
+ message: {
2307
+ type: 'string',
2308
+ description: 'Summary of the outcome, suitable for display.',
2309
+ example: '1 of 2 open invoices was paid. Invoice CF-0043 was declined: Your card has insufficient funds.'
2310
+ },
2311
+ results: {
2312
+ type: 'array',
2313
+ items: {
2314
+ type: 'object',
2315
+ properties: {
2316
+ invoice_id: {
2317
+ type: 'string',
2318
+ description: 'Identifier of the invoice.',
2319
+ example: 'in_1234567890xCrwxghOTj1234'
2320
+ },
2321
+ number: {
2322
+ type: 'string',
2323
+ description: 'Invoice number. Null if the invoice has no number.',
2324
+ example: 'CF-0042'
2325
+ },
2326
+ amount: {
2327
+ type: 'number',
2328
+ format: 'float',
2329
+ description: 'Amount outstanding when the charge was attempted, in the smallest currency unit.',
2330
+ example: 4200
2331
+ },
2332
+ currency: {
2333
+ type: 'string',
2334
+ description: 'Currency of the invoice.',
2335
+ example: 'eur'
2336
+ },
2337
+ status: {
2338
+ type: 'string',
2339
+ description: 'Outcome for this invoice: `paid`, `processing` (accepted, not yet settled), `requires_action` (awaiting customer authentication), or `failed` (declined).',
2340
+ example: 'paid',
2341
+ enum: [
2342
+ 'paid',
2343
+ 'processing',
2344
+ 'requires_action',
2345
+ 'failed'
2346
+ ]
2347
+ },
2348
+ client_secret: {
2349
+ type: 'string',
2350
+ description: 'Client secret used to complete customer authentication. Set only when `status` is `requires_action`.',
2351
+ example: 'pi_3MtwBwLkdIwHu7ix28a3tqPa_secret_YrKJUKribcBjcG8HVhfZluoGH'
2352
+ },
2353
+ failure_code: {
2354
+ type: 'string',
2355
+ description: 'Decline code. Set only when `status` is `failed`.',
2356
+ example: 'insufficient_funds'
2357
+ },
2358
+ failure_message: {
2359
+ type: 'string',
2360
+ description: 'Explanation of the decline, suitable for display. Set only when `status` is `failed`.',
2361
+ example: 'Your card has insufficient funds.'
2362
+ }
2363
+ },
2364
+ required: [
2365
+ 'invoice_id',
2366
+ 'number',
2367
+ 'amount',
2368
+ 'currency',
2369
+ 'status',
2370
+ 'client_secret',
2371
+ 'failure_code',
2372
+ 'failure_message'
2373
+ ],
2374
+ additionalProperties: false
2375
+ },
2376
+ description: 'One entry per invoice charged, oldest first.'
2377
+ }
2378
+ },
2379
+ required: [
2380
+ 'code',
2381
+ 'message',
2382
+ 'results'
2383
+ ],
2384
+ additionalProperties: false
2385
+ };
1928
2386
  export const InvoiceSchema = {
1929
2387
  type: 'object',
1930
2388
  properties: {
@@ -2259,6 +2717,17 @@ export const OrganizationSchema = {
2259
2717
  description: 'Available number of Pro clusters that can be created.',
2260
2718
  example: 999
2261
2719
  },
2720
+ enterprise_clusters_max: {
2721
+ type: 'integer',
2722
+ minimum: 0,
2723
+ description: 'Maximum number of Enterprise clusters that can be created.',
2724
+ example: 999
2725
+ },
2726
+ enterprise_clusters_available: {
2727
+ type: 'integer',
2728
+ description: 'Available number of Enterprise clusters that can be created.',
2729
+ example: 999
2730
+ },
2262
2731
  fleets_max: {
2263
2732
  type: 'integer',
2264
2733
  minimum: 0,
@@ -2278,7 +2747,7 @@ export const OrganizationSchema = {
2278
2747
  type: 'array',
2279
2748
  items: {
2280
2749
  type: 'string',
2281
- example: 'northamerica-central-1'
2750
+ example: 'northamerica-central-1a'
2282
2751
  },
2283
2752
  minItems: 1,
2284
2753
  description: 'List of Cloudfleet control plane regions available for the organization.'
@@ -2320,6 +2789,8 @@ export const OrganizationSchema = {
2320
2789
  'basic_clusters_available',
2321
2790
  'pro_clusters_max',
2322
2791
  'pro_clusters_available',
2792
+ 'enterprise_clusters_max',
2793
+ 'enterprise_clusters_available',
2323
2794
  'fleets_max',
2324
2795
  'cluster_tiers',
2325
2796
  'regions',
@@ -2466,6 +2937,17 @@ export const PlatformQuotaSchema = {
2466
2937
  description: 'Available number of Pro clusters that can be created.',
2467
2938
  example: 999
2468
2939
  },
2940
+ enterprise_clusters_max: {
2941
+ type: 'integer',
2942
+ minimum: 0,
2943
+ description: 'Maximum number of Enterprise clusters that can be created.',
2944
+ example: 999
2945
+ },
2946
+ enterprise_clusters_available: {
2947
+ type: 'integer',
2948
+ description: 'Available number of Enterprise clusters that can be created.',
2949
+ example: 999
2950
+ },
2469
2951
  fleets_max: {
2470
2952
  type: 'integer',
2471
2953
  minimum: 0,
@@ -2485,7 +2967,7 @@ export const PlatformQuotaSchema = {
2485
2967
  type: 'array',
2486
2968
  items: {
2487
2969
  type: 'string',
2488
- example: 'northamerica-central-1'
2970
+ example: 'northamerica-central-1a'
2489
2971
  },
2490
2972
  minItems: 1,
2491
2973
  description: 'List of Cloudfleet control plane regions available for the organization.'
@@ -2527,6 +3009,8 @@ export const PlatformQuotaSchema = {
2527
3009
  'basic_clusters_available',
2528
3010
  'pro_clusters_max',
2529
3011
  'pro_clusters_available',
3012
+ 'enterprise_clusters_max',
3013
+ 'enterprise_clusters_available',
2530
3014
  'fleets_max',
2531
3015
  'cluster_tiers',
2532
3016
  'regions',
@@ -2869,172 +3353,6 @@ export const TicketCreateInputSchema = {
2869
3353
  ],
2870
3354
  additionalProperties: false
2871
3355
  };
2872
- export const TicketListResponseSchema = {
2873
- type: 'object',
2874
- properties: {
2875
- items: {
2876
- type: 'array',
2877
- items: {
2878
- type: 'object',
2879
- properties: {
2880
- id: {
2881
- type: 'string',
2882
- description: 'Unique identifier of the ticket (Mongo ObjectId).',
2883
- example: '60c72b2f9f1b2c001f8e4d3a'
2884
- },
2885
- status: {
2886
- type: 'string',
2887
- description: 'Current state of the ticket.',
2888
- example: 'waiting_on_us',
2889
- enum: [
2890
- 'waiting_on_us',
2891
- 'waiting_on_user',
2892
- 'closed'
2893
- ]
2894
- },
2895
- category: {
2896
- type: 'string',
2897
- description: 'Ticket category.',
2898
- example: 'technical',
2899
- enum: [
2900
- 'billing',
2901
- 'technical',
2902
- 'general'
2903
- ]
2904
- },
2905
- summary: {
2906
- type: 'string',
2907
- description: 'First 128 characters of the initial message body, with markdown formatting and newlines stripped. Used for ticket list previews.',
2908
- example: 'My cluster cannot reach the registry. Logs attached.'
2909
- },
2910
- closed_at: {
2911
- type: 'string',
2912
- format: 'date-time',
2913
- nullable: true,
2914
- description: 'Closure timestamp. Null while the ticket is open.',
2915
- example: '2026-05-18T16:08:14.338Z'
2916
- },
2917
- date_created: {
2918
- type: 'string',
2919
- format: 'date-time',
2920
- description: 'Creation date of the ticket. ISO 8601 UTC.',
2921
- example: '2026-05-11T16:08:14.338Z'
2922
- },
2923
- date_updated: {
2924
- type: 'string',
2925
- format: 'date-time',
2926
- description: 'Last update date of the ticket. ISO 8601 UTC.',
2927
- example: '2026-05-11T16:08:14.338Z'
2928
- },
2929
- messages: {
2930
- type: 'array',
2931
- items: {
2932
- type: 'object',
2933
- properties: {
2934
- id: {
2935
- type: 'string',
2936
- description: 'Unique identifier of the message (Mongo ObjectId).',
2937
- example: '60c72b2f9f1b2c001f8e4d3b'
2938
- },
2939
- type: {
2940
- type: 'string',
2941
- description: 'Message type. Internal notes are filtered out of customer-facing responses.',
2942
- example: 'customer_reply',
2943
- enum: [
2944
- 'customer_reply',
2945
- 'agent_reply'
2946
- ]
2947
- },
2948
- body: {
2949
- type: 'string',
2950
- description: 'Message body in markdown.',
2951
- example: 'Thanks — that resolved it on my side.'
2952
- },
2953
- author_first_name: {
2954
- type: 'string',
2955
- nullable: true,
2956
- description: 'First name of the author. Null when not provided.',
2957
- example: 'Jane'
2958
- },
2959
- author_last_name: {
2960
- type: 'string',
2961
- nullable: true,
2962
- description: 'Last name of the author. Null when not provided.',
2963
- example: 'Doe'
2964
- },
2965
- attachments: {
2966
- type: 'array',
2967
- items: {
2968
- type: 'object',
2969
- properties: {
2970
- id: {
2971
- type: 'string',
2972
- description: 'Unique identifier of the attachment (Mongo ObjectId).',
2973
- example: '60c72b2f9f1b2c001f8e4d3c'
2974
- },
2975
- filename: {
2976
- type: 'string',
2977
- description: 'Original filename as uploaded.',
2978
- example: 'debug.log'
2979
- },
2980
- content_type: {
2981
- type: 'string',
2982
- description: 'MIME content type of the attachment.',
2983
- example: 'text/plain'
2984
- },
2985
- size: {
2986
- type: 'integer',
2987
- description: 'Size of the attachment in bytes.',
2988
- example: 12345
2989
- }
2990
- },
2991
- required: [
2992
- 'id',
2993
- 'filename',
2994
- 'content_type',
2995
- 'size'
2996
- ],
2997
- additionalProperties: false
2998
- },
2999
- description: 'Attachments associated with this message.',
3000
- example: []
3001
- },
3002
- date_created: {
3003
- type: 'string',
3004
- format: 'date-time',
3005
- description: 'Creation date of the message. ISO 8601 UTC.',
3006
- example: '2026-05-11T16:08:14.338Z'
3007
- }
3008
- },
3009
- required: [
3010
- 'id',
3011
- 'type',
3012
- 'body',
3013
- 'date_created'
3014
- ],
3015
- additionalProperties: false
3016
- },
3017
- description: 'Messages on the ticket in chronological order. Internal notes are excluded. Returned by the detail endpoint only.'
3018
- }
3019
- },
3020
- required: [
3021
- 'id',
3022
- 'status',
3023
- 'category',
3024
- 'summary',
3025
- 'date_created',
3026
- 'date_updated'
3027
- ],
3028
- additionalProperties: false
3029
- },
3030
- description: 'Tickets for the organization, ordered newest first. Messages are omitted from list responses.'
3031
- }
3032
- },
3033
- required: [
3034
- 'items'
3035
- ],
3036
- additionalProperties: false
3037
- };
3038
3356
  export const TicketMessageInputSchema = {
3039
3357
  type: 'object',
3040
3358
  properties: {
@@ -3076,11 +3394,13 @@ export const TicketMessageSchema = {
3076
3394
  },
3077
3395
  author_first_name: {
3078
3396
  type: 'string',
3397
+ nullable: true,
3079
3398
  description: 'First name of the author. Null when not provided.',
3080
3399
  example: 'Jane'
3081
3400
  },
3082
3401
  author_last_name: {
3083
3402
  type: 'string',
3403
+ nullable: true,
3084
3404
  description: 'Last name of the author. Null when not provided.',
3085
3405
  example: 'Doe'
3086
3406
  },
@@ -3172,6 +3492,7 @@ export const TicketSchema = {
3172
3492
  closed_at: {
3173
3493
  type: 'string',
3174
3494
  format: 'date-time',
3495
+ nullable: true,
3175
3496
  description: 'Closure timestamp. Null while the ticket is open.',
3176
3497
  example: '2026-05-18T16:08:14.338Z'
3177
3498
  },
@@ -3396,12 +3717,21 @@ export const UsageFacetsSchema = {
3396
3717
  product: {
3397
3718
  type: 'array',
3398
3719
  items: {
3399
- type: 'string'
3720
+ type: 'string',
3721
+ enum: [
3722
+ 'cfke_controlplane_basic',
3723
+ 'cfke_controlplane_pro',
3724
+ 'cfke_controlplane_enterprise',
3725
+ 'cfke_connected_nodes_basic',
3726
+ 'cfke_connected_nodes_pro',
3727
+ 'cfke_connected_nodes_enterprise',
3728
+ 'cfcr_storage'
3729
+ ]
3400
3730
  },
3401
3731
  description: 'List of unique products',
3402
3732
  example: [
3403
- 'cfke_controlplane',
3404
- 'cfke_connected_nodes'
3733
+ 'cfke_controlplane_pro',
3734
+ 'cfke_connected_nodes_pro'
3405
3735
  ]
3406
3736
  }
3407
3737
  },
@@ -3428,7 +3758,16 @@ export const UsageResponseSchema = {
3428
3758
  product: {
3429
3759
  type: 'string',
3430
3760
  description: 'The product the usage is associated with',
3431
- example: 'cfke_controlplane'
3761
+ example: 'cfke_controlplane_pro',
3762
+ enum: [
3763
+ 'cfke_controlplane_basic',
3764
+ 'cfke_controlplane_pro',
3765
+ 'cfke_controlplane_enterprise',
3766
+ 'cfke_connected_nodes_basic',
3767
+ 'cfke_connected_nodes_pro',
3768
+ 'cfke_connected_nodes_enterprise',
3769
+ 'cfcr_storage'
3770
+ ]
3432
3771
  },
3433
3772
  value: {
3434
3773
  type: 'number',
@@ -3476,12 +3815,21 @@ export const UsageResponseSchema = {
3476
3815
  product: {
3477
3816
  type: 'array',
3478
3817
  items: {
3479
- type: 'string'
3818
+ type: 'string',
3819
+ enum: [
3820
+ 'cfke_controlplane_basic',
3821
+ 'cfke_controlplane_pro',
3822
+ 'cfke_controlplane_enterprise',
3823
+ 'cfke_connected_nodes_basic',
3824
+ 'cfke_connected_nodes_pro',
3825
+ 'cfke_connected_nodes_enterprise',
3826
+ 'cfcr_storage'
3827
+ ]
3480
3828
  },
3481
3829
  description: 'List of unique products',
3482
3830
  example: [
3483
- 'cfke_controlplane',
3484
- 'cfke_connected_nodes'
3831
+ 'cfke_controlplane_pro',
3832
+ 'cfke_connected_nodes_pro'
3485
3833
  ]
3486
3834
  }
3487
3835
  },
@@ -3511,7 +3859,16 @@ export const UsageSchema = {
3511
3859
  product: {
3512
3860
  type: 'string',
3513
3861
  description: 'The product the usage is associated with',
3514
- example: 'cfke_controlplane'
3862
+ example: 'cfke_controlplane_pro',
3863
+ enum: [
3864
+ 'cfke_controlplane_basic',
3865
+ 'cfke_controlplane_pro',
3866
+ 'cfke_controlplane_enterprise',
3867
+ 'cfke_connected_nodes_basic',
3868
+ 'cfke_connected_nodes_pro',
3869
+ 'cfke_connected_nodes_enterprise',
3870
+ 'cfcr_storage'
3871
+ ]
3515
3872
  },
3516
3873
  value: {
3517
3874
  type: 'number',