@cloudfleet/sdk 0.0.1-76e2a56 → 0.0.1-7796b47

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