@fi-ts/api 0.0.0-pr.14.980a9f6f → 0.0.0-pr.14.aa7e1f04

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.
@@ -64,6 +64,18 @@ export declare const is_project_slug: GenExtension<StringRules, boolean>;
64
64
  * @generated from extension: optional bool is_ipv4_cidr = 80048960;
65
65
  */
66
66
  export declare const is_ipv4_cidr: GenExtension<StringRules, boolean>;
67
+ /**
68
+ * IsTenantSubjectPermission returns true if name field satisfies our requirements.
69
+ *
70
+ * @generated from extension: optional bool is_tenant_subject_permission = 80048962;
71
+ */
72
+ export declare const is_tenant_subject_permission: GenExtension<StringRules, boolean>;
73
+ /**
74
+ * IsProjectSubjectPermission returns true if name field satisfies our requirements.
75
+ *
76
+ * @generated from extension: optional bool is_project_subject_permission = 80048963;
77
+ */
78
+ export declare const is_project_subject_permission: GenExtension<StringRules, boolean>;
67
79
  /**
68
80
  * Prefixes validates if a slice of prefixes in string form are valid
69
81
  *
@@ -100,3 +112,15 @@ export declare const keys_and_values_trimmed: GenExtension<MapRules, boolean>;
100
112
  * @generated from extension: optional bool keys_trimmed = 80068952;
101
113
  */
102
114
  export declare const keys_trimmed: GenExtension<MapRules, boolean>;
115
+ /**
116
+ * ProjectRolesKeysValid ensures that project roles keys met our requirements.
117
+ *
118
+ * @generated from extension: optional bool project_roles_keys_valid = 80068953;
119
+ */
120
+ export declare const project_roles_keys_valid: GenExtension<MapRules, boolean>;
121
+ /**
122
+ * TenantRolesKeysValid ensures that tenant roles keys met our requirements.
123
+ *
124
+ * @generated from extension: optional bool tenant_roles_keys_valid = 80068954;
125
+ */
126
+ export declare const tenant_roles_keys_valid: GenExtension<MapRules, boolean>;
@@ -6,7 +6,7 @@ import { file_buf_validate_validate } from "../../../buf/validate/validate_pb.js
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+aVJiABKAhCR8JIRApCCg9zdHJpbmcucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaEXRoaXMuaXNJcFByZWZpeCgpUghpc1ByZWZpeDptCgZpc191cmkSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvOaVJiABKAhCOMJINQozCgpzdHJpbmcudXJpEhdnaXZlbiB1cmkgbXVzdCBiZSB2YWxpZBoMdGhpcy5pc1VyaSgpUgVpc1VyaTqnAQoRaXNfaXBfb3JfaG9zdG5hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYveaVJiABKAhCXsJIWwpZCg12YWxpZF9hZGRyZXNzEiZtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcyBvciBob3N0bmFtZRogdGhpcy5pc0lwKCkgfHwgdGhpcy5pc0hvc3RuYW1lKClSDmlzSXBPckhvc3RuYW1lOp0BCgd0cmltbWVkEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL7mlSYgASgIQmXCSGIKYAoOc3RyaW5nLnRyaW1tZWQSK3ZhbHVlIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaIXRoaXMudHJpbSgpLnNpemUoKSA9PSB0aGlzLnNpemUoKVIHdHJpbW1lZDraAQoPaXNfcHJvamVjdF9zbHVnEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL/mlSYgASgIQpMBwkiPAQqMAQoWc3RyaW5nLmlzX3Byb2plY3Rfc2x1ZxIebXVzdCBiZSBhIGxvd2VyY2FzZSBpZGVudGlmaWVyGlJ0aGlzLm1hdGNoZXMoJ14oW2Etel9dWzAtOUEtWmEtel8tXSskKScpICYmIHRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4Ug1pc1Byb2plY3RTbHVnOrEBCgxpc19pcHY0X2NpZHISGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYwOaVJiABKAhCccJIbgpsChNzdHJpbmcuaXNfaXB2NF9jaWRyEittdXN0IGJlIGEgdmFsaWQgSVB2NCBDSURSLCBlLmcuIDEwLjAuMC4wLzI0Gih0aGlzLmlzSXBQcmVmaXgoKSAmJiAhdGhpcy5jb250YWlucygnOicpUgppc0lwdjRDaWRyOo8BCghwcmVmaXhlcxIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMe0liYgASgIQlPCSFAKTgoRcmVwZWF0ZWQucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaG3RoaXMuYWxsKG0sIG0uaXNJcFByZWZpeCgpKVIIcHJlZml4ZXM6dQoDaXBzEhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYyLSWJiABKAhCQ8JIQAo+CgxyZXBlYXRlZC5pcHMSF2dpdmVuIGlwcyBtdXN0IGJlIHZhbGlkGhV0aGlzLmFsbChtLCBtLmlzSXAoKSlSA2lwczrmAQoRYXJlX2hvc3RfYW5kX3BvcnQSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjJtJYmIAEoCEKaAcJIlgEKkwEKGnJlcGVhdGVkLmFyZV9ob3N0X2FuZF9wb3J0ElBnaXZlbiBlbnRyaWVzIG11c3QgYWxsIGJlIGluIHRoZSBmb3JtIG9mIDxpcCB8IGhvc3Q+Ojxwb3J0PiBidXQgcG9ydCBpcyBvcHRpb25hbBojdGhpcy5hbGwobSwgbS5pc0hvc3RBbmRQb3J0KGZhbHNlKSlSDmFyZUhvc3RBbmRQb3J0OroBCgthbGxfdHJpbW1lZBIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMq0liYgASgIQnnCSHYKdAoUcmVwZWF0ZWQuYWxsX3RyaW1tZWQSMmdpdmVuIHZhbHVlcyBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCB3aGl0ZXNwYWNlGih0aGlzLmFsbChtLCBtLnRyaW0oKS5zaXplKCkgPT0gbS5zaXplKCkpUgphbGxUcmltbWVkOoQCChdrZXlzX2FuZF92YWx1ZXNfdHJpbW1lZBIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlcxjXgpcmIAEoCEKxAcJIrQEKqgEKG21hcC5rZXlzX2FuZF92YWx1ZXNfdHJpbW1lZBI1a2V5cyBhbmQgdmFsdWVzIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaVHRoaXMuYWxsKGssIGsudHJpbSgpLnNpemUoKSA9PSBrLnNpemUoKSkgJiYgdGhpcy5hbGwodiwgdi50cmltKCkuc2l6ZSgpID09IHYuc2l6ZSgpKVIUa2V5c0FuZFZhbHVlc1RyaW1tZWQ6qwEKDGtleXNfdHJpbW1lZBIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlcxjYgpcmIAEoCEJtwkhqCmgKEG1hcC5rZXlzX3RyaW1tZWQSKmtleXMgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZRoodGhpcy5hbGwoaywgay50cmltKCkuc2l6ZSgpID09IGsuc2l6ZSgpKVILa2V5c1RyaW1tZWRCoAEKD2NvbS5maXRzLmFwaS52MUIUUHJlZGVmaW5lZFJ1bGVzUHJvdG9QAVopZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdjE7YXBpdjGiAgNGQViqAgtGaXRzLkFwaS5WMcoCC0ZpdHNcQXBpXFYx4gIXRml0c1xBcGlcVjFcR1BCTWV0YWRhdGHqAg1GaXRzOjpBcGk6OlYx", [file_buf_validate_validate]);
9
+ export const file_fits_api_v1_predefined_rules = /*@__PURE__*/ fileDesc("CiJmaXRzL2FwaS92MS9wcmVkZWZpbmVkX3J1bGVzLnByb3RvEgtmaXRzLmFwaS52MTq4AQoKbWFjYWRkcmVzcxIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxi35pUmIAEoCEJ6wkh3CnUKEXN0cmluZy5tYWNhZGRyZXNzEiZ0aGlzIHN0cmluZyBtdXN0IGJlIGEgdmFsaWQgbWFjYWRkcmVzcxo4dGhpcy5tYXRjaGVzKCdeKFswLTlBLUZhLWZdezJ9WzpdKXs1fShbMC05QS1GYS1mXXsyfSkkJylSCm1hY2FkZHJlc3M6mQEKB2lzX25hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuOaVJiABKAhCYsJIXwpdCg5zdHJpbmcuaXNfbmFtZRIjbXVzdCBiZSB3aXRoaW4gMiBhbmQgMTI4IGNoYXJhY3RlcnMaJnRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4UgZpc05hbWU6mgEKDmlzX2Rlc2NyaXB0aW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGLnmlSYgASgIQlXCSFIKUAoVc3RyaW5nLmlzX2Rlc2NyaXB0aW9uEiNtdXN0IGJlIHNob3J0ZXIgdGhhbiAyNTYgY2hhcmFjdGVycxoSdGhpcy5zaXplKCkgPD0gMjU2Ug1pc0Rlc2NyaXB0aW9uOqgBCgxpc19wYXJ0aXRpb24SGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuuaVJiABKAhCZ8JIZApiChNzdHJpbmcuaXNfcGFydGl0aW9uEiNtdXN0IGJlIHdpdGhpbiAyIGFuZCAxMjggY2hhcmFjdGVycxomdGhpcy5zaXplKCkgPj0gMiAmJiB0aGlzLnNpemUoKSA8PSAxMjhSC2lzUGFydGl0aW9uOoIBCglpc19wcmVmaXgSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYu+aVJiABKAhCR8JIRApCCg9zdHJpbmcucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaEXRoaXMuaXNJcFByZWZpeCgpUghpc1ByZWZpeDptCgZpc191cmkSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvOaVJiABKAhCOMJINQozCgpzdHJpbmcudXJpEhdnaXZlbiB1cmkgbXVzdCBiZSB2YWxpZBoMdGhpcy5pc1VyaSgpUgVpc1VyaTqnAQoRaXNfaXBfb3JfaG9zdG5hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYveaVJiABKAhCXsJIWwpZCg12YWxpZF9hZGRyZXNzEiZtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcyBvciBob3N0bmFtZRogdGhpcy5pc0lwKCkgfHwgdGhpcy5pc0hvc3RuYW1lKClSDmlzSXBPckhvc3RuYW1lOp0BCgd0cmltbWVkEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL7mlSYgASgIQmXCSGIKYAoOc3RyaW5nLnRyaW1tZWQSK3ZhbHVlIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaIXRoaXMudHJpbSgpLnNpemUoKSA9PSB0aGlzLnNpemUoKVIHdHJpbW1lZDraAQoPaXNfcHJvamVjdF9zbHVnEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL/mlSYgASgIQpMBwkiPAQqMAQoWc3RyaW5nLmlzX3Byb2plY3Rfc2x1ZxIebXVzdCBiZSBhIGxvd2VyY2FzZSBpZGVudGlmaWVyGlJ0aGlzLm1hdGNoZXMoJ14oW2Etel9dWzAtOUEtWmEtel8tXSskKScpICYmIHRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4Ug1pc1Byb2plY3RTbHVnOrEBCgxpc19pcHY0X2NpZHISGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYwOaVJiABKAhCccJIbgpsChNzdHJpbmcuaXNfaXB2NF9jaWRyEittdXN0IGJlIGEgdmFsaWQgSVB2NCBDSURSLCBlLmcuIDEwLjAuMC4wLzI0Gih0aGlzLmlzSXBQcmVmaXgoKSAmJiAhdGhpcy5jb250YWlucygnOicpUgppc0lwdjRDaWRyOu8BChxpc190ZW5hbnRfc3ViamVjdF9wZXJtaXNzaW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGMLmlSYgASgIQo8BwkiLAQqIAQojc3RyaW5nLmlzX3RlbmFudF9zdWJqZWN0X3Blcm1pc3Npb24SKm11c3QgYmUgJyonIG9yIHdpdGhpbiAyIGFuZCAxMjggY2hhcmFjdGVycxo1dGhpcyA9PSAnKicgfHwgdGhpcy5zaXplKCkgPj0gMiAmJiB0aGlzLnNpemUoKSA8PSAxMjhSGWlzVGVuYW50U3ViamVjdFBlcm1pc3Npb246lAIKHWlzX3Byb2plY3Rfc3ViamVjdF9wZXJtaXNzaW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGMPmlSYgASgIQrIBwkiuAQqrAQokc3RyaW5nLmlzX3Byb2plY3Rfc3ViamVjdF9wZXJtaXNzaW9uEhVtdXN0IGJlICcqJyBvciBhIHV1aWQabHRoaXMgPT0gJyonIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSQnKVIaaXNQcm9qZWN0U3ViamVjdFBlcm1pc3Npb246jwEKCHByZWZpeGVzEhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYx7SWJiABKAhCU8JIUApOChFyZXBlYXRlZC5wcmVmaXhlcxIcZ2l2ZW4gcHJlZml4ZXMgbXVzdCBiZSB2YWxpZBobdGhpcy5hbGwobSwgbS5pc0lwUHJlZml4KCkpUghwcmVmaXhlczp1CgNpcHMSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjItJYmIAEoCEJDwkhACj4KDHJlcGVhdGVkLmlwcxIXZ2l2ZW4gaXBzIG11c3QgYmUgdmFsaWQaFXRoaXMuYWxsKG0sIG0uaXNJcCgpKVIDaXBzOuYBChFhcmVfaG9zdF9hbmRfcG9ydBIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMm0liYgASgIQpoBwkiWAQqTAQoacmVwZWF0ZWQuYXJlX2hvc3RfYW5kX3BvcnQSUGdpdmVuIGVudHJpZXMgbXVzdCBhbGwgYmUgaW4gdGhlIGZvcm0gb2YgPGlwIHwgaG9zdD46PHBvcnQ+IGJ1dCBwb3J0IGlzIG9wdGlvbmFsGiN0aGlzLmFsbChtLCBtLmlzSG9zdEFuZFBvcnQoZmFsc2UpKVIOYXJlSG9zdEFuZFBvcnQ6ugEKC2FsbF90cmltbWVkEhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYyrSWJiABKAhCecJIdgp0ChRyZXBlYXRlZC5hbGxfdHJpbW1lZBIyZ2l2ZW4gdmFsdWVzIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaKHRoaXMuYWxsKG0sIG0udHJpbSgpLnNpemUoKSA9PSBtLnNpemUoKSlSCmFsbFRyaW1tZWQ6hAIKF2tleXNfYW5kX3ZhbHVlc190cmltbWVkEhYuYnVmLnZhbGlkYXRlLk1hcFJ1bGVzGNeClyYgASgIQrEBwkitAQqqAQobbWFwLmtleXNfYW5kX3ZhbHVlc190cmltbWVkEjVrZXlzIGFuZCB2YWx1ZXMgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZRpUdGhpcy5hbGwoaywgay50cmltKCkuc2l6ZSgpID09IGsuc2l6ZSgpKSAmJiB0aGlzLmFsbCh2LCB2LnRyaW0oKS5zaXplKCkgPT0gdi5zaXplKCkpUhRrZXlzQW5kVmFsdWVzVHJpbW1lZDqrAQoMa2V5c190cmltbWVkEhYuYnVmLnZhbGlkYXRlLk1hcFJ1bGVzGNiClyYgASgIQm3CSGoKaAoQbWFwLmtleXNfdHJpbW1lZBIqa2V5cyBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCB3aGl0ZXNwYWNlGih0aGlzLmFsbChrLCBrLnRyaW0oKS5zaXplKCkgPT0gay5zaXplKCkpUgtrZXlzVHJpbW1lZDqSAgoYcHJvamVjdF9yb2xlc19rZXlzX3ZhbGlkEhYuYnVmLnZhbGlkYXRlLk1hcFJ1bGVzGNmClyYgASgIQr0Bwki5AQq2AQoXcHJvamVjdF9yb2xlcy5rZXkudmFsaWQSJnN1YmplY3QgbXVzdCBiZSBhICcqJywgb3IgYSB2YWxpZCBVVUlEGnN0aGlzLmFsbChrLCBrID09ICcqJyB8fCBrLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykpUhVwcm9qZWN0Um9sZXNLZXlzVmFsaWQ64gEKF3RlbmFudF9yb2xlc19rZXlzX3ZhbGlkEhYuYnVmLnZhbGlkYXRlLk1hcFJ1bGVzGNqClyYgASgIQo8BwkiLAQqIAQoWdGVuYW50X3JvbGVzLmtleS52YWxpZBIzc3ViamVjdCBtdXN0IGJlICcqJyBvciBiZXR3ZWVuIDIgYW5kIDEyOCBjaGFyYWN0ZXJzGjl0aGlzLmFsbChrLCBrID09ICcqJyB8fCBrLnNpemUoKSA+PSAyICYmIGsuc2l6ZSgpIDw9MTI4IClSFHRlbmFudFJvbGVzS2V5c1ZhbGlkQqABCg9jb20uZml0cy5hcGkudjFCFFByZWRlZmluZWRSdWxlc1Byb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMQ", [file_buf_validate_validate]);
10
10
  /**
11
11
  * Macaddress returns true if the given string is a valid macadress
12
12
  *
@@ -67,39 +67,63 @@ export const is_project_slug = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined
67
67
  * @generated from extension: optional bool is_ipv4_cidr = 80048960;
68
68
  */
69
69
  export const is_ipv4_cidr = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 9);
70
+ /**
71
+ * IsTenantSubjectPermission returns true if name field satisfies our requirements.
72
+ *
73
+ * @generated from extension: optional bool is_tenant_subject_permission = 80048962;
74
+ */
75
+ export const is_tenant_subject_permission = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 10);
76
+ /**
77
+ * IsProjectSubjectPermission returns true if name field satisfies our requirements.
78
+ *
79
+ * @generated from extension: optional bool is_project_subject_permission = 80048963;
80
+ */
81
+ export const is_project_subject_permission = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 11);
70
82
  /**
71
83
  * Prefixes validates if a slice of prefixes in string form are valid
72
84
  *
73
85
  * @generated from extension: optional bool prefixes = 80058951;
74
86
  */
75
- export const prefixes = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 10);
87
+ export const prefixes = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 12);
76
88
  /**
77
89
  * Ips validates if a slice of ips in string form are valid
78
90
  *
79
91
  * @generated from extension: optional bool ips = 80058952;
80
92
  */
81
- export const ips = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 11);
93
+ export const ips = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 13);
82
94
  /**
83
95
  * AreHostAndPort validates if a slice of strings are all in the form of <ip | host>:<port>
84
96
  *
85
97
  * @generated from extension: optional bool are_host_and_port = 80058953;
86
98
  */
87
- export const are_host_and_port = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 12);
99
+ export const are_host_and_port = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 14);
88
100
  /**
89
101
  * All Trimmed enforces all strings to be trimmed, e.g. no whitespaces at the begin and end
90
102
  *
91
103
  * @generated from extension: optional bool all_trimmed = 80058954;
92
104
  */
93
- export const all_trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 13);
105
+ export const all_trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 15);
94
106
  /**
95
107
  * Keys and Values trimmed enforces all map keys and values to be trimmed, e.g. no whitespaces at the begin and end
96
108
  *
97
109
  * @generated from extension: optional bool keys_and_values_trimmed = 80068951;
98
110
  */
99
- export const keys_and_values_trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 14);
111
+ export const keys_and_values_trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 16);
100
112
  /**
101
113
  * Keys trimmed enforces all map keys and values to be trimmed, e.g. no whitespaces at the begin and end
102
114
  *
103
115
  * @generated from extension: optional bool keys_trimmed = 80068952;
104
116
  */
105
- export const keys_trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 15);
117
+ export const keys_trimmed = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 17);
118
+ /**
119
+ * ProjectRolesKeysValid ensures that project roles keys met our requirements.
120
+ *
121
+ * @generated from extension: optional bool project_roles_keys_valid = 80068953;
122
+ */
123
+ export const project_roles_keys_valid = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 18);
124
+ /**
125
+ * TenantRolesKeysValid ensures that tenant roles keys met our requirements.
126
+ *
127
+ * @generated from extension: optional bool tenant_roles_keys_valid = 80068954;
128
+ */
129
+ export const tenant_roles_keys_valid = /*@__PURE__*/ extDesc(file_fits_api_v1_predefined_rules, 19);
@@ -11,7 +11,7 @@ import { file_buf_validate_validate } from "../../../buf/validate/validate_pb.js
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+aVJiABKAhCR8JIRApCCg9zdHJpbmcucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaEXRoaXMuaXNJcFByZWZpeCgpUghpc1ByZWZpeDptCgZpc191cmkSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvOaVJiABKAhCOMJINQozCgpzdHJpbmcudXJpEhdnaXZlbiB1cmkgbXVzdCBiZSB2YWxpZBoMdGhpcy5pc1VyaSgpUgVpc1VyaTqnAQoRaXNfaXBfb3JfaG9zdG5hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYveaVJiABKAhCXsJIWwpZCg12YWxpZF9hZGRyZXNzEiZtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcyBvciBob3N0bmFtZRogdGhpcy5pc0lwKCkgfHwgdGhpcy5pc0hvc3RuYW1lKClSDmlzSXBPckhvc3RuYW1lOp0BCgd0cmltbWVkEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL7mlSYgASgIQmXCSGIKYAoOc3RyaW5nLnRyaW1tZWQSK3ZhbHVlIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaIXRoaXMudHJpbSgpLnNpemUoKSA9PSB0aGlzLnNpemUoKVIHdHJpbW1lZDraAQoPaXNfcHJvamVjdF9zbHVnEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL/mlSYgASgIQpMBwkiPAQqMAQoWc3RyaW5nLmlzX3Byb2plY3Rfc2x1ZxIebXVzdCBiZSBhIGxvd2VyY2FzZSBpZGVudGlmaWVyGlJ0aGlzLm1hdGNoZXMoJ14oW2Etel9dWzAtOUEtWmEtel8tXSskKScpICYmIHRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4Ug1pc1Byb2plY3RTbHVnOrEBCgxpc19pcHY0X2NpZHISGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYwOaVJiABKAhCccJIbgpsChNzdHJpbmcuaXNfaXB2NF9jaWRyEittdXN0IGJlIGEgdmFsaWQgSVB2NCBDSURSLCBlLmcuIDEwLjAuMC4wLzI0Gih0aGlzLmlzSXBQcmVmaXgoKSAmJiAhdGhpcy5jb250YWlucygnOicpUgppc0lwdjRDaWRyOo8BCghwcmVmaXhlcxIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMe0liYgASgIQlPCSFAKTgoRcmVwZWF0ZWQucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaG3RoaXMuYWxsKG0sIG0uaXNJcFByZWZpeCgpKVIIcHJlZml4ZXM6dQoDaXBzEhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYyLSWJiABKAhCQ8JIQAo+CgxyZXBlYXRlZC5pcHMSF2dpdmVuIGlwcyBtdXN0IGJlIHZhbGlkGhV0aGlzLmFsbChtLCBtLmlzSXAoKSlSA2lwczrmAQoRYXJlX2hvc3RfYW5kX3BvcnQSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjJtJYmIAEoCEKaAcJIlgEKkwEKGnJlcGVhdGVkLmFyZV9ob3N0X2FuZF9wb3J0ElBnaXZlbiBlbnRyaWVzIG11c3QgYWxsIGJlIGluIHRoZSBmb3JtIG9mIDxpcCB8IGhvc3Q+Ojxwb3J0PiBidXQgcG9ydCBpcyBvcHRpb25hbBojdGhpcy5hbGwobSwgbS5pc0hvc3RBbmRQb3J0KGZhbHNlKSlSDmFyZUhvc3RBbmRQb3J0OroBCgthbGxfdHJpbW1lZBIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMq0liYgASgIQnnCSHYKdAoUcmVwZWF0ZWQuYWxsX3RyaW1tZWQSMmdpdmVuIHZhbHVlcyBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCB3aGl0ZXNwYWNlGih0aGlzLmFsbChtLCBtLnRyaW0oKS5zaXplKCkgPT0gbS5zaXplKCkpUgphbGxUcmltbWVkOoQCChdrZXlzX2FuZF92YWx1ZXNfdHJpbW1lZBIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlcxjXgpcmIAEoCEKxAcJIrQEKqgEKG21hcC5rZXlzX2FuZF92YWx1ZXNfdHJpbW1lZBI1a2V5cyBhbmQgdmFsdWVzIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaVHRoaXMuYWxsKGssIGsudHJpbSgpLnNpemUoKSA9PSBrLnNpemUoKSkgJiYgdGhpcy5hbGwodiwgdi50cmltKCkuc2l6ZSgpID09IHYuc2l6ZSgpKVIUa2V5c0FuZFZhbHVlc1RyaW1tZWQ6qwEKDGtleXNfdHJpbW1lZBIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlcxjYgpcmIAEoCEJtwkhqCmgKEG1hcC5rZXlzX3RyaW1tZWQSKmtleXMgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZRoodGhpcy5hbGwoaywgay50cmltKCkuc2l6ZSgpID09IGsuc2l6ZSgpKVILa2V5c1RyaW1tZWRCoAEKD2NvbS5maXRzLmFwaS52MUIUUHJlZGVmaW5lZFJ1bGVzUHJvdG9QAVopZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdjE7YXBpdjGiAgNGQViqAgtGaXRzLkFwaS5WMcoCC0ZpdHNcQXBpXFYx4gIXRml0c1xBcGlcVjFcR1BCTWV0YWRhdGHqAg1GaXRzOjpBcGk6OlYx", [file_buf_validate_validate]);
14
+ fileDesc("CiJmaXRzL2FwaS92MS9wcmVkZWZpbmVkX3J1bGVzLnByb3RvEgtmaXRzLmFwaS52MTq4AQoKbWFjYWRkcmVzcxIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxi35pUmIAEoCEJ6wkh3CnUKEXN0cmluZy5tYWNhZGRyZXNzEiZ0aGlzIHN0cmluZyBtdXN0IGJlIGEgdmFsaWQgbWFjYWRkcmVzcxo4dGhpcy5tYXRjaGVzKCdeKFswLTlBLUZhLWZdezJ9WzpdKXs1fShbMC05QS1GYS1mXXsyfSkkJylSCm1hY2FkZHJlc3M6mQEKB2lzX25hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuOaVJiABKAhCYsJIXwpdCg5zdHJpbmcuaXNfbmFtZRIjbXVzdCBiZSB3aXRoaW4gMiBhbmQgMTI4IGNoYXJhY3RlcnMaJnRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4UgZpc05hbWU6mgEKDmlzX2Rlc2NyaXB0aW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGLnmlSYgASgIQlXCSFIKUAoVc3RyaW5nLmlzX2Rlc2NyaXB0aW9uEiNtdXN0IGJlIHNob3J0ZXIgdGhhbiAyNTYgY2hhcmFjdGVycxoSdGhpcy5zaXplKCkgPD0gMjU2Ug1pc0Rlc2NyaXB0aW9uOqgBCgxpc19wYXJ0aXRpb24SGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuuaVJiABKAhCZ8JIZApiChNzdHJpbmcuaXNfcGFydGl0aW9uEiNtdXN0IGJlIHdpdGhpbiAyIGFuZCAxMjggY2hhcmFjdGVycxomdGhpcy5zaXplKCkgPj0gMiAmJiB0aGlzLnNpemUoKSA8PSAxMjhSC2lzUGFydGl0aW9uOoIBCglpc19wcmVmaXgSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYu+aVJiABKAhCR8JIRApCCg9zdHJpbmcucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaEXRoaXMuaXNJcFByZWZpeCgpUghpc1ByZWZpeDptCgZpc191cmkSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvOaVJiABKAhCOMJINQozCgpzdHJpbmcudXJpEhdnaXZlbiB1cmkgbXVzdCBiZSB2YWxpZBoMdGhpcy5pc1VyaSgpUgVpc1VyaTqnAQoRaXNfaXBfb3JfaG9zdG5hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYveaVJiABKAhCXsJIWwpZCg12YWxpZF9hZGRyZXNzEiZtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcyBvciBob3N0bmFtZRogdGhpcy5pc0lwKCkgfHwgdGhpcy5pc0hvc3RuYW1lKClSDmlzSXBPckhvc3RuYW1lOp0BCgd0cmltbWVkEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL7mlSYgASgIQmXCSGIKYAoOc3RyaW5nLnRyaW1tZWQSK3ZhbHVlIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaIXRoaXMudHJpbSgpLnNpemUoKSA9PSB0aGlzLnNpemUoKVIHdHJpbW1lZDraAQoPaXNfcHJvamVjdF9zbHVnEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGL/mlSYgASgIQpMBwkiPAQqMAQoWc3RyaW5nLmlzX3Byb2plY3Rfc2x1ZxIebXVzdCBiZSBhIGxvd2VyY2FzZSBpZGVudGlmaWVyGlJ0aGlzLm1hdGNoZXMoJ14oW2Etel9dWzAtOUEtWmEtel8tXSskKScpICYmIHRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4Ug1pc1Byb2plY3RTbHVnOrEBCgxpc19pcHY0X2NpZHISGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYwOaVJiABKAhCccJIbgpsChNzdHJpbmcuaXNfaXB2NF9jaWRyEittdXN0IGJlIGEgdmFsaWQgSVB2NCBDSURSLCBlLmcuIDEwLjAuMC4wLzI0Gih0aGlzLmlzSXBQcmVmaXgoKSAmJiAhdGhpcy5jb250YWlucygnOicpUgppc0lwdjRDaWRyOu8BChxpc190ZW5hbnRfc3ViamVjdF9wZXJtaXNzaW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGMLmlSYgASgIQo8BwkiLAQqIAQojc3RyaW5nLmlzX3RlbmFudF9zdWJqZWN0X3Blcm1pc3Npb24SKm11c3QgYmUgJyonIG9yIHdpdGhpbiAyIGFuZCAxMjggY2hhcmFjdGVycxo1dGhpcyA9PSAnKicgfHwgdGhpcy5zaXplKCkgPj0gMiAmJiB0aGlzLnNpemUoKSA8PSAxMjhSGWlzVGVuYW50U3ViamVjdFBlcm1pc3Npb246lAIKHWlzX3Byb2plY3Rfc3ViamVjdF9wZXJtaXNzaW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGMPmlSYgASgIQrIBwkiuAQqrAQokc3RyaW5nLmlzX3Byb2plY3Rfc3ViamVjdF9wZXJtaXNzaW9uEhVtdXN0IGJlICcqJyBvciBhIHV1aWQabHRoaXMgPT0gJyonIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSQnKVIaaXNQcm9qZWN0U3ViamVjdFBlcm1pc3Npb246jwEKCHByZWZpeGVzEhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYx7SWJiABKAhCU8JIUApOChFyZXBlYXRlZC5wcmVmaXhlcxIcZ2l2ZW4gcHJlZml4ZXMgbXVzdCBiZSB2YWxpZBobdGhpcy5hbGwobSwgbS5pc0lwUHJlZml4KCkpUghwcmVmaXhlczp1CgNpcHMSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjItJYmIAEoCEJDwkhACj4KDHJlcGVhdGVkLmlwcxIXZ2l2ZW4gaXBzIG11c3QgYmUgdmFsaWQaFXRoaXMuYWxsKG0sIG0uaXNJcCgpKVIDaXBzOuYBChFhcmVfaG9zdF9hbmRfcG9ydBIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMm0liYgASgIQpoBwkiWAQqTAQoacmVwZWF0ZWQuYXJlX2hvc3RfYW5kX3BvcnQSUGdpdmVuIGVudHJpZXMgbXVzdCBhbGwgYmUgaW4gdGhlIGZvcm0gb2YgPGlwIHwgaG9zdD46PHBvcnQ+IGJ1dCBwb3J0IGlzIG9wdGlvbmFsGiN0aGlzLmFsbChtLCBtLmlzSG9zdEFuZFBvcnQoZmFsc2UpKVIOYXJlSG9zdEFuZFBvcnQ6ugEKC2FsbF90cmltbWVkEhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYyrSWJiABKAhCecJIdgp0ChRyZXBlYXRlZC5hbGxfdHJpbW1lZBIyZ2l2ZW4gdmFsdWVzIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UaKHRoaXMuYWxsKG0sIG0udHJpbSgpLnNpemUoKSA9PSBtLnNpemUoKSlSCmFsbFRyaW1tZWQ6hAIKF2tleXNfYW5kX3ZhbHVlc190cmltbWVkEhYuYnVmLnZhbGlkYXRlLk1hcFJ1bGVzGNeClyYgASgIQrEBwkitAQqqAQobbWFwLmtleXNfYW5kX3ZhbHVlc190cmltbWVkEjVrZXlzIGFuZCB2YWx1ZXMgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZRpUdGhpcy5hbGwoaywgay50cmltKCkuc2l6ZSgpID09IGsuc2l6ZSgpKSAmJiB0aGlzLmFsbCh2LCB2LnRyaW0oKS5zaXplKCkgPT0gdi5zaXplKCkpUhRrZXlzQW5kVmFsdWVzVHJpbW1lZDqrAQoMa2V5c190cmltbWVkEhYuYnVmLnZhbGlkYXRlLk1hcFJ1bGVzGNiClyYgASgIQm3CSGoKaAoQbWFwLmtleXNfdHJpbW1lZBIqa2V5cyBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCB3aGl0ZXNwYWNlGih0aGlzLmFsbChrLCBrLnRyaW0oKS5zaXplKCkgPT0gay5zaXplKCkpUgtrZXlzVHJpbW1lZDqSAgoYcHJvamVjdF9yb2xlc19rZXlzX3ZhbGlkEhYuYnVmLnZhbGlkYXRlLk1hcFJ1bGVzGNmClyYgASgIQr0Bwki5AQq2AQoXcHJvamVjdF9yb2xlcy5rZXkudmFsaWQSJnN1YmplY3QgbXVzdCBiZSBhICcqJywgb3IgYSB2YWxpZCBVVUlEGnN0aGlzLmFsbChrLCBrID09ICcqJyB8fCBrLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykpUhVwcm9qZWN0Um9sZXNLZXlzVmFsaWQ64gEKF3RlbmFudF9yb2xlc19rZXlzX3ZhbGlkEhYuYnVmLnZhbGlkYXRlLk1hcFJ1bGVzGNqClyYgASgIQo8BwkiLAQqIAQoWdGVuYW50X3JvbGVzLmtleS52YWxpZBIzc3ViamVjdCBtdXN0IGJlICcqJyBvciBiZXR3ZWVuIDIgYW5kIDEyOCBjaGFyYWN0ZXJzGjl0aGlzLmFsbChrLCBrID09ICcqJyB8fCBrLnNpemUoKSA+PSAyICYmIGsuc2l6ZSgpIDw9MTI4IClSFHRlbmFudFJvbGVzS2V5c1ZhbGlkQqABCg9jb20uZml0cy5hcGkudjFCFFByZWRlZmluZWRSdWxlc1Byb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMQ", [file_buf_validate_validate]);
15
15
 
16
16
  /**
17
17
  * Macaddress returns true if the given string is a valid macadress
@@ -93,13 +93,29 @@ export const is_project_slug: GenExtension<StringRules, boolean> = /*@__PURE__*/
93
93
  export const is_ipv4_cidr: GenExtension<StringRules, boolean> = /*@__PURE__*/
94
94
  extDesc(file_fits_api_v1_predefined_rules, 9);
95
95
 
96
+ /**
97
+ * IsTenantSubjectPermission returns true if name field satisfies our requirements.
98
+ *
99
+ * @generated from extension: optional bool is_tenant_subject_permission = 80048962;
100
+ */
101
+ export const is_tenant_subject_permission: GenExtension<StringRules, boolean> = /*@__PURE__*/
102
+ extDesc(file_fits_api_v1_predefined_rules, 10);
103
+
104
+ /**
105
+ * IsProjectSubjectPermission returns true if name field satisfies our requirements.
106
+ *
107
+ * @generated from extension: optional bool is_project_subject_permission = 80048963;
108
+ */
109
+ export const is_project_subject_permission: GenExtension<StringRules, boolean> = /*@__PURE__*/
110
+ extDesc(file_fits_api_v1_predefined_rules, 11);
111
+
96
112
  /**
97
113
  * Prefixes validates if a slice of prefixes in string form are valid
98
114
  *
99
115
  * @generated from extension: optional bool prefixes = 80058951;
100
116
  */
101
117
  export const prefixes: 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
  * Ips validates if a slice of ips in string form are valid
@@ -107,7 +123,7 @@ export const prefixes: GenExtension<RepeatedRules, boolean> = /*@__PURE__*/
107
123
  * @generated from extension: optional bool ips = 80058952;
108
124
  */
109
125
  export const ips: 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
  * AreHostAndPort validates if a slice of strings are all in the form of <ip | host>:<port>
@@ -115,7 +131,7 @@ export const ips: GenExtension<RepeatedRules, boolean> = /*@__PURE__*/
115
131
  * @generated from extension: optional bool are_host_and_port = 80058953;
116
132
  */
117
133
  export const are_host_and_port: GenExtension<RepeatedRules, 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
  * All Trimmed enforces all strings to be trimmed, e.g. no whitespaces at the begin and end
@@ -123,7 +139,7 @@ export const are_host_and_port: GenExtension<RepeatedRules, boolean> = /*@__PURE
123
139
  * @generated from extension: optional bool all_trimmed = 80058954;
124
140
  */
125
141
  export const all_trimmed: GenExtension<RepeatedRules, boolean> = /*@__PURE__*/
126
- extDesc(file_fits_api_v1_predefined_rules, 13);
142
+ extDesc(file_fits_api_v1_predefined_rules, 15);
127
143
 
128
144
  /**
129
145
  * Keys and Values trimmed enforces all map keys and values to be trimmed, e.g. no whitespaces at the begin and end
@@ -131,7 +147,7 @@ export const all_trimmed: GenExtension<RepeatedRules, boolean> = /*@__PURE__*/
131
147
  * @generated from extension: optional bool keys_and_values_trimmed = 80068951;
132
148
  */
133
149
  export const keys_and_values_trimmed: GenExtension<MapRules, boolean> = /*@__PURE__*/
134
- extDesc(file_fits_api_v1_predefined_rules, 14);
150
+ extDesc(file_fits_api_v1_predefined_rules, 16);
135
151
 
136
152
  /**
137
153
  * Keys trimmed enforces all map keys and values to be trimmed, e.g. no whitespaces at the begin and end
@@ -139,5 +155,21 @@ export const keys_and_values_trimmed: GenExtension<MapRules, boolean> = /*@__PUR
139
155
  * @generated from extension: optional bool keys_trimmed = 80068952;
140
156
  */
141
157
  export const keys_trimmed: GenExtension<MapRules, boolean> = /*@__PURE__*/
142
- extDesc(file_fits_api_v1_predefined_rules, 15);
158
+ extDesc(file_fits_api_v1_predefined_rules, 17);
159
+
160
+ /**
161
+ * ProjectRolesKeysValid ensures that project roles keys met our requirements.
162
+ *
163
+ * @generated from extension: optional bool project_roles_keys_valid = 80068953;
164
+ */
165
+ export const project_roles_keys_valid: GenExtension<MapRules, boolean> = /*@__PURE__*/
166
+ extDesc(file_fits_api_v1_predefined_rules, 18);
167
+
168
+ /**
169
+ * TenantRolesKeysValid ensures that tenant roles keys met our requirements.
170
+ *
171
+ * @generated from extension: optional bool tenant_roles_keys_valid = 80068954;
172
+ */
173
+ export const tenant_roles_keys_valid: GenExtension<MapRules, boolean> = /*@__PURE__*/
174
+ extDesc(file_fits_api_v1_predefined_rules, 19);
143
175
 
@@ -50,9 +50,9 @@ export type Token = Message<"fits.api.v1.Token"> & {
50
50
  /**
51
51
  * Permissions is a list of service methods this token can be used for
52
52
  *
53
- * @generated from field: repeated fits.api.v1.MethodPermission permissions = 5;
53
+ * @generated from field: repeated fits.api.v1.PermissionsByVisibility permissions = 5;
54
54
  */
55
- permissions: MethodPermission[];
55
+ permissions: PermissionsByVisibility[];
56
56
  /**
57
57
  * Expires gives the date in the future after which this token can not be used anymore
58
58
  *
@@ -80,7 +80,7 @@ export type Token = Message<"fits.api.v1.Token"> & {
80
80
  [key: string]: ProjectRole;
81
81
  };
82
82
  /**
83
- * TenantRoles associates a tenant id with the corresponding role of the token owner
83
+ * TenantRoles associates a tenant id with the corresponding role of the token owner.
84
84
  *
85
85
  * @generated from field: map<string, fits.api.v1.TenantRole> tenant_roles = 10;
86
86
  */
@@ -128,6 +128,195 @@ export type MethodPermission = Message<"fits.api.v1.MethodPermission"> & {
128
128
  * Use `create(MethodPermissionSchema)` to create a new message.
129
129
  */
130
130
  export declare const MethodPermissionSchema: GenMessage<MethodPermission>;
131
+ /**
132
+ * PermissionsByVisibility contains method permissions by visibility.
133
+ *
134
+ * @generated from message fits.api.v1.PermissionsByVisibility
135
+ */
136
+ export type PermissionsByVisibility = Message<"fits.api.v1.PermissionsByVisibility"> & {
137
+ /**
138
+ * Visibility defines the visibility of the requested method permissions.
139
+ *
140
+ * @generated from oneof fits.api.v1.PermissionsByVisibility.visibility
141
+ */
142
+ visibility: {
143
+ /**
144
+ * PublicPermissions carries public method permissions.
145
+ *
146
+ * @generated from field: fits.api.v1.PublicPermissions public = 1;
147
+ */
148
+ value: PublicPermissions;
149
+ case: "public";
150
+ } | {
151
+ /**
152
+ * SelfPermissions carries self method permissions.
153
+ *
154
+ * @generated from field: fits.api.v1.SelfPermissions self = 2;
155
+ */
156
+ value: SelfPermissions;
157
+ case: "self";
158
+ } | {
159
+ /**
160
+ * ProjectPermissions carries project method permissions.
161
+ *
162
+ * @generated from field: fits.api.v1.ProjectPermissions project = 3;
163
+ */
164
+ value: ProjectPermissions;
165
+ case: "project";
166
+ } | {
167
+ /**
168
+ * TenantPermissions carries tenant method permissions.
169
+ *
170
+ * @generated from field: fits.api.v1.TenantPermissions tenant = 4;
171
+ */
172
+ value: TenantPermissions;
173
+ case: "tenant";
174
+ } | {
175
+ /**
176
+ * AdminPermissions carries admin method permissions.
177
+ *
178
+ * @generated from field: fits.api.v1.AdminPermissions admin = 5;
179
+ */
180
+ value: AdminPermissions;
181
+ case: "admin";
182
+ } | {
183
+ case: undefined;
184
+ value?: undefined;
185
+ };
186
+ };
187
+ /**
188
+ * Describes the message fits.api.v1.PermissionsByVisibility.
189
+ * Use `create(PermissionsByVisibilitySchema)` to create a new message.
190
+ */
191
+ export declare const PermissionsByVisibilitySchema: GenMessage<PermissionsByVisibility>;
192
+ /**
193
+ * PublicPermissions carries public method permissions.
194
+ *
195
+ * @generated from message fits.api.v1.PublicPermissions
196
+ */
197
+ export type PublicPermissions = Message<"fits.api.v1.PublicPermissions"> & {
198
+ /**
199
+ * Methods which should be accessible.
200
+ *
201
+ * @generated from field: repeated string methods = 1;
202
+ */
203
+ methods: string[];
204
+ };
205
+ /**
206
+ * Describes the message fits.api.v1.PublicPermissions.
207
+ * Use `create(PublicPermissionsSchema)` to create a new message.
208
+ */
209
+ export declare const PublicPermissionsSchema: GenMessage<PublicPermissions>;
210
+ /**
211
+ * SelfPermissions carries self method permissions.
212
+ *
213
+ * @generated from message fits.api.v1.SelfPermissions
214
+ */
215
+ export type SelfPermissions = Message<"fits.api.v1.SelfPermissions"> & {
216
+ /**
217
+ * Methods which should be accessible.
218
+ *
219
+ * @generated from field: repeated string methods = 1;
220
+ */
221
+ methods: string[];
222
+ };
223
+ /**
224
+ * Describes the message fits.api.v1.SelfPermissions.
225
+ * Use `create(SelfPermissionsSchema)` to create a new message.
226
+ */
227
+ export declare const SelfPermissionsSchema: GenMessage<SelfPermissions>;
228
+ /**
229
+ * ProjectPermissions carries project method permissions.
230
+ *
231
+ * @generated from message fits.api.v1.ProjectPermissions
232
+ */
233
+ export type ProjectPermissions = Message<"fits.api.v1.ProjectPermissions"> & {
234
+ /**
235
+ * Project scope for the permissions.
236
+ * Asterisk (*) can be specified to match any subject.
237
+ *
238
+ * @generated from field: string project = 1;
239
+ */
240
+ project: string;
241
+ /**
242
+ * Methods which should be accessible.
243
+ *
244
+ * @generated from field: repeated string methods = 2;
245
+ */
246
+ methods: string[];
247
+ };
248
+ /**
249
+ * Describes the message fits.api.v1.ProjectPermissions.
250
+ * Use `create(ProjectPermissionsSchema)` to create a new message.
251
+ */
252
+ export declare const ProjectPermissionsSchema: GenMessage<ProjectPermissions>;
253
+ /**
254
+ * TenantPermissions carries tenant method permissions.
255
+ *
256
+ * @generated from message fits.api.v1.TenantPermissions
257
+ */
258
+ export type TenantPermissions = Message<"fits.api.v1.TenantPermissions"> & {
259
+ /**
260
+ * Login of the tenant.
261
+ * Asterisk (*) can be specified to match any subject.
262
+ *
263
+ * @generated from field: string login = 1;
264
+ */
265
+ login: string;
266
+ /**
267
+ * Methods which should be accessible.
268
+ *
269
+ * @generated from field: repeated string methods = 2;
270
+ */
271
+ methods: string[];
272
+ };
273
+ /**
274
+ * Describes the message fits.api.v1.TenantPermissions.
275
+ * Use `create(TenantPermissionsSchema)` to create a new message.
276
+ */
277
+ export declare const TenantPermissionsSchema: GenMessage<TenantPermissions>;
278
+ /**
279
+ * AdminPermissions carries admin method permissions.
280
+ *
281
+ * @generated from message fits.api.v1.AdminPermissions
282
+ */
283
+ export type AdminPermissions = Message<"fits.api.v1.AdminPermissions"> & {
284
+ /**
285
+ * Methods which should be accessible.
286
+ *
287
+ * @generated from field: repeated string methods = 1;
288
+ */
289
+ methods: string[];
290
+ };
291
+ /**
292
+ * Describes the message fits.api.v1.AdminPermissions.
293
+ * Use `create(AdminPermissionsSchema)` to create a new message.
294
+ */
295
+ export declare const AdminPermissionsSchema: GenMessage<AdminPermissions>;
296
+ /**
297
+ * TokenServiceCreateResponse is the response payload of a token create request
298
+ *
299
+ * @generated from message fits.api.v1.TokenServiceCreateResponse
300
+ */
301
+ export type TokenServiceCreateResponse = Message<"fits.api.v1.TokenServiceCreateResponse"> & {
302
+ /**
303
+ * Token which was created
304
+ *
305
+ * @generated from field: fits.api.v1.Token token = 1;
306
+ */
307
+ token?: Token | undefined;
308
+ /**
309
+ * Secret is the body if the jwt token, should be used in api requests as bearer token
310
+ *
311
+ * @generated from field: string secret = 2;
312
+ */
313
+ secret: string;
314
+ };
315
+ /**
316
+ * Describes the message fits.api.v1.TokenServiceCreateResponse.
317
+ * Use `create(TokenServiceCreateResponseSchema)` to create a new message.
318
+ */
319
+ export declare const TokenServiceCreateResponseSchema: GenMessage<TokenServiceCreateResponse>;
131
320
  /**
132
321
  * TokenServiceListRequest is the request payload to list tokens
133
322
  *
@@ -9,7 +9,7 @@ import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
9
9
  /**
10
10
  * Describes the file fits/api/v1/token.proto.
11
11
  */
12
- export const file_fits_api_v1_token = /*@__PURE__*/ fileDesc("ChdmaXRzL2FwaS92MS90b2tlbi5wcm90bxILZml0cy5hcGkudjEizQYKBVRva2VuEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhgKBHVzZXIYAiABKAlCCrpIB3IFEAIYgAQSHwoEbWV0YRgDIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESIAoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBEj0KC3Blcm1pc3Npb25zGAUgAygLMh0uZml0cy5hcGkudjEuTWV0aG9kUGVybWlzc2lvbkIJukgGkgEDEPQDEisKB2V4cGlyZXMYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi0KCWlzc3VlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNAoKdG9rZW5fdHlwZRgIIAEoDjIWLmZpdHMuYXBpLnYxLlRva2VuVHlwZUIIukgFggECEAESOwoNcHJvamVjdF9yb2xlcxgJIAMoCzIkLmZpdHMuYXBpLnYxLlRva2VuLlByb2plY3RSb2xlc0VudHJ5EjkKDHRlbmFudF9yb2xlcxgKIAMoCzIjLmZpdHMuYXBpLnYxLlRva2VuLlRlbmFudFJvbGVzRW50cnkSOQoKYWRtaW5fcm9sZRgLIAEoDjIWLmZpdHMuYXBpLnYxLkFkbWluUm9sZUIIukgFggECEAFIAIgBARpNChFQcm9qZWN0Um9sZXNFbnRyeRILCgNrZXkYASABKAkSJwoFdmFsdWUYAiABKA4yGC5maXRzLmFwaS52MS5Qcm9qZWN0Um9sZToCOAEaSwoQVGVuYW50Um9sZXNFbnRyeRILCgNrZXkYASABKAkSJgoFdmFsdWUYAiABKA4yFy5maXRzLmFwaS52MS5UZW5hbnRSb2xlOgI4ATqfAbpImwEamAEKG3Rva2VuLnBlcm1pc3Npb25zLnVzZXJ0b2tlbhIpdG9rZW4gdHlwZSB1c2VyIG11c3Qgbm90IGhhdmUgcGVybWlzc2lvbnMaTih0aGlzLnRva2VuX3R5cGUgPT0gMiAmJiB0aGlzLnBlcm1pc3Npb25zLnNpemUoKSA9PSAwKSB8fCB0aGlzLnRva2VuX3R5cGUgIT0gMkINCgtfYWRtaW5fcm9sZSJJChBNZXRob2RQZXJtaXNzaW9uEhkKB3N1YmplY3QYASABKAlCCLpIBXIDGIACEhoKB21ldGhvZHMYAiADKAlCCbpIBpIBAxD0AyIZChdUb2tlblNlcnZpY2VMaXN0UmVxdWVzdCI+ChhUb2tlblNlcnZpY2VMaXN0UmVzcG9uc2USIgoGdG9rZW5zGAEgAygLMhIuZml0cy5hcGkudjEuVG9rZW4iMwoZVG9rZW5TZXJ2aWNlUmV2b2tlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABASIcChpUb2tlblNlcnZpY2VSZXZva2VSZXNwb25zZSIwChZUb2tlblNlcnZpY2VHZXRSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBIjwKF1Rva2VuU2VydmljZUdldFJlc3BvbnNlEiEKBXRva2VuGAEgASgLMhIuZml0cy5hcGkudjEuVG9rZW4qUAoJVG9rZW5UeXBlEhoKFlRPS0VOX1RZUEVfVU5TUEVDSUZJRUQQABISCg5UT0tFTl9UWVBFX0FQSRABEhMKD1RPS0VOX1RZUEVfVVNFUhACMq4CCgxUb2tlblNlcnZpY2USWgoDR2V0EiMuZml0cy5hcGkudjEuVG9rZW5TZXJ2aWNlR2V0UmVxdWVzdBokLmZpdHMuYXBpLnYxLlRva2VuU2VydmljZUdldFJlc3BvbnNlIgjY8xgC4PMYARJdCgRMaXN0EiQuZml0cy5hcGkudjEuVG9rZW5TZXJ2aWNlTGlzdFJlcXVlc3QaJS5maXRzLmFwaS52MS5Ub2tlblNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGALg8xgBEmMKBlJldm9rZRImLmZpdHMuYXBpLnYxLlRva2VuU2VydmljZVJldm9rZVJlcXVlc3QaJy5maXRzLmFwaS52MS5Ub2tlblNlcnZpY2VSZXZva2VSZXNwb25zZSII2PMYAuDzGAFClgEKD2NvbS5maXRzLmFwaS52MUIKVG9rZW5Qcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]);
12
+ export const file_fits_api_v1_token = /*@__PURE__*/ fileDesc("ChdmaXRzL2FwaS92MS90b2tlbi5wcm90bxILZml0cy5hcGkudjEi7wYKBVRva2VuEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhgKBHVzZXIYAiABKAlCCrpIB3IFEAIYgAQSHwoEbWV0YRgDIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESIAoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBEkQKC3Blcm1pc3Npb25zGAUgAygLMiQuZml0cy5hcGkudjEuUGVybWlzc2lvbnNCeVZpc2liaWxpdHlCCbpIBpIBAxD0AxIrCgdleHBpcmVzGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBItCglpc3N1ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjQKCnRva2VuX3R5cGUYCCABKA4yFi5maXRzLmFwaS52MS5Ub2tlblR5cGVCCLpIBYIBAhABEjsKDXByb2plY3Rfcm9sZXMYCSADKAsyJC5maXRzLmFwaS52MS5Ub2tlbi5Qcm9qZWN0Um9sZXNFbnRyeRJUCgx0ZW5hbnRfcm9sZXMYCiADKAsyIy5maXRzLmFwaS52MS5Ub2tlbi5UZW5hbnRSb2xlc0VudHJ5Qhm6SBaaARPAlbixAgHQlbixAgEqBYIBAhABEjkKCmFkbWluX3JvbGUYCyABKA4yFi5maXRzLmFwaS52MS5BZG1pblJvbGVCCLpIBYIBAhABSACIAQEaTQoRUHJvamVjdFJvbGVzRW50cnkSCwoDa2V5GAEgASgJEicKBXZhbHVlGAIgASgOMhguZml0cy5hcGkudjEuUHJvamVjdFJvbGU6AjgBGksKEFRlbmFudFJvbGVzRW50cnkSCwoDa2V5GAEgASgJEiYKBXZhbHVlGAIgASgOMhcuZml0cy5hcGkudjEuVGVuYW50Um9sZToCOAE6nwG6SJsBGpgBCht0b2tlbi5wZXJtaXNzaW9ucy51c2VydG9rZW4SKXRva2VuIHR5cGUgdXNlciBtdXN0IG5vdCBoYXZlIHBlcm1pc3Npb25zGk4odGhpcy50b2tlbl90eXBlID09IDIgJiYgdGhpcy5wZXJtaXNzaW9ucy5zaXplKCkgPT0gMCkgfHwgdGhpcy50b2tlbl90eXBlICE9IDJCDQoLX2FkbWluX3JvbGUiSQoQTWV0aG9kUGVybWlzc2lvbhIZCgdzdWJqZWN0GAEgASgJQgi6SAVyAxiAAhIaCgdtZXRob2RzGAIgAygJQgm6SAaSAQMQ9AMinQIKF1Blcm1pc3Npb25zQnlWaXNpYmlsaXR5EjAKBnB1YmxpYxgBIAEoCzIeLmZpdHMuYXBpLnYxLlB1YmxpY1Blcm1pc3Npb25zSAASLAoEc2VsZhgCIAEoCzIcLmZpdHMuYXBpLnYxLlNlbGZQZXJtaXNzaW9uc0gAEjIKB3Byb2plY3QYAyABKAsyHy5maXRzLmFwaS52MS5Qcm9qZWN0UGVybWlzc2lvbnNIABIwCgZ0ZW5hbnQYBCABKAsyHi5maXRzLmFwaS52MS5UZW5hbnRQZXJtaXNzaW9uc0gAEi4KBWFkbWluGAUgASgLMh0uZml0cy5hcGkudjEuQWRtaW5QZXJtaXNzaW9uc0gAQgwKCnZpc2liaWxpdHkiLwoRUHVibGljUGVybWlzc2lvbnMSGgoHbWV0aG9kcxgBIAMoCUIJukgGkgEDEPQDIi0KD1NlbGZQZXJtaXNzaW9ucxIaCgdtZXRob2RzGAEgAygJQgm6SAaSAQMQ9AMiTgoSUHJvamVjdFBlcm1pc3Npb25zEhwKB3Byb2plY3QYASABKAlCC7pICHIGmLSusQIBEhoKB21ldGhvZHMYAiADKAlCCbpIBpIBAxD0AyJLChFUZW5hbnRQZXJtaXNzaW9ucxIaCgVsb2dpbhgBIAEoCUILukgIcgaQtK6xAgESGgoHbWV0aG9kcxgCIAMoCUIJukgGkgEDEPQDIi4KEEFkbWluUGVybWlzc2lvbnMSGgoHbWV0aG9kcxgBIAMoCUIJukgGkgEDEPQDIk8KGlRva2VuU2VydmljZUNyZWF0ZVJlc3BvbnNlEiEKBXRva2VuGAEgASgLMhIuZml0cy5hcGkudjEuVG9rZW4SDgoGc2VjcmV0GAIgASgJIhkKF1Rva2VuU2VydmljZUxpc3RSZXF1ZXN0Ij4KGFRva2VuU2VydmljZUxpc3RSZXNwb25zZRIiCgZ0b2tlbnMYASADKAsyEi5maXRzLmFwaS52MS5Ub2tlbiIzChlUb2tlblNlcnZpY2VSZXZva2VSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBIhwKGlRva2VuU2VydmljZVJldm9rZVJlc3BvbnNlIjAKFlRva2VuU2VydmljZUdldFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQEiPAoXVG9rZW5TZXJ2aWNlR2V0UmVzcG9uc2USIQoFdG9rZW4YASABKAsyEi5maXRzLmFwaS52MS5Ub2tlbipQCglUb2tlblR5cGUSGgoWVE9LRU5fVFlQRV9VTlNQRUNJRklFRBAAEhIKDlRPS0VOX1RZUEVfQVBJEAESEwoPVE9LRU5fVFlQRV9VU0VSEAIyrgIKDFRva2VuU2VydmljZRJaCgNHZXQSIy5maXRzLmFwaS52MS5Ub2tlblNlcnZpY2VHZXRSZXF1ZXN0GiQuZml0cy5hcGkudjEuVG9rZW5TZXJ2aWNlR2V0UmVzcG9uc2UiCNjzGALg8xgBEl0KBExpc3QSJC5maXRzLmFwaS52MS5Ub2tlblNlcnZpY2VMaXN0UmVxdWVzdBolLmZpdHMuYXBpLnYxLlRva2VuU2VydmljZUxpc3RSZXNwb25zZSII2PMYAuDzGAESYwoGUmV2b2tlEiYuZml0cy5hcGkudjEuVG9rZW5TZXJ2aWNlUmV2b2tlUmVxdWVzdBonLmZpdHMuYXBpLnYxLlRva2VuU2VydmljZVJldm9rZVJlc3BvbnNlIgjY8xgC4PMYAUKWAQoPY29tLmZpdHMuYXBpLnYxQgpUb2tlblByb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]);
13
13
  /**
14
14
  * Describes the message fits.api.v1.Token.
15
15
  * Use `create(TokenSchema)` to create a new message.
@@ -20,36 +20,71 @@ export const TokenSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 0);
20
20
  * Use `create(MethodPermissionSchema)` to create a new message.
21
21
  */
22
22
  export const MethodPermissionSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 1);
23
+ /**
24
+ * Describes the message fits.api.v1.PermissionsByVisibility.
25
+ * Use `create(PermissionsByVisibilitySchema)` to create a new message.
26
+ */
27
+ export const PermissionsByVisibilitySchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 2);
28
+ /**
29
+ * Describes the message fits.api.v1.PublicPermissions.
30
+ * Use `create(PublicPermissionsSchema)` to create a new message.
31
+ */
32
+ export const PublicPermissionsSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 3);
33
+ /**
34
+ * Describes the message fits.api.v1.SelfPermissions.
35
+ * Use `create(SelfPermissionsSchema)` to create a new message.
36
+ */
37
+ export const SelfPermissionsSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 4);
38
+ /**
39
+ * Describes the message fits.api.v1.ProjectPermissions.
40
+ * Use `create(ProjectPermissionsSchema)` to create a new message.
41
+ */
42
+ export const ProjectPermissionsSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 5);
43
+ /**
44
+ * Describes the message fits.api.v1.TenantPermissions.
45
+ * Use `create(TenantPermissionsSchema)` to create a new message.
46
+ */
47
+ export const TenantPermissionsSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 6);
48
+ /**
49
+ * Describes the message fits.api.v1.AdminPermissions.
50
+ * Use `create(AdminPermissionsSchema)` to create a new message.
51
+ */
52
+ export const AdminPermissionsSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 7);
53
+ /**
54
+ * Describes the message fits.api.v1.TokenServiceCreateResponse.
55
+ * Use `create(TokenServiceCreateResponseSchema)` to create a new message.
56
+ */
57
+ export const TokenServiceCreateResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 8);
23
58
  /**
24
59
  * Describes the message fits.api.v1.TokenServiceListRequest.
25
60
  * Use `create(TokenServiceListRequestSchema)` to create a new message.
26
61
  */
27
- export const TokenServiceListRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 2);
62
+ export const TokenServiceListRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 9);
28
63
  /**
29
64
  * Describes the message fits.api.v1.TokenServiceListResponse.
30
65
  * Use `create(TokenServiceListResponseSchema)` to create a new message.
31
66
  */
32
- export const TokenServiceListResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 3);
67
+ export const TokenServiceListResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 10);
33
68
  /**
34
69
  * Describes the message fits.api.v1.TokenServiceRevokeRequest.
35
70
  * Use `create(TokenServiceRevokeRequestSchema)` to create a new message.
36
71
  */
37
- export const TokenServiceRevokeRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 4);
72
+ export const TokenServiceRevokeRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 11);
38
73
  /**
39
74
  * Describes the message fits.api.v1.TokenServiceRevokeResponse.
40
75
  * Use `create(TokenServiceRevokeResponseSchema)` to create a new message.
41
76
  */
42
- export const TokenServiceRevokeResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 5);
77
+ export const TokenServiceRevokeResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 12);
43
78
  /**
44
79
  * Describes the message fits.api.v1.TokenServiceGetRequest.
45
80
  * Use `create(TokenServiceGetRequestSchema)` to create a new message.
46
81
  */
47
- export const TokenServiceGetRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 6);
82
+ export const TokenServiceGetRequestSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 13);
48
83
  /**
49
84
  * Describes the message fits.api.v1.TokenServiceGetResponse.
50
85
  * Use `create(TokenServiceGetResponseSchema)` to create a new message.
51
86
  */
52
- export const TokenServiceGetResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 7);
87
+ export const TokenServiceGetResponseSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_token, 14);
53
88
  /**
54
89
  * TokenType specifies different use cases of tokens
55
90
  *
@@ -16,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf";
16
16
  * Describes the file fits/api/v1/token.proto.
17
17
  */
18
18
  export const file_fits_api_v1_token: GenFile = /*@__PURE__*/
19
- fileDesc("ChdmaXRzL2FwaS92MS90b2tlbi5wcm90bxILZml0cy5hcGkudjEizQYKBVRva2VuEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhgKBHVzZXIYAiABKAlCCrpIB3IFEAIYgAQSHwoEbWV0YRgDIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESIAoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBEj0KC3Blcm1pc3Npb25zGAUgAygLMh0uZml0cy5hcGkudjEuTWV0aG9kUGVybWlzc2lvbkIJukgGkgEDEPQDEisKB2V4cGlyZXMYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi0KCWlzc3VlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNAoKdG9rZW5fdHlwZRgIIAEoDjIWLmZpdHMuYXBpLnYxLlRva2VuVHlwZUIIukgFggECEAESOwoNcHJvamVjdF9yb2xlcxgJIAMoCzIkLmZpdHMuYXBpLnYxLlRva2VuLlByb2plY3RSb2xlc0VudHJ5EjkKDHRlbmFudF9yb2xlcxgKIAMoCzIjLmZpdHMuYXBpLnYxLlRva2VuLlRlbmFudFJvbGVzRW50cnkSOQoKYWRtaW5fcm9sZRgLIAEoDjIWLmZpdHMuYXBpLnYxLkFkbWluUm9sZUIIukgFggECEAFIAIgBARpNChFQcm9qZWN0Um9sZXNFbnRyeRILCgNrZXkYASABKAkSJwoFdmFsdWUYAiABKA4yGC5maXRzLmFwaS52MS5Qcm9qZWN0Um9sZToCOAEaSwoQVGVuYW50Um9sZXNFbnRyeRILCgNrZXkYASABKAkSJgoFdmFsdWUYAiABKA4yFy5maXRzLmFwaS52MS5UZW5hbnRSb2xlOgI4ATqfAbpImwEamAEKG3Rva2VuLnBlcm1pc3Npb25zLnVzZXJ0b2tlbhIpdG9rZW4gdHlwZSB1c2VyIG11c3Qgbm90IGhhdmUgcGVybWlzc2lvbnMaTih0aGlzLnRva2VuX3R5cGUgPT0gMiAmJiB0aGlzLnBlcm1pc3Npb25zLnNpemUoKSA9PSAwKSB8fCB0aGlzLnRva2VuX3R5cGUgIT0gMkINCgtfYWRtaW5fcm9sZSJJChBNZXRob2RQZXJtaXNzaW9uEhkKB3N1YmplY3QYASABKAlCCLpIBXIDGIACEhoKB21ldGhvZHMYAiADKAlCCbpIBpIBAxD0AyIZChdUb2tlblNlcnZpY2VMaXN0UmVxdWVzdCI+ChhUb2tlblNlcnZpY2VMaXN0UmVzcG9uc2USIgoGdG9rZW5zGAEgAygLMhIuZml0cy5hcGkudjEuVG9rZW4iMwoZVG9rZW5TZXJ2aWNlUmV2b2tlUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABASIcChpUb2tlblNlcnZpY2VSZXZva2VSZXNwb25zZSIwChZUb2tlblNlcnZpY2VHZXRSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBIjwKF1Rva2VuU2VydmljZUdldFJlc3BvbnNlEiEKBXRva2VuGAEgASgLMhIuZml0cy5hcGkudjEuVG9rZW4qUAoJVG9rZW5UeXBlEhoKFlRPS0VOX1RZUEVfVU5TUEVDSUZJRUQQABISCg5UT0tFTl9UWVBFX0FQSRABEhMKD1RPS0VOX1RZUEVfVVNFUhACMq4CCgxUb2tlblNlcnZpY2USWgoDR2V0EiMuZml0cy5hcGkudjEuVG9rZW5TZXJ2aWNlR2V0UmVxdWVzdBokLmZpdHMuYXBpLnYxLlRva2VuU2VydmljZUdldFJlc3BvbnNlIgjY8xgC4PMYARJdCgRMaXN0EiQuZml0cy5hcGkudjEuVG9rZW5TZXJ2aWNlTGlzdFJlcXVlc3QaJS5maXRzLmFwaS52MS5Ub2tlblNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGALg8xgBEmMKBlJldm9rZRImLmZpdHMuYXBpLnYxLlRva2VuU2VydmljZVJldm9rZVJlcXVlc3QaJy5maXRzLmFwaS52MS5Ub2tlblNlcnZpY2VSZXZva2VSZXNwb25zZSII2PMYAuDzGAFClgEKD2NvbS5maXRzLmFwaS52MUIKVG9rZW5Qcm90b1ABWilnaXRodWIuY29tL2ZpLXRzL2FwaS9nby9maXRzL2FwaS92MTthcGl2MaICA0ZBWKoCC0ZpdHMuQXBpLlYxygILRml0c1xBcGlcVjHiAhdGaXRzXEFwaVxWMVxHUEJNZXRhZGF0YeoCDUZpdHM6OkFwaTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]);
19
+ fileDesc("ChdmaXRzL2FwaS92MS90b2tlbi5wcm90bxILZml0cy5hcGkudjEi7wYKBVRva2VuEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEhgKBHVzZXIYAiABKAlCCrpIB3IFEAIYgAQSHwoEbWV0YRgDIAEoCzIRLmZpdHMuYXBpLnYxLk1ldGESIAoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBEkQKC3Blcm1pc3Npb25zGAUgAygLMiQuZml0cy5hcGkudjEuUGVybWlzc2lvbnNCeVZpc2liaWxpdHlCCbpIBpIBAxD0AxIrCgdleHBpcmVzGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBItCglpc3N1ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjQKCnRva2VuX3R5cGUYCCABKA4yFi5maXRzLmFwaS52MS5Ub2tlblR5cGVCCLpIBYIBAhABEjsKDXByb2plY3Rfcm9sZXMYCSADKAsyJC5maXRzLmFwaS52MS5Ub2tlbi5Qcm9qZWN0Um9sZXNFbnRyeRJUCgx0ZW5hbnRfcm9sZXMYCiADKAsyIy5maXRzLmFwaS52MS5Ub2tlbi5UZW5hbnRSb2xlc0VudHJ5Qhm6SBaaARPAlbixAgHQlbixAgEqBYIBAhABEjkKCmFkbWluX3JvbGUYCyABKA4yFi5maXRzLmFwaS52MS5BZG1pblJvbGVCCLpIBYIBAhABSACIAQEaTQoRUHJvamVjdFJvbGVzRW50cnkSCwoDa2V5GAEgASgJEicKBXZhbHVlGAIgASgOMhguZml0cy5hcGkudjEuUHJvamVjdFJvbGU6AjgBGksKEFRlbmFudFJvbGVzRW50cnkSCwoDa2V5GAEgASgJEiYKBXZhbHVlGAIgASgOMhcuZml0cy5hcGkudjEuVGVuYW50Um9sZToCOAE6nwG6SJsBGpgBCht0b2tlbi5wZXJtaXNzaW9ucy51c2VydG9rZW4SKXRva2VuIHR5cGUgdXNlciBtdXN0IG5vdCBoYXZlIHBlcm1pc3Npb25zGk4odGhpcy50b2tlbl90eXBlID09IDIgJiYgdGhpcy5wZXJtaXNzaW9ucy5zaXplKCkgPT0gMCkgfHwgdGhpcy50b2tlbl90eXBlICE9IDJCDQoLX2FkbWluX3JvbGUiSQoQTWV0aG9kUGVybWlzc2lvbhIZCgdzdWJqZWN0GAEgASgJQgi6SAVyAxiAAhIaCgdtZXRob2RzGAIgAygJQgm6SAaSAQMQ9AMinQIKF1Blcm1pc3Npb25zQnlWaXNpYmlsaXR5EjAKBnB1YmxpYxgBIAEoCzIeLmZpdHMuYXBpLnYxLlB1YmxpY1Blcm1pc3Npb25zSAASLAoEc2VsZhgCIAEoCzIcLmZpdHMuYXBpLnYxLlNlbGZQZXJtaXNzaW9uc0gAEjIKB3Byb2plY3QYAyABKAsyHy5maXRzLmFwaS52MS5Qcm9qZWN0UGVybWlzc2lvbnNIABIwCgZ0ZW5hbnQYBCABKAsyHi5maXRzLmFwaS52MS5UZW5hbnRQZXJtaXNzaW9uc0gAEi4KBWFkbWluGAUgASgLMh0uZml0cy5hcGkudjEuQWRtaW5QZXJtaXNzaW9uc0gAQgwKCnZpc2liaWxpdHkiLwoRUHVibGljUGVybWlzc2lvbnMSGgoHbWV0aG9kcxgBIAMoCUIJukgGkgEDEPQDIi0KD1NlbGZQZXJtaXNzaW9ucxIaCgdtZXRob2RzGAEgAygJQgm6SAaSAQMQ9AMiTgoSUHJvamVjdFBlcm1pc3Npb25zEhwKB3Byb2plY3QYASABKAlCC7pICHIGmLSusQIBEhoKB21ldGhvZHMYAiADKAlCCbpIBpIBAxD0AyJLChFUZW5hbnRQZXJtaXNzaW9ucxIaCgVsb2dpbhgBIAEoCUILukgIcgaQtK6xAgESGgoHbWV0aG9kcxgCIAMoCUIJukgGkgEDEPQDIi4KEEFkbWluUGVybWlzc2lvbnMSGgoHbWV0aG9kcxgBIAMoCUIJukgGkgEDEPQDIk8KGlRva2VuU2VydmljZUNyZWF0ZVJlc3BvbnNlEiEKBXRva2VuGAEgASgLMhIuZml0cy5hcGkudjEuVG9rZW4SDgoGc2VjcmV0GAIgASgJIhkKF1Rva2VuU2VydmljZUxpc3RSZXF1ZXN0Ij4KGFRva2VuU2VydmljZUxpc3RSZXNwb25zZRIiCgZ0b2tlbnMYASADKAsyEi5maXRzLmFwaS52MS5Ub2tlbiIzChlUb2tlblNlcnZpY2VSZXZva2VSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBIhwKGlRva2VuU2VydmljZVJldm9rZVJlc3BvbnNlIjAKFlRva2VuU2VydmljZUdldFJlcXVlc3QSFgoEdXVpZBgBIAEoCUIIukgFcgOwAQEiPAoXVG9rZW5TZXJ2aWNlR2V0UmVzcG9uc2USIQoFdG9rZW4YASABKAsyEi5maXRzLmFwaS52MS5Ub2tlbipQCglUb2tlblR5cGUSGgoWVE9LRU5fVFlQRV9VTlNQRUNJRklFRBAAEhIKDlRPS0VOX1RZUEVfQVBJEAESEwoPVE9LRU5fVFlQRV9VU0VSEAIyrgIKDFRva2VuU2VydmljZRJaCgNHZXQSIy5maXRzLmFwaS52MS5Ub2tlblNlcnZpY2VHZXRSZXF1ZXN0GiQuZml0cy5hcGkudjEuVG9rZW5TZXJ2aWNlR2V0UmVzcG9uc2UiCNjzGALg8xgBEl0KBExpc3QSJC5maXRzLmFwaS52MS5Ub2tlblNlcnZpY2VMaXN0UmVxdWVzdBolLmZpdHMuYXBpLnYxLlRva2VuU2VydmljZUxpc3RSZXNwb25zZSII2PMYAuDzGAESYwoGUmV2b2tlEiYuZml0cy5hcGkudjEuVG9rZW5TZXJ2aWNlUmV2b2tlUmVxdWVzdBonLmZpdHMuYXBpLnYxLlRva2VuU2VydmljZVJldm9rZVJlc3BvbnNlIgjY8xgC4PMYAUKWAQoPY29tLmZpdHMuYXBpLnYxQgpUb2tlblByb3RvUAFaKWdpdGh1Yi5jb20vZmktdHMvYXBpL2dvL2ZpdHMvYXBpL3YxO2FwaXYxogIDRkFYqgILRml0cy5BcGkuVjHKAgtGaXRzXEFwaVxWMeICF0ZpdHNcQXBpXFYxXEdQQk1ldGFkYXRh6gINRml0czo6QXBpOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_fits_api_v1_common, file_fits_api_v1_predefined_rules, file_google_protobuf_timestamp]);
20
20
 
21
21
  /**
22
22
  * Token generates a jwt authentication token to access the api
@@ -66,9 +66,9 @@ export type Token = Message<"fits.api.v1.Token"> & {
66
66
  /**
67
67
  * Permissions is a list of service methods this token can be used for
68
68
  *
69
- * @generated from field: repeated fits.api.v1.MethodPermission permissions = 5;
69
+ * @generated from field: repeated fits.api.v1.PermissionsByVisibility permissions = 5;
70
70
  */
71
- permissions: MethodPermission[];
71
+ permissions: PermissionsByVisibility[];
72
72
 
73
73
  /**
74
74
  * Expires gives the date in the future after which this token can not be used anymore
@@ -99,7 +99,7 @@ export type Token = Message<"fits.api.v1.Token"> & {
99
99
  projectRoles: { [key: string]: ProjectRole };
100
100
 
101
101
  /**
102
- * TenantRoles associates a tenant id with the corresponding role of the token owner
102
+ * TenantRoles associates a tenant id with the corresponding role of the token owner.
103
103
  *
104
104
  * @generated from field: map<string, fits.api.v1.TenantRole> tenant_roles = 10;
105
105
  */
@@ -153,6 +153,216 @@ export type MethodPermission = Message<"fits.api.v1.MethodPermission"> & {
153
153
  export const MethodPermissionSchema: GenMessage<MethodPermission> = /*@__PURE__*/
154
154
  messageDesc(file_fits_api_v1_token, 1);
155
155
 
156
+ /**
157
+ * PermissionsByVisibility contains method permissions by visibility.
158
+ *
159
+ * @generated from message fits.api.v1.PermissionsByVisibility
160
+ */
161
+ export type PermissionsByVisibility = Message<"fits.api.v1.PermissionsByVisibility"> & {
162
+ /**
163
+ * Visibility defines the visibility of the requested method permissions.
164
+ *
165
+ * @generated from oneof fits.api.v1.PermissionsByVisibility.visibility
166
+ */
167
+ visibility: {
168
+ /**
169
+ * PublicPermissions carries public method permissions.
170
+ *
171
+ * @generated from field: fits.api.v1.PublicPermissions public = 1;
172
+ */
173
+ value: PublicPermissions;
174
+ case: "public";
175
+ } | {
176
+ /**
177
+ * SelfPermissions carries self method permissions.
178
+ *
179
+ * @generated from field: fits.api.v1.SelfPermissions self = 2;
180
+ */
181
+ value: SelfPermissions;
182
+ case: "self";
183
+ } | {
184
+ /**
185
+ * ProjectPermissions carries project method permissions.
186
+ *
187
+ * @generated from field: fits.api.v1.ProjectPermissions project = 3;
188
+ */
189
+ value: ProjectPermissions;
190
+ case: "project";
191
+ } | {
192
+ /**
193
+ * TenantPermissions carries tenant method permissions.
194
+ *
195
+ * @generated from field: fits.api.v1.TenantPermissions tenant = 4;
196
+ */
197
+ value: TenantPermissions;
198
+ case: "tenant";
199
+ } | {
200
+ /**
201
+ * AdminPermissions carries admin method permissions.
202
+ *
203
+ * @generated from field: fits.api.v1.AdminPermissions admin = 5;
204
+ */
205
+ value: AdminPermissions;
206
+ case: "admin";
207
+ } | { case: undefined; value?: undefined };
208
+ };
209
+
210
+ /**
211
+ * Describes the message fits.api.v1.PermissionsByVisibility.
212
+ * Use `create(PermissionsByVisibilitySchema)` to create a new message.
213
+ */
214
+ export const PermissionsByVisibilitySchema: GenMessage<PermissionsByVisibility> = /*@__PURE__*/
215
+ messageDesc(file_fits_api_v1_token, 2);
216
+
217
+ /**
218
+ * PublicPermissions carries public method permissions.
219
+ *
220
+ * @generated from message fits.api.v1.PublicPermissions
221
+ */
222
+ export type PublicPermissions = Message<"fits.api.v1.PublicPermissions"> & {
223
+ /**
224
+ * Methods which should be accessible.
225
+ *
226
+ * @generated from field: repeated string methods = 1;
227
+ */
228
+ methods: string[];
229
+ };
230
+
231
+ /**
232
+ * Describes the message fits.api.v1.PublicPermissions.
233
+ * Use `create(PublicPermissionsSchema)` to create a new message.
234
+ */
235
+ export const PublicPermissionsSchema: GenMessage<PublicPermissions> = /*@__PURE__*/
236
+ messageDesc(file_fits_api_v1_token, 3);
237
+
238
+ /**
239
+ * SelfPermissions carries self method permissions.
240
+ *
241
+ * @generated from message fits.api.v1.SelfPermissions
242
+ */
243
+ export type SelfPermissions = Message<"fits.api.v1.SelfPermissions"> & {
244
+ /**
245
+ * Methods which should be accessible.
246
+ *
247
+ * @generated from field: repeated string methods = 1;
248
+ */
249
+ methods: string[];
250
+ };
251
+
252
+ /**
253
+ * Describes the message fits.api.v1.SelfPermissions.
254
+ * Use `create(SelfPermissionsSchema)` to create a new message.
255
+ */
256
+ export const SelfPermissionsSchema: GenMessage<SelfPermissions> = /*@__PURE__*/
257
+ messageDesc(file_fits_api_v1_token, 4);
258
+
259
+ /**
260
+ * ProjectPermissions carries project method permissions.
261
+ *
262
+ * @generated from message fits.api.v1.ProjectPermissions
263
+ */
264
+ export type ProjectPermissions = Message<"fits.api.v1.ProjectPermissions"> & {
265
+ /**
266
+ * Project scope for the permissions.
267
+ * Asterisk (*) can be specified to match any subject.
268
+ *
269
+ * @generated from field: string project = 1;
270
+ */
271
+ project: string;
272
+
273
+ /**
274
+ * Methods which should be accessible.
275
+ *
276
+ * @generated from field: repeated string methods = 2;
277
+ */
278
+ methods: string[];
279
+ };
280
+
281
+ /**
282
+ * Describes the message fits.api.v1.ProjectPermissions.
283
+ * Use `create(ProjectPermissionsSchema)` to create a new message.
284
+ */
285
+ export const ProjectPermissionsSchema: GenMessage<ProjectPermissions> = /*@__PURE__*/
286
+ messageDesc(file_fits_api_v1_token, 5);
287
+
288
+ /**
289
+ * TenantPermissions carries tenant method permissions.
290
+ *
291
+ * @generated from message fits.api.v1.TenantPermissions
292
+ */
293
+ export type TenantPermissions = Message<"fits.api.v1.TenantPermissions"> & {
294
+ /**
295
+ * Login of the tenant.
296
+ * Asterisk (*) can be specified to match any subject.
297
+ *
298
+ * @generated from field: string login = 1;
299
+ */
300
+ login: string;
301
+
302
+ /**
303
+ * Methods which should be accessible.
304
+ *
305
+ * @generated from field: repeated string methods = 2;
306
+ */
307
+ methods: string[];
308
+ };
309
+
310
+ /**
311
+ * Describes the message fits.api.v1.TenantPermissions.
312
+ * Use `create(TenantPermissionsSchema)` to create a new message.
313
+ */
314
+ export const TenantPermissionsSchema: GenMessage<TenantPermissions> = /*@__PURE__*/
315
+ messageDesc(file_fits_api_v1_token, 6);
316
+
317
+ /**
318
+ * AdminPermissions carries admin method permissions.
319
+ *
320
+ * @generated from message fits.api.v1.AdminPermissions
321
+ */
322
+ export type AdminPermissions = Message<"fits.api.v1.AdminPermissions"> & {
323
+ /**
324
+ * Methods which should be accessible.
325
+ *
326
+ * @generated from field: repeated string methods = 1;
327
+ */
328
+ methods: string[];
329
+ };
330
+
331
+ /**
332
+ * Describes the message fits.api.v1.AdminPermissions.
333
+ * Use `create(AdminPermissionsSchema)` to create a new message.
334
+ */
335
+ export const AdminPermissionsSchema: GenMessage<AdminPermissions> = /*@__PURE__*/
336
+ messageDesc(file_fits_api_v1_token, 7);
337
+
338
+ /**
339
+ * TokenServiceCreateResponse is the response payload of a token create request
340
+ *
341
+ * @generated from message fits.api.v1.TokenServiceCreateResponse
342
+ */
343
+ export type TokenServiceCreateResponse = Message<"fits.api.v1.TokenServiceCreateResponse"> & {
344
+ /**
345
+ * Token which was created
346
+ *
347
+ * @generated from field: fits.api.v1.Token token = 1;
348
+ */
349
+ token?: Token | undefined;
350
+
351
+ /**
352
+ * Secret is the body if the jwt token, should be used in api requests as bearer token
353
+ *
354
+ * @generated from field: string secret = 2;
355
+ */
356
+ secret: string;
357
+ };
358
+
359
+ /**
360
+ * Describes the message fits.api.v1.TokenServiceCreateResponse.
361
+ * Use `create(TokenServiceCreateResponseSchema)` to create a new message.
362
+ */
363
+ export const TokenServiceCreateResponseSchema: GenMessage<TokenServiceCreateResponse> = /*@__PURE__*/
364
+ messageDesc(file_fits_api_v1_token, 8);
365
+
156
366
  /**
157
367
  * TokenServiceListRequest is the request payload to list tokens
158
368
  *
@@ -166,7 +376,7 @@ export type TokenServiceListRequest = Message<"fits.api.v1.TokenServiceListReque
166
376
  * Use `create(TokenServiceListRequestSchema)` to create a new message.
167
377
  */
168
378
  export const TokenServiceListRequestSchema: GenMessage<TokenServiceListRequest> = /*@__PURE__*/
169
- messageDesc(file_fits_api_v1_token, 2);
379
+ messageDesc(file_fits_api_v1_token, 9);
170
380
 
171
381
  /**
172
382
  * TokenServiceListResponse is the response payload of a token list request
@@ -187,7 +397,7 @@ export type TokenServiceListResponse = Message<"fits.api.v1.TokenServiceListResp
187
397
  * Use `create(TokenServiceListResponseSchema)` to create a new message.
188
398
  */
189
399
  export const TokenServiceListResponseSchema: GenMessage<TokenServiceListResponse> = /*@__PURE__*/
190
- messageDesc(file_fits_api_v1_token, 3);
400
+ messageDesc(file_fits_api_v1_token, 10);
191
401
 
192
402
  /**
193
403
  * TokenServiceRevokeRequest is the request payload of a token revoke request
@@ -208,7 +418,7 @@ export type TokenServiceRevokeRequest = Message<"fits.api.v1.TokenServiceRevokeR
208
418
  * Use `create(TokenServiceRevokeRequestSchema)` to create a new message.
209
419
  */
210
420
  export const TokenServiceRevokeRequestSchema: GenMessage<TokenServiceRevokeRequest> = /*@__PURE__*/
211
- messageDesc(file_fits_api_v1_token, 4);
421
+ messageDesc(file_fits_api_v1_token, 11);
212
422
 
213
423
  /**
214
424
  * TokenServiceRevokeResponse is the response payload of a token revoke request
@@ -223,7 +433,7 @@ export type TokenServiceRevokeResponse = Message<"fits.api.v1.TokenServiceRevoke
223
433
  * Use `create(TokenServiceRevokeResponseSchema)` to create a new message.
224
434
  */
225
435
  export const TokenServiceRevokeResponseSchema: GenMessage<TokenServiceRevokeResponse> = /*@__PURE__*/
226
- messageDesc(file_fits_api_v1_token, 5);
436
+ messageDesc(file_fits_api_v1_token, 12);
227
437
 
228
438
  /**
229
439
  * TokenServiceGetRequest is the request payload of a token get request
@@ -244,7 +454,7 @@ export type TokenServiceGetRequest = Message<"fits.api.v1.TokenServiceGetRequest
244
454
  * Use `create(TokenServiceGetRequestSchema)` to create a new message.
245
455
  */
246
456
  export const TokenServiceGetRequestSchema: GenMessage<TokenServiceGetRequest> = /*@__PURE__*/
247
- messageDesc(file_fits_api_v1_token, 6);
457
+ messageDesc(file_fits_api_v1_token, 13);
248
458
 
249
459
  /**
250
460
  * TokenServiceGetResponse is the response payload of a token get request
@@ -265,7 +475,7 @@ export type TokenServiceGetResponse = Message<"fits.api.v1.TokenServiceGetRespon
265
475
  * Use `create(TokenServiceGetResponseSchema)` to create a new message.
266
476
  */
267
477
  export const TokenServiceGetResponseSchema: GenMessage<TokenServiceGetResponse> = /*@__PURE__*/
268
- messageDesc(file_fits_api_v1_token, 7);
478
+ messageDesc(file_fits_api_v1_token, 14);
269
479
 
270
480
  /**
271
481
  * TokenType specifies different use cases of tokens
package/package.json CHANGED
@@ -21,5 +21,5 @@
21
21
  "fits",
22
22
  "buf"
23
23
  ],
24
- "version": "0.0.0-pr.14.980a9f6f"
24
+ "version": "0.0.0-pr.14.aa7e1f04"
25
25
  }
@@ -1,55 +0,0 @@
1
- import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
2
- import type { Timestamp } from "@bufbuild/protobuf/wkt";
3
- import type { Message } from "@bufbuild/protobuf";
4
- /**
5
- * Describes the file fits/api/v1/vpn.proto.
6
- */
7
- export declare const file_fits_api_v1_vpn: GenFile;
8
- /**
9
- * VPNNode represents a machine connected to the VPN.
10
- *
11
- * @generated from message fits.api.v1.VPNNode
12
- */
13
- export type VPNNode = Message<"fits.api.v1.VPNNode"> & {
14
- /**
15
- * ID of this node
16
- *
17
- * @generated from field: uint64 id = 1;
18
- */
19
- id: bigint;
20
- /**
21
- * Name of this node
22
- *
23
- * @generated from field: string name = 2;
24
- */
25
- name: string;
26
- /**
27
- * Project of this node, maps to a project
28
- *
29
- * @generated from field: string project = 3;
30
- */
31
- project: string;
32
- /**
33
- * IPAddresses of this node in the VPN
34
- *
35
- * @generated from field: repeated string ip_addresses = 4;
36
- */
37
- ipAddresses: string[];
38
- /**
39
- * LastSeen timestamp when this node reached out to the control plane
40
- *
41
- * @generated from field: google.protobuf.Timestamp last_seen = 5;
42
- */
43
- lastSeen?: Timestamp | undefined;
44
- /**
45
- * Online indicates if this node is online
46
- *
47
- * @generated from field: bool online = 6;
48
- */
49
- online: boolean;
50
- };
51
- /**
52
- * Describes the message fits.api.v1.VPNNode.
53
- * Use `create(VPNNodeSchema)` to create a new message.
54
- */
55
- export declare const VPNNodeSchema: GenMessage<VPNNode>;
@@ -1,14 +0,0 @@
1
- // @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
2
- // @generated from file fits/api/v1/vpn.proto (package fits.api.v1, syntax proto3)
3
- /* eslint-disable */
4
- import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
5
- import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
6
- /**
7
- * Describes the file fits/api/v1/vpn.proto.
8
- */
9
- export const file_fits_api_v1_vpn = /*@__PURE__*/ fileDesc("ChVmaXRzL2FwaS92MS92cG4ucHJvdG8SC2ZpdHMuYXBpLnYxIokBCgdWUE5Ob2RlEgoKAmlkGAEgASgEEgwKBG5hbWUYAiABKAkSDwoHcHJvamVjdBgDIAEoCRIUCgxpcF9hZGRyZXNzZXMYBCADKAkSLQoJbGFzdF9zZWVuGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIOCgZvbmxpbmUYBiABKAhClAEKD2NvbS5maXRzLmFwaS52MUIIVnBuUHJvdG9QAVopZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdjE7YXBpdjGiAgNGQViqAgtGaXRzLkFwaS5WMcoCC0ZpdHNcQXBpXFYx4gIXRml0c1xBcGlcVjFcR1BCTWV0YWRhdGHqAg1GaXRzOjpBcGk6OlYxYgZwcm90bzM", [file_google_protobuf_timestamp]);
10
- /**
11
- * Describes the message fits.api.v1.VPNNode.
12
- * Use `create(VPNNodeSchema)` to create a new message.
13
- */
14
- export const VPNNodeSchema = /*@__PURE__*/ messageDesc(file_fits_api_v1_vpn, 0);
@@ -1,72 +0,0 @@
1
- // @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
2
- // @generated from file fits/api/v1/vpn.proto (package fits.api.v1, syntax proto3)
3
- /* eslint-disable */
4
-
5
- import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
- import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
7
- import type { Timestamp } from "@bufbuild/protobuf/wkt";
8
- import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
9
- import type { Message } from "@bufbuild/protobuf";
10
-
11
- /**
12
- * Describes the file fits/api/v1/vpn.proto.
13
- */
14
- export const file_fits_api_v1_vpn: GenFile = /*@__PURE__*/
15
- fileDesc("ChVmaXRzL2FwaS92MS92cG4ucHJvdG8SC2ZpdHMuYXBpLnYxIokBCgdWUE5Ob2RlEgoKAmlkGAEgASgEEgwKBG5hbWUYAiABKAkSDwoHcHJvamVjdBgDIAEoCRIUCgxpcF9hZGRyZXNzZXMYBCADKAkSLQoJbGFzdF9zZWVuGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIOCgZvbmxpbmUYBiABKAhClAEKD2NvbS5maXRzLmFwaS52MUIIVnBuUHJvdG9QAVopZ2l0aHViLmNvbS9maS10cy9hcGkvZ28vZml0cy9hcGkvdjE7YXBpdjGiAgNGQViqAgtGaXRzLkFwaS5WMcoCC0ZpdHNcQXBpXFYx4gIXRml0c1xBcGlcVjFcR1BCTWV0YWRhdGHqAg1GaXRzOjpBcGk6OlYxYgZwcm90bzM", [file_google_protobuf_timestamp]);
16
-
17
- /**
18
- * VPNNode represents a machine connected to the VPN.
19
- *
20
- * @generated from message fits.api.v1.VPNNode
21
- */
22
- export type VPNNode = Message<"fits.api.v1.VPNNode"> & {
23
- /**
24
- * ID of this node
25
- *
26
- * @generated from field: uint64 id = 1;
27
- */
28
- id: bigint;
29
-
30
- /**
31
- * Name of this node
32
- *
33
- * @generated from field: string name = 2;
34
- */
35
- name: string;
36
-
37
- /**
38
- * Project of this node, maps to a project
39
- *
40
- * @generated from field: string project = 3;
41
- */
42
- project: string;
43
-
44
- /**
45
- * IPAddresses of this node in the VPN
46
- *
47
- * @generated from field: repeated string ip_addresses = 4;
48
- */
49
- ipAddresses: string[];
50
-
51
- /**
52
- * LastSeen timestamp when this node reached out to the control plane
53
- *
54
- * @generated from field: google.protobuf.Timestamp last_seen = 5;
55
- */
56
- lastSeen?: Timestamp | undefined;
57
-
58
- /**
59
- * Online indicates if this node is online
60
- *
61
- * @generated from field: bool online = 6;
62
- */
63
- online: boolean;
64
- };
65
-
66
- /**
67
- * Describes the message fits.api.v1.VPNNode.
68
- * Use `create(VPNNodeSchema)` to create a new message.
69
- */
70
- export const VPNNodeSchema: GenMessage<VPNNode> = /*@__PURE__*/
71
- messageDesc(file_fits_api_v1_vpn, 0);
72
-