@fi-ts/api 0.0.1-alpha.0 → 0.0.1

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.
@@ -0,0 +1,199 @@
1
+ // @generated by protoc-gen-es v2.14.1 with parameter "target=ts"
2
+ // @generated from file fits/api/mvm/v1/vlan.proto (package fits.api.mvm.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
6
+ import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
7
+ import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb";
8
+ import { file_fits_api_v1_common } from "../../v1/common_pb";
9
+ import { file_fits_api_v1_predefined_rules } from "../../v1/predefined_rules_pb";
10
+ import type { Message } from "@bufbuild/protobuf";
11
+
12
+ /**
13
+ * Describes the file fits/api/mvm/v1/vlan.proto.
14
+ */
15
+ export const file_fits_api_mvm_v1_vlan: GenFile = /*@__PURE__*/
16
+ fileDesc("ChpmaXRzL2FwaS9tdm0vdjEvdmxhbi5wcm90bxIPZml0cy5hcGkubXZtLnYxIoMCCgRWTEFOEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEg8KB3ZsYW5faWQYAiABKAUSIQoMc3VibmV0X3RpdGxlGAMgASgJQgu6SAhyBsCzrrECARIgCgtzdWJuZXRfY2lkchgEIAEoCUILukgIcgaAtK6xAgESJAoNbG9jYXRpb25fdXVpZBgFIAEoCUIIukgFcgOwAQFIAIgBARI4CgpzdGFnZV90eXBlGAYgASgOMhouZml0cy5hcGkubXZtLnYxLlN0YWdlVHlwZUIIukgFggECEAESGwoGdGVuYW50GAcgASgJQgu6SAhyBsCzrrECAUIQCg5fbG9jYXRpb25fdXVpZCKDAQoWVkxBTlNlcnZpY2VMaXN0UmVxdWVzdBIbCgZ0ZW5hbnQYASABKAlCC7pICHIGwLOusQIBEj0KCnN0YWdlX3R5cGUYAiABKA4yGi5maXRzLmFwaS5tdm0udjEuU3RhZ2VUeXBlQgi6SAWCAQIQAUgAiAEBQg0KC19zdGFnZV90eXBlIj8KF1ZMQU5TZXJ2aWNlTGlzdFJlc3BvbnNlEiQKBXZsYW5zGAEgAygLMhUuZml0cy5hcGkubXZtLnYxLlZMQU4q0QEKCVN0YWdlVHlwZRIgChZTVEFHRV9UWVBFX1VOU1BFQ0lGSUVEEAAaBIKyGQASKwoWU1RBR0VfVFlQRV9ERVZFTE9QTUVOVBABGg+CshkLZGV2ZWxvcG1lbnQSHQoPU1RBR0VfVFlQRV9URVNUEAIaCIKyGQR0ZXN0EisKFlNUQUdFX1RZUEVfSU5URUdSQVRJT04QAxoPgrIZC2ludGVncmF0aW9uEikKFVNUQUdFX1RZUEVfUFJPRFVDVElPThAEGg6CshkKcHJvZHVjdGlvbjJ1CgtWTEFOU2VydmljZRJmCgRMaXN0EicuZml0cy5hcGkubXZtLnYxLlZMQU5TZXJ2aWNlTGlzdFJlcXVlc3QaKC5maXRzLmFwaS5tdm0udjEuVkxBTlNlcnZpY2VMaXN0UmVzcG9uc2UiC8LzGAMBAgPg8xgCQq4BChNjb20uZml0cy5hcGkubXZtLnYxQglWbGFuUHJvdG9QAVotZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvbXZtL3YxO212bXYxogIDRkFNqgIPRml0cy5BcGkuTXZtLlYxygIPRml0c1xBcGlcTXZtXFYx4gIbRml0c1xBcGlcTXZtXFYxXEdQQk1ldGFkYXRh6gISRml0czo6QXBpOjpNdm06OlYxYgZwcm90bzM", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]);
17
+
18
+ /**
19
+ * VLAN is a VLAN that a MVM can be connected to.
20
+ *
21
+ * @generated from message fits.api.mvm.v1.VLAN
22
+ */
23
+ export type VLAN = Message<"fits.api.mvm.v1.VLAN"> & {
24
+ /**
25
+ * Uuid of this VLAN
26
+ *
27
+ * @generated from field: string uuid = 1;
28
+ */
29
+ uuid: string;
30
+
31
+ /**
32
+ * Id of this VLAN
33
+ * This is not a foreign key, this is the actual ID of the VLAN the network interface is attached to.
34
+ *
35
+ * @generated from field: int32 vlan_id = 2;
36
+ */
37
+ vlanId: number;
38
+
39
+ /**
40
+ * Title of the subnet this VLAN belongs to
41
+ *
42
+ * @generated from field: string subnet_title = 3;
43
+ */
44
+ subnetTitle: string;
45
+
46
+ /**
47
+ * CIDR of the subnet this VLAN belongs to
48
+ *
49
+ * @generated from field: string subnet_cidr = 4;
50
+ */
51
+ subnetCidr: string;
52
+
53
+ /**
54
+ * TODO instead of the pod title, could we have the location_uuid?
55
+ *
56
+ * @generated from field: optional string location_uuid = 5;
57
+ */
58
+ locationUuid?: string | undefined;
59
+
60
+ /**
61
+ * Stage type of this VLAN
62
+ *
63
+ * @generated from field: fits.api.mvm.v1.StageType stage_type = 6;
64
+ */
65
+ stageType: StageType;
66
+
67
+ /**
68
+ * Tenant this VLAN belongs to.
69
+ *
70
+ * @generated from field: string tenant = 7;
71
+ */
72
+ tenant: string;
73
+ };
74
+
75
+ /**
76
+ * Describes the message fits.api.mvm.v1.VLAN.
77
+ * Use `create(VLANSchema)` to create a new message.
78
+ */
79
+ export const VLANSchema: GenMessage<VLAN> = /*@__PURE__*/
80
+ messageDesc(file_fits_api_mvm_v1_vlan, 0);
81
+
82
+ /**
83
+ * VLANServiceListRequest is the request payload for a VLAN list request.
84
+ *
85
+ * @generated from message fits.api.mvm.v1.VLANServiceListRequest
86
+ */
87
+ export type VLANServiceListRequest = Message<"fits.api.mvm.v1.VLANServiceListRequest"> & {
88
+ /**
89
+ * Tenant to list available VLANs for (the tenant login)
90
+ *
91
+ * @generated from field: string tenant = 1;
92
+ */
93
+ tenant: string;
94
+
95
+ /**
96
+ * StageType filters the listed VLANs by stage type
97
+ *
98
+ * @generated from field: optional fits.api.mvm.v1.StageType stage_type = 2;
99
+ */
100
+ stageType?: StageType | undefined;
101
+ };
102
+
103
+ /**
104
+ * Describes the message fits.api.mvm.v1.VLANServiceListRequest.
105
+ * Use `create(VLANServiceListRequestSchema)` to create a new message.
106
+ */
107
+ export const VLANServiceListRequestSchema: GenMessage<VLANServiceListRequest> = /*@__PURE__*/
108
+ messageDesc(file_fits_api_mvm_v1_vlan, 1);
109
+
110
+ /**
111
+ * VLANServiceListResponse is the response payload for a VLAN list request
112
+ *
113
+ * @generated from message fits.api.mvm.v1.VLANServiceListResponse
114
+ */
115
+ export type VLANServiceListResponse = Message<"fits.api.mvm.v1.VLANServiceListResponse"> & {
116
+ /**
117
+ * The available VLANs
118
+ *
119
+ * @generated from field: repeated fits.api.mvm.v1.VLAN vlans = 1;
120
+ */
121
+ vlans: VLAN[];
122
+ };
123
+
124
+ /**
125
+ * Describes the message fits.api.mvm.v1.VLANServiceListResponse.
126
+ * Use `create(VLANServiceListResponseSchema)` to create a new message.
127
+ */
128
+ export const VLANServiceListResponseSchema: GenMessage<VLANServiceListResponse> = /*@__PURE__*/
129
+ messageDesc(file_fits_api_mvm_v1_vlan, 2);
130
+
131
+ /**
132
+ * StageType specifies the fixed stage of a managed VM (MVM) instance or VLAN.
133
+ * The set of stages is fixed upstream, so it is modeled as an enum instead of
134
+ * a listable resource.
135
+ *
136
+ * @generated from enum fits.api.mvm.v1.StageType
137
+ */
138
+ export enum StageType {
139
+ /**
140
+ * STAGE_TYPE_UNSPECIFIED is not specified.
141
+ *
142
+ * @generated from enum value: STAGE_TYPE_UNSPECIFIED = 0;
143
+ */
144
+ UNSPECIFIED = 0,
145
+
146
+ /**
147
+ * STAGE_TYPE_DEVELOPMENT is the development stage.
148
+ *
149
+ * @generated from enum value: STAGE_TYPE_DEVELOPMENT = 1;
150
+ */
151
+ DEVELOPMENT = 1,
152
+
153
+ /**
154
+ * STAGE_TYPE_TEST is the test stage.
155
+ *
156
+ * @generated from enum value: STAGE_TYPE_TEST = 2;
157
+ */
158
+ TEST = 2,
159
+
160
+ /**
161
+ * STAGE_TYPE_INTEGRATION is the integration stage.
162
+ *
163
+ * @generated from enum value: STAGE_TYPE_INTEGRATION = 3;
164
+ */
165
+ INTEGRATION = 3,
166
+
167
+ /**
168
+ * STAGE_TYPE_PRODUCTION is the production stage.
169
+ *
170
+ * @generated from enum value: STAGE_TYPE_PRODUCTION = 4;
171
+ */
172
+ PRODUCTION = 4,
173
+ }
174
+
175
+ /**
176
+ * Describes the enum fits.api.mvm.v1.StageType.
177
+ */
178
+ export const StageTypeSchema: GenEnum<StageType> = /*@__PURE__*/
179
+ enumDesc(file_fits_api_mvm_v1_vlan, 0);
180
+
181
+ /**
182
+ * VLANService lists VLANs available for managed VM (MVM) instances.
183
+ *
184
+ * @generated from service fits.api.mvm.v1.VLANService
185
+ */
186
+ export const VLANService: GenService<{
187
+ /**
188
+ * Returns a list of all VLANs available for a tenant.
189
+ *
190
+ * @generated from rpc fits.api.mvm.v1.VLANService.List
191
+ */
192
+ list: {
193
+ methodKind: "unary";
194
+ input: typeof VLANServiceListRequestSchema;
195
+ output: typeof VLANServiceListResponseSchema;
196
+ },
197
+ }> = /*@__PURE__*/
198
+ serviceDesc(file_fits_api_mvm_v1_vlan, 0);
199
+
@@ -52,6 +52,18 @@ export declare const is_ip_or_hostname: GenExtension<StringRules, boolean>;
52
52
  * @generated from extension: optional bool trimmed = 80048958;
53
53
  */
54
54
  export declare const trimmed: GenExtension<StringRules, boolean>;
55
+ /**
56
+ * IsProjectSlug enforces the string to be usable as a project slug.
57
+ *
58
+ * @generated from extension: optional bool is_project_slug = 80048959;
59
+ */
60
+ export declare const is_project_slug: GenExtension<StringRules, boolean>;
61
+ /**
62
+ * IsIpv4Cidr validates if the given string is a valid IPv4 CIDR, e.g. 10.0.0.0/24
63
+ *
64
+ * @generated from extension: optional bool is_ipv4_cidr = 80048960;
65
+ */
66
+ export declare const is_ipv4_cidr: GenExtension<StringRules, boolean>;
55
67
  /**
56
68
  * Prefixes validates if a slice of prefixes in string form are valid
57
69
  *
@@ -6,7 +6,7 @@ import { file_buf_validate_validate } from "../../../buf/validate/validate_pb";
6
6
  /**
7
7
  * Describes the file fits/api/v1/predefined_rules.proto.
8
8
  */
9
- export const file_fits_api_v1_predefined_rules = /*@__PURE__*/ fileDesc("CiJmaXRzL2FwaS92MS9wcmVkZWZpbmVkX3J1bGVzLnByb3RvEgtmaXRzLmFwaS52MTq4AQoKbWFjYWRkcmVzcxIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxi35pUmIAEoCEJ6wkh3CnUKEXN0cmluZy5tYWNhZGRyZXNzEiZ0aGlzIHN0cmluZyBtdXN0IGJlIGEgdmFsaWQgbWFjYWRkcmVzcxo4dGhpcy5tYXRjaGVzKCdeKFswLTlBLUZhLWZdezJ9WzpdKXs1fShbMC05QS1GYS1mXXsyfSkkJylSCm1hY2FkZHJlc3M6mQEKB2lzX25hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuOaVJiABKAhCYsJIXwpdCg5zdHJpbmcuaXNfbmFtZRIjbXVzdCBiZSB3aXRoaW4gMiBhbmQgMTI4IGNoYXJhY3RlcnMaJnRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4UgZpc05hbWU6mgEKDmlzX2Rlc2NyaXB0aW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGLnmlSYgASgIQlXCSFIKUAoVc3RyaW5nLmlzX2Rlc2NyaXB0aW9uEiNtdXN0IGJlIHNob3J0ZXIgdGhhbiAyNTYgY2hhcmFjdGVycxoSdGhpcy5zaXplKCkgPD0gMjU2Ug1pc0Rlc2NyaXB0aW9uOqgBCgxpc19wYXJ0aXRpb24SGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuuaVJiABKAhCZ8JIZApiChNzdHJpbmcuaXNfcGFydGl0aW9uEiNtdXN0IGJlIHdpdGhpbiAyIGFuZCAxMjggY2hhcmFjdGVycxomdGhpcy5zaXplKCkgPj0gMiAmJiB0aGlzLnNpemUoKSA8PSAxMjhSC2lzUGFydGl0aW9uOoIBCglpc19wcmVmaXgSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYu+aVJiABKAhCR8JIRApCCg9zdHJpbmcucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaEXRoaXMuaXNJcFByZWZpeCgpUghpc1ByZWZpeDptCgZpc191cmkSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvOaVJiABKAhCOMJINQozCgpzdHJpbmcudXJpEhdnaXZlbiB1cmkgbXVzdCBiZSB2YWxpZBoMdGhpcy5pc1VyaSgpUgVpc1VyaTqnAQoRaXNfaXBfb3JfaG9zdG5hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYveaVJiABKAhCXsJIWwpZCg12YWxpZF9hZGRyZXNzEiZtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcyBvciBob3N0bmFtZRogdGhpcy5pc0lwKCkgfHwgdGhpcy5pc0hvc3RuYW1lKClSDmlzSXBPckhvc3RuYW1lOp0BCgd0cmltbWVkEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL7mlSYgASgIQmXCSGIKYAoOc3RyaW5nLnRyaW1tZWQSK3ZhbHVlIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaIXRoaXMudHJpbSgpLnNpemUoKSA9PSB0aGlzLnNpemUoKVIHdHJpbW1lZDqPAQoIcHJlZml4ZXMSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjHtJYmIAEoCEJTwkhQCk4KEXJlcGVhdGVkLnByZWZpeGVzEhxnaXZlbiBwcmVmaXhlcyBtdXN0IGJlIHZhbGlkGht0aGlzLmFsbChtLCBtLmlzSXBQcmVmaXgoKSlSCHByZWZpeGVzOnUKA2lwcxIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMi0liYgASgIQkPCSEAKPgoMcmVwZWF0ZWQuaXBzEhdnaXZlbiBpcHMgbXVzdCBiZSB2YWxpZBoVdGhpcy5hbGwobSwgbS5pc0lwKCkpUgNpcHM65gEKEWFyZV9ob3N0X2FuZF9wb3J0EhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYybSWJiABKAhCmgHCSJYBCpMBChpyZXBlYXRlZC5hcmVfaG9zdF9hbmRfcG9ydBJQZ2l2ZW4gZW50cmllcyBtdXN0IGFsbCBiZSBpbiB0aGUgZm9ybSBvZiA8aXAgfCBob3N0Pjo8cG9ydD4gYnV0IHBvcnQgaXMgb3B0aW9uYWwaI3RoaXMuYWxsKG0sIG0uaXNIb3N0QW5kUG9ydChmYWxzZSkpUg5hcmVIb3N0QW5kUG9ydDq6AQoLYWxsX3RyaW1tZWQSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjKtJYmIAEoCEJ5wkh2CnQKFHJlcGVhdGVkLmFsbF90cmltbWVkEjJnaXZlbiB2YWx1ZXMgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZRoodGhpcy5hbGwobSwgbS50cmltKCkuc2l6ZSgpID09IG0uc2l6ZSgpKVIKYWxsVHJpbW1lZDqEAgoXa2V5c19hbmRfdmFsdWVzX3RyaW1tZWQSFi5idWYudmFsaWRhdGUuTWFwUnVsZXMY14KXJiABKAhCsQHCSK0BCqoBChttYXAua2V5c19hbmRfdmFsdWVzX3RyaW1tZWQSNWtleXMgYW5kIHZhbHVlcyBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCB3aGl0ZXNwYWNlGlR0aGlzLmFsbChrLCBrLnRyaW0oKS5zaXplKCkgPT0gay5zaXplKCkpICYmIHRoaXMuYWxsKHYsIHYudHJpbSgpLnNpemUoKSA9PSB2LnNpemUoKSlSFGtleXNBbmRWYWx1ZXNUcmltbWVkOqsBCgxrZXlzX3RyaW1tZWQSFi5idWYudmFsaWRhdGUuTWFwUnVsZXMY2IKXJiABKAhCbcJIagpoChBtYXAua2V5c190cmltbWVkEiprZXlzIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaKHRoaXMuYWxsKGssIGsudHJpbSgpLnNpemUoKSA9PSBrLnNpemUoKSlSC2tleXNUcmltbWVkQqABCg9jb20uZml0cy5hcGkudjFCFFByZWRlZmluZWRSdWxlc1Byb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMQ", [file_buf_validate_validate]);
9
+ export const file_fits_api_v1_predefined_rules = /*@__PURE__*/ fileDesc("CiJmaXRzL2FwaS92MS9wcmVkZWZpbmVkX3J1bGVzLnByb3RvEgtmaXRzLmFwaS52MTq4AQoKbWFjYWRkcmVzcxIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxi35pUmIAEoCEJ6wkh3CnUKEXN0cmluZy5tYWNhZGRyZXNzEiZ0aGlzIHN0cmluZyBtdXN0IGJlIGEgdmFsaWQgbWFjYWRkcmVzcxo4dGhpcy5tYXRjaGVzKCdeKFswLTlBLUZhLWZdezJ9WzpdKXs1fShbMC05QS1GYS1mXXsyfSkkJylSCm1hY2FkZHJlc3M6mQEKB2lzX25hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuOaVJiABKAhCYsJIXwpdCg5zdHJpbmcuaXNfbmFtZRIjbXVzdCBiZSB3aXRoaW4gMiBhbmQgMTI4IGNoYXJhY3RlcnMaJnRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4UgZpc05hbWU6mgEKDmlzX2Rlc2NyaXB0aW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGLnmlSYgASgIQlXCSFIKUAoVc3RyaW5nLmlzX2Rlc2NyaXB0aW9uEiNtdXN0IGJlIHNob3J0ZXIgdGhhbiAyNTYgY2hhcmFjdGVycxoSdGhpcy5zaXplKCkgPD0gMjU2Ug1pc0Rlc2NyaXB0aW9uOqgBCgxpc19wYXJ0aXRpb24SGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuuaVJiABKAhCZ8JIZApiChNzdHJpbmcuaXNfcGFydGl0aW9uEiNtdXN0IGJlIHdpdGhpbiAyIGFuZCAxMjggY2hhcmFjdGVycxomdGhpcy5zaXplKCkgPj0gMiAmJiB0aGlzLnNpemUoKSA8PSAxMjhSC2lzUGFydGl0aW9uOoIBCglpc19wcmVmaXgSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYu+aVJiABKAhCR8JIRApCCg9zdHJpbmcucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaEXRoaXMuaXNJcFByZWZpeCgpUghpc1ByZWZpeDptCgZpc191cmkSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvOaVJiABKAhCOMJINQozCgpzdHJpbmcudXJpEhdnaXZlbiB1cmkgbXVzdCBiZSB2YWxpZBoMdGhpcy5pc1VyaSgpUgVpc1VyaTqnAQoRaXNfaXBfb3JfaG9zdG5hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYveaVJiABKAhCXsJIWwpZCg12YWxpZF9hZGRyZXNzEiZtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcyBvciBob3N0bmFtZRogdGhpcy5pc0lwKCkgfHwgdGhpcy5pc0hvc3RuYW1lKClSDmlzSXBPckhvc3RuYW1lOp0BCgd0cmltbWVkEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL7mlSYgASgIQmXCSGIKYAoOc3RyaW5nLnRyaW1tZWQSK3ZhbHVlIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaIXRoaXMudHJpbSgpLnNpemUoKSA9PSB0aGlzLnNpemUoKVIHdHJpbW1lZDraAQoPaXNfcHJvamVjdF9zbHVnEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL/mlSYgASgIQpMBwkiPAQqMAQoWc3RyaW5nLmlzX3Byb2plY3Rfc2x1ZxIebXVzdCBiZSBhIGxvd2VyY2FzZSBpZGVudGlmaWVyGlJ0aGlzLm1hdGNoZXMoJ14oW2Etel9dWzAtOUEtWmEtel8tXSskKScpICYmIHRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4Ug1pc1Byb2plY3RTbHVnOrEBCgxpc19pcHY0X2NpZHISGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYwOaVJiABKAhCccJIbgpsChNzdHJpbmcuaXNfaXB2NF9jaWRyEittdXN0IGJlIGEgdmFsaWQgSVB2NCBDSURSLCBlLmcuIDEwLjAuMC4wLzI0Gih0aGlzLmlzSXBQcmVmaXgoKSAmJiAhdGhpcy5jb250YWlucygnOicpUgppc0lwdjRDaWRyOo8BCghwcmVmaXhlcxIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMe0liYgASgIQlPCSFAKTgoRcmVwZWF0ZWQucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaG3RoaXMuYWxsKG0sIG0uaXNJcFByZWZpeCgpKVIIcHJlZml4ZXM6dQoDaXBzEhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYyLSWJiABKAhCQ8JIQAo+CgxyZXBlYXRlZC5pcHMSF2dpdmVuIGlwcyBtdXN0IGJlIHZhbGlkGhV0aGlzLmFsbChtLCBtLmlzSXAoKSlSA2lwczrmAQoRYXJlX2hvc3RfYW5kX3BvcnQSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjJtJYmIAEoCEKaAcJIlgEKkwEKGnJlcGVhdGVkLmFyZV9ob3N0X2FuZF9wb3J0ElBnaXZlbiBlbnRyaWVzIG11c3QgYWxsIGJlIGluIHRoZSBmb3JtIG9mIDxpcCB8IGhvc3Q+Ojxwb3J0PiBidXQgcG9ydCBpcyBvcHRpb25hbBojdGhpcy5hbGwobSwgbS5pc0hvc3RBbmRQb3J0KGZhbHNlKSlSDmFyZUhvc3RBbmRQb3J0OroBCgthbGxfdHJpbW1lZBIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMq0liYgASgIQnnCSHYKdAoUcmVwZWF0ZWQuYWxsX3RyaW1tZWQSMmdpdmVuIHZhbHVlcyBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCB3aGl0ZXNwYWNlGih0aGlzLmFsbChtLCBtLnRyaW0oKS5zaXplKCkgPT0gbS5zaXplKCkpUgphbGxUcmltbWVkOoQCChdrZXlzX2FuZF92YWx1ZXNfdHJpbW1lZBIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlcxjXgpcmIAEoCEKxAcJIrQEKqgEKG21hcC5rZXlzX2FuZF92YWx1ZXNfdHJpbW1lZBI1a2V5cyBhbmQgdmFsdWVzIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaVHRoaXMuYWxsKGssIGsudHJpbSgpLnNpemUoKSA9PSBrLnNpemUoKSkgJiYgdGhpcy5hbGwodiwgdi50cmltKCkuc2l6ZSgpID09IHYuc2l6ZSgpKVIUa2V5c0FuZFZhbHVlc1RyaW1tZWQ6qwEKDGtleXNfdHJpbW1lZBIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlcxjYgpcmIAEoCEJtwkhqCmgKEG1hcC5rZXlzX3RyaW1tZWQSKmtleXMgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZRoodGhpcy5hbGwoaywgay50cmltKCkuc2l6ZSgpID09IGsuc2l6ZSgpKVILa2V5c1RyaW1tZWRCoAEKD2NvbS5maXRzLmFwaS52MUIUUHJlZGVmaW5lZFJ1bGVzUHJvdG9QAVopZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdjE7YXBpdjGiAgNGQViqAgtGaXRzLkFwaS5WMcoCC0ZpdHNcQXBpXFYx4gIXRml0c1xBcGlcVjFcR1BCTWV0YWRhdGHqAg1GaXRzOjpBcGk6OlYx", [file_buf_validate_validate]);
10
10
  /**
11
11
  * Macaddress returns true if the given string is a valid macadress
12
12
  *
@@ -55,39 +55,51 @@ export const is_ip_or_hostname = /*@__PURE__*/ extDesc(file_fits_api_v1_predefin
55
55
  * @generated from extension: optional bool trimmed = 80048958;
56
56
  */
57
57
  export const trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 7);
58
+ /**
59
+ * IsProjectSlug enforces the string to be usable as a project slug.
60
+ *
61
+ * @generated from extension: optional bool is_project_slug = 80048959;
62
+ */
63
+ export const is_project_slug = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 8);
64
+ /**
65
+ * IsIpv4Cidr validates if the given string is a valid IPv4 CIDR, e.g. 10.0.0.0/24
66
+ *
67
+ * @generated from extension: optional bool is_ipv4_cidr = 80048960;
68
+ */
69
+ export const is_ipv4_cidr = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 9);
58
70
  /**
59
71
  * Prefixes validates if a slice of prefixes in string form are valid
60
72
  *
61
73
  * @generated from extension: optional bool prefixes = 80058951;
62
74
  */
63
- export const prefixes = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 8);
75
+ export const prefixes = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 10);
64
76
  /**
65
77
  * Ips validates if a slice of ips in string form are valid
66
78
  *
67
79
  * @generated from extension: optional bool ips = 80058952;
68
80
  */
69
- export const ips = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 9);
81
+ export const ips = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 11);
70
82
  /**
71
83
  * AreHostAndPort validates if a slice of strings are all in the form of <ip | host>:<port>
72
84
  *
73
85
  * @generated from extension: optional bool are_host_and_port = 80058953;
74
86
  */
75
- export const are_host_and_port = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 10);
87
+ export const are_host_and_port = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 12);
76
88
  /**
77
89
  * All Trimmed enforces all strings to be trimmed, e.g. no whitespaces at the begin and end
78
90
  *
79
91
  * @generated from extension: optional bool all_trimmed = 80058954;
80
92
  */
81
- export const all_trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 11);
93
+ export const all_trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 13);
82
94
  /**
83
95
  * Keys and Values trimmed enforces all map keys and values to be trimmed, e.g. no whitespaces at the begin and end
84
96
  *
85
97
  * @generated from extension: optional bool keys_and_values_trimmed = 80068951;
86
98
  */
87
- export const keys_and_values_trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 12);
99
+ export const keys_and_values_trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 14);
88
100
  /**
89
101
  * Keys trimmed enforces all map keys and values to be trimmed, e.g. no whitespaces at the begin and end
90
102
  *
91
103
  * @generated from extension: optional bool keys_trimmed = 80068952;
92
104
  */
93
- export const keys_trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 13);
105
+ export const keys_trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 15);
@@ -11,7 +11,7 @@ import { file_buf_validate_validate } from "../../../buf/validate/validate_pb";
11
11
  * Describes the file fits/api/v1/predefined_rules.proto.
12
12
  */
13
13
  export const file_fits_api_v1_predefined_rules: GenFile = /*@__PURE__*/
14
- fileDesc("CiJmaXRzL2FwaS92MS9wcmVkZWZpbmVkX3J1bGVzLnByb3RvEgtmaXRzLmFwaS52MTq4AQoKbWFjYWRkcmVzcxIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxi35pUmIAEoCEJ6wkh3CnUKEXN0cmluZy5tYWNhZGRyZXNzEiZ0aGlzIHN0cmluZyBtdXN0IGJlIGEgdmFsaWQgbWFjYWRkcmVzcxo4dGhpcy5tYXRjaGVzKCdeKFswLTlBLUZhLWZdezJ9WzpdKXs1fShbMC05QS1GYS1mXXsyfSkkJylSCm1hY2FkZHJlc3M6mQEKB2lzX25hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuOaVJiABKAhCYsJIXwpdCg5zdHJpbmcuaXNfbmFtZRIjbXVzdCBiZSB3aXRoaW4gMiBhbmQgMTI4IGNoYXJhY3RlcnMaJnRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4UgZpc05hbWU6mgEKDmlzX2Rlc2NyaXB0aW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGLnmlSYgASgIQlXCSFIKUAoVc3RyaW5nLmlzX2Rlc2NyaXB0aW9uEiNtdXN0IGJlIHNob3J0ZXIgdGhhbiAyNTYgY2hhcmFjdGVycxoSdGhpcy5zaXplKCkgPD0gMjU2Ug1pc0Rlc2NyaXB0aW9uOqgBCgxpc19wYXJ0aXRpb24SGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuuaVJiABKAhCZ8JIZApiChNzdHJpbmcuaXNfcGFydGl0aW9uEiNtdXN0IGJlIHdpdGhpbiAyIGFuZCAxMjggY2hhcmFjdGVycxomdGhpcy5zaXplKCkgPj0gMiAmJiB0aGlzLnNpemUoKSA8PSAxMjhSC2lzUGFydGl0aW9uOoIBCglpc19wcmVmaXgSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYu+aVJiABKAhCR8JIRApCCg9zdHJpbmcucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaEXRoaXMuaXNJcFByZWZpeCgpUghpc1ByZWZpeDptCgZpc191cmkSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvOaVJiABKAhCOMJINQozCgpzdHJpbmcudXJpEhdnaXZlbiB1cmkgbXVzdCBiZSB2YWxpZBoMdGhpcy5pc1VyaSgpUgVpc1VyaTqnAQoRaXNfaXBfb3JfaG9zdG5hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYveaVJiABKAhCXsJIWwpZCg12YWxpZF9hZGRyZXNzEiZtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcyBvciBob3N0bmFtZRogdGhpcy5pc0lwKCkgfHwgdGhpcy5pc0hvc3RuYW1lKClSDmlzSXBPckhvc3RuYW1lOp0BCgd0cmltbWVkEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL7mlSYgASgIQmXCSGIKYAoOc3RyaW5nLnRyaW1tZWQSK3ZhbHVlIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaIXRoaXMudHJpbSgpLnNpemUoKSA9PSB0aGlzLnNpemUoKVIHdHJpbW1lZDqPAQoIcHJlZml4ZXMSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjHtJYmIAEoCEJTwkhQCk4KEXJlcGVhdGVkLnByZWZpeGVzEhxnaXZlbiBwcmVmaXhlcyBtdXN0IGJlIHZhbGlkGht0aGlzLmFsbChtLCBtLmlzSXBQcmVmaXgoKSlSCHByZWZpeGVzOnUKA2lwcxIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMi0liYgASgIQkPCSEAKPgoMcmVwZWF0ZWQuaXBzEhdnaXZlbiBpcHMgbXVzdCBiZSB2YWxpZBoVdGhpcy5hbGwobSwgbS5pc0lwKCkpUgNpcHM65gEKEWFyZV9ob3N0X2FuZF9wb3J0EhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYybSWJiABKAhCmgHCSJYBCpMBChpyZXBlYXRlZC5hcmVfaG9zdF9hbmRfcG9ydBJQZ2l2ZW4gZW50cmllcyBtdXN0IGFsbCBiZSBpbiB0aGUgZm9ybSBvZiA8aXAgfCBob3N0Pjo8cG9ydD4gYnV0IHBvcnQgaXMgb3B0aW9uYWwaI3RoaXMuYWxsKG0sIG0uaXNIb3N0QW5kUG9ydChmYWxzZSkpUg5hcmVIb3N0QW5kUG9ydDq6AQoLYWxsX3RyaW1tZWQSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjKtJYmIAEoCEJ5wkh2CnQKFHJlcGVhdGVkLmFsbF90cmltbWVkEjJnaXZlbiB2YWx1ZXMgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZRoodGhpcy5hbGwobSwgbS50cmltKCkuc2l6ZSgpID09IG0uc2l6ZSgpKVIKYWxsVHJpbW1lZDqEAgoXa2V5c19hbmRfdmFsdWVzX3RyaW1tZWQSFi5idWYudmFsaWRhdGUuTWFwUnVsZXMY14KXJiABKAhCsQHCSK0BCqoBChttYXAua2V5c19hbmRfdmFsdWVzX3RyaW1tZWQSNWtleXMgYW5kIHZhbHVlcyBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCB3aGl0ZXNwYWNlGlR0aGlzLmFsbChrLCBrLnRyaW0oKS5zaXplKCkgPT0gay5zaXplKCkpICYmIHRoaXMuYWxsKHYsIHYudHJpbSgpLnNpemUoKSA9PSB2LnNpemUoKSlSFGtleXNBbmRWYWx1ZXNUcmltbWVkOqsBCgxrZXlzX3RyaW1tZWQSFi5idWYudmFsaWRhdGUuTWFwUnVsZXMY2IKXJiABKAhCbcJIagpoChBtYXAua2V5c190cmltbWVkEiprZXlzIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaKHRoaXMuYWxsKGssIGsudHJpbSgpLnNpemUoKSA9PSBrLnNpemUoKSlSC2tleXNUcmltbWVkQqABCg9jb20uZml0cy5hcGkudjFCFFByZWRlZmluZWRSdWxlc1Byb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMQ", [file_buf_validate_validate]);
14
+ fileDesc("CiJmaXRzL2FwaS92MS9wcmVkZWZpbmVkX3J1bGVzLnByb3RvEgtmaXRzLmFwaS52MTq4AQoKbWFjYWRkcmVzcxIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxi35pUmIAEoCEJ6wkh3CnUKEXN0cmluZy5tYWNhZGRyZXNzEiZ0aGlzIHN0cmluZyBtdXN0IGJlIGEgdmFsaWQgbWFjYWRkcmVzcxo4dGhpcy5tYXRjaGVzKCdeKFswLTlBLUZhLWZdezJ9WzpdKXs1fShbMC05QS1GYS1mXXsyfSkkJylSCm1hY2FkZHJlc3M6mQEKB2lzX25hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuOaVJiABKAhCYsJIXwpdCg5zdHJpbmcuaXNfbmFtZRIjbXVzdCBiZSB3aXRoaW4gMiBhbmQgMTI4IGNoYXJhY3RlcnMaJnRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4UgZpc05hbWU6mgEKDmlzX2Rlc2NyaXB0aW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGLnmlSYgASgIQlXCSFIKUAoVc3RyaW5nLmlzX2Rlc2NyaXB0aW9uEiNtdXN0IGJlIHNob3J0ZXIgdGhhbiAyNTYgY2hhcmFjdGVycxoSdGhpcy5zaXplKCkgPD0gMjU2Ug1pc0Rlc2NyaXB0aW9uOqgBCgxpc19wYXJ0aXRpb24SGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuuaVJiABKAhCZ8JIZApiChNzdHJpbmcuaXNfcGFydGl0aW9uEiNtdXN0IGJlIHdpdGhpbiAyIGFuZCAxMjggY2hhcmFjdGVycxomdGhpcy5zaXplKCkgPj0gMiAmJiB0aGlzLnNpemUoKSA8PSAxMjhSC2lzUGFydGl0aW9uOoIBCglpc19wcmVmaXgSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYu+aVJiABKAhCR8JIRApCCg9zdHJpbmcucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaEXRoaXMuaXNJcFByZWZpeCgpUghpc1ByZWZpeDptCgZpc191cmkSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvOaVJiABKAhCOMJINQozCgpzdHJpbmcudXJpEhdnaXZlbiB1cmkgbXVzdCBiZSB2YWxpZBoMdGhpcy5pc1VyaSgpUgVpc1VyaTqnAQoRaXNfaXBfb3JfaG9zdG5hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYveaVJiABKAhCXsJIWwpZCg12YWxpZF9hZGRyZXNzEiZtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcyBvciBob3N0bmFtZRogdGhpcy5pc0lwKCkgfHwgdGhpcy5pc0hvc3RuYW1lKClSDmlzSXBPckhvc3RuYW1lOp0BCgd0cmltbWVkEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL7mlSYgASgIQmXCSGIKYAoOc3RyaW5nLnRyaW1tZWQSK3ZhbHVlIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaIXRoaXMudHJpbSgpLnNpemUoKSA9PSB0aGlzLnNpemUoKVIHdHJpbW1lZDraAQoPaXNfcHJvamVjdF9zbHVnEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL/mlSYgASgIQpMBwkiPAQqMAQoWc3RyaW5nLmlzX3Byb2plY3Rfc2x1ZxIebXVzdCBiZSBhIGxvd2VyY2FzZSBpZGVudGlmaWVyGlJ0aGlzLm1hdGNoZXMoJ14oW2Etel9dWzAtOUEtWmEtel8tXSskKScpICYmIHRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4Ug1pc1Byb2plY3RTbHVnOrEBCgxpc19pcHY0X2NpZHISGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYwOaVJiABKAhCccJIbgpsChNzdHJpbmcuaXNfaXB2NF9jaWRyEittdXN0IGJlIGEgdmFsaWQgSVB2NCBDSURSLCBlLmcuIDEwLjAuMC4wLzI0Gih0aGlzLmlzSXBQcmVmaXgoKSAmJiAhdGhpcy5jb250YWlucygnOicpUgppc0lwdjRDaWRyOo8BCghwcmVmaXhlcxIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMe0liYgASgIQlPCSFAKTgoRcmVwZWF0ZWQucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaG3RoaXMuYWxsKG0sIG0uaXNJcFByZWZpeCgpKVIIcHJlZml4ZXM6dQoDaXBzEhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYyLSWJiABKAhCQ8JIQAo+CgxyZXBlYXRlZC5pcHMSF2dpdmVuIGlwcyBtdXN0IGJlIHZhbGlkGhV0aGlzLmFsbChtLCBtLmlzSXAoKSlSA2lwczrmAQoRYXJlX2hvc3RfYW5kX3BvcnQSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjJtJYmIAEoCEKaAcJIlgEKkwEKGnJlcGVhdGVkLmFyZV9ob3N0X2FuZF9wb3J0ElBnaXZlbiBlbnRyaWVzIG11c3QgYWxsIGJlIGluIHRoZSBmb3JtIG9mIDxpcCB8IGhvc3Q+Ojxwb3J0PiBidXQgcG9ydCBpcyBvcHRpb25hbBojdGhpcy5hbGwobSwgbS5pc0hvc3RBbmRQb3J0KGZhbHNlKSlSDmFyZUhvc3RBbmRQb3J0OroBCgthbGxfdHJpbW1lZBIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMq0liYgASgIQnnCSHYKdAoUcmVwZWF0ZWQuYWxsX3RyaW1tZWQSMmdpdmVuIHZhbHVlcyBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCB3aGl0ZXNwYWNlGih0aGlzLmFsbChtLCBtLnRyaW0oKS5zaXplKCkgPT0gbS5zaXplKCkpUgphbGxUcmltbWVkOoQCChdrZXlzX2FuZF92YWx1ZXNfdHJpbW1lZBIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlcxjXgpcmIAEoCEKxAcJIrQEKqgEKG21hcC5rZXlzX2FuZF92YWx1ZXNfdHJpbW1lZBI1a2V5cyBhbmQgdmFsdWVzIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaVHRoaXMuYWxsKGssIGsudHJpbSgpLnNpemUoKSA9PSBrLnNpemUoKSkgJiYgdGhpcy5hbGwodiwgdi50cmltKCkuc2l6ZSgpID09IHYuc2l6ZSgpKVIUa2V5c0FuZFZhbHVlc1RyaW1tZWQ6qwEKDGtleXNfdHJpbW1lZBIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlcxjYgpcmIAEoCEJtwkhqCmgKEG1hcC5rZXlzX3RyaW1tZWQSKmtleXMgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZRoodGhpcy5hbGwoaywgay50cmltKCkuc2l6ZSgpID09IGsuc2l6ZSgpKVILa2V5c1RyaW1tZWRCoAEKD2NvbS5maXRzLmFwaS52MUIUUHJlZGVmaW5lZFJ1bGVzUHJvdG9QAVopZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdjE7YXBpdjGiAgNGQViqAgtGaXRzLkFwaS5WMcoCC0ZpdHNcQXBpXFYx4gIXRml0c1xBcGlcVjFcR1BCTWV0YWRhdGHqAg1GaXRzOjpBcGk6OlYx", [file_buf_validate_validate]);
15
15
 
16
16
  /**
17
17
  * Macaddress returns true if the given string is a valid macadress
@@ -77,13 +77,29 @@ export const is_ip_or_hostname: GenExtension<StringRules, boolean> = /*@__PURE__
77
77
  export const trimmed: GenExtension<StringRules, boolean> = /*@__PURE__*/
78
78
  extDesc(file_fits_api_v1_predefined_rules, 7);
79
79
 
80
+ /**
81
+ * IsProjectSlug enforces the string to be usable as a project slug.
82
+ *
83
+ * @generated from extension: optional bool is_project_slug = 80048959;
84
+ */
85
+ export const is_project_slug: GenExtension<StringRules, boolean> = /*@__PURE__*/
86
+ extDesc(file_fits_api_v1_predefined_rules, 8);
87
+
88
+ /**
89
+ * IsIpv4Cidr validates if the given string is a valid IPv4 CIDR, e.g. 10.0.0.0/24
90
+ *
91
+ * @generated from extension: optional bool is_ipv4_cidr = 80048960;
92
+ */
93
+ export const is_ipv4_cidr: GenExtension<StringRules, boolean> = /*@__PURE__*/
94
+ extDesc(file_fits_api_v1_predefined_rules, 9);
95
+
80
96
  /**
81
97
  * Prefixes validates if a slice of prefixes in string form are valid
82
98
  *
83
99
  * @generated from extension: optional bool prefixes = 80058951;
84
100
  */
85
101
  export const prefixes: GenExtension<RepeatedRules, boolean> = /*@__PURE__*/
86
- extDesc(file_fits_api_v1_predefined_rules, 8);
102
+ extDesc(file_fits_api_v1_predefined_rules, 10);
87
103
 
88
104
  /**
89
105
  * Ips validates if a slice of ips in string form are valid
@@ -91,7 +107,7 @@ export const prefixes: GenExtension<RepeatedRules, boolean> = /*@__PURE__*/
91
107
  * @generated from extension: optional bool ips = 80058952;
92
108
  */
93
109
  export const ips: GenExtension<RepeatedRules, boolean> = /*@__PURE__*/
94
- extDesc(file_fits_api_v1_predefined_rules, 9);
110
+ extDesc(file_fits_api_v1_predefined_rules, 11);
95
111
 
96
112
  /**
97
113
  * AreHostAndPort validates if a slice of strings are all in the form of <ip | host>:<port>
@@ -99,7 +115,7 @@ export const ips: GenExtension<RepeatedRules, boolean> = /*@__PURE__*/
99
115
  * @generated from extension: optional bool are_host_and_port = 80058953;
100
116
  */
101
117
  export const are_host_and_port: GenExtension<RepeatedRules, boolean> = /*@__PURE__*/
102
- extDesc(file_fits_api_v1_predefined_rules, 10);
118
+ extDesc(file_fits_api_v1_predefined_rules, 12);
103
119
 
104
120
  /**
105
121
  * All Trimmed enforces all strings to be trimmed, e.g. no whitespaces at the begin and end
@@ -107,7 +123,7 @@ export const are_host_and_port: GenExtension<RepeatedRules, boolean> = /*@__PURE
107
123
  * @generated from extension: optional bool all_trimmed = 80058954;
108
124
  */
109
125
  export const all_trimmed: GenExtension<RepeatedRules, boolean> = /*@__PURE__*/
110
- extDesc(file_fits_api_v1_predefined_rules, 11);
126
+ extDesc(file_fits_api_v1_predefined_rules, 13);
111
127
 
112
128
  /**
113
129
  * Keys and Values trimmed enforces all map keys and values to be trimmed, e.g. no whitespaces at the begin and end
@@ -115,7 +131,7 @@ export const all_trimmed: GenExtension<RepeatedRules, boolean> = /*@__PURE__*/
115
131
  * @generated from extension: optional bool keys_and_values_trimmed = 80068951;
116
132
  */
117
133
  export const keys_and_values_trimmed: GenExtension<MapRules, boolean> = /*@__PURE__*/
118
- extDesc(file_fits_api_v1_predefined_rules, 12);
134
+ extDesc(file_fits_api_v1_predefined_rules, 14);
119
135
 
120
136
  /**
121
137
  * Keys trimmed enforces all map keys and values to be trimmed, e.g. no whitespaces at the begin and end
@@ -123,5 +139,5 @@ export const keys_and_values_trimmed: GenExtension<MapRules, boolean> = /*@__PUR
123
139
  * @generated from extension: optional bool keys_trimmed = 80068952;
124
140
  */
125
141
  export const keys_trimmed: GenExtension<MapRules, boolean> = /*@__PURE__*/
126
- extDesc(file_fits_api_v1_predefined_rules, 13);
142
+ extDesc(file_fits_api_v1_predefined_rules, 15);
127
143
 
@@ -48,6 +48,13 @@ export type Project = Message<"fits.api.v1.Project"> & {
48
48
  * @generated from field: optional string avatar_url = 6;
49
49
  */
50
50
  avatarUrl?: string | undefined;
51
+ /**
52
+ * Slug is an immutable identifier of the project.
53
+ * Guaranteed to be unique within a tenant.
54
+ *
55
+ * @generated from field: string slug = 7;
56
+ */
57
+ slug: string;
51
58
  };
52
59
  /**
53
60
  * Describes the message fits.api.v1.Project.
@@ -151,12 +158,11 @@ export declare const ProjectServiceGetResponseSchema: GenMessage<ProjectServiceG
151
158
  */
152
159
  export type ProjectServiceCreateRequest = Message<"fits.api.v1.ProjectServiceCreateRequest"> & {
153
160
  /**
154
- * Login is the tenant of this project
155
- * TODO: is login really a good name?
161
+ * Tenant is the tenant of this project (the tenant login)
156
162
  *
157
- * @generated from field: string login = 1;
163
+ * @generated from field: string tenant = 1;
158
164
  */
159
- login: string;
165
+ tenant: string;
160
166
  /**
161
167
  * Name of this project, unique per tenant
162
168
  *
@@ -5,11 +5,10 @@ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2
5
5
  import { file_buf_validate_validate } from "../../../buf/validate/validate_pb";
6
6
  import { file_fits_api_v1_common } from "./common_pb";
7
7
  import { file_fits_api_v1_predefined_rules } from "./predefined_rules_pb";
8
- import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
9
8
  /**
10
9
  * Describes the file fits/api/v1/project.proto.
11
10
  */
12
- export const file_fits_api_v1_project = /*@__PURE__*/ fileDesc("ChlmaXRzL2FwaS92MS9wcm9qZWN0LnByb3RvEgtmaXRzLmFwaS52MSKtAQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBQg0KC19hdmF0YXJfdXJsIr4BChlQcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIgCgZ0ZW5hbnQYAyABKAlCC7pICHIGwLOusQIBSAKIAQESKAoGbGFiZWxzGAQgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzSAOIAQFCBQoDX2lkQgcKBV9uYW1lQgkKB190ZW5hbnRCCQoHX2xhYmVscyJEChpQcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZRImCghwcm9qZWN0cxgBIAMoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiNQoYUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIkIKGVByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiwwEKG1Byb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIaCgVsb2dpbhgBIAEoCUILukgIcgbAs66xAgESGQoEbmFtZRgCIAEoCUILukgIcgbAs66xAgESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEhcKCmF2YXRhcl91cmwYBCABKAlIAIgBARIjCgZsYWJlbHMYBSABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNCDQoLX2F2YXRhcl91cmwiRQocUHJvamVjdFNlcnZpY2VDcmVhdGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCI4ChtQcm9qZWN0U2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiRQocUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCKxAgobUHJvamVjdFNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESFwoKYXZhdGFyX3VybBgFIAEoCUgCiAEBEi4KBmxhYmVscxgGIAEoCzIZLmZpdHMuYXBpLnYxLlVwZGF0ZUxhYmVsc0gDiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIkUKHFByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QylgQKDlByb2plY3RTZXJ2aWNlEmEKBExpc3QSJi5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0GicuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGALg8xgCEmEKA0dldBIlLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsLzGAIBAuDzGAESaAoGRGVsZXRlEiguZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXF1ZXN0GikuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZSIJyvMYAQHg8xgBEmkKBlVwZGF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAFCmAEKD2NvbS5maXRzLmFwaS52MUIMUHJvamVjdFByb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]);
11
+ export const file_fits_api_v1_project = /*@__PURE__*/ fileDesc("ChlmaXRzL2FwaS92MS9wcm9qZWN0LnByb3RvEgtmaXRzLmFwaS52MSLIAQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBEhkKBHNsdWcYByABKAlCC7pICHIG+LOusQIBQg0KC19hdmF0YXJfdXJsIr4BChlQcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIgCgZ0ZW5hbnQYAyABKAlCC7pICHIGwLOusQIBSAKIAQESKAoGbGFiZWxzGAQgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzSAOIAQFCBQoDX2lkQgcKBV9uYW1lQgkKB190ZW5hbnRCCQoHX2xhYmVscyJEChpQcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZRImCghwcm9qZWN0cxgBIAMoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiNQoYUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIkIKGVByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QixAEKG1Byb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIbCgZ0ZW5hbnQYASABKAlCC7pICHIGwLOusQIBEhkKBG5hbWUYAiABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAMgASgJQgu6SAhyBsizrrECARIXCgphdmF0YXJfdXJsGAQgASgJSACIAQESIwoGbGFiZWxzGAUgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzQg0KC19hdmF0YXJfdXJsIkUKHFByb2plY3RTZXJ2aWNlQ3JlYXRlUmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiOAobUHJvamVjdFNlcnZpY2VEZWxldGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIkUKHFByb2plY3RTZXJ2aWNlRGVsZXRlUmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QisQIKG1Byb2plY3RTZXJ2aWNlVXBkYXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARI0Cgt1cGRhdGVfbWV0YRgCIAEoCzIXLmZpdHMuYXBpLnYxLlVwZGF0ZU1ldGFCBrpIA8gBARIeCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECAUgAiAEBEiUKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECAUgBiAEBEhcKCmF2YXRhcl91cmwYBSABKAlIAogBARIuCgZsYWJlbHMYBiABKAsyGS5maXRzLmFwaS52MS5VcGRhdGVMYWJlbHNIA4gBAUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CDQoLX2F2YXRhcl91cmxCCQoHX2xhYmVscyJFChxQcm9qZWN0U2VydmljZVVwZGF0ZVJlc3BvbnNlEiUKB3Byb2plY3QYASABKAsyFC5maXRzLmFwaS52MS5Qcm9qZWN0MpYECg5Qcm9qZWN0U2VydmljZRJhCgRMaXN0EiYuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VMaXN0UmVxdWVzdBonLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlTGlzdFJlc3BvbnNlIgjY8xgC4PMYAhJhCgNHZXQSJS5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUdldFJlcXVlc3QaJi5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUdldFJlc3BvbnNlIgvK8xgDAQID4PMYAhJpCgZDcmVhdGUSKC5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUNyZWF0ZVJlcXVlc3QaKS5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUNyZWF0ZVJlc3BvbnNlIgrC8xgCAQLg8xgBEmgKBkRlbGV0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlRGVsZXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlRGVsZXRlUmVzcG9uc2UiCcrzGAEB4PMYARJpCgZVcGRhdGUSKC5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZVVwZGF0ZVJlcXVlc3QaKS5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZVVwZGF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBQpgBCg9jb20uZml0cy5hcGkudjFCDFByb2plY3RQcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]);
13
12
  /**
14
13
  * Describes the message fits.api.v1.Project.
15
14
  * Use `create(ProjectSchema)` to create a new message.
@@ -8,14 +8,13 @@ import { file_buf_validate_validate } from "../../../buf/validate/validate_pb";
8
8
  import type { Labels, Meta, UpdateLabels, UpdateMeta } from "./common_pb";
9
9
  import { file_fits_api_v1_common } from "./common_pb";
10
10
  import { file_fits_api_v1_predefined_rules } from "./predefined_rules_pb";
11
- import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
12
11
  import type { Message } from "@bufbuild/protobuf";
13
12
 
14
13
  /**
15
14
  * Describes the file fits/api/v1/project.proto.
16
15
  */
17
16
  export const file_fits_api_v1_project: GenFile = /*@__PURE__*/
18
- fileDesc("ChlmaXRzL2FwaS92MS9wcm9qZWN0LnByb3RvEgtmaXRzLmFwaS52MSKtAQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBQg0KC19hdmF0YXJfdXJsIr4BChlQcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIgCgZ0ZW5hbnQYAyABKAlCC7pICHIGwLOusQIBSAKIAQESKAoGbGFiZWxzGAQgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzSAOIAQFCBQoDX2lkQgcKBV9uYW1lQgkKB190ZW5hbnRCCQoHX2xhYmVscyJEChpQcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZRImCghwcm9qZWN0cxgBIAMoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiNQoYUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIkIKGVByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiwwEKG1Byb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIaCgVsb2dpbhgBIAEoCUILukgIcgbAs66xAgESGQoEbmFtZRgCIAEoCUILukgIcgbAs66xAgESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEhcKCmF2YXRhcl91cmwYBCABKAlIAIgBARIjCgZsYWJlbHMYBSABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNCDQoLX2F2YXRhcl91cmwiRQocUHJvamVjdFNlcnZpY2VDcmVhdGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCI4ChtQcm9qZWN0U2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiRQocUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZRIlCgdwcm9qZWN0GAEgASgLMhQuZml0cy5hcGkudjEuUHJvamVjdCKxAgobUHJvamVjdFNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESFwoKYXZhdGFyX3VybBgFIAEoCUgCiAEBEi4KBmxhYmVscxgGIAEoCzIZLmZpdHMuYXBpLnYxLlVwZGF0ZUxhYmVsc0gDiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIkUKHFByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QylgQKDlByb2plY3RTZXJ2aWNlEmEKBExpc3QSJi5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0GicuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGALg8xgCEmEKA0dldBIlLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVxdWVzdBomLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmkKBkNyZWF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsLzGAIBAuDzGAESaAoGRGVsZXRlEiguZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXF1ZXN0GikuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZSIJyvMYAQHg8xgBEmkKBlVwZGF0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAFCmAEKD2NvbS5maXRzLmFwaS52MUIMUHJvamVjdFByb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]);
17
+ fileDesc("ChlmaXRzL2FwaS92MS9wcm9qZWN0LnByb3RvEgtmaXRzLmFwaS52MSLIAQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEh8KBG1ldGEYAiABKAsyES5maXRzLmFwaS52MS5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBEhkKBHNsdWcYByABKAlCC7pICHIG+LOusQIBQg0KC19hdmF0YXJfdXJsIr4BChlQcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIgCgZ0ZW5hbnQYAyABKAlCC7pICHIGwLOusQIBSAKIAQESKAoGbGFiZWxzGAQgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzSAOIAQFCBQoDX2lkQgcKBV9uYW1lQgkKB190ZW5hbnRCCQoHX2xhYmVscyJEChpQcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZRImCghwcm9qZWN0cxgBIAMoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiNQoYUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIkIKGVByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QixAEKG1Byb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIbCgZ0ZW5hbnQYASABKAlCC7pICHIGwLOusQIBEhkKBG5hbWUYAiABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAMgASgJQgu6SAhyBsizrrECARIXCgphdmF0YXJfdXJsGAQgASgJSACIAQESIwoGbGFiZWxzGAUgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzQg0KC19hdmF0YXJfdXJsIkUKHFByb2plY3RTZXJ2aWNlQ3JlYXRlUmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QiOAobUHJvamVjdFNlcnZpY2VEZWxldGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIkUKHFByb2plY3RTZXJ2aWNlRGVsZXRlUmVzcG9uc2USJQoHcHJvamVjdBgBIAEoCzIULmZpdHMuYXBpLnYxLlByb2plY3QisQIKG1Byb2plY3RTZXJ2aWNlVXBkYXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARI0Cgt1cGRhdGVfbWV0YRgCIAEoCzIXLmZpdHMuYXBpLnYxLlVwZGF0ZU1ldGFCBrpIA8gBARIeCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECAUgAiAEBEiUKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECAUgBiAEBEhcKCmF2YXRhcl91cmwYBSABKAlIAogBARIuCgZsYWJlbHMYBiABKAsyGS5maXRzLmFwaS52MS5VcGRhdGVMYWJlbHNIA4gBAUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CDQoLX2F2YXRhcl91cmxCCQoHX2xhYmVscyJFChxQcm9qZWN0U2VydmljZVVwZGF0ZVJlc3BvbnNlEiUKB3Byb2plY3QYASABKAsyFC5maXRzLmFwaS52MS5Qcm9qZWN0MpYECg5Qcm9qZWN0U2VydmljZRJhCgRMaXN0EiYuZml0cy5hcGkudjEuUHJvamVjdFNlcnZpY2VMaXN0UmVxdWVzdBonLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlTGlzdFJlc3BvbnNlIgjY8xgC4PMYAhJhCgNHZXQSJS5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUdldFJlcXVlc3QaJi5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUdldFJlc3BvbnNlIgvK8xgDAQID4PMYAhJpCgZDcmVhdGUSKC5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUNyZWF0ZVJlcXVlc3QaKS5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZUNyZWF0ZVJlc3BvbnNlIgrC8xgCAQLg8xgBEmgKBkRlbGV0ZRIoLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlRGVsZXRlUmVxdWVzdBopLmZpdHMuYXBpLnYxLlByb2plY3RTZXJ2aWNlRGVsZXRlUmVzcG9uc2UiCcrzGAEB4PMYARJpCgZVcGRhdGUSKC5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZVVwZGF0ZVJlcXVlc3QaKS5maXRzLmFwaS52MS5Qcm9qZWN0U2VydmljZVVwZGF0ZVJlc3BvbnNlIgrK8xgCAQLg8xgBQpgBCg9jb20uZml0cy5hcGkudjFCDFByb2plY3RQcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]);
19
18
 
20
19
  /**
21
20
  * Project defines a group of resources belonging to a tenant
@@ -65,6 +64,14 @@ export type Project = Message<"fits.api.v1.Project"> & {
65
64
  * @generated from field: optional string avatar_url = 6;
66
65
  */
67
66
  avatarUrl?: string | undefined;
67
+
68
+ /**
69
+ * Slug is an immutable identifier of the project.
70
+ * Guaranteed to be unique within a tenant.
71
+ *
72
+ * @generated from field: string slug = 7;
73
+ */
74
+ slug: string;
68
75
  };
69
76
 
70
77
  /**
@@ -186,12 +193,11 @@ export const ProjectServiceGetResponseSchema: GenMessage<ProjectServiceGetRespon
186
193
  */
187
194
  export type ProjectServiceCreateRequest = Message<"fits.api.v1.ProjectServiceCreateRequest"> & {
188
195
  /**
189
- * Login is the tenant of this project
190
- * TODO: is login really a good name?
196
+ * Tenant is the tenant of this project (the tenant login)
191
197
  *
192
- * @generated from field: string login = 1;
198
+ * @generated from field: string tenant = 1;
193
199
  */
194
- login: string;
200
+ tenant: string;
195
201
 
196
202
  /**
197
203
  * Name of this project, unique per tenant
@@ -96,11 +96,11 @@ export declare const TenantServiceListRequestSchema: GenMessage<TenantServiceLis
96
96
  */
97
97
  export type TenantServiceGetRequest = Message<"fits.api.v1.TenantServiceGetRequest"> & {
98
98
  /**
99
- * Login of the tenant
99
+ * Tenant is the login of the tenant
100
100
  *
101
- * @generated from field: string login = 1;
101
+ * @generated from field: string tenant = 1;
102
102
  */
103
- login: string;
103
+ tenant: string;
104
104
  };
105
105
  /**
106
106
  * Describes the message fits.api.v1.TenantServiceGetRequest.
@@ -156,11 +156,11 @@ export declare const TenantServiceCreateRequestSchema: GenMessage<TenantServiceC
156
156
  */
157
157
  export type TenantServiceUpdateRequest = Message<"fits.api.v1.TenantServiceUpdateRequest"> & {
158
158
  /**
159
- * Login of the tenant
159
+ * Tenant is the login of the tenant
160
160
  *
161
- * @generated from field: string login = 1;
161
+ * @generated from field: string tenant = 1;
162
162
  */
163
- login: string;
163
+ tenant: string;
164
164
  /**
165
165
  * UpdateMeta contains the timestamp and strategy to be used in this update request
166
166
  *
@@ -210,11 +210,11 @@ export declare const TenantServiceUpdateRequestSchema: GenMessage<TenantServiceU
210
210
  */
211
211
  export type TenantServiceDeleteRequest = Message<"fits.api.v1.TenantServiceDeleteRequest"> & {
212
212
  /**
213
- * Login of the tenant
213
+ * Tenant is the login of the tenant
214
214
  *
215
- * @generated from field: string login = 1;
215
+ * @generated from field: string tenant = 1;
216
216
  */
217
- login: string;
217
+ tenant: string;
218
218
  };
219
219
  /**
220
220
  * Describes the message fits.api.v1.TenantServiceDeleteRequest.
@@ -5,11 +5,10 @@ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2
5
5
  import { file_buf_validate_validate } from "../../../buf/validate/validate_pb";
6
6
  import { file_fits_api_v1_common } from "./common_pb";
7
7
  import { file_fits_api_v1_predefined_rules } from "./predefined_rules_pb";
8
- import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
9
8
  /**
10
9
  * Describes the file fits/api/v1/tenant.proto.
11
10
  */
12
- export const file_fits_api_v1_tenant = /*@__PURE__*/ fileDesc("ChhmaXRzL2FwaS92MS90ZW5hbnQucHJvdG8SC2ZpdHMuYXBpLnYxIqwBCgZUZW5hbnQSDQoFbG9naW4YASABKAkSHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEbmFtZRgDIAEoCUILukgIcgbAs66xAgESDQoFZW1haWwYBCABKAkSIAoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBEhIKCmF2YXRhcl91cmwYBiABKAkSEgoKY3JlYXRlZF9ieRgHIAEoCSKQAQoYVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIoCgZsYWJlbHMYAyABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNIAogBAUIFCgNfaWRCBwoFX25hbWVCCQoHX2xhYmVscyIoChdUZW5hbnRTZXJ2aWNlR2V0UmVxdWVzdBINCgVsb2dpbhgBIAEoCSLiAQoaVGVuYW50U2VydmljZUNyZWF0ZVJlcXVlc3QSGQoEbmFtZRgBIAEoCUILukgIcgbAs66xAgESJQoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBSACIAQESGwoFZW1haWwYAyABKAlCB7pIBHICYAFIAYgBARIXCgphdmF0YXJfdXJsGAQgASgJSAKIAQESIwoGbGFiZWxzGAUgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzQg4KDF9kZXNjcmlwdGlvbkIICgZfZW1haWxCDQoLX2F2YXRhcl91cmwiywIKGlRlbmFudFNlcnZpY2VVcGRhdGVSZXF1ZXN0Eg0KBWxvZ2luGAEgASgJEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESGwoFZW1haWwYBCABKAlCB7pIBHICYAFIAYgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAogBARIXCgphdmF0YXJfdXJsGAYgASgJSAOIAQESLgoGbGFiZWxzGAcgASgLMhkuZml0cy5hcGkudjEuVXBkYXRlTGFiZWxzSASIAQFCBwoFX25hbWVCCAoGX2VtYWlsQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIisKGlRlbmFudFNlcnZpY2VEZWxldGVSZXF1ZXN0Eg0KBWxvZ2luGAEgASgJIj8KGFRlbmFudFNlcnZpY2VHZXRSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQQoZVGVuYW50U2VydmljZUxpc3RSZXNwb25zZRIkCgd0ZW5hbnRzGAEgAygLMhMuZml0cy5hcGkudjEuVGVuYW50IkIKG1RlbmFudFNlcnZpY2VDcmVhdGVSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQgobVGVuYW50U2VydmljZVVwZGF0ZVJlc3BvbnNlEiMKBnRlbmFudBgBIAEoCzITLmZpdHMuYXBpLnYxLlRlbmFudCJCChtUZW5hbnRTZXJ2aWNlRGVsZXRlUmVzcG9uc2USIwoGdGVuYW50GAEgASgLMhMuZml0cy5hcGkudjEuVGVuYW50MosECg1UZW5hbnRTZXJ2aWNlEmUKBkNyZWF0ZRInLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VDcmVhdGVSZXF1ZXN0GiguZml0cy5hcGkudjEuVGVuYW50U2VydmljZUNyZWF0ZVJlc3BvbnNlIgjY8xgC4PMYARJfCgRMaXN0EiUuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0GiYuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXNwb25zZSII2PMYAuDzGAISYAoDR2V0EiQuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUdldFJlcXVlc3QaJS5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlR2V0UmVzcG9uc2UiDMLzGAQBAgME4PMYAhJnCgZVcGRhdGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlVXBkYXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VVcGRhdGVSZXNwb25zZSIKwvMYAgEC4PMYARJnCgZEZWxldGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlRGVsZXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VEZWxldGVSZXNwb25zZSIKwvMYAgEC4PMYAUKXAQoPY29tLmZpdHMuYXBpLnYxQgtUZW5hbnRQcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]);
11
+ export const file_fits_api_v1_tenant = /*@__PURE__*/ fileDesc("ChhmaXRzL2FwaS92MS90ZW5hbnQucHJvdG8SC2ZpdHMuYXBpLnYxIqwBCgZUZW5hbnQSDQoFbG9naW4YASABKAkSHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEbmFtZRgDIAEoCUILukgIcgbAs66xAgESDQoFZW1haWwYBCABKAkSIAoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBEhIKCmF2YXRhcl91cmwYBiABKAkSEgoKY3JlYXRlZF9ieRgHIAEoCSKQAQoYVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIoCgZsYWJlbHMYAyABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNIAogBAUIFCgNfaWRCBwoFX25hbWVCCQoHX2xhYmVscyIpChdUZW5hbnRTZXJ2aWNlR2V0UmVxdWVzdBIOCgZ0ZW5hbnQYASABKAki4gEKGlRlbmFudFNlcnZpY2VDcmVhdGVSZXF1ZXN0EhkKBG5hbWUYASABKAlCC7pICHIGwLOusQIBEiUKC2Rlc2NyaXB0aW9uGAIgASgJQgu6SAhyBsizrrECAUgAiAEBEhsKBWVtYWlsGAMgASgJQge6SARyAmABSAGIAQESFwoKYXZhdGFyX3VybBgEIAEoCUgCiAEBEiMKBmxhYmVscxgFIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVsc0IOCgxfZGVzY3JpcHRpb25CCAoGX2VtYWlsQg0KC19hdmF0YXJfdXJsIswCChpUZW5hbnRTZXJ2aWNlVXBkYXRlUmVxdWVzdBIOCgZ0ZW5hbnQYASABKAkSNAoLdXBkYXRlX21ldGEYAiABKAsyFy5maXRzLmFwaS52MS5VcGRhdGVNZXRhQga6SAPIAQESHgoEbmFtZRgDIAEoCUILukgIcgbAs66xAgFIAIgBARIbCgVlbWFpbBgEIAEoCUIHukgEcgJgAUgBiAEBEiUKC2Rlc2NyaXB0aW9uGAUgASgJQgu6SAhyBsizrrECAUgCiAEBEhcKCmF2YXRhcl91cmwYBiABKAlIA4gBARIuCgZsYWJlbHMYByABKAsyGS5maXRzLmFwaS52MS5VcGRhdGVMYWJlbHNIBIgBAUIHCgVfbmFtZUIICgZfZW1haWxCDgoMX2Rlc2NyaXB0aW9uQg0KC19hdmF0YXJfdXJsQgkKB19sYWJlbHMiLAoaVGVuYW50U2VydmljZURlbGV0ZVJlcXVlc3QSDgoGdGVuYW50GAEgASgJIj8KGFRlbmFudFNlcnZpY2VHZXRSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQQoZVGVuYW50U2VydmljZUxpc3RSZXNwb25zZRIkCgd0ZW5hbnRzGAEgAygLMhMuZml0cy5hcGkudjEuVGVuYW50IkIKG1RlbmFudFNlcnZpY2VDcmVhdGVSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQgobVGVuYW50U2VydmljZVVwZGF0ZVJlc3BvbnNlEiMKBnRlbmFudBgBIAEoCzITLmZpdHMuYXBpLnYxLlRlbmFudCJCChtUZW5hbnRTZXJ2aWNlRGVsZXRlUmVzcG9uc2USIwoGdGVuYW50GAEgASgLMhMuZml0cy5hcGkudjEuVGVuYW50MosECg1UZW5hbnRTZXJ2aWNlEmUKBkNyZWF0ZRInLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VDcmVhdGVSZXF1ZXN0GiguZml0cy5hcGkudjEuVGVuYW50U2VydmljZUNyZWF0ZVJlc3BvbnNlIgjY8xgC4PMYARJfCgRMaXN0EiUuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0GiYuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXNwb25zZSII2PMYAuDzGAISYAoDR2V0EiQuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUdldFJlcXVlc3QaJS5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlR2V0UmVzcG9uc2UiDMLzGAQBAgME4PMYAhJnCgZVcGRhdGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlVXBkYXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VVcGRhdGVSZXNwb25zZSIKwvMYAgEC4PMYARJnCgZEZWxldGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlRGVsZXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VEZWxldGVSZXNwb25zZSIKwvMYAgEC4PMYAUKXAQoPY29tLmZpdHMuYXBpLnYxQgtUZW5hbnRQcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]);
13
12
  /**
14
13
  * Describes the message fits.api.v1.Tenant.
15
14
  * Use `create(TenantSchema)` to create a new message.
@@ -8,14 +8,13 @@ import { file_buf_validate_validate } from "../../../buf/validate/validate_pb";
8
8
  import type { Labels, Meta, UpdateLabels, UpdateMeta } from "./common_pb";
9
9
  import { file_fits_api_v1_common } from "./common_pb";
10
10
  import { file_fits_api_v1_predefined_rules } from "./predefined_rules_pb";
11
- import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
12
11
  import type { Message } from "@bufbuild/protobuf";
13
12
 
14
13
  /**
15
14
  * Describes the file fits/api/v1/tenant.proto.
16
15
  */
17
16
  export const file_fits_api_v1_tenant: GenFile = /*@__PURE__*/
18
- fileDesc("ChhmaXRzL2FwaS92MS90ZW5hbnQucHJvdG8SC2ZpdHMuYXBpLnYxIqwBCgZUZW5hbnQSDQoFbG9naW4YASABKAkSHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEbmFtZRgDIAEoCUILukgIcgbAs66xAgESDQoFZW1haWwYBCABKAkSIAoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBEhIKCmF2YXRhcl91cmwYBiABKAkSEgoKY3JlYXRlZF9ieRgHIAEoCSKQAQoYVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIoCgZsYWJlbHMYAyABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNIAogBAUIFCgNfaWRCBwoFX25hbWVCCQoHX2xhYmVscyIoChdUZW5hbnRTZXJ2aWNlR2V0UmVxdWVzdBINCgVsb2dpbhgBIAEoCSLiAQoaVGVuYW50U2VydmljZUNyZWF0ZVJlcXVlc3QSGQoEbmFtZRgBIAEoCUILukgIcgbAs66xAgESJQoLZGVzY3JpcHRpb24YAiABKAlCC7pICHIGyLOusQIBSACIAQESGwoFZW1haWwYAyABKAlCB7pIBHICYAFIAYgBARIXCgphdmF0YXJfdXJsGAQgASgJSAKIAQESIwoGbGFiZWxzGAUgASgLMhMuZml0cy5hcGkudjEuTGFiZWxzQg4KDF9kZXNjcmlwdGlvbkIICgZfZW1haWxCDQoLX2F2YXRhcl91cmwiywIKGlRlbmFudFNlcnZpY2VVcGRhdGVSZXF1ZXN0Eg0KBWxvZ2luGAEgASgJEjQKC3VwZGF0ZV9tZXRhGAIgASgLMhcuZml0cy5hcGkudjEuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESGwoFZW1haWwYBCABKAlCB7pIBHICYAFIAYgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAogBARIXCgphdmF0YXJfdXJsGAYgASgJSAOIAQESLgoGbGFiZWxzGAcgASgLMhkuZml0cy5hcGkudjEuVXBkYXRlTGFiZWxzSASIAQFCBwoFX25hbWVCCAoGX2VtYWlsQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIisKGlRlbmFudFNlcnZpY2VEZWxldGVSZXF1ZXN0Eg0KBWxvZ2luGAEgASgJIj8KGFRlbmFudFNlcnZpY2VHZXRSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQQoZVGVuYW50U2VydmljZUxpc3RSZXNwb25zZRIkCgd0ZW5hbnRzGAEgAygLMhMuZml0cy5hcGkudjEuVGVuYW50IkIKG1RlbmFudFNlcnZpY2VDcmVhdGVSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQgobVGVuYW50U2VydmljZVVwZGF0ZVJlc3BvbnNlEiMKBnRlbmFudBgBIAEoCzITLmZpdHMuYXBpLnYxLlRlbmFudCJCChtUZW5hbnRTZXJ2aWNlRGVsZXRlUmVzcG9uc2USIwoGdGVuYW50GAEgASgLMhMuZml0cy5hcGkudjEuVGVuYW50MosECg1UZW5hbnRTZXJ2aWNlEmUKBkNyZWF0ZRInLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VDcmVhdGVSZXF1ZXN0GiguZml0cy5hcGkudjEuVGVuYW50U2VydmljZUNyZWF0ZVJlc3BvbnNlIgjY8xgC4PMYARJfCgRMaXN0EiUuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0GiYuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXNwb25zZSII2PMYAuDzGAISYAoDR2V0EiQuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUdldFJlcXVlc3QaJS5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlR2V0UmVzcG9uc2UiDMLzGAQBAgME4PMYAhJnCgZVcGRhdGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlVXBkYXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VVcGRhdGVSZXNwb25zZSIKwvMYAgEC4PMYARJnCgZEZWxldGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlRGVsZXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VEZWxldGVSZXNwb25zZSIKwvMYAgEC4PMYAUKXAQoPY29tLmZpdHMuYXBpLnYxQgtUZW5hbnRQcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]);
17
+ fileDesc("ChhmaXRzL2FwaS92MS90ZW5hbnQucHJvdG8SC2ZpdHMuYXBpLnYxIqwBCgZUZW5hbnQSDQoFbG9naW4YASABKAkSHwoEbWV0YRgCIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESGQoEbmFtZRgDIAEoCUILukgIcgbAs66xAgESDQoFZW1haWwYBCABKAkSIAoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBEhIKCmF2YXRhcl91cmwYBiABKAkSEgoKY3JlYXRlZF9ieRgHIAEoCSKQAQoYVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIoCgZsYWJlbHMYAyABKAsyEy5maXRzLmFwaS52MS5MYWJlbHNIAogBAUIFCgNfaWRCBwoFX25hbWVCCQoHX2xhYmVscyIpChdUZW5hbnRTZXJ2aWNlR2V0UmVxdWVzdBIOCgZ0ZW5hbnQYASABKAki4gEKGlRlbmFudFNlcnZpY2VDcmVhdGVSZXF1ZXN0EhkKBG5hbWUYASABKAlCC7pICHIGwLOusQIBEiUKC2Rlc2NyaXB0aW9uGAIgASgJQgu6SAhyBsizrrECAUgAiAEBEhsKBWVtYWlsGAMgASgJQge6SARyAmABSAGIAQESFwoKYXZhdGFyX3VybBgEIAEoCUgCiAEBEiMKBmxhYmVscxgFIAEoCzITLmZpdHMuYXBpLnYxLkxhYmVsc0IOCgxfZGVzY3JpcHRpb25CCAoGX2VtYWlsQg0KC19hdmF0YXJfdXJsIswCChpUZW5hbnRTZXJ2aWNlVXBkYXRlUmVxdWVzdBIOCgZ0ZW5hbnQYASABKAkSNAoLdXBkYXRlX21ldGEYAiABKAsyFy5maXRzLmFwaS52MS5VcGRhdGVNZXRhQga6SAPIAQESHgoEbmFtZRgDIAEoCUILukgIcgbAs66xAgFIAIgBARIbCgVlbWFpbBgEIAEoCUIHukgEcgJgAUgBiAEBEiUKC2Rlc2NyaXB0aW9uGAUgASgJQgu6SAhyBsizrrECAUgCiAEBEhcKCmF2YXRhcl91cmwYBiABKAlIA4gBARIuCgZsYWJlbHMYByABKAsyGS5maXRzLmFwaS52MS5VcGRhdGVMYWJlbHNIBIgBAUIHCgVfbmFtZUIICgZfZW1haWxCDgoMX2Rlc2NyaXB0aW9uQg0KC19hdmF0YXJfdXJsQgkKB19sYWJlbHMiLAoaVGVuYW50U2VydmljZURlbGV0ZVJlcXVlc3QSDgoGdGVuYW50GAEgASgJIj8KGFRlbmFudFNlcnZpY2VHZXRSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQQoZVGVuYW50U2VydmljZUxpc3RSZXNwb25zZRIkCgd0ZW5hbnRzGAEgAygLMhMuZml0cy5hcGkudjEuVGVuYW50IkIKG1RlbmFudFNlcnZpY2VDcmVhdGVSZXNwb25zZRIjCgZ0ZW5hbnQYASABKAsyEy5maXRzLmFwaS52MS5UZW5hbnQiQgobVGVuYW50U2VydmljZVVwZGF0ZVJlc3BvbnNlEiMKBnRlbmFudBgBIAEoCzITLmZpdHMuYXBpLnYxLlRlbmFudCJCChtUZW5hbnRTZXJ2aWNlRGVsZXRlUmVzcG9uc2USIwoGdGVuYW50GAEgASgLMhMuZml0cy5hcGkudjEuVGVuYW50MosECg1UZW5hbnRTZXJ2aWNlEmUKBkNyZWF0ZRInLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VDcmVhdGVSZXF1ZXN0GiguZml0cy5hcGkudjEuVGVuYW50U2VydmljZUNyZWF0ZVJlc3BvbnNlIgjY8xgC4PMYARJfCgRMaXN0EiUuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXF1ZXN0GiYuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUxpc3RSZXNwb25zZSII2PMYAuDzGAISYAoDR2V0EiQuZml0cy5hcGkudjEuVGVuYW50U2VydmljZUdldFJlcXVlc3QaJS5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlR2V0UmVzcG9uc2UiDMLzGAQBAgME4PMYAhJnCgZVcGRhdGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlVXBkYXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VVcGRhdGVSZXNwb25zZSIKwvMYAgEC4PMYARJnCgZEZWxldGUSJy5maXRzLmFwaS52MS5UZW5hbnRTZXJ2aWNlRGVsZXRlUmVxdWVzdBooLmZpdHMuYXBpLnYxLlRlbmFudFNlcnZpY2VEZWxldGVSZXNwb25zZSIKwvMYAgEC4PMYAUKXAQoPY29tLmZpdHMuYXBpLnYxQgtUZW5hbnRQcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules]);
19
18
 
20
19
  /**
21
20
  * Tenant is a customer of the platform
@@ -122,11 +121,11 @@ export const TenantServiceListRequestSchema: GenMessage<TenantServiceListRequest
122
121
  */
123
122
  export type TenantServiceGetRequest = Message<"fits.api.v1.TenantServiceGetRequest"> & {
124
123
  /**
125
- * Login of the tenant
124
+ * Tenant is the login of the tenant
126
125
  *
127
- * @generated from field: string login = 1;
126
+ * @generated from field: string tenant = 1;
128
127
  */
129
- login: string;
128
+ tenant: string;
130
129
  };
131
130
 
132
131
  /**
@@ -192,11 +191,11 @@ export const TenantServiceCreateRequestSchema: GenMessage<TenantServiceCreateReq
192
191
  */
193
192
  export type TenantServiceUpdateRequest = Message<"fits.api.v1.TenantServiceUpdateRequest"> & {
194
193
  /**
195
- * Login of the tenant
194
+ * Tenant is the login of the tenant
196
195
  *
197
- * @generated from field: string login = 1;
196
+ * @generated from field: string tenant = 1;
198
197
  */
199
- login: string;
198
+ tenant: string;
200
199
 
201
200
  /**
202
201
  * UpdateMeta contains the timestamp and strategy to be used in this update request
@@ -255,11 +254,11 @@ export const TenantServiceUpdateRequestSchema: GenMessage<TenantServiceUpdateReq
255
254
  */
256
255
  export type TenantServiceDeleteRequest = Message<"fits.api.v1.TenantServiceDeleteRequest"> & {
257
256
  /**
258
- * Login of the tenant
257
+ * Tenant is the login of the tenant
259
258
  *
260
- * @generated from field: string login = 1;
259
+ * @generated from field: string tenant = 1;
261
260
  */
262
- login: string;
261
+ tenant: string;
263
262
  };
264
263
 
265
264
  /**