@cloudfleet/sdk 0.0.1-cb875c6 → 0.0.1-cd547f9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +26 -2
  2. package/dist/@tanstack/react-query.gen.d.ts +1159 -0
  3. package/dist/@tanstack/react-query.gen.d.ts.map +1 -0
  4. package/dist/@tanstack/react-query.gen.js +1175 -0
  5. package/dist/@tanstack/react-query.gen.js.map +1 -0
  6. package/dist/client/client.gen.d.ts.map +1 -1
  7. package/dist/client/client.gen.js +114 -102
  8. package/dist/client/client.gen.js.map +1 -1
  9. package/dist/client/index.d.ts +1 -1
  10. package/dist/client/index.d.ts.map +1 -1
  11. package/dist/client/index.js.map +1 -1
  12. package/dist/client/types.gen.d.ts +9 -13
  13. package/dist/client/types.gen.d.ts.map +1 -1
  14. package/dist/client/utils.gen.d.ts +8 -4
  15. package/dist/client/utils.gen.d.ts.map +1 -1
  16. package/dist/client/utils.gen.js +13 -15
  17. package/dist/client/utils.gen.js.map +1 -1
  18. package/dist/client.gen.d.ts.map +1 -1
  19. package/dist/client.gen.js +1 -3
  20. package/dist/client.gen.js.map +1 -1
  21. package/dist/core/auth.gen.d.ts.map +1 -1
  22. package/dist/core/auth.gen.js.map +1 -1
  23. package/dist/core/bodySerializer.gen.d.ts +16 -8
  24. package/dist/core/bodySerializer.gen.d.ts.map +1 -1
  25. package/dist/core/bodySerializer.gen.js +1 -1
  26. package/dist/core/bodySerializer.gen.js.map +1 -1
  27. package/dist/core/params.gen.d.ts +10 -0
  28. package/dist/core/params.gen.d.ts.map +1 -1
  29. package/dist/core/params.gen.js +22 -10
  30. package/dist/core/params.gen.js.map +1 -1
  31. package/dist/core/pathSerializer.gen.d.ts.map +1 -1
  32. package/dist/core/pathSerializer.gen.js +3 -11
  33. package/dist/core/pathSerializer.gen.js.map +1 -1
  34. package/dist/core/queryKeySerializer.gen.d.ts.map +1 -1
  35. package/dist/core/queryKeySerializer.gen.js +4 -11
  36. package/dist/core/queryKeySerializer.gen.js.map +1 -1
  37. package/dist/core/serverSentEvents.gen.d.ts +1 -1
  38. package/dist/core/serverSentEvents.gen.d.ts.map +1 -1
  39. package/dist/core/serverSentEvents.gen.js +6 -9
  40. package/dist/core/serverSentEvents.gen.js.map +1 -1
  41. package/dist/core/types.gen.d.ts +1 -1
  42. package/dist/core/types.gen.d.ts.map +1 -1
  43. package/dist/core/utils.gen.d.ts.map +1 -1
  44. package/dist/core/utils.gen.js +1 -1
  45. package/dist/core/utils.gen.js.map +1 -1
  46. package/dist/schemas.gen.d.ts +1072 -170
  47. package/dist/schemas.gen.d.ts.map +1 -1
  48. package/dist/schemas.gen.js +2448 -239
  49. package/dist/schemas.gen.js.map +1 -1
  50. package/dist/sdk.gen.d.ts +252 -190
  51. package/dist/sdk.gen.d.ts.map +1 -1
  52. package/dist/sdk.gen.js +365 -375
  53. package/dist/sdk.gen.js.map +1 -1
  54. package/dist/services/kubernetes/api.d.ts +8 -8
  55. package/dist/types.gen.d.ts +1498 -710
  56. package/dist/types.gen.d.ts.map +1 -1
  57. package/dist/zod.gen.d.ts +3433 -1429
  58. package/dist/zod.gen.d.ts.map +1 -1
  59. package/dist/zod.gen.js +1373 -620
  60. package/dist/zod.gen.js.map +1 -1
  61. package/package.json +28 -8
@@ -2,6 +2,15 @@
2
2
  export const BillingContactSchema = {
3
3
  type: 'object',
4
4
  properties: {
5
+ type: {
6
+ type: 'string',
7
+ description: 'Type of the organization. `business` for legal entities, `personal` for individuals.',
8
+ example: 'business',
9
+ enum: [
10
+ 'business',
11
+ 'personal'
12
+ ]
13
+ },
5
14
  company: {
6
15
  type: 'string',
7
16
  maxLength: 120,
@@ -74,10 +83,143 @@ export const BillingContactSchema = {
74
83
  nullable: true,
75
84
  description: 'Type of the tax ID.',
76
85
  example: 'de_vat',
77
- enum: ['ad_nrt', 'ae_trn', 'al_tin', 'am_tin', 'ao_tin', 'ar_cuit', 'at_vat', 'au_abn', 'au_arn', 'ba_tin', 'bb_tin', 'be_vat', 'bg_uic', 'bg_vat', 'bh_vat', 'bo_tin', 'br_cnpj', 'br_cpf', 'bs_tin', 'by_tin', 'ca_bn', 'ca_gst_hst', 'ca_pst_bc', 'ca_pst_mb', 'ca_pst_sk', 'ca_qst', 'cd_nif', 'ch_uid', 'ch_vat', 'cl_tin', 'cn_tin', 'co_nit', 'cr_tin', 'cy_vat', 'cz_vat', 'de_stn', 'de_vat', 'dk_vat', 'do_rcn', 'ec_ruc', 'ee_vat', 'eg_tin', 'es_cif', 'es_vat', 'eu_oss_vat', 'fi_vat', 'fr_vat', 'gb_vat', 'ge_vat', 'gn_nif', 'gr_vat', 'hk_br', 'hr_oib', 'hr_vat', 'hu_tin', 'hu_vat', 'id_npwp', 'ie_vat', 'il_vat', 'in_gst', 'is_vat', 'it_vat', 'jp_cn', 'jp_rn', 'jp_trn', 'ke_pin', 'kh_tin', 'kr_brn', 'kz_bin', 'li_uid', 'li_vat', 'lt_vat', 'lu_vat', 'lv_vat', 'ma_vat', 'md_vat', 'me_pib', 'mk_vat', 'mr_nif', 'mt_vat', 'mx_rfc', 'my_frp', 'my_itn', 'my_sst', 'ng_tin', 'nl_vat', 'no_vat', 'no_voec', 'np_pan', 'nz_gst', 'om_vat', 'pe_ruc', 'ph_tin', 'pl_vat', 'pt_vat', 'ro_tin', 'ro_vat', 'rs_pib', 'ru_inn', 'ru_kpp', 'sa_vat', 'se_vat', 'sg_gst', 'sg_uen', 'si_tin', 'si_vat', 'sk_vat', 'sn_ninea', 'sr_fin', 'sv_nit', 'th_vat', 'tj_tin', 'tr_tin', 'tw_vat', 'tz_vat', 'ua_vat', 'ug_tin', 'us_ein', 'uy_ruc', 'uz_tin', 'uz_vat', 've_rif', 'vn_tin', 'xi_vat', 'za_vat', 'zm_tin', 'zw_tin', '']
86
+ enum: [
87
+ 'ad_nrt',
88
+ 'ae_trn',
89
+ 'al_tin',
90
+ 'am_tin',
91
+ 'ao_tin',
92
+ 'ar_cuit',
93
+ 'at_vat',
94
+ 'au_abn',
95
+ 'au_arn',
96
+ 'ba_tin',
97
+ 'bb_tin',
98
+ 'be_vat',
99
+ 'bg_uic',
100
+ 'bg_vat',
101
+ 'bh_vat',
102
+ 'bo_tin',
103
+ 'br_cnpj',
104
+ 'br_cpf',
105
+ 'bs_tin',
106
+ 'by_tin',
107
+ 'ca_bn',
108
+ 'ca_gst_hst',
109
+ 'ca_pst_bc',
110
+ 'ca_pst_mb',
111
+ 'ca_pst_sk',
112
+ 'ca_qst',
113
+ 'cd_nif',
114
+ 'ch_uid',
115
+ 'ch_vat',
116
+ 'cl_tin',
117
+ 'cn_tin',
118
+ 'co_nit',
119
+ 'cr_tin',
120
+ 'cy_vat',
121
+ 'cz_vat',
122
+ 'de_stn',
123
+ 'de_vat',
124
+ 'dk_vat',
125
+ 'do_rcn',
126
+ 'ec_ruc',
127
+ 'ee_vat',
128
+ 'eg_tin',
129
+ 'es_cif',
130
+ 'es_vat',
131
+ 'eu_oss_vat',
132
+ 'fi_vat',
133
+ 'fr_vat',
134
+ 'gb_vat',
135
+ 'ge_vat',
136
+ 'gn_nif',
137
+ 'gr_vat',
138
+ 'hk_br',
139
+ 'hr_oib',
140
+ 'hr_vat',
141
+ 'hu_tin',
142
+ 'hu_vat',
143
+ 'id_npwp',
144
+ 'ie_vat',
145
+ 'il_vat',
146
+ 'in_gst',
147
+ 'is_vat',
148
+ 'it_vat',
149
+ 'jp_cn',
150
+ 'jp_rn',
151
+ 'jp_trn',
152
+ 'ke_pin',
153
+ 'kh_tin',
154
+ 'kr_brn',
155
+ 'kz_bin',
156
+ 'li_uid',
157
+ 'li_vat',
158
+ 'lt_vat',
159
+ 'lu_vat',
160
+ 'lv_vat',
161
+ 'ma_vat',
162
+ 'md_vat',
163
+ 'me_pib',
164
+ 'mk_vat',
165
+ 'mr_nif',
166
+ 'mt_vat',
167
+ 'mx_rfc',
168
+ 'my_frp',
169
+ 'my_itn',
170
+ 'my_sst',
171
+ 'ng_tin',
172
+ 'nl_vat',
173
+ 'no_vat',
174
+ 'no_voec',
175
+ 'np_pan',
176
+ 'nz_gst',
177
+ 'om_vat',
178
+ 'pe_ruc',
179
+ 'ph_tin',
180
+ 'pl_vat',
181
+ 'pt_vat',
182
+ 'ro_tin',
183
+ 'ro_vat',
184
+ 'rs_pib',
185
+ 'ru_inn',
186
+ 'ru_kpp',
187
+ 'sa_vat',
188
+ 'se_vat',
189
+ 'sg_gst',
190
+ 'sg_uen',
191
+ 'si_tin',
192
+ 'si_vat',
193
+ 'sk_vat',
194
+ 'sn_ninea',
195
+ 'sr_fin',
196
+ 'sv_nit',
197
+ 'th_vat',
198
+ 'tj_tin',
199
+ 'tr_tin',
200
+ 'tw_vat',
201
+ 'tz_vat',
202
+ 'ua_vat',
203
+ 'ug_tin',
204
+ 'us_ein',
205
+ 'uy_ruc',
206
+ 'uz_tin',
207
+ 'uz_vat',
208
+ 've_rif',
209
+ 'vn_tin',
210
+ 'xi_vat',
211
+ 'za_vat',
212
+ 'zm_tin',
213
+ 'zw_tin',
214
+ ''
215
+ ]
78
216
  }
79
217
  },
80
- required: ['email', 'individual_name'],
218
+ required: [
219
+ 'type',
220
+ 'email',
221
+ 'individual_name'
222
+ ],
81
223
  additionalProperties: false
82
224
  };
83
225
  export const BillingCreditsSchema = {
@@ -92,7 +234,10 @@ export const BillingCreditsSchema = {
92
234
  type: 'string',
93
235
  description: 'Type of the promotional code.',
94
236
  example: 'credit',
95
- enum: ['credit', 'discount']
237
+ enum: [
238
+ 'credit',
239
+ 'discount'
240
+ ]
96
241
  },
97
242
  date_start: {
98
243
  type: 'string',
@@ -129,7 +274,12 @@ export const BillingCreditsSchema = {
129
274
  example: 8
130
275
  }
131
276
  },
132
- required: ['type', 'date_start', 'code', 'value_total'],
277
+ required: [
278
+ 'type',
279
+ 'date_start',
280
+ 'code',
281
+ 'value_total'
282
+ ],
133
283
  additionalProperties: false
134
284
  };
135
285
  export const ChartCreateInputSchema = {
@@ -170,7 +320,13 @@ export const ChartCreateInputSchema = {
170
320
  example: 'postgresql'
171
321
  }
172
322
  },
173
- required: ['values', 'version_channel', 'name', 'namespace', 'chart'],
323
+ required: [
324
+ 'values',
325
+ 'version_channel',
326
+ 'name',
327
+ 'namespace',
328
+ 'chart'
329
+ ],
174
330
  additionalProperties: false
175
331
  };
176
332
  export const ChartSchema = {
@@ -212,9 +368,8 @@ export const ChartSchema = {
212
368
  },
213
369
  status: {
214
370
  type: 'string',
215
- description: 'Status of the chart deployment.',
216
- example: 'active',
217
- enum: ['InstallSucceeded', 'InstallFailed', 'UpgradeSucceeded', 'UpgradeFailed', 'TestSucceeded', 'TestFailed', 'RollbackSucceeded', 'RollbackFailed', 'UninstallSucceeded', 'UninstallFailed', 'ArtifactFailed', 'DependencyNotReady', 'Progressing', 'SourceNotReady']
371
+ description: 'Status of the chart deployment (Flux HelmRelease Ready condition reason, e.g. InstallSucceeded, UpgradeFailed, Progressing).',
372
+ example: 'InstallSucceeded'
218
373
  },
219
374
  version_current: {
220
375
  type: 'string',
@@ -237,7 +392,18 @@ export const ChartSchema = {
237
392
  example: true
238
393
  }
239
394
  },
240
- required: ['values', 'version_channel', 'name', 'namespace', 'chart', 'status', 'version_current', 'created_at', 'updated_at', 'ready'],
395
+ required: [
396
+ 'values',
397
+ 'version_channel',
398
+ 'name',
399
+ 'namespace',
400
+ 'chart',
401
+ 'status',
402
+ 'version_current',
403
+ 'created_at',
404
+ 'updated_at',
405
+ 'ready'
406
+ ],
241
407
  additionalProperties: false
242
408
  };
243
409
  export const ChartUpdateInputSchema = {
@@ -254,7 +420,10 @@ export const ChartUpdateInputSchema = {
254
420
  example: '2.x.x-cfke.x'
255
421
  }
256
422
  },
257
- required: ['values', 'version_channel'],
423
+ required: [
424
+ 'values',
425
+ 'version_channel'
426
+ ],
258
427
  additionalProperties: false
259
428
  };
260
429
  export const ClusterCreateInputSchema = {
@@ -271,26 +440,118 @@ export const ClusterCreateInputSchema = {
271
440
  tier: {
272
441
  type: 'string',
273
442
  description: 'Tier of the cluster.',
443
+ default: 'basic',
274
444
  example: 'pro',
275
- enum: ['basic', 'pro']
276
- },
277
- region: {
278
- type: 'string',
279
- description: 'Cloudfleet control plane region. One of "staging", "northamerica-central-1", "europe-central-1a", "northamerica-central-1a". This field can not be updated after creation.',
280
- default: 'staging',
281
- example: 'northamerica-central-1a',
282
- enum: ['staging', 'northamerica-central-1', 'europe-central-1a', 'northamerica-central-1a']
445
+ enum: [
446
+ 'basic',
447
+ 'pro',
448
+ 'enterprise'
449
+ ]
283
450
  },
284
451
  version_channel: {
285
452
  type: 'string',
286
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-]+)*))?$',
287
454
  description: 'Version of the kubernetes cluster.',
288
455
  default: '1.x.x-cfke.x',
289
- example: '1.33.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',
463
+ enum: [
464
+ 'rapid',
465
+ 'stable',
466
+ 'extended'
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
+ }
290
547
  }
291
548
  },
292
- required: ['name', 'tier'],
293
- additionalProperties: false
549
+ required: [
550
+ 'name',
551
+ 'region'
552
+ ],
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.'
294
555
  };
295
556
  export const ClusterJoinInformationSchema = {
296
557
  type: 'object',
@@ -298,8 +559,7 @@ export const ClusterJoinInformationSchema = {
298
559
  certificate_authority: {
299
560
  type: 'string',
300
561
  description: 'Certificate authority data for the kubernetes cluster. This is the root certificate authority for the cluster.',
301
- example: `-----BEGIN CERTIFICATE-----
302
- MIIC0DCCAbigAwIBAgI...`
562
+ example: '-----BEGIN CERTIFICATE-----\nMIIC0DCCAbigAwIBAgI...'
303
563
  },
304
564
  endpoint: {
305
565
  type: 'string',
@@ -307,6 +567,16 @@ MIIC0DCCAbigAwIBAgI...`
307
567
  description: 'Internal URL of the Kubernetes cluster control plane. This is the endpoint that kubelet uses to connect to the cluster.',
308
568
  example: 'https://10.31.64.7:6443'
309
569
  },
570
+ cluster_dns: {
571
+ type: 'string',
572
+ description: 'Cluster DNS IP address. This is the IP address of the kube-dns service in the cluster.',
573
+ example: '10.96.0.10'
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
+ },
310
580
  auth_key: {
311
581
  type: 'string',
312
582
  description: 'Authentication key for the cluster.',
@@ -341,7 +611,12 @@ MIIC0DCCAbigAwIBAgI...`
341
611
  example: '565.0.0'
342
612
  }
343
613
  },
344
- required: ['kubernetes', 'tailscale', 'containerd', 'nvidia_driver'],
614
+ required: [
615
+ 'kubernetes',
616
+ 'tailscale',
617
+ 'containerd',
618
+ 'nvidia_driver'
619
+ ],
345
620
  additionalProperties: false,
346
621
  description: 'Versions of the different components of the cluster.'
347
622
  },
@@ -364,12 +639,25 @@ MIIC0DCCAbigAwIBAgI...`
364
639
  example: '//iam.googleapis.com/projects/89014267864/locations/global/workloadIdentityPools/cfke/providers/oidc'
365
640
  }
366
641
  },
367
- required: ['metadata_url', 'aws_role_arn', 'gcp_workload_identity_provider'],
642
+ required: [
643
+ 'metadata_url',
644
+ 'aws_role_arn',
645
+ 'gcp_workload_identity_provider'
646
+ ],
368
647
  additionalProperties: false,
369
- description: "OIDC Information for hosts to access to third party API's."
648
+ description: 'OIDC Information for hosts to access to third party API\'s.'
370
649
  }
371
650
  },
372
- required: ['certificate_authority', 'endpoint', 'auth_key', 'bootstrap_token', 'versions', 'third_party_api_access_config'],
651
+ required: [
652
+ 'certificate_authority',
653
+ 'endpoint',
654
+ 'cluster_dns',
655
+ 'pod_cidr',
656
+ 'auth_key',
657
+ 'bootstrap_token',
658
+ 'versions',
659
+ 'third_party_api_access_config'
660
+ ],
373
661
  additionalProperties: false
374
662
  };
375
663
  export const ClusterSchema = {
@@ -386,22 +674,122 @@ export const ClusterSchema = {
386
674
  tier: {
387
675
  type: 'string',
388
676
  description: 'Tier of the cluster.',
677
+ default: 'basic',
389
678
  example: 'pro',
390
- enum: ['basic', 'pro']
391
- },
392
- region: {
393
- type: 'string',
394
- description: 'Cloudfleet control plane region. One of "staging", "northamerica-central-1", "europe-central-1a", "northamerica-central-1a". This field can not be updated after creation.',
395
- default: 'staging',
396
- example: 'northamerica-central-1a',
397
- enum: ['staging', 'northamerica-central-1', 'europe-central-1a', 'northamerica-central-1a']
679
+ enum: [
680
+ 'basic',
681
+ 'pro',
682
+ 'enterprise'
683
+ ]
398
684
  },
399
685
  version_channel: {
400
686
  type: 'string',
401
687
  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-]+)*))?$',
402
688
  description: 'Version of the kubernetes cluster.',
403
689
  default: '1.x.x-cfke.x',
404
- example: '1.33.x-cfke.x'
690
+ example: '1.x.x-cfke.x'
691
+ },
692
+ release_channel: {
693
+ type: 'string',
694
+ description: 'Release channel for the cluster\'s control plane.',
695
+ default: 'rapid',
696
+ example: 'rapid',
697
+ enum: [
698
+ 'rapid',
699
+ 'stable',
700
+ 'extended'
701
+ ]
702
+ },
703
+ features: {
704
+ type: 'object',
705
+ properties: {
706
+ gpu_sharing_strategy: {
707
+ type: 'string',
708
+ description: 'GPU sharing strategy.',
709
+ default: 'none',
710
+ example: 'none',
711
+ enum: [
712
+ 'none',
713
+ 'mps',
714
+ 'time_slicing'
715
+ ]
716
+ },
717
+ gpu_max_shared_clients_per_gpu: {
718
+ type: 'integer',
719
+ minimum: 2,
720
+ maximum: 48,
721
+ description: 'Maximum number of pods that may share a single GPU.',
722
+ default: 4,
723
+ example: 10
724
+ },
725
+ cilium_socket_lb_host_namespace_only: {
726
+ type: 'boolean',
727
+ description: 'Restrict Cilium socket load-balancing to the host namespace. Required for the Tailscale operator and Istio.',
728
+ example: false
729
+ }
730
+ },
731
+ required: [
732
+ 'gpu_sharing_strategy',
733
+ 'gpu_max_shared_clients_per_gpu',
734
+ 'cilium_socket_lb_host_namespace_only'
735
+ ],
736
+ additionalProperties: false,
737
+ description: 'Cluster feature toggles.',
738
+ default: {
739
+ gpu_sharing_strategy: 'none',
740
+ gpu_max_shared_clients_per_gpu: 4,
741
+ cilium_socket_lb_host_namespace_only: false
742
+ }
743
+ },
744
+ region: {
745
+ type: 'string',
746
+ description: 'Cloudfleet control plane region. This field can not be updated after creation.',
747
+ example: 'europe-central-1a'
748
+ },
749
+ networking: {
750
+ type: 'object',
751
+ properties: {
752
+ pod_cidr: {
753
+ type: 'string',
754
+ description: 'CIDR block for pod IPs.',
755
+ default: '10.244.0.0/16'
756
+ },
757
+ service_cidr: {
758
+ type: 'string',
759
+ description: 'CIDR block for service IPs.',
760
+ default: '10.96.0.0/12'
761
+ },
762
+ dual_stack: {
763
+ type: 'boolean',
764
+ description: 'Enable IPv4+IPv6 dual-stack networking.'
765
+ },
766
+ pod_cidr_v6: {
767
+ type: 'string',
768
+ description: 'IPv6 pod CIDR. Requires dual_stack.',
769
+ default: '2001:db8:1:2::/48'
770
+ },
771
+ service_cidr_v6: {
772
+ type: 'string',
773
+ description: 'IPv6 service CIDR. Requires dual_stack.',
774
+ default: '2001:db8:1:1::/112'
775
+ }
776
+ },
777
+ required: [
778
+ 'pod_cidr',
779
+ 'service_cidr',
780
+ 'dual_stack',
781
+ 'pod_cidr_v6',
782
+ 'service_cidr_v6'
783
+ ],
784
+ additionalProperties: false,
785
+ description: 'Cluster networking configuration. Immutable after creation.',
786
+ default: {
787
+ pod_cidr: '10.244.0.0/16',
788
+ service_cidr: '10.96.0.0/12',
789
+ dual_stack: false,
790
+ pod_cidr_v6: '2001:db8:1:2::/48',
791
+ service_cidr_v6: '2001:db8:1:1::/112'
792
+ }
405
793
  },
406
794
  id: {
407
795
  type: 'string',
@@ -411,29 +799,51 @@ export const ClusterSchema = {
411
799
  },
412
800
  status: {
413
801
  type: 'string',
414
- description: 'Status of the cluster. When creating a new cluster, set to `active`. When deleting a clusters, set to `deleted`.',
415
- example: 'active',
416
- enum: ['active', 'disabled', 'deleted', 'creating', 'deployed', 'failed', 'updating']
802
+ description: 'Status of the cluster.',
803
+ example: 'deployed',
804
+ enum: [
805
+ 'creating',
806
+ 'deployed',
807
+ 'updating',
808
+ 'disabled'
809
+ ]
417
810
  },
418
811
  endpoint: {
419
812
  anyOf: [
420
813
  {
421
814
  type: 'string',
422
815
  format: 'uri',
423
- description: 'URL of the Kubernetes cluster control plane. This is the endpoint that kubectl uses to connect to the cluster.',
424
- example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.cloudfleet.dev:6443'
816
+ 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.',
817
+ example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.io'
425
818
  },
426
819
  {
427
820
  type: 'string',
428
- enum: ['']
821
+ enum: [
822
+ ''
823
+ ]
824
+ }
825
+ ]
826
+ },
827
+ endpoint_public: {
828
+ anyOf: [
829
+ {
830
+ type: 'string',
831
+ format: 'uri',
832
+ description: 'Deprecated alias of `endpoint`; retained for backward compatibility.',
833
+ example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.io'
834
+ },
835
+ {
836
+ type: 'string',
837
+ enum: [
838
+ ''
839
+ ]
429
840
  }
430
841
  ]
431
842
  },
432
843
  certificate_ca: {
433
844
  type: 'string',
434
845
  description: 'Certificate authority data for the kubernetes cluster. This is the root certificate authority for the cluster.',
435
- example: `-----BEGIN CERTIFICATE-----
436
- MIIC0DCCAbigAwIBAgI...`
846
+ example: '-----BEGIN CERTIFICATE-----\nMIIC0DCCAbigAwIBAgI...'
437
847
  },
438
848
  version_current: {
439
849
  type: 'string',
@@ -456,8 +866,20 @@ MIIC0DCCAbigAwIBAgI...`
456
866
  example: true
457
867
  }
458
868
  },
459
- required: ['name', 'tier', 'id', 'status'],
460
- additionalProperties: false
869
+ required: [
870
+ 'name',
871
+ 'tier',
872
+ 'version_channel',
873
+ 'release_channel',
874
+ 'features',
875
+ 'region',
876
+ 'networking',
877
+ 'id',
878
+ 'status',
879
+ 'ready'
880
+ ],
881
+ additionalProperties: false,
882
+ description: 'Mutable cluster configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
461
883
  };
462
884
  export const ClusterUpdateInputSchema = {
463
885
  type: 'object',
@@ -473,18 +895,74 @@ export const ClusterUpdateInputSchema = {
473
895
  tier: {
474
896
  type: 'string',
475
897
  description: 'Tier of the cluster.',
898
+ default: 'basic',
476
899
  example: 'pro',
477
- enum: ['basic', 'pro']
900
+ enum: [
901
+ 'basic',
902
+ 'pro',
903
+ 'enterprise'
904
+ ]
478
905
  },
479
906
  version_channel: {
480
907
  type: 'string',
481
908
  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-]+)*))?$',
482
909
  description: 'Version of the kubernetes cluster.',
483
- example: '1.33.x-cfke.x'
910
+ default: '1.x.x-cfke.x',
911
+ example: '1.x.x-cfke.x'
912
+ },
913
+ release_channel: {
914
+ type: 'string',
915
+ description: 'Release channel for the cluster\'s control plane.',
916
+ default: 'rapid',
917
+ example: 'rapid',
918
+ enum: [
919
+ 'rapid',
920
+ 'stable',
921
+ 'extended'
922
+ ]
923
+ },
924
+ features: {
925
+ type: 'object',
926
+ properties: {
927
+ gpu_sharing_strategy: {
928
+ type: 'string',
929
+ description: 'GPU sharing strategy.',
930
+ default: 'none',
931
+ example: 'none',
932
+ enum: [
933
+ 'none',
934
+ 'mps',
935
+ 'time_slicing'
936
+ ]
937
+ },
938
+ gpu_max_shared_clients_per_gpu: {
939
+ type: 'integer',
940
+ minimum: 2,
941
+ maximum: 48,
942
+ description: 'Maximum number of pods that may share a single GPU.',
943
+ default: 4,
944
+ example: 10
945
+ },
946
+ cilium_socket_lb_host_namespace_only: {
947
+ type: 'boolean',
948
+ description: 'Restrict Cilium socket load-balancing to the host namespace. Required for the Tailscale operator and Istio.',
949
+ example: false
950
+ }
951
+ },
952
+ additionalProperties: false,
953
+ description: 'Cluster feature toggles.',
954
+ default: {
955
+ gpu_sharing_strategy: 'none',
956
+ gpu_max_shared_clients_per_gpu: 4,
957
+ cilium_socket_lb_host_namespace_only: false
958
+ }
484
959
  }
485
960
  },
486
- required: ['tier'],
487
- additionalProperties: false
961
+ required: [
962
+ 'name'
963
+ ],
964
+ additionalProperties: false,
965
+ description: 'Mutable cluster configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
488
966
  };
489
967
  export const FleetCreateInputSchema = {
490
968
  type: 'object',
@@ -493,13 +971,12 @@ export const FleetCreateInputSchema = {
493
971
  type: 'object',
494
972
  properties: {
495
973
  cpu: {
496
- type: 'number',
497
- format: 'float',
974
+ type: 'integer',
498
975
  minimum: 0,
499
- description: 'CPU limit in cores.'
976
+ maximum: 100000,
977
+ description: 'CPU limit in cores. Maximum 100,000.'
500
978
  }
501
979
  },
502
- required: ['cpu'],
503
980
  additionalProperties: false,
504
981
  description: 'Limits define a set of bounds for provisioning capacity.'
505
982
  },
@@ -507,47 +984,358 @@ export const FleetCreateInputSchema = {
507
984
  type: 'object',
508
985
  properties: {
509
986
  enabled: {
510
- type: 'boolean',
511
- default: true
987
+ type: 'boolean'
512
988
  },
513
989
  project: {
514
990
  type: 'string',
515
- description: 'Project GCP Project id to deploy instances into'
991
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
992
+ description: 'GCP project ID to deploy instances into. 6-30 chars, lowercase letters/digits/hyphens, must start with a letter and not end with a hyphen. Omit when GCP is disabled.',
993
+ example: 'my-cloudfleet-project'
516
994
  }
517
995
  },
518
- required: ['project'],
996
+ required: [
997
+ 'enabled'
998
+ ],
519
999
  additionalProperties: false
520
1000
  },
521
1001
  hetzner: {
522
1002
  type: 'object',
523
1003
  properties: {
524
1004
  enabled: {
525
- type: 'boolean',
526
- default: true
1005
+ type: 'boolean'
527
1006
  },
528
1007
  apiKey: {
529
1008
  type: 'string',
530
- description: 'Hetzner Cloud API key with read / write access'
1009
+ maxLength: 64,
1010
+ minLength: 64,
1011
+ pattern: '^([A-Za-z0-9]{64}|\\*{64})$',
1012
+ 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.'
531
1013
  }
532
1014
  },
533
- required: ['apiKey'],
1015
+ required: [
1016
+ 'enabled'
1017
+ ],
534
1018
  additionalProperties: false
535
1019
  },
536
1020
  aws: {
537
1021
  type: 'object',
538
1022
  properties: {
539
1023
  enabled: {
540
- type: 'boolean',
541
- default: true
1024
+ type: 'boolean'
542
1025
  },
543
1026
  controllerRoleArn: {
544
1027
  type: 'string',
545
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1028
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1029
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1030
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
546
1031
  }
547
1032
  },
548
- required: ['controllerRoleArn'],
1033
+ required: [
1034
+ 'enabled'
1035
+ ],
549
1036
  additionalProperties: false
550
1037
  },
1038
+ constraints: {
1039
+ type: 'object',
1040
+ properties: {
1041
+ 'karpenter.sh/capacity-type': {
1042
+ type: 'array',
1043
+ items: {
1044
+ type: 'string',
1045
+ enum: [
1046
+ 'on-demand',
1047
+ 'spot'
1048
+ ]
1049
+ },
1050
+ minItems: 1,
1051
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
1052
+ default: [
1053
+ 'on-demand',
1054
+ 'spot'
1055
+ ]
1056
+ },
1057
+ 'kubernetes.io/arch': {
1058
+ type: 'array',
1059
+ items: {
1060
+ type: 'string',
1061
+ enum: [
1062
+ 'amd64',
1063
+ 'arm64'
1064
+ ]
1065
+ },
1066
+ minItems: 1,
1067
+ description: 'Allowed values for `kubernetes.io/arch`.',
1068
+ default: [
1069
+ 'amd64'
1070
+ ]
1071
+ },
1072
+ 'cfke.io/instance-family': {
1073
+ type: 'array',
1074
+ items: {
1075
+ type: 'string',
1076
+ enum: [
1077
+ 'a1',
1078
+ 'a2',
1079
+ 'a3',
1080
+ 'a4',
1081
+ 'c1',
1082
+ 'c2',
1083
+ 'c2d',
1084
+ 'c3',
1085
+ 'c3d',
1086
+ 'c4',
1087
+ 'c4a',
1088
+ 'c4d',
1089
+ 'c5',
1090
+ 'c5a',
1091
+ 'c5ad',
1092
+ 'c5d',
1093
+ 'c5n',
1094
+ 'c6a',
1095
+ 'c6g',
1096
+ 'c6gd',
1097
+ 'c6gn',
1098
+ 'c6i',
1099
+ 'c6id',
1100
+ 'c6in',
1101
+ 'c7a',
1102
+ 'c7g',
1103
+ 'c7gd',
1104
+ 'c7gn',
1105
+ 'c7i',
1106
+ 'c7i-flex',
1107
+ 'c8g',
1108
+ 'c8gd',
1109
+ 'cax',
1110
+ 'ccx',
1111
+ 'cpx',
1112
+ 'cx',
1113
+ 'd2',
1114
+ 'd3',
1115
+ 'd3en',
1116
+ 'dl1',
1117
+ 'dl2q',
1118
+ 'e2',
1119
+ 'f1',
1120
+ 'f2',
1121
+ 'g1',
1122
+ 'g2',
1123
+ 'g4ad',
1124
+ 'g4dn',
1125
+ 'g5',
1126
+ 'g5g',
1127
+ 'g6',
1128
+ 'g6e',
1129
+ 'gr6',
1130
+ 'h1',
1131
+ 'h3',
1132
+ 'hpc6a',
1133
+ 'hpc6id',
1134
+ 'hpc7a',
1135
+ 'hpc7g',
1136
+ 'i2',
1137
+ 'i3',
1138
+ 'i3en',
1139
+ 'i4g',
1140
+ 'i4i',
1141
+ 'i7i',
1142
+ 'i7ie',
1143
+ 'i8g',
1144
+ 'im4gn',
1145
+ 'inf1',
1146
+ 'inf2',
1147
+ 'is4gen',
1148
+ 'm1',
1149
+ 'm2',
1150
+ 'm3',
1151
+ 'm4',
1152
+ 'm5',
1153
+ 'm5a',
1154
+ 'm5ad',
1155
+ 'm5d',
1156
+ 'm5dn',
1157
+ 'm5n',
1158
+ 'm5zn',
1159
+ 'm6a',
1160
+ 'm6g',
1161
+ 'm6gd',
1162
+ 'm6i',
1163
+ 'm6id',
1164
+ 'm6idn',
1165
+ 'm6in',
1166
+ 'm7a',
1167
+ 'm7g',
1168
+ 'm7gd',
1169
+ 'm7i',
1170
+ 'm7i-flex',
1171
+ 'm8g',
1172
+ 'm8gd',
1173
+ 'n1',
1174
+ 'n2',
1175
+ 'n2d',
1176
+ 'n4',
1177
+ 'p3',
1178
+ 'p3dn',
1179
+ 'p4d',
1180
+ 'p4de',
1181
+ 'p5',
1182
+ 'p5e',
1183
+ 'p5en',
1184
+ 'p6-b200',
1185
+ 'r3',
1186
+ 'r4',
1187
+ 'r5',
1188
+ 'r5a',
1189
+ 'r5ad',
1190
+ 'r5b',
1191
+ 'r5d',
1192
+ 'r5dn',
1193
+ 'r5n',
1194
+ 'r6a',
1195
+ 'r6g',
1196
+ 'r6gd',
1197
+ 'r6i',
1198
+ 'r6id',
1199
+ 'r6idn',
1200
+ 'r6in',
1201
+ 'r7a',
1202
+ 'r7g',
1203
+ 'r7gd',
1204
+ 'r7i',
1205
+ 'r7iz',
1206
+ 'r8g',
1207
+ 'r8gd',
1208
+ 't2',
1209
+ 't2a',
1210
+ 't2d',
1211
+ 't3',
1212
+ 't3a',
1213
+ 't4g',
1214
+ 'trn1',
1215
+ 'trn1n',
1216
+ 'u-3tb1',
1217
+ 'u-6tb1',
1218
+ 'u7i-12tb',
1219
+ 'u7i-6tb',
1220
+ 'u7i-8tb',
1221
+ 'u7in-16tb',
1222
+ 'u7in-24tb',
1223
+ 'u7in-32tb',
1224
+ 'vt1',
1225
+ 'x1',
1226
+ 'x1e',
1227
+ 'x2gd',
1228
+ 'x2idn',
1229
+ 'x2iedn',
1230
+ 'x2iezn',
1231
+ 'x4',
1232
+ 'x8g',
1233
+ 'z1d',
1234
+ 'z3'
1235
+ ]
1236
+ },
1237
+ description: 'Allowed values for `cfke.io/instance-family`.',
1238
+ default: []
1239
+ },
1240
+ 'topology.kubernetes.io/region': {
1241
+ type: 'array',
1242
+ items: {
1243
+ type: 'string',
1244
+ enum: [
1245
+ 'africa-south1',
1246
+ 'ap-northeast-1',
1247
+ 'ap-northeast-2',
1248
+ 'ap-northeast-3',
1249
+ 'ap-south-1',
1250
+ 'ap-southeast-1',
1251
+ 'ap-southeast-2',
1252
+ 'ash',
1253
+ 'asia-east1',
1254
+ 'asia-east2',
1255
+ 'asia-northeast1',
1256
+ 'asia-northeast2',
1257
+ 'asia-northeast3',
1258
+ 'asia-south1',
1259
+ 'asia-south2',
1260
+ 'asia-southeast1',
1261
+ 'asia-southeast2',
1262
+ 'australia-southeast1',
1263
+ 'australia-southeast2',
1264
+ 'ca-central-1',
1265
+ 'eu-central-1',
1266
+ 'eu-central-2',
1267
+ 'eu-north-1',
1268
+ 'eu-west-1',
1269
+ 'eu-west-2',
1270
+ 'eu-west-3',
1271
+ 'europe-central2',
1272
+ 'europe-north1',
1273
+ 'europe-southwest1',
1274
+ 'europe-west1',
1275
+ 'europe-west10',
1276
+ 'europe-west12',
1277
+ 'europe-west2',
1278
+ 'europe-west3',
1279
+ 'europe-west4',
1280
+ 'europe-west6',
1281
+ 'europe-west8',
1282
+ 'europe-west9',
1283
+ 'fsn1',
1284
+ 'hel1',
1285
+ 'hil',
1286
+ 'me-central1',
1287
+ 'me-central2',
1288
+ 'me-west1',
1289
+ 'nbg1',
1290
+ 'northamerica-northeast1',
1291
+ 'northamerica-northeast2',
1292
+ 'sa-east-1',
1293
+ 'sin',
1294
+ 'southamerica-east1',
1295
+ 'southamerica-west1',
1296
+ 'us-central1',
1297
+ 'us-east-1',
1298
+ 'us-east-2',
1299
+ 'us-east1',
1300
+ 'us-east4',
1301
+ 'us-east5',
1302
+ 'us-south1',
1303
+ 'us-west-1',
1304
+ 'us-west-2',
1305
+ 'us-west1',
1306
+ 'us-west2',
1307
+ 'us-west3',
1308
+ 'us-west4'
1309
+ ]
1310
+ },
1311
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
1312
+ default: []
1313
+ }
1314
+ },
1315
+ additionalProperties: false,
1316
+ 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.',
1317
+ default: {
1318
+ 'karpenter.sh/capacity-type': [
1319
+ 'on-demand',
1320
+ 'spot'
1321
+ ],
1322
+ 'kubernetes.io/arch': [
1323
+ 'amd64'
1324
+ ],
1325
+ 'cfke.io/instance-family': [],
1326
+ 'topology.kubernetes.io/region': []
1327
+ }
1328
+ },
1329
+ scalingProfile: {
1330
+ type: 'string',
1331
+ 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`).',
1332
+ default: 'conservative',
1333
+ example: 'conservative',
1334
+ enum: [
1335
+ 'aggressive',
1336
+ 'conservative'
1337
+ ]
1338
+ },
551
1339
  id: {
552
1340
  type: 'string',
553
1341
  maxLength: 63,
@@ -557,8 +1345,11 @@ export const FleetCreateInputSchema = {
557
1345
  example: 'new-clouds-fleet'
558
1346
  }
559
1347
  },
560
- required: ['id'],
561
- additionalProperties: false
1348
+ required: [
1349
+ 'id'
1350
+ ],
1351
+ additionalProperties: false,
1352
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
562
1353
  };
563
1354
  export const FleetSchema = {
564
1355
  type: 'object',
@@ -567,13 +1358,12 @@ export const FleetSchema = {
567
1358
  type: 'object',
568
1359
  properties: {
569
1360
  cpu: {
570
- type: 'number',
571
- format: 'float',
1361
+ type: 'integer',
572
1362
  minimum: 0,
573
- description: 'CPU limit in cores.'
1363
+ maximum: 100000,
1364
+ description: 'CPU limit in cores. Maximum 100,000.'
574
1365
  }
575
1366
  },
576
- required: ['cpu'],
577
1367
  additionalProperties: false,
578
1368
  description: 'Limits define a set of bounds for provisioning capacity.'
579
1369
  },
@@ -581,47 +1371,360 @@ export const FleetSchema = {
581
1371
  type: 'object',
582
1372
  properties: {
583
1373
  enabled: {
584
- type: 'boolean',
585
- default: true
1374
+ type: 'boolean'
586
1375
  },
587
1376
  project: {
588
1377
  type: 'string',
589
- description: 'Project GCP Project id to deploy instances into'
1378
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
1379
+ description: 'GCP project ID to deploy instances into. 6-30 chars, lowercase letters/digits/hyphens, must start with a letter and not end with a hyphen. Omit when GCP is disabled.',
1380
+ example: 'my-cloudfleet-project'
590
1381
  }
591
1382
  },
592
- required: ['project'],
1383
+ required: [
1384
+ 'enabled'
1385
+ ],
593
1386
  additionalProperties: false
594
1387
  },
595
1388
  hetzner: {
596
1389
  type: 'object',
597
1390
  properties: {
598
1391
  enabled: {
599
- type: 'boolean',
600
- default: true
1392
+ type: 'boolean'
601
1393
  },
602
1394
  apiKey: {
603
1395
  type: 'string',
604
- description: 'Hetzner Cloud API key with read / write access'
1396
+ pattern: '^\\*{64}$',
1397
+ description: 'Redacted Hetzner API token. Returned as 64 asterisks when a token is configured; omitted otherwise. The real value is never echoed by the API.'
605
1398
  }
606
1399
  },
607
- required: ['apiKey'],
1400
+ required: [
1401
+ 'enabled'
1402
+ ],
608
1403
  additionalProperties: false
609
1404
  },
610
1405
  aws: {
611
1406
  type: 'object',
612
1407
  properties: {
613
1408
  enabled: {
614
- type: 'boolean',
615
- default: true
1409
+ type: 'boolean'
616
1410
  },
617
1411
  controllerRoleArn: {
618
1412
  type: 'string',
619
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1413
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1414
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1415
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
620
1416
  }
621
1417
  },
622
- required: ['controllerRoleArn'],
1418
+ required: [
1419
+ 'enabled'
1420
+ ],
623
1421
  additionalProperties: false
624
1422
  },
1423
+ constraints: {
1424
+ type: 'object',
1425
+ properties: {
1426
+ 'karpenter.sh/capacity-type': {
1427
+ type: 'array',
1428
+ items: {
1429
+ type: 'string',
1430
+ enum: [
1431
+ 'on-demand',
1432
+ 'spot'
1433
+ ]
1434
+ },
1435
+ minItems: 1,
1436
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
1437
+ default: [
1438
+ 'on-demand',
1439
+ 'spot'
1440
+ ]
1441
+ },
1442
+ 'kubernetes.io/arch': {
1443
+ type: 'array',
1444
+ items: {
1445
+ type: 'string',
1446
+ enum: [
1447
+ 'amd64',
1448
+ 'arm64'
1449
+ ]
1450
+ },
1451
+ minItems: 1,
1452
+ description: 'Allowed values for `kubernetes.io/arch`.',
1453
+ default: [
1454
+ 'amd64'
1455
+ ]
1456
+ },
1457
+ 'cfke.io/instance-family': {
1458
+ type: 'array',
1459
+ items: {
1460
+ type: 'string',
1461
+ enum: [
1462
+ 'a1',
1463
+ 'a2',
1464
+ 'a3',
1465
+ 'a4',
1466
+ 'c1',
1467
+ 'c2',
1468
+ 'c2d',
1469
+ 'c3',
1470
+ 'c3d',
1471
+ 'c4',
1472
+ 'c4a',
1473
+ 'c4d',
1474
+ 'c5',
1475
+ 'c5a',
1476
+ 'c5ad',
1477
+ 'c5d',
1478
+ 'c5n',
1479
+ 'c6a',
1480
+ 'c6g',
1481
+ 'c6gd',
1482
+ 'c6gn',
1483
+ 'c6i',
1484
+ 'c6id',
1485
+ 'c6in',
1486
+ 'c7a',
1487
+ 'c7g',
1488
+ 'c7gd',
1489
+ 'c7gn',
1490
+ 'c7i',
1491
+ 'c7i-flex',
1492
+ 'c8g',
1493
+ 'c8gd',
1494
+ 'cax',
1495
+ 'ccx',
1496
+ 'cpx',
1497
+ 'cx',
1498
+ 'd2',
1499
+ 'd3',
1500
+ 'd3en',
1501
+ 'dl1',
1502
+ 'dl2q',
1503
+ 'e2',
1504
+ 'f1',
1505
+ 'f2',
1506
+ 'g1',
1507
+ 'g2',
1508
+ 'g4ad',
1509
+ 'g4dn',
1510
+ 'g5',
1511
+ 'g5g',
1512
+ 'g6',
1513
+ 'g6e',
1514
+ 'gr6',
1515
+ 'h1',
1516
+ 'h3',
1517
+ 'hpc6a',
1518
+ 'hpc6id',
1519
+ 'hpc7a',
1520
+ 'hpc7g',
1521
+ 'i2',
1522
+ 'i3',
1523
+ 'i3en',
1524
+ 'i4g',
1525
+ 'i4i',
1526
+ 'i7i',
1527
+ 'i7ie',
1528
+ 'i8g',
1529
+ 'im4gn',
1530
+ 'inf1',
1531
+ 'inf2',
1532
+ 'is4gen',
1533
+ 'm1',
1534
+ 'm2',
1535
+ 'm3',
1536
+ 'm4',
1537
+ 'm5',
1538
+ 'm5a',
1539
+ 'm5ad',
1540
+ 'm5d',
1541
+ 'm5dn',
1542
+ 'm5n',
1543
+ 'm5zn',
1544
+ 'm6a',
1545
+ 'm6g',
1546
+ 'm6gd',
1547
+ 'm6i',
1548
+ 'm6id',
1549
+ 'm6idn',
1550
+ 'm6in',
1551
+ 'm7a',
1552
+ 'm7g',
1553
+ 'm7gd',
1554
+ 'm7i',
1555
+ 'm7i-flex',
1556
+ 'm8g',
1557
+ 'm8gd',
1558
+ 'n1',
1559
+ 'n2',
1560
+ 'n2d',
1561
+ 'n4',
1562
+ 'p3',
1563
+ 'p3dn',
1564
+ 'p4d',
1565
+ 'p4de',
1566
+ 'p5',
1567
+ 'p5e',
1568
+ 'p5en',
1569
+ 'p6-b200',
1570
+ 'r3',
1571
+ 'r4',
1572
+ 'r5',
1573
+ 'r5a',
1574
+ 'r5ad',
1575
+ 'r5b',
1576
+ 'r5d',
1577
+ 'r5dn',
1578
+ 'r5n',
1579
+ 'r6a',
1580
+ 'r6g',
1581
+ 'r6gd',
1582
+ 'r6i',
1583
+ 'r6id',
1584
+ 'r6idn',
1585
+ 'r6in',
1586
+ 'r7a',
1587
+ 'r7g',
1588
+ 'r7gd',
1589
+ 'r7i',
1590
+ 'r7iz',
1591
+ 'r8g',
1592
+ 'r8gd',
1593
+ 't2',
1594
+ 't2a',
1595
+ 't2d',
1596
+ 't3',
1597
+ 't3a',
1598
+ 't4g',
1599
+ 'trn1',
1600
+ 'trn1n',
1601
+ 'u-3tb1',
1602
+ 'u-6tb1',
1603
+ 'u7i-12tb',
1604
+ 'u7i-6tb',
1605
+ 'u7i-8tb',
1606
+ 'u7in-16tb',
1607
+ 'u7in-24tb',
1608
+ 'u7in-32tb',
1609
+ 'vt1',
1610
+ 'x1',
1611
+ 'x1e',
1612
+ 'x2gd',
1613
+ 'x2idn',
1614
+ 'x2iedn',
1615
+ 'x2iezn',
1616
+ 'x4',
1617
+ 'x8g',
1618
+ 'z1d',
1619
+ 'z3'
1620
+ ]
1621
+ },
1622
+ description: 'Allowed values for `cfke.io/instance-family`.',
1623
+ default: []
1624
+ },
1625
+ 'topology.kubernetes.io/region': {
1626
+ type: 'array',
1627
+ items: {
1628
+ type: 'string',
1629
+ enum: [
1630
+ 'africa-south1',
1631
+ 'ap-northeast-1',
1632
+ 'ap-northeast-2',
1633
+ 'ap-northeast-3',
1634
+ 'ap-south-1',
1635
+ 'ap-southeast-1',
1636
+ 'ap-southeast-2',
1637
+ 'ash',
1638
+ 'asia-east1',
1639
+ 'asia-east2',
1640
+ 'asia-northeast1',
1641
+ 'asia-northeast2',
1642
+ 'asia-northeast3',
1643
+ 'asia-south1',
1644
+ 'asia-south2',
1645
+ 'asia-southeast1',
1646
+ 'asia-southeast2',
1647
+ 'australia-southeast1',
1648
+ 'australia-southeast2',
1649
+ 'ca-central-1',
1650
+ 'eu-central-1',
1651
+ 'eu-central-2',
1652
+ 'eu-north-1',
1653
+ 'eu-west-1',
1654
+ 'eu-west-2',
1655
+ 'eu-west-3',
1656
+ 'europe-central2',
1657
+ 'europe-north1',
1658
+ 'europe-southwest1',
1659
+ 'europe-west1',
1660
+ 'europe-west10',
1661
+ 'europe-west12',
1662
+ 'europe-west2',
1663
+ 'europe-west3',
1664
+ 'europe-west4',
1665
+ 'europe-west6',
1666
+ 'europe-west8',
1667
+ 'europe-west9',
1668
+ 'fsn1',
1669
+ 'hel1',
1670
+ 'hil',
1671
+ 'me-central1',
1672
+ 'me-central2',
1673
+ 'me-west1',
1674
+ 'nbg1',
1675
+ 'northamerica-northeast1',
1676
+ 'northamerica-northeast2',
1677
+ 'sa-east-1',
1678
+ 'sin',
1679
+ 'southamerica-east1',
1680
+ 'southamerica-west1',
1681
+ 'us-central1',
1682
+ 'us-east-1',
1683
+ 'us-east-2',
1684
+ 'us-east1',
1685
+ 'us-east4',
1686
+ 'us-east5',
1687
+ 'us-south1',
1688
+ 'us-west-1',
1689
+ 'us-west-2',
1690
+ 'us-west1',
1691
+ 'us-west2',
1692
+ 'us-west3',
1693
+ 'us-west4'
1694
+ ]
1695
+ },
1696
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
1697
+ default: []
1698
+ }
1699
+ },
1700
+ required: [
1701
+ 'karpenter.sh/capacity-type',
1702
+ 'kubernetes.io/arch'
1703
+ ],
1704
+ additionalProperties: false,
1705
+ 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.',
1706
+ default: {
1707
+ 'karpenter.sh/capacity-type': [
1708
+ 'on-demand',
1709
+ 'spot'
1710
+ ],
1711
+ 'kubernetes.io/arch': [
1712
+ 'amd64'
1713
+ ],
1714
+ 'cfke.io/instance-family': [],
1715
+ 'topology.kubernetes.io/region': []
1716
+ }
1717
+ },
1718
+ scalingProfile: {
1719
+ type: 'string',
1720
+ 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`).',
1721
+ default: 'conservative',
1722
+ example: 'conservative',
1723
+ enum: [
1724
+ 'aggressive',
1725
+ 'conservative'
1726
+ ]
1727
+ },
625
1728
  id: {
626
1729
  type: 'string',
627
1730
  maxLength: 63,
@@ -629,10 +1732,38 @@ export const FleetSchema = {
629
1732
  pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
630
1733
  description: 'Unique identifier of the kubernetes fleet.',
631
1734
  example: 'new-clouds-fleet'
1735
+ },
1736
+ ready: {
1737
+ type: 'boolean',
1738
+ description: 'Indicates whether the fleet configuration is healthy.',
1739
+ example: true
1740
+ },
1741
+ status_message: {
1742
+ type: 'string',
1743
+ description: 'Human-readable reason the fleet is not ready. Present only when `ready` is false.',
1744
+ example: 'Invalid provider permissions.'
1745
+ },
1746
+ created_at: {
1747
+ type: 'string',
1748
+ description: 'Creation date and time of the fleet.',
1749
+ example: '2024-09-12T09:11:27Z'
1750
+ },
1751
+ updated_at: {
1752
+ type: 'string',
1753
+ description: 'Date and time the fleet was last updated.',
1754
+ example: '2024-09-12T09:11:27Z'
632
1755
  }
633
1756
  },
634
- required: ['id'],
635
- additionalProperties: false
1757
+ required: [
1758
+ 'constraints',
1759
+ 'scalingProfile',
1760
+ 'id',
1761
+ 'ready',
1762
+ 'created_at',
1763
+ 'updated_at'
1764
+ ],
1765
+ additionalProperties: false,
1766
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
636
1767
  };
637
1768
  export const FleetUpdateInputSchema = {
638
1769
  type: 'object',
@@ -641,13 +1772,12 @@ export const FleetUpdateInputSchema = {
641
1772
  type: 'object',
642
1773
  properties: {
643
1774
  cpu: {
644
- type: 'number',
645
- format: 'float',
1775
+ type: 'integer',
646
1776
  minimum: 0,
647
- description: 'CPU limit in cores.'
1777
+ maximum: 100000,
1778
+ description: 'CPU limit in cores. Maximum 100,000.'
648
1779
  }
649
1780
  },
650
- required: ['cpu'],
651
1781
  additionalProperties: false,
652
1782
  description: 'Limits define a set of bounds for provisioning capacity.'
653
1783
  },
@@ -655,48 +1785,385 @@ export const FleetUpdateInputSchema = {
655
1785
  type: 'object',
656
1786
  properties: {
657
1787
  enabled: {
658
- type: 'boolean',
659
- default: true
1788
+ type: 'boolean'
660
1789
  },
661
1790
  project: {
662
1791
  type: 'string',
663
- description: 'Project GCP Project id to deploy instances into'
1792
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
1793
+ description: 'GCP project ID to deploy instances into. 6-30 chars, lowercase letters/digits/hyphens, must start with a letter and not end with a hyphen. Omit when GCP is disabled.',
1794
+ example: 'my-cloudfleet-project'
664
1795
  }
665
1796
  },
666
- required: ['project'],
1797
+ required: [
1798
+ 'enabled'
1799
+ ],
667
1800
  additionalProperties: false
668
1801
  },
669
1802
  hetzner: {
670
1803
  type: 'object',
671
1804
  properties: {
672
1805
  enabled: {
673
- type: 'boolean',
674
- default: true
1806
+ type: 'boolean'
675
1807
  },
676
1808
  apiKey: {
677
1809
  type: 'string',
678
- description: 'Hetzner Cloud API key with read / write access'
1810
+ maxLength: 64,
1811
+ minLength: 64,
1812
+ pattern: '^([A-Za-z0-9]{64}|\\*{64})$',
1813
+ 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.'
679
1814
  }
680
1815
  },
681
- required: ['apiKey'],
1816
+ required: [
1817
+ 'enabled'
1818
+ ],
682
1819
  additionalProperties: false
683
1820
  },
684
1821
  aws: {
685
1822
  type: 'object',
686
1823
  properties: {
687
1824
  enabled: {
688
- type: 'boolean',
689
- default: true
1825
+ type: 'boolean'
690
1826
  },
691
1827
  controllerRoleArn: {
692
1828
  type: 'string',
693
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1829
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1830
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1831
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
694
1832
  }
695
1833
  },
696
- required: ['controllerRoleArn'],
1834
+ required: [
1835
+ 'enabled'
1836
+ ],
697
1837
  additionalProperties: false
1838
+ },
1839
+ constraints: {
1840
+ type: 'object',
1841
+ properties: {
1842
+ 'karpenter.sh/capacity-type': {
1843
+ type: 'array',
1844
+ items: {
1845
+ type: 'string',
1846
+ enum: [
1847
+ 'on-demand',
1848
+ 'spot'
1849
+ ]
1850
+ },
1851
+ minItems: 1,
1852
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
1853
+ default: [
1854
+ 'on-demand',
1855
+ 'spot'
1856
+ ]
1857
+ },
1858
+ 'kubernetes.io/arch': {
1859
+ type: 'array',
1860
+ items: {
1861
+ type: 'string',
1862
+ enum: [
1863
+ 'amd64',
1864
+ 'arm64'
1865
+ ]
1866
+ },
1867
+ minItems: 1,
1868
+ description: 'Allowed values for `kubernetes.io/arch`.',
1869
+ default: [
1870
+ 'amd64'
1871
+ ]
1872
+ },
1873
+ 'cfke.io/instance-family': {
1874
+ type: 'array',
1875
+ items: {
1876
+ type: 'string',
1877
+ enum: [
1878
+ 'a1',
1879
+ 'a2',
1880
+ 'a3',
1881
+ 'a4',
1882
+ 'c1',
1883
+ 'c2',
1884
+ 'c2d',
1885
+ 'c3',
1886
+ 'c3d',
1887
+ 'c4',
1888
+ 'c4a',
1889
+ 'c4d',
1890
+ 'c5',
1891
+ 'c5a',
1892
+ 'c5ad',
1893
+ 'c5d',
1894
+ 'c5n',
1895
+ 'c6a',
1896
+ 'c6g',
1897
+ 'c6gd',
1898
+ 'c6gn',
1899
+ 'c6i',
1900
+ 'c6id',
1901
+ 'c6in',
1902
+ 'c7a',
1903
+ 'c7g',
1904
+ 'c7gd',
1905
+ 'c7gn',
1906
+ 'c7i',
1907
+ 'c7i-flex',
1908
+ 'c8g',
1909
+ 'c8gd',
1910
+ 'cax',
1911
+ 'ccx',
1912
+ 'cpx',
1913
+ 'cx',
1914
+ 'd2',
1915
+ 'd3',
1916
+ 'd3en',
1917
+ 'dl1',
1918
+ 'dl2q',
1919
+ 'e2',
1920
+ 'f1',
1921
+ 'f2',
1922
+ 'g1',
1923
+ 'g2',
1924
+ 'g4ad',
1925
+ 'g4dn',
1926
+ 'g5',
1927
+ 'g5g',
1928
+ 'g6',
1929
+ 'g6e',
1930
+ 'gr6',
1931
+ 'h1',
1932
+ 'h3',
1933
+ 'hpc6a',
1934
+ 'hpc6id',
1935
+ 'hpc7a',
1936
+ 'hpc7g',
1937
+ 'i2',
1938
+ 'i3',
1939
+ 'i3en',
1940
+ 'i4g',
1941
+ 'i4i',
1942
+ 'i7i',
1943
+ 'i7ie',
1944
+ 'i8g',
1945
+ 'im4gn',
1946
+ 'inf1',
1947
+ 'inf2',
1948
+ 'is4gen',
1949
+ 'm1',
1950
+ 'm2',
1951
+ 'm3',
1952
+ 'm4',
1953
+ 'm5',
1954
+ 'm5a',
1955
+ 'm5ad',
1956
+ 'm5d',
1957
+ 'm5dn',
1958
+ 'm5n',
1959
+ 'm5zn',
1960
+ 'm6a',
1961
+ 'm6g',
1962
+ 'm6gd',
1963
+ 'm6i',
1964
+ 'm6id',
1965
+ 'm6idn',
1966
+ 'm6in',
1967
+ 'm7a',
1968
+ 'm7g',
1969
+ 'm7gd',
1970
+ 'm7i',
1971
+ 'm7i-flex',
1972
+ 'm8g',
1973
+ 'm8gd',
1974
+ 'n1',
1975
+ 'n2',
1976
+ 'n2d',
1977
+ 'n4',
1978
+ 'p3',
1979
+ 'p3dn',
1980
+ 'p4d',
1981
+ 'p4de',
1982
+ 'p5',
1983
+ 'p5e',
1984
+ 'p5en',
1985
+ 'p6-b200',
1986
+ 'r3',
1987
+ 'r4',
1988
+ 'r5',
1989
+ 'r5a',
1990
+ 'r5ad',
1991
+ 'r5b',
1992
+ 'r5d',
1993
+ 'r5dn',
1994
+ 'r5n',
1995
+ 'r6a',
1996
+ 'r6g',
1997
+ 'r6gd',
1998
+ 'r6i',
1999
+ 'r6id',
2000
+ 'r6idn',
2001
+ 'r6in',
2002
+ 'r7a',
2003
+ 'r7g',
2004
+ 'r7gd',
2005
+ 'r7i',
2006
+ 'r7iz',
2007
+ 'r8g',
2008
+ 'r8gd',
2009
+ 't2',
2010
+ 't2a',
2011
+ 't2d',
2012
+ 't3',
2013
+ 't3a',
2014
+ 't4g',
2015
+ 'trn1',
2016
+ 'trn1n',
2017
+ 'u-3tb1',
2018
+ 'u-6tb1',
2019
+ 'u7i-12tb',
2020
+ 'u7i-6tb',
2021
+ 'u7i-8tb',
2022
+ 'u7in-16tb',
2023
+ 'u7in-24tb',
2024
+ 'u7in-32tb',
2025
+ 'vt1',
2026
+ 'x1',
2027
+ 'x1e',
2028
+ 'x2gd',
2029
+ 'x2idn',
2030
+ 'x2iedn',
2031
+ 'x2iezn',
2032
+ 'x4',
2033
+ 'x8g',
2034
+ 'z1d',
2035
+ 'z3'
2036
+ ]
2037
+ },
2038
+ description: 'Allowed values for `cfke.io/instance-family`.',
2039
+ default: []
2040
+ },
2041
+ 'topology.kubernetes.io/region': {
2042
+ type: 'array',
2043
+ items: {
2044
+ type: 'string',
2045
+ enum: [
2046
+ 'africa-south1',
2047
+ 'ap-northeast-1',
2048
+ 'ap-northeast-2',
2049
+ 'ap-northeast-3',
2050
+ 'ap-south-1',
2051
+ 'ap-southeast-1',
2052
+ 'ap-southeast-2',
2053
+ 'ash',
2054
+ 'asia-east1',
2055
+ 'asia-east2',
2056
+ 'asia-northeast1',
2057
+ 'asia-northeast2',
2058
+ 'asia-northeast3',
2059
+ 'asia-south1',
2060
+ 'asia-south2',
2061
+ 'asia-southeast1',
2062
+ 'asia-southeast2',
2063
+ 'australia-southeast1',
2064
+ 'australia-southeast2',
2065
+ 'ca-central-1',
2066
+ 'eu-central-1',
2067
+ 'eu-central-2',
2068
+ 'eu-north-1',
2069
+ 'eu-west-1',
2070
+ 'eu-west-2',
2071
+ 'eu-west-3',
2072
+ 'europe-central2',
2073
+ 'europe-north1',
2074
+ 'europe-southwest1',
2075
+ 'europe-west1',
2076
+ 'europe-west10',
2077
+ 'europe-west12',
2078
+ 'europe-west2',
2079
+ 'europe-west3',
2080
+ 'europe-west4',
2081
+ 'europe-west6',
2082
+ 'europe-west8',
2083
+ 'europe-west9',
2084
+ 'fsn1',
2085
+ 'hel1',
2086
+ 'hil',
2087
+ 'me-central1',
2088
+ 'me-central2',
2089
+ 'me-west1',
2090
+ 'nbg1',
2091
+ 'northamerica-northeast1',
2092
+ 'northamerica-northeast2',
2093
+ 'sa-east-1',
2094
+ 'sin',
2095
+ 'southamerica-east1',
2096
+ 'southamerica-west1',
2097
+ 'us-central1',
2098
+ 'us-east-1',
2099
+ 'us-east-2',
2100
+ 'us-east1',
2101
+ 'us-east4',
2102
+ 'us-east5',
2103
+ 'us-south1',
2104
+ 'us-west-1',
2105
+ 'us-west-2',
2106
+ 'us-west1',
2107
+ 'us-west2',
2108
+ 'us-west3',
2109
+ 'us-west4'
2110
+ ]
2111
+ },
2112
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
2113
+ default: []
2114
+ }
2115
+ },
2116
+ additionalProperties: false,
2117
+ 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.',
2118
+ default: {
2119
+ 'karpenter.sh/capacity-type': [
2120
+ 'on-demand',
2121
+ 'spot'
2122
+ ],
2123
+ 'kubernetes.io/arch': [
2124
+ 'amd64'
2125
+ ],
2126
+ 'cfke.io/instance-family': [],
2127
+ 'topology.kubernetes.io/region': []
2128
+ }
2129
+ },
2130
+ scalingProfile: {
2131
+ type: 'string',
2132
+ 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`).',
2133
+ default: 'conservative',
2134
+ example: 'conservative',
2135
+ enum: [
2136
+ 'aggressive',
2137
+ 'conservative'
2138
+ ]
698
2139
  }
699
2140
  },
2141
+ additionalProperties: false,
2142
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
2143
+ };
2144
+ export const InviteCreateInputSchema = {
2145
+ type: 'object',
2146
+ properties: {
2147
+ email: {
2148
+ type: 'string',
2149
+ format: 'email',
2150
+ description: 'Email address of the user to invite.',
2151
+ example: 'email@example.com'
2152
+ },
2153
+ role: {
2154
+ type: 'string',
2155
+ description: 'Role the invited user will be assigned on redemption. Can be \'Administrator\' or \'User\'.',
2156
+ default: 'User',
2157
+ example: 'User',
2158
+ enum: [
2159
+ 'Administrator',
2160
+ 'User'
2161
+ ]
2162
+ }
2163
+ },
2164
+ required: [
2165
+ 'email'
2166
+ ],
700
2167
  additionalProperties: false
701
2168
  };
702
2169
  export const InviteSchema = {
@@ -729,9 +2196,21 @@ export const InviteSchema = {
729
2196
  type: 'string',
730
2197
  description: 'Generated unique invite code.',
731
2198
  example: '7kUZnH7nnKUFfvc4NK2KQF'
2199
+ },
2200
+ role: {
2201
+ type: 'string',
2202
+ description: 'Role the invited user will be assigned on redemption. Can be \'Administrator\' or \'User\'.',
2203
+ default: 'User',
2204
+ example: 'User',
2205
+ enum: [
2206
+ 'Administrator',
2207
+ 'User'
2208
+ ]
732
2209
  }
733
2210
  },
734
- required: ['date_created'],
2211
+ required: [
2212
+ 'date_created'
2213
+ ],
735
2214
  additionalProperties: false
736
2215
  };
737
2216
  export const InvoiceSchema = {
@@ -739,9 +2218,8 @@ export const InvoiceSchema = {
739
2218
  properties: {
740
2219
  id: {
741
2220
  type: 'string',
742
- format: 'uuid',
743
- description: 'Unique identifier of the invoice. UUID v4 string in canonical form',
744
- example: '415026b6-f00f-44f8-968d-fc6ef4d0fc6d'
2221
+ description: 'Unique identifier of the invoice.',
2222
+ example: 'in_1234567890xCrwxghOTj1234'
745
2223
  },
746
2224
  number: {
747
2225
  type: 'string'
@@ -784,95 +2262,179 @@ export const InvoiceSchema = {
784
2262
  type: 'string'
785
2263
  }
786
2264
  },
787
- required: ['created', 'period_start', 'period_end'],
2265
+ required: [
2266
+ 'created',
2267
+ 'period_start',
2268
+ 'period_end'
2269
+ ],
788
2270
  additionalProperties: false
789
2271
  };
790
- export const MarketplaceListingSchema = {
2272
+ export const MarketplaceListingFilesSchema = {
791
2273
  type: 'object',
792
2274
  properties: {
793
- id: {
794
- type: 'string',
795
- maxLength: 63,
796
- minLength: 1,
797
- pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
798
- description: 'Id of the chart listing',
799
- example: 'portworx-enterprise-disaster-recovery-baremetal'
800
- },
801
- name: {
2275
+ chartYaml: {
802
2276
  type: 'string',
803
- description: 'Name of the chart listing',
804
- example: 'Portworx Enterprise + Disaster Recovery - Baremetal'
2277
+ description: 'Raw Chart.yaml content from the Helm chart',
2278
+ example: 'apiVersion: v2\nname: nginx-ingress\nversion: 1.18.2-cfke.45\nappVersion: 1.9.4'
805
2279
  },
806
- developer: {
807
- type: 'string',
808
- description: 'Author of the chart listing',
809
- example: 'Portworx'
810
- },
811
- description: {
2280
+ valuesYaml: {
812
2281
  type: 'string',
813
- description: 'Short description of the chart listing',
814
- example: 'Run Kubernetes with unmatched scalability, availability, and self-service access to any storage'
2282
+ description: 'Raw values.yaml content from the Helm chart',
2283
+ example: 'replicaCount: 1\nimage:\n repository: nginx\n tag: latest'
815
2284
  },
816
- logoUrl: {
2285
+ valuesSchemaJson: {
817
2286
  type: 'string',
818
- description: 'Logo of the chart listing',
819
- example: 'https://portworx.com/wp-content/themes/portworx/assets/images/header/portworx-logo.png'
820
- },
821
- longDescription: {
2287
+ description: 'JSON schema for values.yaml as a string',
2288
+ example: '{"type":"object","properties":{"replicaCount":{"type":"number"}}}'
2289
+ }
2290
+ },
2291
+ additionalProperties: false
2292
+ };
2293
+ export const MarketplaceListingSchema = {
2294
+ type: 'object',
2295
+ properties: {
2296
+ name: {
822
2297
  type: 'string',
823
- description: 'Long description of the chart listing',
824
- example: 'Portworx-Enterprise is the complete multi-cloud ready Kubernetes storage platform for running mission-critical apps in production....'
2298
+ description: 'Name of the chart',
2299
+ example: 'nginx-ingress'
825
2300
  },
826
- categories: {
2301
+ versions: {
827
2302
  type: 'array',
828
2303
  items: {
829
2304
  type: 'string',
830
- example: 'AI & Machine Learning'
2305
+ pattern: '^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(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-]+)*))?$',
2306
+ description: 'Specific version of the chart',
2307
+ example: '1.18.2-cfke.45'
831
2308
  },
832
- description: 'Tags of the chart'
2309
+ description: 'Available versions of the chart'
833
2310
  },
834
2311
  version_channels: {
835
2312
  type: 'array',
836
2313
  items: {
837
2314
  type: 'string',
838
2315
  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-]+)*))?$',
839
- description: 'Version of the chart.',
840
- example: '2.x.x-cfke.x'
841
- }
2316
+ description: 'Version channel pattern',
2317
+ example: '1.18.x-cfke.x'
2318
+ },
2319
+ description: 'Version channels for the chart'
842
2320
  },
843
- value_schemas: {
844
- type: 'array',
845
- items: {
846
- type: 'object',
847
- properties: {
848
- version: {
849
- type: 'string',
850
- 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-]+)*))?$',
851
- description: 'Version of the chart.',
852
- example: '2.1.1-cfke.123'
2321
+ latestVersion: {
2322
+ type: 'string',
2323
+ description: 'Latest version of the chart',
2324
+ example: '1.18.2-cfke.45'
2325
+ },
2326
+ metadata: {
2327
+ type: 'object',
2328
+ properties: {
2329
+ name: {
2330
+ type: 'string',
2331
+ description: 'Chart name from metadata',
2332
+ example: 'nginx-ingress'
2333
+ },
2334
+ version: {
2335
+ type: 'string',
2336
+ description: 'Chart version from metadata',
2337
+ example: '1.18.2-cfke.45'
2338
+ },
2339
+ description: {
2340
+ type: 'string',
2341
+ description: 'Chart description',
2342
+ example: 'NGINX Ingress Controller for Kubernetes'
2343
+ },
2344
+ appVersion: {
2345
+ type: 'string',
2346
+ description: 'Application version',
2347
+ example: '1.9.4'
2348
+ },
2349
+ apiVersion: {
2350
+ type: 'string',
2351
+ description: 'Helm API version',
2352
+ example: 'v2'
2353
+ },
2354
+ keywords: {
2355
+ type: 'array',
2356
+ items: {
2357
+ type: 'string'
853
2358
  },
854
- schema: {
855
- type: 'string',
856
- description: 'Schema of the chart values. JSON Schema as string'
2359
+ description: 'Chart keywords',
2360
+ example: [
2361
+ 'ingress',
2362
+ 'nginx',
2363
+ 'load-balancer'
2364
+ ]
2365
+ },
2366
+ home: {
2367
+ type: 'string',
2368
+ description: 'Chart home URL',
2369
+ example: 'https://kubernetes.github.io/ingress-nginx/'
2370
+ },
2371
+ icon: {
2372
+ type: 'string',
2373
+ description: 'A URL to an SVG or PNG image to be used as an icon',
2374
+ example: 'https://cloudfleet.ai/images/marketplace/icons/ingress-nginx.png'
2375
+ },
2376
+ sources: {
2377
+ type: 'array',
2378
+ items: {
2379
+ type: 'string'
857
2380
  },
858
- placeholder: {
859
- type: 'string',
860
- description: 'Schema of the chart values',
861
- example: `foo: 1
862
- bar: example`
863
- }
2381
+ description: 'Chart source URLs',
2382
+ example: [
2383
+ 'https://github.com/kubernetes/ingress-nginx'
2384
+ ]
864
2385
  },
865
- required: ['version', 'schema', 'placeholder'],
866
- additionalProperties: false
867
- }
2386
+ maintainers: {
2387
+ type: 'array',
2388
+ items: {
2389
+ type: 'object',
2390
+ properties: {
2391
+ name: {
2392
+ type: 'string',
2393
+ description: 'Maintainer name',
2394
+ example: 'NGINX Team'
2395
+ },
2396
+ email: {
2397
+ type: 'string',
2398
+ description: 'Maintainer email',
2399
+ example: 'support@nginx.org'
2400
+ }
2401
+ },
2402
+ required: [
2403
+ 'name'
2404
+ ],
2405
+ additionalProperties: false
2406
+ },
2407
+ description: 'Chart maintainers'
2408
+ }
2409
+ },
2410
+ required: [
2411
+ 'name',
2412
+ 'version'
2413
+ ],
2414
+ additionalProperties: false,
2415
+ description: 'Chart metadata'
868
2416
  }
869
2417
  },
870
- required: ['id', 'name', 'developer', 'description', 'logoUrl', 'longDescription', 'categories', 'version_channels', 'value_schemas'],
2418
+ required: [
2419
+ 'name',
2420
+ 'versions',
2421
+ 'version_channels',
2422
+ 'latestVersion'
2423
+ ],
871
2424
  additionalProperties: false
872
2425
  };
873
2426
  export const OrganizationCreateInputSchema = {
874
2427
  type: 'object',
875
2428
  properties: {
2429
+ type: {
2430
+ type: 'string',
2431
+ description: 'Type of the organization. `business` for legal entities, `personal` for individuals.',
2432
+ example: 'business',
2433
+ enum: [
2434
+ 'business',
2435
+ 'personal'
2436
+ ]
2437
+ },
876
2438
  email: {
877
2439
  type: 'string',
878
2440
  format: 'email',
@@ -881,11 +2443,13 @@ export const OrganizationCreateInputSchema = {
881
2443
  },
882
2444
  first_name: {
883
2445
  type: 'string',
2446
+ minLength: 1,
884
2447
  description: 'First name of the billing contact person.',
885
2448
  example: 'John'
886
2449
  },
887
2450
  last_name: {
888
2451
  type: 'string',
2452
+ minLength: 1,
889
2453
  description: 'Last name of the billing contact person.',
890
2454
  example: 'Doe'
891
2455
  },
@@ -903,7 +2467,28 @@ export const OrganizationCreateInputSchema = {
903
2467
  description: 'Password for the root account. Must be at least 8 characters long and contain at least one uppercase letter, one lowercase letter, one number and one special character.'
904
2468
  }
905
2469
  },
906
- required: ['email', 'first_name', 'last_name', 'company_name', 'password'],
2470
+ required: [
2471
+ 'type',
2472
+ 'email',
2473
+ 'first_name',
2474
+ 'last_name',
2475
+ 'company_name',
2476
+ 'password'
2477
+ ],
2478
+ additionalProperties: false
2479
+ };
2480
+ export const OrganizationCreateOutputSchema = {
2481
+ type: 'object',
2482
+ properties: {
2483
+ id: {
2484
+ type: 'string',
2485
+ description: 'Unique identifier of the newly created organization. Generated by the API and safe to use for client-side tracking immediately.',
2486
+ example: 'organization-id'
2487
+ }
2488
+ },
2489
+ required: [
2490
+ 'id'
2491
+ ],
907
2492
  additionalProperties: false
908
2493
  };
909
2494
  export const OrganizationSchema = {
@@ -922,6 +2507,15 @@ export const OrganizationSchema = {
922
2507
  description: 'Name of the legal entity. This name will be used in invoices. Use your first and last name for individual accounts.',
923
2508
  example: 'ACME Corp.'
924
2509
  },
2510
+ type: {
2511
+ type: 'string',
2512
+ description: 'Type of the organization. `business` for legal entities, `personal` for individuals.',
2513
+ example: 'business',
2514
+ enum: [
2515
+ 'business',
2516
+ 'personal'
2517
+ ]
2518
+ },
925
2519
  date_created: {
926
2520
  type: 'string',
927
2521
  format: 'date-time',
@@ -953,6 +2547,17 @@ export const OrganizationSchema = {
953
2547
  description: 'Available number of Pro clusters that can be created.',
954
2548
  example: 999
955
2549
  },
2550
+ enterprise_clusters_max: {
2551
+ type: 'integer',
2552
+ minimum: 0,
2553
+ description: 'Maximum number of Enterprise clusters that can be created.',
2554
+ example: 999
2555
+ },
2556
+ enterprise_clusters_available: {
2557
+ type: 'integer',
2558
+ description: 'Available number of Enterprise clusters that can be created.',
2559
+ example: 999
2560
+ },
956
2561
  fleets_max: {
957
2562
  type: 'integer',
958
2563
  minimum: 0,
@@ -972,7 +2577,7 @@ export const OrganizationSchema = {
972
2577
  type: 'array',
973
2578
  items: {
974
2579
  type: 'string',
975
- example: 'northamerica-central-1'
2580
+ example: 'northamerica-central-1a'
976
2581
  },
977
2582
  minItems: 1,
978
2583
  description: 'List of Cloudfleet control plane regions available for the organization.'
@@ -993,24 +2598,66 @@ export const OrganizationSchema = {
993
2598
  example: '1.33.x (Always latest 1.33 patch version)'
994
2599
  }
995
2600
  },
996
- required: ['id', 'label'],
2601
+ required: [
2602
+ 'id',
2603
+ 'label'
2604
+ ],
997
2605
  additionalProperties: false
998
2606
  },
999
2607
  minItems: 1,
1000
2608
  description: 'List of CFKE control plane versions available for the organization.'
2609
+ },
2610
+ cfcr_storage_gb: {
2611
+ type: 'integer',
2612
+ minimum: -1,
2613
+ description: 'Organization-level maximum CFCR storage volume in GB. -1 means no limit.',
2614
+ example: 500
1001
2615
  }
1002
2616
  },
1003
- required: ['basic_clusters_max', 'basic_clusters_available', 'pro_clusters_max', 'pro_clusters_available', 'fleets_max', 'cluster_tiers', 'regions', 'versions'],
2617
+ required: [
2618
+ 'basic_clusters_max',
2619
+ 'basic_clusters_available',
2620
+ 'pro_clusters_max',
2621
+ 'pro_clusters_available',
2622
+ 'enterprise_clusters_max',
2623
+ 'enterprise_clusters_available',
2624
+ 'fleets_max',
2625
+ 'cluster_tiers',
2626
+ 'regions',
2627
+ 'versions',
2628
+ 'cfcr_storage_gb'
2629
+ ],
1004
2630
  additionalProperties: false,
1005
2631
  description: 'For security reasons, platform quota is controlled by Cloudfleet and can be updated only by Cloudfleet administrators. Please open a support ticket if you need to change the platform quota.'
1006
2632
  },
1007
2633
  status: {
1008
2634
  type: 'string',
1009
2635
  description: 'Status of the organization. Can be `active` or `closed`, or `suspended`.',
1010
- enum: ['active', 'closed', 'suspended']
2636
+ enum: [
2637
+ 'active',
2638
+ 'closed',
2639
+ 'suspended'
2640
+ ]
2641
+ },
2642
+ verification: {
2643
+ type: 'string',
2644
+ description: 'Verification status of the organization, which determines the assigned quota. `none` when billing information is incomplete, `submitted` when billing information is complete but the organization is not yet verified, `verified` when the organization is verified.',
2645
+ example: 'verified',
2646
+ enum: [
2647
+ 'none',
2648
+ 'submitted',
2649
+ 'verified'
2650
+ ]
1011
2651
  }
1012
2652
  },
1013
- required: ['id', 'date_created', 'quota', 'status'],
2653
+ required: [
2654
+ 'id',
2655
+ 'type',
2656
+ 'date_created',
2657
+ 'quota',
2658
+ 'status',
2659
+ 'verification'
2660
+ ],
1014
2661
  additionalProperties: false
1015
2662
  };
1016
2663
  export const PaymentMethodSchema = {
@@ -1018,26 +2665,23 @@ export const PaymentMethodSchema = {
1018
2665
  properties: {
1019
2666
  id: {
1020
2667
  type: 'string',
1021
- format: 'uuid',
1022
- description: 'Unique identifier of the organization. UUID v4 string in canonical form.',
1023
- example: 'e94d30ec-a2dd-4dcb-832c-ac2be144ba91'
1024
- },
1025
- setup: {
1026
- type: 'boolean',
1027
- description: 'Whether organization payment method was set up and ready to use for payments.',
1028
- example: true
2668
+ description: 'Payment method identifier. Stripe payment method id for cards/SEPA; the constant `bank_transfer` for the invoice/bank-transfer method. Used to set as default or delete the payment method.',
2669
+ example: 'pm_1MtwBwLkdIwHu7ix28a3tqPa'
1029
2670
  },
1030
2671
  type: {
1031
2672
  type: 'string',
1032
- nullable: true,
1033
- description: 'Payment method type type. Only `card` payments supported at the moment.',
2673
+ description: 'Payment method type. `card`, `sepa_debit` for SEPA Direct Debit (business accounts only), or `bank_transfer` for paying invoices by bank transfer.',
1034
2674
  example: 'card',
1035
- enum: ['card']
2675
+ enum: [
2676
+ 'card',
2677
+ 'sepa_debit',
2678
+ 'bank_transfer'
2679
+ ]
1036
2680
  },
1037
2681
  last4: {
1038
2682
  type: 'string',
1039
2683
  nullable: true,
1040
- description: 'Last 4 digits of the payment card number.',
2684
+ description: 'Last 4 digits of the payment card number, of the bank account (IBAN) for SEPA Direct Debit, or of the destination IBAN for bank transfer.',
1041
2685
  example: '4242'
1042
2686
  },
1043
2687
  exp_month: {
@@ -1045,25 +2689,57 @@ export const PaymentMethodSchema = {
1045
2689
  minimum: 1,
1046
2690
  maximum: 12,
1047
2691
  nullable: true,
1048
- description: "Two-digit number representing the card's expiration month.",
1049
- example: '12'
2692
+ description: 'Two-digit number representing the card\'s expiration month. Null for SEPA Direct Debit and bank transfer.',
2693
+ example: 12
1050
2694
  },
1051
2695
  exp_year: {
1052
2696
  type: 'integer',
1053
- minimum: 2024,
1054
2697
  nullable: true,
1055
- description: "Four-digit number representing the card's expiration year.",
1056
- example: '2028'
2698
+ description: 'Four-digit number representing the card\'s expiration year. May be in the past for an expired card still on file. Null for SEPA Direct Debit and bank transfer.',
2699
+ example: 2028
1057
2700
  },
1058
2701
  brand: {
1059
2702
  type: 'string',
1060
2703
  nullable: true,
1061
- description: 'Payment card brand. Can be `amex`, `diners`, `discover`, `eftpos_au`, `jcb`, `mastercard`, `unionpay`, `visa`, or `unknown`.',
1062
- example: 'visa',
1063
- enum: ['amex', 'diners', 'discover', 'eftpos_au', 'jcb', 'mastercard', 'unionpay', 'visa', 'unknown']
2704
+ description: 'Payment card brand as reported by Stripe, e.g. `visa`, `mastercard`, `amex`, `cartes_bancaires`, or `unknown`. Null for SEPA Direct Debit and bank transfer.',
2705
+ example: 'visa'
2706
+ },
2707
+ iban: {
2708
+ type: 'string',
2709
+ nullable: true,
2710
+ description: 'Full destination IBAN to send bank transfers to. Set only for `bank_transfer`; null otherwise. This is Cloudfleet\'s virtual receiving account, shown in full so the customer can pay into it.',
2711
+ example: 'DE11243015658023127510'
2712
+ },
2713
+ bic: {
2714
+ type: 'string',
2715
+ nullable: true,
2716
+ description: 'BIC/SWIFT of the destination bank for bank transfers. Set only for `bank_transfer`; null otherwise.',
2717
+ example: 'SOGEDEFFXXX'
2718
+ },
2719
+ account_holder_name: {
2720
+ type: 'string',
2721
+ nullable: true,
2722
+ description: 'Account holder name of the destination bank account for bank transfers. Set only for `bank_transfer`; null otherwise.',
2723
+ example: 'Cloudfleet GmbH'
2724
+ },
2725
+ is_default: {
2726
+ type: 'boolean',
2727
+ description: 'Whether this payment method is the default used for invoices and active subscriptions. Always false for `bank_transfer` (it cannot be a Stripe default payment method).',
2728
+ example: true
1064
2729
  }
1065
2730
  },
1066
- required: ['id', 'setup', 'type', 'last4', 'exp_month', 'exp_year', 'brand'],
2731
+ required: [
2732
+ 'id',
2733
+ 'type',
2734
+ 'last4',
2735
+ 'exp_month',
2736
+ 'exp_year',
2737
+ 'brand',
2738
+ 'iban',
2739
+ 'bic',
2740
+ 'account_holder_name',
2741
+ 'is_default'
2742
+ ],
1067
2743
  additionalProperties: false
1068
2744
  };
1069
2745
  export const PlatformQuotaSchema = {
@@ -1091,6 +2767,17 @@ export const PlatformQuotaSchema = {
1091
2767
  description: 'Available number of Pro clusters that can be created.',
1092
2768
  example: 999
1093
2769
  },
2770
+ enterprise_clusters_max: {
2771
+ type: 'integer',
2772
+ minimum: 0,
2773
+ description: 'Maximum number of Enterprise clusters that can be created.',
2774
+ example: 999
2775
+ },
2776
+ enterprise_clusters_available: {
2777
+ type: 'integer',
2778
+ description: 'Available number of Enterprise clusters that can be created.',
2779
+ example: 999
2780
+ },
1094
2781
  fleets_max: {
1095
2782
  type: 'integer',
1096
2783
  minimum: 0,
@@ -1110,7 +2797,7 @@ export const PlatformQuotaSchema = {
1110
2797
  type: 'array',
1111
2798
  items: {
1112
2799
  type: 'string',
1113
- example: 'northamerica-central-1'
2800
+ example: 'northamerica-central-1a'
1114
2801
  },
1115
2802
  minItems: 1,
1116
2803
  description: 'List of Cloudfleet control plane regions available for the organization.'
@@ -1131,14 +2818,35 @@ export const PlatformQuotaSchema = {
1131
2818
  example: '1.33.x (Always latest 1.33 patch version)'
1132
2819
  }
1133
2820
  },
1134
- required: ['id', 'label'],
2821
+ required: [
2822
+ 'id',
2823
+ 'label'
2824
+ ],
1135
2825
  additionalProperties: false
1136
2826
  },
1137
2827
  minItems: 1,
1138
2828
  description: 'List of CFKE control plane versions available for the organization.'
2829
+ },
2830
+ cfcr_storage_gb: {
2831
+ type: 'integer',
2832
+ minimum: -1,
2833
+ description: 'Organization-level maximum CFCR storage volume in GB. -1 means no limit.',
2834
+ example: 500
1139
2835
  }
1140
2836
  },
1141
- required: ['basic_clusters_max', 'basic_clusters_available', 'pro_clusters_max', 'pro_clusters_available', 'fleets_max', 'cluster_tiers', 'regions', 'versions'],
2837
+ required: [
2838
+ 'basic_clusters_max',
2839
+ 'basic_clusters_available',
2840
+ 'pro_clusters_max',
2841
+ 'pro_clusters_available',
2842
+ 'enterprise_clusters_max',
2843
+ 'enterprise_clusters_available',
2844
+ 'fleets_max',
2845
+ 'cluster_tiers',
2846
+ 'regions',
2847
+ 'versions',
2848
+ 'cfcr_storage_gb'
2849
+ ],
1142
2850
  additionalProperties: false
1143
2851
  };
1144
2852
  export const RegistryRepositorySchema = {
@@ -1157,10 +2865,14 @@ export const RegistryRepositorySchema = {
1157
2865
  uri: {
1158
2866
  type: 'string',
1159
2867
  description: 'Full URI of the repository.',
1160
- example: 'ssds123e-6651-4e5d-9c04-079f6532989b.northamerica.registry.cloudfleet.dev/v2/my-app'
2868
+ example: 'ssds123e-6651-4e5d-9c04-079f6532989b.northamerica.registry.cloudfleet.dev/my-app'
1161
2869
  }
1162
2870
  },
1163
- required: ['name', 'region', 'uri'],
2871
+ required: [
2872
+ 'name',
2873
+ 'region',
2874
+ 'uri'
2875
+ ],
1164
2876
  additionalProperties: false
1165
2877
  };
1166
2878
  export const RegistryRepositoryWithTagsSchema = {
@@ -1179,7 +2891,7 @@ export const RegistryRepositoryWithTagsSchema = {
1179
2891
  uri: {
1180
2892
  type: 'string',
1181
2893
  description: 'Full URI of the repository.',
1182
- example: 'ssds123e-6651-4e5d-9c04-079f6532989b.northamerica.registry.cloudfleet.dev/v2/my-app'
2894
+ example: 'ssds123e-6651-4e5d-9c04-079f6532989b.northamerica.registry.cloudfleet.dev/my-app'
1183
2895
  },
1184
2896
  tags: {
1185
2897
  type: 'array',
@@ -1201,9 +2913,23 @@ export const RegistryRepositoryWithTagsSchema = {
1201
2913
  type: 'string',
1202
2914
  description: 'Media type of the manifest.',
1203
2915
  example: 'application/vnd.docker.distribution.manifest.v2+json'
2916
+ },
2917
+ platforms: {
2918
+ type: 'array',
2919
+ items: {
2920
+ type: 'string'
2921
+ },
2922
+ description: 'Array of platform strings for multi-arch images (e.g., linux/amd64, linux/arm64).',
2923
+ example: [
2924
+ 'linux/amd64',
2925
+ 'linux/arm64'
2926
+ ]
1204
2927
  }
1205
2928
  },
1206
- required: ['name', 'size'],
2929
+ required: [
2930
+ 'name',
2931
+ 'size'
2932
+ ],
1207
2933
  additionalProperties: false
1208
2934
  },
1209
2935
  description: 'Array of tags in the repository.'
@@ -1215,7 +2941,13 @@ export const RegistryRepositoryWithTagsSchema = {
1215
2941
  example: 987654321
1216
2942
  }
1217
2943
  },
1218
- required: ['name', 'region', 'uri', 'tags', 'totalSize'],
2944
+ required: [
2945
+ 'name',
2946
+ 'region',
2947
+ 'uri',
2948
+ 'tags',
2949
+ 'totalSize'
2950
+ ],
1219
2951
  additionalProperties: false
1220
2952
  };
1221
2953
  export const RegistryTagSchema = {
@@ -1226,6 +2958,11 @@ export const RegistryTagSchema = {
1226
2958
  description: 'Tag name.',
1227
2959
  example: 'latest'
1228
2960
  },
2961
+ digest: {
2962
+ type: 'string',
2963
+ description: 'Manifest digest for pulling by digest.',
2964
+ example: 'sha256:abcd1234ef567890abcd1234ef567890abcd1234ef567890abcd1234ef567890'
2965
+ },
1229
2966
  mediaType: {
1230
2967
  type: 'string',
1231
2968
  description: 'Media type of the manifest.',
@@ -1241,7 +2978,9 @@ export const RegistryTagSchema = {
1241
2978
  example: 1234
1242
2979
  }
1243
2980
  },
1244
- required: ['size'],
2981
+ required: [
2982
+ 'size'
2983
+ ],
1245
2984
  additionalProperties: false,
1246
2985
  description: 'Manifest config metadata.'
1247
2986
  },
@@ -1250,6 +2989,11 @@ export const RegistryTagSchema = {
1250
2989
  items: {
1251
2990
  type: 'object',
1252
2991
  properties: {
2992
+ digest: {
2993
+ type: 'string',
2994
+ description: 'Digest of the layer.',
2995
+ example: 'sha256:abcd1234ef567890abcd1234ef567890abcd1234ef567890abcd1234ef567890'
2996
+ },
1253
2997
  size: {
1254
2998
  type: 'number',
1255
2999
  format: 'float',
@@ -1257,7 +3001,9 @@ export const RegistryTagSchema = {
1257
3001
  example: 5678
1258
3002
  }
1259
3003
  },
1260
- required: ['size'],
3004
+ required: [
3005
+ 'size'
3006
+ ],
1261
3007
  additionalProperties: false
1262
3008
  },
1263
3009
  description: 'Array of layer metadata.'
@@ -1284,14 +3030,54 @@ export const RegistryTagSchema = {
1284
3030
  type: 'string',
1285
3031
  description: 'Operating system of the platform.',
1286
3032
  example: 'linux'
3033
+ },
3034
+ variant: {
3035
+ type: 'string',
3036
+ description: 'Variant of the platform (e.g., v7, v8 for ARM).',
3037
+ example: 'v8'
1287
3038
  }
1288
3039
  },
1289
- required: ['architecture', 'os'],
3040
+ required: [
3041
+ 'architecture',
3042
+ 'os'
3043
+ ],
1290
3044
  additionalProperties: false,
1291
3045
  description: 'Platform information for the manifest.'
3046
+ },
3047
+ layers: {
3048
+ type: 'array',
3049
+ items: {
3050
+ type: 'object',
3051
+ properties: {
3052
+ digest: {
3053
+ type: 'string',
3054
+ description: 'Digest of the layer.',
3055
+ example: 'sha256:abcd1234ef567890abcd1234ef567890abcd1234ef567890abcd1234ef567890'
3056
+ },
3057
+ size: {
3058
+ type: 'number',
3059
+ format: 'float',
3060
+ description: 'Size of the layer in bytes.',
3061
+ example: 5678
3062
+ }
3063
+ },
3064
+ required: [
3065
+ 'size'
3066
+ ],
3067
+ additionalProperties: false
3068
+ },
3069
+ description: 'Layers for this platform.'
3070
+ },
3071
+ size: {
3072
+ type: 'number',
3073
+ format: 'float',
3074
+ description: 'Total size of this platform manifest in bytes.',
3075
+ example: 12345678
1292
3076
  }
1293
3077
  },
1294
- required: ['digest'],
3078
+ required: [
3079
+ 'digest'
3080
+ ],
1295
3081
  additionalProperties: false
1296
3082
  },
1297
3083
  description: 'Array of manifests for multi-arch images.'
@@ -1318,7 +3104,337 @@ export const RegistryTagSchema = {
1318
3104
  example: 'ssds123e-6651-4e5d-9c04-079f6532989b.northamerica.registry.cloudfleet.dev/my-app:latest'
1319
3105
  }
1320
3106
  },
1321
- required: ['name', 'size', 'region', 'repository', 'uri'],
3107
+ required: [
3108
+ 'name',
3109
+ 'digest',
3110
+ 'size',
3111
+ 'region',
3112
+ 'repository',
3113
+ 'uri'
3114
+ ],
3115
+ additionalProperties: false
3116
+ };
3117
+ export const TicketAttachmentSchema = {
3118
+ type: 'object',
3119
+ properties: {
3120
+ id: {
3121
+ type: 'string',
3122
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
3123
+ example: '60c72b2f9f1b2c001f8e4d3c'
3124
+ },
3125
+ filename: {
3126
+ type: 'string',
3127
+ description: 'Original filename as uploaded.',
3128
+ example: 'debug.log'
3129
+ },
3130
+ content_type: {
3131
+ type: 'string',
3132
+ description: 'MIME content type of the attachment.',
3133
+ example: 'text/plain'
3134
+ },
3135
+ size: {
3136
+ type: 'integer',
3137
+ description: 'Size of the attachment in bytes.',
3138
+ example: 12345
3139
+ }
3140
+ },
3141
+ required: [
3142
+ 'id',
3143
+ 'filename',
3144
+ 'content_type',
3145
+ 'size'
3146
+ ],
3147
+ additionalProperties: false
3148
+ };
3149
+ export const TicketCreateInputSchema = {
3150
+ type: 'object',
3151
+ properties: {
3152
+ category: {
3153
+ type: 'string',
3154
+ description: 'Ticket category. Drives auto-assignment and may carry a subcategory in `properties`.',
3155
+ example: 'technical',
3156
+ enum: [
3157
+ 'billing',
3158
+ 'technical',
3159
+ 'general'
3160
+ ]
3161
+ },
3162
+ body: {
3163
+ type: 'string',
3164
+ maxLength: 50000,
3165
+ minLength: 1,
3166
+ pattern: '\\S',
3167
+ description: 'Initial message body in markdown. There is no separate subject — the first message body is the description.',
3168
+ example: 'My cluster cannot reach the registry. Logs attached.'
3169
+ },
3170
+ properties: {
3171
+ type: 'object',
3172
+ additionalProperties: true,
3173
+ description: 'Free-form key/value bag set by the UI (e.g. `subcategory`, `cluster_id`, `cluster_name`, `region`).',
3174
+ example: {
3175
+ subcategory: 'cluster-question',
3176
+ cluster_id: '60c72b2f9f1b2c001f8e4d3a'
3177
+ }
3178
+ }
3179
+ },
3180
+ required: [
3181
+ 'category',
3182
+ 'body'
3183
+ ],
3184
+ additionalProperties: false
3185
+ };
3186
+ export const TicketMessageInputSchema = {
3187
+ type: 'object',
3188
+ properties: {
3189
+ body: {
3190
+ type: 'string',
3191
+ maxLength: 50000,
3192
+ minLength: 1,
3193
+ pattern: '\\S',
3194
+ description: 'Reply body in markdown.',
3195
+ example: 'Thanks — that resolved it on my side.'
3196
+ }
3197
+ },
3198
+ required: [
3199
+ 'body'
3200
+ ],
3201
+ additionalProperties: false
3202
+ };
3203
+ export const TicketMessageSchema = {
3204
+ type: 'object',
3205
+ properties: {
3206
+ id: {
3207
+ type: 'string',
3208
+ description: 'Unique identifier of the message (Mongo ObjectId).',
3209
+ example: '60c72b2f9f1b2c001f8e4d3b'
3210
+ },
3211
+ type: {
3212
+ type: 'string',
3213
+ description: 'Message type. Internal notes are filtered out of customer-facing responses.',
3214
+ example: 'customer_reply',
3215
+ enum: [
3216
+ 'customer_reply',
3217
+ 'agent_reply'
3218
+ ]
3219
+ },
3220
+ body: {
3221
+ type: 'string',
3222
+ description: 'Message body in markdown.',
3223
+ example: 'Thanks — that resolved it on my side.'
3224
+ },
3225
+ author_first_name: {
3226
+ type: 'string',
3227
+ nullable: true,
3228
+ description: 'First name of the author. Null when not provided.',
3229
+ example: 'Jane'
3230
+ },
3231
+ author_last_name: {
3232
+ type: 'string',
3233
+ nullable: true,
3234
+ description: 'Last name of the author. Null when not provided.',
3235
+ example: 'Doe'
3236
+ },
3237
+ attachments: {
3238
+ type: 'array',
3239
+ items: {
3240
+ type: 'object',
3241
+ properties: {
3242
+ id: {
3243
+ type: 'string',
3244
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
3245
+ example: '60c72b2f9f1b2c001f8e4d3c'
3246
+ },
3247
+ filename: {
3248
+ type: 'string',
3249
+ description: 'Original filename as uploaded.',
3250
+ example: 'debug.log'
3251
+ },
3252
+ content_type: {
3253
+ type: 'string',
3254
+ description: 'MIME content type of the attachment.',
3255
+ example: 'text/plain'
3256
+ },
3257
+ size: {
3258
+ type: 'integer',
3259
+ description: 'Size of the attachment in bytes.',
3260
+ example: 12345
3261
+ }
3262
+ },
3263
+ required: [
3264
+ 'id',
3265
+ 'filename',
3266
+ 'content_type',
3267
+ 'size'
3268
+ ],
3269
+ additionalProperties: false
3270
+ },
3271
+ description: 'Attachments associated with this message.',
3272
+ example: []
3273
+ },
3274
+ date_created: {
3275
+ type: 'string',
3276
+ format: 'date-time',
3277
+ description: 'Creation date of the message. ISO 8601 UTC.',
3278
+ example: '2026-05-11T16:08:14.338Z'
3279
+ }
3280
+ },
3281
+ required: [
3282
+ 'id',
3283
+ 'type',
3284
+ 'body',
3285
+ 'date_created'
3286
+ ],
3287
+ additionalProperties: false
3288
+ };
3289
+ export const TicketSchema = {
3290
+ type: 'object',
3291
+ properties: {
3292
+ id: {
3293
+ type: 'string',
3294
+ description: 'Unique identifier of the ticket (Mongo ObjectId).',
3295
+ example: '60c72b2f9f1b2c001f8e4d3a'
3296
+ },
3297
+ status: {
3298
+ type: 'string',
3299
+ description: 'Current state of the ticket.',
3300
+ example: 'waiting_on_us',
3301
+ enum: [
3302
+ 'waiting_on_us',
3303
+ 'waiting_on_user',
3304
+ 'closed'
3305
+ ]
3306
+ },
3307
+ category: {
3308
+ type: 'string',
3309
+ description: 'Ticket category.',
3310
+ example: 'technical',
3311
+ enum: [
3312
+ 'billing',
3313
+ 'technical',
3314
+ 'general'
3315
+ ]
3316
+ },
3317
+ summary: {
3318
+ type: 'string',
3319
+ description: 'First 128 characters of the initial message body, with markdown formatting and newlines stripped. Used for ticket list previews.',
3320
+ example: 'My cluster cannot reach the registry. Logs attached.'
3321
+ },
3322
+ closed_at: {
3323
+ type: 'string',
3324
+ format: 'date-time',
3325
+ nullable: true,
3326
+ description: 'Closure timestamp. Null while the ticket is open.',
3327
+ example: '2026-05-18T16:08:14.338Z'
3328
+ },
3329
+ date_created: {
3330
+ type: 'string',
3331
+ format: 'date-time',
3332
+ description: 'Creation date of the ticket. ISO 8601 UTC.',
3333
+ example: '2026-05-11T16:08:14.338Z'
3334
+ },
3335
+ date_updated: {
3336
+ type: 'string',
3337
+ format: 'date-time',
3338
+ description: 'Last update date of the ticket. ISO 8601 UTC.',
3339
+ example: '2026-05-11T16:08:14.338Z'
3340
+ },
3341
+ messages: {
3342
+ type: 'array',
3343
+ items: {
3344
+ type: 'object',
3345
+ properties: {
3346
+ id: {
3347
+ type: 'string',
3348
+ description: 'Unique identifier of the message (Mongo ObjectId).',
3349
+ example: '60c72b2f9f1b2c001f8e4d3b'
3350
+ },
3351
+ type: {
3352
+ type: 'string',
3353
+ description: 'Message type. Internal notes are filtered out of customer-facing responses.',
3354
+ example: 'customer_reply',
3355
+ enum: [
3356
+ 'customer_reply',
3357
+ 'agent_reply'
3358
+ ]
3359
+ },
3360
+ body: {
3361
+ type: 'string',
3362
+ description: 'Message body in markdown.',
3363
+ example: 'Thanks — that resolved it on my side.'
3364
+ },
3365
+ author_first_name: {
3366
+ type: 'string',
3367
+ description: 'First name of the author. Null when not provided.',
3368
+ example: 'Jane'
3369
+ },
3370
+ author_last_name: {
3371
+ type: 'string',
3372
+ description: 'Last name of the author. Null when not provided.',
3373
+ example: 'Doe'
3374
+ },
3375
+ attachments: {
3376
+ type: 'array',
3377
+ items: {
3378
+ type: 'object',
3379
+ properties: {
3380
+ id: {
3381
+ type: 'string',
3382
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
3383
+ example: '60c72b2f9f1b2c001f8e4d3c'
3384
+ },
3385
+ filename: {
3386
+ type: 'string',
3387
+ description: 'Original filename as uploaded.',
3388
+ example: 'debug.log'
3389
+ },
3390
+ content_type: {
3391
+ type: 'string',
3392
+ description: 'MIME content type of the attachment.',
3393
+ example: 'text/plain'
3394
+ },
3395
+ size: {
3396
+ type: 'integer',
3397
+ description: 'Size of the attachment in bytes.',
3398
+ example: 12345
3399
+ }
3400
+ },
3401
+ required: [
3402
+ 'id',
3403
+ 'filename',
3404
+ 'content_type',
3405
+ 'size'
3406
+ ],
3407
+ additionalProperties: false
3408
+ },
3409
+ description: 'Attachments associated with this message.',
3410
+ example: []
3411
+ },
3412
+ date_created: {
3413
+ type: 'string',
3414
+ format: 'date-time',
3415
+ description: 'Creation date of the message. ISO 8601 UTC.',
3416
+ example: '2026-05-11T16:08:14.338Z'
3417
+ }
3418
+ },
3419
+ required: [
3420
+ 'id',
3421
+ 'type',
3422
+ 'body',
3423
+ 'date_created'
3424
+ ],
3425
+ additionalProperties: false
3426
+ },
3427
+ description: 'Messages on the ticket in chronological order. Internal notes are excluded. Returned by the detail endpoint only.'
3428
+ }
3429
+ },
3430
+ required: [
3431
+ 'id',
3432
+ 'status',
3433
+ 'category',
3434
+ 'summary',
3435
+ 'date_created',
3436
+ 'date_updated'
3437
+ ],
1322
3438
  additionalProperties: false
1323
3439
  };
1324
3440
  export const TokenCreateInputSchema = {
@@ -1336,10 +3452,16 @@ export const TokenCreateInputSchema = {
1336
3452
  type: 'string',
1337
3453
  description: 'Role assumed by the token.',
1338
3454
  example: 'User',
1339
- enum: ['Administrator', 'User']
3455
+ enum: [
3456
+ 'Administrator',
3457
+ 'User'
3458
+ ]
1340
3459
  }
1341
3460
  },
1342
- required: ['name', 'role'],
3461
+ required: [
3462
+ 'name',
3463
+ 'role'
3464
+ ],
1343
3465
  additionalProperties: false
1344
3466
  };
1345
3467
  export const TokenSchema = {
@@ -1357,7 +3479,10 @@ export const TokenSchema = {
1357
3479
  type: 'string',
1358
3480
  description: 'Role assumed by the token.',
1359
3481
  example: 'User',
1360
- enum: ['Administrator', 'User']
3482
+ enum: [
3483
+ 'Administrator',
3484
+ 'User'
3485
+ ]
1361
3486
  },
1362
3487
  id: {
1363
3488
  type: 'string',
@@ -1376,7 +3501,11 @@ export const TokenSchema = {
1376
3501
  example: '2023-12-20T13:53:32.000Z'
1377
3502
  }
1378
3503
  },
1379
- required: ['name', 'role', 'date_created'],
3504
+ required: [
3505
+ 'name',
3506
+ 'role',
3507
+ 'date_created'
3508
+ ],
1380
3509
  additionalProperties: false
1381
3510
  };
1382
3511
  export const TokenUpdateInputSchema = {
@@ -1394,7 +3523,10 @@ export const TokenUpdateInputSchema = {
1394
3523
  type: 'string',
1395
3524
  description: 'Role assumed by the token.',
1396
3525
  example: 'User',
1397
- enum: ['Administrator', 'User']
3526
+ enum: [
3527
+ 'Administrator',
3528
+ 'User'
3529
+ ]
1398
3530
  }
1399
3531
  },
1400
3532
  additionalProperties: false
@@ -1408,15 +3540,29 @@ export const UsageFacetsSchema = {
1408
3540
  type: 'string'
1409
3541
  },
1410
3542
  description: 'List of unique cluster IDs',
1411
- example: ['6b5439b1-923a-4f2b-a371-d554e5ea23fa']
3543
+ example: [
3544
+ '6b5439b1-923a-4f2b-a371-d554e5ea23fa'
3545
+ ]
1412
3546
  },
1413
3547
  product: {
1414
3548
  type: 'array',
1415
3549
  items: {
1416
- type: 'string'
3550
+ type: 'string',
3551
+ enum: [
3552
+ 'cfke_controlplane_basic',
3553
+ 'cfke_controlplane_pro',
3554
+ 'cfke_controlplane_enterprise',
3555
+ 'cfke_connected_nodes_basic',
3556
+ 'cfke_connected_nodes_pro',
3557
+ 'cfke_connected_nodes_enterprise',
3558
+ 'cfcr_storage'
3559
+ ]
1417
3560
  },
1418
3561
  description: 'List of unique products',
1419
- example: ['cfke_controlplane', 'cfke_connected_nodes']
3562
+ example: [
3563
+ 'cfke_controlplane_pro',
3564
+ 'cfke_connected_nodes_pro'
3565
+ ]
1420
3566
  }
1421
3567
  },
1422
3568
  additionalProperties: false
@@ -1442,7 +3588,16 @@ export const UsageResponseSchema = {
1442
3588
  product: {
1443
3589
  type: 'string',
1444
3590
  description: 'The product the usage is associated with',
1445
- example: 'cfke_controlplane'
3591
+ example: 'cfke_controlplane_pro',
3592
+ enum: [
3593
+ 'cfke_controlplane_basic',
3594
+ 'cfke_controlplane_pro',
3595
+ 'cfke_controlplane_enterprise',
3596
+ 'cfke_connected_nodes_basic',
3597
+ 'cfke_connected_nodes_pro',
3598
+ 'cfke_connected_nodes_enterprise',
3599
+ 'cfcr_storage'
3600
+ ]
1446
3601
  },
1447
3602
  value: {
1448
3603
  type: 'number',
@@ -1462,7 +3617,14 @@ export const UsageResponseSchema = {
1462
3617
  description: 'Total cost'
1463
3618
  }
1464
3619
  },
1465
- required: ['hour', 'cluster_id', 'product', 'value', 'price', 'total'],
3620
+ required: [
3621
+ 'hour',
3622
+ 'cluster_id',
3623
+ 'product',
3624
+ 'value',
3625
+ 'price',
3626
+ 'total'
3627
+ ],
1466
3628
  additionalProperties: false
1467
3629
  },
1468
3630
  description: 'Usage data'
@@ -1476,22 +3638,39 @@ export const UsageResponseSchema = {
1476
3638
  type: 'string'
1477
3639
  },
1478
3640
  description: 'List of unique cluster IDs',
1479
- example: ['6b5439b1-923a-4f2b-a371-d554e5ea23fa']
3641
+ example: [
3642
+ '6b5439b1-923a-4f2b-a371-d554e5ea23fa'
3643
+ ]
1480
3644
  },
1481
3645
  product: {
1482
3646
  type: 'array',
1483
3647
  items: {
1484
- type: 'string'
3648
+ type: 'string',
3649
+ enum: [
3650
+ 'cfke_controlplane_basic',
3651
+ 'cfke_controlplane_pro',
3652
+ 'cfke_controlplane_enterprise',
3653
+ 'cfke_connected_nodes_basic',
3654
+ 'cfke_connected_nodes_pro',
3655
+ 'cfke_connected_nodes_enterprise',
3656
+ 'cfcr_storage'
3657
+ ]
1485
3658
  },
1486
3659
  description: 'List of unique products',
1487
- example: ['cfke_controlplane', 'cfke_connected_nodes']
3660
+ example: [
3661
+ 'cfke_controlplane_pro',
3662
+ 'cfke_connected_nodes_pro'
3663
+ ]
1488
3664
  }
1489
3665
  },
1490
3666
  additionalProperties: false,
1491
3667
  description: 'Facets for filtering'
1492
3668
  }
1493
3669
  },
1494
- required: ['data', 'facets'],
3670
+ required: [
3671
+ 'data',
3672
+ 'facets'
3673
+ ],
1495
3674
  additionalProperties: false
1496
3675
  };
1497
3676
  export const UsageSchema = {
@@ -1510,7 +3689,16 @@ export const UsageSchema = {
1510
3689
  product: {
1511
3690
  type: 'string',
1512
3691
  description: 'The product the usage is associated with',
1513
- example: 'cfke_controlplane'
3692
+ example: 'cfke_controlplane_pro',
3693
+ enum: [
3694
+ 'cfke_controlplane_basic',
3695
+ 'cfke_controlplane_pro',
3696
+ 'cfke_controlplane_enterprise',
3697
+ 'cfke_connected_nodes_basic',
3698
+ 'cfke_connected_nodes_pro',
3699
+ 'cfke_connected_nodes_enterprise',
3700
+ 'cfcr_storage'
3701
+ ]
1514
3702
  },
1515
3703
  value: {
1516
3704
  type: 'number',
@@ -1530,7 +3718,14 @@ export const UsageSchema = {
1530
3718
  description: 'Total cost'
1531
3719
  }
1532
3720
  },
1533
- required: ['hour', 'cluster_id', 'product', 'value', 'price', 'total'],
3721
+ required: [
3722
+ 'hour',
3723
+ 'cluster_id',
3724
+ 'product',
3725
+ 'value',
3726
+ 'price',
3727
+ 'total'
3728
+ ],
1534
3729
  additionalProperties: false
1535
3730
  };
1536
3731
  export const UserCreateInputSchema = {
@@ -1566,21 +3761,15 @@ export const UserCreateInputSchema = {
1566
3761
  type: 'string',
1567
3762
  minLength: 8,
1568
3763
  description: 'User password. Must be at least 8 characters long.'
1569
- },
1570
- status: {
1571
- type: 'string',
1572
- description: 'Status of the user. Can be `active` or `inactive`. Inactive users cannot log in or manage organization resources.',
1573
- example: 'active',
1574
- enum: ['active', 'inactive']
1575
- },
1576
- role: {
1577
- type: 'string',
1578
- description: "User role. Can be 'Administrator', 'User'.",
1579
- example: 'User',
1580
- enum: ['Administrator', 'User']
1581
3764
  }
1582
3765
  },
1583
- required: ['email', 'first_name', 'last_name', 'code', 'password'],
3766
+ required: [
3767
+ 'email',
3768
+ 'first_name',
3769
+ 'last_name',
3770
+ 'code',
3771
+ 'password'
3772
+ ],
1584
3773
  additionalProperties: false
1585
3774
  };
1586
3775
  export const UserSchema = {
@@ -1608,15 +3797,21 @@ export const UserSchema = {
1608
3797
  },
1609
3798
  role: {
1610
3799
  type: 'string',
1611
- description: "User role. Can be 'Administrator', 'User'.",
3800
+ description: 'User role. Can be \'Administrator\', \'User\'.',
1612
3801
  example: 'User',
1613
- enum: ['Administrator', 'User']
3802
+ enum: [
3803
+ 'Administrator',
3804
+ 'User'
3805
+ ]
1614
3806
  },
1615
3807
  status: {
1616
3808
  type: 'string',
1617
3809
  description: 'Status of the user. Can be `active` or `inactive`. Inactive users cannot log in or manage organization resources.',
1618
3810
  example: 'active',
1619
- enum: ['active', 'inactive']
3811
+ enum: [
3812
+ 'active',
3813
+ 'inactive'
3814
+ ]
1620
3815
  },
1621
3816
  id: {
1622
3817
  type: 'string',
@@ -1631,7 +3826,15 @@ export const UserSchema = {
1631
3826
  example: '2023-11-02T16:08:14.338Z'
1632
3827
  }
1633
3828
  },
1634
- required: ['email', 'first_name', 'last_name', 'role', 'status', 'id', 'date_created'],
3829
+ required: [
3830
+ 'email',
3831
+ 'first_name',
3832
+ 'last_name',
3833
+ 'role',
3834
+ 'status',
3835
+ 'id',
3836
+ 'date_created'
3837
+ ],
1635
3838
  additionalProperties: false
1636
3839
  };
1637
3840
  export const UserUpdateInputSchema = {
@@ -1659,15 +3862,21 @@ export const UserUpdateInputSchema = {
1659
3862
  },
1660
3863
  role: {
1661
3864
  type: 'string',
1662
- description: "User role. Can be 'Administrator', 'User'.",
3865
+ description: 'User role. Can be \'Administrator\', \'User\'.',
1663
3866
  example: 'User',
1664
- enum: ['Administrator', 'User']
3867
+ enum: [
3868
+ 'Administrator',
3869
+ 'User'
3870
+ ]
1665
3871
  },
1666
3872
  status: {
1667
3873
  type: 'string',
1668
3874
  description: 'Status of the user. Can be `active` or `inactive`. Inactive users cannot log in or manage organization resources.',
1669
3875
  example: 'active',
1670
- enum: ['active', 'inactive']
3876
+ enum: [
3877
+ 'active',
3878
+ 'inactive'
3879
+ ]
1671
3880
  }
1672
3881
  },
1673
3882
  additionalProperties: false