@cloudfleet/sdk 0.0.1-0ac9bf0 → 0.0.1-0c62221

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 (60) hide show
  1. package/dist/@tanstack/react-query.gen.d.ts +1125 -0
  2. package/dist/@tanstack/react-query.gen.d.ts.map +1 -0
  3. package/dist/@tanstack/react-query.gen.js +1129 -0
  4. package/dist/@tanstack/react-query.gen.js.map +1 -0
  5. package/dist/client/client.gen.d.ts.map +1 -1
  6. package/dist/client/client.gen.js +113 -98
  7. package/dist/client/client.gen.js.map +1 -1
  8. package/dist/client/index.d.ts +1 -1
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js.map +1 -1
  11. package/dist/client/types.gen.d.ts +9 -13
  12. package/dist/client/types.gen.d.ts.map +1 -1
  13. package/dist/client/utils.gen.d.ts +6 -2
  14. package/dist/client/utils.gen.d.ts.map +1 -1
  15. package/dist/client/utils.gen.js +10 -12
  16. package/dist/client/utils.gen.js.map +1 -1
  17. package/dist/client.gen.d.ts.map +1 -1
  18. package/dist/client.gen.js +1 -3
  19. package/dist/client.gen.js.map +1 -1
  20. package/dist/core/auth.gen.d.ts.map +1 -1
  21. package/dist/core/auth.gen.js.map +1 -1
  22. package/dist/core/bodySerializer.gen.d.ts +16 -8
  23. package/dist/core/bodySerializer.gen.d.ts.map +1 -1
  24. package/dist/core/bodySerializer.gen.js +1 -1
  25. package/dist/core/bodySerializer.gen.js.map +1 -1
  26. package/dist/core/params.gen.d.ts +10 -0
  27. package/dist/core/params.gen.d.ts.map +1 -1
  28. package/dist/core/params.gen.js +18 -6
  29. package/dist/core/params.gen.js.map +1 -1
  30. package/dist/core/pathSerializer.gen.d.ts.map +1 -1
  31. package/dist/core/pathSerializer.gen.js +3 -11
  32. package/dist/core/pathSerializer.gen.js.map +1 -1
  33. package/dist/core/queryKeySerializer.gen.d.ts.map +1 -1
  34. package/dist/core/queryKeySerializer.gen.js +4 -11
  35. package/dist/core/queryKeySerializer.gen.js.map +1 -1
  36. package/dist/core/serverSentEvents.gen.d.ts +1 -1
  37. package/dist/core/serverSentEvents.gen.d.ts.map +1 -1
  38. package/dist/core/serverSentEvents.gen.js +6 -9
  39. package/dist/core/serverSentEvents.gen.js.map +1 -1
  40. package/dist/core/types.gen.d.ts +1 -1
  41. package/dist/core/types.gen.d.ts.map +1 -1
  42. package/dist/core/utils.gen.d.ts.map +1 -1
  43. package/dist/core/utils.gen.js +1 -1
  44. package/dist/core/utils.gen.js.map +1 -1
  45. package/dist/schemas.gen.d.ts +1190 -208
  46. package/dist/schemas.gen.d.ts.map +1 -1
  47. package/dist/schemas.gen.js +2431 -243
  48. package/dist/schemas.gen.js.map +1 -1
  49. package/dist/sdk.gen.d.ts +85 -7
  50. package/dist/sdk.gen.d.ts.map +1 -1
  51. package/dist/sdk.gen.js +158 -127
  52. package/dist/sdk.gen.js.map +1 -1
  53. package/dist/services/kubernetes/api.d.ts +8 -8
  54. package/dist/types.gen.d.ts +1016 -94
  55. package/dist/types.gen.d.ts.map +1 -1
  56. package/dist/zod.gen.d.ts +2599 -637
  57. package/dist/zod.gen.d.ts.map +1 -1
  58. package/dist/zod.gen.js +1201 -470
  59. package/dist/zod.gen.js.map +1 -1
  60. package/package.json +28 -5
@@ -74,10 +74,142 @@ export const BillingContactSchema = {
74
74
  nullable: true,
75
75
  description: 'Type of the tax ID.',
76
76
  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', '']
77
+ enum: [
78
+ 'ad_nrt',
79
+ 'ae_trn',
80
+ 'al_tin',
81
+ 'am_tin',
82
+ 'ao_tin',
83
+ 'ar_cuit',
84
+ 'at_vat',
85
+ 'au_abn',
86
+ 'au_arn',
87
+ 'ba_tin',
88
+ 'bb_tin',
89
+ 'be_vat',
90
+ 'bg_uic',
91
+ 'bg_vat',
92
+ 'bh_vat',
93
+ 'bo_tin',
94
+ 'br_cnpj',
95
+ 'br_cpf',
96
+ 'bs_tin',
97
+ 'by_tin',
98
+ 'ca_bn',
99
+ 'ca_gst_hst',
100
+ 'ca_pst_bc',
101
+ 'ca_pst_mb',
102
+ 'ca_pst_sk',
103
+ 'ca_qst',
104
+ 'cd_nif',
105
+ 'ch_uid',
106
+ 'ch_vat',
107
+ 'cl_tin',
108
+ 'cn_tin',
109
+ 'co_nit',
110
+ 'cr_tin',
111
+ 'cy_vat',
112
+ 'cz_vat',
113
+ 'de_stn',
114
+ 'de_vat',
115
+ 'dk_vat',
116
+ 'do_rcn',
117
+ 'ec_ruc',
118
+ 'ee_vat',
119
+ 'eg_tin',
120
+ 'es_cif',
121
+ 'es_vat',
122
+ 'eu_oss_vat',
123
+ 'fi_vat',
124
+ 'fr_vat',
125
+ 'gb_vat',
126
+ 'ge_vat',
127
+ 'gn_nif',
128
+ 'gr_vat',
129
+ 'hk_br',
130
+ 'hr_oib',
131
+ 'hr_vat',
132
+ 'hu_tin',
133
+ 'hu_vat',
134
+ 'id_npwp',
135
+ 'ie_vat',
136
+ 'il_vat',
137
+ 'in_gst',
138
+ 'is_vat',
139
+ 'it_vat',
140
+ 'jp_cn',
141
+ 'jp_rn',
142
+ 'jp_trn',
143
+ 'ke_pin',
144
+ 'kh_tin',
145
+ 'kr_brn',
146
+ 'kz_bin',
147
+ 'li_uid',
148
+ 'li_vat',
149
+ 'lt_vat',
150
+ 'lu_vat',
151
+ 'lv_vat',
152
+ 'ma_vat',
153
+ 'md_vat',
154
+ 'me_pib',
155
+ 'mk_vat',
156
+ 'mr_nif',
157
+ 'mt_vat',
158
+ 'mx_rfc',
159
+ 'my_frp',
160
+ 'my_itn',
161
+ 'my_sst',
162
+ 'ng_tin',
163
+ 'nl_vat',
164
+ 'no_vat',
165
+ 'no_voec',
166
+ 'np_pan',
167
+ 'nz_gst',
168
+ 'om_vat',
169
+ 'pe_ruc',
170
+ 'ph_tin',
171
+ 'pl_vat',
172
+ 'pt_vat',
173
+ 'ro_tin',
174
+ 'ro_vat',
175
+ 'rs_pib',
176
+ 'ru_inn',
177
+ 'ru_kpp',
178
+ 'sa_vat',
179
+ 'se_vat',
180
+ 'sg_gst',
181
+ 'sg_uen',
182
+ 'si_tin',
183
+ 'si_vat',
184
+ 'sk_vat',
185
+ 'sn_ninea',
186
+ 'sr_fin',
187
+ 'sv_nit',
188
+ 'th_vat',
189
+ 'tj_tin',
190
+ 'tr_tin',
191
+ 'tw_vat',
192
+ 'tz_vat',
193
+ 'ua_vat',
194
+ 'ug_tin',
195
+ 'us_ein',
196
+ 'uy_ruc',
197
+ 'uz_tin',
198
+ 'uz_vat',
199
+ 've_rif',
200
+ 'vn_tin',
201
+ 'xi_vat',
202
+ 'za_vat',
203
+ 'zm_tin',
204
+ 'zw_tin',
205
+ ''
206
+ ]
78
207
  }
79
208
  },
80
- required: ['email', 'individual_name'],
209
+ required: [
210
+ 'email',
211
+ 'individual_name'
212
+ ],
81
213
  additionalProperties: false
82
214
  };
83
215
  export const BillingCreditsSchema = {
@@ -92,7 +224,10 @@ export const BillingCreditsSchema = {
92
224
  type: 'string',
93
225
  description: 'Type of the promotional code.',
94
226
  example: 'credit',
95
- enum: ['credit', 'discount']
227
+ enum: [
228
+ 'credit',
229
+ 'discount'
230
+ ]
96
231
  },
97
232
  date_start: {
98
233
  type: 'string',
@@ -129,7 +264,12 @@ export const BillingCreditsSchema = {
129
264
  example: 8
130
265
  }
131
266
  },
132
- required: ['type', 'date_start', 'code', 'value_total'],
267
+ required: [
268
+ 'type',
269
+ 'date_start',
270
+ 'code',
271
+ 'value_total'
272
+ ],
133
273
  additionalProperties: false
134
274
  };
135
275
  export const ChartCreateInputSchema = {
@@ -170,7 +310,13 @@ export const ChartCreateInputSchema = {
170
310
  example: 'postgresql'
171
311
  }
172
312
  },
173
- required: ['values', 'version_channel', 'name', 'namespace', 'chart'],
313
+ required: [
314
+ 'values',
315
+ 'version_channel',
316
+ 'name',
317
+ 'namespace',
318
+ 'chart'
319
+ ],
174
320
  additionalProperties: false
175
321
  };
176
322
  export const ChartSchema = {
@@ -214,7 +360,22 @@ export const ChartSchema = {
214
360
  type: 'string',
215
361
  description: 'Status of the chart deployment.',
216
362
  example: 'active',
217
- enum: ['InstallSucceeded', 'InstallFailed', 'UpgradeSucceeded', 'UpgradeFailed', 'TestSucceeded', 'TestFailed', 'RollbackSucceeded', 'RollbackFailed', 'UninstallSucceeded', 'UninstallFailed', 'ArtifactFailed', 'DependencyNotReady', 'Progressing', 'SourceNotReady']
363
+ enum: [
364
+ 'InstallSucceeded',
365
+ 'InstallFailed',
366
+ 'UpgradeSucceeded',
367
+ 'UpgradeFailed',
368
+ 'TestSucceeded',
369
+ 'TestFailed',
370
+ 'RollbackSucceeded',
371
+ 'RollbackFailed',
372
+ 'UninstallSucceeded',
373
+ 'UninstallFailed',
374
+ 'ArtifactFailed',
375
+ 'DependencyNotReady',
376
+ 'Progressing',
377
+ 'SourceNotReady'
378
+ ]
218
379
  },
219
380
  version_current: {
220
381
  type: 'string',
@@ -237,7 +398,18 @@ export const ChartSchema = {
237
398
  example: true
238
399
  }
239
400
  },
240
- required: ['values', 'version_channel', 'name', 'namespace', 'chart', 'status', 'version_current', 'created_at', 'updated_at', 'ready'],
401
+ required: [
402
+ 'values',
403
+ 'version_channel',
404
+ 'name',
405
+ 'namespace',
406
+ 'chart',
407
+ 'status',
408
+ 'version_current',
409
+ 'created_at',
410
+ 'updated_at',
411
+ 'ready'
412
+ ],
241
413
  additionalProperties: false
242
414
  };
243
415
  export const ChartUpdateInputSchema = {
@@ -254,7 +426,10 @@ export const ChartUpdateInputSchema = {
254
426
  example: '2.x.x-cfke.x'
255
427
  }
256
428
  },
257
- required: ['values', 'version_channel'],
429
+ required: [
430
+ 'values',
431
+ 'version_channel'
432
+ ],
258
433
  additionalProperties: false
259
434
  };
260
435
  export const ClusterCreateInputSchema = {
@@ -272,24 +447,41 @@ export const ClusterCreateInputSchema = {
272
447
  type: 'string',
273
448
  description: 'Tier of the cluster.',
274
449
  example: 'pro',
275
- enum: ['basic', 'pro']
450
+ enum: [
451
+ 'basic',
452
+ 'pro'
453
+ ]
276
454
  },
277
455
  region: {
278
456
  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',
457
+ description: 'Cloudfleet control plane region. One of "staging-1a", "northamerica-central-1", "europe-central-1a", "northamerica-central-1a". This field can not be updated after creation.',
458
+ default: 'staging-1a',
281
459
  example: 'northamerica-central-1a',
282
- enum: ['staging', 'northamerica-central-1', 'europe-central-1a', 'northamerica-central-1a']
460
+ enum: [
461
+ 'staging-1a',
462
+ 'northamerica-central-1',
463
+ 'europe-central-1a',
464
+ 'northamerica-central-1a'
465
+ ]
283
466
  },
284
467
  version_channel: {
285
468
  type: 'string',
286
469
  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
470
  description: 'Version of the kubernetes cluster.',
288
471
  default: '1.x.x-cfke.x',
289
- example: '1.29.x-cfke.x'
472
+ example: '1.x.x-cfke.x',
473
+ enum: [
474
+ '1.x.x-cfke.x',
475
+ '1.31.x-cfke.x',
476
+ '1.32.x-cfke.x',
477
+ '1.33.x-cfke.x'
478
+ ]
290
479
  }
291
480
  },
292
- required: ['name', 'tier'],
481
+ required: [
482
+ 'name',
483
+ 'tier'
484
+ ],
293
485
  additionalProperties: false
294
486
  };
295
487
  export const ClusterJoinInformationSchema = {
@@ -298,8 +490,7 @@ export const ClusterJoinInformationSchema = {
298
490
  certificate_authority: {
299
491
  type: 'string',
300
492
  description: 'Certificate authority data for the kubernetes cluster. This is the root certificate authority for the cluster.',
301
- example: `-----BEGIN CERTIFICATE-----
302
- MIIC0DCCAbigAwIBAgI...`
493
+ example: '-----BEGIN CERTIFICATE-----\nMIIC0DCCAbigAwIBAgI...'
303
494
  },
304
495
  endpoint: {
305
496
  type: 'string',
@@ -307,6 +498,11 @@ MIIC0DCCAbigAwIBAgI...`
307
498
  description: 'Internal URL of the Kubernetes cluster control plane. This is the endpoint that kubelet uses to connect to the cluster.',
308
499
  example: 'https://10.31.64.7:6443'
309
500
  },
501
+ cluster_dns: {
502
+ type: 'string',
503
+ description: 'Cluster DNS IP address. This is the IP address of the kube-dns service in the cluster.',
504
+ example: '10.96.0.10'
505
+ },
310
506
  auth_key: {
311
507
  type: 'string',
312
508
  description: 'Authentication key for the cluster.',
@@ -323,7 +519,7 @@ MIIC0DCCAbigAwIBAgI...`
323
519
  kubernetes: {
324
520
  type: 'string',
325
521
  description: 'Kubernetes version of the cluster.',
326
- example: '1.29.3'
522
+ example: '1.33.7'
327
523
  },
328
524
  tailscale: {
329
525
  type: 'string',
@@ -341,7 +537,12 @@ MIIC0DCCAbigAwIBAgI...`
341
537
  example: '565.0.0'
342
538
  }
343
539
  },
344
- required: ['kubernetes', 'tailscale', 'containerd', 'nvidia_driver'],
540
+ required: [
541
+ 'kubernetes',
542
+ 'tailscale',
543
+ 'containerd',
544
+ 'nvidia_driver'
545
+ ],
345
546
  additionalProperties: false,
346
547
  description: 'Versions of the different components of the cluster.'
347
548
  },
@@ -364,12 +565,24 @@ MIIC0DCCAbigAwIBAgI...`
364
565
  example: '//iam.googleapis.com/projects/89014267864/locations/global/workloadIdentityPools/cfke/providers/oidc'
365
566
  }
366
567
  },
367
- required: ['metadata_url', 'aws_role_arn', 'gcp_workload_identity_provider'],
568
+ required: [
569
+ 'metadata_url',
570
+ 'aws_role_arn',
571
+ 'gcp_workload_identity_provider'
572
+ ],
368
573
  additionalProperties: false,
369
- description: "OIDC Information for hosts to access to third party API's."
574
+ description: 'OIDC Information for hosts to access to third party API\'s.'
370
575
  }
371
576
  },
372
- required: ['certificate_authority', 'endpoint', 'auth_key', 'bootstrap_token', 'versions', 'third_party_api_access_config'],
577
+ required: [
578
+ 'certificate_authority',
579
+ 'endpoint',
580
+ 'cluster_dns',
581
+ 'auth_key',
582
+ 'bootstrap_token',
583
+ 'versions',
584
+ 'third_party_api_access_config'
585
+ ],
373
586
  additionalProperties: false
374
587
  };
375
588
  export const ClusterSchema = {
@@ -387,21 +600,22 @@ export const ClusterSchema = {
387
600
  type: 'string',
388
601
  description: 'Tier of the cluster.',
389
602
  example: 'pro',
390
- enum: ['basic', 'pro']
603
+ enum: [
604
+ 'basic',
605
+ 'pro'
606
+ ]
391
607
  },
392
608
  region: {
393
609
  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',
610
+ description: 'Cloudfleet control plane region. One of "staging-1a", "northamerica-central-1", "europe-central-1a", "northamerica-central-1a". This field can not be updated after creation.',
611
+ default: 'staging-1a',
396
612
  example: 'northamerica-central-1a',
397
- enum: ['staging', 'northamerica-central-1', 'europe-central-1a', 'northamerica-central-1a']
398
- },
399
- version_channel: {
400
- type: 'string',
401
- 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
- description: 'Version of the kubernetes cluster.',
403
- default: '1.x.x-cfke.x',
404
- example: '1.29.x-cfke.x'
613
+ enum: [
614
+ 'staging-1a',
615
+ 'northamerica-central-1',
616
+ 'europe-central-1a',
617
+ 'northamerica-central-1a'
618
+ ]
405
619
  },
406
620
  id: {
407
621
  type: 'string',
@@ -413,32 +627,57 @@ export const ClusterSchema = {
413
627
  type: 'string',
414
628
  description: 'Status of the cluster. When creating a new cluster, set to `active`. When deleting a clusters, set to `deleted`.',
415
629
  example: 'active',
416
- enum: ['active', 'disabled', 'deleted', 'creating', 'deployed', 'failed', 'updating']
630
+ enum: [
631
+ 'active',
632
+ 'disabled',
633
+ 'deleted',
634
+ 'creating',
635
+ 'deployed',
636
+ 'failed',
637
+ 'updating'
638
+ ]
417
639
  },
418
640
  endpoint: {
419
641
  anyOf: [
420
642
  {
421
643
  type: 'string',
422
644
  format: 'uri',
423
- description: 'URL of the Kubernetes cluster control plane. This is the endpoint that kubectl uses to connect to the cluster.',
645
+ description: 'URL signed by the private CA of the Kubernetes cluster control plane. This is the endpoint that kubectl uses to connect to the cluster. (Deprecated, use endpoint_public instead)',
424
646
  example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.cloudfleet.dev:6443'
425
647
  },
426
648
  {
427
649
  type: 'string',
428
- enum: ['']
650
+ enum: [
651
+ ''
652
+ ]
653
+ }
654
+ ]
655
+ },
656
+ endpoint_public: {
657
+ anyOf: [
658
+ {
659
+ type: 'string',
660
+ format: 'uri',
661
+ 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.',
662
+ example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.io'
663
+ },
664
+ {
665
+ type: 'string',
666
+ enum: [
667
+ ''
668
+ ]
429
669
  }
430
670
  ]
431
671
  },
432
672
  certificate_ca: {
433
673
  type: 'string',
434
674
  description: 'Certificate authority data for the kubernetes cluster. This is the root certificate authority for the cluster.',
435
- example: `-----BEGIN CERTIFICATE-----
436
- MIIC0DCCAbigAwIBAgI...`
675
+ example: '-----BEGIN CERTIFICATE-----\nMIIC0DCCAbigAwIBAgI...'
437
676
  },
438
677
  version_current: {
439
678
  type: 'string',
440
679
  description: 'Current version of the cluster.',
441
- example: '1.29.3-cfke.52'
680
+ example: '1.33.7-cfke.264'
442
681
  },
443
682
  created_at: {
444
683
  type: 'string',
@@ -454,9 +693,20 @@ MIIC0DCCAbigAwIBAgI...`
454
693
  type: 'boolean',
455
694
  description: 'Indicates if the cluster is ready to be used.',
456
695
  example: true
696
+ },
697
+ version_channel: {
698
+ type: 'string',
699
+ 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-]+)*))?$',
700
+ description: 'Version of the kubernetes cluster.',
701
+ example: '1.x.x-cfke.x'
457
702
  }
458
703
  },
459
- required: ['name', 'tier', 'id', 'status'],
704
+ required: [
705
+ 'name',
706
+ 'tier',
707
+ 'id',
708
+ 'status'
709
+ ],
460
710
  additionalProperties: false
461
711
  };
462
712
  export const ClusterUpdateInputSchema = {
@@ -474,16 +724,21 @@ export const ClusterUpdateInputSchema = {
474
724
  type: 'string',
475
725
  description: 'Tier of the cluster.',
476
726
  example: 'pro',
477
- enum: ['basic', 'pro']
727
+ enum: [
728
+ 'basic',
729
+ 'pro'
730
+ ]
478
731
  },
479
732
  version_channel: {
480
733
  type: 'string',
481
734
  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
735
  description: 'Version of the kubernetes cluster.',
483
- example: '1.29.x-cfke.x'
736
+ example: '1.x.x-cfke.x'
484
737
  }
485
738
  },
486
- required: ['tier'],
739
+ required: [
740
+ 'tier'
741
+ ],
487
742
  additionalProperties: false
488
743
  };
489
744
  export const FleetCreateInputSchema = {
@@ -499,7 +754,6 @@ export const FleetCreateInputSchema = {
499
754
  description: 'CPU limit in cores.'
500
755
  }
501
756
  },
502
- required: ['cpu'],
503
757
  additionalProperties: false,
504
758
  description: 'Limits define a set of bounds for provisioning capacity.'
505
759
  },
@@ -512,10 +766,11 @@ export const FleetCreateInputSchema = {
512
766
  },
513
767
  project: {
514
768
  type: 'string',
515
- description: 'Project GCP Project id to deploy instances into'
769
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
770
+ 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.',
771
+ example: 'my-cloudfleet-project'
516
772
  }
517
773
  },
518
- required: ['project'],
519
774
  additionalProperties: false
520
775
  },
521
776
  hetzner: {
@@ -527,10 +782,12 @@ export const FleetCreateInputSchema = {
527
782
  },
528
783
  apiKey: {
529
784
  type: 'string',
530
- description: 'Hetzner Cloud API key with read / write access'
785
+ maxLength: 64,
786
+ minLength: 64,
787
+ pattern: '^[A-Za-z0-9]+$',
788
+ description: 'Hetzner Cloud API token with read / write access (64 alphanumeric characters). Omit this field to keep the existing value.'
531
789
  }
532
790
  },
533
- required: ['apiKey'],
534
791
  additionalProperties: false
535
792
  },
536
793
  aws: {
@@ -542,12 +799,291 @@ export const FleetCreateInputSchema = {
542
799
  },
543
800
  controllerRoleArn: {
544
801
  type: 'string',
545
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
802
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
803
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
804
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
546
805
  }
547
806
  },
548
- required: ['controllerRoleArn'],
549
807
  additionalProperties: false
550
808
  },
809
+ constraints: {
810
+ type: 'object',
811
+ properties: {
812
+ 'karpenter.sh/capacity-type': {
813
+ type: 'array',
814
+ items: {
815
+ type: 'string',
816
+ enum: [
817
+ 'on-demand',
818
+ 'spot'
819
+ ]
820
+ },
821
+ description: 'Allowed values for `karpenter.sh/capacity-type`.'
822
+ },
823
+ 'kubernetes.io/arch': {
824
+ type: 'array',
825
+ items: {
826
+ type: 'string',
827
+ enum: [
828
+ 'amd64',
829
+ 'arm64'
830
+ ]
831
+ },
832
+ description: 'Allowed values for `kubernetes.io/arch`.'
833
+ },
834
+ 'cfke.io/instance-family': {
835
+ type: 'array',
836
+ items: {
837
+ type: 'string',
838
+ enum: [
839
+ 'a1',
840
+ 'a2',
841
+ 'a3',
842
+ 'a4',
843
+ 'c1',
844
+ 'c2',
845
+ 'c2d',
846
+ 'c3',
847
+ 'c3d',
848
+ 'c4',
849
+ 'c4a',
850
+ 'c4d',
851
+ 'c5',
852
+ 'c5a',
853
+ 'c5ad',
854
+ 'c5d',
855
+ 'c5n',
856
+ 'c6a',
857
+ 'c6g',
858
+ 'c6gd',
859
+ 'c6gn',
860
+ 'c6i',
861
+ 'c6id',
862
+ 'c6in',
863
+ 'c7a',
864
+ 'c7g',
865
+ 'c7gd',
866
+ 'c7gn',
867
+ 'c7i',
868
+ 'c7i-flex',
869
+ 'c8g',
870
+ 'c8gd',
871
+ 'cax',
872
+ 'ccx',
873
+ 'cpx',
874
+ 'cx',
875
+ 'd2',
876
+ 'd3',
877
+ 'd3en',
878
+ 'dl1',
879
+ 'dl2q',
880
+ 'e2',
881
+ 'f1',
882
+ 'f2',
883
+ 'g1',
884
+ 'g2',
885
+ 'g4ad',
886
+ 'g4dn',
887
+ 'g5',
888
+ 'g5g',
889
+ 'g6',
890
+ 'g6e',
891
+ 'gr6',
892
+ 'h1',
893
+ 'h3',
894
+ 'hpc6a',
895
+ 'hpc6id',
896
+ 'hpc7a',
897
+ 'hpc7g',
898
+ 'i2',
899
+ 'i3',
900
+ 'i3en',
901
+ 'i4g',
902
+ 'i4i',
903
+ 'i7i',
904
+ 'i7ie',
905
+ 'i8g',
906
+ 'im4gn',
907
+ 'inf1',
908
+ 'inf2',
909
+ 'is4gen',
910
+ 'm1',
911
+ 'm2',
912
+ 'm3',
913
+ 'm4',
914
+ 'm5',
915
+ 'm5a',
916
+ 'm5ad',
917
+ 'm5d',
918
+ 'm5dn',
919
+ 'm5n',
920
+ 'm5zn',
921
+ 'm6a',
922
+ 'm6g',
923
+ 'm6gd',
924
+ 'm6i',
925
+ 'm6id',
926
+ 'm6idn',
927
+ 'm6in',
928
+ 'm7a',
929
+ 'm7g',
930
+ 'm7gd',
931
+ 'm7i',
932
+ 'm7i-flex',
933
+ 'm8g',
934
+ 'm8gd',
935
+ 'n1',
936
+ 'n2',
937
+ 'n2d',
938
+ 'n4',
939
+ 'p3',
940
+ 'p3dn',
941
+ 'p4d',
942
+ 'p4de',
943
+ 'p5',
944
+ 'p5e',
945
+ 'p5en',
946
+ 'p6-b200',
947
+ 'r3',
948
+ 'r4',
949
+ 'r5',
950
+ 'r5a',
951
+ 'r5ad',
952
+ 'r5b',
953
+ 'r5d',
954
+ 'r5dn',
955
+ 'r5n',
956
+ 'r6a',
957
+ 'r6g',
958
+ 'r6gd',
959
+ 'r6i',
960
+ 'r6id',
961
+ 'r6idn',
962
+ 'r6in',
963
+ 'r7a',
964
+ 'r7g',
965
+ 'r7gd',
966
+ 'r7i',
967
+ 'r7iz',
968
+ 'r8g',
969
+ 'r8gd',
970
+ 't2',
971
+ 't2a',
972
+ 't2d',
973
+ 't3',
974
+ 't3a',
975
+ 't4g',
976
+ 'trn1',
977
+ 'trn1n',
978
+ 'u-3tb1',
979
+ 'u-6tb1',
980
+ 'u7i-12tb',
981
+ 'u7i-6tb',
982
+ 'u7i-8tb',
983
+ 'u7in-16tb',
984
+ 'u7in-24tb',
985
+ 'u7in-32tb',
986
+ 'vt1',
987
+ 'x1',
988
+ 'x1e',
989
+ 'x2gd',
990
+ 'x2idn',
991
+ 'x2iedn',
992
+ 'x2iezn',
993
+ 'x4',
994
+ 'x8g',
995
+ 'z1d',
996
+ 'z3'
997
+ ]
998
+ },
999
+ description: 'Allowed values for `cfke.io/instance-family`.'
1000
+ },
1001
+ 'topology.kubernetes.io/region': {
1002
+ type: 'array',
1003
+ items: {
1004
+ type: 'string',
1005
+ enum: [
1006
+ 'africa-south1',
1007
+ 'ap-northeast-1',
1008
+ 'ap-northeast-2',
1009
+ 'ap-northeast-3',
1010
+ 'ap-south-1',
1011
+ 'ap-southeast-1',
1012
+ 'ap-southeast-2',
1013
+ 'ash',
1014
+ 'asia-east1',
1015
+ 'asia-east2',
1016
+ 'asia-northeast1',
1017
+ 'asia-northeast2',
1018
+ 'asia-northeast3',
1019
+ 'asia-south1',
1020
+ 'asia-south2',
1021
+ 'asia-southeast1',
1022
+ 'asia-southeast2',
1023
+ 'australia-southeast1',
1024
+ 'australia-southeast2',
1025
+ 'ca-central-1',
1026
+ 'eu-central-1',
1027
+ 'eu-central-2',
1028
+ 'eu-north-1',
1029
+ 'eu-west-1',
1030
+ 'eu-west-2',
1031
+ 'eu-west-3',
1032
+ 'europe-central2',
1033
+ 'europe-north1',
1034
+ 'europe-southwest1',
1035
+ 'europe-west1',
1036
+ 'europe-west10',
1037
+ 'europe-west12',
1038
+ 'europe-west2',
1039
+ 'europe-west3',
1040
+ 'europe-west4',
1041
+ 'europe-west6',
1042
+ 'europe-west8',
1043
+ 'europe-west9',
1044
+ 'fsn1',
1045
+ 'hel1',
1046
+ 'hil',
1047
+ 'me-central1',
1048
+ 'me-central2',
1049
+ 'me-west1',
1050
+ 'nbg1',
1051
+ 'northamerica-northeast1',
1052
+ 'northamerica-northeast2',
1053
+ 'sa-east-1',
1054
+ 'sin',
1055
+ 'southamerica-east1',
1056
+ 'southamerica-west1',
1057
+ 'us-central1',
1058
+ 'us-east-1',
1059
+ 'us-east-2',
1060
+ 'us-east1',
1061
+ 'us-east4',
1062
+ 'us-east5',
1063
+ 'us-south1',
1064
+ 'us-west-1',
1065
+ 'us-west-2',
1066
+ 'us-west1',
1067
+ 'us-west2',
1068
+ 'us-west3',
1069
+ 'us-west4'
1070
+ ]
1071
+ },
1072
+ description: 'Allowed values for `topology.kubernetes.io/region`.'
1073
+ }
1074
+ },
1075
+ additionalProperties: false,
1076
+ description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together. Omit a field to place no restriction on that key.'
1077
+ },
1078
+ scalingProfile: {
1079
+ type: 'string',
1080
+ description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
1081
+ example: 'conservative',
1082
+ enum: [
1083
+ 'aggressive',
1084
+ 'conservative'
1085
+ ]
1086
+ },
551
1087
  id: {
552
1088
  type: 'string',
553
1089
  maxLength: 63,
@@ -557,7 +1093,9 @@ export const FleetCreateInputSchema = {
557
1093
  example: 'new-clouds-fleet'
558
1094
  }
559
1095
  },
560
- required: ['id'],
1096
+ required: [
1097
+ 'id'
1098
+ ],
561
1099
  additionalProperties: false
562
1100
  };
563
1101
  export const FleetSchema = {
@@ -573,7 +1111,6 @@ export const FleetSchema = {
573
1111
  description: 'CPU limit in cores.'
574
1112
  }
575
1113
  },
576
- required: ['cpu'],
577
1114
  additionalProperties: false,
578
1115
  description: 'Limits define a set of bounds for provisioning capacity.'
579
1116
  },
@@ -586,10 +1123,11 @@ export const FleetSchema = {
586
1123
  },
587
1124
  project: {
588
1125
  type: 'string',
589
- description: 'Project GCP Project id to deploy instances into'
1126
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
1127
+ 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.',
1128
+ example: 'my-cloudfleet-project'
590
1129
  }
591
1130
  },
592
- required: ['project'],
593
1131
  additionalProperties: false
594
1132
  },
595
1133
  hetzner: {
@@ -601,10 +1139,10 @@ export const FleetSchema = {
601
1139
  },
602
1140
  apiKey: {
603
1141
  type: 'string',
604
- description: 'Hetzner Cloud API key with read / write access'
1142
+ pattern: '^\\*{64}$',
1143
+ 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
1144
  }
606
1145
  },
607
- required: ['apiKey'],
608
1146
  additionalProperties: false
609
1147
  },
610
1148
  aws: {
@@ -616,12 +1154,291 @@ export const FleetSchema = {
616
1154
  },
617
1155
  controllerRoleArn: {
618
1156
  type: 'string',
619
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1157
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1158
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1159
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
620
1160
  }
621
1161
  },
622
- required: ['controllerRoleArn'],
623
1162
  additionalProperties: false
624
1163
  },
1164
+ constraints: {
1165
+ type: 'object',
1166
+ properties: {
1167
+ 'karpenter.sh/capacity-type': {
1168
+ type: 'array',
1169
+ items: {
1170
+ type: 'string',
1171
+ enum: [
1172
+ 'on-demand',
1173
+ 'spot'
1174
+ ]
1175
+ },
1176
+ description: 'Allowed values for `karpenter.sh/capacity-type`.'
1177
+ },
1178
+ 'kubernetes.io/arch': {
1179
+ type: 'array',
1180
+ items: {
1181
+ type: 'string',
1182
+ enum: [
1183
+ 'amd64',
1184
+ 'arm64'
1185
+ ]
1186
+ },
1187
+ description: 'Allowed values for `kubernetes.io/arch`.'
1188
+ },
1189
+ 'cfke.io/instance-family': {
1190
+ type: 'array',
1191
+ items: {
1192
+ type: 'string',
1193
+ enum: [
1194
+ 'a1',
1195
+ 'a2',
1196
+ 'a3',
1197
+ 'a4',
1198
+ 'c1',
1199
+ 'c2',
1200
+ 'c2d',
1201
+ 'c3',
1202
+ 'c3d',
1203
+ 'c4',
1204
+ 'c4a',
1205
+ 'c4d',
1206
+ 'c5',
1207
+ 'c5a',
1208
+ 'c5ad',
1209
+ 'c5d',
1210
+ 'c5n',
1211
+ 'c6a',
1212
+ 'c6g',
1213
+ 'c6gd',
1214
+ 'c6gn',
1215
+ 'c6i',
1216
+ 'c6id',
1217
+ 'c6in',
1218
+ 'c7a',
1219
+ 'c7g',
1220
+ 'c7gd',
1221
+ 'c7gn',
1222
+ 'c7i',
1223
+ 'c7i-flex',
1224
+ 'c8g',
1225
+ 'c8gd',
1226
+ 'cax',
1227
+ 'ccx',
1228
+ 'cpx',
1229
+ 'cx',
1230
+ 'd2',
1231
+ 'd3',
1232
+ 'd3en',
1233
+ 'dl1',
1234
+ 'dl2q',
1235
+ 'e2',
1236
+ 'f1',
1237
+ 'f2',
1238
+ 'g1',
1239
+ 'g2',
1240
+ 'g4ad',
1241
+ 'g4dn',
1242
+ 'g5',
1243
+ 'g5g',
1244
+ 'g6',
1245
+ 'g6e',
1246
+ 'gr6',
1247
+ 'h1',
1248
+ 'h3',
1249
+ 'hpc6a',
1250
+ 'hpc6id',
1251
+ 'hpc7a',
1252
+ 'hpc7g',
1253
+ 'i2',
1254
+ 'i3',
1255
+ 'i3en',
1256
+ 'i4g',
1257
+ 'i4i',
1258
+ 'i7i',
1259
+ 'i7ie',
1260
+ 'i8g',
1261
+ 'im4gn',
1262
+ 'inf1',
1263
+ 'inf2',
1264
+ 'is4gen',
1265
+ 'm1',
1266
+ 'm2',
1267
+ 'm3',
1268
+ 'm4',
1269
+ 'm5',
1270
+ 'm5a',
1271
+ 'm5ad',
1272
+ 'm5d',
1273
+ 'm5dn',
1274
+ 'm5n',
1275
+ 'm5zn',
1276
+ 'm6a',
1277
+ 'm6g',
1278
+ 'm6gd',
1279
+ 'm6i',
1280
+ 'm6id',
1281
+ 'm6idn',
1282
+ 'm6in',
1283
+ 'm7a',
1284
+ 'm7g',
1285
+ 'm7gd',
1286
+ 'm7i',
1287
+ 'm7i-flex',
1288
+ 'm8g',
1289
+ 'm8gd',
1290
+ 'n1',
1291
+ 'n2',
1292
+ 'n2d',
1293
+ 'n4',
1294
+ 'p3',
1295
+ 'p3dn',
1296
+ 'p4d',
1297
+ 'p4de',
1298
+ 'p5',
1299
+ 'p5e',
1300
+ 'p5en',
1301
+ 'p6-b200',
1302
+ 'r3',
1303
+ 'r4',
1304
+ 'r5',
1305
+ 'r5a',
1306
+ 'r5ad',
1307
+ 'r5b',
1308
+ 'r5d',
1309
+ 'r5dn',
1310
+ 'r5n',
1311
+ 'r6a',
1312
+ 'r6g',
1313
+ 'r6gd',
1314
+ 'r6i',
1315
+ 'r6id',
1316
+ 'r6idn',
1317
+ 'r6in',
1318
+ 'r7a',
1319
+ 'r7g',
1320
+ 'r7gd',
1321
+ 'r7i',
1322
+ 'r7iz',
1323
+ 'r8g',
1324
+ 'r8gd',
1325
+ 't2',
1326
+ 't2a',
1327
+ 't2d',
1328
+ 't3',
1329
+ 't3a',
1330
+ 't4g',
1331
+ 'trn1',
1332
+ 'trn1n',
1333
+ 'u-3tb1',
1334
+ 'u-6tb1',
1335
+ 'u7i-12tb',
1336
+ 'u7i-6tb',
1337
+ 'u7i-8tb',
1338
+ 'u7in-16tb',
1339
+ 'u7in-24tb',
1340
+ 'u7in-32tb',
1341
+ 'vt1',
1342
+ 'x1',
1343
+ 'x1e',
1344
+ 'x2gd',
1345
+ 'x2idn',
1346
+ 'x2iedn',
1347
+ 'x2iezn',
1348
+ 'x4',
1349
+ 'x8g',
1350
+ 'z1d',
1351
+ 'z3'
1352
+ ]
1353
+ },
1354
+ description: 'Allowed values for `cfke.io/instance-family`.'
1355
+ },
1356
+ 'topology.kubernetes.io/region': {
1357
+ type: 'array',
1358
+ items: {
1359
+ type: 'string',
1360
+ enum: [
1361
+ 'africa-south1',
1362
+ 'ap-northeast-1',
1363
+ 'ap-northeast-2',
1364
+ 'ap-northeast-3',
1365
+ 'ap-south-1',
1366
+ 'ap-southeast-1',
1367
+ 'ap-southeast-2',
1368
+ 'ash',
1369
+ 'asia-east1',
1370
+ 'asia-east2',
1371
+ 'asia-northeast1',
1372
+ 'asia-northeast2',
1373
+ 'asia-northeast3',
1374
+ 'asia-south1',
1375
+ 'asia-south2',
1376
+ 'asia-southeast1',
1377
+ 'asia-southeast2',
1378
+ 'australia-southeast1',
1379
+ 'australia-southeast2',
1380
+ 'ca-central-1',
1381
+ 'eu-central-1',
1382
+ 'eu-central-2',
1383
+ 'eu-north-1',
1384
+ 'eu-west-1',
1385
+ 'eu-west-2',
1386
+ 'eu-west-3',
1387
+ 'europe-central2',
1388
+ 'europe-north1',
1389
+ 'europe-southwest1',
1390
+ 'europe-west1',
1391
+ 'europe-west10',
1392
+ 'europe-west12',
1393
+ 'europe-west2',
1394
+ 'europe-west3',
1395
+ 'europe-west4',
1396
+ 'europe-west6',
1397
+ 'europe-west8',
1398
+ 'europe-west9',
1399
+ 'fsn1',
1400
+ 'hel1',
1401
+ 'hil',
1402
+ 'me-central1',
1403
+ 'me-central2',
1404
+ 'me-west1',
1405
+ 'nbg1',
1406
+ 'northamerica-northeast1',
1407
+ 'northamerica-northeast2',
1408
+ 'sa-east-1',
1409
+ 'sin',
1410
+ 'southamerica-east1',
1411
+ 'southamerica-west1',
1412
+ 'us-central1',
1413
+ 'us-east-1',
1414
+ 'us-east-2',
1415
+ 'us-east1',
1416
+ 'us-east4',
1417
+ 'us-east5',
1418
+ 'us-south1',
1419
+ 'us-west-1',
1420
+ 'us-west-2',
1421
+ 'us-west1',
1422
+ 'us-west2',
1423
+ 'us-west3',
1424
+ 'us-west4'
1425
+ ]
1426
+ },
1427
+ description: 'Allowed values for `topology.kubernetes.io/region`.'
1428
+ }
1429
+ },
1430
+ additionalProperties: false,
1431
+ description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together. Omit a field to place no restriction on that key.'
1432
+ },
1433
+ scalingProfile: {
1434
+ type: 'string',
1435
+ description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
1436
+ example: 'conservative',
1437
+ enum: [
1438
+ 'aggressive',
1439
+ 'conservative'
1440
+ ]
1441
+ },
625
1442
  id: {
626
1443
  type: 'string',
627
1444
  maxLength: 63,
@@ -631,7 +1448,9 @@ export const FleetSchema = {
631
1448
  example: 'new-clouds-fleet'
632
1449
  }
633
1450
  },
634
- required: ['id'],
1451
+ required: [
1452
+ 'id'
1453
+ ],
635
1454
  additionalProperties: false
636
1455
  };
637
1456
  export const FleetUpdateInputSchema = {
@@ -647,7 +1466,6 @@ export const FleetUpdateInputSchema = {
647
1466
  description: 'CPU limit in cores.'
648
1467
  }
649
1468
  },
650
- required: ['cpu'],
651
1469
  additionalProperties: false,
652
1470
  description: 'Limits define a set of bounds for provisioning capacity.'
653
1471
  },
@@ -660,10 +1478,11 @@ export const FleetUpdateInputSchema = {
660
1478
  },
661
1479
  project: {
662
1480
  type: 'string',
663
- description: 'Project GCP Project id to deploy instances into'
1481
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
1482
+ 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.',
1483
+ example: 'my-cloudfleet-project'
664
1484
  }
665
1485
  },
666
- required: ['project'],
667
1486
  additionalProperties: false
668
1487
  },
669
1488
  hetzner: {
@@ -675,10 +1494,12 @@ export const FleetUpdateInputSchema = {
675
1494
  },
676
1495
  apiKey: {
677
1496
  type: 'string',
678
- description: 'Hetzner Cloud API key with read / write access'
1497
+ maxLength: 64,
1498
+ minLength: 64,
1499
+ pattern: '^[A-Za-z0-9]+$',
1500
+ description: 'Hetzner Cloud API token with read / write access (64 alphanumeric characters). Omit this field to keep the existing value.'
679
1501
  }
680
1502
  },
681
- required: ['apiKey'],
682
1503
  additionalProperties: false
683
1504
  },
684
1505
  aws: {
@@ -690,11 +1511,290 @@ export const FleetUpdateInputSchema = {
690
1511
  },
691
1512
  controllerRoleArn: {
692
1513
  type: 'string',
693
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1514
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1515
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1516
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
694
1517
  }
695
1518
  },
696
- required: ['controllerRoleArn'],
697
1519
  additionalProperties: false
1520
+ },
1521
+ constraints: {
1522
+ type: 'object',
1523
+ properties: {
1524
+ 'karpenter.sh/capacity-type': {
1525
+ type: 'array',
1526
+ items: {
1527
+ type: 'string',
1528
+ enum: [
1529
+ 'on-demand',
1530
+ 'spot'
1531
+ ]
1532
+ },
1533
+ description: 'Allowed values for `karpenter.sh/capacity-type`.'
1534
+ },
1535
+ 'kubernetes.io/arch': {
1536
+ type: 'array',
1537
+ items: {
1538
+ type: 'string',
1539
+ enum: [
1540
+ 'amd64',
1541
+ 'arm64'
1542
+ ]
1543
+ },
1544
+ description: 'Allowed values for `kubernetes.io/arch`.'
1545
+ },
1546
+ 'cfke.io/instance-family': {
1547
+ type: 'array',
1548
+ items: {
1549
+ type: 'string',
1550
+ enum: [
1551
+ 'a1',
1552
+ 'a2',
1553
+ 'a3',
1554
+ 'a4',
1555
+ 'c1',
1556
+ 'c2',
1557
+ 'c2d',
1558
+ 'c3',
1559
+ 'c3d',
1560
+ 'c4',
1561
+ 'c4a',
1562
+ 'c4d',
1563
+ 'c5',
1564
+ 'c5a',
1565
+ 'c5ad',
1566
+ 'c5d',
1567
+ 'c5n',
1568
+ 'c6a',
1569
+ 'c6g',
1570
+ 'c6gd',
1571
+ 'c6gn',
1572
+ 'c6i',
1573
+ 'c6id',
1574
+ 'c6in',
1575
+ 'c7a',
1576
+ 'c7g',
1577
+ 'c7gd',
1578
+ 'c7gn',
1579
+ 'c7i',
1580
+ 'c7i-flex',
1581
+ 'c8g',
1582
+ 'c8gd',
1583
+ 'cax',
1584
+ 'ccx',
1585
+ 'cpx',
1586
+ 'cx',
1587
+ 'd2',
1588
+ 'd3',
1589
+ 'd3en',
1590
+ 'dl1',
1591
+ 'dl2q',
1592
+ 'e2',
1593
+ 'f1',
1594
+ 'f2',
1595
+ 'g1',
1596
+ 'g2',
1597
+ 'g4ad',
1598
+ 'g4dn',
1599
+ 'g5',
1600
+ 'g5g',
1601
+ 'g6',
1602
+ 'g6e',
1603
+ 'gr6',
1604
+ 'h1',
1605
+ 'h3',
1606
+ 'hpc6a',
1607
+ 'hpc6id',
1608
+ 'hpc7a',
1609
+ 'hpc7g',
1610
+ 'i2',
1611
+ 'i3',
1612
+ 'i3en',
1613
+ 'i4g',
1614
+ 'i4i',
1615
+ 'i7i',
1616
+ 'i7ie',
1617
+ 'i8g',
1618
+ 'im4gn',
1619
+ 'inf1',
1620
+ 'inf2',
1621
+ 'is4gen',
1622
+ 'm1',
1623
+ 'm2',
1624
+ 'm3',
1625
+ 'm4',
1626
+ 'm5',
1627
+ 'm5a',
1628
+ 'm5ad',
1629
+ 'm5d',
1630
+ 'm5dn',
1631
+ 'm5n',
1632
+ 'm5zn',
1633
+ 'm6a',
1634
+ 'm6g',
1635
+ 'm6gd',
1636
+ 'm6i',
1637
+ 'm6id',
1638
+ 'm6idn',
1639
+ 'm6in',
1640
+ 'm7a',
1641
+ 'm7g',
1642
+ 'm7gd',
1643
+ 'm7i',
1644
+ 'm7i-flex',
1645
+ 'm8g',
1646
+ 'm8gd',
1647
+ 'n1',
1648
+ 'n2',
1649
+ 'n2d',
1650
+ 'n4',
1651
+ 'p3',
1652
+ 'p3dn',
1653
+ 'p4d',
1654
+ 'p4de',
1655
+ 'p5',
1656
+ 'p5e',
1657
+ 'p5en',
1658
+ 'p6-b200',
1659
+ 'r3',
1660
+ 'r4',
1661
+ 'r5',
1662
+ 'r5a',
1663
+ 'r5ad',
1664
+ 'r5b',
1665
+ 'r5d',
1666
+ 'r5dn',
1667
+ 'r5n',
1668
+ 'r6a',
1669
+ 'r6g',
1670
+ 'r6gd',
1671
+ 'r6i',
1672
+ 'r6id',
1673
+ 'r6idn',
1674
+ 'r6in',
1675
+ 'r7a',
1676
+ 'r7g',
1677
+ 'r7gd',
1678
+ 'r7i',
1679
+ 'r7iz',
1680
+ 'r8g',
1681
+ 'r8gd',
1682
+ 't2',
1683
+ 't2a',
1684
+ 't2d',
1685
+ 't3',
1686
+ 't3a',
1687
+ 't4g',
1688
+ 'trn1',
1689
+ 'trn1n',
1690
+ 'u-3tb1',
1691
+ 'u-6tb1',
1692
+ 'u7i-12tb',
1693
+ 'u7i-6tb',
1694
+ 'u7i-8tb',
1695
+ 'u7in-16tb',
1696
+ 'u7in-24tb',
1697
+ 'u7in-32tb',
1698
+ 'vt1',
1699
+ 'x1',
1700
+ 'x1e',
1701
+ 'x2gd',
1702
+ 'x2idn',
1703
+ 'x2iedn',
1704
+ 'x2iezn',
1705
+ 'x4',
1706
+ 'x8g',
1707
+ 'z1d',
1708
+ 'z3'
1709
+ ]
1710
+ },
1711
+ description: 'Allowed values for `cfke.io/instance-family`.'
1712
+ },
1713
+ 'topology.kubernetes.io/region': {
1714
+ type: 'array',
1715
+ items: {
1716
+ type: 'string',
1717
+ enum: [
1718
+ 'africa-south1',
1719
+ 'ap-northeast-1',
1720
+ 'ap-northeast-2',
1721
+ 'ap-northeast-3',
1722
+ 'ap-south-1',
1723
+ 'ap-southeast-1',
1724
+ 'ap-southeast-2',
1725
+ 'ash',
1726
+ 'asia-east1',
1727
+ 'asia-east2',
1728
+ 'asia-northeast1',
1729
+ 'asia-northeast2',
1730
+ 'asia-northeast3',
1731
+ 'asia-south1',
1732
+ 'asia-south2',
1733
+ 'asia-southeast1',
1734
+ 'asia-southeast2',
1735
+ 'australia-southeast1',
1736
+ 'australia-southeast2',
1737
+ 'ca-central-1',
1738
+ 'eu-central-1',
1739
+ 'eu-central-2',
1740
+ 'eu-north-1',
1741
+ 'eu-west-1',
1742
+ 'eu-west-2',
1743
+ 'eu-west-3',
1744
+ 'europe-central2',
1745
+ 'europe-north1',
1746
+ 'europe-southwest1',
1747
+ 'europe-west1',
1748
+ 'europe-west10',
1749
+ 'europe-west12',
1750
+ 'europe-west2',
1751
+ 'europe-west3',
1752
+ 'europe-west4',
1753
+ 'europe-west6',
1754
+ 'europe-west8',
1755
+ 'europe-west9',
1756
+ 'fsn1',
1757
+ 'hel1',
1758
+ 'hil',
1759
+ 'me-central1',
1760
+ 'me-central2',
1761
+ 'me-west1',
1762
+ 'nbg1',
1763
+ 'northamerica-northeast1',
1764
+ 'northamerica-northeast2',
1765
+ 'sa-east-1',
1766
+ 'sin',
1767
+ 'southamerica-east1',
1768
+ 'southamerica-west1',
1769
+ 'us-central1',
1770
+ 'us-east-1',
1771
+ 'us-east-2',
1772
+ 'us-east1',
1773
+ 'us-east4',
1774
+ 'us-east5',
1775
+ 'us-south1',
1776
+ 'us-west-1',
1777
+ 'us-west-2',
1778
+ 'us-west1',
1779
+ 'us-west2',
1780
+ 'us-west3',
1781
+ 'us-west4'
1782
+ ]
1783
+ },
1784
+ description: 'Allowed values for `topology.kubernetes.io/region`.'
1785
+ }
1786
+ },
1787
+ additionalProperties: false,
1788
+ description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together. Omit a field to place no restriction on that key.'
1789
+ },
1790
+ scalingProfile: {
1791
+ type: 'string',
1792
+ description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
1793
+ example: 'conservative',
1794
+ enum: [
1795
+ 'aggressive',
1796
+ 'conservative'
1797
+ ]
698
1798
  }
699
1799
  },
700
1800
  additionalProperties: false
@@ -731,7 +1831,9 @@ export const InviteSchema = {
731
1831
  example: '7kUZnH7nnKUFfvc4NK2KQF'
732
1832
  }
733
1833
  },
734
- required: ['date_created'],
1834
+ required: [
1835
+ 'date_created'
1836
+ ],
735
1837
  additionalProperties: false
736
1838
  };
737
1839
  export const InvoiceSchema = {
@@ -739,9 +1841,8 @@ export const InvoiceSchema = {
739
1841
  properties: {
740
1842
  id: {
741
1843
  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'
1844
+ description: 'Unique identifier of the invoice.',
1845
+ example: 'in_1234567890xCrwxghOTj1234'
745
1846
  },
746
1847
  number: {
747
1848
  type: 'string'
@@ -784,90 +1885,165 @@ export const InvoiceSchema = {
784
1885
  type: 'string'
785
1886
  }
786
1887
  },
787
- required: ['created', 'period_start', 'period_end'],
1888
+ required: [
1889
+ 'created',
1890
+ 'period_start',
1891
+ 'period_end'
1892
+ ],
788
1893
  additionalProperties: false
789
1894
  };
790
- export const MarketplaceListingSchema = {
1895
+ export const MarketplaceListingFilesSchema = {
791
1896
  type: 'object',
792
1897
  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: {
802
- type: 'string',
803
- description: 'Name of the chart listing',
804
- example: 'Portworx Enterprise + Disaster Recovery - Baremetal'
805
- },
806
- developer: {
1898
+ chartYaml: {
807
1899
  type: 'string',
808
- description: 'Author of the chart listing',
809
- example: 'Portworx'
1900
+ description: 'Raw Chart.yaml content from the Helm chart',
1901
+ example: 'apiVersion: v2\nname: nginx-ingress\nversion: 1.18.2-cfke.45\nappVersion: 1.9.4'
810
1902
  },
811
- description: {
1903
+ valuesYaml: {
812
1904
  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'
1905
+ description: 'Raw values.yaml content from the Helm chart',
1906
+ example: 'replicaCount: 1\nimage:\n repository: nginx\n tag: latest'
815
1907
  },
816
- logoUrl: {
1908
+ valuesSchemaJson: {
817
1909
  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: {
1910
+ description: 'JSON schema for values.yaml as a string',
1911
+ example: '{"type":"object","properties":{"replicaCount":{"type":"number"}}}'
1912
+ }
1913
+ },
1914
+ additionalProperties: false
1915
+ };
1916
+ export const MarketplaceListingSchema = {
1917
+ type: 'object',
1918
+ properties: {
1919
+ name: {
822
1920
  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....'
1921
+ description: 'Name of the chart',
1922
+ example: 'nginx-ingress'
825
1923
  },
826
- categories: {
1924
+ versions: {
827
1925
  type: 'array',
828
1926
  items: {
829
1927
  type: 'string',
830
- example: 'AI & Machine Learning'
1928
+ 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-]+)*))?$',
1929
+ description: 'Specific version of the chart',
1930
+ example: '1.18.2-cfke.45'
831
1931
  },
832
- description: 'Tags of the chart'
1932
+ description: 'Available versions of the chart'
833
1933
  },
834
1934
  version_channels: {
835
1935
  type: 'array',
836
1936
  items: {
837
1937
  type: 'string',
838
1938
  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
- }
1939
+ description: 'Version channel pattern',
1940
+ example: '1.18.x-cfke.x'
1941
+ },
1942
+ description: 'Version channels for the chart'
842
1943
  },
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'
1944
+ latestVersion: {
1945
+ type: 'string',
1946
+ description: 'Latest version of the chart',
1947
+ example: '1.18.2-cfke.45'
1948
+ },
1949
+ metadata: {
1950
+ type: 'object',
1951
+ properties: {
1952
+ name: {
1953
+ type: 'string',
1954
+ description: 'Chart name from metadata',
1955
+ example: 'nginx-ingress'
1956
+ },
1957
+ version: {
1958
+ type: 'string',
1959
+ description: 'Chart version from metadata',
1960
+ example: '1.18.2-cfke.45'
1961
+ },
1962
+ description: {
1963
+ type: 'string',
1964
+ description: 'Chart description',
1965
+ example: 'NGINX Ingress Controller for Kubernetes'
1966
+ },
1967
+ appVersion: {
1968
+ type: 'string',
1969
+ description: 'Application version',
1970
+ example: '1.9.4'
1971
+ },
1972
+ apiVersion: {
1973
+ type: 'string',
1974
+ description: 'Helm API version',
1975
+ example: 'v2'
1976
+ },
1977
+ keywords: {
1978
+ type: 'array',
1979
+ items: {
1980
+ type: 'string'
853
1981
  },
854
- schema: {
855
- type: 'string',
856
- description: 'Schema of the chart values. JSON Schema as string'
1982
+ description: 'Chart keywords',
1983
+ example: [
1984
+ 'ingress',
1985
+ 'nginx',
1986
+ 'load-balancer'
1987
+ ]
1988
+ },
1989
+ home: {
1990
+ type: 'string',
1991
+ description: 'Chart home URL',
1992
+ example: 'https://kubernetes.github.io/ingress-nginx/'
1993
+ },
1994
+ icon: {
1995
+ type: 'string',
1996
+ description: 'A URL to an SVG or PNG image to be used as an icon',
1997
+ example: 'https://cloudfleet.ai/images/marketplace/icons/ingress-nginx.png'
1998
+ },
1999
+ sources: {
2000
+ type: 'array',
2001
+ items: {
2002
+ type: 'string'
857
2003
  },
858
- placeholder: {
859
- type: 'string',
860
- description: 'Schema of the chart values',
861
- example: `foo: 1
862
- bar: example`
863
- }
2004
+ description: 'Chart source URLs',
2005
+ example: [
2006
+ 'https://github.com/kubernetes/ingress-nginx'
2007
+ ]
864
2008
  },
865
- required: ['version', 'schema', 'placeholder'],
866
- additionalProperties: false
867
- }
2009
+ maintainers: {
2010
+ type: 'array',
2011
+ items: {
2012
+ type: 'object',
2013
+ properties: {
2014
+ name: {
2015
+ type: 'string',
2016
+ description: 'Maintainer name',
2017
+ example: 'NGINX Team'
2018
+ },
2019
+ email: {
2020
+ type: 'string',
2021
+ description: 'Maintainer email',
2022
+ example: 'support@nginx.org'
2023
+ }
2024
+ },
2025
+ required: [
2026
+ 'name'
2027
+ ],
2028
+ additionalProperties: false
2029
+ },
2030
+ description: 'Chart maintainers'
2031
+ }
2032
+ },
2033
+ required: [
2034
+ 'name',
2035
+ 'version'
2036
+ ],
2037
+ additionalProperties: false,
2038
+ description: 'Chart metadata'
868
2039
  }
869
2040
  },
870
- required: ['id', 'name', 'developer', 'description', 'logoUrl', 'longDescription', 'categories', 'version_channels', 'value_schemas'],
2041
+ required: [
2042
+ 'name',
2043
+ 'versions',
2044
+ 'version_channels',
2045
+ 'latestVersion'
2046
+ ],
871
2047
  additionalProperties: false
872
2048
  };
873
2049
  export const OrganizationCreateInputSchema = {
@@ -903,7 +2079,13 @@ export const OrganizationCreateInputSchema = {
903
2079
  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
2080
  }
905
2081
  },
906
- required: ['email', 'first_name', 'last_name', 'company_name', 'password'],
2082
+ required: [
2083
+ 'email',
2084
+ 'first_name',
2085
+ 'last_name',
2086
+ 'company_name',
2087
+ 'password'
2088
+ ],
907
2089
  additionalProperties: false
908
2090
  };
909
2091
  export const OrganizationSchema = {
@@ -985,32 +2167,60 @@ export const OrganizationSchema = {
985
2167
  id: {
986
2168
  type: 'string',
987
2169
  description: 'Id of the control plane version. Used in API calls.',
988
- example: '1.29.x-cfke.x'
2170
+ example: '1.33.x-cfke.x'
989
2171
  },
990
2172
  label: {
991
2173
  type: 'string',
992
2174
  description: 'Label of the control plane version. Used in frontent UI.',
993
- example: '1.29.x (Always latest 1.29 patch version)'
2175
+ example: '1.33.x (Always latest 1.33 patch version)'
994
2176
  }
995
2177
  },
996
- required: ['id', 'label'],
2178
+ required: [
2179
+ 'id',
2180
+ 'label'
2181
+ ],
997
2182
  additionalProperties: false
998
2183
  },
999
2184
  minItems: 1,
1000
2185
  description: 'List of CFKE control plane versions available for the organization.'
2186
+ },
2187
+ cfcr_storage_gb: {
2188
+ type: 'integer',
2189
+ minimum: -1,
2190
+ description: 'Organization-level maximum CFCR storage volume in GB. -1 means no limit.',
2191
+ example: 500
1001
2192
  }
1002
2193
  },
1003
- required: ['basic_clusters_max', 'basic_clusters_available', 'pro_clusters_max', 'pro_clusters_available', 'fleets_max', 'cluster_tiers', 'regions', 'versions'],
2194
+ required: [
2195
+ 'basic_clusters_max',
2196
+ 'basic_clusters_available',
2197
+ 'pro_clusters_max',
2198
+ 'pro_clusters_available',
2199
+ 'fleets_max',
2200
+ 'cluster_tiers',
2201
+ 'regions',
2202
+ 'versions',
2203
+ 'cfcr_storage_gb'
2204
+ ],
1004
2205
  additionalProperties: false,
1005
2206
  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
2207
  },
1007
2208
  status: {
1008
2209
  type: 'string',
1009
2210
  description: 'Status of the organization. Can be `active` or `closed`, or `suspended`.',
1010
- enum: ['active', 'closed', 'suspended']
2211
+ enum: [
2212
+ 'active',
2213
+ 'closed',
2214
+ 'suspended'
2215
+ ]
1011
2216
  }
1012
2217
  },
1013
- required: ['id', 'date_created', 'quota', 'status'],
2218
+ required: [
2219
+ 'id',
2220
+ 'date_created',
2221
+ 'quota',
2222
+ 'status'
2223
+ ],
1014
2224
  additionalProperties: false
1015
2225
  };
1016
2226
  export const PaymentMethodSchema = {
@@ -1032,7 +2242,9 @@ export const PaymentMethodSchema = {
1032
2242
  nullable: true,
1033
2243
  description: 'Payment method type type. Only `card` payments supported at the moment.',
1034
2244
  example: 'card',
1035
- enum: ['card']
2245
+ enum: [
2246
+ 'card'
2247
+ ]
1036
2248
  },
1037
2249
  last4: {
1038
2250
  type: 'string',
@@ -1045,14 +2257,14 @@ export const PaymentMethodSchema = {
1045
2257
  minimum: 1,
1046
2258
  maximum: 12,
1047
2259
  nullable: true,
1048
- description: "Two-digit number representing the card's expiration month.",
2260
+ description: 'Two-digit number representing the card\'s expiration month.',
1049
2261
  example: '12'
1050
2262
  },
1051
2263
  exp_year: {
1052
2264
  type: 'integer',
1053
2265
  minimum: 2024,
1054
2266
  nullable: true,
1055
- description: "Four-digit number representing the card's expiration year.",
2267
+ description: 'Four-digit number representing the card\'s expiration year.',
1056
2268
  example: '2028'
1057
2269
  },
1058
2270
  brand: {
@@ -1060,49 +2272,921 @@ export const PaymentMethodSchema = {
1060
2272
  nullable: true,
1061
2273
  description: 'Payment card brand. Can be `amex`, `diners`, `discover`, `eftpos_au`, `jcb`, `mastercard`, `unionpay`, `visa`, or `unknown`.',
1062
2274
  example: 'visa',
1063
- enum: ['amex', 'diners', 'discover', 'eftpos_au', 'jcb', 'mastercard', 'unionpay', 'visa', 'unknown']
2275
+ enum: [
2276
+ 'amex',
2277
+ 'diners',
2278
+ 'discover',
2279
+ 'eftpos_au',
2280
+ 'jcb',
2281
+ 'mastercard',
2282
+ 'unionpay',
2283
+ 'visa',
2284
+ 'unknown'
2285
+ ]
1064
2286
  }
1065
2287
  },
1066
- required: ['id', 'setup', 'type', 'last4', 'exp_month', 'exp_year', 'brand'],
2288
+ required: [
2289
+ 'id',
2290
+ 'setup',
2291
+ 'type',
2292
+ 'last4',
2293
+ 'exp_month',
2294
+ 'exp_year',
2295
+ 'brand'
2296
+ ],
1067
2297
  additionalProperties: false
1068
2298
  };
1069
- export const TokenCreateInputSchema = {
2299
+ export const PlatformQuotaSchema = {
2300
+ type: 'object',
2301
+ properties: {
2302
+ basic_clusters_max: {
2303
+ type: 'integer',
2304
+ minimum: 0,
2305
+ description: 'Maximum number of Basic clusters that can be created.',
2306
+ example: 999
2307
+ },
2308
+ basic_clusters_available: {
2309
+ type: 'integer',
2310
+ description: 'Available number of Basic clusters that can be created.',
2311
+ example: 999
2312
+ },
2313
+ pro_clusters_max: {
2314
+ type: 'integer',
2315
+ minimum: 0,
2316
+ description: 'Maximum number of Pro clusters that can be created.',
2317
+ example: 999
2318
+ },
2319
+ pro_clusters_available: {
2320
+ type: 'integer',
2321
+ description: 'Available number of Pro clusters that can be created.',
2322
+ example: 999
2323
+ },
2324
+ fleets_max: {
2325
+ type: 'integer',
2326
+ minimum: 0,
2327
+ description: 'Maximum number of fleets that can be created per cluster.',
2328
+ example: 999
2329
+ },
2330
+ cluster_tiers: {
2331
+ type: 'array',
2332
+ items: {
2333
+ type: 'string',
2334
+ example: 'basic'
2335
+ },
2336
+ minItems: 0,
2337
+ description: 'List of Cloudfleet cluster tiers available for the organization.'
2338
+ },
2339
+ regions: {
2340
+ type: 'array',
2341
+ items: {
2342
+ type: 'string',
2343
+ example: 'northamerica-central-1'
2344
+ },
2345
+ minItems: 1,
2346
+ description: 'List of Cloudfleet control plane regions available for the organization.'
2347
+ },
2348
+ versions: {
2349
+ type: 'array',
2350
+ items: {
2351
+ type: 'object',
2352
+ properties: {
2353
+ id: {
2354
+ type: 'string',
2355
+ description: 'Id of the control plane version. Used in API calls.',
2356
+ example: '1.33.x-cfke.x'
2357
+ },
2358
+ label: {
2359
+ type: 'string',
2360
+ description: 'Label of the control plane version. Used in frontent UI.',
2361
+ example: '1.33.x (Always latest 1.33 patch version)'
2362
+ }
2363
+ },
2364
+ required: [
2365
+ 'id',
2366
+ 'label'
2367
+ ],
2368
+ additionalProperties: false
2369
+ },
2370
+ minItems: 1,
2371
+ description: 'List of CFKE control plane versions available for the organization.'
2372
+ },
2373
+ cfcr_storage_gb: {
2374
+ type: 'integer',
2375
+ minimum: -1,
2376
+ description: 'Organization-level maximum CFCR storage volume in GB. -1 means no limit.',
2377
+ example: 500
2378
+ }
2379
+ },
2380
+ required: [
2381
+ 'basic_clusters_max',
2382
+ 'basic_clusters_available',
2383
+ 'pro_clusters_max',
2384
+ 'pro_clusters_available',
2385
+ 'fleets_max',
2386
+ 'cluster_tiers',
2387
+ 'regions',
2388
+ 'versions',
2389
+ 'cfcr_storage_gb'
2390
+ ],
2391
+ additionalProperties: false
2392
+ };
2393
+ export const RegistryRepositorySchema = {
1070
2394
  type: 'object',
1071
2395
  properties: {
1072
2396
  name: {
1073
2397
  type: 'string',
1074
- maxLength: 63,
1075
- minLength: 1,
1076
- pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
1077
- description: 'Human readable access token name.',
1078
- example: 'deployment-token'
2398
+ description: 'Repository name.',
2399
+ example: 'my-app'
1079
2400
  },
1080
- role: {
2401
+ region: {
1081
2402
  type: 'string',
1082
- description: 'Role assumed by the token.',
1083
- example: 'User',
1084
- enum: ['Administrator', 'User']
2403
+ description: 'Registry region.',
2404
+ example: 'northamerica'
2405
+ },
2406
+ uri: {
2407
+ type: 'string',
2408
+ description: 'Full URI of the repository.',
2409
+ example: 'ssds123e-6651-4e5d-9c04-079f6532989b.northamerica.registry.cloudfleet.dev/my-app'
1085
2410
  }
1086
2411
  },
1087
- required: ['name', 'role'],
2412
+ required: [
2413
+ 'name',
2414
+ 'region',
2415
+ 'uri'
2416
+ ],
1088
2417
  additionalProperties: false
1089
2418
  };
1090
- export const TokenSchema = {
2419
+ export const RegistryRepositoryWithTagsSchema = {
1091
2420
  type: 'object',
1092
2421
  properties: {
1093
2422
  name: {
1094
2423
  type: 'string',
1095
- maxLength: 63,
1096
- minLength: 1,
1097
- pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
1098
- description: 'Human readable access token name.',
1099
- example: 'deployment-token'
2424
+ description: 'Repository name.',
2425
+ example: 'my-app'
1100
2426
  },
1101
- role: {
2427
+ region: {
1102
2428
  type: 'string',
1103
- description: 'Role assumed by the token.',
1104
- example: 'User',
1105
- enum: ['Administrator', 'User']
2429
+ description: 'Registry region.',
2430
+ example: 'northamerica'
2431
+ },
2432
+ uri: {
2433
+ type: 'string',
2434
+ description: 'Full URI of the repository.',
2435
+ example: 'ssds123e-6651-4e5d-9c04-079f6532989b.northamerica.registry.cloudfleet.dev/my-app'
2436
+ },
2437
+ tags: {
2438
+ type: 'array',
2439
+ items: {
2440
+ type: 'object',
2441
+ properties: {
2442
+ name: {
2443
+ type: 'string',
2444
+ description: 'Tag name.',
2445
+ example: 'latest'
2446
+ },
2447
+ size: {
2448
+ type: 'number',
2449
+ format: 'float',
2450
+ description: 'Size of the tag in bytes.',
2451
+ example: 123456789
2452
+ },
2453
+ mediaType: {
2454
+ type: 'string',
2455
+ description: 'Media type of the manifest.',
2456
+ example: 'application/vnd.docker.distribution.manifest.v2+json'
2457
+ },
2458
+ platforms: {
2459
+ type: 'array',
2460
+ items: {
2461
+ type: 'string'
2462
+ },
2463
+ description: 'Array of platform strings for multi-arch images (e.g., linux/amd64, linux/arm64).',
2464
+ example: [
2465
+ 'linux/amd64',
2466
+ 'linux/arm64'
2467
+ ]
2468
+ }
2469
+ },
2470
+ required: [
2471
+ 'name',
2472
+ 'size'
2473
+ ],
2474
+ additionalProperties: false
2475
+ },
2476
+ description: 'Array of tags in the repository.'
2477
+ },
2478
+ totalSize: {
2479
+ type: 'number',
2480
+ format: 'float',
2481
+ description: 'Total size of all tags in the repository in bytes.',
2482
+ example: 987654321
2483
+ }
2484
+ },
2485
+ required: [
2486
+ 'name',
2487
+ 'region',
2488
+ 'uri',
2489
+ 'tags',
2490
+ 'totalSize'
2491
+ ],
2492
+ additionalProperties: false
2493
+ };
2494
+ export const RegistryTagSchema = {
2495
+ type: 'object',
2496
+ properties: {
2497
+ name: {
2498
+ type: 'string',
2499
+ description: 'Tag name.',
2500
+ example: 'latest'
2501
+ },
2502
+ digest: {
2503
+ type: 'string',
2504
+ description: 'Manifest digest for pulling by digest.',
2505
+ example: 'sha256:abcd1234ef567890abcd1234ef567890abcd1234ef567890abcd1234ef567890'
2506
+ },
2507
+ mediaType: {
2508
+ type: 'string',
2509
+ description: 'Media type of the manifest.',
2510
+ example: 'application/vnd.docker.distribution.manifest.v2+json'
2511
+ },
2512
+ config: {
2513
+ type: 'object',
2514
+ properties: {
2515
+ size: {
2516
+ type: 'number',
2517
+ format: 'float',
2518
+ description: 'Size of the config in bytes.',
2519
+ example: 1234
2520
+ }
2521
+ },
2522
+ required: [
2523
+ 'size'
2524
+ ],
2525
+ additionalProperties: false,
2526
+ description: 'Manifest config metadata.'
2527
+ },
2528
+ layers: {
2529
+ type: 'array',
2530
+ items: {
2531
+ type: 'object',
2532
+ properties: {
2533
+ digest: {
2534
+ type: 'string',
2535
+ description: 'Digest of the layer.',
2536
+ example: 'sha256:abcd1234ef567890abcd1234ef567890abcd1234ef567890abcd1234ef567890'
2537
+ },
2538
+ size: {
2539
+ type: 'number',
2540
+ format: 'float',
2541
+ description: 'Size of the layer in bytes.',
2542
+ example: 5678
2543
+ }
2544
+ },
2545
+ required: [
2546
+ 'size'
2547
+ ],
2548
+ additionalProperties: false
2549
+ },
2550
+ description: 'Array of layer metadata.'
2551
+ },
2552
+ manifests: {
2553
+ type: 'array',
2554
+ items: {
2555
+ type: 'object',
2556
+ properties: {
2557
+ digest: {
2558
+ type: 'string',
2559
+ description: 'Digest of the manifest.',
2560
+ example: 'sha256:abcd1234ef567890abcd1234ef567890abcd1234ef567890abcd1234ef567890'
2561
+ },
2562
+ platform: {
2563
+ type: 'object',
2564
+ properties: {
2565
+ architecture: {
2566
+ type: 'string',
2567
+ description: 'Architecture of the platform.',
2568
+ example: 'amd64'
2569
+ },
2570
+ os: {
2571
+ type: 'string',
2572
+ description: 'Operating system of the platform.',
2573
+ example: 'linux'
2574
+ },
2575
+ variant: {
2576
+ type: 'string',
2577
+ description: 'Variant of the platform (e.g., v7, v8 for ARM).',
2578
+ example: 'v8'
2579
+ }
2580
+ },
2581
+ required: [
2582
+ 'architecture',
2583
+ 'os'
2584
+ ],
2585
+ additionalProperties: false,
2586
+ description: 'Platform information for the manifest.'
2587
+ },
2588
+ layers: {
2589
+ type: 'array',
2590
+ items: {
2591
+ type: 'object',
2592
+ properties: {
2593
+ digest: {
2594
+ type: 'string',
2595
+ description: 'Digest of the layer.',
2596
+ example: 'sha256:abcd1234ef567890abcd1234ef567890abcd1234ef567890abcd1234ef567890'
2597
+ },
2598
+ size: {
2599
+ type: 'number',
2600
+ format: 'float',
2601
+ description: 'Size of the layer in bytes.',
2602
+ example: 5678
2603
+ }
2604
+ },
2605
+ required: [
2606
+ 'size'
2607
+ ],
2608
+ additionalProperties: false
2609
+ },
2610
+ description: 'Layers for this platform.'
2611
+ },
2612
+ size: {
2613
+ type: 'number',
2614
+ format: 'float',
2615
+ description: 'Total size of this platform manifest in bytes.',
2616
+ example: 12345678
2617
+ }
2618
+ },
2619
+ required: [
2620
+ 'digest'
2621
+ ],
2622
+ additionalProperties: false
2623
+ },
2624
+ description: 'Array of manifests for multi-arch images.'
2625
+ },
2626
+ size: {
2627
+ type: 'number',
2628
+ format: 'float',
2629
+ description: 'Total size of the tag in bytes.',
2630
+ example: 123456789
2631
+ },
2632
+ region: {
2633
+ type: 'string',
2634
+ description: 'Registry region.',
2635
+ example: 'northamerica'
2636
+ },
2637
+ repository: {
2638
+ type: 'string',
2639
+ description: 'Repository name.',
2640
+ example: 'my-app'
2641
+ },
2642
+ uri: {
2643
+ type: 'string',
2644
+ description: 'Full URI of the tag.',
2645
+ example: 'ssds123e-6651-4e5d-9c04-079f6532989b.northamerica.registry.cloudfleet.dev/my-app:latest'
2646
+ }
2647
+ },
2648
+ required: [
2649
+ 'name',
2650
+ 'digest',
2651
+ 'size',
2652
+ 'region',
2653
+ 'repository',
2654
+ 'uri'
2655
+ ],
2656
+ additionalProperties: false
2657
+ };
2658
+ export const TicketAttachmentSchema = {
2659
+ type: 'object',
2660
+ properties: {
2661
+ id: {
2662
+ type: 'string',
2663
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
2664
+ example: '60c72b2f9f1b2c001f8e4d3c'
2665
+ },
2666
+ filename: {
2667
+ type: 'string',
2668
+ description: 'Original filename as uploaded.',
2669
+ example: 'debug.log'
2670
+ },
2671
+ content_type: {
2672
+ type: 'string',
2673
+ description: 'MIME content type of the attachment.',
2674
+ example: 'text/plain'
2675
+ },
2676
+ size: {
2677
+ type: 'integer',
2678
+ description: 'Size of the attachment in bytes.',
2679
+ example: 12345
2680
+ }
2681
+ },
2682
+ required: [
2683
+ 'id',
2684
+ 'filename',
2685
+ 'content_type',
2686
+ 'size'
2687
+ ],
2688
+ additionalProperties: false
2689
+ };
2690
+ export const TicketCreateInputSchema = {
2691
+ type: 'object',
2692
+ properties: {
2693
+ category: {
2694
+ type: 'string',
2695
+ description: 'Ticket category. Drives auto-assignment and may carry a subcategory in `properties`.',
2696
+ example: 'technical',
2697
+ enum: [
2698
+ 'billing',
2699
+ 'technical',
2700
+ 'general'
2701
+ ]
2702
+ },
2703
+ body: {
2704
+ type: 'string',
2705
+ maxLength: 50000,
2706
+ minLength: 1,
2707
+ pattern: '\\S',
2708
+ description: 'Initial message body in markdown. There is no separate subject — the first message body is the description.',
2709
+ example: 'My cluster cannot reach the registry. Logs attached.'
2710
+ },
2711
+ properties: {
2712
+ type: 'object',
2713
+ additionalProperties: true,
2714
+ description: 'Free-form key/value bag set by the UI (e.g. `subcategory`, `cluster_id`, `cluster_name`, `region`).',
2715
+ example: {
2716
+ subcategory: 'cluster-question',
2717
+ cluster_id: '60c72b2f9f1b2c001f8e4d3a'
2718
+ }
2719
+ }
2720
+ },
2721
+ required: [
2722
+ 'category',
2723
+ 'body'
2724
+ ],
2725
+ additionalProperties: false
2726
+ };
2727
+ export const TicketListResponseSchema = {
2728
+ type: 'object',
2729
+ properties: {
2730
+ items: {
2731
+ type: 'array',
2732
+ items: {
2733
+ type: 'object',
2734
+ properties: {
2735
+ id: {
2736
+ type: 'string',
2737
+ description: 'Unique identifier of the ticket (Mongo ObjectId).',
2738
+ example: '60c72b2f9f1b2c001f8e4d3a'
2739
+ },
2740
+ status: {
2741
+ type: 'string',
2742
+ description: 'Current state of the ticket.',
2743
+ example: 'waiting_on_us',
2744
+ enum: [
2745
+ 'waiting_on_us',
2746
+ 'waiting_on_user',
2747
+ 'closed'
2748
+ ]
2749
+ },
2750
+ category: {
2751
+ type: 'string',
2752
+ description: 'Ticket category.',
2753
+ example: 'technical',
2754
+ enum: [
2755
+ 'billing',
2756
+ 'technical',
2757
+ 'general'
2758
+ ]
2759
+ },
2760
+ summary: {
2761
+ type: 'string',
2762
+ description: 'First 128 characters of the initial message body, with markdown formatting and newlines stripped. Used for ticket list previews.',
2763
+ example: 'My cluster cannot reach the registry. Logs attached.'
2764
+ },
2765
+ closed_at: {
2766
+ type: 'string',
2767
+ format: 'date-time',
2768
+ nullable: true,
2769
+ description: 'Closure timestamp. Null while the ticket is open.',
2770
+ example: '2026-05-18T16:08:14.338Z'
2771
+ },
2772
+ date_created: {
2773
+ type: 'string',
2774
+ format: 'date-time',
2775
+ description: 'Creation date of the ticket. ISO 8601 UTC.',
2776
+ example: '2026-05-11T16:08:14.338Z'
2777
+ },
2778
+ date_updated: {
2779
+ type: 'string',
2780
+ format: 'date-time',
2781
+ description: 'Last update date of the ticket. ISO 8601 UTC.',
2782
+ example: '2026-05-11T16:08:14.338Z'
2783
+ },
2784
+ messages: {
2785
+ type: 'array',
2786
+ items: {
2787
+ type: 'object',
2788
+ properties: {
2789
+ id: {
2790
+ type: 'string',
2791
+ description: 'Unique identifier of the message (Mongo ObjectId).',
2792
+ example: '60c72b2f9f1b2c001f8e4d3b'
2793
+ },
2794
+ type: {
2795
+ type: 'string',
2796
+ description: 'Message type. Internal notes are filtered out of customer-facing responses.',
2797
+ example: 'customer_reply',
2798
+ enum: [
2799
+ 'customer_reply',
2800
+ 'agent_reply'
2801
+ ]
2802
+ },
2803
+ body: {
2804
+ type: 'string',
2805
+ description: 'Message body in markdown.',
2806
+ example: 'Thanks — that resolved it on my side.'
2807
+ },
2808
+ author_first_name: {
2809
+ type: 'string',
2810
+ nullable: true,
2811
+ description: 'First name of the author. Null when not provided.',
2812
+ example: 'Jane'
2813
+ },
2814
+ author_last_name: {
2815
+ type: 'string',
2816
+ nullable: true,
2817
+ description: 'Last name of the author. Null when not provided.',
2818
+ example: 'Doe'
2819
+ },
2820
+ attachments: {
2821
+ type: 'array',
2822
+ items: {
2823
+ type: 'object',
2824
+ properties: {
2825
+ id: {
2826
+ type: 'string',
2827
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
2828
+ example: '60c72b2f9f1b2c001f8e4d3c'
2829
+ },
2830
+ filename: {
2831
+ type: 'string',
2832
+ description: 'Original filename as uploaded.',
2833
+ example: 'debug.log'
2834
+ },
2835
+ content_type: {
2836
+ type: 'string',
2837
+ description: 'MIME content type of the attachment.',
2838
+ example: 'text/plain'
2839
+ },
2840
+ size: {
2841
+ type: 'integer',
2842
+ description: 'Size of the attachment in bytes.',
2843
+ example: 12345
2844
+ }
2845
+ },
2846
+ required: [
2847
+ 'id',
2848
+ 'filename',
2849
+ 'content_type',
2850
+ 'size'
2851
+ ],
2852
+ additionalProperties: false
2853
+ },
2854
+ description: 'Attachments associated with this message.',
2855
+ example: []
2856
+ },
2857
+ date_created: {
2858
+ type: 'string',
2859
+ format: 'date-time',
2860
+ description: 'Creation date of the message. ISO 8601 UTC.',
2861
+ example: '2026-05-11T16:08:14.338Z'
2862
+ }
2863
+ },
2864
+ required: [
2865
+ 'id',
2866
+ 'type',
2867
+ 'body',
2868
+ 'date_created'
2869
+ ],
2870
+ additionalProperties: false
2871
+ },
2872
+ description: 'Messages on the ticket in chronological order. Internal notes are excluded. Returned by the detail endpoint only.'
2873
+ }
2874
+ },
2875
+ required: [
2876
+ 'id',
2877
+ 'status',
2878
+ 'category',
2879
+ 'summary',
2880
+ 'date_created',
2881
+ 'date_updated'
2882
+ ],
2883
+ additionalProperties: false
2884
+ },
2885
+ description: 'Tickets for the organization, ordered newest first. Messages are omitted from list responses.'
2886
+ }
2887
+ },
2888
+ required: [
2889
+ 'items'
2890
+ ],
2891
+ additionalProperties: false
2892
+ };
2893
+ export const TicketMessageInputSchema = {
2894
+ type: 'object',
2895
+ properties: {
2896
+ body: {
2897
+ type: 'string',
2898
+ maxLength: 50000,
2899
+ minLength: 1,
2900
+ pattern: '\\S',
2901
+ description: 'Reply body in markdown.',
2902
+ example: 'Thanks — that resolved it on my side.'
2903
+ }
2904
+ },
2905
+ required: [
2906
+ 'body'
2907
+ ],
2908
+ additionalProperties: false
2909
+ };
2910
+ export const TicketMessageSchema = {
2911
+ type: 'object',
2912
+ properties: {
2913
+ id: {
2914
+ type: 'string',
2915
+ description: 'Unique identifier of the message (Mongo ObjectId).',
2916
+ example: '60c72b2f9f1b2c001f8e4d3b'
2917
+ },
2918
+ type: {
2919
+ type: 'string',
2920
+ description: 'Message type. Internal notes are filtered out of customer-facing responses.',
2921
+ example: 'customer_reply',
2922
+ enum: [
2923
+ 'customer_reply',
2924
+ 'agent_reply'
2925
+ ]
2926
+ },
2927
+ body: {
2928
+ type: 'string',
2929
+ description: 'Message body in markdown.',
2930
+ example: 'Thanks — that resolved it on my side.'
2931
+ },
2932
+ author_first_name: {
2933
+ type: 'string',
2934
+ description: 'First name of the author. Null when not provided.',
2935
+ example: 'Jane'
2936
+ },
2937
+ author_last_name: {
2938
+ type: 'string',
2939
+ description: 'Last name of the author. Null when not provided.',
2940
+ example: 'Doe'
2941
+ },
2942
+ attachments: {
2943
+ type: 'array',
2944
+ items: {
2945
+ type: 'object',
2946
+ properties: {
2947
+ id: {
2948
+ type: 'string',
2949
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
2950
+ example: '60c72b2f9f1b2c001f8e4d3c'
2951
+ },
2952
+ filename: {
2953
+ type: 'string',
2954
+ description: 'Original filename as uploaded.',
2955
+ example: 'debug.log'
2956
+ },
2957
+ content_type: {
2958
+ type: 'string',
2959
+ description: 'MIME content type of the attachment.',
2960
+ example: 'text/plain'
2961
+ },
2962
+ size: {
2963
+ type: 'integer',
2964
+ description: 'Size of the attachment in bytes.',
2965
+ example: 12345
2966
+ }
2967
+ },
2968
+ required: [
2969
+ 'id',
2970
+ 'filename',
2971
+ 'content_type',
2972
+ 'size'
2973
+ ],
2974
+ additionalProperties: false
2975
+ },
2976
+ description: 'Attachments associated with this message.',
2977
+ example: []
2978
+ },
2979
+ date_created: {
2980
+ type: 'string',
2981
+ format: 'date-time',
2982
+ description: 'Creation date of the message. ISO 8601 UTC.',
2983
+ example: '2026-05-11T16:08:14.338Z'
2984
+ }
2985
+ },
2986
+ required: [
2987
+ 'id',
2988
+ 'type',
2989
+ 'body',
2990
+ 'date_created'
2991
+ ],
2992
+ additionalProperties: false
2993
+ };
2994
+ export const TicketSchema = {
2995
+ type: 'object',
2996
+ properties: {
2997
+ id: {
2998
+ type: 'string',
2999
+ description: 'Unique identifier of the ticket (Mongo ObjectId).',
3000
+ example: '60c72b2f9f1b2c001f8e4d3a'
3001
+ },
3002
+ status: {
3003
+ type: 'string',
3004
+ description: 'Current state of the ticket.',
3005
+ example: 'waiting_on_us',
3006
+ enum: [
3007
+ 'waiting_on_us',
3008
+ 'waiting_on_user',
3009
+ 'closed'
3010
+ ]
3011
+ },
3012
+ category: {
3013
+ type: 'string',
3014
+ description: 'Ticket category.',
3015
+ example: 'technical',
3016
+ enum: [
3017
+ 'billing',
3018
+ 'technical',
3019
+ 'general'
3020
+ ]
3021
+ },
3022
+ summary: {
3023
+ type: 'string',
3024
+ description: 'First 128 characters of the initial message body, with markdown formatting and newlines stripped. Used for ticket list previews.',
3025
+ example: 'My cluster cannot reach the registry. Logs attached.'
3026
+ },
3027
+ closed_at: {
3028
+ type: 'string',
3029
+ format: 'date-time',
3030
+ description: 'Closure timestamp. Null while the ticket is open.',
3031
+ example: '2026-05-18T16:08:14.338Z'
3032
+ },
3033
+ date_created: {
3034
+ type: 'string',
3035
+ format: 'date-time',
3036
+ description: 'Creation date of the ticket. ISO 8601 UTC.',
3037
+ example: '2026-05-11T16:08:14.338Z'
3038
+ },
3039
+ date_updated: {
3040
+ type: 'string',
3041
+ format: 'date-time',
3042
+ description: 'Last update date of the ticket. ISO 8601 UTC.',
3043
+ example: '2026-05-11T16:08:14.338Z'
3044
+ },
3045
+ messages: {
3046
+ type: 'array',
3047
+ items: {
3048
+ type: 'object',
3049
+ properties: {
3050
+ id: {
3051
+ type: 'string',
3052
+ description: 'Unique identifier of the message (Mongo ObjectId).',
3053
+ example: '60c72b2f9f1b2c001f8e4d3b'
3054
+ },
3055
+ type: {
3056
+ type: 'string',
3057
+ description: 'Message type. Internal notes are filtered out of customer-facing responses.',
3058
+ example: 'customer_reply',
3059
+ enum: [
3060
+ 'customer_reply',
3061
+ 'agent_reply'
3062
+ ]
3063
+ },
3064
+ body: {
3065
+ type: 'string',
3066
+ description: 'Message body in markdown.',
3067
+ example: 'Thanks — that resolved it on my side.'
3068
+ },
3069
+ author_first_name: {
3070
+ type: 'string',
3071
+ description: 'First name of the author. Null when not provided.',
3072
+ example: 'Jane'
3073
+ },
3074
+ author_last_name: {
3075
+ type: 'string',
3076
+ description: 'Last name of the author. Null when not provided.',
3077
+ example: 'Doe'
3078
+ },
3079
+ attachments: {
3080
+ type: 'array',
3081
+ items: {
3082
+ type: 'object',
3083
+ properties: {
3084
+ id: {
3085
+ type: 'string',
3086
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
3087
+ example: '60c72b2f9f1b2c001f8e4d3c'
3088
+ },
3089
+ filename: {
3090
+ type: 'string',
3091
+ description: 'Original filename as uploaded.',
3092
+ example: 'debug.log'
3093
+ },
3094
+ content_type: {
3095
+ type: 'string',
3096
+ description: 'MIME content type of the attachment.',
3097
+ example: 'text/plain'
3098
+ },
3099
+ size: {
3100
+ type: 'integer',
3101
+ description: 'Size of the attachment in bytes.',
3102
+ example: 12345
3103
+ }
3104
+ },
3105
+ required: [
3106
+ 'id',
3107
+ 'filename',
3108
+ 'content_type',
3109
+ 'size'
3110
+ ],
3111
+ additionalProperties: false
3112
+ },
3113
+ description: 'Attachments associated with this message.',
3114
+ example: []
3115
+ },
3116
+ date_created: {
3117
+ type: 'string',
3118
+ format: 'date-time',
3119
+ description: 'Creation date of the message. ISO 8601 UTC.',
3120
+ example: '2026-05-11T16:08:14.338Z'
3121
+ }
3122
+ },
3123
+ required: [
3124
+ 'id',
3125
+ 'type',
3126
+ 'body',
3127
+ 'date_created'
3128
+ ],
3129
+ additionalProperties: false
3130
+ },
3131
+ description: 'Messages on the ticket in chronological order. Internal notes are excluded. Returned by the detail endpoint only.'
3132
+ }
3133
+ },
3134
+ required: [
3135
+ 'id',
3136
+ 'status',
3137
+ 'category',
3138
+ 'summary',
3139
+ 'date_created',
3140
+ 'date_updated'
3141
+ ],
3142
+ additionalProperties: false
3143
+ };
3144
+ export const TokenCreateInputSchema = {
3145
+ type: 'object',
3146
+ properties: {
3147
+ name: {
3148
+ type: 'string',
3149
+ maxLength: 63,
3150
+ minLength: 1,
3151
+ pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
3152
+ description: 'Human readable access token name.',
3153
+ example: 'deployment-token'
3154
+ },
3155
+ role: {
3156
+ type: 'string',
3157
+ description: 'Role assumed by the token.',
3158
+ example: 'User',
3159
+ enum: [
3160
+ 'Administrator',
3161
+ 'User'
3162
+ ]
3163
+ }
3164
+ },
3165
+ required: [
3166
+ 'name',
3167
+ 'role'
3168
+ ],
3169
+ additionalProperties: false
3170
+ };
3171
+ export const TokenSchema = {
3172
+ type: 'object',
3173
+ properties: {
3174
+ name: {
3175
+ type: 'string',
3176
+ maxLength: 63,
3177
+ minLength: 1,
3178
+ pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
3179
+ description: 'Human readable access token name.',
3180
+ example: 'deployment-token'
3181
+ },
3182
+ role: {
3183
+ type: 'string',
3184
+ description: 'Role assumed by the token.',
3185
+ example: 'User',
3186
+ enum: [
3187
+ 'Administrator',
3188
+ 'User'
3189
+ ]
1106
3190
  },
1107
3191
  id: {
1108
3192
  type: 'string',
@@ -1121,7 +3205,11 @@ export const TokenSchema = {
1121
3205
  example: '2023-12-20T13:53:32.000Z'
1122
3206
  }
1123
3207
  },
1124
- required: ['name', 'role', 'date_created'],
3208
+ required: [
3209
+ 'name',
3210
+ 'role',
3211
+ 'date_created'
3212
+ ],
1125
3213
  additionalProperties: false
1126
3214
  };
1127
3215
  export const TokenUpdateInputSchema = {
@@ -1139,11 +3227,129 @@ export const TokenUpdateInputSchema = {
1139
3227
  type: 'string',
1140
3228
  description: 'Role assumed by the token.',
1141
3229
  example: 'User',
1142
- enum: ['Administrator', 'User']
3230
+ enum: [
3231
+ 'Administrator',
3232
+ 'User'
3233
+ ]
1143
3234
  }
1144
3235
  },
1145
3236
  additionalProperties: false
1146
3237
  };
3238
+ export const UsageFacetsSchema = {
3239
+ type: 'object',
3240
+ properties: {
3241
+ cluster_id: {
3242
+ type: 'array',
3243
+ items: {
3244
+ type: 'string'
3245
+ },
3246
+ description: 'List of unique cluster IDs',
3247
+ example: [
3248
+ '6b5439b1-923a-4f2b-a371-d554e5ea23fa'
3249
+ ]
3250
+ },
3251
+ product: {
3252
+ type: 'array',
3253
+ items: {
3254
+ type: 'string'
3255
+ },
3256
+ description: 'List of unique products',
3257
+ example: [
3258
+ 'cfke_controlplane',
3259
+ 'cfke_connected_nodes'
3260
+ ]
3261
+ }
3262
+ },
3263
+ additionalProperties: false
3264
+ };
3265
+ export const UsageResponseSchema = {
3266
+ type: 'object',
3267
+ properties: {
3268
+ data: {
3269
+ type: 'array',
3270
+ items: {
3271
+ type: 'object',
3272
+ properties: {
3273
+ hour: {
3274
+ type: 'string',
3275
+ description: 'Hour of the usage',
3276
+ example: '2019-01-01T00:00:00.000Z'
3277
+ },
3278
+ cluster_id: {
3279
+ type: 'string',
3280
+ description: 'Unique identifier of the kubernetes cluster. UUID v4 string in canonical form',
3281
+ example: '6b5439b1-923a-4f2b-a371-d554e5ea23fa'
3282
+ },
3283
+ product: {
3284
+ type: 'string',
3285
+ description: 'The product the usage is associated with',
3286
+ example: 'cfke_controlplane'
3287
+ },
3288
+ value: {
3289
+ type: 'number',
3290
+ format: 'float',
3291
+ description: 'Consumption',
3292
+ example: 4
3293
+ },
3294
+ price: {
3295
+ type: 'number',
3296
+ format: 'float',
3297
+ description: 'Price per unit',
3298
+ example: 0.01
3299
+ },
3300
+ total: {
3301
+ type: 'number',
3302
+ format: 'float',
3303
+ description: 'Total cost'
3304
+ }
3305
+ },
3306
+ required: [
3307
+ 'hour',
3308
+ 'cluster_id',
3309
+ 'product',
3310
+ 'value',
3311
+ 'price',
3312
+ 'total'
3313
+ ],
3314
+ additionalProperties: false
3315
+ },
3316
+ description: 'Usage data'
3317
+ },
3318
+ facets: {
3319
+ type: 'object',
3320
+ properties: {
3321
+ cluster_id: {
3322
+ type: 'array',
3323
+ items: {
3324
+ type: 'string'
3325
+ },
3326
+ description: 'List of unique cluster IDs',
3327
+ example: [
3328
+ '6b5439b1-923a-4f2b-a371-d554e5ea23fa'
3329
+ ]
3330
+ },
3331
+ product: {
3332
+ type: 'array',
3333
+ items: {
3334
+ type: 'string'
3335
+ },
3336
+ description: 'List of unique products',
3337
+ example: [
3338
+ 'cfke_controlplane',
3339
+ 'cfke_connected_nodes'
3340
+ ]
3341
+ }
3342
+ },
3343
+ additionalProperties: false,
3344
+ description: 'Facets for filtering'
3345
+ }
3346
+ },
3347
+ required: [
3348
+ 'data',
3349
+ 'facets'
3350
+ ],
3351
+ additionalProperties: false
3352
+ };
1147
3353
  export const UsageSchema = {
1148
3354
  type: 'object',
1149
3355
  properties: {
@@ -1154,90 +3360,40 @@ export const UsageSchema = {
1154
3360
  },
1155
3361
  cluster_id: {
1156
3362
  type: 'string',
1157
- format: 'uuid',
1158
3363
  description: 'Unique identifier of the kubernetes cluster. UUID v4 string in canonical form',
1159
3364
  example: '6b5439b1-923a-4f2b-a371-d554e5ea23fa'
1160
3365
  },
1161
- cluster_tier: {
1162
- type: 'string',
1163
- description: 'Tier of the cluster.',
1164
- example: 'pro',
1165
- enum: ['basic', 'pro', '']
1166
- },
1167
3366
  product: {
1168
3367
  type: 'string',
1169
3368
  description: 'The product the usage is associated with',
1170
- example: 'cfke_controlplane',
1171
- enum: ['cfke_controlplane', 'cfke_connected_nodes', 'infra_compute', 'infra_storage', 'infra_loadbalancing', 'infra_traffic', 'cfcr_storage']
1172
- },
1173
- node_name: {
1174
- type: 'string',
1175
- description: 'Name of the Kubernetes node',
1176
- example: 'flexible-moth-956037384'
1177
- },
1178
- sku: {
1179
- type: 'string',
1180
- description: 'SKU of the Kubernetes node',
1181
- example: 'GCP-NORTHAMERICA-NORTHEAST1-A-G1-SMALL-SPOT'
3369
+ example: 'cfke_controlplane'
1182
3370
  },
1183
- cpu: {
1184
- anyOf: [
1185
- {
1186
- type: 'number',
1187
- format: 'float',
1188
- description: 'CPU core count of the node',
1189
- example: 4
1190
- },
1191
- {
1192
- type: 'string',
1193
- enum: ['']
1194
- }
1195
- ]
3371
+ value: {
3372
+ type: 'number',
3373
+ format: 'float',
3374
+ description: 'Consumption',
3375
+ example: 4
1196
3376
  },
1197
3377
  price: {
1198
- anyOf: [
1199
- {
1200
- type: 'number',
1201
- format: 'float',
1202
- description: 'Price',
1203
- example: 4
1204
- },
1205
- {
1206
- type: 'string',
1207
- enum: ['']
1208
- }
1209
- ]
1210
- },
1211
- value: {
1212
- anyOf: [
1213
- {
1214
- type: 'number',
1215
- format: 'float',
1216
- description: 'Value',
1217
- example: 4
1218
- },
1219
- {
1220
- type: 'string',
1221
- enum: ['']
1222
- }
1223
- ]
3378
+ type: 'number',
3379
+ format: 'float',
3380
+ description: 'Price per unit',
3381
+ example: 0.01
1224
3382
  },
1225
3383
  total: {
1226
- anyOf: [
1227
- {
1228
- type: 'number',
1229
- format: 'float',
1230
- description: 'Total',
1231
- example: 4
1232
- },
1233
- {
1234
- type: 'string',
1235
- enum: ['']
1236
- }
1237
- ]
3384
+ type: 'number',
3385
+ format: 'float',
3386
+ description: 'Total cost'
1238
3387
  }
1239
3388
  },
1240
- required: ['cluster_id', 'cluster_tier', 'product', 'node_name', 'sku', 'cpu', 'price', 'value', 'total'],
3389
+ required: [
3390
+ 'hour',
3391
+ 'cluster_id',
3392
+ 'product',
3393
+ 'value',
3394
+ 'price',
3395
+ 'total'
3396
+ ],
1241
3397
  additionalProperties: false
1242
3398
  };
1243
3399
  export const UserCreateInputSchema = {
@@ -1278,16 +3434,28 @@ export const UserCreateInputSchema = {
1278
3434
  type: 'string',
1279
3435
  description: 'Status of the user. Can be `active` or `inactive`. Inactive users cannot log in or manage organization resources.',
1280
3436
  example: 'active',
1281
- enum: ['active', 'inactive']
3437
+ enum: [
3438
+ 'active',
3439
+ 'inactive'
3440
+ ]
1282
3441
  },
1283
3442
  role: {
1284
3443
  type: 'string',
1285
- description: "User role. Can be 'Administrator', 'User'.",
3444
+ description: 'User role. Can be \'Administrator\', \'User\'.',
1286
3445
  example: 'User',
1287
- enum: ['Administrator', 'User']
3446
+ enum: [
3447
+ 'Administrator',
3448
+ 'User'
3449
+ ]
1288
3450
  }
1289
3451
  },
1290
- required: ['email', 'first_name', 'last_name', 'code', 'password'],
3452
+ required: [
3453
+ 'email',
3454
+ 'first_name',
3455
+ 'last_name',
3456
+ 'code',
3457
+ 'password'
3458
+ ],
1291
3459
  additionalProperties: false
1292
3460
  };
1293
3461
  export const UserSchema = {
@@ -1315,15 +3483,21 @@ export const UserSchema = {
1315
3483
  },
1316
3484
  role: {
1317
3485
  type: 'string',
1318
- description: "User role. Can be 'Administrator', 'User'.",
3486
+ description: 'User role. Can be \'Administrator\', \'User\'.',
1319
3487
  example: 'User',
1320
- enum: ['Administrator', 'User']
3488
+ enum: [
3489
+ 'Administrator',
3490
+ 'User'
3491
+ ]
1321
3492
  },
1322
3493
  status: {
1323
3494
  type: 'string',
1324
3495
  description: 'Status of the user. Can be `active` or `inactive`. Inactive users cannot log in or manage organization resources.',
1325
3496
  example: 'active',
1326
- enum: ['active', 'inactive']
3497
+ enum: [
3498
+ 'active',
3499
+ 'inactive'
3500
+ ]
1327
3501
  },
1328
3502
  id: {
1329
3503
  type: 'string',
@@ -1338,7 +3512,15 @@ export const UserSchema = {
1338
3512
  example: '2023-11-02T16:08:14.338Z'
1339
3513
  }
1340
3514
  },
1341
- required: ['email', 'first_name', 'last_name', 'role', 'status', 'id', 'date_created'],
3515
+ required: [
3516
+ 'email',
3517
+ 'first_name',
3518
+ 'last_name',
3519
+ 'role',
3520
+ 'status',
3521
+ 'id',
3522
+ 'date_created'
3523
+ ],
1342
3524
  additionalProperties: false
1343
3525
  };
1344
3526
  export const UserUpdateInputSchema = {
@@ -1366,15 +3548,21 @@ export const UserUpdateInputSchema = {
1366
3548
  },
1367
3549
  role: {
1368
3550
  type: 'string',
1369
- description: "User role. Can be 'Administrator', 'User'.",
3551
+ description: 'User role. Can be \'Administrator\', \'User\'.',
1370
3552
  example: 'User',
1371
- enum: ['Administrator', 'User']
3553
+ enum: [
3554
+ 'Administrator',
3555
+ 'User'
3556
+ ]
1372
3557
  },
1373
3558
  status: {
1374
3559
  type: 'string',
1375
3560
  description: 'Status of the user. Can be `active` or `inactive`. Inactive users cannot log in or manage organization resources.',
1376
3561
  example: 'active',
1377
- enum: ['active', 'inactive']
3562
+ enum: [
3563
+ 'active',
3564
+ 'inactive'
3565
+ ]
1378
3566
  }
1379
3567
  },
1380
3568
  additionalProperties: false