@cloudfleet/sdk 0.0.1-42b710c → 0.0.1-43887de

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 (88) hide show
  1. package/README.md +26 -2
  2. package/dist/@tanstack/react-query.gen.d.ts +1084 -0
  3. package/dist/@tanstack/react-query.gen.d.ts.map +1 -0
  4. package/dist/@tanstack/react-query.gen.js +1305 -0
  5. package/dist/@tanstack/react-query.gen.js.map +1 -0
  6. package/dist/client/client.gen.d.ts +3 -0
  7. package/dist/client/client.gen.d.ts.map +1 -0
  8. package/dist/client/client.gen.js +217 -0
  9. package/dist/client/client.gen.js.map +1 -0
  10. package/dist/client/index.d.ts +9 -0
  11. package/dist/client/index.d.ts.map +1 -0
  12. package/dist/client/index.js +7 -0
  13. package/dist/client/index.js.map +1 -0
  14. package/dist/client/types.gen.d.ts +121 -0
  15. package/dist/client/types.gen.d.ts.map +1 -0
  16. package/dist/client/types.gen.js +3 -0
  17. package/dist/client/types.gen.js.map +1 -0
  18. package/dist/client/utils.gen.d.ts +38 -0
  19. package/dist/client/utils.gen.d.ts.map +1 -0
  20. package/dist/client/utils.gen.js +229 -0
  21. package/dist/client/utils.gen.js.map +1 -0
  22. package/dist/client.gen.d.ts +4 -4
  23. package/dist/client.gen.d.ts.map +1 -1
  24. package/dist/client.gen.js +2 -4
  25. package/dist/client.gen.js.map +1 -1
  26. package/dist/core/auth.gen.d.ts +19 -0
  27. package/dist/core/auth.gen.d.ts.map +1 -0
  28. package/dist/core/auth.gen.js +15 -0
  29. package/dist/core/auth.gen.js.map +1 -0
  30. package/dist/core/bodySerializer.gen.d.ts +26 -0
  31. package/dist/core/bodySerializer.gen.d.ts.map +1 -0
  32. package/dist/core/bodySerializer.gen.js +58 -0
  33. package/dist/core/bodySerializer.gen.js.map +1 -0
  34. package/dist/core/params.gen.d.ts +44 -0
  35. package/dist/core/params.gen.d.ts.map +1 -0
  36. package/dist/core/params.gen.js +101 -0
  37. package/dist/core/params.gen.js.map +1 -0
  38. package/dist/core/pathSerializer.gen.d.ts +34 -0
  39. package/dist/core/pathSerializer.gen.d.ts.map +1 -0
  40. package/dist/core/pathSerializer.gen.js +107 -0
  41. package/dist/core/pathSerializer.gen.js.map +1 -0
  42. package/dist/core/queryKeySerializer.gen.d.ts +19 -0
  43. package/dist/core/queryKeySerializer.gen.d.ts.map +1 -0
  44. package/dist/core/queryKeySerializer.gen.js +93 -0
  45. package/dist/core/queryKeySerializer.gen.js.map +1 -0
  46. package/dist/core/serverSentEvents.gen.d.ts +72 -0
  47. package/dist/core/serverSentEvents.gen.d.ts.map +1 -0
  48. package/dist/core/serverSentEvents.gen.js +133 -0
  49. package/dist/core/serverSentEvents.gen.js.map +1 -0
  50. package/dist/core/types.gen.d.ts +79 -0
  51. package/dist/core/types.gen.d.ts.map +1 -0
  52. package/dist/core/types.gen.js +3 -0
  53. package/dist/core/types.gen.js.map +1 -0
  54. package/dist/core/utils.gen.d.ts +20 -0
  55. package/dist/core/utils.gen.d.ts.map +1 -0
  56. package/dist/core/utils.gen.js +88 -0
  57. package/dist/core/utils.gen.js.map +1 -0
  58. package/dist/index.d.ts +2 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +2 -0
  61. package/dist/index.js.map +1 -1
  62. package/dist/schemas.gen.d.ts +2172 -710
  63. package/dist/schemas.gen.d.ts.map +1 -1
  64. package/dist/schemas.gen.js +3577 -733
  65. package/dist/schemas.gen.js.map +1 -1
  66. package/dist/sdk.gen.d.ts +375 -142
  67. package/dist/sdk.gen.d.ts.map +1 -1
  68. package/dist/sdk.gen.js +536 -271
  69. package/dist/sdk.gen.js.map +1 -1
  70. package/dist/services/kubernetes/api.d.ts +196 -0
  71. package/dist/services/kubernetes/api.d.ts.map +1 -0
  72. package/dist/services/kubernetes/api.js +140 -0
  73. package/dist/services/kubernetes/api.js.map +1 -0
  74. package/dist/services/kubernetes/index.d.ts +44 -0
  75. package/dist/services/kubernetes/index.d.ts.map +1 -0
  76. package/dist/services/kubernetes/index.js +68 -0
  77. package/dist/services/kubernetes/index.js.map +1 -0
  78. package/dist/services/kubernetes/types.d.ts +1335 -0
  79. package/dist/services/kubernetes/types.d.ts.map +1 -0
  80. package/dist/services/kubernetes/types.js +2 -0
  81. package/dist/services/kubernetes/types.js.map +1 -0
  82. package/dist/types.gen.d.ts +2288 -727
  83. package/dist/types.gen.d.ts.map +1 -1
  84. package/dist/zod.gen.d.ts +4266 -2192
  85. package/dist/zod.gen.d.ts.map +1 -1
  86. package/dist/zod.gen.js +1853 -813
  87. package/dist/zod.gen.js.map +1 -1
  88. package/package.json +30 -7
@@ -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,
@@ -58,18 +67,374 @@ export const BillingContactSchema = {
58
67
  description: 'Email address used for billing as a string.',
59
68
  example: 'email@example.com'
60
69
  },
61
- first_name: {
70
+ individual_name: {
62
71
  type: 'string',
63
- description: 'First name of the billing contact person.',
64
- example: 'John'
72
+ description: 'Name of the billing contact person.',
73
+ example: 'John Doe'
65
74
  },
66
- last_name: {
75
+ tax_id: {
67
76
  type: 'string',
68
- description: 'Last name of the billing contact person.',
69
- example: 'Doe'
77
+ nullable: true,
78
+ description: 'Tax ID of the organization.',
79
+ example: 'DE123456789'
80
+ },
81
+ tax_id_type: {
82
+ type: 'string',
83
+ nullable: true,
84
+ description: 'Type of the tax ID.',
85
+ example: 'de_vat',
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
+ 'aw_tin',
97
+ 'az_tin',
98
+ 'ba_tin',
99
+ 'bb_tin',
100
+ 'bd_bin',
101
+ 'be_vat',
102
+ 'bf_ifu',
103
+ 'bg_uic',
104
+ 'bg_vat',
105
+ 'bh_vat',
106
+ 'bj_ifu',
107
+ 'bo_tin',
108
+ 'br_cnpj',
109
+ 'br_cpf',
110
+ 'bs_tin',
111
+ 'by_tin',
112
+ 'ca_bn',
113
+ 'ca_gst_hst',
114
+ 'ca_pst_bc',
115
+ 'ca_pst_mb',
116
+ 'ca_pst_sk',
117
+ 'ca_qst',
118
+ 'cd_nif',
119
+ 'ch_uid',
120
+ 'ch_vat',
121
+ 'cl_tin',
122
+ 'cm_niu',
123
+ 'cn_tin',
124
+ 'co_nit',
125
+ 'cr_tin',
126
+ 'cv_nif',
127
+ 'cy_vat',
128
+ 'cz_vat',
129
+ 'de_stn',
130
+ 'de_vat',
131
+ 'dk_vat',
132
+ 'do_rcn',
133
+ 'ec_ruc',
134
+ 'ee_vat',
135
+ 'eg_tin',
136
+ 'es_cif',
137
+ 'es_vat',
138
+ 'et_tin',
139
+ 'eu_oss_vat',
140
+ 'fi_vat',
141
+ 'fr_vat',
142
+ 'gb_vat',
143
+ 'ge_vat',
144
+ 'gn_nif',
145
+ 'gr_vat',
146
+ 'hk_br',
147
+ 'hr_oib',
148
+ 'hr_vat',
149
+ 'hu_tin',
150
+ 'hu_vat',
151
+ 'id_npwp',
152
+ 'ie_vat',
153
+ 'il_vat',
154
+ 'in_gst',
155
+ 'is_vat',
156
+ 'it_vat',
157
+ 'jp_cn',
158
+ 'jp_rn',
159
+ 'jp_trn',
160
+ 'ke_pin',
161
+ 'kg_tin',
162
+ 'kh_tin',
163
+ 'kr_brn',
164
+ 'kz_bin',
165
+ 'la_tin',
166
+ 'li_uid',
167
+ 'li_vat',
168
+ 'lk_vat',
169
+ 'lt_vat',
170
+ 'lu_vat',
171
+ 'lv_vat',
172
+ 'ma_vat',
173
+ 'md_vat',
174
+ 'me_pib',
175
+ 'mk_vat',
176
+ 'mr_nif',
177
+ 'mt_vat',
178
+ 'mx_rfc',
179
+ 'my_frp',
180
+ 'my_itn',
181
+ 'my_sst',
182
+ 'ng_tin',
183
+ 'nl_vat',
184
+ 'no_vat',
185
+ 'no_voec',
186
+ 'np_pan',
187
+ 'nz_gst',
188
+ 'om_vat',
189
+ 'pe_ruc',
190
+ 'ph_tin',
191
+ 'pl_vat',
192
+ 'pt_vat',
193
+ 'ro_tin',
194
+ 'ro_vat',
195
+ 'rs_pib',
196
+ 'ru_inn',
197
+ 'ru_kpp',
198
+ 'sa_vat',
199
+ 'se_vat',
200
+ 'sg_gst',
201
+ 'sg_uen',
202
+ 'si_tin',
203
+ 'si_vat',
204
+ 'sk_vat',
205
+ 'sn_ninea',
206
+ 'sr_fin',
207
+ 'sv_nit',
208
+ 'th_vat',
209
+ 'tj_tin',
210
+ 'tr_tin',
211
+ 'tw_vat',
212
+ 'tz_vat',
213
+ 'ua_vat',
214
+ 'ug_tin',
215
+ 'us_ein',
216
+ 'uy_ruc',
217
+ 'uz_tin',
218
+ 'uz_vat',
219
+ 've_rif',
220
+ 'vn_tin',
221
+ 'xi_vat',
222
+ 'za_vat',
223
+ 'zm_tin',
224
+ 'zw_tin',
225
+ ''
226
+ ]
227
+ }
228
+ },
229
+ required: [
230
+ 'type',
231
+ 'email',
232
+ 'individual_name'
233
+ ],
234
+ additionalProperties: false
235
+ };
236
+ export const BillingCreditsSchema = {
237
+ type: 'object',
238
+ properties: {
239
+ id: {
240
+ type: 'string',
241
+ description: 'Generated unique identifier of the promotional code.',
242
+ example: '7kUZnH7nnKUFfvc4NK2KQF'
243
+ },
244
+ type: {
245
+ type: 'string',
246
+ description: 'Type of the promotional code.',
247
+ example: 'credit',
248
+ enum: [
249
+ 'credit',
250
+ 'discount'
251
+ ]
252
+ },
253
+ date_start: {
254
+ type: 'string',
255
+ format: 'date-time',
256
+ description: 'Timestamp when the credit becomes active. ISO 8601 date string in the UTC timezone.',
257
+ example: '2023-12-20T13:53:32.000Z'
258
+ },
259
+ date_end: {
260
+ type: 'string',
261
+ format: 'date-time',
262
+ description: 'Timestamp when the credit expires or becomes inactive. ISO 8601 date string in the UTC timezone.',
263
+ example: '2023-12-20T13:53:32.000Z'
264
+ },
265
+ code: {
266
+ type: 'string',
267
+ description: 'Promotional code used by the customer.',
268
+ example: 'VQ4SCMB'
269
+ },
270
+ description: {
271
+ type: 'string',
272
+ description: 'Description of the promotional code.',
273
+ example: '10% off on all products'
274
+ },
275
+ value_total: {
276
+ type: 'number',
277
+ format: 'float',
278
+ description: 'Total value of the promotional code.',
279
+ example: 10
280
+ },
281
+ value_remaining: {
282
+ type: 'number',
283
+ format: 'float',
284
+ description: 'Remaining value of the promotional code.',
285
+ example: 8
286
+ }
287
+ },
288
+ required: [
289
+ 'type',
290
+ 'date_start',
291
+ 'code',
292
+ 'value_total'
293
+ ],
294
+ additionalProperties: false
295
+ };
296
+ export const ChartCreateInputSchema = {
297
+ type: 'object',
298
+ properties: {
299
+ values: {
300
+ type: 'string',
301
+ description: 'Values to be used in the chart encoded as a JSON string.'
302
+ },
303
+ version_channel: {
304
+ type: 'string',
305
+ 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-]+)*))?$',
306
+ description: 'Desired version range or channel for the chart.',
307
+ example: '2.x.x-cfke.x'
308
+ },
309
+ name: {
310
+ type: 'string',
311
+ maxLength: 63,
312
+ minLength: 1,
313
+ pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
314
+ description: 'Unique identifier of the chart deployment aka name of the helm release.',
315
+ example: 'postgresql-0'
316
+ },
317
+ namespace: {
318
+ type: 'string',
319
+ maxLength: 63,
320
+ minLength: 1,
321
+ pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
322
+ description: 'Namespace of the chart deployment',
323
+ example: 'default'
324
+ },
325
+ chart: {
326
+ type: 'string',
327
+ maxLength: 63,
328
+ minLength: 1,
329
+ pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
330
+ description: 'Name of the chart listing',
331
+ example: 'postgresql'
332
+ }
333
+ },
334
+ required: [
335
+ 'values',
336
+ 'version_channel',
337
+ 'name',
338
+ 'namespace',
339
+ 'chart'
340
+ ],
341
+ additionalProperties: false
342
+ };
343
+ export const ChartSchema = {
344
+ type: 'object',
345
+ properties: {
346
+ values: {
347
+ type: 'string',
348
+ description: 'Values to be used in the chart encoded as a JSON string.'
349
+ },
350
+ version_channel: {
351
+ type: 'string',
352
+ 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-]+)*))?$',
353
+ description: 'Desired version range or channel for the chart.',
354
+ example: '2.x.x-cfke.x'
355
+ },
356
+ name: {
357
+ type: 'string',
358
+ maxLength: 63,
359
+ minLength: 1,
360
+ pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
361
+ description: 'Unique identifier of the chart deployment aka name of the helm release.',
362
+ example: 'postgresql-0'
363
+ },
364
+ namespace: {
365
+ type: 'string',
366
+ maxLength: 63,
367
+ minLength: 1,
368
+ pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
369
+ description: 'Namespace of the chart deployment',
370
+ example: 'default'
371
+ },
372
+ chart: {
373
+ type: 'string',
374
+ maxLength: 63,
375
+ minLength: 1,
376
+ pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
377
+ description: 'Name of the chart listing',
378
+ example: 'postgresql'
379
+ },
380
+ status: {
381
+ type: 'string',
382
+ description: 'Status of the chart deployment (Flux HelmRelease Ready condition reason, e.g. InstallSucceeded, UpgradeFailed, Progressing).',
383
+ example: 'InstallSucceeded'
384
+ },
385
+ version_current: {
386
+ type: 'string',
387
+ description: 'Current version of the chart deployment.',
388
+ example: '2.1.33-cfke.11'
389
+ },
390
+ created_at: {
391
+ type: 'string',
392
+ description: 'Creation date and time of the chart deployment.',
393
+ example: '2024-09-12T09:11:27Z'
394
+ },
395
+ updated_at: {
396
+ type: 'string',
397
+ description: 'Last update date and time of the chart deployment.',
398
+ example: '2024-09-12T09:11:27Z'
399
+ },
400
+ ready: {
401
+ type: 'boolean',
402
+ description: 'Indicates if the chart deployment is ready to be used.',
403
+ example: true
404
+ }
405
+ },
406
+ required: [
407
+ 'values',
408
+ 'version_channel',
409
+ 'name',
410
+ 'namespace',
411
+ 'chart',
412
+ 'status',
413
+ 'version_current',
414
+ 'created_at',
415
+ 'updated_at',
416
+ 'ready'
417
+ ],
418
+ additionalProperties: false
419
+ };
420
+ export const ChartUpdateInputSchema = {
421
+ type: 'object',
422
+ properties: {
423
+ values: {
424
+ type: 'string',
425
+ description: 'Values to be used in the chart encoded as a JSON string.'
426
+ },
427
+ version_channel: {
428
+ type: 'string',
429
+ 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-]+)*))?$',
430
+ description: 'Desired version range or channel for the chart.',
431
+ example: '2.x.x-cfke.x'
70
432
  }
71
433
  },
72
- required: ['email', 'first_name', 'last_name'],
434
+ required: [
435
+ 'values',
436
+ 'version_channel'
437
+ ],
73
438
  additionalProperties: false
74
439
  };
75
440
  export const ClusterCreateInputSchema = {
@@ -83,29 +448,121 @@ export const ClusterCreateInputSchema = {
83
448
  description: 'Name of the cluster.',
84
449
  example: 'production-cluster'
85
450
  },
86
- region: {
87
- type: 'string',
88
- description: 'Cloudfleet control plane region. One of "staging", "northamerica-central-1". This field can not be updated after creation.',
89
- default: 'staging',
90
- example: 'northamerica-central-1',
91
- enum: ['staging', 'northamerica-central-1']
92
- },
93
451
  tier: {
94
452
  type: 'string',
95
453
  description: 'Tier of the cluster.',
454
+ default: 'basic',
96
455
  example: 'pro',
97
- enum: ['basic', 'pro']
456
+ enum: [
457
+ 'basic',
458
+ 'pro',
459
+ 'enterprise'
460
+ ]
98
461
  },
99
462
  version_channel: {
100
463
  type: 'string',
101
464
  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-]+)*))?$',
102
465
  description: 'Version of the kubernetes cluster.',
103
466
  default: '1.x.x-cfke.x',
104
- example: '1.29.x-cfke.x'
467
+ example: '1.x.x-cfke.x'
468
+ },
469
+ release_channel: {
470
+ type: 'string',
471
+ description: 'Release channel for the cluster\'s control plane.',
472
+ default: 'rapid',
473
+ example: 'rapid',
474
+ enum: [
475
+ 'rapid',
476
+ 'stable',
477
+ 'extended'
478
+ ]
479
+ },
480
+ features: {
481
+ type: 'object',
482
+ properties: {
483
+ gpu_sharing_strategy: {
484
+ type: 'string',
485
+ description: 'GPU sharing strategy.',
486
+ default: 'none',
487
+ example: 'none',
488
+ enum: [
489
+ 'none',
490
+ 'mps',
491
+ 'time_slicing'
492
+ ]
493
+ },
494
+ gpu_max_shared_clients_per_gpu: {
495
+ type: 'integer',
496
+ minimum: 2,
497
+ maximum: 48,
498
+ description: 'Maximum number of pods that may share a single GPU.',
499
+ default: 4,
500
+ example: 10
501
+ },
502
+ cilium_socket_lb_host_namespace_only: {
503
+ type: 'boolean',
504
+ description: 'Restrict Cilium socket load-balancing to the host namespace. Required for the Tailscale operator and Istio.',
505
+ example: false
506
+ }
507
+ },
508
+ additionalProperties: false,
509
+ description: 'Cluster feature toggles.',
510
+ default: {
511
+ gpu_sharing_strategy: 'none',
512
+ gpu_max_shared_clients_per_gpu: 4,
513
+ cilium_socket_lb_host_namespace_only: false
514
+ }
515
+ },
516
+ region: {
517
+ type: 'string',
518
+ description: 'Cloudfleet control plane region. This field can not be updated after creation.',
519
+ example: 'europe-central-1a'
520
+ },
521
+ networking: {
522
+ type: 'object',
523
+ properties: {
524
+ pod_cidr: {
525
+ type: 'string',
526
+ description: 'CIDR block for pod IPs.',
527
+ default: '10.244.0.0/16'
528
+ },
529
+ service_cidr: {
530
+ type: 'string',
531
+ description: 'CIDR block for service IPs.',
532
+ default: '10.96.0.0/12'
533
+ },
534
+ dual_stack: {
535
+ type: 'boolean',
536
+ description: 'Enable IPv4+IPv6 dual-stack networking.'
537
+ },
538
+ pod_cidr_v6: {
539
+ type: 'string',
540
+ description: 'IPv6 pod CIDR. Requires dual_stack.',
541
+ default: '2001:db8:1:2::/48'
542
+ },
543
+ service_cidr_v6: {
544
+ type: 'string',
545
+ description: 'IPv6 service CIDR. Requires dual_stack.',
546
+ default: '2001:db8:1:1::/112'
547
+ }
548
+ },
549
+ additionalProperties: false,
550
+ description: 'Cluster networking configuration. Immutable after creation.',
551
+ default: {
552
+ pod_cidr: '10.244.0.0/16',
553
+ service_cidr: '10.96.0.0/12',
554
+ dual_stack: false,
555
+ pod_cidr_v6: '2001:db8:1:2::/48',
556
+ service_cidr_v6: '2001:db8:1:1::/112'
557
+ }
105
558
  }
106
559
  },
107
- required: ['name', 'tier'],
108
- additionalProperties: false
560
+ required: [
561
+ 'name',
562
+ 'region'
563
+ ],
564
+ additionalProperties: false,
565
+ description: 'Mutable cluster configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
109
566
  };
110
567
  export const ClusterJoinInformationSchema = {
111
568
  type: 'object',
@@ -113,8 +570,7 @@ export const ClusterJoinInformationSchema = {
113
570
  certificate_authority: {
114
571
  type: 'string',
115
572
  description: 'Certificate authority data for the kubernetes cluster. This is the root certificate authority for the cluster.',
116
- example: `-----BEGIN CERTIFICATE-----
117
- MIIC0DCCAbigAwIBAgI...`
573
+ example: '-----BEGIN CERTIFICATE-----\nMIIC0DCCAbigAwIBAgI...'
118
574
  },
119
575
  endpoint: {
120
576
  type: 'string',
@@ -122,11 +578,26 @@ MIIC0DCCAbigAwIBAgI...`
122
578
  description: 'Internal URL of the Kubernetes cluster control plane. This is the endpoint that kubelet uses to connect to the cluster.',
123
579
  example: 'https://10.31.64.7:6443'
124
580
  },
581
+ cluster_dns: {
582
+ type: 'string',
583
+ description: 'Cluster DNS IP address. This is the IP address of the kube-dns service in the cluster.',
584
+ example: '10.96.0.10'
585
+ },
586
+ pod_cidr: {
587
+ type: 'string',
588
+ description: 'Pod CIDR for the cluster. Used to configure iptables rules on nodes to prevent Tailscale routing loops.',
589
+ example: '10.244.0.0/16'
590
+ },
125
591
  auth_key: {
126
592
  type: 'string',
127
593
  description: 'Authentication key for the cluster.',
128
594
  example: 'tskey-auth-kBV8wr1dk911CNTRL-...'
129
595
  },
596
+ login_server: {
597
+ type: 'string',
598
+ description: 'Coordination server the node registers against. Empty on data plane v1 clusters, where the node advertises its own tag instead. A non-empty value requires a client that declares the dataplane-v2 capability.',
599
+ example: 'https://415026b6-f00f-44f8-968d-fc6ef4d0fc6d.fabric.europe-central-1a.cfke.io'
600
+ },
130
601
  bootstrap_token: {
131
602
  type: 'string',
132
603
  description: 'Bootstrap token for the cluster.',
@@ -138,7 +609,7 @@ MIIC0DCCAbigAwIBAgI...`
138
609
  kubernetes: {
139
610
  type: 'string',
140
611
  description: 'Kubernetes version of the cluster.',
141
- example: '1.29.3'
612
+ example: '1.33.7'
142
613
  },
143
614
  tailscale: {
144
615
  type: 'string',
@@ -149,9 +620,19 @@ MIIC0DCCAbigAwIBAgI...`
149
620
  type: 'string',
150
621
  description: 'Containerd version of the cluster.',
151
622
  example: '1.7.19'
623
+ },
624
+ nvidia_driver: {
625
+ type: 'string',
626
+ description: 'NVIDIA driver version of the cluster.',
627
+ example: '565.0.0'
152
628
  }
153
629
  },
154
- required: ['kubernetes', 'tailscale', 'containerd'],
630
+ required: [
631
+ 'kubernetes',
632
+ 'tailscale',
633
+ 'containerd',
634
+ 'nvidia_driver'
635
+ ],
155
636
  additionalProperties: false,
156
637
  description: 'Versions of the different components of the cluster.'
157
638
  },
@@ -174,12 +655,26 @@ MIIC0DCCAbigAwIBAgI...`
174
655
  example: '//iam.googleapis.com/projects/89014267864/locations/global/workloadIdentityPools/cfke/providers/oidc'
175
656
  }
176
657
  },
177
- required: ['metadata_url', 'aws_role_arn', 'gcp_workload_identity_provider'],
658
+ required: [
659
+ 'metadata_url',
660
+ 'aws_role_arn',
661
+ 'gcp_workload_identity_provider'
662
+ ],
178
663
  additionalProperties: false,
179
- description: "OIDC Information for hosts to access to third party API's."
664
+ description: 'OIDC Information for hosts to access to third party API\'s.'
180
665
  }
181
666
  },
182
- required: ['certificate_authority', 'endpoint', 'auth_key', 'bootstrap_token', 'versions', 'third_party_api_access_config'],
667
+ required: [
668
+ 'certificate_authority',
669
+ 'endpoint',
670
+ 'cluster_dns',
671
+ 'pod_cidr',
672
+ 'auth_key',
673
+ 'login_server',
674
+ 'bootstrap_token',
675
+ 'versions',
676
+ 'third_party_api_access_config'
677
+ ],
183
678
  additionalProperties: false
184
679
  };
185
680
  export const ClusterSchema = {
@@ -193,25 +688,125 @@ export const ClusterSchema = {
193
688
  description: 'Name of the cluster.',
194
689
  example: 'production-cluster'
195
690
  },
196
- region: {
197
- type: 'string',
198
- description: 'Cloudfleet control plane region. One of "staging", "northamerica-central-1". This field can not be updated after creation.',
199
- default: 'staging',
200
- example: 'northamerica-central-1',
201
- enum: ['staging', 'northamerica-central-1']
202
- },
203
691
  tier: {
204
692
  type: 'string',
205
693
  description: 'Tier of the cluster.',
694
+ default: 'basic',
206
695
  example: 'pro',
207
- enum: ['basic', 'pro']
696
+ enum: [
697
+ 'basic',
698
+ 'pro',
699
+ 'enterprise'
700
+ ]
208
701
  },
209
702
  version_channel: {
210
703
  type: 'string',
211
704
  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-]+)*))?$',
212
705
  description: 'Version of the kubernetes cluster.',
213
706
  default: '1.x.x-cfke.x',
214
- example: '1.29.x-cfke.x'
707
+ example: '1.x.x-cfke.x'
708
+ },
709
+ release_channel: {
710
+ type: 'string',
711
+ description: 'Release channel for the cluster\'s control plane.',
712
+ default: 'rapid',
713
+ example: 'rapid',
714
+ enum: [
715
+ 'rapid',
716
+ 'stable',
717
+ 'extended'
718
+ ]
719
+ },
720
+ features: {
721
+ type: 'object',
722
+ properties: {
723
+ gpu_sharing_strategy: {
724
+ type: 'string',
725
+ description: 'GPU sharing strategy.',
726
+ default: 'none',
727
+ example: 'none',
728
+ enum: [
729
+ 'none',
730
+ 'mps',
731
+ 'time_slicing'
732
+ ]
733
+ },
734
+ gpu_max_shared_clients_per_gpu: {
735
+ type: 'integer',
736
+ minimum: 2,
737
+ maximum: 48,
738
+ description: 'Maximum number of pods that may share a single GPU.',
739
+ default: 4,
740
+ example: 10
741
+ },
742
+ cilium_socket_lb_host_namespace_only: {
743
+ type: 'boolean',
744
+ description: 'Restrict Cilium socket load-balancing to the host namespace. Required for the Tailscale operator and Istio.',
745
+ example: false
746
+ }
747
+ },
748
+ required: [
749
+ 'gpu_sharing_strategy',
750
+ 'gpu_max_shared_clients_per_gpu',
751
+ 'cilium_socket_lb_host_namespace_only'
752
+ ],
753
+ additionalProperties: false,
754
+ description: 'Cluster feature toggles.',
755
+ default: {
756
+ gpu_sharing_strategy: 'none',
757
+ gpu_max_shared_clients_per_gpu: 4,
758
+ cilium_socket_lb_host_namespace_only: false
759
+ }
760
+ },
761
+ region: {
762
+ type: 'string',
763
+ description: 'Cloudfleet control plane region. This field can not be updated after creation.',
764
+ example: 'europe-central-1a'
765
+ },
766
+ networking: {
767
+ type: 'object',
768
+ properties: {
769
+ pod_cidr: {
770
+ type: 'string',
771
+ description: 'CIDR block for pod IPs.',
772
+ default: '10.244.0.0/16'
773
+ },
774
+ service_cidr: {
775
+ type: 'string',
776
+ description: 'CIDR block for service IPs.',
777
+ default: '10.96.0.0/12'
778
+ },
779
+ dual_stack: {
780
+ type: 'boolean',
781
+ description: 'Enable IPv4+IPv6 dual-stack networking.'
782
+ },
783
+ pod_cidr_v6: {
784
+ type: 'string',
785
+ description: 'IPv6 pod CIDR. Requires dual_stack.',
786
+ default: '2001:db8:1:2::/48'
787
+ },
788
+ service_cidr_v6: {
789
+ type: 'string',
790
+ description: 'IPv6 service CIDR. Requires dual_stack.',
791
+ default: '2001:db8:1:1::/112'
792
+ }
793
+ },
794
+ required: [
795
+ 'pod_cidr',
796
+ 'service_cidr',
797
+ 'dual_stack',
798
+ 'pod_cidr_v6',
799
+ 'service_cidr_v6'
800
+ ],
801
+ additionalProperties: false,
802
+ description: 'Cluster networking configuration. Immutable after creation.',
803
+ default: {
804
+ pod_cidr: '10.244.0.0/16',
805
+ service_cidr: '10.96.0.0/12',
806
+ dual_stack: false,
807
+ pod_cidr_v6: '2001:db8:1:2::/48',
808
+ service_cidr_v6: '2001:db8:1:1::/112'
809
+ }
215
810
  },
216
811
  id: {
217
812
  type: 'string',
@@ -221,34 +816,56 @@ export const ClusterSchema = {
221
816
  },
222
817
  status: {
223
818
  type: 'string',
224
- description: 'Status of the cluster. When creating a new cluster, set to `active`. When deleting a clusters, set to `deleted`.',
225
- example: 'active',
226
- enum: ['active', 'deleted', 'creating', 'deployed', 'failed', 'updating']
819
+ description: 'Status of the cluster.',
820
+ example: 'deployed',
821
+ enum: [
822
+ 'creating',
823
+ 'deployed',
824
+ 'updating',
825
+ 'disabled'
826
+ ]
227
827
  },
228
828
  endpoint: {
229
829
  anyOf: [
230
830
  {
231
831
  type: 'string',
232
832
  format: 'uri',
233
- description: 'URL of the Kubernetes cluster control plane. This is the endpoint that kubectl uses to connect to the cluster.',
234
- example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.cloudfleet.dev:6443'
833
+ 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.',
834
+ example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.io'
835
+ },
836
+ {
837
+ type: 'string',
838
+ enum: [
839
+ ''
840
+ ]
841
+ }
842
+ ]
843
+ },
844
+ endpoint_public: {
845
+ anyOf: [
846
+ {
847
+ type: 'string',
848
+ format: 'uri',
849
+ description: 'Deprecated alias of `endpoint`; retained for backward compatibility.',
850
+ example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.io'
235
851
  },
236
852
  {
237
853
  type: 'string',
238
- enum: ['']
854
+ enum: [
855
+ ''
856
+ ]
239
857
  }
240
858
  ]
241
859
  },
242
860
  certificate_ca: {
243
861
  type: 'string',
244
862
  description: 'Certificate authority data for the kubernetes cluster. This is the root certificate authority for the cluster.',
245
- example: `-----BEGIN CERTIFICATE-----
246
- MIIC0DCCAbigAwIBAgI...`
863
+ example: '-----BEGIN CERTIFICATE-----\nMIIC0DCCAbigAwIBAgI...'
247
864
  },
248
865
  version_current: {
249
866
  type: 'string',
250
867
  description: 'Current version of the cluster.',
251
- example: '1.29.3-cfke.52'
868
+ example: '1.33.7-cfke.264'
252
869
  },
253
870
  created_at: {
254
871
  type: 'string',
@@ -266,8 +883,20 @@ MIIC0DCCAbigAwIBAgI...`
266
883
  example: true
267
884
  }
268
885
  },
269
- required: ['name', 'tier', 'id', 'status'],
270
- additionalProperties: false
886
+ required: [
887
+ 'name',
888
+ 'tier',
889
+ 'version_channel',
890
+ 'release_channel',
891
+ 'features',
892
+ 'region',
893
+ 'networking',
894
+ 'id',
895
+ 'status',
896
+ 'ready'
897
+ ],
898
+ additionalProperties: false,
899
+ description: 'Mutable cluster configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
271
900
  };
272
901
  export const ClusterUpdateInputSchema = {
273
902
  type: 'object',
@@ -280,29 +909,157 @@ export const ClusterUpdateInputSchema = {
280
909
  description: 'Name of the cluster.',
281
910
  example: 'production-cluster'
282
911
  },
912
+ tier: {
913
+ type: 'string',
914
+ description: 'Tier of the cluster.',
915
+ default: 'basic',
916
+ example: 'pro',
917
+ enum: [
918
+ 'basic',
919
+ 'pro',
920
+ 'enterprise'
921
+ ]
922
+ },
283
923
  version_channel: {
284
924
  type: 'string',
285
925
  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-]+)*))?$',
286
926
  description: 'Version of the kubernetes cluster.',
287
- example: '1.29.x-cfke.x'
288
- }
289
- },
290
- additionalProperties: false
291
- };
292
- export const FleetCreateInputSchema = {
293
- type: 'object',
294
- properties: {
295
- limits: {
927
+ default: '1.x.x-cfke.x',
928
+ example: '1.x.x-cfke.x'
929
+ },
930
+ release_channel: {
931
+ type: 'string',
932
+ description: 'Release channel for the cluster\'s control plane.',
933
+ default: 'rapid',
934
+ example: 'rapid',
935
+ enum: [
936
+ 'rapid',
937
+ 'stable',
938
+ 'extended'
939
+ ]
940
+ },
941
+ features: {
296
942
  type: 'object',
297
943
  properties: {
298
- cpu: {
299
- type: 'number',
300
- format: 'float',
301
- minimum: 0,
302
- description: 'CPU limit in cores.'
944
+ gpu_sharing_strategy: {
945
+ type: 'string',
946
+ description: 'GPU sharing strategy.',
947
+ default: 'none',
948
+ example: 'none',
949
+ enum: [
950
+ 'none',
951
+ 'mps',
952
+ 'time_slicing'
953
+ ]
954
+ },
955
+ gpu_max_shared_clients_per_gpu: {
956
+ type: 'integer',
957
+ minimum: 2,
958
+ maximum: 48,
959
+ description: 'Maximum number of pods that may share a single GPU.',
960
+ default: 4,
961
+ example: 10
962
+ },
963
+ cilium_socket_lb_host_namespace_only: {
964
+ type: 'boolean',
965
+ description: 'Restrict Cilium socket load-balancing to the host namespace. Required for the Tailscale operator and Istio.',
966
+ example: false
967
+ }
968
+ },
969
+ additionalProperties: false,
970
+ description: 'Cluster feature toggles.',
971
+ default: {
972
+ gpu_sharing_strategy: 'none',
973
+ gpu_max_shared_clients_per_gpu: 4,
974
+ cilium_socket_lb_host_namespace_only: false
975
+ }
976
+ }
977
+ },
978
+ required: [
979
+ 'name'
980
+ ],
981
+ additionalProperties: false,
982
+ description: 'Mutable cluster configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
983
+ };
984
+ export const FeedbackCreateInputSchema = {
985
+ type: 'object',
986
+ properties: {
987
+ sentiment: {
988
+ type: 'string',
989
+ description: 'Overall sentiment: positive, neutral or negative.',
990
+ example: 'negative',
991
+ enum: [
992
+ 'positive',
993
+ 'neutral',
994
+ 'negative'
995
+ ]
996
+ },
997
+ message: {
998
+ type: 'string',
999
+ maxLength: 2000,
1000
+ minLength: 1,
1001
+ description: 'What was useful, confusing, wrong or missing.',
1002
+ example: 'The error for a missing kubeconfig does not say which path it looked in.'
1003
+ },
1004
+ context: {
1005
+ type: 'string',
1006
+ maxLength: 2000,
1007
+ description: 'What you were trying to do when it happened.',
1008
+ example: 'Connecting kubectl to a new cluster.'
1009
+ },
1010
+ source: {
1011
+ type: 'string',
1012
+ description: 'Where the feedback was sent from: cli, mcp, plugin, console or api. Defaults to api.',
1013
+ default: 'api',
1014
+ example: 'cli',
1015
+ enum: [
1016
+ 'cli',
1017
+ 'mcp',
1018
+ 'plugin',
1019
+ 'console',
1020
+ 'api'
1021
+ ]
1022
+ },
1023
+ client: {
1024
+ type: 'string',
1025
+ maxLength: 100,
1026
+ description: 'Name and version of the sending client.',
1027
+ example: 'cloudfleet-plugin-claude/0.5.0'
1028
+ }
1029
+ },
1030
+ required: [
1031
+ 'sentiment',
1032
+ 'message'
1033
+ ],
1034
+ additionalProperties: false
1035
+ };
1036
+ export const FeedbackSchema = {
1037
+ type: 'object',
1038
+ properties: {
1039
+ id: {
1040
+ type: 'string',
1041
+ description: 'Unique identifier of the feedback entry (Mongo ObjectId).',
1042
+ example: '60c72b2f9f1b2c001f8e4d3a'
1043
+ }
1044
+ },
1045
+ required: [
1046
+ 'id'
1047
+ ],
1048
+ additionalProperties: false
1049
+ };
1050
+ export const FleetCreateInputSchema = {
1051
+ type: 'object',
1052
+ properties: {
1053
+ limits: {
1054
+ type: 'object',
1055
+ properties: {
1056
+ cpu: {
1057
+ type: 'integer',
1058
+ minimum: 0,
1059
+ maximum: 100000,
1060
+ description: 'CPU limit in cores. Maximum 100,000.'
303
1061
  }
304
1062
  },
305
- required: ['cpu'],
306
1063
  additionalProperties: false,
307
1064
  description: 'Limits define a set of bounds for provisioning capacity.'
308
1065
  },
@@ -310,62 +1067,396 @@ export const FleetCreateInputSchema = {
310
1067
  type: 'object',
311
1068
  properties: {
312
1069
  enabled: {
313
- type: 'boolean',
314
- default: true
1070
+ type: 'boolean'
315
1071
  },
316
1072
  project: {
317
1073
  type: 'string',
318
- description: 'Project GCP Project id to deploy instances into'
1074
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
1075
+ 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.',
1076
+ example: 'my-cloudfleet-project'
319
1077
  }
320
1078
  },
321
- required: ['project'],
1079
+ required: [
1080
+ 'enabled'
1081
+ ],
322
1082
  additionalProperties: false
323
1083
  },
324
1084
  hetzner: {
325
- oneOf: [
326
- {
327
- type: 'object',
328
- properties: {
329
- enabled: {
330
- type: 'boolean',
331
- default: true
332
- },
333
- apiKey: {
334
- type: 'string'
335
- }
336
- },
337
- additionalProperties: false
1085
+ type: 'object',
1086
+ properties: {
1087
+ enabled: {
1088
+ type: 'boolean'
338
1089
  },
339
- {
340
- type: 'object',
341
- properties: {
342
- apiKey: {
343
- type: 'string'
344
- },
345
- enabled: {
346
- type: 'boolean',
347
- default: true
348
- }
349
- },
350
- additionalProperties: false
1090
+ apiKey: {
1091
+ type: 'string',
1092
+ maxLength: 64,
1093
+ minLength: 64,
1094
+ pattern: '^([A-Za-z0-9]{64}|\\*{64})$',
1095
+ 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.'
351
1096
  }
352
- ]
1097
+ },
1098
+ required: [
1099
+ 'enabled'
1100
+ ],
1101
+ additionalProperties: false
353
1102
  },
354
1103
  aws: {
355
1104
  type: 'object',
356
1105
  properties: {
357
1106
  enabled: {
358
- type: 'boolean',
359
- default: true
1107
+ type: 'boolean'
360
1108
  },
361
1109
  controllerRoleArn: {
362
1110
  type: 'string',
363
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1111
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1112
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1113
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
364
1114
  }
365
1115
  },
366
- required: ['controllerRoleArn'],
1116
+ required: [
1117
+ 'enabled'
1118
+ ],
367
1119
  additionalProperties: false
368
1120
  },
1121
+ constraints: {
1122
+ type: 'object',
1123
+ properties: {
1124
+ 'karpenter.sh/capacity-type': {
1125
+ type: 'array',
1126
+ items: {
1127
+ type: 'string',
1128
+ enum: [
1129
+ 'on-demand',
1130
+ 'spot'
1131
+ ]
1132
+ },
1133
+ minItems: 1,
1134
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
1135
+ default: [
1136
+ 'on-demand',
1137
+ 'spot'
1138
+ ]
1139
+ },
1140
+ 'kubernetes.io/arch': {
1141
+ type: 'array',
1142
+ items: {
1143
+ type: 'string',
1144
+ enum: [
1145
+ 'amd64',
1146
+ 'arm64'
1147
+ ]
1148
+ },
1149
+ minItems: 1,
1150
+ description: 'Allowed values for `kubernetes.io/arch`.',
1151
+ default: [
1152
+ 'amd64'
1153
+ ]
1154
+ },
1155
+ 'cfke.io/instance-family': {
1156
+ type: 'array',
1157
+ items: {
1158
+ type: 'string',
1159
+ enum: [
1160
+ 'a1',
1161
+ 'a2',
1162
+ 'a3',
1163
+ 'a4',
1164
+ 'c1',
1165
+ 'c2',
1166
+ 'c2d',
1167
+ 'c3',
1168
+ 'c3d',
1169
+ 'c4',
1170
+ 'c4a',
1171
+ 'c4d',
1172
+ 'c5',
1173
+ 'c5a',
1174
+ 'c5ad',
1175
+ 'c5d',
1176
+ 'c5n',
1177
+ 'c6a',
1178
+ 'c6g',
1179
+ 'c6gd',
1180
+ 'c6gn',
1181
+ 'c6i',
1182
+ 'c6id',
1183
+ 'c6in',
1184
+ 'c7a',
1185
+ 'c7g',
1186
+ 'c7gd',
1187
+ 'c7gn',
1188
+ 'c7i',
1189
+ 'c7i-flex',
1190
+ 'c8g',
1191
+ 'c8gd',
1192
+ 'cax',
1193
+ 'ccx',
1194
+ 'cpx',
1195
+ 'cx',
1196
+ 'd2',
1197
+ 'd3',
1198
+ 'd3en',
1199
+ 'dl1',
1200
+ 'dl2q',
1201
+ 'e2',
1202
+ 'f1',
1203
+ 'f2',
1204
+ 'g1',
1205
+ 'g2',
1206
+ 'g4ad',
1207
+ 'g4dn',
1208
+ 'g5',
1209
+ 'g5g',
1210
+ 'g6',
1211
+ 'g6e',
1212
+ 'gr6',
1213
+ 'h1',
1214
+ 'h3',
1215
+ 'hpc6a',
1216
+ 'hpc6id',
1217
+ 'hpc7a',
1218
+ 'hpc7g',
1219
+ 'i2',
1220
+ 'i3',
1221
+ 'i3en',
1222
+ 'i4g',
1223
+ 'i4i',
1224
+ 'i7i',
1225
+ 'i7ie',
1226
+ 'i8g',
1227
+ 'im4gn',
1228
+ 'inf1',
1229
+ 'inf2',
1230
+ 'is4gen',
1231
+ 'm1',
1232
+ 'm2',
1233
+ 'm3',
1234
+ 'm4',
1235
+ 'm5',
1236
+ 'm5a',
1237
+ 'm5ad',
1238
+ 'm5d',
1239
+ 'm5dn',
1240
+ 'm5n',
1241
+ 'm5zn',
1242
+ 'm6a',
1243
+ 'm6g',
1244
+ 'm6gd',
1245
+ 'm6i',
1246
+ 'm6id',
1247
+ 'm6idn',
1248
+ 'm6in',
1249
+ 'm7a',
1250
+ 'm7g',
1251
+ 'm7gd',
1252
+ 'm7i',
1253
+ 'm7i-flex',
1254
+ 'm8g',
1255
+ 'm8gd',
1256
+ 'n1',
1257
+ 'n2',
1258
+ 'n2d',
1259
+ 'n4',
1260
+ 'p3',
1261
+ 'p3dn',
1262
+ 'p4d',
1263
+ 'p4de',
1264
+ 'p5',
1265
+ 'p5e',
1266
+ 'p5en',
1267
+ 'p6-b200',
1268
+ 'r3',
1269
+ 'r4',
1270
+ 'r5',
1271
+ 'r5a',
1272
+ 'r5ad',
1273
+ 'r5b',
1274
+ 'r5d',
1275
+ 'r5dn',
1276
+ 'r5n',
1277
+ 'r6a',
1278
+ 'r6g',
1279
+ 'r6gd',
1280
+ 'r6i',
1281
+ 'r6id',
1282
+ 'r6idn',
1283
+ 'r6in',
1284
+ 'r7a',
1285
+ 'r7g',
1286
+ 'r7gd',
1287
+ 'r7i',
1288
+ 'r7iz',
1289
+ 'r8g',
1290
+ 'r8gd',
1291
+ 't2',
1292
+ 't2a',
1293
+ 't2d',
1294
+ 't3',
1295
+ 't3a',
1296
+ 't4g',
1297
+ 'trn1',
1298
+ 'trn1n',
1299
+ 'u-3tb1',
1300
+ 'u-6tb1',
1301
+ 'u7i-12tb',
1302
+ 'u7i-6tb',
1303
+ 'u7i-8tb',
1304
+ 'u7in-16tb',
1305
+ 'u7in-24tb',
1306
+ 'u7in-32tb',
1307
+ 'vt1',
1308
+ 'x1',
1309
+ 'x1e',
1310
+ 'x2gd',
1311
+ 'x2idn',
1312
+ 'x2iedn',
1313
+ 'x2iezn',
1314
+ 'x4',
1315
+ 'x8g',
1316
+ 'z1d',
1317
+ 'z3'
1318
+ ]
1319
+ },
1320
+ description: 'Allowed values for `cfke.io/instance-family`.',
1321
+ default: []
1322
+ },
1323
+ 'topology.kubernetes.io/region': {
1324
+ type: 'array',
1325
+ items: {
1326
+ type: 'string',
1327
+ enum: [
1328
+ 'africa-south1',
1329
+ 'ap-northeast-1',
1330
+ 'ap-northeast-2',
1331
+ 'ap-northeast-3',
1332
+ 'ap-south-1',
1333
+ 'ap-southeast-1',
1334
+ 'ap-southeast-2',
1335
+ 'ash',
1336
+ 'asia-east1',
1337
+ 'asia-east2',
1338
+ 'asia-northeast1',
1339
+ 'asia-northeast2',
1340
+ 'asia-northeast3',
1341
+ 'asia-south1',
1342
+ 'asia-south2',
1343
+ 'asia-southeast1',
1344
+ 'asia-southeast2',
1345
+ 'australia-southeast1',
1346
+ 'australia-southeast2',
1347
+ 'ca-central-1',
1348
+ 'eu-central-1',
1349
+ 'eu-central-2',
1350
+ 'eu-north-1',
1351
+ 'eu-west-1',
1352
+ 'eu-west-2',
1353
+ 'eu-west-3',
1354
+ 'europe-central2',
1355
+ 'europe-north1',
1356
+ 'europe-southwest1',
1357
+ 'europe-west1',
1358
+ 'europe-west10',
1359
+ 'europe-west12',
1360
+ 'europe-west2',
1361
+ 'europe-west3',
1362
+ 'europe-west4',
1363
+ 'europe-west6',
1364
+ 'europe-west8',
1365
+ 'europe-west9',
1366
+ 'fsn1',
1367
+ 'hel1',
1368
+ 'hil',
1369
+ 'me-central1',
1370
+ 'me-central2',
1371
+ 'me-west1',
1372
+ 'nbg1',
1373
+ 'northamerica-northeast1',
1374
+ 'northamerica-northeast2',
1375
+ 'sa-east-1',
1376
+ 'sin',
1377
+ 'southamerica-east1',
1378
+ 'southamerica-west1',
1379
+ 'us-central1',
1380
+ 'us-east-1',
1381
+ 'us-east-2',
1382
+ 'us-east1',
1383
+ 'us-east4',
1384
+ 'us-east5',
1385
+ 'us-south1',
1386
+ 'us-west-1',
1387
+ 'us-west-2',
1388
+ 'us-west1',
1389
+ 'us-west2',
1390
+ 'us-west3',
1391
+ 'us-west4'
1392
+ ]
1393
+ },
1394
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
1395
+ default: []
1396
+ }
1397
+ },
1398
+ additionalProperties: false,
1399
+ 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.',
1400
+ default: {
1401
+ 'karpenter.sh/capacity-type': [
1402
+ 'on-demand',
1403
+ 'spot'
1404
+ ],
1405
+ 'kubernetes.io/arch': [
1406
+ 'amd64'
1407
+ ],
1408
+ 'cfke.io/instance-family': [],
1409
+ 'topology.kubernetes.io/region': []
1410
+ }
1411
+ },
1412
+ scalingProfile: {
1413
+ type: 'string',
1414
+ 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`).',
1415
+ default: 'conservative',
1416
+ example: 'conservative',
1417
+ enum: [
1418
+ 'aggressive',
1419
+ 'conservative'
1420
+ ]
1421
+ },
1422
+ taints: {
1423
+ type: 'array',
1424
+ items: {
1425
+ type: 'object',
1426
+ properties: {
1427
+ key: {
1428
+ type: 'string',
1429
+ description: 'Taint key: a Kubernetes qualified name with an optional DNS subdomain prefix. Keys under `node.kubernetes.io`, `node.cloudprovider.kubernetes.io`, `node.cilium.io`, `karpenter.sh` and `cfke.io` (and their subdomains) are reserved.',
1430
+ example: 'dedicated'
1431
+ },
1432
+ value: {
1433
+ type: 'string',
1434
+ maxLength: 63,
1435
+ pattern: '^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$',
1436
+ description: 'Taint value. Optional.',
1437
+ example: 'ci'
1438
+ },
1439
+ effect: {
1440
+ type: 'string',
1441
+ description: 'Taint effect.',
1442
+ example: 'NoSchedule',
1443
+ enum: [
1444
+ 'NoSchedule',
1445
+ 'PreferNoSchedule',
1446
+ 'NoExecute'
1447
+ ]
1448
+ }
1449
+ },
1450
+ required: [
1451
+ 'key',
1452
+ 'effect'
1453
+ ],
1454
+ additionalProperties: false
1455
+ },
1456
+ maxItems: 50,
1457
+ description: 'Taints applied to every node the fleet provisions, so only pods that tolerate them schedule there. Each key and effect pair may appear once. Full-overwrite: omit to remove all taints.',
1458
+ default: []
1459
+ },
369
1460
  id: {
370
1461
  type: 'string',
371
1462
  maxLength: 63,
@@ -373,15 +1464,13 @@ export const FleetCreateInputSchema = {
373
1464
  pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
374
1465
  description: 'Unique identifier of the kubernetes fleet.',
375
1466
  example: 'new-clouds-fleet'
376
- },
377
- type: {
378
- type: 'string',
379
- description: 'Specifies the fleet type: infrastructure managed by Cloudfleet or Connected Fleets.',
380
- enum: ['managed', 'connected']
381
1467
  }
382
1468
  },
383
- required: ['id', 'type'],
384
- additionalProperties: false
1469
+ required: [
1470
+ 'id'
1471
+ ],
1472
+ additionalProperties: false,
1473
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
385
1474
  };
386
1475
  export const FleetSchema = {
387
1476
  type: 'object',
@@ -390,13 +1479,12 @@ export const FleetSchema = {
390
1479
  type: 'object',
391
1480
  properties: {
392
1481
  cpu: {
393
- type: 'number',
394
- format: 'float',
1482
+ type: 'integer',
395
1483
  minimum: 0,
396
- description: 'CPU limit in cores.'
1484
+ maximum: 100000,
1485
+ description: 'CPU limit in cores. Maximum 100,000.'
397
1486
  }
398
1487
  },
399
- required: ['cpu'],
400
1488
  additionalProperties: false,
401
1489
  description: 'Limits define a set of bounds for provisioning capacity.'
402
1490
  },
@@ -404,62 +1492,398 @@ export const FleetSchema = {
404
1492
  type: 'object',
405
1493
  properties: {
406
1494
  enabled: {
407
- type: 'boolean',
408
- default: true
1495
+ type: 'boolean'
409
1496
  },
410
1497
  project: {
411
1498
  type: 'string',
412
- description: 'Project GCP Project id to deploy instances into'
1499
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
1500
+ 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.',
1501
+ example: 'my-cloudfleet-project'
413
1502
  }
414
1503
  },
415
- required: ['project'],
1504
+ required: [
1505
+ 'enabled'
1506
+ ],
416
1507
  additionalProperties: false
417
1508
  },
418
1509
  hetzner: {
419
- oneOf: [
420
- {
421
- type: 'object',
422
- properties: {
423
- enabled: {
424
- type: 'boolean',
425
- default: true
426
- },
427
- apiKey: {
428
- type: 'string'
429
- }
430
- },
431
- additionalProperties: false
1510
+ type: 'object',
1511
+ properties: {
1512
+ enabled: {
1513
+ type: 'boolean'
432
1514
  },
433
- {
434
- type: 'object',
435
- properties: {
436
- apiKey: {
437
- type: 'string'
438
- },
439
- enabled: {
440
- type: 'boolean',
441
- default: true
442
- }
443
- },
444
- additionalProperties: false
1515
+ apiKey: {
1516
+ type: 'string',
1517
+ pattern: '^\\*{64}$',
1518
+ 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.'
445
1519
  }
446
- ]
1520
+ },
1521
+ required: [
1522
+ 'enabled'
1523
+ ],
1524
+ additionalProperties: false
447
1525
  },
448
1526
  aws: {
449
1527
  type: 'object',
450
1528
  properties: {
451
1529
  enabled: {
452
- type: 'boolean',
453
- default: true
1530
+ type: 'boolean'
454
1531
  },
455
1532
  controllerRoleArn: {
456
1533
  type: 'string',
457
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1534
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1535
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1536
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
458
1537
  }
459
1538
  },
460
- required: ['controllerRoleArn'],
1539
+ required: [
1540
+ 'enabled'
1541
+ ],
461
1542
  additionalProperties: false
462
1543
  },
1544
+ constraints: {
1545
+ type: 'object',
1546
+ properties: {
1547
+ 'karpenter.sh/capacity-type': {
1548
+ type: 'array',
1549
+ items: {
1550
+ type: 'string',
1551
+ enum: [
1552
+ 'on-demand',
1553
+ 'spot'
1554
+ ]
1555
+ },
1556
+ minItems: 1,
1557
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
1558
+ default: [
1559
+ 'on-demand',
1560
+ 'spot'
1561
+ ]
1562
+ },
1563
+ 'kubernetes.io/arch': {
1564
+ type: 'array',
1565
+ items: {
1566
+ type: 'string',
1567
+ enum: [
1568
+ 'amd64',
1569
+ 'arm64'
1570
+ ]
1571
+ },
1572
+ minItems: 1,
1573
+ description: 'Allowed values for `kubernetes.io/arch`.',
1574
+ default: [
1575
+ 'amd64'
1576
+ ]
1577
+ },
1578
+ 'cfke.io/instance-family': {
1579
+ type: 'array',
1580
+ items: {
1581
+ type: 'string',
1582
+ enum: [
1583
+ 'a1',
1584
+ 'a2',
1585
+ 'a3',
1586
+ 'a4',
1587
+ 'c1',
1588
+ 'c2',
1589
+ 'c2d',
1590
+ 'c3',
1591
+ 'c3d',
1592
+ 'c4',
1593
+ 'c4a',
1594
+ 'c4d',
1595
+ 'c5',
1596
+ 'c5a',
1597
+ 'c5ad',
1598
+ 'c5d',
1599
+ 'c5n',
1600
+ 'c6a',
1601
+ 'c6g',
1602
+ 'c6gd',
1603
+ 'c6gn',
1604
+ 'c6i',
1605
+ 'c6id',
1606
+ 'c6in',
1607
+ 'c7a',
1608
+ 'c7g',
1609
+ 'c7gd',
1610
+ 'c7gn',
1611
+ 'c7i',
1612
+ 'c7i-flex',
1613
+ 'c8g',
1614
+ 'c8gd',
1615
+ 'cax',
1616
+ 'ccx',
1617
+ 'cpx',
1618
+ 'cx',
1619
+ 'd2',
1620
+ 'd3',
1621
+ 'd3en',
1622
+ 'dl1',
1623
+ 'dl2q',
1624
+ 'e2',
1625
+ 'f1',
1626
+ 'f2',
1627
+ 'g1',
1628
+ 'g2',
1629
+ 'g4ad',
1630
+ 'g4dn',
1631
+ 'g5',
1632
+ 'g5g',
1633
+ 'g6',
1634
+ 'g6e',
1635
+ 'gr6',
1636
+ 'h1',
1637
+ 'h3',
1638
+ 'hpc6a',
1639
+ 'hpc6id',
1640
+ 'hpc7a',
1641
+ 'hpc7g',
1642
+ 'i2',
1643
+ 'i3',
1644
+ 'i3en',
1645
+ 'i4g',
1646
+ 'i4i',
1647
+ 'i7i',
1648
+ 'i7ie',
1649
+ 'i8g',
1650
+ 'im4gn',
1651
+ 'inf1',
1652
+ 'inf2',
1653
+ 'is4gen',
1654
+ 'm1',
1655
+ 'm2',
1656
+ 'm3',
1657
+ 'm4',
1658
+ 'm5',
1659
+ 'm5a',
1660
+ 'm5ad',
1661
+ 'm5d',
1662
+ 'm5dn',
1663
+ 'm5n',
1664
+ 'm5zn',
1665
+ 'm6a',
1666
+ 'm6g',
1667
+ 'm6gd',
1668
+ 'm6i',
1669
+ 'm6id',
1670
+ 'm6idn',
1671
+ 'm6in',
1672
+ 'm7a',
1673
+ 'm7g',
1674
+ 'm7gd',
1675
+ 'm7i',
1676
+ 'm7i-flex',
1677
+ 'm8g',
1678
+ 'm8gd',
1679
+ 'n1',
1680
+ 'n2',
1681
+ 'n2d',
1682
+ 'n4',
1683
+ 'p3',
1684
+ 'p3dn',
1685
+ 'p4d',
1686
+ 'p4de',
1687
+ 'p5',
1688
+ 'p5e',
1689
+ 'p5en',
1690
+ 'p6-b200',
1691
+ 'r3',
1692
+ 'r4',
1693
+ 'r5',
1694
+ 'r5a',
1695
+ 'r5ad',
1696
+ 'r5b',
1697
+ 'r5d',
1698
+ 'r5dn',
1699
+ 'r5n',
1700
+ 'r6a',
1701
+ 'r6g',
1702
+ 'r6gd',
1703
+ 'r6i',
1704
+ 'r6id',
1705
+ 'r6idn',
1706
+ 'r6in',
1707
+ 'r7a',
1708
+ 'r7g',
1709
+ 'r7gd',
1710
+ 'r7i',
1711
+ 'r7iz',
1712
+ 'r8g',
1713
+ 'r8gd',
1714
+ 't2',
1715
+ 't2a',
1716
+ 't2d',
1717
+ 't3',
1718
+ 't3a',
1719
+ 't4g',
1720
+ 'trn1',
1721
+ 'trn1n',
1722
+ 'u-3tb1',
1723
+ 'u-6tb1',
1724
+ 'u7i-12tb',
1725
+ 'u7i-6tb',
1726
+ 'u7i-8tb',
1727
+ 'u7in-16tb',
1728
+ 'u7in-24tb',
1729
+ 'u7in-32tb',
1730
+ 'vt1',
1731
+ 'x1',
1732
+ 'x1e',
1733
+ 'x2gd',
1734
+ 'x2idn',
1735
+ 'x2iedn',
1736
+ 'x2iezn',
1737
+ 'x4',
1738
+ 'x8g',
1739
+ 'z1d',
1740
+ 'z3'
1741
+ ]
1742
+ },
1743
+ description: 'Allowed values for `cfke.io/instance-family`.',
1744
+ default: []
1745
+ },
1746
+ 'topology.kubernetes.io/region': {
1747
+ type: 'array',
1748
+ items: {
1749
+ type: 'string',
1750
+ enum: [
1751
+ 'africa-south1',
1752
+ 'ap-northeast-1',
1753
+ 'ap-northeast-2',
1754
+ 'ap-northeast-3',
1755
+ 'ap-south-1',
1756
+ 'ap-southeast-1',
1757
+ 'ap-southeast-2',
1758
+ 'ash',
1759
+ 'asia-east1',
1760
+ 'asia-east2',
1761
+ 'asia-northeast1',
1762
+ 'asia-northeast2',
1763
+ 'asia-northeast3',
1764
+ 'asia-south1',
1765
+ 'asia-south2',
1766
+ 'asia-southeast1',
1767
+ 'asia-southeast2',
1768
+ 'australia-southeast1',
1769
+ 'australia-southeast2',
1770
+ 'ca-central-1',
1771
+ 'eu-central-1',
1772
+ 'eu-central-2',
1773
+ 'eu-north-1',
1774
+ 'eu-west-1',
1775
+ 'eu-west-2',
1776
+ 'eu-west-3',
1777
+ 'europe-central2',
1778
+ 'europe-north1',
1779
+ 'europe-southwest1',
1780
+ 'europe-west1',
1781
+ 'europe-west10',
1782
+ 'europe-west12',
1783
+ 'europe-west2',
1784
+ 'europe-west3',
1785
+ 'europe-west4',
1786
+ 'europe-west6',
1787
+ 'europe-west8',
1788
+ 'europe-west9',
1789
+ 'fsn1',
1790
+ 'hel1',
1791
+ 'hil',
1792
+ 'me-central1',
1793
+ 'me-central2',
1794
+ 'me-west1',
1795
+ 'nbg1',
1796
+ 'northamerica-northeast1',
1797
+ 'northamerica-northeast2',
1798
+ 'sa-east-1',
1799
+ 'sin',
1800
+ 'southamerica-east1',
1801
+ 'southamerica-west1',
1802
+ 'us-central1',
1803
+ 'us-east-1',
1804
+ 'us-east-2',
1805
+ 'us-east1',
1806
+ 'us-east4',
1807
+ 'us-east5',
1808
+ 'us-south1',
1809
+ 'us-west-1',
1810
+ 'us-west-2',
1811
+ 'us-west1',
1812
+ 'us-west2',
1813
+ 'us-west3',
1814
+ 'us-west4'
1815
+ ]
1816
+ },
1817
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
1818
+ default: []
1819
+ }
1820
+ },
1821
+ required: [
1822
+ 'karpenter.sh/capacity-type',
1823
+ 'kubernetes.io/arch'
1824
+ ],
1825
+ additionalProperties: false,
1826
+ 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.',
1827
+ default: {
1828
+ 'karpenter.sh/capacity-type': [
1829
+ 'on-demand',
1830
+ 'spot'
1831
+ ],
1832
+ 'kubernetes.io/arch': [
1833
+ 'amd64'
1834
+ ],
1835
+ 'cfke.io/instance-family': [],
1836
+ 'topology.kubernetes.io/region': []
1837
+ }
1838
+ },
1839
+ scalingProfile: {
1840
+ type: 'string',
1841
+ 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`).',
1842
+ default: 'conservative',
1843
+ example: 'conservative',
1844
+ enum: [
1845
+ 'aggressive',
1846
+ 'conservative'
1847
+ ]
1848
+ },
1849
+ taints: {
1850
+ type: 'array',
1851
+ items: {
1852
+ type: 'object',
1853
+ properties: {
1854
+ key: {
1855
+ type: 'string',
1856
+ description: 'Taint key: a Kubernetes qualified name with an optional DNS subdomain prefix. Keys under `node.kubernetes.io`, `node.cloudprovider.kubernetes.io`, `node.cilium.io`, `karpenter.sh` and `cfke.io` (and their subdomains) are reserved.',
1857
+ example: 'dedicated'
1858
+ },
1859
+ value: {
1860
+ type: 'string',
1861
+ maxLength: 63,
1862
+ pattern: '^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$',
1863
+ description: 'Taint value. Optional.',
1864
+ example: 'ci'
1865
+ },
1866
+ effect: {
1867
+ type: 'string',
1868
+ description: 'Taint effect.',
1869
+ example: 'NoSchedule',
1870
+ enum: [
1871
+ 'NoSchedule',
1872
+ 'PreferNoSchedule',
1873
+ 'NoExecute'
1874
+ ]
1875
+ }
1876
+ },
1877
+ required: [
1878
+ 'key',
1879
+ 'effect'
1880
+ ],
1881
+ additionalProperties: false
1882
+ },
1883
+ maxItems: 50,
1884
+ description: 'Taints applied to every node the fleet provisions, so only pods that tolerate them schedule there. Each key and effect pair may appear once. Full-overwrite: omit to remove all taints.',
1885
+ default: []
1886
+ },
463
1887
  id: {
464
1888
  type: 'string',
465
1889
  maxLength: 63,
@@ -468,14 +1892,38 @@ export const FleetSchema = {
468
1892
  description: 'Unique identifier of the kubernetes fleet.',
469
1893
  example: 'new-clouds-fleet'
470
1894
  },
471
- type: {
1895
+ ready: {
1896
+ type: 'boolean',
1897
+ description: 'Indicates whether the fleet configuration is healthy.',
1898
+ example: true
1899
+ },
1900
+ status_message: {
1901
+ type: 'string',
1902
+ description: 'Human-readable reason the fleet is not ready. Present only when `ready` is false.',
1903
+ example: 'Invalid provider permissions.'
1904
+ },
1905
+ created_at: {
1906
+ type: 'string',
1907
+ description: 'Creation date and time of the fleet.',
1908
+ example: '2024-09-12T09:11:27Z'
1909
+ },
1910
+ updated_at: {
472
1911
  type: 'string',
473
- description: 'Specifies the fleet type: infrastructure managed by Cloudfleet or Connected Fleets.',
474
- enum: ['managed', 'connected']
1912
+ description: 'Date and time the fleet was last updated.',
1913
+ example: '2024-09-12T09:11:27Z'
475
1914
  }
476
1915
  },
477
- required: ['id', 'type'],
478
- additionalProperties: false
1916
+ required: [
1917
+ 'constraints',
1918
+ 'scalingProfile',
1919
+ 'taints',
1920
+ 'id',
1921
+ 'ready',
1922
+ 'created_at',
1923
+ 'updated_at'
1924
+ ],
1925
+ additionalProperties: false,
1926
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
479
1927
  };
480
1928
  export const FleetUpdateInputSchema = {
481
1929
  type: 'object',
@@ -484,13 +1932,12 @@ export const FleetUpdateInputSchema = {
484
1932
  type: 'object',
485
1933
  properties: {
486
1934
  cpu: {
487
- type: 'number',
488
- format: 'float',
1935
+ type: 'integer',
489
1936
  minimum: 0,
490
- description: 'CPU limit in cores.'
1937
+ maximum: 100000,
1938
+ description: 'CPU limit in cores. Maximum 100,000.'
491
1939
  }
492
1940
  },
493
- required: ['cpu'],
494
1941
  additionalProperties: false,
495
1942
  description: 'Limits define a set of bounds for provisioning capacity.'
496
1943
  },
@@ -498,69 +1945,429 @@ export const FleetUpdateInputSchema = {
498
1945
  type: 'object',
499
1946
  properties: {
500
1947
  enabled: {
501
- type: 'boolean',
502
- default: true
1948
+ type: 'boolean'
503
1949
  },
504
1950
  project: {
505
1951
  type: 'string',
506
- description: 'Project GCP Project id to deploy instances into'
1952
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
1953
+ 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.',
1954
+ example: 'my-cloudfleet-project'
507
1955
  }
508
1956
  },
509
- required: ['project'],
1957
+ required: [
1958
+ 'enabled'
1959
+ ],
510
1960
  additionalProperties: false
511
1961
  },
512
1962
  hetzner: {
513
- oneOf: [
514
- {
515
- type: 'object',
516
- properties: {
517
- enabled: {
518
- type: 'boolean',
519
- default: true
520
- },
521
- apiKey: {
522
- type: 'string'
523
- }
524
- },
525
- additionalProperties: false
1963
+ type: 'object',
1964
+ properties: {
1965
+ enabled: {
1966
+ type: 'boolean'
526
1967
  },
527
- {
528
- type: 'object',
529
- properties: {
530
- apiKey: {
531
- type: 'string'
532
- },
533
- enabled: {
534
- type: 'boolean',
535
- default: true
536
- }
537
- },
538
- additionalProperties: false
1968
+ apiKey: {
1969
+ type: 'string',
1970
+ maxLength: 64,
1971
+ minLength: 64,
1972
+ pattern: '^([A-Za-z0-9]{64}|\\*{64})$',
1973
+ 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.'
539
1974
  }
540
- ]
1975
+ },
1976
+ required: [
1977
+ 'enabled'
1978
+ ],
1979
+ additionalProperties: false
541
1980
  },
542
1981
  aws: {
543
1982
  type: 'object',
544
1983
  properties: {
545
1984
  enabled: {
546
- type: 'boolean',
547
- default: true
1985
+ type: 'boolean'
548
1986
  },
549
1987
  controllerRoleArn: {
550
1988
  type: 'string',
551
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1989
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1990
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1991
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
552
1992
  }
553
1993
  },
554
- required: ['controllerRoleArn'],
1994
+ required: [
1995
+ 'enabled'
1996
+ ],
555
1997
  additionalProperties: false
1998
+ },
1999
+ constraints: {
2000
+ type: 'object',
2001
+ properties: {
2002
+ 'karpenter.sh/capacity-type': {
2003
+ type: 'array',
2004
+ items: {
2005
+ type: 'string',
2006
+ enum: [
2007
+ 'on-demand',
2008
+ 'spot'
2009
+ ]
2010
+ },
2011
+ minItems: 1,
2012
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
2013
+ default: [
2014
+ 'on-demand',
2015
+ 'spot'
2016
+ ]
2017
+ },
2018
+ 'kubernetes.io/arch': {
2019
+ type: 'array',
2020
+ items: {
2021
+ type: 'string',
2022
+ enum: [
2023
+ 'amd64',
2024
+ 'arm64'
2025
+ ]
2026
+ },
2027
+ minItems: 1,
2028
+ description: 'Allowed values for `kubernetes.io/arch`.',
2029
+ default: [
2030
+ 'amd64'
2031
+ ]
2032
+ },
2033
+ 'cfke.io/instance-family': {
2034
+ type: 'array',
2035
+ items: {
2036
+ type: 'string',
2037
+ enum: [
2038
+ 'a1',
2039
+ 'a2',
2040
+ 'a3',
2041
+ 'a4',
2042
+ 'c1',
2043
+ 'c2',
2044
+ 'c2d',
2045
+ 'c3',
2046
+ 'c3d',
2047
+ 'c4',
2048
+ 'c4a',
2049
+ 'c4d',
2050
+ 'c5',
2051
+ 'c5a',
2052
+ 'c5ad',
2053
+ 'c5d',
2054
+ 'c5n',
2055
+ 'c6a',
2056
+ 'c6g',
2057
+ 'c6gd',
2058
+ 'c6gn',
2059
+ 'c6i',
2060
+ 'c6id',
2061
+ 'c6in',
2062
+ 'c7a',
2063
+ 'c7g',
2064
+ 'c7gd',
2065
+ 'c7gn',
2066
+ 'c7i',
2067
+ 'c7i-flex',
2068
+ 'c8g',
2069
+ 'c8gd',
2070
+ 'cax',
2071
+ 'ccx',
2072
+ 'cpx',
2073
+ 'cx',
2074
+ 'd2',
2075
+ 'd3',
2076
+ 'd3en',
2077
+ 'dl1',
2078
+ 'dl2q',
2079
+ 'e2',
2080
+ 'f1',
2081
+ 'f2',
2082
+ 'g1',
2083
+ 'g2',
2084
+ 'g4ad',
2085
+ 'g4dn',
2086
+ 'g5',
2087
+ 'g5g',
2088
+ 'g6',
2089
+ 'g6e',
2090
+ 'gr6',
2091
+ 'h1',
2092
+ 'h3',
2093
+ 'hpc6a',
2094
+ 'hpc6id',
2095
+ 'hpc7a',
2096
+ 'hpc7g',
2097
+ 'i2',
2098
+ 'i3',
2099
+ 'i3en',
2100
+ 'i4g',
2101
+ 'i4i',
2102
+ 'i7i',
2103
+ 'i7ie',
2104
+ 'i8g',
2105
+ 'im4gn',
2106
+ 'inf1',
2107
+ 'inf2',
2108
+ 'is4gen',
2109
+ 'm1',
2110
+ 'm2',
2111
+ 'm3',
2112
+ 'm4',
2113
+ 'm5',
2114
+ 'm5a',
2115
+ 'm5ad',
2116
+ 'm5d',
2117
+ 'm5dn',
2118
+ 'm5n',
2119
+ 'm5zn',
2120
+ 'm6a',
2121
+ 'm6g',
2122
+ 'm6gd',
2123
+ 'm6i',
2124
+ 'm6id',
2125
+ 'm6idn',
2126
+ 'm6in',
2127
+ 'm7a',
2128
+ 'm7g',
2129
+ 'm7gd',
2130
+ 'm7i',
2131
+ 'm7i-flex',
2132
+ 'm8g',
2133
+ 'm8gd',
2134
+ 'n1',
2135
+ 'n2',
2136
+ 'n2d',
2137
+ 'n4',
2138
+ 'p3',
2139
+ 'p3dn',
2140
+ 'p4d',
2141
+ 'p4de',
2142
+ 'p5',
2143
+ 'p5e',
2144
+ 'p5en',
2145
+ 'p6-b200',
2146
+ 'r3',
2147
+ 'r4',
2148
+ 'r5',
2149
+ 'r5a',
2150
+ 'r5ad',
2151
+ 'r5b',
2152
+ 'r5d',
2153
+ 'r5dn',
2154
+ 'r5n',
2155
+ 'r6a',
2156
+ 'r6g',
2157
+ 'r6gd',
2158
+ 'r6i',
2159
+ 'r6id',
2160
+ 'r6idn',
2161
+ 'r6in',
2162
+ 'r7a',
2163
+ 'r7g',
2164
+ 'r7gd',
2165
+ 'r7i',
2166
+ 'r7iz',
2167
+ 'r8g',
2168
+ 'r8gd',
2169
+ 't2',
2170
+ 't2a',
2171
+ 't2d',
2172
+ 't3',
2173
+ 't3a',
2174
+ 't4g',
2175
+ 'trn1',
2176
+ 'trn1n',
2177
+ 'u-3tb1',
2178
+ 'u-6tb1',
2179
+ 'u7i-12tb',
2180
+ 'u7i-6tb',
2181
+ 'u7i-8tb',
2182
+ 'u7in-16tb',
2183
+ 'u7in-24tb',
2184
+ 'u7in-32tb',
2185
+ 'vt1',
2186
+ 'x1',
2187
+ 'x1e',
2188
+ 'x2gd',
2189
+ 'x2idn',
2190
+ 'x2iedn',
2191
+ 'x2iezn',
2192
+ 'x4',
2193
+ 'x8g',
2194
+ 'z1d',
2195
+ 'z3'
2196
+ ]
2197
+ },
2198
+ description: 'Allowed values for `cfke.io/instance-family`.',
2199
+ default: []
2200
+ },
2201
+ 'topology.kubernetes.io/region': {
2202
+ type: 'array',
2203
+ items: {
2204
+ type: 'string',
2205
+ enum: [
2206
+ 'africa-south1',
2207
+ 'ap-northeast-1',
2208
+ 'ap-northeast-2',
2209
+ 'ap-northeast-3',
2210
+ 'ap-south-1',
2211
+ 'ap-southeast-1',
2212
+ 'ap-southeast-2',
2213
+ 'ash',
2214
+ 'asia-east1',
2215
+ 'asia-east2',
2216
+ 'asia-northeast1',
2217
+ 'asia-northeast2',
2218
+ 'asia-northeast3',
2219
+ 'asia-south1',
2220
+ 'asia-south2',
2221
+ 'asia-southeast1',
2222
+ 'asia-southeast2',
2223
+ 'australia-southeast1',
2224
+ 'australia-southeast2',
2225
+ 'ca-central-1',
2226
+ 'eu-central-1',
2227
+ 'eu-central-2',
2228
+ 'eu-north-1',
2229
+ 'eu-west-1',
2230
+ 'eu-west-2',
2231
+ 'eu-west-3',
2232
+ 'europe-central2',
2233
+ 'europe-north1',
2234
+ 'europe-southwest1',
2235
+ 'europe-west1',
2236
+ 'europe-west10',
2237
+ 'europe-west12',
2238
+ 'europe-west2',
2239
+ 'europe-west3',
2240
+ 'europe-west4',
2241
+ 'europe-west6',
2242
+ 'europe-west8',
2243
+ 'europe-west9',
2244
+ 'fsn1',
2245
+ 'hel1',
2246
+ 'hil',
2247
+ 'me-central1',
2248
+ 'me-central2',
2249
+ 'me-west1',
2250
+ 'nbg1',
2251
+ 'northamerica-northeast1',
2252
+ 'northamerica-northeast2',
2253
+ 'sa-east-1',
2254
+ 'sin',
2255
+ 'southamerica-east1',
2256
+ 'southamerica-west1',
2257
+ 'us-central1',
2258
+ 'us-east-1',
2259
+ 'us-east-2',
2260
+ 'us-east1',
2261
+ 'us-east4',
2262
+ 'us-east5',
2263
+ 'us-south1',
2264
+ 'us-west-1',
2265
+ 'us-west-2',
2266
+ 'us-west1',
2267
+ 'us-west2',
2268
+ 'us-west3',
2269
+ 'us-west4'
2270
+ ]
2271
+ },
2272
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
2273
+ default: []
2274
+ }
2275
+ },
2276
+ additionalProperties: false,
2277
+ 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.',
2278
+ default: {
2279
+ 'karpenter.sh/capacity-type': [
2280
+ 'on-demand',
2281
+ 'spot'
2282
+ ],
2283
+ 'kubernetes.io/arch': [
2284
+ 'amd64'
2285
+ ],
2286
+ 'cfke.io/instance-family': [],
2287
+ 'topology.kubernetes.io/region': []
2288
+ }
2289
+ },
2290
+ scalingProfile: {
2291
+ type: 'string',
2292
+ 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`).',
2293
+ default: 'conservative',
2294
+ example: 'conservative',
2295
+ enum: [
2296
+ 'aggressive',
2297
+ 'conservative'
2298
+ ]
2299
+ },
2300
+ taints: {
2301
+ type: 'array',
2302
+ items: {
2303
+ type: 'object',
2304
+ properties: {
2305
+ key: {
2306
+ type: 'string',
2307
+ description: 'Taint key: a Kubernetes qualified name with an optional DNS subdomain prefix. Keys under `node.kubernetes.io`, `node.cloudprovider.kubernetes.io`, `node.cilium.io`, `karpenter.sh` and `cfke.io` (and their subdomains) are reserved.',
2308
+ example: 'dedicated'
2309
+ },
2310
+ value: {
2311
+ type: 'string',
2312
+ maxLength: 63,
2313
+ pattern: '^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$',
2314
+ description: 'Taint value. Optional.',
2315
+ example: 'ci'
2316
+ },
2317
+ effect: {
2318
+ type: 'string',
2319
+ description: 'Taint effect.',
2320
+ example: 'NoSchedule',
2321
+ enum: [
2322
+ 'NoSchedule',
2323
+ 'PreferNoSchedule',
2324
+ 'NoExecute'
2325
+ ]
2326
+ }
2327
+ },
2328
+ required: [
2329
+ 'key',
2330
+ 'effect'
2331
+ ],
2332
+ additionalProperties: false
2333
+ },
2334
+ maxItems: 50,
2335
+ description: 'Taints applied to every node the fleet provisions, so only pods that tolerate them schedule there. Each key and effect pair may appear once. Full-overwrite: omit to remove all taints.',
2336
+ default: []
556
2337
  }
557
2338
  },
558
- additionalProperties: false
2339
+ additionalProperties: false,
2340
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
559
2341
  };
560
- export const InviteSchema = {
2342
+ export const InviteCreateInputSchema = {
561
2343
  type: 'object',
562
2344
  properties: {
563
- id: {
2345
+ email: {
2346
+ type: 'string',
2347
+ format: 'email',
2348
+ description: 'Email address of the user to invite.',
2349
+ example: 'email@example.com'
2350
+ },
2351
+ role: {
2352
+ type: 'string',
2353
+ description: 'Role the invited user will be assigned on redemption. Can be \'Administrator\' or \'User\'.',
2354
+ default: 'User',
2355
+ example: 'User',
2356
+ enum: [
2357
+ 'Administrator',
2358
+ 'User'
2359
+ ]
2360
+ }
2361
+ },
2362
+ required: [
2363
+ 'email'
2364
+ ],
2365
+ additionalProperties: false
2366
+ };
2367
+ export const InviteSchema = {
2368
+ type: 'object',
2369
+ properties: {
2370
+ id: {
564
2371
  type: 'string',
565
2372
  description: 'Unique identifier of the invitation.',
566
2373
  example: '65831dd20d20165489cbb868'
@@ -587,567 +2394,1495 @@ export const InviteSchema = {
587
2394
  type: 'string',
588
2395
  description: 'Generated unique invite code.',
589
2396
  example: '7kUZnH7nnKUFfvc4NK2KQF'
2397
+ },
2398
+ role: {
2399
+ type: 'string',
2400
+ description: 'Role the invited user will be assigned on redemption. Can be \'Administrator\' or \'User\'.',
2401
+ default: 'User',
2402
+ example: 'User',
2403
+ enum: [
2404
+ 'Administrator',
2405
+ 'User'
2406
+ ]
590
2407
  }
591
2408
  },
592
- required: ['date_created'],
2409
+ required: [
2410
+ 'date_created'
2411
+ ],
593
2412
  additionalProperties: false
594
2413
  };
595
- export const InvoiceSchema = {
2414
+ export const InvoicePaymentAttemptSchema = {
596
2415
  type: 'object',
597
2416
  properties: {
598
- id: {
599
- type: 'string',
600
- format: 'uuid',
601
- description: 'Unique identifier of the invoice. UUID v4 string in canonical form',
602
- example: '415026b6-f00f-44f8-968d-fc6ef4d0fc6d'
603
- },
604
- organizationId: {
2417
+ invoice_id: {
605
2418
  type: 'string',
606
- format: 'uuid',
607
- description: 'Unique identifier of the organization. UUID v4 string in canonical form',
608
- example: '415026b6-f00f-44f8-968d-fc6ef4d0fc6d'
2419
+ description: 'Identifier of the invoice.',
2420
+ example: 'in_1234567890xCrwxghOTj1234'
609
2421
  },
610
- status: {
2422
+ number: {
611
2423
  type: 'string',
612
- description: 'Status of the invoice',
613
- example: 'DRAFT',
614
- enum: ['DRAFT', 'COMMITTED', 'VOID']
2424
+ nullable: true,
2425
+ description: 'Invoice number. Null if the invoice has no number.',
2426
+ example: 'CF-0042'
615
2427
  },
616
2428
  amount: {
617
2429
  type: 'number',
618
2430
  format: 'float',
619
- description: 'Total amount of the invoice',
620
- example: 100
2431
+ description: 'Amount outstanding when the charge was attempted, in the smallest currency unit.',
2432
+ example: 4200
621
2433
  },
622
2434
  currency: {
623
2435
  type: 'string',
624
- description: 'Currency of the invoice',
625
- example: 'USD',
626
- enum: ['AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA', 'ARS', 'AUD', 'AWG', 'AZN', 'BAM', 'BBD', 'BDT', 'BGN', 'BHD', 'BIF', 'BMD', 'BND', 'BOB', 'BRL', 'BSD', 'BTN', 'BWP', 'BYR', 'BZD', 'CAD', 'CDF', 'CHF', 'CLP', 'CNY', 'COP', 'CRC', 'CUC', 'CUP', 'CVE', 'CZK', 'DJF', 'DKK', 'DOP', 'DZD', 'EGP', 'ERN', 'ETB', 'EUR', 'FJD', 'FKP', 'GBP', 'GEL', 'GGP', 'GHS', 'GIP', 'GMD', 'GNF', 'GTQ', 'GYD', 'HKD', 'HNL', 'HRK', 'HTG', 'HUF', 'IDR', 'ILS', 'IMP', 'INR', 'IQD', 'IRR', 'ISK', 'JEP', 'JMD', 'JOD', 'JPY', 'KES', 'KGS', 'KHR', 'KMF', 'KPW', 'KRW', 'KWD', 'KYD', 'KZT', 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LTL', 'LVL', 'LYD', 'MAD', 'MDL', 'MGA', 'MKD', 'MMK', 'MNT', 'MOP', 'MRO', 'MUR', 'MVR', 'MWK', 'MXN', 'MYR', 'MZN', 'NAD', 'NGN', 'NIO', 'NOK', 'NPR', 'NZD', 'OMR', 'PAB', 'PEN', 'PGK', 'PHP', 'PKR', 'PLN', 'PYG', 'QAR', 'RON', 'RSD', 'RUB', 'RWF', 'SAR', 'SBD', 'SCR', 'SDG', 'SEK', 'SGD', 'SHP', 'SLL', 'SOS', 'SPL', 'SRD', 'STD', 'SVC', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND', 'TOP', 'TRY', 'TTD', 'TVD', 'TWD', 'TZS', 'UAH', 'UGX', 'USD', 'UYU', 'UZS', 'VEF', 'VND', 'VUV', 'WST', 'XAF', 'XCD', 'XDR', 'XOF', 'XPF', 'YER', 'ZAR', 'ZMW', 'ZWD', 'BTC']
627
- },
628
- creditAdj: {
629
- type: 'number',
630
- format: 'float',
631
- description: 'Total amount of credit adjustments',
632
- example: 0
633
- },
634
- refundAdj: {
635
- type: 'number',
636
- format: 'float',
637
- description: 'Total amount of refund adjustments',
638
- example: 0
2436
+ description: 'Currency of the invoice.',
2437
+ example: 'eur'
639
2438
  },
640
- invoiceDate: {
2439
+ status: {
641
2440
  type: 'string',
642
- description: 'Date of the invoice',
643
- example: '2019-01-01T00:00:00.000Z'
2441
+ description: 'Outcome for this invoice: `paid`, `processing` (accepted, not yet settled), `requires_action` (awaiting customer authentication), or `failed` (declined).',
2442
+ example: 'paid',
2443
+ enum: [
2444
+ 'paid',
2445
+ 'processing',
2446
+ 'requires_action',
2447
+ 'failed'
2448
+ ]
644
2449
  },
645
- targetDate: {
2450
+ client_secret: {
646
2451
  type: 'string',
647
- description: 'Target date of the invoice',
648
- example: '2019-01-01T00:00:00.000Z'
2452
+ nullable: true,
2453
+ description: 'Client secret used to complete customer authentication. Set only when `status` is `requires_action`.',
2454
+ example: 'pi_3MtwBwLkdIwHu7ix28a3tqPa_secret_YrKJUKribcBjcG8HVhfZluoGH'
649
2455
  },
650
- invoiceNumber: {
2456
+ failure_code: {
651
2457
  type: 'string',
652
- description: 'Number of the invoice',
653
- example: 'INV-0001'
2458
+ nullable: true,
2459
+ description: 'Decline code. Set only when `status` is `failed`.',
2460
+ example: 'insufficient_funds'
654
2461
  },
655
- balance: {
656
- type: 'number',
657
- format: 'float',
658
- description: 'Balance of the invoice',
659
- example: 100
2462
+ failure_message: {
2463
+ type: 'string',
2464
+ nullable: true,
2465
+ description: 'Explanation of the decline, suitable for display. Set only when `status` is `failed`.',
2466
+ example: 'Your card has insufficient funds.'
2467
+ }
2468
+ },
2469
+ required: [
2470
+ 'invoice_id',
2471
+ 'number',
2472
+ 'amount',
2473
+ 'currency',
2474
+ 'status',
2475
+ 'client_secret',
2476
+ 'failure_code',
2477
+ 'failure_message'
2478
+ ],
2479
+ additionalProperties: false
2480
+ };
2481
+ export const InvoicePaymentResultSchema = {
2482
+ type: 'object',
2483
+ properties: {
2484
+ code: {
2485
+ type: 'string',
2486
+ description: 'Overall outcome: `paid` (nothing outstanding), `processing` (all accepted, not yet settled), `action_required` (one or more await customer authentication), `partially_paid`, `failed`, `nothing_due`, or `bank_transfer_due` (the organization pays by bank transfer; nothing was charged).',
2487
+ example: 'partially_paid',
2488
+ enum: [
2489
+ 'paid',
2490
+ 'processing',
2491
+ 'action_required',
2492
+ 'partially_paid',
2493
+ 'failed',
2494
+ 'nothing_due',
2495
+ 'bank_transfer_due'
2496
+ ]
660
2497
  },
661
- bundleKeys: {
2498
+ message: {
662
2499
  type: 'string',
663
- description: 'Bundle keys of the invoice',
664
- example: 'bundleKey1,bundleKey2'
2500
+ description: 'Summary of the outcome, suitable for display.',
2501
+ example: '1 of 2 open invoices was paid. Invoice CF-0043 was declined: Your card has insufficient funds.'
665
2502
  },
666
- credits: {
2503
+ results: {
667
2504
  type: 'array',
668
2505
  items: {
669
2506
  type: 'object',
670
2507
  properties: {
671
- id: {
672
- type: 'string',
673
- format: 'uuid',
674
- description: 'Unique identifier of the invoice item. UUID v4 string in canonical form',
675
- example: '415026b6-f00f-44f8-968d-fc6ef4d0fc6d'
676
- },
677
- linkedInvoiceItemId: {
678
- type: 'string',
679
- format: 'uuid',
680
- description: 'Unique identifier of the linked invoice item. UUID v4 string in canonical form',
681
- example: '415026b6-f00f-44f8-968d-fc6ef4d0fc6d'
682
- },
683
- productName: {
684
- type: 'string',
685
- description: 'Name of the product',
686
- example: 'Research team'
687
- },
688
- planName: {
689
- type: 'string',
690
- description: 'Name of the plan',
691
- example: 'Plan A'
692
- },
693
- phaseName: {
694
- type: 'string',
695
- description: 'Name of the phase',
696
- example: 'Phase A'
697
- },
698
- usageName: {
699
- type: 'string',
700
- description: 'Name of the usage',
701
- example: 'Usage A'
702
- },
703
- prettyProductName: {
704
- type: 'string',
705
- description: 'Pretty name of the product',
706
- example: 'Research team'
707
- },
708
- prettyPlanName: {
709
- type: 'string',
710
- description: 'Pretty name of the plan',
711
- example: 'Plan A'
712
- },
713
- prettyPhaseName: {
714
- type: 'string',
715
- description: 'Pretty name of the phase',
716
- example: 'Phase A'
717
- },
718
- prettyUsageName: {
719
- type: 'string',
720
- description: 'Pretty name of the usage',
721
- example: 'Usage A'
722
- },
723
- itemType: {
724
- type: 'string',
725
- description: 'Type of the invoice item',
726
- example: 'EXTERNAL_CHARGE',
727
- enum: ['EXTERNAL_CHARGE', 'FIXED', 'RECURRING', 'REPAIR_ADJ', 'CBA_ADJ', 'CREDIT_ADJ', 'ITEM_ADJ', 'USAGE', 'TAX', 'PARENT_SUMMARY']
728
- },
729
- description: {
730
- type: 'string',
731
- description: 'Description of the invoice item',
732
- example: 'Description of the invoice item'
733
- },
734
- startDate: {
2508
+ invoice_id: {
735
2509
  type: 'string',
736
- description: 'Start date of the invoice item',
737
- example: '2019-01-01T00:00:00.000Z'
2510
+ description: 'Identifier of the invoice.',
2511
+ example: 'in_1234567890xCrwxghOTj1234'
738
2512
  },
739
- endDate: {
2513
+ number: {
740
2514
  type: 'string',
741
- description: 'End date of the invoice item',
742
- example: '2019-01-01T00:00:00.000Z'
2515
+ description: 'Invoice number. Null if the invoice has no number.',
2516
+ example: 'CF-0042'
743
2517
  },
744
2518
  amount: {
745
2519
  type: 'number',
746
2520
  format: 'float',
747
- description: 'Amount of the invoice item',
748
- example: 100
749
- },
750
- rate: {
751
- type: 'number',
752
- format: 'float',
753
- description: 'Rate of the invoice item',
754
- example: 100
2521
+ description: 'Amount outstanding when the charge was attempted, in the smallest currency unit.',
2522
+ example: 4200
755
2523
  },
756
2524
  currency: {
757
2525
  type: 'string',
758
- description: 'Currency of the invoice item',
759
- example: 'USD',
760
- enum: ['AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA', 'ARS', 'AUD', 'AWG', 'AZN', 'BAM', 'BBD', 'BDT', 'BGN', 'BHD', 'BIF', 'BMD', 'BND', 'BOB', 'BRL', 'BSD', 'BTN', 'BWP', 'BYR', 'BZD', 'CAD', 'CDF', 'CHF', 'CLP', 'CNY', 'COP', 'CRC', 'CUC', 'CUP', 'CVE', 'CZK', 'DJF', 'DKK', 'DOP', 'DZD', 'EGP', 'ERN', 'ETB', 'EUR', 'FJD', 'FKP', 'GBP', 'GEL', 'GGP', 'GHS', 'GIP', 'GMD', 'GNF', 'GTQ', 'GYD', 'HKD', 'HNL', 'HRK', 'HTG', 'HUF', 'IDR', 'ILS', 'IMP', 'INR', 'IQD', 'IRR', 'ISK', 'JEP', 'JMD', 'JOD', 'JPY', 'KES', 'KGS', 'KHR', 'KMF', 'KPW', 'KRW', 'KWD', 'KYD', 'KZT', 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LTL', 'LVL', 'LYD', 'MAD', 'MDL', 'MGA', 'MKD', 'MMK', 'MNT', 'MOP', 'MRO', 'MUR', 'MVR', 'MWK', 'MXN', 'MYR', 'MZN', 'NAD', 'NGN', 'NIO', 'NOK', 'NPR', 'NZD', 'OMR', 'PAB', 'PEN', 'PGK', 'PHP', 'PKR', 'PLN', 'PYG', 'QAR', 'RON', 'RSD', 'RUB', 'RWF', 'SAR', 'SBD', 'SCR', 'SDG', 'SEK', 'SGD', 'SHP', 'SLL', 'SOS', 'SPL', 'SRD', 'STD', 'SVC', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND', 'TOP', 'TRY', 'TTD', 'TVD', 'TWD', 'TZS', 'UAH', 'UGX', 'USD', 'UYU', 'UZS', 'VEF', 'VND', 'VUV', 'WST', 'XAF', 'XCD', 'XDR', 'XOF', 'XPF', 'YER', 'ZAR', 'ZMW', 'ZWD', 'BTC']
761
- },
762
- quantity: {
763
- type: 'number',
764
- format: 'float',
765
- description: 'Quantity of the invoice item',
766
- example: 1
767
- },
768
- itemDetails: {
769
- type: 'string',
770
- description: 'Details of the invoice item',
771
- example: 'Details of the invoice item'
772
- },
773
- catalogEffectiveDate: {
774
- type: 'string',
775
- description: 'Effective date of the catalog',
776
- example: '2019-01-01T00:00:00.000Z'
777
- },
778
- childItems: {
779
- type: 'array',
780
- items: {
781
- oneOf: [
782
- {
783
- type: 'array'
784
- },
785
- {
786
- type: 'boolean'
787
- },
788
- {
789
- type: 'number'
790
- },
791
- {
792
- type: 'object',
793
- additionalProperties: true
794
- },
795
- {
796
- type: 'string'
797
- }
798
- ]
799
- },
800
- description: 'Child items of the invoice item'
801
- }
802
- },
803
- additionalProperties: false
804
- },
805
- description: 'Credits of the invoice'
806
- },
807
- items: {
808
- type: 'array',
809
- items: {
810
- type: 'object',
811
- properties: {
812
- id: {
813
- type: 'string',
814
- format: 'uuid',
815
- description: 'Unique identifier of the invoice item. UUID v4 string in canonical form',
816
- example: '415026b6-f00f-44f8-968d-fc6ef4d0fc6d'
817
- },
818
- linkedInvoiceItemId: {
819
- type: 'string',
820
- format: 'uuid',
821
- description: 'Unique identifier of the linked invoice item. UUID v4 string in canonical form',
822
- example: '415026b6-f00f-44f8-968d-fc6ef4d0fc6d'
823
- },
824
- productName: {
825
- type: 'string',
826
- description: 'Name of the product',
827
- example: 'Research team'
828
- },
829
- planName: {
830
- type: 'string',
831
- description: 'Name of the plan',
832
- example: 'Plan A'
833
- },
834
- phaseName: {
835
- type: 'string',
836
- description: 'Name of the phase',
837
- example: 'Phase A'
838
- },
839
- usageName: {
840
- type: 'string',
841
- description: 'Name of the usage',
842
- example: 'Usage A'
2526
+ description: 'Currency of the invoice.',
2527
+ example: 'eur'
843
2528
  },
844
- prettyProductName: {
2529
+ status: {
845
2530
  type: 'string',
846
- description: 'Pretty name of the product',
847
- example: 'Research team'
2531
+ description: 'Outcome for this invoice: `paid`, `processing` (accepted, not yet settled), `requires_action` (awaiting customer authentication), or `failed` (declined).',
2532
+ example: 'paid',
2533
+ enum: [
2534
+ 'paid',
2535
+ 'processing',
2536
+ 'requires_action',
2537
+ 'failed'
2538
+ ]
848
2539
  },
849
- prettyPlanName: {
2540
+ client_secret: {
850
2541
  type: 'string',
851
- description: 'Pretty name of the plan',
852
- example: 'Plan A'
2542
+ description: 'Client secret used to complete customer authentication. Set only when `status` is `requires_action`.',
2543
+ example: 'pi_3MtwBwLkdIwHu7ix28a3tqPa_secret_YrKJUKribcBjcG8HVhfZluoGH'
853
2544
  },
854
- prettyPhaseName: {
2545
+ failure_code: {
855
2546
  type: 'string',
856
- description: 'Pretty name of the phase',
857
- example: 'Phase A'
2547
+ description: 'Decline code. Set only when `status` is `failed`.',
2548
+ example: 'insufficient_funds'
858
2549
  },
859
- prettyUsageName: {
2550
+ failure_message: {
860
2551
  type: 'string',
861
- description: 'Pretty name of the usage',
862
- example: 'Usage A'
863
- },
864
- itemType: {
865
- type: 'string',
866
- description: 'Type of the invoice item',
867
- example: 'EXTERNAL_CHARGE',
868
- enum: ['EXTERNAL_CHARGE', 'FIXED', 'RECURRING', 'REPAIR_ADJ', 'CBA_ADJ', 'CREDIT_ADJ', 'ITEM_ADJ', 'USAGE', 'TAX', 'PARENT_SUMMARY']
869
- },
870
- description: {
871
- type: 'string',
872
- description: 'Description of the invoice item',
873
- example: 'Description of the invoice item'
874
- },
875
- startDate: {
876
- type: 'string',
877
- description: 'Start date of the invoice item',
878
- example: '2019-01-01T00:00:00.000Z'
879
- },
880
- endDate: {
881
- type: 'string',
882
- description: 'End date of the invoice item',
883
- example: '2019-01-01T00:00:00.000Z'
884
- },
885
- amount: {
886
- type: 'number',
887
- format: 'float',
888
- description: 'Amount of the invoice item',
889
- example: 100
890
- },
891
- rate: {
892
- type: 'number',
893
- format: 'float',
894
- description: 'Rate of the invoice item',
895
- example: 100
896
- },
897
- currency: {
898
- type: 'string',
899
- description: 'Currency of the invoice item',
900
- example: 'USD',
901
- enum: ['AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA', 'ARS', 'AUD', 'AWG', 'AZN', 'BAM', 'BBD', 'BDT', 'BGN', 'BHD', 'BIF', 'BMD', 'BND', 'BOB', 'BRL', 'BSD', 'BTN', 'BWP', 'BYR', 'BZD', 'CAD', 'CDF', 'CHF', 'CLP', 'CNY', 'COP', 'CRC', 'CUC', 'CUP', 'CVE', 'CZK', 'DJF', 'DKK', 'DOP', 'DZD', 'EGP', 'ERN', 'ETB', 'EUR', 'FJD', 'FKP', 'GBP', 'GEL', 'GGP', 'GHS', 'GIP', 'GMD', 'GNF', 'GTQ', 'GYD', 'HKD', 'HNL', 'HRK', 'HTG', 'HUF', 'IDR', 'ILS', 'IMP', 'INR', 'IQD', 'IRR', 'ISK', 'JEP', 'JMD', 'JOD', 'JPY', 'KES', 'KGS', 'KHR', 'KMF', 'KPW', 'KRW', 'KWD', 'KYD', 'KZT', 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LTL', 'LVL', 'LYD', 'MAD', 'MDL', 'MGA', 'MKD', 'MMK', 'MNT', 'MOP', 'MRO', 'MUR', 'MVR', 'MWK', 'MXN', 'MYR', 'MZN', 'NAD', 'NGN', 'NIO', 'NOK', 'NPR', 'NZD', 'OMR', 'PAB', 'PEN', 'PGK', 'PHP', 'PKR', 'PLN', 'PYG', 'QAR', 'RON', 'RSD', 'RUB', 'RWF', 'SAR', 'SBD', 'SCR', 'SDG', 'SEK', 'SGD', 'SHP', 'SLL', 'SOS', 'SPL', 'SRD', 'STD', 'SVC', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND', 'TOP', 'TRY', 'TTD', 'TVD', 'TWD', 'TZS', 'UAH', 'UGX', 'USD', 'UYU', 'UZS', 'VEF', 'VND', 'VUV', 'WST', 'XAF', 'XCD', 'XDR', 'XOF', 'XPF', 'YER', 'ZAR', 'ZMW', 'ZWD', 'BTC']
902
- },
903
- quantity: {
904
- type: 'number',
905
- format: 'float',
906
- description: 'Quantity of the invoice item',
907
- example: 1
908
- },
909
- itemDetails: {
910
- type: 'string',
911
- description: 'Details of the invoice item',
912
- example: 'Details of the invoice item'
913
- },
914
- catalogEffectiveDate: {
915
- type: 'string',
916
- description: 'Effective date of the catalog',
917
- example: '2019-01-01T00:00:00.000Z'
918
- },
919
- childItems: {
920
- type: 'array',
921
- items: {
922
- oneOf: [
923
- {
924
- type: 'array'
925
- },
926
- {
927
- type: 'boolean'
928
- },
929
- {
930
- type: 'number'
931
- },
932
- {
933
- type: 'object',
934
- additionalProperties: true
935
- },
936
- {
937
- type: 'string'
938
- }
939
- ]
940
- },
941
- description: 'Child items of the invoice item'
2552
+ description: 'Explanation of the decline, suitable for display. Set only when `status` is `failed`.',
2553
+ example: 'Your card has insufficient funds.'
942
2554
  }
943
2555
  },
2556
+ required: [
2557
+ 'invoice_id',
2558
+ 'number',
2559
+ 'amount',
2560
+ 'currency',
2561
+ 'status',
2562
+ 'client_secret',
2563
+ 'failure_code',
2564
+ 'failure_message'
2565
+ ],
944
2566
  additionalProperties: false
945
2567
  },
946
- description: 'Items of the invoice'
2568
+ description: 'One entry per invoice charged, oldest first.'
947
2569
  }
948
2570
  },
2571
+ required: [
2572
+ 'code',
2573
+ 'message',
2574
+ 'results'
2575
+ ],
949
2576
  additionalProperties: false
950
2577
  };
951
- export const OrganizationCreateInputSchema = {
2578
+ export const InvoiceSchema = {
952
2579
  type: 'object',
953
2580
  properties: {
954
- email: {
2581
+ id: {
955
2582
  type: 'string',
956
- format: 'email',
957
- description: 'Email address used for billing as a string.',
958
- example: 'email@example.com'
2583
+ description: 'Unique identifier of the invoice.',
2584
+ example: 'in_1234567890xCrwxghOTj1234'
959
2585
  },
960
- first_name: {
2586
+ number: {
2587
+ type: 'string'
2588
+ },
2589
+ status: {
961
2590
  type: 'string',
962
- description: 'First name of the billing contact person.',
963
- example: 'John'
2591
+ description: 'Status of the invoice',
2592
+ example: 'paid'
964
2593
  },
965
- last_name: {
2594
+ total: {
2595
+ type: 'number',
2596
+ format: 'float',
2597
+ description: 'Total amount of the invoice',
2598
+ example: 100
2599
+ },
2600
+ currency: {
966
2601
  type: 'string',
967
- description: 'Last name of the billing contact person.',
968
- example: 'Doe'
2602
+ description: 'Currency of the invoice',
2603
+ example: 'usd'
969
2604
  },
970
- company_name: {
2605
+ created: {
971
2606
  type: 'string',
972
- maxLength: 120,
973
- minLength: 2,
974
- pattern: '^(?!\\s)(?!.*\\s$)(?=.*[a-zA-ZÆÐƎƏƐƔIJŊŒẞÞǷȜæðǝəɛɣijŋœĸſßþƿȝĄƁÇĐƊĘĦĮƘŁØƠŞȘŢȚŦŲƯY̨Ƴąɓçđɗęħįƙłøơşșţțŧųưy̨ƴÁÀÂÄǍĂĀÃÅǺĄÆǼǢƁĆĊĈČÇĎḌĐƊÐÉÈĖÊËĚĔĒĘẸƎƏƐĠĜǦĞĢƔáàâäǎăāãåǻąæǽǣɓćċĉčçďḍđɗðéèėêëěĕēęẹǝəɛġĝǧğģɣĤḤĦIÍÌİÎÏǏĬĪĨĮỊIJĴĶƘĹĻŁĽĿʼNŃN̈ŇÑŅŊÓÒÔÖǑŎŌÕŐỌØǾƠŒĥḥħıíìiîïǐĭīĩįịijĵķƙĸĺļłľŀʼnńn̈ňñņŋóòôöǒŏōõőọøǿơœŔŘŖŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽẒŕřŗſśŝšşșṣßťţṭŧþúùûüǔŭūũűůųụưẃẁŵẅƿýỳŷÿȳỹƴźżžẓ0-9])[a-zA-ZÆÐƎƏƐƔIJŊŒẞÞǷȜæðǝəɛɣijŋœĸſßþƿȝĄƁÇĐƊĘĦĮƘŁØƠŞȘŢȚŦŲƯY̨Ƴąɓçđɗęħįƙłøơşșţțŧųưy̨ƴÁÀÂÄǍĂĀÃÅǺĄÆǼǢƁĆĊĈČÇĎḌĐƊÐÉÈĖÊËĚĔĒĘẸƎƏƐĠĜǦĞĢƔáàâäǎăāãåǻąæǽǣɓćċĉčçďḍđɗðéèėêëěĕēęẹǝəɛġĝǧğģɣĤḤĦIÍÌİÎÏǏĬĪĨĮỊIJĴĶƘĹĻŁĽĿʼNŃN̈ŇÑŅŊÓÒÔÖǑŎŌÕŐỌØǾƠŒĥḥħıíìiîïǐĭīĩįịijĵķƙĸĺļłľŀʼnńn̈ňñņŋóòôöǒŏōõőọøǿơœŔŘŖŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽẒŕřŗſśŝšşșṣßťţṭŧþúùûüǔŭūũűůųụưẃẁŵẅƿýỳŷÿȳỹƴźżžẓ0-9 -.]{2,}$',
975
- description: 'Name of the legal entity. This name will be used in invoices. Use your first and last name for individual accounts.',
976
- example: 'ACME Corp.'
2607
+ format: 'date-time',
2608
+ description: 'Timestamp when the invoice was issued. ISO 8601 date string in the UTC timezone.',
2609
+ example: '2023-12-20T13:53:32.000Z'
977
2610
  },
978
- password: {
2611
+ period_start: {
979
2612
  type: 'string',
980
- minLength: 8,
981
- 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.'
2613
+ format: 'date-time',
2614
+ description: 'Billing period start timestamp. ISO 8601 date string in the UTC timezone.',
2615
+ example: '2023-12-20T13:53:32.000Z'
2616
+ },
2617
+ period_end: {
2618
+ type: 'string',
2619
+ format: 'date-time',
2620
+ description: 'Billing period end timestamp. ISO 8601 date string in the UTC timezone.',
2621
+ example: '2023-12-20T13:53:32.000Z'
2622
+ },
2623
+ invoice_pdf: {
2624
+ type: 'string'
982
2625
  }
983
2626
  },
984
- required: ['email', 'first_name', 'last_name', 'company_name', 'password'],
2627
+ required: [
2628
+ 'created',
2629
+ 'period_start',
2630
+ 'period_end'
2631
+ ],
985
2632
  additionalProperties: false
986
2633
  };
987
- export const OrganizationSchema = {
2634
+ export const MarketplaceListingFilesSchema = {
988
2635
  type: 'object',
989
2636
  properties: {
990
- id: {
2637
+ chartYaml: {
991
2638
  type: 'string',
992
- format: 'uuid',
993
- description: 'Unique identifier of the organization. UUID v4 string in canonical form',
994
- example: 'e94d30ec-a2dd-4dcb-832c-ac2be144ba91'
2639
+ description: 'Raw Chart.yaml content from the Helm chart',
2640
+ example: 'apiVersion: v2\nname: nginx-ingress\nversion: 1.18.2-cfke.45\nappVersion: 1.9.4'
995
2641
  },
2642
+ valuesYaml: {
2643
+ type: 'string',
2644
+ description: 'Raw values.yaml content from the Helm chart',
2645
+ example: 'replicaCount: 1\nimage:\n repository: nginx\n tag: latest'
2646
+ },
2647
+ valuesSchemaJson: {
2648
+ type: 'string',
2649
+ description: 'JSON schema for values.yaml as a string',
2650
+ example: '{"type":"object","properties":{"replicaCount":{"type":"number"}}}'
2651
+ }
2652
+ },
2653
+ additionalProperties: false
2654
+ };
2655
+ export const MarketplaceListingSchema = {
2656
+ type: 'object',
2657
+ properties: {
996
2658
  name: {
997
2659
  type: 'string',
998
- maxLength: 120,
999
- minLength: 2,
1000
- description: 'Name of the legal entity. This name will be used in invoices. Use your first and last name for individual accounts.',
1001
- example: 'ACME Corp.'
2660
+ description: 'Name of the chart',
2661
+ example: 'nginx-ingress'
1002
2662
  },
1003
- date_created: {
2663
+ versions: {
2664
+ type: 'array',
2665
+ items: {
2666
+ type: 'string',
2667
+ 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-]+)*))?$',
2668
+ description: 'Specific version of the chart',
2669
+ example: '1.18.2-cfke.45'
2670
+ },
2671
+ description: 'Available versions of the chart'
2672
+ },
2673
+ version_channels: {
2674
+ type: 'array',
2675
+ items: {
2676
+ type: 'string',
2677
+ 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-]+)*))?$',
2678
+ description: 'Version channel pattern',
2679
+ example: '1.18.x-cfke.x'
2680
+ },
2681
+ description: 'Version channels for the chart'
2682
+ },
2683
+ latestVersion: {
1004
2684
  type: 'string',
1005
- format: 'date-time',
1006
- description: 'Creation date of the organization. ISO 8601 date string in UTC timezone',
1007
- example: '2023-11-02T16:08:14.338Z'
2685
+ description: 'Latest version of the chart',
2686
+ example: '1.18.2-cfke.45'
1008
2687
  },
1009
- quota: {
2688
+ metadata: {
1010
2689
  type: 'object',
1011
2690
  properties: {
1012
- basic_clusters_max: {
1013
- type: 'integer',
1014
- minimum: 0,
1015
- description: 'Maximum number of Basic clusters that can be created.',
1016
- example: 999
2691
+ name: {
2692
+ type: 'string',
2693
+ description: 'Chart name from metadata',
2694
+ example: 'nginx-ingress'
1017
2695
  },
1018
- basic_clusters_available: {
1019
- type: 'integer',
1020
- description: 'Available number of Basic clusters that can be created.',
1021
- example: 999
2696
+ version: {
2697
+ type: 'string',
2698
+ description: 'Chart version from metadata',
2699
+ example: '1.18.2-cfke.45'
1022
2700
  },
1023
- pro_clusters_max: {
1024
- type: 'integer',
1025
- minimum: 0,
1026
- description: 'Maximum number of Pro clusters that can be created.',
1027
- example: 999
2701
+ description: {
2702
+ type: 'string',
2703
+ description: 'Chart description',
2704
+ example: 'NGINX Ingress Controller for Kubernetes'
2705
+ },
2706
+ appVersion: {
2707
+ type: 'string',
2708
+ description: 'Application version',
2709
+ example: '1.9.4'
2710
+ },
2711
+ apiVersion: {
2712
+ type: 'string',
2713
+ description: 'Helm API version',
2714
+ example: 'v2'
2715
+ },
2716
+ keywords: {
2717
+ type: 'array',
2718
+ items: {
2719
+ type: 'string'
2720
+ },
2721
+ description: 'Chart keywords',
2722
+ example: [
2723
+ 'ingress',
2724
+ 'nginx',
2725
+ 'load-balancer'
2726
+ ]
2727
+ },
2728
+ home: {
2729
+ type: 'string',
2730
+ description: 'Chart home URL',
2731
+ example: 'https://kubernetes.github.io/ingress-nginx/'
2732
+ },
2733
+ icon: {
2734
+ type: 'string',
2735
+ description: 'A URL to an SVG or PNG image to be used as an icon',
2736
+ example: 'https://cloudfleet.ai/images/marketplace/icons/ingress-nginx.png'
2737
+ },
2738
+ sources: {
2739
+ type: 'array',
2740
+ items: {
2741
+ type: 'string'
2742
+ },
2743
+ description: 'Chart source URLs',
2744
+ example: [
2745
+ 'https://github.com/kubernetes/ingress-nginx'
2746
+ ]
2747
+ },
2748
+ maintainers: {
2749
+ type: 'array',
2750
+ items: {
2751
+ type: 'object',
2752
+ properties: {
2753
+ name: {
2754
+ type: 'string',
2755
+ description: 'Maintainer name',
2756
+ example: 'NGINX Team'
2757
+ },
2758
+ email: {
2759
+ type: 'string',
2760
+ description: 'Maintainer email',
2761
+ example: 'support@nginx.org'
2762
+ }
2763
+ },
2764
+ required: [
2765
+ 'name'
2766
+ ],
2767
+ additionalProperties: false
2768
+ },
2769
+ description: 'Chart maintainers'
2770
+ }
2771
+ },
2772
+ required: [
2773
+ 'name',
2774
+ 'version'
2775
+ ],
2776
+ additionalProperties: false,
2777
+ description: 'Chart metadata'
2778
+ }
2779
+ },
2780
+ required: [
2781
+ 'name',
2782
+ 'versions',
2783
+ 'version_channels',
2784
+ 'latestVersion'
2785
+ ],
2786
+ additionalProperties: false
2787
+ };
2788
+ export const OrganizationCreateInputSchema = {
2789
+ type: 'object',
2790
+ properties: {
2791
+ type: {
2792
+ type: 'string',
2793
+ description: 'Type of the organization. `business` for legal entities, `personal` for individuals.',
2794
+ example: 'business',
2795
+ enum: [
2796
+ 'business',
2797
+ 'personal'
2798
+ ]
2799
+ },
2800
+ email: {
2801
+ type: 'string',
2802
+ format: 'email',
2803
+ description: 'Email address used for billing as a string.',
2804
+ example: 'email@example.com'
2805
+ },
2806
+ first_name: {
2807
+ type: 'string',
2808
+ minLength: 1,
2809
+ description: 'First name of the billing contact person.',
2810
+ example: 'John'
2811
+ },
2812
+ last_name: {
2813
+ type: 'string',
2814
+ minLength: 1,
2815
+ description: 'Last name of the billing contact person.',
2816
+ example: 'Doe'
2817
+ },
2818
+ company_name: {
2819
+ type: 'string',
2820
+ maxLength: 120,
2821
+ minLength: 2,
2822
+ pattern: '^(?!\\s)(?!.*\\s$)(?=.*[a-zA-ZÆÐƎƏƐƔIJŊŒẞÞǷȜæðǝəɛɣijŋœĸſßþƿȝĄƁÇĐƊĘĦĮƘŁØƠŞȘŢȚŦŲƯY̨Ƴąɓçđɗęħįƙłøơşșţțŧųưy̨ƴÁÀÂÄǍĂĀÃÅǺĄÆǼǢƁĆĊĈČÇĎḌĐƊÐÉÈĖÊËĚĔĒĘẸƎƏƐĠĜǦĞĢƔáàâäǎăāãåǻąæǽǣɓćċĉčçďḍđɗðéèėêëěĕēęẹǝəɛġĝǧğģɣĤḤĦIÍÌİÎÏǏĬĪĨĮỊIJĴĶƘĹĻŁĽĿʼNŃN̈ŇÑŅŊÓÒÔÖǑŎŌÕŐỌØǾƠŒĥḥħıíìiîïǐĭīĩįịijĵķƙĸĺļłľŀʼnńn̈ňñņŋóòôöǒŏōõőọøǿơœŔŘŖŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽẒŕřŗſśŝšşșṣßťţṭŧþúùûüǔŭūũűůųụưẃẁŵẅƿýỳŷÿȳỹƴźżžẓ0-9])[a-zA-ZÆÐƎƏƐƔIJŊŒẞÞǷȜæðǝəɛɣijŋœĸſßþƿȝĄƁÇĐƊĘĦĮƘŁØƠŞȘŢȚŦŲƯY̨Ƴąɓçđɗęħįƙłøơşșţțŧųưy̨ƴÁÀÂÄǍĂĀÃÅǺĄÆǼǢƁĆĊĈČÇĎḌĐƊÐÉÈĖÊËĚĔĒĘẸƎƏƐĠĜǦĞĢƔáàâäǎăāãåǻąæǽǣɓćċĉčçďḍđɗðéèėêëěĕēęẹǝəɛġĝǧğģɣĤḤĦIÍÌİÎÏǏĬĪĨĮỊIJĴĶƘĹĻŁĽĿʼNŃN̈ŇÑŅŊÓÒÔÖǑŎŌÕŐỌØǾƠŒĥḥħıíìiîïǐĭīĩįịijĵķƙĸĺļłľŀʼnńn̈ňñņŋóòôöǒŏōõőọøǿơœŔŘŖŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽẒŕřŗſśŝšşșṣßťţṭŧþúùûüǔŭūũűůųụưẃẁŵẅƿýỳŷÿȳỹƴźżžẓ0-9 -.]{2,}$',
2823
+ description: 'Name of the legal entity. This name will be used in invoices. Use your first and last name for individual accounts.',
2824
+ example: 'ACME Corp.'
2825
+ },
2826
+ password: {
2827
+ type: 'string',
2828
+ minLength: 8,
2829
+ 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.'
2830
+ }
2831
+ },
2832
+ required: [
2833
+ 'type',
2834
+ 'email',
2835
+ 'first_name',
2836
+ 'last_name',
2837
+ 'company_name',
2838
+ 'password'
2839
+ ],
2840
+ additionalProperties: false
2841
+ };
2842
+ export const OrganizationCreateOutputSchema = {
2843
+ type: 'object',
2844
+ properties: {
2845
+ id: {
2846
+ type: 'string',
2847
+ description: 'Unique identifier of the newly created organization. Generated by the API and safe to use for client-side tracking immediately.',
2848
+ example: 'organization-id'
2849
+ }
2850
+ },
2851
+ required: [
2852
+ 'id'
2853
+ ],
2854
+ additionalProperties: false
2855
+ };
2856
+ export const OrganizationSchema = {
2857
+ type: 'object',
2858
+ properties: {
2859
+ id: {
2860
+ type: 'string',
2861
+ format: 'uuid',
2862
+ description: 'Unique identifier of the organization. UUID v4 string in canonical form',
2863
+ example: 'e94d30ec-a2dd-4dcb-832c-ac2be144ba91'
2864
+ },
2865
+ name: {
2866
+ type: 'string',
2867
+ maxLength: 120,
2868
+ minLength: 2,
2869
+ description: 'Name of the legal entity. This name will be used in invoices. Use your first and last name for individual accounts.',
2870
+ example: 'ACME Corp.'
2871
+ },
2872
+ type: {
2873
+ type: 'string',
2874
+ description: 'Type of the organization. `business` for legal entities, `personal` for individuals.',
2875
+ example: 'business',
2876
+ enum: [
2877
+ 'business',
2878
+ 'personal'
2879
+ ]
2880
+ },
2881
+ date_created: {
2882
+ type: 'string',
2883
+ format: 'date-time',
2884
+ description: 'Creation date of the organization. ISO 8601 date string in UTC timezone',
2885
+ example: '2023-11-02T16:08:14.338Z'
2886
+ },
2887
+ quota: {
2888
+ type: 'object',
2889
+ properties: {
2890
+ basic_clusters_max: {
2891
+ type: 'integer',
2892
+ minimum: 0,
2893
+ description: 'Maximum number of Basic clusters that can be created.',
2894
+ example: 999
2895
+ },
2896
+ basic_clusters_available: {
2897
+ type: 'integer',
2898
+ description: 'Available number of Basic clusters that can be created.',
2899
+ example: 999
2900
+ },
2901
+ pro_clusters_max: {
2902
+ type: 'integer',
2903
+ minimum: 0,
2904
+ description: 'Maximum number of Pro clusters that can be created.',
2905
+ example: 999
1028
2906
  },
1029
2907
  pro_clusters_available: {
1030
2908
  type: 'integer',
1031
2909
  description: 'Available number of Pro clusters that can be created.',
1032
2910
  example: 999
1033
2911
  },
1034
- fleets_max: {
2912
+ enterprise_clusters_max: {
1035
2913
  type: 'integer',
1036
2914
  minimum: 0,
1037
- description: 'Maximum number of fleets that can be created per cluster.',
2915
+ description: 'Maximum number of Enterprise clusters that can be created.',
1038
2916
  example: 999
1039
2917
  },
1040
- managed_fleets_cpu_max: {
2918
+ enterprise_clusters_available: {
2919
+ type: 'integer',
2920
+ description: 'Available number of Enterprise clusters that can be created.',
2921
+ example: 999
2922
+ },
2923
+ fleets_max: {
1041
2924
  type: 'integer',
1042
2925
  minimum: 0,
1043
- description: 'Maximum number of CPU cores per managed fleet.',
2926
+ description: 'Maximum number of fleets that can be created per cluster.',
1044
2927
  example: 999
1045
2928
  },
1046
2929
  cluster_tiers: {
1047
2930
  type: 'array',
1048
2931
  items: {
1049
2932
  type: 'string',
1050
- example: 'basic'
2933
+ example: 'basic'
2934
+ },
2935
+ minItems: 0,
2936
+ description: 'List of Cloudfleet cluster tiers available for the organization.'
2937
+ },
2938
+ regions: {
2939
+ type: 'array',
2940
+ items: {
2941
+ type: 'string',
2942
+ example: 'northamerica-central-1a'
2943
+ },
2944
+ minItems: 1,
2945
+ description: 'List of Cloudfleet control plane regions available for the organization.'
2946
+ },
2947
+ versions: {
2948
+ type: 'array',
2949
+ items: {
2950
+ type: 'object',
2951
+ properties: {
2952
+ id: {
2953
+ type: 'string',
2954
+ description: 'Id of the control plane version. Used in API calls.',
2955
+ example: '1.33.x-cfke.x'
2956
+ },
2957
+ label: {
2958
+ type: 'string',
2959
+ description: 'Label of the control plane version. Used in frontent UI.',
2960
+ example: '1.33.x (Always latest 1.33 patch version)'
2961
+ }
2962
+ },
2963
+ required: [
2964
+ 'id',
2965
+ 'label'
2966
+ ],
2967
+ additionalProperties: false
2968
+ },
2969
+ minItems: 1,
2970
+ description: 'List of CFKE control plane versions available for the organization.'
2971
+ },
2972
+ cfcr_storage_gb: {
2973
+ type: 'integer',
2974
+ minimum: -1,
2975
+ description: 'Organization-level maximum CFCR storage volume in GB. -1 means no limit.',
2976
+ example: 500
2977
+ }
2978
+ },
2979
+ required: [
2980
+ 'basic_clusters_max',
2981
+ 'basic_clusters_available',
2982
+ 'pro_clusters_max',
2983
+ 'pro_clusters_available',
2984
+ 'enterprise_clusters_max',
2985
+ 'enterprise_clusters_available',
2986
+ 'fleets_max',
2987
+ 'cluster_tiers',
2988
+ 'regions',
2989
+ 'versions',
2990
+ 'cfcr_storage_gb'
2991
+ ],
2992
+ additionalProperties: false,
2993
+ 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.'
2994
+ },
2995
+ status: {
2996
+ type: 'string',
2997
+ description: 'Status of the organization. Can be `active` or `closed`, or `suspended`.',
2998
+ enum: [
2999
+ 'active',
3000
+ 'closed',
3001
+ 'suspended'
3002
+ ]
3003
+ },
3004
+ verification: {
3005
+ type: 'string',
3006
+ 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.',
3007
+ example: 'verified',
3008
+ enum: [
3009
+ 'none',
3010
+ 'submitted',
3011
+ 'verified'
3012
+ ]
3013
+ }
3014
+ },
3015
+ required: [
3016
+ 'id',
3017
+ 'type',
3018
+ 'date_created',
3019
+ 'quota',
3020
+ 'status',
3021
+ 'verification'
3022
+ ],
3023
+ additionalProperties: false
3024
+ };
3025
+ export const PaymentMethodSchema = {
3026
+ type: 'object',
3027
+ properties: {
3028
+ id: {
3029
+ type: 'string',
3030
+ 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.',
3031
+ example: 'pm_1MtwBwLkdIwHu7ix28a3tqPa'
3032
+ },
3033
+ type: {
3034
+ type: 'string',
3035
+ description: 'Payment method type. `card`, `sepa_debit` for SEPA Direct Debit (business accounts only), or `bank_transfer` for paying invoices by bank transfer.',
3036
+ example: 'card',
3037
+ enum: [
3038
+ 'card',
3039
+ 'sepa_debit',
3040
+ 'bank_transfer'
3041
+ ]
3042
+ },
3043
+ last4: {
3044
+ type: 'string',
3045
+ nullable: true,
3046
+ 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.',
3047
+ example: '4242'
3048
+ },
3049
+ exp_month: {
3050
+ type: 'integer',
3051
+ minimum: 1,
3052
+ maximum: 12,
3053
+ nullable: true,
3054
+ description: 'Two-digit number representing the card\'s expiration month. Null for SEPA Direct Debit and bank transfer.',
3055
+ example: 12
3056
+ },
3057
+ exp_year: {
3058
+ type: 'integer',
3059
+ nullable: true,
3060
+ 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.',
3061
+ example: 2028
3062
+ },
3063
+ brand: {
3064
+ type: 'string',
3065
+ nullable: true,
3066
+ 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.',
3067
+ example: 'visa'
3068
+ },
3069
+ iban: {
3070
+ type: 'string',
3071
+ nullable: true,
3072
+ 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.',
3073
+ example: 'DE11243015658023127510'
3074
+ },
3075
+ bic: {
3076
+ type: 'string',
3077
+ nullable: true,
3078
+ description: 'BIC/SWIFT of the destination bank for bank transfers. Set only for `bank_transfer`; null otherwise.',
3079
+ example: 'SOGEDEFFXXX'
3080
+ },
3081
+ account_holder_name: {
3082
+ type: 'string',
3083
+ nullable: true,
3084
+ description: 'Account holder name of the destination bank account for bank transfers. Set only for `bank_transfer`; null otherwise.',
3085
+ example: 'Cloudfleet GmbH'
3086
+ },
3087
+ is_default: {
3088
+ type: 'boolean',
3089
+ 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).',
3090
+ example: true
3091
+ }
3092
+ },
3093
+ required: [
3094
+ 'id',
3095
+ 'type',
3096
+ 'last4',
3097
+ 'exp_month',
3098
+ 'exp_year',
3099
+ 'brand',
3100
+ 'iban',
3101
+ 'bic',
3102
+ 'account_holder_name',
3103
+ 'is_default'
3104
+ ],
3105
+ additionalProperties: false
3106
+ };
3107
+ export const PlatformQuotaSchema = {
3108
+ type: 'object',
3109
+ properties: {
3110
+ basic_clusters_max: {
3111
+ type: 'integer',
3112
+ minimum: 0,
3113
+ description: 'Maximum number of Basic clusters that can be created.',
3114
+ example: 999
3115
+ },
3116
+ basic_clusters_available: {
3117
+ type: 'integer',
3118
+ description: 'Available number of Basic clusters that can be created.',
3119
+ example: 999
3120
+ },
3121
+ pro_clusters_max: {
3122
+ type: 'integer',
3123
+ minimum: 0,
3124
+ description: 'Maximum number of Pro clusters that can be created.',
3125
+ example: 999
3126
+ },
3127
+ pro_clusters_available: {
3128
+ type: 'integer',
3129
+ description: 'Available number of Pro clusters that can be created.',
3130
+ example: 999
3131
+ },
3132
+ enterprise_clusters_max: {
3133
+ type: 'integer',
3134
+ minimum: 0,
3135
+ description: 'Maximum number of Enterprise clusters that can be created.',
3136
+ example: 999
3137
+ },
3138
+ enterprise_clusters_available: {
3139
+ type: 'integer',
3140
+ description: 'Available number of Enterprise clusters that can be created.',
3141
+ example: 999
3142
+ },
3143
+ fleets_max: {
3144
+ type: 'integer',
3145
+ minimum: 0,
3146
+ description: 'Maximum number of fleets that can be created per cluster.',
3147
+ example: 999
3148
+ },
3149
+ cluster_tiers: {
3150
+ type: 'array',
3151
+ items: {
3152
+ type: 'string',
3153
+ example: 'basic'
3154
+ },
3155
+ minItems: 0,
3156
+ description: 'List of Cloudfleet cluster tiers available for the organization.'
3157
+ },
3158
+ regions: {
3159
+ type: 'array',
3160
+ items: {
3161
+ type: 'string',
3162
+ example: 'northamerica-central-1a'
3163
+ },
3164
+ minItems: 1,
3165
+ description: 'List of Cloudfleet control plane regions available for the organization.'
3166
+ },
3167
+ versions: {
3168
+ type: 'array',
3169
+ items: {
3170
+ type: 'object',
3171
+ properties: {
3172
+ id: {
3173
+ type: 'string',
3174
+ description: 'Id of the control plane version. Used in API calls.',
3175
+ example: '1.33.x-cfke.x'
3176
+ },
3177
+ label: {
3178
+ type: 'string',
3179
+ description: 'Label of the control plane version. Used in frontent UI.',
3180
+ example: '1.33.x (Always latest 1.33 patch version)'
3181
+ }
3182
+ },
3183
+ required: [
3184
+ 'id',
3185
+ 'label'
3186
+ ],
3187
+ additionalProperties: false
3188
+ },
3189
+ minItems: 1,
3190
+ description: 'List of CFKE control plane versions available for the organization.'
3191
+ },
3192
+ cfcr_storage_gb: {
3193
+ type: 'integer',
3194
+ minimum: -1,
3195
+ description: 'Organization-level maximum CFCR storage volume in GB. -1 means no limit.',
3196
+ example: 500
3197
+ }
3198
+ },
3199
+ required: [
3200
+ 'basic_clusters_max',
3201
+ 'basic_clusters_available',
3202
+ 'pro_clusters_max',
3203
+ 'pro_clusters_available',
3204
+ 'enterprise_clusters_max',
3205
+ 'enterprise_clusters_available',
3206
+ 'fleets_max',
3207
+ 'cluster_tiers',
3208
+ 'regions',
3209
+ 'versions',
3210
+ 'cfcr_storage_gb'
3211
+ ],
3212
+ additionalProperties: false
3213
+ };
3214
+ export const RegistryRepositorySchema = {
3215
+ type: 'object',
3216
+ properties: {
3217
+ name: {
3218
+ type: 'string',
3219
+ description: 'Repository name.',
3220
+ example: 'my-app'
3221
+ },
3222
+ region: {
3223
+ type: 'string',
3224
+ description: 'Registry region.',
3225
+ example: 'northamerica'
3226
+ },
3227
+ uri: {
3228
+ type: 'string',
3229
+ description: 'Full URI of the repository.',
3230
+ example: 'ssds123e-6651-4e5d-9c04-079f6532989b.northamerica.registry.cloudfleet.dev/my-app'
3231
+ }
3232
+ },
3233
+ required: [
3234
+ 'name',
3235
+ 'region',
3236
+ 'uri'
3237
+ ],
3238
+ additionalProperties: false
3239
+ };
3240
+ export const RegistryRepositoryWithTagsSchema = {
3241
+ type: 'object',
3242
+ properties: {
3243
+ name: {
3244
+ type: 'string',
3245
+ description: 'Repository name.',
3246
+ example: 'my-app'
3247
+ },
3248
+ region: {
3249
+ type: 'string',
3250
+ description: 'Registry region.',
3251
+ example: 'northamerica'
3252
+ },
3253
+ uri: {
3254
+ type: 'string',
3255
+ description: 'Full URI of the repository.',
3256
+ example: 'ssds123e-6651-4e5d-9c04-079f6532989b.northamerica.registry.cloudfleet.dev/my-app'
3257
+ },
3258
+ tags: {
3259
+ type: 'array',
3260
+ items: {
3261
+ type: 'object',
3262
+ properties: {
3263
+ name: {
3264
+ type: 'string',
3265
+ description: 'Tag name.',
3266
+ example: 'latest'
3267
+ },
3268
+ size: {
3269
+ type: 'number',
3270
+ format: 'float',
3271
+ description: 'Size of the tag in bytes.',
3272
+ example: 123456789
3273
+ },
3274
+ mediaType: {
3275
+ type: 'string',
3276
+ description: 'Media type of the manifest.',
3277
+ example: 'application/vnd.docker.distribution.manifest.v2+json'
3278
+ },
3279
+ platforms: {
3280
+ type: 'array',
3281
+ items: {
3282
+ type: 'string'
3283
+ },
3284
+ description: 'Array of platform strings for multi-arch images (e.g., linux/amd64, linux/arm64).',
3285
+ example: [
3286
+ 'linux/amd64',
3287
+ 'linux/arm64'
3288
+ ]
3289
+ }
3290
+ },
3291
+ required: [
3292
+ 'name',
3293
+ 'size'
3294
+ ],
3295
+ additionalProperties: false
3296
+ },
3297
+ description: 'Array of tags in the repository.'
3298
+ },
3299
+ totalSize: {
3300
+ type: 'number',
3301
+ format: 'float',
3302
+ description: 'Total size of all tags in the repository in bytes.',
3303
+ example: 987654321
3304
+ }
3305
+ },
3306
+ required: [
3307
+ 'name',
3308
+ 'region',
3309
+ 'uri',
3310
+ 'tags',
3311
+ 'totalSize'
3312
+ ],
3313
+ additionalProperties: false
3314
+ };
3315
+ export const RegistryTagSchema = {
3316
+ type: 'object',
3317
+ properties: {
3318
+ name: {
3319
+ type: 'string',
3320
+ description: 'Tag name.',
3321
+ example: 'latest'
3322
+ },
3323
+ digest: {
3324
+ type: 'string',
3325
+ description: 'Manifest digest for pulling by digest.',
3326
+ example: 'sha256:abcd1234ef567890abcd1234ef567890abcd1234ef567890abcd1234ef567890'
3327
+ },
3328
+ mediaType: {
3329
+ type: 'string',
3330
+ description: 'Media type of the manifest.',
3331
+ example: 'application/vnd.docker.distribution.manifest.v2+json'
3332
+ },
3333
+ config: {
3334
+ type: 'object',
3335
+ properties: {
3336
+ size: {
3337
+ type: 'number',
3338
+ format: 'float',
3339
+ description: 'Size of the config in bytes.',
3340
+ example: 1234
3341
+ }
3342
+ },
3343
+ required: [
3344
+ 'size'
3345
+ ],
3346
+ additionalProperties: false,
3347
+ description: 'Manifest config metadata.'
3348
+ },
3349
+ layers: {
3350
+ type: 'array',
3351
+ items: {
3352
+ type: 'object',
3353
+ properties: {
3354
+ digest: {
3355
+ type: 'string',
3356
+ description: 'Digest of the layer.',
3357
+ example: 'sha256:abcd1234ef567890abcd1234ef567890abcd1234ef567890abcd1234ef567890'
3358
+ },
3359
+ size: {
3360
+ type: 'number',
3361
+ format: 'float',
3362
+ description: 'Size of the layer in bytes.',
3363
+ example: 5678
3364
+ }
3365
+ },
3366
+ required: [
3367
+ 'size'
3368
+ ],
3369
+ additionalProperties: false
3370
+ },
3371
+ description: 'Array of layer metadata.'
3372
+ },
3373
+ manifests: {
3374
+ type: 'array',
3375
+ items: {
3376
+ type: 'object',
3377
+ properties: {
3378
+ digest: {
3379
+ type: 'string',
3380
+ description: 'Digest of the manifest.',
3381
+ example: 'sha256:abcd1234ef567890abcd1234ef567890abcd1234ef567890abcd1234ef567890'
3382
+ },
3383
+ platform: {
3384
+ type: 'object',
3385
+ properties: {
3386
+ architecture: {
3387
+ type: 'string',
3388
+ description: 'Architecture of the platform.',
3389
+ example: 'amd64'
3390
+ },
3391
+ os: {
3392
+ type: 'string',
3393
+ description: 'Operating system of the platform.',
3394
+ example: 'linux'
3395
+ },
3396
+ variant: {
3397
+ type: 'string',
3398
+ description: 'Variant of the platform (e.g., v7, v8 for ARM).',
3399
+ example: 'v8'
3400
+ }
3401
+ },
3402
+ required: [
3403
+ 'architecture',
3404
+ 'os'
3405
+ ],
3406
+ additionalProperties: false,
3407
+ description: 'Platform information for the manifest.'
3408
+ },
3409
+ layers: {
3410
+ type: 'array',
3411
+ items: {
3412
+ type: 'object',
3413
+ properties: {
3414
+ digest: {
3415
+ type: 'string',
3416
+ description: 'Digest of the layer.',
3417
+ example: 'sha256:abcd1234ef567890abcd1234ef567890abcd1234ef567890abcd1234ef567890'
3418
+ },
3419
+ size: {
3420
+ type: 'number',
3421
+ format: 'float',
3422
+ description: 'Size of the layer in bytes.',
3423
+ example: 5678
3424
+ }
3425
+ },
3426
+ required: [
3427
+ 'size'
3428
+ ],
3429
+ additionalProperties: false
3430
+ },
3431
+ description: 'Layers for this platform.'
3432
+ },
3433
+ size: {
3434
+ type: 'number',
3435
+ format: 'float',
3436
+ description: 'Total size of this platform manifest in bytes.',
3437
+ example: 12345678
3438
+ }
3439
+ },
3440
+ required: [
3441
+ 'digest'
3442
+ ],
3443
+ additionalProperties: false
3444
+ },
3445
+ description: 'Array of manifests for multi-arch images.'
3446
+ },
3447
+ size: {
3448
+ type: 'number',
3449
+ format: 'float',
3450
+ description: 'Total size of the tag in bytes.',
3451
+ example: 123456789
3452
+ },
3453
+ region: {
3454
+ type: 'string',
3455
+ description: 'Registry region.',
3456
+ example: 'northamerica'
3457
+ },
3458
+ repository: {
3459
+ type: 'string',
3460
+ description: 'Repository name.',
3461
+ example: 'my-app'
3462
+ },
3463
+ uri: {
3464
+ type: 'string',
3465
+ description: 'Full URI of the tag.',
3466
+ example: 'ssds123e-6651-4e5d-9c04-079f6532989b.northamerica.registry.cloudfleet.dev/my-app:latest'
3467
+ }
3468
+ },
3469
+ required: [
3470
+ 'name',
3471
+ 'digest',
3472
+ 'size',
3473
+ 'region',
3474
+ 'repository',
3475
+ 'uri'
3476
+ ],
3477
+ additionalProperties: false
3478
+ };
3479
+ export const RoadmapItemCreateInputSchema = {
3480
+ type: 'object',
3481
+ properties: {
3482
+ text: {
3483
+ type: 'string',
3484
+ maxLength: 500,
3485
+ minLength: 1,
3486
+ description: 'Your suggestion in one or two sentences. It is reviewed before it appears on the roadmap.',
3487
+ example: 'Support for ARM nodes on Hetzner.'
3488
+ }
3489
+ },
3490
+ required: [
3491
+ 'text'
3492
+ ],
3493
+ additionalProperties: false
3494
+ };
3495
+ export const RoadmapItemSchema = {
3496
+ type: 'object',
3497
+ properties: {
3498
+ id: {
3499
+ type: 'string',
3500
+ description: 'Unique identifier of the roadmap item (Mongo ObjectId).',
3501
+ example: '60c72b2f9f1b2c001f8e4d3a'
3502
+ },
3503
+ text: {
3504
+ type: 'string',
3505
+ description: 'Short description of the roadmap item.',
3506
+ example: 'Support for ARM nodes on Hetzner.'
3507
+ },
3508
+ vote: {
3509
+ type: 'integer',
3510
+ nullable: true,
3511
+ description: 'The caller\'s vote on this item: -1 (down), 1 (up), 2 (double up), or null if the caller has not voted.',
3512
+ example: 1,
3513
+ enum: [
3514
+ -1,
3515
+ 1,
3516
+ 2
3517
+ ]
3518
+ }
3519
+ },
3520
+ required: [
3521
+ 'id',
3522
+ 'text',
3523
+ 'vote'
3524
+ ],
3525
+ additionalProperties: false
3526
+ };
3527
+ export const RoadmapVoteInputSchema = {
3528
+ type: 'object',
3529
+ properties: {
3530
+ value: {
3531
+ type: 'integer',
3532
+ description: 'Vote value: -1 (down), 1 (up), or 2 (double up).',
3533
+ example: 1,
3534
+ enum: [
3535
+ -1,
3536
+ 1,
3537
+ 2
3538
+ ]
3539
+ }
3540
+ },
3541
+ required: [
3542
+ 'value'
3543
+ ],
3544
+ additionalProperties: false
3545
+ };
3546
+ export const TicketAttachmentSchema = {
3547
+ type: 'object',
3548
+ properties: {
3549
+ id: {
3550
+ type: 'string',
3551
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
3552
+ example: '60c72b2f9f1b2c001f8e4d3c'
3553
+ },
3554
+ filename: {
3555
+ type: 'string',
3556
+ description: 'Original filename as uploaded.',
3557
+ example: 'debug.log'
3558
+ },
3559
+ content_type: {
3560
+ type: 'string',
3561
+ description: 'MIME content type of the attachment.',
3562
+ example: 'text/plain'
3563
+ },
3564
+ size: {
3565
+ type: 'integer',
3566
+ description: 'Size of the attachment in bytes.',
3567
+ example: 12345
3568
+ }
3569
+ },
3570
+ required: [
3571
+ 'id',
3572
+ 'filename',
3573
+ 'content_type',
3574
+ 'size'
3575
+ ],
3576
+ additionalProperties: false
3577
+ };
3578
+ export const TicketCreateInputSchema = {
3579
+ type: 'object',
3580
+ properties: {
3581
+ category: {
3582
+ type: 'string',
3583
+ description: 'Ticket category. Drives auto-assignment and may carry a subcategory in `properties`.',
3584
+ example: 'technical',
3585
+ enum: [
3586
+ 'billing',
3587
+ 'technical',
3588
+ 'general'
3589
+ ]
3590
+ },
3591
+ body: {
3592
+ type: 'string',
3593
+ maxLength: 50000,
3594
+ minLength: 1,
3595
+ pattern: '\\S',
3596
+ description: 'Initial message body in markdown. There is no separate subject — the first message body is the description.',
3597
+ example: 'My cluster cannot reach the registry. Logs attached.'
3598
+ },
3599
+ properties: {
3600
+ type: 'object',
3601
+ additionalProperties: true,
3602
+ description: 'Free-form key/value bag set by the UI (e.g. `subcategory`, `cluster_id`, `cluster_name`, `region`).',
3603
+ example: {
3604
+ subcategory: 'cluster-question',
3605
+ cluster_id: '60c72b2f9f1b2c001f8e4d3a'
3606
+ }
3607
+ },
3608
+ grant_support_access: {
3609
+ type: 'boolean',
3610
+ description: 'Grant Cloudfleet support staff access to the organization\'s resources while the ticket is open. Access cannot be revoked; it ends when the ticket is closed.',
3611
+ example: true
3612
+ }
3613
+ },
3614
+ required: [
3615
+ 'category',
3616
+ 'body'
3617
+ ],
3618
+ additionalProperties: false
3619
+ };
3620
+ export const TicketMessageInputSchema = {
3621
+ type: 'object',
3622
+ properties: {
3623
+ body: {
3624
+ type: 'string',
3625
+ maxLength: 50000,
3626
+ minLength: 1,
3627
+ pattern: '\\S',
3628
+ description: 'Reply body in markdown.',
3629
+ example: 'Thanks — that resolved it on my side.'
3630
+ }
3631
+ },
3632
+ required: [
3633
+ 'body'
3634
+ ],
3635
+ additionalProperties: false
3636
+ };
3637
+ export const TicketMessageSchema = {
3638
+ type: 'object',
3639
+ properties: {
3640
+ id: {
3641
+ type: 'string',
3642
+ description: 'Unique identifier of the message (Mongo ObjectId).',
3643
+ example: '60c72b2f9f1b2c001f8e4d3b'
3644
+ },
3645
+ type: {
3646
+ type: 'string',
3647
+ description: 'Message type. Internal notes are filtered out of customer-facing responses.',
3648
+ example: 'customer_reply',
3649
+ enum: [
3650
+ 'customer_reply',
3651
+ 'agent_reply'
3652
+ ]
3653
+ },
3654
+ body: {
3655
+ type: 'string',
3656
+ description: 'Message body in markdown.',
3657
+ example: 'Thanks — that resolved it on my side.'
3658
+ },
3659
+ author_first_name: {
3660
+ type: 'string',
3661
+ nullable: true,
3662
+ description: 'First name of the author. Null when not provided.',
3663
+ example: 'Jane'
3664
+ },
3665
+ author_last_name: {
3666
+ type: 'string',
3667
+ nullable: true,
3668
+ description: 'Last name of the author. Null when not provided.',
3669
+ example: 'Doe'
3670
+ },
3671
+ attachments: {
3672
+ type: 'array',
3673
+ items: {
3674
+ type: 'object',
3675
+ properties: {
3676
+ id: {
3677
+ type: 'string',
3678
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
3679
+ example: '60c72b2f9f1b2c001f8e4d3c'
1051
3680
  },
1052
- minItems: 0,
1053
- description: 'List of Cloudfleet cluster tiers available for the organization.'
1054
- },
1055
- regions: {
1056
- type: 'array',
1057
- items: {
3681
+ filename: {
1058
3682
  type: 'string',
1059
- example: 'northamerica-central-1'
3683
+ description: 'Original filename as uploaded.',
3684
+ example: 'debug.log'
1060
3685
  },
1061
- minItems: 1,
1062
- description: 'List of Cloudfleet control plane regions available for the organization.'
1063
- },
1064
- versions: {
1065
- type: 'array',
1066
- items: {
1067
- type: 'object',
1068
- properties: {
1069
- id: {
1070
- type: 'string',
1071
- description: 'Id of the control plane version. Used in API calls.',
1072
- example: '1.29.x-cfke.x'
1073
- },
1074
- label: {
1075
- type: 'string',
1076
- description: 'Label of the control plane version. Used in frontent UI.',
1077
- example: '1.29.x (Always latest 1.29 patch version)'
1078
- }
1079
- },
1080
- required: ['id', 'label'],
1081
- additionalProperties: false
3686
+ content_type: {
3687
+ type: 'string',
3688
+ description: 'MIME content type of the attachment.',
3689
+ example: 'text/plain'
1082
3690
  },
1083
- minItems: 1,
1084
- description: 'List of CFKE control plane versions available for the organization.'
1085
- }
3691
+ size: {
3692
+ type: 'integer',
3693
+ description: 'Size of the attachment in bytes.',
3694
+ example: 12345
3695
+ }
3696
+ },
3697
+ required: [
3698
+ 'id',
3699
+ 'filename',
3700
+ 'content_type',
3701
+ 'size'
3702
+ ],
3703
+ additionalProperties: false
1086
3704
  },
1087
- required: ['basic_clusters_max', 'basic_clusters_available', 'pro_clusters_max', 'pro_clusters_available', 'fleets_max', 'managed_fleets_cpu_max', 'cluster_tiers', 'regions', 'versions'],
1088
- additionalProperties: false,
1089
- 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.'
3705
+ description: 'Attachments associated with this message.',
3706
+ example: []
1090
3707
  },
1091
- status: {
3708
+ date_created: {
1092
3709
  type: 'string',
1093
- description: 'Status of the organization. Can be `active` or `closed`, or `suspended`.',
1094
- enum: ['active', 'closed', 'suspended']
3710
+ format: 'date-time',
3711
+ description: 'Creation date of the message. ISO 8601 UTC.',
3712
+ example: '2026-05-11T16:08:14.338Z'
1095
3713
  }
1096
3714
  },
1097
- required: ['id', 'date_created', 'quota', 'status'],
3715
+ required: [
3716
+ 'id',
3717
+ 'type',
3718
+ 'body',
3719
+ 'date_created'
3720
+ ],
1098
3721
  additionalProperties: false
1099
3722
  };
1100
- export const PaymentMethodSchema = {
3723
+ export const TicketSchema = {
1101
3724
  type: 'object',
1102
3725
  properties: {
1103
3726
  id: {
1104
3727
  type: 'string',
1105
- format: 'uuid',
1106
- description: 'Unique identifier of the organization. UUID v4 string in canonical form.',
1107
- example: 'e94d30ec-a2dd-4dcb-832c-ac2be144ba91'
3728
+ description: 'Unique identifier of the ticket (Mongo ObjectId).',
3729
+ example: '60c72b2f9f1b2c001f8e4d3a'
3730
+ },
3731
+ status: {
3732
+ type: 'string',
3733
+ description: 'Current state of the ticket.',
3734
+ example: 'waiting_on_us',
3735
+ enum: [
3736
+ 'waiting_on_us',
3737
+ 'waiting_on_user',
3738
+ 'closed'
3739
+ ]
3740
+ },
3741
+ category: {
3742
+ type: 'string',
3743
+ description: 'Ticket category.',
3744
+ example: 'technical',
3745
+ enum: [
3746
+ 'billing',
3747
+ 'technical',
3748
+ 'general'
3749
+ ]
3750
+ },
3751
+ summary: {
3752
+ type: 'string',
3753
+ description: 'First 128 characters of the initial message body, with markdown formatting and newlines stripped. Used for ticket list previews.',
3754
+ example: 'My cluster cannot reach the registry. Logs attached.'
1108
3755
  },
1109
- setup: {
3756
+ support_access_granted: {
1110
3757
  type: 'boolean',
1111
- description: 'Whether organization payment method was set up and ready to use for payments.',
3758
+ description: 'Whether Cloudfleet support staff currently have access to the organization\'s resources. True once access is granted and until the ticket is closed.',
1112
3759
  example: true
1113
3760
  },
1114
- type: {
3761
+ support_access_granted_at: {
1115
3762
  type: 'string',
3763
+ format: 'date-time',
1116
3764
  nullable: true,
1117
- description: 'Payment method type type. Only `card` payments supported at the moment.',
1118
- example: 'card',
1119
- enum: ['card']
3765
+ description: 'When support access was granted. Null if it never was. Kept after the ticket is closed.',
3766
+ example: '2026-05-11T16:08:14.338Z'
1120
3767
  },
1121
- last4: {
3768
+ closed_at: {
1122
3769
  type: 'string',
3770
+ format: 'date-time',
1123
3771
  nullable: true,
1124
- description: 'Last 4 digits of the payment card number.',
1125
- example: '4242'
1126
- },
1127
- exp_month: {
1128
- type: 'integer',
1129
- minimum: 1,
1130
- maximum: 12,
1131
- nullable: true,
1132
- description: "Two-digit number representing the card's expiration month.",
1133
- example: '12'
3772
+ description: 'Closure timestamp. Null while the ticket is open.',
3773
+ example: '2026-05-18T16:08:14.338Z'
1134
3774
  },
1135
- exp_year: {
1136
- type: 'integer',
1137
- minimum: 2024,
1138
- nullable: true,
1139
- description: "Four-digit number representing the card's expiration year.",
1140
- example: '2028'
3775
+ date_created: {
3776
+ type: 'string',
3777
+ format: 'date-time',
3778
+ description: 'Creation date of the ticket. ISO 8601 UTC.',
3779
+ example: '2026-05-11T16:08:14.338Z'
1141
3780
  },
1142
- brand: {
3781
+ date_updated: {
1143
3782
  type: 'string',
1144
- nullable: true,
1145
- description: 'Payment card brand. Can be `amex`, `diners`, `discover`, `eftpos_au`, `jcb`, `mastercard`, `unionpay`, `visa`, or `unknown`.',
1146
- example: 'visa',
1147
- enum: ['amex', 'diners', 'discover', 'eftpos_au', 'jcb', 'mastercard', 'unionpay', 'visa', 'unknown']
3783
+ format: 'date-time',
3784
+ description: 'Last update date of the ticket. ISO 8601 UTC.',
3785
+ example: '2026-05-11T16:08:14.338Z'
3786
+ },
3787
+ messages: {
3788
+ type: 'array',
3789
+ items: {
3790
+ type: 'object',
3791
+ properties: {
3792
+ id: {
3793
+ type: 'string',
3794
+ description: 'Unique identifier of the message (Mongo ObjectId).',
3795
+ example: '60c72b2f9f1b2c001f8e4d3b'
3796
+ },
3797
+ type: {
3798
+ type: 'string',
3799
+ description: 'Message type. Internal notes are filtered out of customer-facing responses.',
3800
+ example: 'customer_reply',
3801
+ enum: [
3802
+ 'customer_reply',
3803
+ 'agent_reply'
3804
+ ]
3805
+ },
3806
+ body: {
3807
+ type: 'string',
3808
+ description: 'Message body in markdown.',
3809
+ example: 'Thanks — that resolved it on my side.'
3810
+ },
3811
+ author_first_name: {
3812
+ type: 'string',
3813
+ description: 'First name of the author. Null when not provided.',
3814
+ example: 'Jane'
3815
+ },
3816
+ author_last_name: {
3817
+ type: 'string',
3818
+ description: 'Last name of the author. Null when not provided.',
3819
+ example: 'Doe'
3820
+ },
3821
+ attachments: {
3822
+ type: 'array',
3823
+ items: {
3824
+ type: 'object',
3825
+ properties: {
3826
+ id: {
3827
+ type: 'string',
3828
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
3829
+ example: '60c72b2f9f1b2c001f8e4d3c'
3830
+ },
3831
+ filename: {
3832
+ type: 'string',
3833
+ description: 'Original filename as uploaded.',
3834
+ example: 'debug.log'
3835
+ },
3836
+ content_type: {
3837
+ type: 'string',
3838
+ description: 'MIME content type of the attachment.',
3839
+ example: 'text/plain'
3840
+ },
3841
+ size: {
3842
+ type: 'integer',
3843
+ description: 'Size of the attachment in bytes.',
3844
+ example: 12345
3845
+ }
3846
+ },
3847
+ required: [
3848
+ 'id',
3849
+ 'filename',
3850
+ 'content_type',
3851
+ 'size'
3852
+ ],
3853
+ additionalProperties: false
3854
+ },
3855
+ description: 'Attachments associated with this message.',
3856
+ example: []
3857
+ },
3858
+ date_created: {
3859
+ type: 'string',
3860
+ format: 'date-time',
3861
+ description: 'Creation date of the message. ISO 8601 UTC.',
3862
+ example: '2026-05-11T16:08:14.338Z'
3863
+ }
3864
+ },
3865
+ required: [
3866
+ 'id',
3867
+ 'type',
3868
+ 'body',
3869
+ 'date_created'
3870
+ ],
3871
+ additionalProperties: false
3872
+ },
3873
+ description: 'Messages on the ticket in chronological order. Internal notes are excluded. Returned by the detail endpoint only.'
1148
3874
  }
1149
3875
  },
1150
- required: ['id', 'setup', 'type', 'last4', 'exp_month', 'exp_year', 'brand'],
3876
+ required: [
3877
+ 'id',
3878
+ 'status',
3879
+ 'category',
3880
+ 'summary',
3881
+ 'support_access_granted',
3882
+ 'support_access_granted_at',
3883
+ 'date_created',
3884
+ 'date_updated'
3885
+ ],
1151
3886
  additionalProperties: false
1152
3887
  };
1153
3888
  export const TokenCreateInputSchema = {
@@ -1165,10 +3900,16 @@ export const TokenCreateInputSchema = {
1165
3900
  type: 'string',
1166
3901
  description: 'Role assumed by the token.',
1167
3902
  example: 'User',
1168
- enum: ['Administrator', 'User']
3903
+ enum: [
3904
+ 'Administrator',
3905
+ 'User'
3906
+ ]
1169
3907
  }
1170
3908
  },
1171
- required: ['name', 'role'],
3909
+ required: [
3910
+ 'name',
3911
+ 'role'
3912
+ ],
1172
3913
  additionalProperties: false
1173
3914
  };
1174
3915
  export const TokenSchema = {
@@ -1186,7 +3927,10 @@ export const TokenSchema = {
1186
3927
  type: 'string',
1187
3928
  description: 'Role assumed by the token.',
1188
3929
  example: 'User',
1189
- enum: ['Administrator', 'User']
3930
+ enum: [
3931
+ 'Administrator',
3932
+ 'User'
3933
+ ]
1190
3934
  },
1191
3935
  id: {
1192
3936
  type: 'string',
@@ -1205,7 +3949,11 @@ export const TokenSchema = {
1205
3949
  example: '2023-12-20T13:53:32.000Z'
1206
3950
  }
1207
3951
  },
1208
- required: ['name', 'role', 'date_created'],
3952
+ required: [
3953
+ 'name',
3954
+ 'role',
3955
+ 'date_created'
3956
+ ],
1209
3957
  additionalProperties: false
1210
3958
  };
1211
3959
  export const TokenUpdateInputSchema = {
@@ -1223,9 +3971,154 @@ export const TokenUpdateInputSchema = {
1223
3971
  type: 'string',
1224
3972
  description: 'Role assumed by the token.',
1225
3973
  example: 'User',
1226
- enum: ['Administrator', 'User']
3974
+ enum: [
3975
+ 'Administrator',
3976
+ 'User'
3977
+ ]
3978
+ }
3979
+ },
3980
+ additionalProperties: false
3981
+ };
3982
+ export const UsageFacetsSchema = {
3983
+ type: 'object',
3984
+ properties: {
3985
+ cluster_id: {
3986
+ type: 'array',
3987
+ items: {
3988
+ type: 'string'
3989
+ },
3990
+ description: 'List of unique cluster IDs',
3991
+ example: [
3992
+ '6b5439b1-923a-4f2b-a371-d554e5ea23fa'
3993
+ ]
3994
+ },
3995
+ product: {
3996
+ type: 'array',
3997
+ items: {
3998
+ type: 'string',
3999
+ enum: [
4000
+ 'cfke_controlplane_basic',
4001
+ 'cfke_controlplane_pro',
4002
+ 'cfke_controlplane_enterprise',
4003
+ 'cfke_connected_nodes_basic',
4004
+ 'cfke_connected_nodes_pro',
4005
+ 'cfke_connected_nodes_enterprise',
4006
+ 'cfcr_storage'
4007
+ ]
4008
+ },
4009
+ description: 'List of unique products',
4010
+ example: [
4011
+ 'cfke_controlplane_pro',
4012
+ 'cfke_connected_nodes_pro'
4013
+ ]
4014
+ }
4015
+ },
4016
+ additionalProperties: false
4017
+ };
4018
+ export const UsageResponseSchema = {
4019
+ type: 'object',
4020
+ properties: {
4021
+ data: {
4022
+ type: 'array',
4023
+ items: {
4024
+ type: 'object',
4025
+ properties: {
4026
+ hour: {
4027
+ type: 'string',
4028
+ description: 'Hour of the usage',
4029
+ example: '2019-01-01T00:00:00.000Z'
4030
+ },
4031
+ cluster_id: {
4032
+ type: 'string',
4033
+ description: 'Unique identifier of the kubernetes cluster. UUID v4 string in canonical form',
4034
+ example: '6b5439b1-923a-4f2b-a371-d554e5ea23fa'
4035
+ },
4036
+ product: {
4037
+ type: 'string',
4038
+ description: 'The product the usage is associated with',
4039
+ example: 'cfke_controlplane_pro',
4040
+ enum: [
4041
+ 'cfke_controlplane_basic',
4042
+ 'cfke_controlplane_pro',
4043
+ 'cfke_controlplane_enterprise',
4044
+ 'cfke_connected_nodes_basic',
4045
+ 'cfke_connected_nodes_pro',
4046
+ 'cfke_connected_nodes_enterprise',
4047
+ 'cfcr_storage'
4048
+ ]
4049
+ },
4050
+ value: {
4051
+ type: 'number',
4052
+ format: 'float',
4053
+ description: 'Consumption',
4054
+ example: 4
4055
+ },
4056
+ price: {
4057
+ type: 'number',
4058
+ format: 'float',
4059
+ description: 'Price per unit',
4060
+ example: 0.01
4061
+ },
4062
+ total: {
4063
+ type: 'number',
4064
+ format: 'float',
4065
+ description: 'Total cost'
4066
+ }
4067
+ },
4068
+ required: [
4069
+ 'hour',
4070
+ 'cluster_id',
4071
+ 'product',
4072
+ 'value',
4073
+ 'price',
4074
+ 'total'
4075
+ ],
4076
+ additionalProperties: false
4077
+ },
4078
+ description: 'Usage data'
4079
+ },
4080
+ facets: {
4081
+ type: 'object',
4082
+ properties: {
4083
+ cluster_id: {
4084
+ type: 'array',
4085
+ items: {
4086
+ type: 'string'
4087
+ },
4088
+ description: 'List of unique cluster IDs',
4089
+ example: [
4090
+ '6b5439b1-923a-4f2b-a371-d554e5ea23fa'
4091
+ ]
4092
+ },
4093
+ product: {
4094
+ type: 'array',
4095
+ items: {
4096
+ type: 'string',
4097
+ enum: [
4098
+ 'cfke_controlplane_basic',
4099
+ 'cfke_controlplane_pro',
4100
+ 'cfke_controlplane_enterprise',
4101
+ 'cfke_connected_nodes_basic',
4102
+ 'cfke_connected_nodes_pro',
4103
+ 'cfke_connected_nodes_enterprise',
4104
+ 'cfcr_storage'
4105
+ ]
4106
+ },
4107
+ description: 'List of unique products',
4108
+ example: [
4109
+ 'cfke_controlplane_pro',
4110
+ 'cfke_connected_nodes_pro'
4111
+ ]
4112
+ }
4113
+ },
4114
+ additionalProperties: false,
4115
+ description: 'Facets for filtering'
1227
4116
  }
1228
4117
  },
4118
+ required: [
4119
+ 'data',
4120
+ 'facets'
4121
+ ],
1229
4122
  additionalProperties: false
1230
4123
  };
1231
4124
  export const UsageSchema = {
@@ -1238,90 +4131,49 @@ export const UsageSchema = {
1238
4131
  },
1239
4132
  cluster_id: {
1240
4133
  type: 'string',
1241
- format: 'uuid',
1242
4134
  description: 'Unique identifier of the kubernetes cluster. UUID v4 string in canonical form',
1243
4135
  example: '6b5439b1-923a-4f2b-a371-d554e5ea23fa'
1244
4136
  },
1245
- cluster_tier: {
1246
- type: 'string',
1247
- description: 'Tier of the cluster.',
1248
- example: 'pro',
1249
- enum: ['']
1250
- },
1251
4137
  product: {
1252
4138
  type: 'string',
1253
4139
  description: 'The product the usage is associated with',
1254
- example: 'cfke_infra_compute',
1255
- enum: ['cfke_infra_compute', 'cfke_nodes', 'cfke_controlplane']
1256
- },
1257
- node_name: {
1258
- type: 'string',
1259
- description: 'Name of the Kubernetes node',
1260
- example: 'flexible-moth-956037384'
1261
- },
1262
- sku: {
1263
- type: 'string',
1264
- description: 'SKU of the Kubernetes node',
1265
- example: 'GCP-NORTHAMERICA-NORTHEAST1-A-G1-SMALL-SPOT'
1266
- },
1267
- cpu: {
1268
- anyOf: [
1269
- {
1270
- type: 'number',
1271
- format: 'float',
1272
- description: 'CPU core count of the node',
1273
- example: 4
1274
- },
1275
- {
1276
- type: 'string',
1277
- enum: ['']
1278
- }
1279
- ]
1280
- },
1281
- price: {
1282
- anyOf: [
1283
- {
1284
- type: 'number',
1285
- format: 'float',
1286
- description: 'Price',
1287
- example: 4
1288
- },
1289
- {
1290
- type: 'string',
1291
- enum: ['']
1292
- }
4140
+ example: 'cfke_controlplane_pro',
4141
+ enum: [
4142
+ 'cfke_controlplane_basic',
4143
+ 'cfke_controlplane_pro',
4144
+ 'cfke_controlplane_enterprise',
4145
+ 'cfke_connected_nodes_basic',
4146
+ 'cfke_connected_nodes_pro',
4147
+ 'cfke_connected_nodes_enterprise',
4148
+ 'cfcr_storage'
1293
4149
  ]
1294
4150
  },
1295
4151
  value: {
1296
- anyOf: [
1297
- {
1298
- type: 'number',
1299
- format: 'float',
1300
- description: 'Value',
1301
- example: 4
1302
- },
1303
- {
1304
- type: 'string',
1305
- enum: ['']
1306
- }
1307
- ]
4152
+ type: 'number',
4153
+ format: 'float',
4154
+ description: 'Consumption',
4155
+ example: 4
4156
+ },
4157
+ price: {
4158
+ type: 'number',
4159
+ format: 'float',
4160
+ description: 'Price per unit',
4161
+ example: 0.01
1308
4162
  },
1309
4163
  total: {
1310
- anyOf: [
1311
- {
1312
- type: 'number',
1313
- format: 'float',
1314
- description: 'Total',
1315
- example: 4
1316
- },
1317
- {
1318
- type: 'string',
1319
- enum: ['']
1320
- }
1321
- ]
4164
+ type: 'number',
4165
+ format: 'float',
4166
+ description: 'Total cost'
1322
4167
  }
1323
4168
  },
1324
- required: ['cluster_id', 'cluster_tier', 'product', 'node_name', 'sku', 'cpu', 'price', 'value', 'total'],
4169
+ required: [
4170
+ 'hour',
4171
+ 'cluster_id',
4172
+ 'product',
4173
+ 'value',
4174
+ 'price',
4175
+ 'total'
4176
+ ],
1325
4177
  additionalProperties: false
1326
4178
  };
1327
4179
  export const UserCreateInputSchema = {
@@ -1357,21 +4209,15 @@ export const UserCreateInputSchema = {
1357
4209
  type: 'string',
1358
4210
  minLength: 8,
1359
4211
  description: 'User password. Must be at least 8 characters long.'
1360
- },
1361
- status: {
1362
- type: 'string',
1363
- description: 'Status of the user. Can be `active` or `inactive`. Inactive users cannot log in or manage organization resources.',
1364
- example: 'active',
1365
- enum: ['active', 'inactive']
1366
- },
1367
- role: {
1368
- type: 'string',
1369
- description: "User role. Can be 'Administrator', 'User'.",
1370
- example: 'User',
1371
- enum: ['Administrator', 'User']
1372
4212
  }
1373
4213
  },
1374
- required: ['email', 'first_name', 'last_name', 'code', 'password'],
4214
+ required: [
4215
+ 'email',
4216
+ 'first_name',
4217
+ 'last_name',
4218
+ 'code',
4219
+ 'password'
4220
+ ],
1375
4221
  additionalProperties: false
1376
4222
  };
1377
4223
  export const UserSchema = {
@@ -1399,15 +4245,21 @@ export const UserSchema = {
1399
4245
  },
1400
4246
  role: {
1401
4247
  type: 'string',
1402
- description: "User role. Can be 'Administrator', 'User'.",
4248
+ description: 'User role. Can be \'Administrator\', \'User\'.',
1403
4249
  example: 'User',
1404
- enum: ['Administrator', 'User']
4250
+ enum: [
4251
+ 'Administrator',
4252
+ 'User'
4253
+ ]
1405
4254
  },
1406
4255
  status: {
1407
4256
  type: 'string',
1408
4257
  description: 'Status of the user. Can be `active` or `inactive`. Inactive users cannot log in or manage organization resources.',
1409
4258
  example: 'active',
1410
- enum: ['active', 'inactive']
4259
+ enum: [
4260
+ 'active',
4261
+ 'inactive'
4262
+ ]
1411
4263
  },
1412
4264
  id: {
1413
4265
  type: 'string',
@@ -1420,31 +4272,17 @@ export const UserSchema = {
1420
4272
  format: 'date-time',
1421
4273
  description: 'Creation date of the user. ISO 8601 date string in UTC timezone',
1422
4274
  example: '2023-11-02T16:08:14.338Z'
1423
- },
1424
- cluster_permissions: {
1425
- type: 'array',
1426
- items: {
1427
- type: 'object',
1428
- properties: {
1429
- cluster_id: {
1430
- type: 'string',
1431
- format: 'uuid',
1432
- description: 'Unique identifier of the cluster. UUID v4 string in canonical form',
1433
- example: '035ce46d-44d8-4e58-a8a2-b0192d1c27df'
1434
- },
1435
- permissions: {
1436
- type: 'string',
1437
- description: 'User permissions to access the cluster. Can be `readwrite` or `readonly`.',
1438
- example: 'readwrite',
1439
- enum: ['readwrite', 'readonly']
1440
- }
1441
- },
1442
- required: ['cluster_id', 'permissions'],
1443
- additionalProperties: false
1444
- }
1445
4275
  }
1446
4276
  },
1447
- required: ['email', 'first_name', 'last_name', 'role', 'status', 'id', 'date_created'],
4277
+ required: [
4278
+ 'email',
4279
+ 'first_name',
4280
+ 'last_name',
4281
+ 'role',
4282
+ 'status',
4283
+ 'id',
4284
+ 'date_created'
4285
+ ],
1448
4286
  additionalProperties: false
1449
4287
  };
1450
4288
  export const UserUpdateInputSchema = {
@@ -1472,15 +4310,21 @@ export const UserUpdateInputSchema = {
1472
4310
  },
1473
4311
  role: {
1474
4312
  type: 'string',
1475
- description: "User role. Can be 'Administrator', 'User'.",
4313
+ description: 'User role. Can be \'Administrator\', \'User\'.',
1476
4314
  example: 'User',
1477
- enum: ['Administrator', 'User']
4315
+ enum: [
4316
+ 'Administrator',
4317
+ 'User'
4318
+ ]
1478
4319
  },
1479
4320
  status: {
1480
4321
  type: 'string',
1481
4322
  description: 'Status of the user. Can be `active` or `inactive`. Inactive users cannot log in or manage organization resources.',
1482
4323
  example: 'active',
1483
- enum: ['active', 'inactive']
4324
+ enum: [
4325
+ 'active',
4326
+ 'inactive'
4327
+ ]
1484
4328
  }
1485
4329
  },
1486
4330
  additionalProperties: false