diff --git a/config.yaml b/config.yaml index b194e5c..5423fc3 100644 --- a/config.yaml +++ b/config.yaml @@ -322,6 +322,12 @@ entities: # Docs: https://docs.olivetin.app/entities/intro.html - file: entities/servers.yaml name: server + icon: ssh + properties: + - name: hostname + title: Hostname + - name: ip + title: IP - file: entities/containers.json name: container diff --git a/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.d.ts b/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.d.ts index 925fe92..8a9886d 100644 --- a/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.d.ts +++ b/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.d.ts @@ -247,6 +247,27 @@ export declare type ActionArgumentChoice = Message<"olivetin.api.v1.ActionArgume */ export declare const ActionArgumentChoiceSchema: GenMessage; +/** + * @generated from message olivetin.api.v1.EntityRelatedAction + */ +export declare type EntityRelatedAction = Message<"olivetin.api.v1.EntityRelatedAction"> & { + /** + * @generated from field: olivetin.api.v1.Action action = 1; + */ + action?: Action | undefined; + + /** + * @generated from field: map prefilled_arguments = 2; + */ + prefilledArguments: { [key: string]: string }; +}; + +/** + * Describes the message olivetin.api.v1.EntityRelatedAction. + * Use `create(EntityRelatedActionSchema)` to create a new message. + */ +export declare const EntityRelatedActionSchema: GenMessage; + /** * @generated from message olivetin.api.v1.Entity */ @@ -275,6 +296,16 @@ export declare type Entity = Message<"olivetin.api.v1.Entity"> & { * @generated from field: map fields = 5; */ fields: { [key: string]: string }; + + /** + * @generated from field: repeated olivetin.api.v1.EntityRelatedAction related_actions = 6; + */ + relatedActions: EntityRelatedAction[]; + + /** + * @generated from field: string icon = 7; + */ + icon: string; }; /** @@ -1894,6 +1925,25 @@ export declare const GetActionBindingResponseSchema: GenMessage & { + /** + * @generated from field: string entity_type = 1; + */ + entityType: string; + + /** + * @generated from field: string filter = 2; + */ + filter: string; + + /** + * @generated from field: int32 page = 3; + */ + page: number; + + /** + * @generated from field: int32 page_size = 4; + */ + pageSize: number; }; /** @@ -1936,6 +1986,21 @@ export declare type EntityDefinition = Message<"olivetin.api.v1.EntityDefinition * @generated from field: repeated string used_on_dashboards = 3; */ usedOnDashboards: string[]; + + /** + * @generated from field: string icon = 4; + */ + icon: string; + + /** + * @generated from field: repeated olivetin.api.v1.EntityProperty properties = 5; + */ + properties: EntityProperty[]; + + /** + * @generated from field: int32 total_instances = 6; + */ + totalInstances: number; }; /** @@ -1944,6 +2009,27 @@ export declare type EntityDefinition = Message<"olivetin.api.v1.EntityDefinition */ export declare const EntityDefinitionSchema: GenMessage; +/** + * @generated from message olivetin.api.v1.EntityProperty + */ +export declare type EntityProperty = Message<"olivetin.api.v1.EntityProperty"> & { + /** + * @generated from field: string name = 1; + */ + name: string; + + /** + * @generated from field: string title = 2; + */ + title: string; +}; + +/** + * Describes the message olivetin.api.v1.EntityProperty. + * Use `create(EntityPropertySchema)` to create a new message. + */ +export declare const EntityPropertySchema: GenMessage; + /** * @generated from message olivetin.api.v1.GetEntityRequest */ diff --git a/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.js b/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.js index b9fb551..c85bf6f 100644 --- a/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.js +++ b/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.js @@ -8,7 +8,7 @@ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2 * Describes the file olivetin/api/v1/olivetin.proto. */ export const file_olivetin_api_v1_olivetin = /*@__PURE__*/ - fileDesc("Ch5vbGl2ZXRpbi9hcGkvdjEvb2xpdmV0aW4ucHJvdG8SD29saXZldGluLmFwaS52MSLABAoGQWN0aW9uEhIKCmJpbmRpbmdfaWQYASABKAkSDQoFdGl0bGUYAiABKAkSDAoEaWNvbhgDIAEoCRIQCghjYW5fZXhlYxgEIAEoCBIyCglhcmd1bWVudHMYBSADKAsyHy5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uQXJndW1lbnQSFgoOcG9wdXBfb25fc3RhcnQYBiABKAkSDQoFb3JkZXIYByABKAUSDwoHdGltZW91dBgIIAEoBRIjChtkYXRldGltZV9yYXRlX2xpbWl0X2V4cGlyZXMYCSABKAkSFwoPZXhlY19vbl9zdGFydHVwGAogASgIEhQKDGV4ZWNfb25fY3JvbhgLIAMoCRIjChtleGVjX29uX2ZpbGVfY3JlYXRlZF9pbl9kaXIYDCADKAkSIwobZXhlY19vbl9maWxlX2NoYW5nZWRfaW5fZGlyGA0gAygJEh0KFWV4ZWNfb25fY2FsZW5kYXJfZmlsZRgOIAEoCRJAChBleGVjX29uX3dlYmhvb2tzGA8gAygLMiYub2xpdmV0aW4uYXBpLnYxLkFjdGlvbldlYmhvb2tFeGVjSGludBIVCg1qdXN0aWZpY2F0aW9uGBAgASgJEhwKFGhhc19ydW5uaW5nX2luc3RhbmNlGBEgASgIEhsKE2hhc19xdWV1ZWRfaW5zdGFuY2UYEiABKAgSNgoGZ3JvdXBzGBMgAygLMiYub2xpdmV0aW4uYXBpLnYxLkFjdGlvbkdyb3VwTWVtYmVyc2hpcCJRChVBY3Rpb25Hcm91cE1lbWJlcnNoaXASDAoEbmFtZRgBIAEoCRIWCg5tYXhfY29uY3VycmVudBgCIAEoBRISCgpxdWV1ZV9zaXplGAMgASgFIsMCChVBY3Rpb25XZWJob29rRXhlY0hpbnQSEAoIdGVtcGxhdGUYASABKAkSEgoKbWF0Y2hfcGF0aBgCIAEoCRJPCg1tYXRjaF9oZWFkZXJzGAMgAygLMjgub2xpdmV0aW4uYXBpLnYxLkFjdGlvbldlYmhvb2tFeGVjSGludC5NYXRjaEhlYWRlcnNFbnRyeRJLCgttYXRjaF9xdWVyeRgEIAMoCzI2Lm9saXZldGluLmFwaS52MS5BY3Rpb25XZWJob29rRXhlY0hpbnQuTWF0Y2hRdWVyeUVudHJ5GjMKEU1hdGNoSGVhZGVyc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaMQoPTWF0Y2hRdWVyeUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiuwIKDkFjdGlvbkFyZ3VtZW50EgwKBG5hbWUYASABKAkSDQoFdGl0bGUYAiABKAkSDAoEdHlwZRgDIAEoCRIVCg1kZWZhdWx0X3ZhbHVlGAQgASgJEjYKB2Nob2ljZXMYBSADKAsyJS5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uQXJndW1lbnRDaG9pY2USEwoLZGVzY3JpcHRpb24YBiABKAkSRQoLc3VnZ2VzdGlvbnMYByADKAsyMC5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uQXJndW1lbnQuU3VnZ2VzdGlvbnNFbnRyeRIfChdzdWdnZXN0aW9uc19icm93c2VyX2tleRgIIAEoCRoyChBTdWdnZXN0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiNAoUQWN0aW9uQXJndW1lbnRDaG9pY2USDQoFdmFsdWUYASABKAkSDQoFdGl0bGUYAiABKAkisgEKBkVudGl0eRINCgV0aXRsZRgBIAEoCRISCgp1bmlxdWVfa2V5GAIgASgJEgwKBHR5cGUYAyABKAkSEwoLZGlyZWN0b3JpZXMYBCADKAkSMwoGZmllbGRzGAUgAygLMiMub2xpdmV0aW4uYXBpLnYxLkVudGl0eS5GaWVsZHNFbnRyeRotCgtGaWVsZHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIlQKFEdldERhc2hib2FyZFJlc3BvbnNlEg0KBXRpdGxlGAEgASgJEi0KCWRhc2hib2FyZBgEIAEoCzIaLm9saXZldGluLmFwaS52MS5EYXNoYm9hcmQiXwoPRWZmZWN0aXZlUG9saWN5EhgKEHNob3dfZGlhZ25vc3RpY3MYASABKAgSFQoNc2hvd19sb2dfbGlzdBgCIAEoCBIbChNzaG93X3ZlcnNpb25fbnVtYmVyGAMgASgIIk0KE0dldERhc2hib2FyZFJlcXVlc3QSDQoFdGl0bGUYASABKAkSEwoLZW50aXR5X3R5cGUYAiABKAkSEgoKZW50aXR5X2tleRgDIAEoCSJRCglEYXNoYm9hcmQSDQoFdGl0bGUYASABKAkSNQoIY29udGVudHMYAiADKAsyIy5vbGl2ZXRpbi5hcGkudjEuRGFzaGJvYXJkQ29tcG9uZW50ItsBChJEYXNoYm9hcmRDb21wb25lbnQSDQoFdGl0bGUYASABKAkSDAoEdHlwZRgCIAEoCRI1Cghjb250ZW50cxgDIAMoCzIjLm9saXZldGluLmFwaS52MS5EYXNoYm9hcmRDb21wb25lbnQSDAoEaWNvbhgEIAEoCRIRCgljc3NfY2xhc3MYBSABKAkSJwoGYWN0aW9uGAYgASgLMhcub2xpdmV0aW4uYXBpLnYxLkFjdGlvbhITCgtlbnRpdHlfdHlwZRgHIAEoCRISCgplbnRpdHlfa2V5GAggASgJIpQBChJTdGFydEFjdGlvblJlcXVlc3QSEgoKYmluZGluZ19pZBgBIAEoCRI3Cglhcmd1bWVudHMYAiADKAsyJC5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25Bcmd1bWVudBIaChJ1bmlxdWVfdHJhY2tpbmdfaWQYAyABKAkSFQoNanVzdGlmaWNhdGlvbhgEIAEoCSIyChNTdGFydEFjdGlvbkFyZ3VtZW50EgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAkiNAoTU3RhcnRBY3Rpb25SZXNwb25zZRIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYAiABKAkifgoZU3RhcnRBY3Rpb25BbmRXYWl0UmVxdWVzdBIRCglhY3Rpb25faWQYASABKAkSNwoJYXJndW1lbnRzGAIgAygLMiQub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uQXJndW1lbnQSFQoNanVzdGlmaWNhdGlvbhgDIAEoCSJKChpTdGFydEFjdGlvbkFuZFdhaXRSZXNwb25zZRIsCglsb2dfZW50cnkYASABKAsyGS5vbGl2ZXRpbi5hcGkudjEuTG9nRW50cnkiLAoXU3RhcnRBY3Rpb25CeUdldFJlcXVlc3QSEQoJYWN0aW9uX2lkGAEgASgJIjkKGFN0YXJ0QWN0aW9uQnlHZXRSZXNwb25zZRIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYAiABKAkiMwoeU3RhcnRBY3Rpb25CeUdldEFuZFdhaXRSZXF1ZXN0EhEKCWFjdGlvbl9pZBgBIAEoCSJPCh9TdGFydEFjdGlvbkJ5R2V0QW5kV2FpdFJlc3BvbnNlEiwKCWxvZ19lbnRyeRgBIAEoCzIZLm9saXZldGluLmFwaS52MS5Mb2dFbnRyeSJeCg5HZXRMb2dzUmVxdWVzdBIUCgxzdGFydF9vZmZzZXQYASABKAMSEwoLZGF0ZV9maWx0ZXIYAiABKAkSEQoJcGFnZV9zaXplGAMgASgDEg4KBmZpbHRlchgEIAEoCSKUBAoITG9nRW50cnkSGAoQZGF0ZXRpbWVfc3RhcnRlZBgBIAEoCRIUCgxhY3Rpb25fdGl0bGUYAiABKAkSDgoGb3V0cHV0GAMgASgJEhEKCXRpbWVkX291dBgFIAEoCBIRCglleGl0X2NvZGUYBiABKAUSDAoEdXNlchgHIAEoCRISCgp1c2VyX2NsYXNzGAggASgJEhMKC2FjdGlvbl9pY29uGAkgASgJEgwKBHRhZ3MYCiADKAkSHQoVZXhlY3V0aW9uX3RyYWNraW5nX2lkGAsgASgJEhkKEWRhdGV0aW1lX2ZpbmlzaGVkGAwgASgJEhkKEWV4ZWN1dGlvbl9zdGFydGVkGA4gASgIEhoKEmV4ZWN1dGlvbl9maW5pc2hlZBgPIAEoCBIPCgdibG9ja2VkGBAgASgIEhYKDmRhdGV0aW1lX2luZGV4GBEgASgDEhAKCGNhbl9raWxsGBIgASgIEiMKG2RhdGV0aW1lX3JhdGVfbGltaXRfZXhwaXJlcxgTIAEoCRISCgpiaW5kaW5nX2lkGBQgASgJEg4KBnF1ZXVlZBgVIAEoCBIYChBxdWV1ZWRfZm9yX2dyb3VwGBYgASgJEhUKDWp1c3RpZmljYXRpb24YFyABKAkSNwoJYXJndW1lbnRzGBggAygLMiQub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uQXJndW1lbnQikQEKD0dldExvZ3NSZXNwb25zZRInCgRsb2dzGAEgAygLMhkub2xpdmV0aW4uYXBpLnYxLkxvZ0VudHJ5EhcKD2NvdW50X3JlbWFpbmluZxgCIAEoAxIRCglwYWdlX3NpemUYAyABKAMSEwoLdG90YWxfY291bnQYBCABKAMSFAoMc3RhcnRfb2Zmc2V0GAUgASgDIj8KFEdldEFjdGlvbkxvZ3NSZXF1ZXN0EhEKCWFjdGlvbl9pZBgBIAEoCRIUCgxzdGFydF9vZmZzZXQYAiABKAMilwEKFUdldEFjdGlvbkxvZ3NSZXNwb25zZRInCgRsb2dzGAEgAygLMhkub2xpdmV0aW4uYXBpLnYxLkxvZ0VudHJ5EhcKD2NvdW50X3JlbWFpbmluZxgCIAEoAxIRCglwYWdlX3NpemUYAyABKAMSEwoLdG90YWxfY291bnQYBCABKAMSFAoMc3RhcnRfb2Zmc2V0GAUgASgDIhoKGEdldEV4ZWN1dGlvblF1ZXVlUmVxdWVzdCLGAQoURXhlY3V0aW9uUXVldWVBY3Rpb24SEgoKYmluZGluZ19pZBgBIAEoCRIUCgxhY3Rpb25fdGl0bGUYAiABKAkSEwoLYWN0aW9uX2ljb24YAyABKAkSFgoObWF4X2NvbmN1cnJlbnQYBCABKAUSFAoMYWN0aXZlX2NvdW50GAUgASgFEhUKDWVudGl0eV9wcmVmaXgYBiABKAkSKgoHZW50cmllcxgHIAMoCzIZLm9saXZldGluLmFwaS52MS5Mb2dFbnRyeSLBAQoTRXhlY3V0aW9uUXVldWVHcm91cBIMCgRuYW1lGAEgASgJEgwKBGljb24YAiABKAkSFgoObWF4X2NvbmN1cnJlbnQYAyABKAUSFAoMYWN0aXZlX2NvdW50GAQgASgFEjYKB2FjdGlvbnMYBSADKAsyJS5vbGl2ZXRpbi5hcGkudjEuRXhlY3V0aW9uUXVldWVBY3Rpb24SFAoMcXVldWVkX2NvdW50GAYgASgFEhIKCnF1ZXVlX3NpemUYByABKAUiZwoZR2V0RXhlY3V0aW9uUXVldWVSZXNwb25zZRI0CgZncm91cHMYASADKAsyJC5vbGl2ZXRpbi5hcGkudjEuRXhlY3V0aW9uUXVldWVHcm91cBIUCgx0b3RhbF9hY3RpdmUYAiABKAUiZQobVmFsaWRhdGVBcmd1bWVudFR5cGVSZXF1ZXN0Eg0KBXZhbHVlGAEgASgJEgwKBHR5cGUYAiABKAkSEgoKYmluZGluZ19pZBgDIAEoCRIVCg1hcmd1bWVudF9uYW1lGAQgASgJIkIKHFZhbGlkYXRlQXJndW1lbnRUeXBlUmVzcG9uc2USDQoFdmFsaWQYASABKAgSEwoLZGVzY3JpcHRpb24YAiABKAkiNgoVV2F0Y2hFeGVjdXRpb25SZXF1ZXN0Eh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgBIAEoCSImChRXYXRjaEV4ZWN1dGlvblVwZGF0ZRIOCgZ1cGRhdGUYASABKAkiSgoWRXhlY3V0aW9uU3RhdHVzUmVxdWVzdBIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYASABKAkSEQoJYWN0aW9uX2lkGAIgASgJImEKGURhc2hib2FyZE5hdmlnYXRpb25UYXJnZXQSDQoFdGl0bGUYASABKAkSEwoLZW50aXR5X3R5cGUYAiABKAkSEgoKZW50aXR5X2tleRgDIAEoCRIMCgRwYXRoGAQgASgJIo8BChdFeGVjdXRpb25TdGF0dXNSZXNwb25zZRIsCglsb2dfZW50cnkYASABKAsyGS5vbGl2ZXRpbi5hcGkudjEuTG9nRW50cnkSRgoSYmFja190b19kYXNoYm9hcmRzGAIgAygLMioub2xpdmV0aW4uYXBpLnYxLkRhc2hib2FyZE5hdmlnYXRpb25UYXJnZXQiDwoNV2hvQW1JUmVxdWVzdCJsCg5XaG9BbUlSZXNwb25zZRIaChJhdXRoZW50aWNhdGVkX3VzZXIYASABKAkSEQoJdXNlcmdyb3VwGAIgASgJEhAKCHByb3ZpZGVyGAMgASgJEgwKBGFjbHMYBCADKAkSCwoDc2lkGAUgASgJIhIKEFNvc1JlcG9ydFJlcXVlc3QiIgoRU29zUmVwb3J0UmVzcG9uc2USDQoFYWxlcnQYASABKAkiEQoPRHVtcFZhcnNSZXF1ZXN0IpUBChBEdW1wVmFyc1Jlc3BvbnNlEg0KBWFsZXJ0GAEgASgJEkEKCGNvbnRlbnRzGAIgAygLMi8ub2xpdmV0aW4uYXBpLnYxLkR1bXBWYXJzUmVzcG9uc2UuQ29udGVudHNFbnRyeRovCg1Db250ZW50c0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiOwoMRGVidWdCaW5kaW5nEhQKDGFjdGlvbl90aXRsZRgBIAEoCRIVCg1lbnRpdHlfcHJlZml4GAIgASgJIh4KHER1bXBQdWJsaWNJZEFjdGlvbk1hcFJlcXVlc3QizgEKHUR1bXBQdWJsaWNJZEFjdGlvbk1hcFJlc3BvbnNlEg0KBWFsZXJ0GAEgASgJEk4KCGNvbnRlbnRzGAIgAygLMjwub2xpdmV0aW4uYXBpLnYxLkR1bXBQdWJsaWNJZEFjdGlvbk1hcFJlc3BvbnNlLkNvbnRlbnRzRW50cnkaTgoNQ29udGVudHNFbnRyeRILCgNrZXkYASABKAkSLAoFdmFsdWUYAiABKAsyHS5vbGl2ZXRpbi5hcGkudjEuRGVidWdCaW5kaW5nOgI4ASISChBHZXRSZWFkeXpSZXF1ZXN0IiMKEUdldFJlYWR5elJlc3BvbnNlEg4KBnN0YXR1cxgBIAEoCSIUChJFdmVudFN0cmVhbVJlcXVlc3QimQMKE0V2ZW50U3RyZWFtUmVzcG9uc2USPQoOZW50aXR5X2NoYW5nZWQYAiABKAsyIy5vbGl2ZXRpbi5hcGkudjEuRXZlbnRFbnRpdHlDaGFuZ2VkSAASPQoOY29uZmlnX2NoYW5nZWQYAyABKAsyIy5vbGl2ZXRpbi5hcGkudjEuRXZlbnRDb25maWdDaGFuZ2VkSAASRQoSZXhlY3V0aW9uX2ZpbmlzaGVkGAQgASgLMicub2xpdmV0aW4uYXBpLnYxLkV2ZW50RXhlY3V0aW9uRmluaXNoZWRIABJDChFleGVjdXRpb25fc3RhcnRlZBgFIAEoCzImLm9saXZldGluLmFwaS52MS5FdmVudEV4ZWN1dGlvblN0YXJ0ZWRIABI5CgxvdXRwdXRfY2h1bmsYBiABKAsyIS5vbGl2ZXRpbi5hcGkudjEuRXZlbnRPdXRwdXRDaHVua0gAEjQKCWhlYXJ0YmVhdBgHIAEoCzIfLm9saXZldGluLmFwaS52MS5FdmVudEhlYXJ0YmVhdEgAQgcKBWV2ZW50IkEKEEV2ZW50T3V0cHV0Q2h1bmsSHQoVZXhlY3V0aW9uX3RyYWNraW5nX2lkGAEgASgJEg4KBm91dHB1dBgCIAEoCSIUChJFdmVudEVudGl0eUNoYW5nZWQiFAoSRXZlbnRDb25maWdDaGFuZ2VkIhAKDkV2ZW50SGVhcnRiZWF0IkYKFkV2ZW50RXhlY3V0aW9uRmluaXNoZWQSLAoJbG9nX2VudHJ5GAEgASgLMhkub2xpdmV0aW4uYXBpLnYxLkxvZ0VudHJ5IkUKFUV2ZW50RXhlY3V0aW9uU3RhcnRlZBIsCglsb2dfZW50cnkYASABKAsyGS5vbGl2ZXRpbi5hcGkudjEuTG9nRW50cnkiMgoRS2lsbEFjdGlvblJlcXVlc3QSHQoVZXhlY3V0aW9uX3RyYWNraW5nX2lkGAEgASgJIm0KEktpbGxBY3Rpb25SZXNwb25zZRIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYASABKAkSDgoGa2lsbGVkGAIgASgIEhkKEWFscmVhZHlfY29tcGxldGVkGAMgASgIEg0KBWZvdW5kGAQgASgIIjsKFUxvY2FsVXNlckxvZ2luUmVxdWVzdBIQCgh1c2VybmFtZRgBIAEoCRIQCghwYXNzd29yZBgCIAEoCSIpChZMb2NhbFVzZXJMb2dpblJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiJwoTUGFzc3dvcmRIYXNoUmVxdWVzdBIQCghwYXNzd29yZBgBIAEoCSIkChRQYXNzd29yZEhhc2hSZXNwb25zZRIMCgRoYXNoGAEgASgJIg8KDUxvZ291dFJlcXVlc3QiEAoOTG9nb3V0UmVzcG9uc2UiFwoVR2V0RGlhZ25vc3RpY3NSZXF1ZXN0IkUKFkdldERpYWdub3N0aWNzUmVzcG9uc2USEwoLU3NoRm91bmRLZXkYASABKAkSFgoOU3NoRm91bmRDb25maWcYAiABKAkiDQoLSW5pdFJlcXVlc3Qi6wUKDEluaXRSZXNwb25zZRISCgpzaG93Rm9vdGVyGAEgASgIEhYKDnNob3dOYXZpZ2F0aW9uGAIgASgIEhcKD3Nob3dOZXdWZXJzaW9ucxgDIAEoCBIYChBhdmFpbGFibGVWZXJzaW9uGAQgASgJEhYKDmN1cnJlbnRWZXJzaW9uGAUgASgJEhEKCXBhZ2VUaXRsZRgGIAEoCRIeChZzZWN0aW9uTmF2aWdhdGlvblN0eWxlGAcgASgJEhoKEmRlZmF1bHRJY29uRm9yQmFjaxgIIAEoCRIWCg5lbmFibGVDdXN0b21KcxgJIAEoCBIUCgxhdXRoTG9naW5VcmwYCiABKAkSFgoOYXV0aExvY2FsTG9naW4YCyABKAgSEQoJc3R5bGVNb2RzGAwgAygJEjgKD29BdXRoMlByb3ZpZGVycxgNIAMoCzIfLm9saXZldGluLmFwaS52MS5PQXV0aDJQcm92aWRlchI4Cg9hZGRpdGlvbmFsTGlua3MYDiADKAsyHy5vbGl2ZXRpbi5hcGkudjEuQWRkaXRpb25hbExpbmsSFgoOcm9vdERhc2hib2FyZHMYDyADKAkSGgoSYXV0aGVudGljYXRlZF91c2VyGBAgASgJEiMKG2F1dGhlbnRpY2F0ZWRfdXNlcl9wcm92aWRlchgRIAEoCRI6ChBlZmZlY3RpdmVfcG9saWN5GBIgASgLMiAub2xpdmV0aW4uYXBpLnYxLkVmZmVjdGl2ZVBvbGljeRIWCg5iYW5uZXJfbWVzc2FnZRgTIAEoCRISCgpiYW5uZXJfY3NzGBQgASgJEhgKEHNob3dfZGlhZ25vc3RpY3MYFSABKAgSFQoNc2hvd19sb2dfbGlzdBgWIAEoCBIWCg5sb2dpbl9yZXF1aXJlZBgXIAEoCBIYChBhdmFpbGFibGVfdGhlbWVzGBggAygJEiQKHHNob3dfbmF2aWdhdGVfb25fc3RhcnRfaWNvbnMYGSABKAgiLAoOQWRkaXRpb25hbExpbmsSDQoFdGl0bGUYASABKAkSCwoDdXJsGAIgASgJIjoKDk9BdXRoMlByb3ZpZGVyEg0KBXRpdGxlGAEgASgJEgwKBGljb24YAyABKAkSCwoDa2V5GAQgASgJIi0KF0dldEFjdGlvbkJpbmRpbmdSZXF1ZXN0EhIKCmJpbmRpbmdfaWQYASABKAkiiwEKGEdldEFjdGlvbkJpbmRpbmdSZXNwb25zZRInCgZhY3Rpb24YASABKAsyFy5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uEkYKEmJhY2tfdG9fZGFzaGJvYXJkcxgCIAMoCzIqLm9saXZldGluLmFwaS52MS5EYXNoYm9hcmROYXZpZ2F0aW9uVGFyZ2V0IhQKEkdldEVudGl0aWVzUmVxdWVzdCJUChNHZXRFbnRpdGllc1Jlc3BvbnNlEj0KEmVudGl0eV9kZWZpbml0aW9ucxgBIAMoCzIhLm9saXZldGluLmFwaS52MS5FbnRpdHlEZWZpbml0aW9uImkKEEVudGl0eURlZmluaXRpb24SDQoFdGl0bGUYASABKAkSKgoJaW5zdGFuY2VzGAIgAygLMhcub2xpdmV0aW4uYXBpLnYxLkVudGl0eRIaChJ1c2VkX29uX2Rhc2hib2FyZHMYAyADKAkiNAoQR2V0RW50aXR5UmVxdWVzdBISCgp1bmlxdWVfa2V5GAEgASgJEgwKBHR5cGUYAiABKAkiNQoUUmVzdGFydEFjdGlvblJlcXVlc3QSHQoVZXhlY3V0aW9uX3RyYWNraW5nX2lkGAEgASgJMtYTChJPbGl2ZVRpbkFwaVNlcnZpY2USXQoMR2V0RGFzaGJvYXJkEiQub2xpdmV0aW4uYXBpLnYxLkdldERhc2hib2FyZFJlcXVlc3QaJS5vbGl2ZXRpbi5hcGkudjEuR2V0RGFzaGJvYXJkUmVzcG9uc2UiABJaCgtTdGFydEFjdGlvbhIjLm9saXZldGluLmFwaS52MS5TdGFydEFjdGlvblJlcXVlc3QaJC5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25SZXNwb25zZSIAEm8KElN0YXJ0QWN0aW9uQW5kV2FpdBIqLm9saXZldGluLmFwaS52MS5TdGFydEFjdGlvbkFuZFdhaXRSZXF1ZXN0Gisub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uQW5kV2FpdFJlc3BvbnNlIgASaQoQU3RhcnRBY3Rpb25CeUdldBIoLm9saXZldGluLmFwaS52MS5TdGFydEFjdGlvbkJ5R2V0UmVxdWVzdBopLm9saXZldGluLmFwaS52MS5TdGFydEFjdGlvbkJ5R2V0UmVzcG9uc2UiABJ+ChdTdGFydEFjdGlvbkJ5R2V0QW5kV2FpdBIvLm9saXZldGluLmFwaS52MS5TdGFydEFjdGlvbkJ5R2V0QW5kV2FpdFJlcXVlc3QaMC5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25CeUdldEFuZFdhaXRSZXNwb25zZSIAEl4KDVJlc3RhcnRBY3Rpb24SJS5vbGl2ZXRpbi5hcGkudjEuUmVzdGFydEFjdGlvblJlcXVlc3QaJC5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25SZXNwb25zZSIAElcKCktpbGxBY3Rpb24SIi5vbGl2ZXRpbi5hcGkudjEuS2lsbEFjdGlvblJlcXVlc3QaIy5vbGl2ZXRpbi5hcGkudjEuS2lsbEFjdGlvblJlc3BvbnNlIgASZgoPRXhlY3V0aW9uU3RhdHVzEicub2xpdmV0aW4uYXBpLnYxLkV4ZWN1dGlvblN0YXR1c1JlcXVlc3QaKC5vbGl2ZXRpbi5hcGkudjEuRXhlY3V0aW9uU3RhdHVzUmVzcG9uc2UiABJOCgdHZXRMb2dzEh8ub2xpdmV0aW4uYXBpLnYxLkdldExvZ3NSZXF1ZXN0GiAub2xpdmV0aW4uYXBpLnYxLkdldExvZ3NSZXNwb25zZSIAEmAKDUdldEFjdGlvbkxvZ3MSJS5vbGl2ZXRpbi5hcGkudjEuR2V0QWN0aW9uTG9nc1JlcXVlc3QaJi5vbGl2ZXRpbi5hcGkudjEuR2V0QWN0aW9uTG9nc1Jlc3BvbnNlIgASbAoRR2V0RXhlY3V0aW9uUXVldWUSKS5vbGl2ZXRpbi5hcGkudjEuR2V0RXhlY3V0aW9uUXVldWVSZXF1ZXN0Gioub2xpdmV0aW4uYXBpLnYxLkdldEV4ZWN1dGlvblF1ZXVlUmVzcG9uc2UiABJ1ChRWYWxpZGF0ZUFyZ3VtZW50VHlwZRIsLm9saXZldGluLmFwaS52MS5WYWxpZGF0ZUFyZ3VtZW50VHlwZVJlcXVlc3QaLS5vbGl2ZXRpbi5hcGkudjEuVmFsaWRhdGVBcmd1bWVudFR5cGVSZXNwb25zZSIAEksKBldob0FtSRIeLm9saXZldGluLmFwaS52MS5XaG9BbUlSZXF1ZXN0Gh8ub2xpdmV0aW4uYXBpLnYxLldob0FtSVJlc3BvbnNlIgASVAoJU29zUmVwb3J0EiEub2xpdmV0aW4uYXBpLnYxLlNvc1JlcG9ydFJlcXVlc3QaIi5vbGl2ZXRpbi5hcGkudjEuU29zUmVwb3J0UmVzcG9uc2UiABJRCghEdW1wVmFycxIgLm9saXZldGluLmFwaS52MS5EdW1wVmFyc1JlcXVlc3QaIS5vbGl2ZXRpbi5hcGkudjEuRHVtcFZhcnNSZXNwb25zZSIAEngKFUR1bXBQdWJsaWNJZEFjdGlvbk1hcBItLm9saXZldGluLmFwaS52MS5EdW1wUHVibGljSWRBY3Rpb25NYXBSZXF1ZXN0Gi4ub2xpdmV0aW4uYXBpLnYxLkR1bXBQdWJsaWNJZEFjdGlvbk1hcFJlc3BvbnNlIgASVAoJR2V0UmVhZHl6EiEub2xpdmV0aW4uYXBpLnYxLkdldFJlYWR5elJlcXVlc3QaIi5vbGl2ZXRpbi5hcGkudjEuR2V0UmVhZHl6UmVzcG9uc2UiABJjCg5Mb2NhbFVzZXJMb2dpbhImLm9saXZldGluLmFwaS52MS5Mb2NhbFVzZXJMb2dpblJlcXVlc3QaJy5vbGl2ZXRpbi5hcGkudjEuTG9jYWxVc2VyTG9naW5SZXNwb25zZSIAEl0KDFBhc3N3b3JkSGFzaBIkLm9saXZldGluLmFwaS52MS5QYXNzd29yZEhhc2hSZXF1ZXN0GiUub2xpdmV0aW4uYXBpLnYxLlBhc3N3b3JkSGFzaFJlc3BvbnNlIgASSwoGTG9nb3V0Eh4ub2xpdmV0aW4uYXBpLnYxLkxvZ291dFJlcXVlc3QaHy5vbGl2ZXRpbi5hcGkudjEuTG9nb3V0UmVzcG9uc2UiABJcCgtFdmVudFN0cmVhbRIjLm9saXZldGluLmFwaS52MS5FdmVudFN0cmVhbVJlcXVlc3QaJC5vbGl2ZXRpbi5hcGkudjEuRXZlbnRTdHJlYW1SZXNwb25zZSIAMAESYwoOR2V0RGlhZ25vc3RpY3MSJi5vbGl2ZXRpbi5hcGkudjEuR2V0RGlhZ25vc3RpY3NSZXF1ZXN0Gicub2xpdmV0aW4uYXBpLnYxLkdldERpYWdub3N0aWNzUmVzcG9uc2UiABJFCgRJbml0Ehwub2xpdmV0aW4uYXBpLnYxLkluaXRSZXF1ZXN0Gh0ub2xpdmV0aW4uYXBpLnYxLkluaXRSZXNwb25zZSIAEmkKEEdldEFjdGlvbkJpbmRpbmcSKC5vbGl2ZXRpbi5hcGkudjEuR2V0QWN0aW9uQmluZGluZ1JlcXVlc3QaKS5vbGl2ZXRpbi5hcGkudjEuR2V0QWN0aW9uQmluZGluZ1Jlc3BvbnNlIgASWgoLR2V0RW50aXRpZXMSIy5vbGl2ZXRpbi5hcGkudjEuR2V0RW50aXRpZXNSZXF1ZXN0GiQub2xpdmV0aW4uYXBpLnYxLkdldEVudGl0aWVzUmVzcG9uc2UiABJJCglHZXRFbnRpdHkSIS5vbGl2ZXRpbi5hcGkudjEuR2V0RW50aXR5UmVxdWVzdBoXLm9saXZldGluLmFwaS52MS5FbnRpdHkiAEI4WjZnaXRodWIuY29tL09saXZlVGluL09saXZlVGluL2dlbi9vbGl2ZXRpbi9hcGkvdjE7YXBpdjFiBnByb3RvMw"); + fileDesc("Ch5vbGl2ZXRpbi9hcGkvdjEvb2xpdmV0aW4ucHJvdG8SD29saXZldGluLmFwaS52MSLABAoGQWN0aW9uEhIKCmJpbmRpbmdfaWQYASABKAkSDQoFdGl0bGUYAiABKAkSDAoEaWNvbhgDIAEoCRIQCghjYW5fZXhlYxgEIAEoCBIyCglhcmd1bWVudHMYBSADKAsyHy5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uQXJndW1lbnQSFgoOcG9wdXBfb25fc3RhcnQYBiABKAkSDQoFb3JkZXIYByABKAUSDwoHdGltZW91dBgIIAEoBRIjChtkYXRldGltZV9yYXRlX2xpbWl0X2V4cGlyZXMYCSABKAkSFwoPZXhlY19vbl9zdGFydHVwGAogASgIEhQKDGV4ZWNfb25fY3JvbhgLIAMoCRIjChtleGVjX29uX2ZpbGVfY3JlYXRlZF9pbl9kaXIYDCADKAkSIwobZXhlY19vbl9maWxlX2NoYW5nZWRfaW5fZGlyGA0gAygJEh0KFWV4ZWNfb25fY2FsZW5kYXJfZmlsZRgOIAEoCRJAChBleGVjX29uX3dlYmhvb2tzGA8gAygLMiYub2xpdmV0aW4uYXBpLnYxLkFjdGlvbldlYmhvb2tFeGVjSGludBIVCg1qdXN0aWZpY2F0aW9uGBAgASgJEhwKFGhhc19ydW5uaW5nX2luc3RhbmNlGBEgASgIEhsKE2hhc19xdWV1ZWRfaW5zdGFuY2UYEiABKAgSNgoGZ3JvdXBzGBMgAygLMiYub2xpdmV0aW4uYXBpLnYxLkFjdGlvbkdyb3VwTWVtYmVyc2hpcCJRChVBY3Rpb25Hcm91cE1lbWJlcnNoaXASDAoEbmFtZRgBIAEoCRIWCg5tYXhfY29uY3VycmVudBgCIAEoBRISCgpxdWV1ZV9zaXplGAMgASgFIsMCChVBY3Rpb25XZWJob29rRXhlY0hpbnQSEAoIdGVtcGxhdGUYASABKAkSEgoKbWF0Y2hfcGF0aBgCIAEoCRJPCg1tYXRjaF9oZWFkZXJzGAMgAygLMjgub2xpdmV0aW4uYXBpLnYxLkFjdGlvbldlYmhvb2tFeGVjSGludC5NYXRjaEhlYWRlcnNFbnRyeRJLCgttYXRjaF9xdWVyeRgEIAMoCzI2Lm9saXZldGluLmFwaS52MS5BY3Rpb25XZWJob29rRXhlY0hpbnQuTWF0Y2hRdWVyeUVudHJ5GjMKEU1hdGNoSGVhZGVyc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaMQoPTWF0Y2hRdWVyeUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiuwIKDkFjdGlvbkFyZ3VtZW50EgwKBG5hbWUYASABKAkSDQoFdGl0bGUYAiABKAkSDAoEdHlwZRgDIAEoCRIVCg1kZWZhdWx0X3ZhbHVlGAQgASgJEjYKB2Nob2ljZXMYBSADKAsyJS5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uQXJndW1lbnRDaG9pY2USEwoLZGVzY3JpcHRpb24YBiABKAkSRQoLc3VnZ2VzdGlvbnMYByADKAsyMC5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uQXJndW1lbnQuU3VnZ2VzdGlvbnNFbnRyeRIfChdzdWdnZXN0aW9uc19icm93c2VyX2tleRgIIAEoCRoyChBTdWdnZXN0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiNAoUQWN0aW9uQXJndW1lbnRDaG9pY2USDQoFdmFsdWUYASABKAkSDQoFdGl0bGUYAiABKAki1AEKE0VudGl0eVJlbGF0ZWRBY3Rpb24SJwoGYWN0aW9uGAEgASgLMhcub2xpdmV0aW4uYXBpLnYxLkFjdGlvbhJZChNwcmVmaWxsZWRfYXJndW1lbnRzGAIgAygLMjwub2xpdmV0aW4uYXBpLnYxLkVudGl0eVJlbGF0ZWRBY3Rpb24uUHJlZmlsbGVkQXJndW1lbnRzRW50cnkaOQoXUHJlZmlsbGVkQXJndW1lbnRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASL/AQoGRW50aXR5Eg0KBXRpdGxlGAEgASgJEhIKCnVuaXF1ZV9rZXkYAiABKAkSDAoEdHlwZRgDIAEoCRITCgtkaXJlY3RvcmllcxgEIAMoCRIzCgZmaWVsZHMYBSADKAsyIy5vbGl2ZXRpbi5hcGkudjEuRW50aXR5LkZpZWxkc0VudHJ5Ej0KD3JlbGF0ZWRfYWN0aW9ucxgGIAMoCzIkLm9saXZldGluLmFwaS52MS5FbnRpdHlSZWxhdGVkQWN0aW9uEgwKBGljb24YByABKAkaLQoLRmllbGRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJUChRHZXREYXNoYm9hcmRSZXNwb25zZRINCgV0aXRsZRgBIAEoCRItCglkYXNoYm9hcmQYBCABKAsyGi5vbGl2ZXRpbi5hcGkudjEuRGFzaGJvYXJkIl8KD0VmZmVjdGl2ZVBvbGljeRIYChBzaG93X2RpYWdub3N0aWNzGAEgASgIEhUKDXNob3dfbG9nX2xpc3QYAiABKAgSGwoTc2hvd192ZXJzaW9uX251bWJlchgDIAEoCCJNChNHZXREYXNoYm9hcmRSZXF1ZXN0Eg0KBXRpdGxlGAEgASgJEhMKC2VudGl0eV90eXBlGAIgASgJEhIKCmVudGl0eV9rZXkYAyABKAkiUQoJRGFzaGJvYXJkEg0KBXRpdGxlGAEgASgJEjUKCGNvbnRlbnRzGAIgAygLMiMub2xpdmV0aW4uYXBpLnYxLkRhc2hib2FyZENvbXBvbmVudCLbAQoSRGFzaGJvYXJkQ29tcG9uZW50Eg0KBXRpdGxlGAEgASgJEgwKBHR5cGUYAiABKAkSNQoIY29udGVudHMYAyADKAsyIy5vbGl2ZXRpbi5hcGkudjEuRGFzaGJvYXJkQ29tcG9uZW50EgwKBGljb24YBCABKAkSEQoJY3NzX2NsYXNzGAUgASgJEicKBmFjdGlvbhgGIAEoCzIXLm9saXZldGluLmFwaS52MS5BY3Rpb24SEwoLZW50aXR5X3R5cGUYByABKAkSEgoKZW50aXR5X2tleRgIIAEoCSKUAQoSU3RhcnRBY3Rpb25SZXF1ZXN0EhIKCmJpbmRpbmdfaWQYASABKAkSNwoJYXJndW1lbnRzGAIgAygLMiQub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uQXJndW1lbnQSGgoSdW5pcXVlX3RyYWNraW5nX2lkGAMgASgJEhUKDWp1c3RpZmljYXRpb24YBCABKAkiMgoTU3RhcnRBY3Rpb25Bcmd1bWVudBIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJIjQKE1N0YXJ0QWN0aW9uUmVzcG9uc2USHQoVZXhlY3V0aW9uX3RyYWNraW5nX2lkGAIgASgJIn4KGVN0YXJ0QWN0aW9uQW5kV2FpdFJlcXVlc3QSEQoJYWN0aW9uX2lkGAEgASgJEjcKCWFyZ3VtZW50cxgCIAMoCzIkLm9saXZldGluLmFwaS52MS5TdGFydEFjdGlvbkFyZ3VtZW50EhUKDWp1c3RpZmljYXRpb24YAyABKAkiSgoaU3RhcnRBY3Rpb25BbmRXYWl0UmVzcG9uc2USLAoJbG9nX2VudHJ5GAEgASgLMhkub2xpdmV0aW4uYXBpLnYxLkxvZ0VudHJ5IiwKF1N0YXJ0QWN0aW9uQnlHZXRSZXF1ZXN0EhEKCWFjdGlvbl9pZBgBIAEoCSI5ChhTdGFydEFjdGlvbkJ5R2V0UmVzcG9uc2USHQoVZXhlY3V0aW9uX3RyYWNraW5nX2lkGAIgASgJIjMKHlN0YXJ0QWN0aW9uQnlHZXRBbmRXYWl0UmVxdWVzdBIRCglhY3Rpb25faWQYASABKAkiTwofU3RhcnRBY3Rpb25CeUdldEFuZFdhaXRSZXNwb25zZRIsCglsb2dfZW50cnkYASABKAsyGS5vbGl2ZXRpbi5hcGkudjEuTG9nRW50cnkiXgoOR2V0TG9nc1JlcXVlc3QSFAoMc3RhcnRfb2Zmc2V0GAEgASgDEhMKC2RhdGVfZmlsdGVyGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoAxIOCgZmaWx0ZXIYBCABKAkilAQKCExvZ0VudHJ5EhgKEGRhdGV0aW1lX3N0YXJ0ZWQYASABKAkSFAoMYWN0aW9uX3RpdGxlGAIgASgJEg4KBm91dHB1dBgDIAEoCRIRCgl0aW1lZF9vdXQYBSABKAgSEQoJZXhpdF9jb2RlGAYgASgFEgwKBHVzZXIYByABKAkSEgoKdXNlcl9jbGFzcxgIIAEoCRITCgthY3Rpb25faWNvbhgJIAEoCRIMCgR0YWdzGAogAygJEh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgLIAEoCRIZChFkYXRldGltZV9maW5pc2hlZBgMIAEoCRIZChFleGVjdXRpb25fc3RhcnRlZBgOIAEoCBIaChJleGVjdXRpb25fZmluaXNoZWQYDyABKAgSDwoHYmxvY2tlZBgQIAEoCBIWCg5kYXRldGltZV9pbmRleBgRIAEoAxIQCghjYW5fa2lsbBgSIAEoCBIjChtkYXRldGltZV9yYXRlX2xpbWl0X2V4cGlyZXMYEyABKAkSEgoKYmluZGluZ19pZBgUIAEoCRIOCgZxdWV1ZWQYFSABKAgSGAoQcXVldWVkX2Zvcl9ncm91cBgWIAEoCRIVCg1qdXN0aWZpY2F0aW9uGBcgASgJEjcKCWFyZ3VtZW50cxgYIAMoCzIkLm9saXZldGluLmFwaS52MS5TdGFydEFjdGlvbkFyZ3VtZW50IpEBCg9HZXRMb2dzUmVzcG9uc2USJwoEbG9ncxgBIAMoCzIZLm9saXZldGluLmFwaS52MS5Mb2dFbnRyeRIXCg9jb3VudF9yZW1haW5pbmcYAiABKAMSEQoJcGFnZV9zaXplGAMgASgDEhMKC3RvdGFsX2NvdW50GAQgASgDEhQKDHN0YXJ0X29mZnNldBgFIAEoAyI/ChRHZXRBY3Rpb25Mb2dzUmVxdWVzdBIRCglhY3Rpb25faWQYASABKAkSFAoMc3RhcnRfb2Zmc2V0GAIgASgDIpcBChVHZXRBY3Rpb25Mb2dzUmVzcG9uc2USJwoEbG9ncxgBIAMoCzIZLm9saXZldGluLmFwaS52MS5Mb2dFbnRyeRIXCg9jb3VudF9yZW1haW5pbmcYAiABKAMSEQoJcGFnZV9zaXplGAMgASgDEhMKC3RvdGFsX2NvdW50GAQgASgDEhQKDHN0YXJ0X29mZnNldBgFIAEoAyIaChhHZXRFeGVjdXRpb25RdWV1ZVJlcXVlc3QixgEKFEV4ZWN1dGlvblF1ZXVlQWN0aW9uEhIKCmJpbmRpbmdfaWQYASABKAkSFAoMYWN0aW9uX3RpdGxlGAIgASgJEhMKC2FjdGlvbl9pY29uGAMgASgJEhYKDm1heF9jb25jdXJyZW50GAQgASgFEhQKDGFjdGl2ZV9jb3VudBgFIAEoBRIVCg1lbnRpdHlfcHJlZml4GAYgASgJEioKB2VudHJpZXMYByADKAsyGS5vbGl2ZXRpbi5hcGkudjEuTG9nRW50cnkiwQEKE0V4ZWN1dGlvblF1ZXVlR3JvdXASDAoEbmFtZRgBIAEoCRIMCgRpY29uGAIgASgJEhYKDm1heF9jb25jdXJyZW50GAMgASgFEhQKDGFjdGl2ZV9jb3VudBgEIAEoBRI2CgdhY3Rpb25zGAUgAygLMiUub2xpdmV0aW4uYXBpLnYxLkV4ZWN1dGlvblF1ZXVlQWN0aW9uEhQKDHF1ZXVlZF9jb3VudBgGIAEoBRISCgpxdWV1ZV9zaXplGAcgASgFImcKGUdldEV4ZWN1dGlvblF1ZXVlUmVzcG9uc2USNAoGZ3JvdXBzGAEgAygLMiQub2xpdmV0aW4uYXBpLnYxLkV4ZWN1dGlvblF1ZXVlR3JvdXASFAoMdG90YWxfYWN0aXZlGAIgASgFImUKG1ZhbGlkYXRlQXJndW1lbnRUeXBlUmVxdWVzdBINCgV2YWx1ZRgBIAEoCRIMCgR0eXBlGAIgASgJEhIKCmJpbmRpbmdfaWQYAyABKAkSFQoNYXJndW1lbnRfbmFtZRgEIAEoCSJCChxWYWxpZGF0ZUFyZ3VtZW50VHlwZVJlc3BvbnNlEg0KBXZhbGlkGAEgASgIEhMKC2Rlc2NyaXB0aW9uGAIgASgJIjYKFVdhdGNoRXhlY3V0aW9uUmVxdWVzdBIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYASABKAkiJgoUV2F0Y2hFeGVjdXRpb25VcGRhdGUSDgoGdXBkYXRlGAEgASgJIkoKFkV4ZWN1dGlvblN0YXR1c1JlcXVlc3QSHQoVZXhlY3V0aW9uX3RyYWNraW5nX2lkGAEgASgJEhEKCWFjdGlvbl9pZBgCIAEoCSJhChlEYXNoYm9hcmROYXZpZ2F0aW9uVGFyZ2V0Eg0KBXRpdGxlGAEgASgJEhMKC2VudGl0eV90eXBlGAIgASgJEhIKCmVudGl0eV9rZXkYAyABKAkSDAoEcGF0aBgEIAEoCSKPAQoXRXhlY3V0aW9uU3RhdHVzUmVzcG9uc2USLAoJbG9nX2VudHJ5GAEgASgLMhkub2xpdmV0aW4uYXBpLnYxLkxvZ0VudHJ5EkYKEmJhY2tfdG9fZGFzaGJvYXJkcxgCIAMoCzIqLm9saXZldGluLmFwaS52MS5EYXNoYm9hcmROYXZpZ2F0aW9uVGFyZ2V0Ig8KDVdob0FtSVJlcXVlc3QibAoOV2hvQW1JUmVzcG9uc2USGgoSYXV0aGVudGljYXRlZF91c2VyGAEgASgJEhEKCXVzZXJncm91cBgCIAEoCRIQCghwcm92aWRlchgDIAEoCRIMCgRhY2xzGAQgAygJEgsKA3NpZBgFIAEoCSISChBTb3NSZXBvcnRSZXF1ZXN0IiIKEVNvc1JlcG9ydFJlc3BvbnNlEg0KBWFsZXJ0GAEgASgJIhEKD0R1bXBWYXJzUmVxdWVzdCKVAQoQRHVtcFZhcnNSZXNwb25zZRINCgVhbGVydBgBIAEoCRJBCghjb250ZW50cxgCIAMoCzIvLm9saXZldGluLmFwaS52MS5EdW1wVmFyc1Jlc3BvbnNlLkNvbnRlbnRzRW50cnkaLwoNQ29udGVudHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIjsKDERlYnVnQmluZGluZxIUCgxhY3Rpb25fdGl0bGUYASABKAkSFQoNZW50aXR5X3ByZWZpeBgCIAEoCSIeChxEdW1wUHVibGljSWRBY3Rpb25NYXBSZXF1ZXN0Is4BCh1EdW1wUHVibGljSWRBY3Rpb25NYXBSZXNwb25zZRINCgVhbGVydBgBIAEoCRJOCghjb250ZW50cxgCIAMoCzI8Lm9saXZldGluLmFwaS52MS5EdW1wUHVibGljSWRBY3Rpb25NYXBSZXNwb25zZS5Db250ZW50c0VudHJ5Gk4KDUNvbnRlbnRzRW50cnkSCwoDa2V5GAEgASgJEiwKBXZhbHVlGAIgASgLMh0ub2xpdmV0aW4uYXBpLnYxLkRlYnVnQmluZGluZzoCOAEiEgoQR2V0UmVhZHl6UmVxdWVzdCIjChFHZXRSZWFkeXpSZXNwb25zZRIOCgZzdGF0dXMYASABKAkiFAoSRXZlbnRTdHJlYW1SZXF1ZXN0IpkDChNFdmVudFN0cmVhbVJlc3BvbnNlEj0KDmVudGl0eV9jaGFuZ2VkGAIgASgLMiMub2xpdmV0aW4uYXBpLnYxLkV2ZW50RW50aXR5Q2hhbmdlZEgAEj0KDmNvbmZpZ19jaGFuZ2VkGAMgASgLMiMub2xpdmV0aW4uYXBpLnYxLkV2ZW50Q29uZmlnQ2hhbmdlZEgAEkUKEmV4ZWN1dGlvbl9maW5pc2hlZBgEIAEoCzInLm9saXZldGluLmFwaS52MS5FdmVudEV4ZWN1dGlvbkZpbmlzaGVkSAASQwoRZXhlY3V0aW9uX3N0YXJ0ZWQYBSABKAsyJi5vbGl2ZXRpbi5hcGkudjEuRXZlbnRFeGVjdXRpb25TdGFydGVkSAASOQoMb3V0cHV0X2NodW5rGAYgASgLMiEub2xpdmV0aW4uYXBpLnYxLkV2ZW50T3V0cHV0Q2h1bmtIABI0CgloZWFydGJlYXQYByABKAsyHy5vbGl2ZXRpbi5hcGkudjEuRXZlbnRIZWFydGJlYXRIAEIHCgVldmVudCJBChBFdmVudE91dHB1dENodW5rEh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgBIAEoCRIOCgZvdXRwdXQYAiABKAkiFAoSRXZlbnRFbnRpdHlDaGFuZ2VkIhQKEkV2ZW50Q29uZmlnQ2hhbmdlZCIQCg5FdmVudEhlYXJ0YmVhdCJGChZFdmVudEV4ZWN1dGlvbkZpbmlzaGVkEiwKCWxvZ19lbnRyeRgBIAEoCzIZLm9saXZldGluLmFwaS52MS5Mb2dFbnRyeSJFChVFdmVudEV4ZWN1dGlvblN0YXJ0ZWQSLAoJbG9nX2VudHJ5GAEgASgLMhkub2xpdmV0aW4uYXBpLnYxLkxvZ0VudHJ5IjIKEUtpbGxBY3Rpb25SZXF1ZXN0Eh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgBIAEoCSJtChJLaWxsQWN0aW9uUmVzcG9uc2USHQoVZXhlY3V0aW9uX3RyYWNraW5nX2lkGAEgASgJEg4KBmtpbGxlZBgCIAEoCBIZChFhbHJlYWR5X2NvbXBsZXRlZBgDIAEoCBINCgVmb3VuZBgEIAEoCCI7ChVMb2NhbFVzZXJMb2dpblJlcXVlc3QSEAoIdXNlcm5hbWUYASABKAkSEAoIcGFzc3dvcmQYAiABKAkiKQoWTG9jYWxVc2VyTG9naW5SZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIicKE1Bhc3N3b3JkSGFzaFJlcXVlc3QSEAoIcGFzc3dvcmQYASABKAkiJAoUUGFzc3dvcmRIYXNoUmVzcG9uc2USDAoEaGFzaBgBIAEoCSIPCg1Mb2dvdXRSZXF1ZXN0IhAKDkxvZ291dFJlc3BvbnNlIhcKFUdldERpYWdub3N0aWNzUmVxdWVzdCJFChZHZXREaWFnbm9zdGljc1Jlc3BvbnNlEhMKC1NzaEZvdW5kS2V5GAEgASgJEhYKDlNzaEZvdW5kQ29uZmlnGAIgASgJIg0KC0luaXRSZXF1ZXN0IusFCgxJbml0UmVzcG9uc2USEgoKc2hvd0Zvb3RlchgBIAEoCBIWCg5zaG93TmF2aWdhdGlvbhgCIAEoCBIXCg9zaG93TmV3VmVyc2lvbnMYAyABKAgSGAoQYXZhaWxhYmxlVmVyc2lvbhgEIAEoCRIWCg5jdXJyZW50VmVyc2lvbhgFIAEoCRIRCglwYWdlVGl0bGUYBiABKAkSHgoWc2VjdGlvbk5hdmlnYXRpb25TdHlsZRgHIAEoCRIaChJkZWZhdWx0SWNvbkZvckJhY2sYCCABKAkSFgoOZW5hYmxlQ3VzdG9tSnMYCSABKAgSFAoMYXV0aExvZ2luVXJsGAogASgJEhYKDmF1dGhMb2NhbExvZ2luGAsgASgIEhEKCXN0eWxlTW9kcxgMIAMoCRI4Cg9vQXV0aDJQcm92aWRlcnMYDSADKAsyHy5vbGl2ZXRpbi5hcGkudjEuT0F1dGgyUHJvdmlkZXISOAoPYWRkaXRpb25hbExpbmtzGA4gAygLMh8ub2xpdmV0aW4uYXBpLnYxLkFkZGl0aW9uYWxMaW5rEhYKDnJvb3REYXNoYm9hcmRzGA8gAygJEhoKEmF1dGhlbnRpY2F0ZWRfdXNlchgQIAEoCRIjChthdXRoZW50aWNhdGVkX3VzZXJfcHJvdmlkZXIYESABKAkSOgoQZWZmZWN0aXZlX3BvbGljeRgSIAEoCzIgLm9saXZldGluLmFwaS52MS5FZmZlY3RpdmVQb2xpY3kSFgoOYmFubmVyX21lc3NhZ2UYEyABKAkSEgoKYmFubmVyX2NzcxgUIAEoCRIYChBzaG93X2RpYWdub3N0aWNzGBUgASgIEhUKDXNob3dfbG9nX2xpc3QYFiABKAgSFgoObG9naW5fcmVxdWlyZWQYFyABKAgSGAoQYXZhaWxhYmxlX3RoZW1lcxgYIAMoCRIkChxzaG93X25hdmlnYXRlX29uX3N0YXJ0X2ljb25zGBkgASgIIiwKDkFkZGl0aW9uYWxMaW5rEg0KBXRpdGxlGAEgASgJEgsKA3VybBgCIAEoCSI6Cg5PQXV0aDJQcm92aWRlchINCgV0aXRsZRgBIAEoCRIMCgRpY29uGAMgASgJEgsKA2tleRgEIAEoCSItChdHZXRBY3Rpb25CaW5kaW5nUmVxdWVzdBISCgpiaW5kaW5nX2lkGAEgASgJIosBChhHZXRBY3Rpb25CaW5kaW5nUmVzcG9uc2USJwoGYWN0aW9uGAEgASgLMhcub2xpdmV0aW4uYXBpLnYxLkFjdGlvbhJGChJiYWNrX3RvX2Rhc2hib2FyZHMYAiADKAsyKi5vbGl2ZXRpbi5hcGkudjEuRGFzaGJvYXJkTmF2aWdhdGlvblRhcmdldCJaChJHZXRFbnRpdGllc1JlcXVlc3QSEwoLZW50aXR5X3R5cGUYASABKAkSDgoGZmlsdGVyGAIgASgJEgwKBHBhZ2UYAyABKAUSEQoJcGFnZV9zaXplGAQgASgFIlQKE0dldEVudGl0aWVzUmVzcG9uc2USPQoSZW50aXR5X2RlZmluaXRpb25zGAEgAygLMiEub2xpdmV0aW4uYXBpLnYxLkVudGl0eURlZmluaXRpb24ixQEKEEVudGl0eURlZmluaXRpb24SDQoFdGl0bGUYASABKAkSKgoJaW5zdGFuY2VzGAIgAygLMhcub2xpdmV0aW4uYXBpLnYxLkVudGl0eRIaChJ1c2VkX29uX2Rhc2hib2FyZHMYAyADKAkSDAoEaWNvbhgEIAEoCRIzCgpwcm9wZXJ0aWVzGAUgAygLMh8ub2xpdmV0aW4uYXBpLnYxLkVudGl0eVByb3BlcnR5EhcKD3RvdGFsX2luc3RhbmNlcxgGIAEoBSItCg5FbnRpdHlQcm9wZXJ0eRIMCgRuYW1lGAEgASgJEg0KBXRpdGxlGAIgASgJIjQKEEdldEVudGl0eVJlcXVlc3QSEgoKdW5pcXVlX2tleRgBIAEoCRIMCgR0eXBlGAIgASgJIjUKFFJlc3RhcnRBY3Rpb25SZXF1ZXN0Eh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgBIAEoCTLWEwoST2xpdmVUaW5BcGlTZXJ2aWNlEl0KDEdldERhc2hib2FyZBIkLm9saXZldGluLmFwaS52MS5HZXREYXNoYm9hcmRSZXF1ZXN0GiUub2xpdmV0aW4uYXBpLnYxLkdldERhc2hib2FyZFJlc3BvbnNlIgASWgoLU3RhcnRBY3Rpb24SIy5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25SZXF1ZXN0GiQub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uUmVzcG9uc2UiABJvChJTdGFydEFjdGlvbkFuZFdhaXQSKi5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25BbmRXYWl0UmVxdWVzdBorLm9saXZldGluLmFwaS52MS5TdGFydEFjdGlvbkFuZFdhaXRSZXNwb25zZSIAEmkKEFN0YXJ0QWN0aW9uQnlHZXQSKC5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25CeUdldFJlcXVlc3QaKS5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25CeUdldFJlc3BvbnNlIgASfgoXU3RhcnRBY3Rpb25CeUdldEFuZFdhaXQSLy5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25CeUdldEFuZFdhaXRSZXF1ZXN0GjAub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uQnlHZXRBbmRXYWl0UmVzcG9uc2UiABJeCg1SZXN0YXJ0QWN0aW9uEiUub2xpdmV0aW4uYXBpLnYxLlJlc3RhcnRBY3Rpb25SZXF1ZXN0GiQub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uUmVzcG9uc2UiABJXCgpLaWxsQWN0aW9uEiIub2xpdmV0aW4uYXBpLnYxLktpbGxBY3Rpb25SZXF1ZXN0GiMub2xpdmV0aW4uYXBpLnYxLktpbGxBY3Rpb25SZXNwb25zZSIAEmYKD0V4ZWN1dGlvblN0YXR1cxInLm9saXZldGluLmFwaS52MS5FeGVjdXRpb25TdGF0dXNSZXF1ZXN0Gigub2xpdmV0aW4uYXBpLnYxLkV4ZWN1dGlvblN0YXR1c1Jlc3BvbnNlIgASTgoHR2V0TG9ncxIfLm9saXZldGluLmFwaS52MS5HZXRMb2dzUmVxdWVzdBogLm9saXZldGluLmFwaS52MS5HZXRMb2dzUmVzcG9uc2UiABJgCg1HZXRBY3Rpb25Mb2dzEiUub2xpdmV0aW4uYXBpLnYxLkdldEFjdGlvbkxvZ3NSZXF1ZXN0GiYub2xpdmV0aW4uYXBpLnYxLkdldEFjdGlvbkxvZ3NSZXNwb25zZSIAEmwKEUdldEV4ZWN1dGlvblF1ZXVlEikub2xpdmV0aW4uYXBpLnYxLkdldEV4ZWN1dGlvblF1ZXVlUmVxdWVzdBoqLm9saXZldGluLmFwaS52MS5HZXRFeGVjdXRpb25RdWV1ZVJlc3BvbnNlIgASdQoUVmFsaWRhdGVBcmd1bWVudFR5cGUSLC5vbGl2ZXRpbi5hcGkudjEuVmFsaWRhdGVBcmd1bWVudFR5cGVSZXF1ZXN0Gi0ub2xpdmV0aW4uYXBpLnYxLlZhbGlkYXRlQXJndW1lbnRUeXBlUmVzcG9uc2UiABJLCgZXaG9BbUkSHi5vbGl2ZXRpbi5hcGkudjEuV2hvQW1JUmVxdWVzdBofLm9saXZldGluLmFwaS52MS5XaG9BbUlSZXNwb25zZSIAElQKCVNvc1JlcG9ydBIhLm9saXZldGluLmFwaS52MS5Tb3NSZXBvcnRSZXF1ZXN0GiIub2xpdmV0aW4uYXBpLnYxLlNvc1JlcG9ydFJlc3BvbnNlIgASUQoIRHVtcFZhcnMSIC5vbGl2ZXRpbi5hcGkudjEuRHVtcFZhcnNSZXF1ZXN0GiEub2xpdmV0aW4uYXBpLnYxLkR1bXBWYXJzUmVzcG9uc2UiABJ4ChVEdW1wUHVibGljSWRBY3Rpb25NYXASLS5vbGl2ZXRpbi5hcGkudjEuRHVtcFB1YmxpY0lkQWN0aW9uTWFwUmVxdWVzdBouLm9saXZldGluLmFwaS52MS5EdW1wUHVibGljSWRBY3Rpb25NYXBSZXNwb25zZSIAElQKCUdldFJlYWR5ehIhLm9saXZldGluLmFwaS52MS5HZXRSZWFkeXpSZXF1ZXN0GiIub2xpdmV0aW4uYXBpLnYxLkdldFJlYWR5elJlc3BvbnNlIgASYwoOTG9jYWxVc2VyTG9naW4SJi5vbGl2ZXRpbi5hcGkudjEuTG9jYWxVc2VyTG9naW5SZXF1ZXN0Gicub2xpdmV0aW4uYXBpLnYxLkxvY2FsVXNlckxvZ2luUmVzcG9uc2UiABJdCgxQYXNzd29yZEhhc2gSJC5vbGl2ZXRpbi5hcGkudjEuUGFzc3dvcmRIYXNoUmVxdWVzdBolLm9saXZldGluLmFwaS52MS5QYXNzd29yZEhhc2hSZXNwb25zZSIAEksKBkxvZ291dBIeLm9saXZldGluLmFwaS52MS5Mb2dvdXRSZXF1ZXN0Gh8ub2xpdmV0aW4uYXBpLnYxLkxvZ291dFJlc3BvbnNlIgASXAoLRXZlbnRTdHJlYW0SIy5vbGl2ZXRpbi5hcGkudjEuRXZlbnRTdHJlYW1SZXF1ZXN0GiQub2xpdmV0aW4uYXBpLnYxLkV2ZW50U3RyZWFtUmVzcG9uc2UiADABEmMKDkdldERpYWdub3N0aWNzEiYub2xpdmV0aW4uYXBpLnYxLkdldERpYWdub3N0aWNzUmVxdWVzdBonLm9saXZldGluLmFwaS52MS5HZXREaWFnbm9zdGljc1Jlc3BvbnNlIgASRQoESW5pdBIcLm9saXZldGluLmFwaS52MS5Jbml0UmVxdWVzdBodLm9saXZldGluLmFwaS52MS5Jbml0UmVzcG9uc2UiABJpChBHZXRBY3Rpb25CaW5kaW5nEigub2xpdmV0aW4uYXBpLnYxLkdldEFjdGlvbkJpbmRpbmdSZXF1ZXN0Gikub2xpdmV0aW4uYXBpLnYxLkdldEFjdGlvbkJpbmRpbmdSZXNwb25zZSIAEloKC0dldEVudGl0aWVzEiMub2xpdmV0aW4uYXBpLnYxLkdldEVudGl0aWVzUmVxdWVzdBokLm9saXZldGluLmFwaS52MS5HZXRFbnRpdGllc1Jlc3BvbnNlIgASSQoJR2V0RW50aXR5EiEub2xpdmV0aW4uYXBpLnYxLkdldEVudGl0eVJlcXVlc3QaFy5vbGl2ZXRpbi5hcGkudjEuRW50aXR5IgBCOFo2Z2l0aHViLmNvbS9PbGl2ZVRpbi9PbGl2ZVRpbi9nZW4vb2xpdmV0aW4vYXBpL3YxO2FwaXYxYgZwcm90bzM"); /** * Describes the message olivetin.api.v1.Action. @@ -45,502 +45,516 @@ export const ActionArgumentSchema = /*@__PURE__*/ export const ActionArgumentChoiceSchema = /*@__PURE__*/ messageDesc(file_olivetin_api_v1_olivetin, 4); +/** + * Describes the message olivetin.api.v1.EntityRelatedAction. + * Use `create(EntityRelatedActionSchema)` to create a new message. + */ +export const EntityRelatedActionSchema = /*@__PURE__*/ + messageDesc(file_olivetin_api_v1_olivetin, 5); + /** * Describes the message olivetin.api.v1.Entity. * Use `create(EntitySchema)` to create a new message. */ export const EntitySchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 5); + messageDesc(file_olivetin_api_v1_olivetin, 6); /** * Describes the message olivetin.api.v1.GetDashboardResponse. * Use `create(GetDashboardResponseSchema)` to create a new message. */ export const GetDashboardResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 6); + messageDesc(file_olivetin_api_v1_olivetin, 7); /** * Describes the message olivetin.api.v1.EffectivePolicy. * Use `create(EffectivePolicySchema)` to create a new message. */ export const EffectivePolicySchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 7); + messageDesc(file_olivetin_api_v1_olivetin, 8); /** * Describes the message olivetin.api.v1.GetDashboardRequest. * Use `create(GetDashboardRequestSchema)` to create a new message. */ export const GetDashboardRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 8); + messageDesc(file_olivetin_api_v1_olivetin, 9); /** * Describes the message olivetin.api.v1.Dashboard. * Use `create(DashboardSchema)` to create a new message. */ export const DashboardSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 9); + messageDesc(file_olivetin_api_v1_olivetin, 10); /** * Describes the message olivetin.api.v1.DashboardComponent. * Use `create(DashboardComponentSchema)` to create a new message. */ export const DashboardComponentSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 10); + messageDesc(file_olivetin_api_v1_olivetin, 11); /** * Describes the message olivetin.api.v1.StartActionRequest. * Use `create(StartActionRequestSchema)` to create a new message. */ export const StartActionRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 11); + messageDesc(file_olivetin_api_v1_olivetin, 12); /** * Describes the message olivetin.api.v1.StartActionArgument. * Use `create(StartActionArgumentSchema)` to create a new message. */ export const StartActionArgumentSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 12); + messageDesc(file_olivetin_api_v1_olivetin, 13); /** * Describes the message olivetin.api.v1.StartActionResponse. * Use `create(StartActionResponseSchema)` to create a new message. */ export const StartActionResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 13); + messageDesc(file_olivetin_api_v1_olivetin, 14); /** * Describes the message olivetin.api.v1.StartActionAndWaitRequest. * Use `create(StartActionAndWaitRequestSchema)` to create a new message. */ export const StartActionAndWaitRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 14); + messageDesc(file_olivetin_api_v1_olivetin, 15); /** * Describes the message olivetin.api.v1.StartActionAndWaitResponse. * Use `create(StartActionAndWaitResponseSchema)` to create a new message. */ export const StartActionAndWaitResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 15); + messageDesc(file_olivetin_api_v1_olivetin, 16); /** * Describes the message olivetin.api.v1.StartActionByGetRequest. * Use `create(StartActionByGetRequestSchema)` to create a new message. */ export const StartActionByGetRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 16); + messageDesc(file_olivetin_api_v1_olivetin, 17); /** * Describes the message olivetin.api.v1.StartActionByGetResponse. * Use `create(StartActionByGetResponseSchema)` to create a new message. */ export const StartActionByGetResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 17); + messageDesc(file_olivetin_api_v1_olivetin, 18); /** * Describes the message olivetin.api.v1.StartActionByGetAndWaitRequest. * Use `create(StartActionByGetAndWaitRequestSchema)` to create a new message. */ export const StartActionByGetAndWaitRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 18); + messageDesc(file_olivetin_api_v1_olivetin, 19); /** * Describes the message olivetin.api.v1.StartActionByGetAndWaitResponse. * Use `create(StartActionByGetAndWaitResponseSchema)` to create a new message. */ export const StartActionByGetAndWaitResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 19); + messageDesc(file_olivetin_api_v1_olivetin, 20); /** * Describes the message olivetin.api.v1.GetLogsRequest. * Use `create(GetLogsRequestSchema)` to create a new message. */ export const GetLogsRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 20); + messageDesc(file_olivetin_api_v1_olivetin, 21); /** * Describes the message olivetin.api.v1.LogEntry. * Use `create(LogEntrySchema)` to create a new message. */ export const LogEntrySchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 21); + messageDesc(file_olivetin_api_v1_olivetin, 22); /** * Describes the message olivetin.api.v1.GetLogsResponse. * Use `create(GetLogsResponseSchema)` to create a new message. */ export const GetLogsResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 22); + messageDesc(file_olivetin_api_v1_olivetin, 23); /** * Describes the message olivetin.api.v1.GetActionLogsRequest. * Use `create(GetActionLogsRequestSchema)` to create a new message. */ export const GetActionLogsRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 23); + messageDesc(file_olivetin_api_v1_olivetin, 24); /** * Describes the message olivetin.api.v1.GetActionLogsResponse. * Use `create(GetActionLogsResponseSchema)` to create a new message. */ export const GetActionLogsResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 24); + messageDesc(file_olivetin_api_v1_olivetin, 25); /** * Describes the message olivetin.api.v1.GetExecutionQueueRequest. * Use `create(GetExecutionQueueRequestSchema)` to create a new message. */ export const GetExecutionQueueRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 25); + messageDesc(file_olivetin_api_v1_olivetin, 26); /** * Describes the message olivetin.api.v1.ExecutionQueueAction. * Use `create(ExecutionQueueActionSchema)` to create a new message. */ export const ExecutionQueueActionSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 26); + messageDesc(file_olivetin_api_v1_olivetin, 27); /** * Describes the message olivetin.api.v1.ExecutionQueueGroup. * Use `create(ExecutionQueueGroupSchema)` to create a new message. */ export const ExecutionQueueGroupSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 27); + messageDesc(file_olivetin_api_v1_olivetin, 28); /** * Describes the message olivetin.api.v1.GetExecutionQueueResponse. * Use `create(GetExecutionQueueResponseSchema)` to create a new message. */ export const GetExecutionQueueResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 28); + messageDesc(file_olivetin_api_v1_olivetin, 29); /** * Describes the message olivetin.api.v1.ValidateArgumentTypeRequest. * Use `create(ValidateArgumentTypeRequestSchema)` to create a new message. */ export const ValidateArgumentTypeRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 29); + messageDesc(file_olivetin_api_v1_olivetin, 30); /** * Describes the message olivetin.api.v1.ValidateArgumentTypeResponse. * Use `create(ValidateArgumentTypeResponseSchema)` to create a new message. */ export const ValidateArgumentTypeResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 30); + messageDesc(file_olivetin_api_v1_olivetin, 31); /** * Describes the message olivetin.api.v1.WatchExecutionRequest. * Use `create(WatchExecutionRequestSchema)` to create a new message. */ export const WatchExecutionRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 31); + messageDesc(file_olivetin_api_v1_olivetin, 32); /** * Describes the message olivetin.api.v1.WatchExecutionUpdate. * Use `create(WatchExecutionUpdateSchema)` to create a new message. */ export const WatchExecutionUpdateSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 32); + messageDesc(file_olivetin_api_v1_olivetin, 33); /** * Describes the message olivetin.api.v1.ExecutionStatusRequest. * Use `create(ExecutionStatusRequestSchema)` to create a new message. */ export const ExecutionStatusRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 33); + messageDesc(file_olivetin_api_v1_olivetin, 34); /** * Describes the message olivetin.api.v1.DashboardNavigationTarget. * Use `create(DashboardNavigationTargetSchema)` to create a new message. */ export const DashboardNavigationTargetSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 34); + messageDesc(file_olivetin_api_v1_olivetin, 35); /** * Describes the message olivetin.api.v1.ExecutionStatusResponse. * Use `create(ExecutionStatusResponseSchema)` to create a new message. */ export const ExecutionStatusResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 35); + messageDesc(file_olivetin_api_v1_olivetin, 36); /** * Describes the message olivetin.api.v1.WhoAmIRequest. * Use `create(WhoAmIRequestSchema)` to create a new message. */ export const WhoAmIRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 36); + messageDesc(file_olivetin_api_v1_olivetin, 37); /** * Describes the message olivetin.api.v1.WhoAmIResponse. * Use `create(WhoAmIResponseSchema)` to create a new message. */ export const WhoAmIResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 37); + messageDesc(file_olivetin_api_v1_olivetin, 38); /** * Describes the message olivetin.api.v1.SosReportRequest. * Use `create(SosReportRequestSchema)` to create a new message. */ export const SosReportRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 38); + messageDesc(file_olivetin_api_v1_olivetin, 39); /** * Describes the message olivetin.api.v1.SosReportResponse. * Use `create(SosReportResponseSchema)` to create a new message. */ export const SosReportResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 39); + messageDesc(file_olivetin_api_v1_olivetin, 40); /** * Describes the message olivetin.api.v1.DumpVarsRequest. * Use `create(DumpVarsRequestSchema)` to create a new message. */ export const DumpVarsRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 40); + messageDesc(file_olivetin_api_v1_olivetin, 41); /** * Describes the message olivetin.api.v1.DumpVarsResponse. * Use `create(DumpVarsResponseSchema)` to create a new message. */ export const DumpVarsResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 41); + messageDesc(file_olivetin_api_v1_olivetin, 42); /** * Describes the message olivetin.api.v1.DebugBinding. * Use `create(DebugBindingSchema)` to create a new message. */ export const DebugBindingSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 42); + messageDesc(file_olivetin_api_v1_olivetin, 43); /** * Describes the message olivetin.api.v1.DumpPublicIdActionMapRequest. * Use `create(DumpPublicIdActionMapRequestSchema)` to create a new message. */ export const DumpPublicIdActionMapRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 43); + messageDesc(file_olivetin_api_v1_olivetin, 44); /** * Describes the message olivetin.api.v1.DumpPublicIdActionMapResponse. * Use `create(DumpPublicIdActionMapResponseSchema)` to create a new message. */ export const DumpPublicIdActionMapResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 44); + messageDesc(file_olivetin_api_v1_olivetin, 45); /** * Describes the message olivetin.api.v1.GetReadyzRequest. * Use `create(GetReadyzRequestSchema)` to create a new message. */ export const GetReadyzRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 45); + messageDesc(file_olivetin_api_v1_olivetin, 46); /** * Describes the message olivetin.api.v1.GetReadyzResponse. * Use `create(GetReadyzResponseSchema)` to create a new message. */ export const GetReadyzResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 46); + messageDesc(file_olivetin_api_v1_olivetin, 47); /** * Describes the message olivetin.api.v1.EventStreamRequest. * Use `create(EventStreamRequestSchema)` to create a new message. */ export const EventStreamRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 47); + messageDesc(file_olivetin_api_v1_olivetin, 48); /** * Describes the message olivetin.api.v1.EventStreamResponse. * Use `create(EventStreamResponseSchema)` to create a new message. */ export const EventStreamResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 48); + messageDesc(file_olivetin_api_v1_olivetin, 49); /** * Describes the message olivetin.api.v1.EventOutputChunk. * Use `create(EventOutputChunkSchema)` to create a new message. */ export const EventOutputChunkSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 49); + messageDesc(file_olivetin_api_v1_olivetin, 50); /** * Describes the message olivetin.api.v1.EventEntityChanged. * Use `create(EventEntityChangedSchema)` to create a new message. */ export const EventEntityChangedSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 50); + messageDesc(file_olivetin_api_v1_olivetin, 51); /** * Describes the message olivetin.api.v1.EventConfigChanged. * Use `create(EventConfigChangedSchema)` to create a new message. */ export const EventConfigChangedSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 51); + messageDesc(file_olivetin_api_v1_olivetin, 52); /** * Describes the message olivetin.api.v1.EventHeartbeat. * Use `create(EventHeartbeatSchema)` to create a new message. */ export const EventHeartbeatSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 52); + messageDesc(file_olivetin_api_v1_olivetin, 53); /** * Describes the message olivetin.api.v1.EventExecutionFinished. * Use `create(EventExecutionFinishedSchema)` to create a new message. */ export const EventExecutionFinishedSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 53); + messageDesc(file_olivetin_api_v1_olivetin, 54); /** * Describes the message olivetin.api.v1.EventExecutionStarted. * Use `create(EventExecutionStartedSchema)` to create a new message. */ export const EventExecutionStartedSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 54); + messageDesc(file_olivetin_api_v1_olivetin, 55); /** * Describes the message olivetin.api.v1.KillActionRequest. * Use `create(KillActionRequestSchema)` to create a new message. */ export const KillActionRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 55); + messageDesc(file_olivetin_api_v1_olivetin, 56); /** * Describes the message olivetin.api.v1.KillActionResponse. * Use `create(KillActionResponseSchema)` to create a new message. */ export const KillActionResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 56); + messageDesc(file_olivetin_api_v1_olivetin, 57); /** * Describes the message olivetin.api.v1.LocalUserLoginRequest. * Use `create(LocalUserLoginRequestSchema)` to create a new message. */ export const LocalUserLoginRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 57); + messageDesc(file_olivetin_api_v1_olivetin, 58); /** * Describes the message olivetin.api.v1.LocalUserLoginResponse. * Use `create(LocalUserLoginResponseSchema)` to create a new message. */ export const LocalUserLoginResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 58); + messageDesc(file_olivetin_api_v1_olivetin, 59); /** * Describes the message olivetin.api.v1.PasswordHashRequest. * Use `create(PasswordHashRequestSchema)` to create a new message. */ export const PasswordHashRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 59); + messageDesc(file_olivetin_api_v1_olivetin, 60); /** * Describes the message olivetin.api.v1.PasswordHashResponse. * Use `create(PasswordHashResponseSchema)` to create a new message. */ export const PasswordHashResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 60); + messageDesc(file_olivetin_api_v1_olivetin, 61); /** * Describes the message olivetin.api.v1.LogoutRequest. * Use `create(LogoutRequestSchema)` to create a new message. */ export const LogoutRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 61); + messageDesc(file_olivetin_api_v1_olivetin, 62); /** * Describes the message olivetin.api.v1.LogoutResponse. * Use `create(LogoutResponseSchema)` to create a new message. */ export const LogoutResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 62); + messageDesc(file_olivetin_api_v1_olivetin, 63); /** * Describes the message olivetin.api.v1.GetDiagnosticsRequest. * Use `create(GetDiagnosticsRequestSchema)` to create a new message. */ export const GetDiagnosticsRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 63); + messageDesc(file_olivetin_api_v1_olivetin, 64); /** * Describes the message olivetin.api.v1.GetDiagnosticsResponse. * Use `create(GetDiagnosticsResponseSchema)` to create a new message. */ export const GetDiagnosticsResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 64); + messageDesc(file_olivetin_api_v1_olivetin, 65); /** * Describes the message olivetin.api.v1.InitRequest. * Use `create(InitRequestSchema)` to create a new message. */ export const InitRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 65); + messageDesc(file_olivetin_api_v1_olivetin, 66); /** * Describes the message olivetin.api.v1.InitResponse. * Use `create(InitResponseSchema)` to create a new message. */ export const InitResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 66); + messageDesc(file_olivetin_api_v1_olivetin, 67); /** * Describes the message olivetin.api.v1.AdditionalLink. * Use `create(AdditionalLinkSchema)` to create a new message. */ export const AdditionalLinkSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 67); + messageDesc(file_olivetin_api_v1_olivetin, 68); /** * Describes the message olivetin.api.v1.OAuth2Provider. * Use `create(OAuth2ProviderSchema)` to create a new message. */ export const OAuth2ProviderSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 68); + messageDesc(file_olivetin_api_v1_olivetin, 69); /** * Describes the message olivetin.api.v1.GetActionBindingRequest. * Use `create(GetActionBindingRequestSchema)` to create a new message. */ export const GetActionBindingRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 69); + messageDesc(file_olivetin_api_v1_olivetin, 70); /** * Describes the message olivetin.api.v1.GetActionBindingResponse. * Use `create(GetActionBindingResponseSchema)` to create a new message. */ export const GetActionBindingResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 70); + messageDesc(file_olivetin_api_v1_olivetin, 71); /** * Describes the message olivetin.api.v1.GetEntitiesRequest. * Use `create(GetEntitiesRequestSchema)` to create a new message. */ export const GetEntitiesRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 71); + messageDesc(file_olivetin_api_v1_olivetin, 72); /** * Describes the message olivetin.api.v1.GetEntitiesResponse. * Use `create(GetEntitiesResponseSchema)` to create a new message. */ export const GetEntitiesResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 72); + messageDesc(file_olivetin_api_v1_olivetin, 73); /** * Describes the message olivetin.api.v1.EntityDefinition. * Use `create(EntityDefinitionSchema)` to create a new message. */ export const EntityDefinitionSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 73); + messageDesc(file_olivetin_api_v1_olivetin, 74); + +/** + * Describes the message olivetin.api.v1.EntityProperty. + * Use `create(EntityPropertySchema)` to create a new message. + */ +export const EntityPropertySchema = /*@__PURE__*/ + messageDesc(file_olivetin_api_v1_olivetin, 75); /** * Describes the message olivetin.api.v1.GetEntityRequest. * Use `create(GetEntityRequestSchema)` to create a new message. */ export const GetEntityRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 74); + messageDesc(file_olivetin_api_v1_olivetin, 76); /** * Describes the message olivetin.api.v1.RestartActionRequest. * Use `create(RestartActionRequestSchema)` to create a new message. */ export const RestartActionRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 75); + messageDesc(file_olivetin_api_v1_olivetin, 77); /** * @generated from service olivetin.api.v1.OliveTinApiService diff --git a/proto/olivetin/api/v1/olivetin.proto b/proto/olivetin/api/v1/olivetin.proto index 013619d..f6d8a54 100644 --- a/proto/olivetin/api/v1/olivetin.proto +++ b/proto/olivetin/api/v1/olivetin.proto @@ -57,12 +57,19 @@ message ActionArgumentChoice { string title = 2; } +message EntityRelatedAction { + Action action = 1; + map prefilled_arguments = 2; +} + message Entity { string title = 1; string unique_key = 2; string type = 3; repeated string directories = 4; map fields = 5; + repeated EntityRelatedAction related_actions = 6; + string icon = 7; } message GetDashboardResponse { @@ -427,6 +434,10 @@ message GetActionBindingResponse { } message GetEntitiesRequest { + string entity_type = 1; + string filter = 2; + int32 page = 3; + int32 page_size = 4; } message GetEntitiesResponse { @@ -437,6 +448,14 @@ message EntityDefinition { string title = 1; repeated Entity instances = 2; repeated string used_on_dashboards = 3; + string icon = 4; + repeated EntityProperty properties = 5; + int32 total_instances = 6; +} + +message EntityProperty { + string name = 1; + string title = 2; } message GetEntityRequest { diff --git a/service/gen/olivetin/api/v1/olivetin.pb.go b/service/gen/olivetin/api/v1/olivetin.pb.go index f65e732..9eb3974 100644 --- a/service/gen/olivetin/api/v1/olivetin.pb.go +++ b/service/gen/olivetin/api/v1/olivetin.pb.go @@ -489,20 +489,74 @@ func (x *ActionArgumentChoice) GetTitle() string { return "" } +type EntityRelatedAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Action *Action `protobuf:"bytes,1,opt,name=action,proto3" json:"action,omitempty"` + PrefilledArguments map[string]string `protobuf:"bytes,2,rep,name=prefilled_arguments,json=prefilledArguments,proto3" json:"prefilled_arguments,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EntityRelatedAction) Reset() { + *x = EntityRelatedAction{} + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EntityRelatedAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityRelatedAction) ProtoMessage() {} + +func (x *EntityRelatedAction) ProtoReflect() protoreflect.Message { + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityRelatedAction.ProtoReflect.Descriptor instead. +func (*EntityRelatedAction) Descriptor() ([]byte, []int) { + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{5} +} + +func (x *EntityRelatedAction) GetAction() *Action { + if x != nil { + return x.Action + } + return nil +} + +func (x *EntityRelatedAction) GetPrefilledArguments() map[string]string { + if x != nil { + return x.PrefilledArguments + } + return nil +} + type Entity struct { - state protoimpl.MessageState `protogen:"open.v1"` - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - UniqueKey string `protobuf:"bytes,2,opt,name=unique_key,json=uniqueKey,proto3" json:"unique_key,omitempty"` - Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` - Directories []string `protobuf:"bytes,4,rep,name=directories,proto3" json:"directories,omitempty"` - Fields map[string]string `protobuf:"bytes,5,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + UniqueKey string `protobuf:"bytes,2,opt,name=unique_key,json=uniqueKey,proto3" json:"unique_key,omitempty"` + Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` + Directories []string `protobuf:"bytes,4,rep,name=directories,proto3" json:"directories,omitempty"` + Fields map[string]string `protobuf:"bytes,5,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + RelatedActions []*EntityRelatedAction `protobuf:"bytes,6,rep,name=related_actions,json=relatedActions,proto3" json:"related_actions,omitempty"` + Icon string `protobuf:"bytes,7,opt,name=icon,proto3" json:"icon,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Entity) Reset() { *x = Entity{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[5] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -514,7 +568,7 @@ func (x *Entity) String() string { func (*Entity) ProtoMessage() {} func (x *Entity) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[5] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -527,7 +581,7 @@ func (x *Entity) ProtoReflect() protoreflect.Message { // Deprecated: Use Entity.ProtoReflect.Descriptor instead. func (*Entity) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{5} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{6} } func (x *Entity) GetTitle() string { @@ -565,6 +619,20 @@ func (x *Entity) GetFields() map[string]string { return nil } +func (x *Entity) GetRelatedActions() []*EntityRelatedAction { + if x != nil { + return x.RelatedActions + } + return nil +} + +func (x *Entity) GetIcon() string { + if x != nil { + return x.Icon + } + return "" +} + type GetDashboardResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` @@ -575,7 +643,7 @@ type GetDashboardResponse struct { func (x *GetDashboardResponse) Reset() { *x = GetDashboardResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[6] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -587,7 +655,7 @@ func (x *GetDashboardResponse) String() string { func (*GetDashboardResponse) ProtoMessage() {} func (x *GetDashboardResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[6] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -600,7 +668,7 @@ func (x *GetDashboardResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDashboardResponse.ProtoReflect.Descriptor instead. func (*GetDashboardResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{6} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{7} } func (x *GetDashboardResponse) GetTitle() string { @@ -628,7 +696,7 @@ type EffectivePolicy struct { func (x *EffectivePolicy) Reset() { *x = EffectivePolicy{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[7] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -640,7 +708,7 @@ func (x *EffectivePolicy) String() string { func (*EffectivePolicy) ProtoMessage() {} func (x *EffectivePolicy) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[7] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -653,7 +721,7 @@ func (x *EffectivePolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use EffectivePolicy.ProtoReflect.Descriptor instead. func (*EffectivePolicy) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{7} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{8} } func (x *EffectivePolicy) GetShowDiagnostics() bool { @@ -688,7 +756,7 @@ type GetDashboardRequest struct { func (x *GetDashboardRequest) Reset() { *x = GetDashboardRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[8] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -700,7 +768,7 @@ func (x *GetDashboardRequest) String() string { func (*GetDashboardRequest) ProtoMessage() {} func (x *GetDashboardRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[8] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -713,7 +781,7 @@ func (x *GetDashboardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDashboardRequest.ProtoReflect.Descriptor instead. func (*GetDashboardRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{8} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{9} } func (x *GetDashboardRequest) GetTitle() string { @@ -747,7 +815,7 @@ type Dashboard struct { func (x *Dashboard) Reset() { *x = Dashboard{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[9] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -759,7 +827,7 @@ func (x *Dashboard) String() string { func (*Dashboard) ProtoMessage() {} func (x *Dashboard) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[9] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -772,7 +840,7 @@ func (x *Dashboard) ProtoReflect() protoreflect.Message { // Deprecated: Use Dashboard.ProtoReflect.Descriptor instead. func (*Dashboard) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{9} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{10} } func (x *Dashboard) GetTitle() string { @@ -805,7 +873,7 @@ type DashboardComponent struct { func (x *DashboardComponent) Reset() { *x = DashboardComponent{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[10] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -817,7 +885,7 @@ func (x *DashboardComponent) String() string { func (*DashboardComponent) ProtoMessage() {} func (x *DashboardComponent) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[10] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -830,7 +898,7 @@ func (x *DashboardComponent) ProtoReflect() protoreflect.Message { // Deprecated: Use DashboardComponent.ProtoReflect.Descriptor instead. func (*DashboardComponent) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{10} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{11} } func (x *DashboardComponent) GetTitle() string { @@ -901,7 +969,7 @@ type StartActionRequest struct { func (x *StartActionRequest) Reset() { *x = StartActionRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[11] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -913,7 +981,7 @@ func (x *StartActionRequest) String() string { func (*StartActionRequest) ProtoMessage() {} func (x *StartActionRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[11] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -926,7 +994,7 @@ func (x *StartActionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartActionRequest.ProtoReflect.Descriptor instead. func (*StartActionRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{11} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{12} } func (x *StartActionRequest) GetBindingId() string { @@ -967,7 +1035,7 @@ type StartActionArgument struct { func (x *StartActionArgument) Reset() { *x = StartActionArgument{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[12] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -979,7 +1047,7 @@ func (x *StartActionArgument) String() string { func (*StartActionArgument) ProtoMessage() {} func (x *StartActionArgument) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[12] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -992,7 +1060,7 @@ func (x *StartActionArgument) ProtoReflect() protoreflect.Message { // Deprecated: Use StartActionArgument.ProtoReflect.Descriptor instead. func (*StartActionArgument) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{12} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{13} } func (x *StartActionArgument) GetName() string { @@ -1018,7 +1086,7 @@ type StartActionResponse struct { func (x *StartActionResponse) Reset() { *x = StartActionResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[13] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1030,7 +1098,7 @@ func (x *StartActionResponse) String() string { func (*StartActionResponse) ProtoMessage() {} func (x *StartActionResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[13] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1043,7 +1111,7 @@ func (x *StartActionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartActionResponse.ProtoReflect.Descriptor instead. func (*StartActionResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{13} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{14} } func (x *StartActionResponse) GetExecutionTrackingId() string { @@ -1064,7 +1132,7 @@ type StartActionAndWaitRequest struct { func (x *StartActionAndWaitRequest) Reset() { *x = StartActionAndWaitRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[14] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1076,7 +1144,7 @@ func (x *StartActionAndWaitRequest) String() string { func (*StartActionAndWaitRequest) ProtoMessage() {} func (x *StartActionAndWaitRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[14] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1089,7 +1157,7 @@ func (x *StartActionAndWaitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartActionAndWaitRequest.ProtoReflect.Descriptor instead. func (*StartActionAndWaitRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{14} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{15} } func (x *StartActionAndWaitRequest) GetActionId() string { @@ -1122,7 +1190,7 @@ type StartActionAndWaitResponse struct { func (x *StartActionAndWaitResponse) Reset() { *x = StartActionAndWaitResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[15] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1134,7 +1202,7 @@ func (x *StartActionAndWaitResponse) String() string { func (*StartActionAndWaitResponse) ProtoMessage() {} func (x *StartActionAndWaitResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[15] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1147,7 +1215,7 @@ func (x *StartActionAndWaitResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartActionAndWaitResponse.ProtoReflect.Descriptor instead. func (*StartActionAndWaitResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{15} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{16} } func (x *StartActionAndWaitResponse) GetLogEntry() *LogEntry { @@ -1166,7 +1234,7 @@ type StartActionByGetRequest struct { func (x *StartActionByGetRequest) Reset() { *x = StartActionByGetRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[16] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1178,7 +1246,7 @@ func (x *StartActionByGetRequest) String() string { func (*StartActionByGetRequest) ProtoMessage() {} func (x *StartActionByGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[16] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1191,7 +1259,7 @@ func (x *StartActionByGetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartActionByGetRequest.ProtoReflect.Descriptor instead. func (*StartActionByGetRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{16} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{17} } func (x *StartActionByGetRequest) GetActionId() string { @@ -1210,7 +1278,7 @@ type StartActionByGetResponse struct { func (x *StartActionByGetResponse) Reset() { *x = StartActionByGetResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[17] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1222,7 +1290,7 @@ func (x *StartActionByGetResponse) String() string { func (*StartActionByGetResponse) ProtoMessage() {} func (x *StartActionByGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[17] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1235,7 +1303,7 @@ func (x *StartActionByGetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartActionByGetResponse.ProtoReflect.Descriptor instead. func (*StartActionByGetResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{17} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{18} } func (x *StartActionByGetResponse) GetExecutionTrackingId() string { @@ -1254,7 +1322,7 @@ type StartActionByGetAndWaitRequest struct { func (x *StartActionByGetAndWaitRequest) Reset() { *x = StartActionByGetAndWaitRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[18] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1266,7 +1334,7 @@ func (x *StartActionByGetAndWaitRequest) String() string { func (*StartActionByGetAndWaitRequest) ProtoMessage() {} func (x *StartActionByGetAndWaitRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[18] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1279,7 +1347,7 @@ func (x *StartActionByGetAndWaitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartActionByGetAndWaitRequest.ProtoReflect.Descriptor instead. func (*StartActionByGetAndWaitRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{18} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{19} } func (x *StartActionByGetAndWaitRequest) GetActionId() string { @@ -1298,7 +1366,7 @@ type StartActionByGetAndWaitResponse struct { func (x *StartActionByGetAndWaitResponse) Reset() { *x = StartActionByGetAndWaitResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[19] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1310,7 +1378,7 @@ func (x *StartActionByGetAndWaitResponse) String() string { func (*StartActionByGetAndWaitResponse) ProtoMessage() {} func (x *StartActionByGetAndWaitResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[19] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1323,7 +1391,7 @@ func (x *StartActionByGetAndWaitResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartActionByGetAndWaitResponse.ProtoReflect.Descriptor instead. func (*StartActionByGetAndWaitResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{19} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{20} } func (x *StartActionByGetAndWaitResponse) GetLogEntry() *LogEntry { @@ -1345,7 +1413,7 @@ type GetLogsRequest struct { func (x *GetLogsRequest) Reset() { *x = GetLogsRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[20] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1357,7 +1425,7 @@ func (x *GetLogsRequest) String() string { func (*GetLogsRequest) ProtoMessage() {} func (x *GetLogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[20] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1370,7 +1438,7 @@ func (x *GetLogsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetLogsRequest.ProtoReflect.Descriptor instead. func (*GetLogsRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{20} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{21} } func (x *GetLogsRequest) GetStartOffset() int64 { @@ -1431,7 +1499,7 @@ type LogEntry struct { func (x *LogEntry) Reset() { *x = LogEntry{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[21] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1443,7 +1511,7 @@ func (x *LogEntry) String() string { func (*LogEntry) ProtoMessage() {} func (x *LogEntry) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[21] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1456,7 +1524,7 @@ func (x *LogEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use LogEntry.ProtoReflect.Descriptor instead. func (*LogEntry) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{21} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{22} } func (x *LogEntry) GetDatetimeStarted() string { @@ -1626,7 +1694,7 @@ type GetLogsResponse struct { func (x *GetLogsResponse) Reset() { *x = GetLogsResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[22] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1638,7 +1706,7 @@ func (x *GetLogsResponse) String() string { func (*GetLogsResponse) ProtoMessage() {} func (x *GetLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[22] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1651,7 +1719,7 @@ func (x *GetLogsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetLogsResponse.ProtoReflect.Descriptor instead. func (*GetLogsResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{22} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{23} } func (x *GetLogsResponse) GetLogs() []*LogEntry { @@ -1699,7 +1767,7 @@ type GetActionLogsRequest struct { func (x *GetActionLogsRequest) Reset() { *x = GetActionLogsRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[23] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1711,7 +1779,7 @@ func (x *GetActionLogsRequest) String() string { func (*GetActionLogsRequest) ProtoMessage() {} func (x *GetActionLogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[23] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1724,7 +1792,7 @@ func (x *GetActionLogsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetActionLogsRequest.ProtoReflect.Descriptor instead. func (*GetActionLogsRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{23} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{24} } func (x *GetActionLogsRequest) GetActionId() string { @@ -1754,7 +1822,7 @@ type GetActionLogsResponse struct { func (x *GetActionLogsResponse) Reset() { *x = GetActionLogsResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[24] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1766,7 +1834,7 @@ func (x *GetActionLogsResponse) String() string { func (*GetActionLogsResponse) ProtoMessage() {} func (x *GetActionLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[24] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1779,7 +1847,7 @@ func (x *GetActionLogsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetActionLogsResponse.ProtoReflect.Descriptor instead. func (*GetActionLogsResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{24} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{25} } func (x *GetActionLogsResponse) GetLogs() []*LogEntry { @@ -1825,7 +1893,7 @@ type GetExecutionQueueRequest struct { func (x *GetExecutionQueueRequest) Reset() { *x = GetExecutionQueueRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[25] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1837,7 +1905,7 @@ func (x *GetExecutionQueueRequest) String() string { func (*GetExecutionQueueRequest) ProtoMessage() {} func (x *GetExecutionQueueRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[25] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1850,7 +1918,7 @@ func (x *GetExecutionQueueRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetExecutionQueueRequest.ProtoReflect.Descriptor instead. func (*GetExecutionQueueRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{25} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{26} } type ExecutionQueueAction struct { @@ -1868,7 +1936,7 @@ type ExecutionQueueAction struct { func (x *ExecutionQueueAction) Reset() { *x = ExecutionQueueAction{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[26] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1880,7 +1948,7 @@ func (x *ExecutionQueueAction) String() string { func (*ExecutionQueueAction) ProtoMessage() {} func (x *ExecutionQueueAction) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[26] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1893,7 +1961,7 @@ func (x *ExecutionQueueAction) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecutionQueueAction.ProtoReflect.Descriptor instead. func (*ExecutionQueueAction) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{26} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{27} } func (x *ExecutionQueueAction) GetBindingId() string { @@ -1960,7 +2028,7 @@ type ExecutionQueueGroup struct { func (x *ExecutionQueueGroup) Reset() { *x = ExecutionQueueGroup{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[27] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1972,7 +2040,7 @@ func (x *ExecutionQueueGroup) String() string { func (*ExecutionQueueGroup) ProtoMessage() {} func (x *ExecutionQueueGroup) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[27] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1985,7 +2053,7 @@ func (x *ExecutionQueueGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecutionQueueGroup.ProtoReflect.Descriptor instead. func (*ExecutionQueueGroup) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{27} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{28} } func (x *ExecutionQueueGroup) GetName() string { @@ -2047,7 +2115,7 @@ type GetExecutionQueueResponse struct { func (x *GetExecutionQueueResponse) Reset() { *x = GetExecutionQueueResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[28] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2059,7 +2127,7 @@ func (x *GetExecutionQueueResponse) String() string { func (*GetExecutionQueueResponse) ProtoMessage() {} func (x *GetExecutionQueueResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[28] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2072,7 +2140,7 @@ func (x *GetExecutionQueueResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetExecutionQueueResponse.ProtoReflect.Descriptor instead. func (*GetExecutionQueueResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{28} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{29} } func (x *GetExecutionQueueResponse) GetGroups() []*ExecutionQueueGroup { @@ -2101,7 +2169,7 @@ type ValidateArgumentTypeRequest struct { func (x *ValidateArgumentTypeRequest) Reset() { *x = ValidateArgumentTypeRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[29] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2113,7 +2181,7 @@ func (x *ValidateArgumentTypeRequest) String() string { func (*ValidateArgumentTypeRequest) ProtoMessage() {} func (x *ValidateArgumentTypeRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[29] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2126,7 +2194,7 @@ func (x *ValidateArgumentTypeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateArgumentTypeRequest.ProtoReflect.Descriptor instead. func (*ValidateArgumentTypeRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{29} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{30} } func (x *ValidateArgumentTypeRequest) GetValue() string { @@ -2167,7 +2235,7 @@ type ValidateArgumentTypeResponse struct { func (x *ValidateArgumentTypeResponse) Reset() { *x = ValidateArgumentTypeResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[30] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2179,7 +2247,7 @@ func (x *ValidateArgumentTypeResponse) String() string { func (*ValidateArgumentTypeResponse) ProtoMessage() {} func (x *ValidateArgumentTypeResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[30] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2192,7 +2260,7 @@ func (x *ValidateArgumentTypeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateArgumentTypeResponse.ProtoReflect.Descriptor instead. func (*ValidateArgumentTypeResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{30} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{31} } func (x *ValidateArgumentTypeResponse) GetValid() bool { @@ -2218,7 +2286,7 @@ type WatchExecutionRequest struct { func (x *WatchExecutionRequest) Reset() { *x = WatchExecutionRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[31] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2230,7 +2298,7 @@ func (x *WatchExecutionRequest) String() string { func (*WatchExecutionRequest) ProtoMessage() {} func (x *WatchExecutionRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[31] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2243,7 +2311,7 @@ func (x *WatchExecutionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WatchExecutionRequest.ProtoReflect.Descriptor instead. func (*WatchExecutionRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{31} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{32} } func (x *WatchExecutionRequest) GetExecutionTrackingId() string { @@ -2262,7 +2330,7 @@ type WatchExecutionUpdate struct { func (x *WatchExecutionUpdate) Reset() { *x = WatchExecutionUpdate{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[32] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2274,7 +2342,7 @@ func (x *WatchExecutionUpdate) String() string { func (*WatchExecutionUpdate) ProtoMessage() {} func (x *WatchExecutionUpdate) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[32] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2287,7 +2355,7 @@ func (x *WatchExecutionUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use WatchExecutionUpdate.ProtoReflect.Descriptor instead. func (*WatchExecutionUpdate) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{32} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{33} } func (x *WatchExecutionUpdate) GetUpdate() string { @@ -2307,7 +2375,7 @@ type ExecutionStatusRequest struct { func (x *ExecutionStatusRequest) Reset() { *x = ExecutionStatusRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[33] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2319,7 +2387,7 @@ func (x *ExecutionStatusRequest) String() string { func (*ExecutionStatusRequest) ProtoMessage() {} func (x *ExecutionStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[33] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2332,7 +2400,7 @@ func (x *ExecutionStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecutionStatusRequest.ProtoReflect.Descriptor instead. func (*ExecutionStatusRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{33} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{34} } func (x *ExecutionStatusRequest) GetExecutionTrackingId() string { @@ -2361,7 +2429,7 @@ type DashboardNavigationTarget struct { func (x *DashboardNavigationTarget) Reset() { *x = DashboardNavigationTarget{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[34] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2373,7 +2441,7 @@ func (x *DashboardNavigationTarget) String() string { func (*DashboardNavigationTarget) ProtoMessage() {} func (x *DashboardNavigationTarget) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[34] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2386,7 +2454,7 @@ func (x *DashboardNavigationTarget) ProtoReflect() protoreflect.Message { // Deprecated: Use DashboardNavigationTarget.ProtoReflect.Descriptor instead. func (*DashboardNavigationTarget) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{34} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{35} } func (x *DashboardNavigationTarget) GetTitle() string { @@ -2427,7 +2495,7 @@ type ExecutionStatusResponse struct { func (x *ExecutionStatusResponse) Reset() { *x = ExecutionStatusResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[35] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2439,7 +2507,7 @@ func (x *ExecutionStatusResponse) String() string { func (*ExecutionStatusResponse) ProtoMessage() {} func (x *ExecutionStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[35] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2452,7 +2520,7 @@ func (x *ExecutionStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecutionStatusResponse.ProtoReflect.Descriptor instead. func (*ExecutionStatusResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{35} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{36} } func (x *ExecutionStatusResponse) GetLogEntry() *LogEntry { @@ -2477,7 +2545,7 @@ type WhoAmIRequest struct { func (x *WhoAmIRequest) Reset() { *x = WhoAmIRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[36] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2489,7 +2557,7 @@ func (x *WhoAmIRequest) String() string { func (*WhoAmIRequest) ProtoMessage() {} func (x *WhoAmIRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[36] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2502,7 +2570,7 @@ func (x *WhoAmIRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WhoAmIRequest.ProtoReflect.Descriptor instead. func (*WhoAmIRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{36} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{37} } type WhoAmIResponse struct { @@ -2518,7 +2586,7 @@ type WhoAmIResponse struct { func (x *WhoAmIResponse) Reset() { *x = WhoAmIResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[37] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2530,7 +2598,7 @@ func (x *WhoAmIResponse) String() string { func (*WhoAmIResponse) ProtoMessage() {} func (x *WhoAmIResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[37] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2543,7 +2611,7 @@ func (x *WhoAmIResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WhoAmIResponse.ProtoReflect.Descriptor instead. func (*WhoAmIResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{37} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{38} } func (x *WhoAmIResponse) GetAuthenticatedUser() string { @@ -2589,7 +2657,7 @@ type SosReportRequest struct { func (x *SosReportRequest) Reset() { *x = SosReportRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[38] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2601,7 +2669,7 @@ func (x *SosReportRequest) String() string { func (*SosReportRequest) ProtoMessage() {} func (x *SosReportRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[38] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2614,7 +2682,7 @@ func (x *SosReportRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SosReportRequest.ProtoReflect.Descriptor instead. func (*SosReportRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{38} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{39} } type SosReportResponse struct { @@ -2626,7 +2694,7 @@ type SosReportResponse struct { func (x *SosReportResponse) Reset() { *x = SosReportResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[39] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2638,7 +2706,7 @@ func (x *SosReportResponse) String() string { func (*SosReportResponse) ProtoMessage() {} func (x *SosReportResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[39] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2651,7 +2719,7 @@ func (x *SosReportResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SosReportResponse.ProtoReflect.Descriptor instead. func (*SosReportResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{39} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{40} } func (x *SosReportResponse) GetAlert() string { @@ -2669,7 +2737,7 @@ type DumpVarsRequest struct { func (x *DumpVarsRequest) Reset() { *x = DumpVarsRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[40] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2681,7 +2749,7 @@ func (x *DumpVarsRequest) String() string { func (*DumpVarsRequest) ProtoMessage() {} func (x *DumpVarsRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[40] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2694,7 +2762,7 @@ func (x *DumpVarsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DumpVarsRequest.ProtoReflect.Descriptor instead. func (*DumpVarsRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{40} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{41} } type DumpVarsResponse struct { @@ -2707,7 +2775,7 @@ type DumpVarsResponse struct { func (x *DumpVarsResponse) Reset() { *x = DumpVarsResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[41] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2719,7 +2787,7 @@ func (x *DumpVarsResponse) String() string { func (*DumpVarsResponse) ProtoMessage() {} func (x *DumpVarsResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[41] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2732,7 +2800,7 @@ func (x *DumpVarsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DumpVarsResponse.ProtoReflect.Descriptor instead. func (*DumpVarsResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{41} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{42} } func (x *DumpVarsResponse) GetAlert() string { @@ -2759,7 +2827,7 @@ type DebugBinding struct { func (x *DebugBinding) Reset() { *x = DebugBinding{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[42] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2771,7 +2839,7 @@ func (x *DebugBinding) String() string { func (*DebugBinding) ProtoMessage() {} func (x *DebugBinding) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[42] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2784,7 +2852,7 @@ func (x *DebugBinding) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugBinding.ProtoReflect.Descriptor instead. func (*DebugBinding) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{42} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{43} } func (x *DebugBinding) GetActionTitle() string { @@ -2809,7 +2877,7 @@ type DumpPublicIdActionMapRequest struct { func (x *DumpPublicIdActionMapRequest) Reset() { *x = DumpPublicIdActionMapRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[43] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2821,7 +2889,7 @@ func (x *DumpPublicIdActionMapRequest) String() string { func (*DumpPublicIdActionMapRequest) ProtoMessage() {} func (x *DumpPublicIdActionMapRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[43] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2834,7 +2902,7 @@ func (x *DumpPublicIdActionMapRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DumpPublicIdActionMapRequest.ProtoReflect.Descriptor instead. func (*DumpPublicIdActionMapRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{43} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{44} } type DumpPublicIdActionMapResponse struct { @@ -2847,7 +2915,7 @@ type DumpPublicIdActionMapResponse struct { func (x *DumpPublicIdActionMapResponse) Reset() { *x = DumpPublicIdActionMapResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[44] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2859,7 +2927,7 @@ func (x *DumpPublicIdActionMapResponse) String() string { func (*DumpPublicIdActionMapResponse) ProtoMessage() {} func (x *DumpPublicIdActionMapResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[44] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2872,7 +2940,7 @@ func (x *DumpPublicIdActionMapResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DumpPublicIdActionMapResponse.ProtoReflect.Descriptor instead. func (*DumpPublicIdActionMapResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{44} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{45} } func (x *DumpPublicIdActionMapResponse) GetAlert() string { @@ -2897,7 +2965,7 @@ type GetReadyzRequest struct { func (x *GetReadyzRequest) Reset() { *x = GetReadyzRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[45] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2909,7 +2977,7 @@ func (x *GetReadyzRequest) String() string { func (*GetReadyzRequest) ProtoMessage() {} func (x *GetReadyzRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[45] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2922,7 +2990,7 @@ func (x *GetReadyzRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetReadyzRequest.ProtoReflect.Descriptor instead. func (*GetReadyzRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{45} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{46} } type GetReadyzResponse struct { @@ -2934,7 +3002,7 @@ type GetReadyzResponse struct { func (x *GetReadyzResponse) Reset() { *x = GetReadyzResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[46] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2946,7 +3014,7 @@ func (x *GetReadyzResponse) String() string { func (*GetReadyzResponse) ProtoMessage() {} func (x *GetReadyzResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[46] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2959,7 +3027,7 @@ func (x *GetReadyzResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetReadyzResponse.ProtoReflect.Descriptor instead. func (*GetReadyzResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{46} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{47} } func (x *GetReadyzResponse) GetStatus() string { @@ -2977,7 +3045,7 @@ type EventStreamRequest struct { func (x *EventStreamRequest) Reset() { *x = EventStreamRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[47] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2989,7 +3057,7 @@ func (x *EventStreamRequest) String() string { func (*EventStreamRequest) ProtoMessage() {} func (x *EventStreamRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[47] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3002,7 +3070,7 @@ func (x *EventStreamRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EventStreamRequest.ProtoReflect.Descriptor instead. func (*EventStreamRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{47} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{48} } type EventStreamResponse struct { @@ -3022,7 +3090,7 @@ type EventStreamResponse struct { func (x *EventStreamResponse) Reset() { *x = EventStreamResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[48] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3034,7 +3102,7 @@ func (x *EventStreamResponse) String() string { func (*EventStreamResponse) ProtoMessage() {} func (x *EventStreamResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[48] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3047,7 +3115,7 @@ func (x *EventStreamResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EventStreamResponse.ProtoReflect.Descriptor instead. func (*EventStreamResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{48} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{49} } func (x *EventStreamResponse) GetEvent() isEventStreamResponse_Event { @@ -3161,7 +3229,7 @@ type EventOutputChunk struct { func (x *EventOutputChunk) Reset() { *x = EventOutputChunk{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[49] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3173,7 +3241,7 @@ func (x *EventOutputChunk) String() string { func (*EventOutputChunk) ProtoMessage() {} func (x *EventOutputChunk) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[49] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3186,7 +3254,7 @@ func (x *EventOutputChunk) ProtoReflect() protoreflect.Message { // Deprecated: Use EventOutputChunk.ProtoReflect.Descriptor instead. func (*EventOutputChunk) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{49} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{50} } func (x *EventOutputChunk) GetExecutionTrackingId() string { @@ -3211,7 +3279,7 @@ type EventEntityChanged struct { func (x *EventEntityChanged) Reset() { *x = EventEntityChanged{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[50] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3223,7 +3291,7 @@ func (x *EventEntityChanged) String() string { func (*EventEntityChanged) ProtoMessage() {} func (x *EventEntityChanged) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[50] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3236,7 +3304,7 @@ func (x *EventEntityChanged) ProtoReflect() protoreflect.Message { // Deprecated: Use EventEntityChanged.ProtoReflect.Descriptor instead. func (*EventEntityChanged) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{50} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{51} } type EventConfigChanged struct { @@ -3247,7 +3315,7 @@ type EventConfigChanged struct { func (x *EventConfigChanged) Reset() { *x = EventConfigChanged{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[51] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3259,7 +3327,7 @@ func (x *EventConfigChanged) String() string { func (*EventConfigChanged) ProtoMessage() {} func (x *EventConfigChanged) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[51] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3272,7 +3340,7 @@ func (x *EventConfigChanged) ProtoReflect() protoreflect.Message { // Deprecated: Use EventConfigChanged.ProtoReflect.Descriptor instead. func (*EventConfigChanged) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{51} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{52} } type EventHeartbeat struct { @@ -3283,7 +3351,7 @@ type EventHeartbeat struct { func (x *EventHeartbeat) Reset() { *x = EventHeartbeat{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[52] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3295,7 +3363,7 @@ func (x *EventHeartbeat) String() string { func (*EventHeartbeat) ProtoMessage() {} func (x *EventHeartbeat) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[52] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3308,7 +3376,7 @@ func (x *EventHeartbeat) ProtoReflect() protoreflect.Message { // Deprecated: Use EventHeartbeat.ProtoReflect.Descriptor instead. func (*EventHeartbeat) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{52} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{53} } type EventExecutionFinished struct { @@ -3320,7 +3388,7 @@ type EventExecutionFinished struct { func (x *EventExecutionFinished) Reset() { *x = EventExecutionFinished{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[53] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3332,7 +3400,7 @@ func (x *EventExecutionFinished) String() string { func (*EventExecutionFinished) ProtoMessage() {} func (x *EventExecutionFinished) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[53] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3345,7 +3413,7 @@ func (x *EventExecutionFinished) ProtoReflect() protoreflect.Message { // Deprecated: Use EventExecutionFinished.ProtoReflect.Descriptor instead. func (*EventExecutionFinished) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{53} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{54} } func (x *EventExecutionFinished) GetLogEntry() *LogEntry { @@ -3364,7 +3432,7 @@ type EventExecutionStarted struct { func (x *EventExecutionStarted) Reset() { *x = EventExecutionStarted{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[54] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3376,7 +3444,7 @@ func (x *EventExecutionStarted) String() string { func (*EventExecutionStarted) ProtoMessage() {} func (x *EventExecutionStarted) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[54] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3389,7 +3457,7 @@ func (x *EventExecutionStarted) ProtoReflect() protoreflect.Message { // Deprecated: Use EventExecutionStarted.ProtoReflect.Descriptor instead. func (*EventExecutionStarted) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{54} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{55} } func (x *EventExecutionStarted) GetLogEntry() *LogEntry { @@ -3408,7 +3476,7 @@ type KillActionRequest struct { func (x *KillActionRequest) Reset() { *x = KillActionRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[55] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3420,7 +3488,7 @@ func (x *KillActionRequest) String() string { func (*KillActionRequest) ProtoMessage() {} func (x *KillActionRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[55] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3433,7 +3501,7 @@ func (x *KillActionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KillActionRequest.ProtoReflect.Descriptor instead. func (*KillActionRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{55} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{56} } func (x *KillActionRequest) GetExecutionTrackingId() string { @@ -3455,7 +3523,7 @@ type KillActionResponse struct { func (x *KillActionResponse) Reset() { *x = KillActionResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[56] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3467,7 +3535,7 @@ func (x *KillActionResponse) String() string { func (*KillActionResponse) ProtoMessage() {} func (x *KillActionResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[56] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3480,7 +3548,7 @@ func (x *KillActionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KillActionResponse.ProtoReflect.Descriptor instead. func (*KillActionResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{56} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{57} } func (x *KillActionResponse) GetExecutionTrackingId() string { @@ -3521,7 +3589,7 @@ type LocalUserLoginRequest struct { func (x *LocalUserLoginRequest) Reset() { *x = LocalUserLoginRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[57] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3533,7 +3601,7 @@ func (x *LocalUserLoginRequest) String() string { func (*LocalUserLoginRequest) ProtoMessage() {} func (x *LocalUserLoginRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[57] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3546,7 +3614,7 @@ func (x *LocalUserLoginRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LocalUserLoginRequest.ProtoReflect.Descriptor instead. func (*LocalUserLoginRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{57} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{58} } func (x *LocalUserLoginRequest) GetUsername() string { @@ -3572,7 +3640,7 @@ type LocalUserLoginResponse struct { func (x *LocalUserLoginResponse) Reset() { *x = LocalUserLoginResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[58] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3584,7 +3652,7 @@ func (x *LocalUserLoginResponse) String() string { func (*LocalUserLoginResponse) ProtoMessage() {} func (x *LocalUserLoginResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[58] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3597,7 +3665,7 @@ func (x *LocalUserLoginResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LocalUserLoginResponse.ProtoReflect.Descriptor instead. func (*LocalUserLoginResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{58} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{59} } func (x *LocalUserLoginResponse) GetSuccess() bool { @@ -3616,7 +3684,7 @@ type PasswordHashRequest struct { func (x *PasswordHashRequest) Reset() { *x = PasswordHashRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[59] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3628,7 +3696,7 @@ func (x *PasswordHashRequest) String() string { func (*PasswordHashRequest) ProtoMessage() {} func (x *PasswordHashRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[59] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3641,7 +3709,7 @@ func (x *PasswordHashRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PasswordHashRequest.ProtoReflect.Descriptor instead. func (*PasswordHashRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{59} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{60} } func (x *PasswordHashRequest) GetPassword() string { @@ -3660,7 +3728,7 @@ type PasswordHashResponse struct { func (x *PasswordHashResponse) Reset() { *x = PasswordHashResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[60] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3672,7 +3740,7 @@ func (x *PasswordHashResponse) String() string { func (*PasswordHashResponse) ProtoMessage() {} func (x *PasswordHashResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[60] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3685,7 +3753,7 @@ func (x *PasswordHashResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PasswordHashResponse.ProtoReflect.Descriptor instead. func (*PasswordHashResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{60} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{61} } func (x *PasswordHashResponse) GetHash() string { @@ -3703,7 +3771,7 @@ type LogoutRequest struct { func (x *LogoutRequest) Reset() { *x = LogoutRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[61] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3715,7 +3783,7 @@ func (x *LogoutRequest) String() string { func (*LogoutRequest) ProtoMessage() {} func (x *LogoutRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[61] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3728,7 +3796,7 @@ func (x *LogoutRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LogoutRequest.ProtoReflect.Descriptor instead. func (*LogoutRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{61} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{62} } type LogoutResponse struct { @@ -3739,7 +3807,7 @@ type LogoutResponse struct { func (x *LogoutResponse) Reset() { *x = LogoutResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[62] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3751,7 +3819,7 @@ func (x *LogoutResponse) String() string { func (*LogoutResponse) ProtoMessage() {} func (x *LogoutResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[62] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3764,7 +3832,7 @@ func (x *LogoutResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LogoutResponse.ProtoReflect.Descriptor instead. func (*LogoutResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{62} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{63} } type GetDiagnosticsRequest struct { @@ -3775,7 +3843,7 @@ type GetDiagnosticsRequest struct { func (x *GetDiagnosticsRequest) Reset() { *x = GetDiagnosticsRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[63] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3787,7 +3855,7 @@ func (x *GetDiagnosticsRequest) String() string { func (*GetDiagnosticsRequest) ProtoMessage() {} func (x *GetDiagnosticsRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[63] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3800,7 +3868,7 @@ func (x *GetDiagnosticsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDiagnosticsRequest.ProtoReflect.Descriptor instead. func (*GetDiagnosticsRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{63} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{64} } type GetDiagnosticsResponse struct { @@ -3813,7 +3881,7 @@ type GetDiagnosticsResponse struct { func (x *GetDiagnosticsResponse) Reset() { *x = GetDiagnosticsResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[64] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3825,7 +3893,7 @@ func (x *GetDiagnosticsResponse) String() string { func (*GetDiagnosticsResponse) ProtoMessage() {} func (x *GetDiagnosticsResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[64] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3838,7 +3906,7 @@ func (x *GetDiagnosticsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDiagnosticsResponse.ProtoReflect.Descriptor instead. func (*GetDiagnosticsResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{64} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{65} } func (x *GetDiagnosticsResponse) GetSshFoundKey() string { @@ -3863,7 +3931,7 @@ type InitRequest struct { func (x *InitRequest) Reset() { *x = InitRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[65] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3875,7 +3943,7 @@ func (x *InitRequest) String() string { func (*InitRequest) ProtoMessage() {} func (x *InitRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[65] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3888,7 +3956,7 @@ func (x *InitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InitRequest.ProtoReflect.Descriptor instead. func (*InitRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{65} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{66} } type InitResponse struct { @@ -3924,7 +3992,7 @@ type InitResponse struct { func (x *InitResponse) Reset() { *x = InitResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[66] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3936,7 +4004,7 @@ func (x *InitResponse) String() string { func (*InitResponse) ProtoMessage() {} func (x *InitResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[66] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3949,7 +4017,7 @@ func (x *InitResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InitResponse.ProtoReflect.Descriptor instead. func (*InitResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{66} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{67} } func (x *InitResponse) GetShowFooter() bool { @@ -4137,7 +4205,7 @@ type AdditionalLink struct { func (x *AdditionalLink) Reset() { *x = AdditionalLink{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[67] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4149,7 +4217,7 @@ func (x *AdditionalLink) String() string { func (*AdditionalLink) ProtoMessage() {} func (x *AdditionalLink) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[67] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4162,7 +4230,7 @@ func (x *AdditionalLink) ProtoReflect() protoreflect.Message { // Deprecated: Use AdditionalLink.ProtoReflect.Descriptor instead. func (*AdditionalLink) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{67} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{68} } func (x *AdditionalLink) GetTitle() string { @@ -4190,7 +4258,7 @@ type OAuth2Provider struct { func (x *OAuth2Provider) Reset() { *x = OAuth2Provider{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[68] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4202,7 +4270,7 @@ func (x *OAuth2Provider) String() string { func (*OAuth2Provider) ProtoMessage() {} func (x *OAuth2Provider) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[68] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4215,7 +4283,7 @@ func (x *OAuth2Provider) ProtoReflect() protoreflect.Message { // Deprecated: Use OAuth2Provider.ProtoReflect.Descriptor instead. func (*OAuth2Provider) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{68} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{69} } func (x *OAuth2Provider) GetTitle() string { @@ -4248,7 +4316,7 @@ type GetActionBindingRequest struct { func (x *GetActionBindingRequest) Reset() { *x = GetActionBindingRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[69] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4260,7 +4328,7 @@ func (x *GetActionBindingRequest) String() string { func (*GetActionBindingRequest) ProtoMessage() {} func (x *GetActionBindingRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[69] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4273,7 +4341,7 @@ func (x *GetActionBindingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetActionBindingRequest.ProtoReflect.Descriptor instead. func (*GetActionBindingRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{69} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{70} } func (x *GetActionBindingRequest) GetBindingId() string { @@ -4293,7 +4361,7 @@ type GetActionBindingResponse struct { func (x *GetActionBindingResponse) Reset() { *x = GetActionBindingResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[70] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4305,7 +4373,7 @@ func (x *GetActionBindingResponse) String() string { func (*GetActionBindingResponse) ProtoMessage() {} func (x *GetActionBindingResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[70] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4318,7 +4386,7 @@ func (x *GetActionBindingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetActionBindingResponse.ProtoReflect.Descriptor instead. func (*GetActionBindingResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{70} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{71} } func (x *GetActionBindingResponse) GetAction() *Action { @@ -4337,13 +4405,17 @@ func (x *GetActionBindingResponse) GetBackToDashboards() []*DashboardNavigationT type GetEntitiesRequest struct { state protoimpl.MessageState `protogen:"open.v1"` + EntityType string `protobuf:"bytes,1,opt,name=entity_type,json=entityType,proto3" json:"entity_type,omitempty"` + Filter string `protobuf:"bytes,2,opt,name=filter,proto3" json:"filter,omitempty"` + Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *GetEntitiesRequest) Reset() { *x = GetEntitiesRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[71] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4355,7 +4427,7 @@ func (x *GetEntitiesRequest) String() string { func (*GetEntitiesRequest) ProtoMessage() {} func (x *GetEntitiesRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[71] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4368,7 +4440,35 @@ func (x *GetEntitiesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitiesRequest.ProtoReflect.Descriptor instead. func (*GetEntitiesRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{71} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{72} +} + +func (x *GetEntitiesRequest) GetEntityType() string { + if x != nil { + return x.EntityType + } + return "" +} + +func (x *GetEntitiesRequest) GetFilter() string { + if x != nil { + return x.Filter + } + return "" +} + +func (x *GetEntitiesRequest) GetPage() int32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *GetEntitiesRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 } type GetEntitiesResponse struct { @@ -4380,7 +4480,7 @@ type GetEntitiesResponse struct { func (x *GetEntitiesResponse) Reset() { *x = GetEntitiesResponse{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[72] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4392,7 +4492,7 @@ func (x *GetEntitiesResponse) String() string { func (*GetEntitiesResponse) ProtoMessage() {} func (x *GetEntitiesResponse) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[72] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4405,7 +4505,7 @@ func (x *GetEntitiesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitiesResponse.ProtoReflect.Descriptor instead. func (*GetEntitiesResponse) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{72} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{73} } func (x *GetEntitiesResponse) GetEntityDefinitions() []*EntityDefinition { @@ -4420,13 +4520,16 @@ type EntityDefinition struct { Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` Instances []*Entity `protobuf:"bytes,2,rep,name=instances,proto3" json:"instances,omitempty"` UsedOnDashboards []string `protobuf:"bytes,3,rep,name=used_on_dashboards,json=usedOnDashboards,proto3" json:"used_on_dashboards,omitempty"` + Icon string `protobuf:"bytes,4,opt,name=icon,proto3" json:"icon,omitempty"` + Properties []*EntityProperty `protobuf:"bytes,5,rep,name=properties,proto3" json:"properties,omitempty"` + TotalInstances int32 `protobuf:"varint,6,opt,name=total_instances,json=totalInstances,proto3" json:"total_instances,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *EntityDefinition) Reset() { *x = EntityDefinition{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[73] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4438,7 +4541,7 @@ func (x *EntityDefinition) String() string { func (*EntityDefinition) ProtoMessage() {} func (x *EntityDefinition) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[73] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4451,7 +4554,7 @@ func (x *EntityDefinition) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityDefinition.ProtoReflect.Descriptor instead. func (*EntityDefinition) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{73} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{74} } func (x *EntityDefinition) GetTitle() string { @@ -4475,6 +4578,79 @@ func (x *EntityDefinition) GetUsedOnDashboards() []string { return nil } +func (x *EntityDefinition) GetIcon() string { + if x != nil { + return x.Icon + } + return "" +} + +func (x *EntityDefinition) GetProperties() []*EntityProperty { + if x != nil { + return x.Properties + } + return nil +} + +func (x *EntityDefinition) GetTotalInstances() int32 { + if x != nil { + return x.TotalInstances + } + return 0 +} + +type EntityProperty struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EntityProperty) Reset() { + *x = EntityProperty{} + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EntityProperty) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityProperty) ProtoMessage() {} + +func (x *EntityProperty) ProtoReflect() protoreflect.Message { + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[75] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityProperty.ProtoReflect.Descriptor instead. +func (*EntityProperty) Descriptor() ([]byte, []int) { + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{75} +} + +func (x *EntityProperty) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *EntityProperty) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + type GetEntityRequest struct { state protoimpl.MessageState `protogen:"open.v1"` UniqueKey string `protobuf:"bytes,1,opt,name=unique_key,json=uniqueKey,proto3" json:"unique_key,omitempty"` @@ -4485,7 +4661,7 @@ type GetEntityRequest struct { func (x *GetEntityRequest) Reset() { *x = GetEntityRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[74] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4497,7 +4673,7 @@ func (x *GetEntityRequest) String() string { func (*GetEntityRequest) ProtoMessage() {} func (x *GetEntityRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[74] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4510,7 +4686,7 @@ func (x *GetEntityRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntityRequest.ProtoReflect.Descriptor instead. func (*GetEntityRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{74} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{76} } func (x *GetEntityRequest) GetUniqueKey() string { @@ -4536,7 +4712,7 @@ type RestartActionRequest struct { func (x *RestartActionRequest) Reset() { *x = RestartActionRequest{} - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[75] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4548,7 +4724,7 @@ func (x *RestartActionRequest) String() string { func (*RestartActionRequest) ProtoMessage() {} func (x *RestartActionRequest) ProtoReflect() protoreflect.Message { - mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[75] + mi := &file_olivetin_api_v1_olivetin_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4561,7 +4737,7 @@ func (x *RestartActionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RestartActionRequest.ProtoReflect.Descriptor instead. func (*RestartActionRequest) Descriptor() ([]byte, []int) { - return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{75} + return file_olivetin_api_v1_olivetin_proto_rawDescGZIP(), []int{77} } func (x *RestartActionRequest) GetExecutionTrackingId() string { @@ -4631,14 +4807,22 @@ const file_olivetin_api_v1_olivetin_proto_rawDesc = "" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"B\n" + "\x14ActionArgumentChoice\x12\x14\n" + "\x05value\x18\x01 \x01(\tR\x05value\x12\x14\n" + - "\x05title\x18\x02 \x01(\tR\x05title\"\xeb\x01\n" + + "\x05title\x18\x02 \x01(\tR\x05title\"\xfc\x01\n" + + "\x13EntityRelatedAction\x12/\n" + + "\x06action\x18\x01 \x01(\v2\x17.olivetin.api.v1.ActionR\x06action\x12m\n" + + "\x13prefilled_arguments\x18\x02 \x03(\v2<.olivetin.api.v1.EntityRelatedAction.PrefilledArgumentsEntryR\x12prefilledArguments\x1aE\n" + + "\x17PrefilledArgumentsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xce\x02\n" + "\x06Entity\x12\x14\n" + "\x05title\x18\x01 \x01(\tR\x05title\x12\x1d\n" + "\n" + "unique_key\x18\x02 \x01(\tR\tuniqueKey\x12\x12\n" + "\x04type\x18\x03 \x01(\tR\x04type\x12 \n" + "\vdirectories\x18\x04 \x03(\tR\vdirectories\x12;\n" + - "\x06fields\x18\x05 \x03(\v2#.olivetin.api.v1.Entity.FieldsEntryR\x06fields\x1a9\n" + + "\x06fields\x18\x05 \x03(\v2#.olivetin.api.v1.Entity.FieldsEntryR\x06fields\x12M\n" + + "\x0frelated_actions\x18\x06 \x03(\v2$.olivetin.api.v1.EntityRelatedActionR\x0erelatedActions\x12\x12\n" + + "\x04icon\x18\a \x01(\tR\x04icon\x1a9\n" + "\vFieldsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"f\n" + @@ -4907,14 +5091,27 @@ const file_olivetin_api_v1_olivetin_proto_rawDesc = "" + "binding_id\x18\x01 \x01(\tR\tbindingId\"\xa5\x01\n" + "\x18GetActionBindingResponse\x12/\n" + "\x06action\x18\x01 \x01(\v2\x17.olivetin.api.v1.ActionR\x06action\x12X\n" + - "\x12back_to_dashboards\x18\x02 \x03(\v2*.olivetin.api.v1.DashboardNavigationTargetR\x10backToDashboards\"\x14\n" + - "\x12GetEntitiesRequest\"g\n" + + "\x12back_to_dashboards\x18\x02 \x03(\v2*.olivetin.api.v1.DashboardNavigationTargetR\x10backToDashboards\"~\n" + + "\x12GetEntitiesRequest\x12\x1f\n" + + "\ventity_type\x18\x01 \x01(\tR\n" + + "entityType\x12\x16\n" + + "\x06filter\x18\x02 \x01(\tR\x06filter\x12\x12\n" + + "\x04page\x18\x03 \x01(\x05R\x04page\x12\x1b\n" + + "\tpage_size\x18\x04 \x01(\x05R\bpageSize\"g\n" + "\x13GetEntitiesResponse\x12P\n" + - "\x12entity_definitions\x18\x01 \x03(\v2!.olivetin.api.v1.EntityDefinitionR\x11entityDefinitions\"\x8d\x01\n" + + "\x12entity_definitions\x18\x01 \x03(\v2!.olivetin.api.v1.EntityDefinitionR\x11entityDefinitions\"\x8b\x02\n" + "\x10EntityDefinition\x12\x14\n" + "\x05title\x18\x01 \x01(\tR\x05title\x125\n" + "\tinstances\x18\x02 \x03(\v2\x17.olivetin.api.v1.EntityR\tinstances\x12,\n" + - "\x12used_on_dashboards\x18\x03 \x03(\tR\x10usedOnDashboards\"E\n" + + "\x12used_on_dashboards\x18\x03 \x03(\tR\x10usedOnDashboards\x12\x12\n" + + "\x04icon\x18\x04 \x01(\tR\x04icon\x12?\n" + + "\n" + + "properties\x18\x05 \x03(\v2\x1f.olivetin.api.v1.EntityPropertyR\n" + + "properties\x12'\n" + + "\x0ftotal_instances\x18\x06 \x01(\x05R\x0etotalInstances\":\n" + + "\x0eEntityProperty\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\"E\n" + "\x10GetEntityRequest\x12\x1d\n" + "\n" + "unique_key\x18\x01 \x01(\tR\tuniqueKey\x12\x12\n" + @@ -4962,191 +5159,198 @@ func file_olivetin_api_v1_olivetin_proto_rawDescGZIP() []byte { return file_olivetin_api_v1_olivetin_proto_rawDescData } -var file_olivetin_api_v1_olivetin_proto_msgTypes = make([]protoimpl.MessageInfo, 82) +var file_olivetin_api_v1_olivetin_proto_msgTypes = make([]protoimpl.MessageInfo, 85) var file_olivetin_api_v1_olivetin_proto_goTypes = []any{ (*Action)(nil), // 0: olivetin.api.v1.Action (*ActionGroupMembership)(nil), // 1: olivetin.api.v1.ActionGroupMembership (*ActionWebhookExecHint)(nil), // 2: olivetin.api.v1.ActionWebhookExecHint (*ActionArgument)(nil), // 3: olivetin.api.v1.ActionArgument (*ActionArgumentChoice)(nil), // 4: olivetin.api.v1.ActionArgumentChoice - (*Entity)(nil), // 5: olivetin.api.v1.Entity - (*GetDashboardResponse)(nil), // 6: olivetin.api.v1.GetDashboardResponse - (*EffectivePolicy)(nil), // 7: olivetin.api.v1.EffectivePolicy - (*GetDashboardRequest)(nil), // 8: olivetin.api.v1.GetDashboardRequest - (*Dashboard)(nil), // 9: olivetin.api.v1.Dashboard - (*DashboardComponent)(nil), // 10: olivetin.api.v1.DashboardComponent - (*StartActionRequest)(nil), // 11: olivetin.api.v1.StartActionRequest - (*StartActionArgument)(nil), // 12: olivetin.api.v1.StartActionArgument - (*StartActionResponse)(nil), // 13: olivetin.api.v1.StartActionResponse - (*StartActionAndWaitRequest)(nil), // 14: olivetin.api.v1.StartActionAndWaitRequest - (*StartActionAndWaitResponse)(nil), // 15: olivetin.api.v1.StartActionAndWaitResponse - (*StartActionByGetRequest)(nil), // 16: olivetin.api.v1.StartActionByGetRequest - (*StartActionByGetResponse)(nil), // 17: olivetin.api.v1.StartActionByGetResponse - (*StartActionByGetAndWaitRequest)(nil), // 18: olivetin.api.v1.StartActionByGetAndWaitRequest - (*StartActionByGetAndWaitResponse)(nil), // 19: olivetin.api.v1.StartActionByGetAndWaitResponse - (*GetLogsRequest)(nil), // 20: olivetin.api.v1.GetLogsRequest - (*LogEntry)(nil), // 21: olivetin.api.v1.LogEntry - (*GetLogsResponse)(nil), // 22: olivetin.api.v1.GetLogsResponse - (*GetActionLogsRequest)(nil), // 23: olivetin.api.v1.GetActionLogsRequest - (*GetActionLogsResponse)(nil), // 24: olivetin.api.v1.GetActionLogsResponse - (*GetExecutionQueueRequest)(nil), // 25: olivetin.api.v1.GetExecutionQueueRequest - (*ExecutionQueueAction)(nil), // 26: olivetin.api.v1.ExecutionQueueAction - (*ExecutionQueueGroup)(nil), // 27: olivetin.api.v1.ExecutionQueueGroup - (*GetExecutionQueueResponse)(nil), // 28: olivetin.api.v1.GetExecutionQueueResponse - (*ValidateArgumentTypeRequest)(nil), // 29: olivetin.api.v1.ValidateArgumentTypeRequest - (*ValidateArgumentTypeResponse)(nil), // 30: olivetin.api.v1.ValidateArgumentTypeResponse - (*WatchExecutionRequest)(nil), // 31: olivetin.api.v1.WatchExecutionRequest - (*WatchExecutionUpdate)(nil), // 32: olivetin.api.v1.WatchExecutionUpdate - (*ExecutionStatusRequest)(nil), // 33: olivetin.api.v1.ExecutionStatusRequest - (*DashboardNavigationTarget)(nil), // 34: olivetin.api.v1.DashboardNavigationTarget - (*ExecutionStatusResponse)(nil), // 35: olivetin.api.v1.ExecutionStatusResponse - (*WhoAmIRequest)(nil), // 36: olivetin.api.v1.WhoAmIRequest - (*WhoAmIResponse)(nil), // 37: olivetin.api.v1.WhoAmIResponse - (*SosReportRequest)(nil), // 38: olivetin.api.v1.SosReportRequest - (*SosReportResponse)(nil), // 39: olivetin.api.v1.SosReportResponse - (*DumpVarsRequest)(nil), // 40: olivetin.api.v1.DumpVarsRequest - (*DumpVarsResponse)(nil), // 41: olivetin.api.v1.DumpVarsResponse - (*DebugBinding)(nil), // 42: olivetin.api.v1.DebugBinding - (*DumpPublicIdActionMapRequest)(nil), // 43: olivetin.api.v1.DumpPublicIdActionMapRequest - (*DumpPublicIdActionMapResponse)(nil), // 44: olivetin.api.v1.DumpPublicIdActionMapResponse - (*GetReadyzRequest)(nil), // 45: olivetin.api.v1.GetReadyzRequest - (*GetReadyzResponse)(nil), // 46: olivetin.api.v1.GetReadyzResponse - (*EventStreamRequest)(nil), // 47: olivetin.api.v1.EventStreamRequest - (*EventStreamResponse)(nil), // 48: olivetin.api.v1.EventStreamResponse - (*EventOutputChunk)(nil), // 49: olivetin.api.v1.EventOutputChunk - (*EventEntityChanged)(nil), // 50: olivetin.api.v1.EventEntityChanged - (*EventConfigChanged)(nil), // 51: olivetin.api.v1.EventConfigChanged - (*EventHeartbeat)(nil), // 52: olivetin.api.v1.EventHeartbeat - (*EventExecutionFinished)(nil), // 53: olivetin.api.v1.EventExecutionFinished - (*EventExecutionStarted)(nil), // 54: olivetin.api.v1.EventExecutionStarted - (*KillActionRequest)(nil), // 55: olivetin.api.v1.KillActionRequest - (*KillActionResponse)(nil), // 56: olivetin.api.v1.KillActionResponse - (*LocalUserLoginRequest)(nil), // 57: olivetin.api.v1.LocalUserLoginRequest - (*LocalUserLoginResponse)(nil), // 58: olivetin.api.v1.LocalUserLoginResponse - (*PasswordHashRequest)(nil), // 59: olivetin.api.v1.PasswordHashRequest - (*PasswordHashResponse)(nil), // 60: olivetin.api.v1.PasswordHashResponse - (*LogoutRequest)(nil), // 61: olivetin.api.v1.LogoutRequest - (*LogoutResponse)(nil), // 62: olivetin.api.v1.LogoutResponse - (*GetDiagnosticsRequest)(nil), // 63: olivetin.api.v1.GetDiagnosticsRequest - (*GetDiagnosticsResponse)(nil), // 64: olivetin.api.v1.GetDiagnosticsResponse - (*InitRequest)(nil), // 65: olivetin.api.v1.InitRequest - (*InitResponse)(nil), // 66: olivetin.api.v1.InitResponse - (*AdditionalLink)(nil), // 67: olivetin.api.v1.AdditionalLink - (*OAuth2Provider)(nil), // 68: olivetin.api.v1.OAuth2Provider - (*GetActionBindingRequest)(nil), // 69: olivetin.api.v1.GetActionBindingRequest - (*GetActionBindingResponse)(nil), // 70: olivetin.api.v1.GetActionBindingResponse - (*GetEntitiesRequest)(nil), // 71: olivetin.api.v1.GetEntitiesRequest - (*GetEntitiesResponse)(nil), // 72: olivetin.api.v1.GetEntitiesResponse - (*EntityDefinition)(nil), // 73: olivetin.api.v1.EntityDefinition - (*GetEntityRequest)(nil), // 74: olivetin.api.v1.GetEntityRequest - (*RestartActionRequest)(nil), // 75: olivetin.api.v1.RestartActionRequest - nil, // 76: olivetin.api.v1.ActionWebhookExecHint.MatchHeadersEntry - nil, // 77: olivetin.api.v1.ActionWebhookExecHint.MatchQueryEntry - nil, // 78: olivetin.api.v1.ActionArgument.SuggestionsEntry - nil, // 79: olivetin.api.v1.Entity.FieldsEntry - nil, // 80: olivetin.api.v1.DumpVarsResponse.ContentsEntry - nil, // 81: olivetin.api.v1.DumpPublicIdActionMapResponse.ContentsEntry + (*EntityRelatedAction)(nil), // 5: olivetin.api.v1.EntityRelatedAction + (*Entity)(nil), // 6: olivetin.api.v1.Entity + (*GetDashboardResponse)(nil), // 7: olivetin.api.v1.GetDashboardResponse + (*EffectivePolicy)(nil), // 8: olivetin.api.v1.EffectivePolicy + (*GetDashboardRequest)(nil), // 9: olivetin.api.v1.GetDashboardRequest + (*Dashboard)(nil), // 10: olivetin.api.v1.Dashboard + (*DashboardComponent)(nil), // 11: olivetin.api.v1.DashboardComponent + (*StartActionRequest)(nil), // 12: olivetin.api.v1.StartActionRequest + (*StartActionArgument)(nil), // 13: olivetin.api.v1.StartActionArgument + (*StartActionResponse)(nil), // 14: olivetin.api.v1.StartActionResponse + (*StartActionAndWaitRequest)(nil), // 15: olivetin.api.v1.StartActionAndWaitRequest + (*StartActionAndWaitResponse)(nil), // 16: olivetin.api.v1.StartActionAndWaitResponse + (*StartActionByGetRequest)(nil), // 17: olivetin.api.v1.StartActionByGetRequest + (*StartActionByGetResponse)(nil), // 18: olivetin.api.v1.StartActionByGetResponse + (*StartActionByGetAndWaitRequest)(nil), // 19: olivetin.api.v1.StartActionByGetAndWaitRequest + (*StartActionByGetAndWaitResponse)(nil), // 20: olivetin.api.v1.StartActionByGetAndWaitResponse + (*GetLogsRequest)(nil), // 21: olivetin.api.v1.GetLogsRequest + (*LogEntry)(nil), // 22: olivetin.api.v1.LogEntry + (*GetLogsResponse)(nil), // 23: olivetin.api.v1.GetLogsResponse + (*GetActionLogsRequest)(nil), // 24: olivetin.api.v1.GetActionLogsRequest + (*GetActionLogsResponse)(nil), // 25: olivetin.api.v1.GetActionLogsResponse + (*GetExecutionQueueRequest)(nil), // 26: olivetin.api.v1.GetExecutionQueueRequest + (*ExecutionQueueAction)(nil), // 27: olivetin.api.v1.ExecutionQueueAction + (*ExecutionQueueGroup)(nil), // 28: olivetin.api.v1.ExecutionQueueGroup + (*GetExecutionQueueResponse)(nil), // 29: olivetin.api.v1.GetExecutionQueueResponse + (*ValidateArgumentTypeRequest)(nil), // 30: olivetin.api.v1.ValidateArgumentTypeRequest + (*ValidateArgumentTypeResponse)(nil), // 31: olivetin.api.v1.ValidateArgumentTypeResponse + (*WatchExecutionRequest)(nil), // 32: olivetin.api.v1.WatchExecutionRequest + (*WatchExecutionUpdate)(nil), // 33: olivetin.api.v1.WatchExecutionUpdate + (*ExecutionStatusRequest)(nil), // 34: olivetin.api.v1.ExecutionStatusRequest + (*DashboardNavigationTarget)(nil), // 35: olivetin.api.v1.DashboardNavigationTarget + (*ExecutionStatusResponse)(nil), // 36: olivetin.api.v1.ExecutionStatusResponse + (*WhoAmIRequest)(nil), // 37: olivetin.api.v1.WhoAmIRequest + (*WhoAmIResponse)(nil), // 38: olivetin.api.v1.WhoAmIResponse + (*SosReportRequest)(nil), // 39: olivetin.api.v1.SosReportRequest + (*SosReportResponse)(nil), // 40: olivetin.api.v1.SosReportResponse + (*DumpVarsRequest)(nil), // 41: olivetin.api.v1.DumpVarsRequest + (*DumpVarsResponse)(nil), // 42: olivetin.api.v1.DumpVarsResponse + (*DebugBinding)(nil), // 43: olivetin.api.v1.DebugBinding + (*DumpPublicIdActionMapRequest)(nil), // 44: olivetin.api.v1.DumpPublicIdActionMapRequest + (*DumpPublicIdActionMapResponse)(nil), // 45: olivetin.api.v1.DumpPublicIdActionMapResponse + (*GetReadyzRequest)(nil), // 46: olivetin.api.v1.GetReadyzRequest + (*GetReadyzResponse)(nil), // 47: olivetin.api.v1.GetReadyzResponse + (*EventStreamRequest)(nil), // 48: olivetin.api.v1.EventStreamRequest + (*EventStreamResponse)(nil), // 49: olivetin.api.v1.EventStreamResponse + (*EventOutputChunk)(nil), // 50: olivetin.api.v1.EventOutputChunk + (*EventEntityChanged)(nil), // 51: olivetin.api.v1.EventEntityChanged + (*EventConfigChanged)(nil), // 52: olivetin.api.v1.EventConfigChanged + (*EventHeartbeat)(nil), // 53: olivetin.api.v1.EventHeartbeat + (*EventExecutionFinished)(nil), // 54: olivetin.api.v1.EventExecutionFinished + (*EventExecutionStarted)(nil), // 55: olivetin.api.v1.EventExecutionStarted + (*KillActionRequest)(nil), // 56: olivetin.api.v1.KillActionRequest + (*KillActionResponse)(nil), // 57: olivetin.api.v1.KillActionResponse + (*LocalUserLoginRequest)(nil), // 58: olivetin.api.v1.LocalUserLoginRequest + (*LocalUserLoginResponse)(nil), // 59: olivetin.api.v1.LocalUserLoginResponse + (*PasswordHashRequest)(nil), // 60: olivetin.api.v1.PasswordHashRequest + (*PasswordHashResponse)(nil), // 61: olivetin.api.v1.PasswordHashResponse + (*LogoutRequest)(nil), // 62: olivetin.api.v1.LogoutRequest + (*LogoutResponse)(nil), // 63: olivetin.api.v1.LogoutResponse + (*GetDiagnosticsRequest)(nil), // 64: olivetin.api.v1.GetDiagnosticsRequest + (*GetDiagnosticsResponse)(nil), // 65: olivetin.api.v1.GetDiagnosticsResponse + (*InitRequest)(nil), // 66: olivetin.api.v1.InitRequest + (*InitResponse)(nil), // 67: olivetin.api.v1.InitResponse + (*AdditionalLink)(nil), // 68: olivetin.api.v1.AdditionalLink + (*OAuth2Provider)(nil), // 69: olivetin.api.v1.OAuth2Provider + (*GetActionBindingRequest)(nil), // 70: olivetin.api.v1.GetActionBindingRequest + (*GetActionBindingResponse)(nil), // 71: olivetin.api.v1.GetActionBindingResponse + (*GetEntitiesRequest)(nil), // 72: olivetin.api.v1.GetEntitiesRequest + (*GetEntitiesResponse)(nil), // 73: olivetin.api.v1.GetEntitiesResponse + (*EntityDefinition)(nil), // 74: olivetin.api.v1.EntityDefinition + (*EntityProperty)(nil), // 75: olivetin.api.v1.EntityProperty + (*GetEntityRequest)(nil), // 76: olivetin.api.v1.GetEntityRequest + (*RestartActionRequest)(nil), // 77: olivetin.api.v1.RestartActionRequest + nil, // 78: olivetin.api.v1.ActionWebhookExecHint.MatchHeadersEntry + nil, // 79: olivetin.api.v1.ActionWebhookExecHint.MatchQueryEntry + nil, // 80: olivetin.api.v1.ActionArgument.SuggestionsEntry + nil, // 81: olivetin.api.v1.EntityRelatedAction.PrefilledArgumentsEntry + nil, // 82: olivetin.api.v1.Entity.FieldsEntry + nil, // 83: olivetin.api.v1.DumpVarsResponse.ContentsEntry + nil, // 84: olivetin.api.v1.DumpPublicIdActionMapResponse.ContentsEntry } var file_olivetin_api_v1_olivetin_proto_depIdxs = []int32{ 3, // 0: olivetin.api.v1.Action.arguments:type_name -> olivetin.api.v1.ActionArgument 2, // 1: olivetin.api.v1.Action.exec_on_webhooks:type_name -> olivetin.api.v1.ActionWebhookExecHint 1, // 2: olivetin.api.v1.Action.groups:type_name -> olivetin.api.v1.ActionGroupMembership - 76, // 3: olivetin.api.v1.ActionWebhookExecHint.match_headers:type_name -> olivetin.api.v1.ActionWebhookExecHint.MatchHeadersEntry - 77, // 4: olivetin.api.v1.ActionWebhookExecHint.match_query:type_name -> olivetin.api.v1.ActionWebhookExecHint.MatchQueryEntry + 78, // 3: olivetin.api.v1.ActionWebhookExecHint.match_headers:type_name -> olivetin.api.v1.ActionWebhookExecHint.MatchHeadersEntry + 79, // 4: olivetin.api.v1.ActionWebhookExecHint.match_query:type_name -> olivetin.api.v1.ActionWebhookExecHint.MatchQueryEntry 4, // 5: olivetin.api.v1.ActionArgument.choices:type_name -> olivetin.api.v1.ActionArgumentChoice - 78, // 6: olivetin.api.v1.ActionArgument.suggestions:type_name -> olivetin.api.v1.ActionArgument.SuggestionsEntry - 79, // 7: olivetin.api.v1.Entity.fields:type_name -> olivetin.api.v1.Entity.FieldsEntry - 9, // 8: olivetin.api.v1.GetDashboardResponse.dashboard:type_name -> olivetin.api.v1.Dashboard - 10, // 9: olivetin.api.v1.Dashboard.contents:type_name -> olivetin.api.v1.DashboardComponent - 10, // 10: olivetin.api.v1.DashboardComponent.contents:type_name -> olivetin.api.v1.DashboardComponent - 0, // 11: olivetin.api.v1.DashboardComponent.action:type_name -> olivetin.api.v1.Action - 12, // 12: olivetin.api.v1.StartActionRequest.arguments:type_name -> olivetin.api.v1.StartActionArgument - 12, // 13: olivetin.api.v1.StartActionAndWaitRequest.arguments:type_name -> olivetin.api.v1.StartActionArgument - 21, // 14: olivetin.api.v1.StartActionAndWaitResponse.log_entry:type_name -> olivetin.api.v1.LogEntry - 21, // 15: olivetin.api.v1.StartActionByGetAndWaitResponse.log_entry:type_name -> olivetin.api.v1.LogEntry - 12, // 16: olivetin.api.v1.LogEntry.arguments:type_name -> olivetin.api.v1.StartActionArgument - 21, // 17: olivetin.api.v1.GetLogsResponse.logs:type_name -> olivetin.api.v1.LogEntry - 21, // 18: olivetin.api.v1.GetActionLogsResponse.logs:type_name -> olivetin.api.v1.LogEntry - 21, // 19: olivetin.api.v1.ExecutionQueueAction.entries:type_name -> olivetin.api.v1.LogEntry - 26, // 20: olivetin.api.v1.ExecutionQueueGroup.actions:type_name -> olivetin.api.v1.ExecutionQueueAction - 27, // 21: olivetin.api.v1.GetExecutionQueueResponse.groups:type_name -> olivetin.api.v1.ExecutionQueueGroup - 21, // 22: olivetin.api.v1.ExecutionStatusResponse.log_entry:type_name -> olivetin.api.v1.LogEntry - 34, // 23: olivetin.api.v1.ExecutionStatusResponse.back_to_dashboards:type_name -> olivetin.api.v1.DashboardNavigationTarget - 80, // 24: olivetin.api.v1.DumpVarsResponse.contents:type_name -> olivetin.api.v1.DumpVarsResponse.ContentsEntry - 81, // 25: olivetin.api.v1.DumpPublicIdActionMapResponse.contents:type_name -> olivetin.api.v1.DumpPublicIdActionMapResponse.ContentsEntry - 50, // 26: olivetin.api.v1.EventStreamResponse.entity_changed:type_name -> olivetin.api.v1.EventEntityChanged - 51, // 27: olivetin.api.v1.EventStreamResponse.config_changed:type_name -> olivetin.api.v1.EventConfigChanged - 53, // 28: olivetin.api.v1.EventStreamResponse.execution_finished:type_name -> olivetin.api.v1.EventExecutionFinished - 54, // 29: olivetin.api.v1.EventStreamResponse.execution_started:type_name -> olivetin.api.v1.EventExecutionStarted - 49, // 30: olivetin.api.v1.EventStreamResponse.output_chunk:type_name -> olivetin.api.v1.EventOutputChunk - 52, // 31: olivetin.api.v1.EventStreamResponse.heartbeat:type_name -> olivetin.api.v1.EventHeartbeat - 21, // 32: olivetin.api.v1.EventExecutionFinished.log_entry:type_name -> olivetin.api.v1.LogEntry - 21, // 33: olivetin.api.v1.EventExecutionStarted.log_entry:type_name -> olivetin.api.v1.LogEntry - 68, // 34: olivetin.api.v1.InitResponse.oAuth2Providers:type_name -> olivetin.api.v1.OAuth2Provider - 67, // 35: olivetin.api.v1.InitResponse.additionalLinks:type_name -> olivetin.api.v1.AdditionalLink - 7, // 36: olivetin.api.v1.InitResponse.effective_policy:type_name -> olivetin.api.v1.EffectivePolicy - 0, // 37: olivetin.api.v1.GetActionBindingResponse.action:type_name -> olivetin.api.v1.Action - 34, // 38: olivetin.api.v1.GetActionBindingResponse.back_to_dashboards:type_name -> olivetin.api.v1.DashboardNavigationTarget - 73, // 39: olivetin.api.v1.GetEntitiesResponse.entity_definitions:type_name -> olivetin.api.v1.EntityDefinition - 5, // 40: olivetin.api.v1.EntityDefinition.instances:type_name -> olivetin.api.v1.Entity - 42, // 41: olivetin.api.v1.DumpPublicIdActionMapResponse.ContentsEntry.value:type_name -> olivetin.api.v1.DebugBinding - 8, // 42: olivetin.api.v1.OliveTinApiService.GetDashboard:input_type -> olivetin.api.v1.GetDashboardRequest - 11, // 43: olivetin.api.v1.OliveTinApiService.StartAction:input_type -> olivetin.api.v1.StartActionRequest - 14, // 44: olivetin.api.v1.OliveTinApiService.StartActionAndWait:input_type -> olivetin.api.v1.StartActionAndWaitRequest - 16, // 45: olivetin.api.v1.OliveTinApiService.StartActionByGet:input_type -> olivetin.api.v1.StartActionByGetRequest - 18, // 46: olivetin.api.v1.OliveTinApiService.StartActionByGetAndWait:input_type -> olivetin.api.v1.StartActionByGetAndWaitRequest - 75, // 47: olivetin.api.v1.OliveTinApiService.RestartAction:input_type -> olivetin.api.v1.RestartActionRequest - 55, // 48: olivetin.api.v1.OliveTinApiService.KillAction:input_type -> olivetin.api.v1.KillActionRequest - 33, // 49: olivetin.api.v1.OliveTinApiService.ExecutionStatus:input_type -> olivetin.api.v1.ExecutionStatusRequest - 20, // 50: olivetin.api.v1.OliveTinApiService.GetLogs:input_type -> olivetin.api.v1.GetLogsRequest - 23, // 51: olivetin.api.v1.OliveTinApiService.GetActionLogs:input_type -> olivetin.api.v1.GetActionLogsRequest - 25, // 52: olivetin.api.v1.OliveTinApiService.GetExecutionQueue:input_type -> olivetin.api.v1.GetExecutionQueueRequest - 29, // 53: olivetin.api.v1.OliveTinApiService.ValidateArgumentType:input_type -> olivetin.api.v1.ValidateArgumentTypeRequest - 36, // 54: olivetin.api.v1.OliveTinApiService.WhoAmI:input_type -> olivetin.api.v1.WhoAmIRequest - 38, // 55: olivetin.api.v1.OliveTinApiService.SosReport:input_type -> olivetin.api.v1.SosReportRequest - 40, // 56: olivetin.api.v1.OliveTinApiService.DumpVars:input_type -> olivetin.api.v1.DumpVarsRequest - 43, // 57: olivetin.api.v1.OliveTinApiService.DumpPublicIdActionMap:input_type -> olivetin.api.v1.DumpPublicIdActionMapRequest - 45, // 58: olivetin.api.v1.OliveTinApiService.GetReadyz:input_type -> olivetin.api.v1.GetReadyzRequest - 57, // 59: olivetin.api.v1.OliveTinApiService.LocalUserLogin:input_type -> olivetin.api.v1.LocalUserLoginRequest - 59, // 60: olivetin.api.v1.OliveTinApiService.PasswordHash:input_type -> olivetin.api.v1.PasswordHashRequest - 61, // 61: olivetin.api.v1.OliveTinApiService.Logout:input_type -> olivetin.api.v1.LogoutRequest - 47, // 62: olivetin.api.v1.OliveTinApiService.EventStream:input_type -> olivetin.api.v1.EventStreamRequest - 63, // 63: olivetin.api.v1.OliveTinApiService.GetDiagnostics:input_type -> olivetin.api.v1.GetDiagnosticsRequest - 65, // 64: olivetin.api.v1.OliveTinApiService.Init:input_type -> olivetin.api.v1.InitRequest - 69, // 65: olivetin.api.v1.OliveTinApiService.GetActionBinding:input_type -> olivetin.api.v1.GetActionBindingRequest - 71, // 66: olivetin.api.v1.OliveTinApiService.GetEntities:input_type -> olivetin.api.v1.GetEntitiesRequest - 74, // 67: olivetin.api.v1.OliveTinApiService.GetEntity:input_type -> olivetin.api.v1.GetEntityRequest - 6, // 68: olivetin.api.v1.OliveTinApiService.GetDashboard:output_type -> olivetin.api.v1.GetDashboardResponse - 13, // 69: olivetin.api.v1.OliveTinApiService.StartAction:output_type -> olivetin.api.v1.StartActionResponse - 15, // 70: olivetin.api.v1.OliveTinApiService.StartActionAndWait:output_type -> olivetin.api.v1.StartActionAndWaitResponse - 17, // 71: olivetin.api.v1.OliveTinApiService.StartActionByGet:output_type -> olivetin.api.v1.StartActionByGetResponse - 19, // 72: olivetin.api.v1.OliveTinApiService.StartActionByGetAndWait:output_type -> olivetin.api.v1.StartActionByGetAndWaitResponse - 13, // 73: olivetin.api.v1.OliveTinApiService.RestartAction:output_type -> olivetin.api.v1.StartActionResponse - 56, // 74: olivetin.api.v1.OliveTinApiService.KillAction:output_type -> olivetin.api.v1.KillActionResponse - 35, // 75: olivetin.api.v1.OliveTinApiService.ExecutionStatus:output_type -> olivetin.api.v1.ExecutionStatusResponse - 22, // 76: olivetin.api.v1.OliveTinApiService.GetLogs:output_type -> olivetin.api.v1.GetLogsResponse - 24, // 77: olivetin.api.v1.OliveTinApiService.GetActionLogs:output_type -> olivetin.api.v1.GetActionLogsResponse - 28, // 78: olivetin.api.v1.OliveTinApiService.GetExecutionQueue:output_type -> olivetin.api.v1.GetExecutionQueueResponse - 30, // 79: olivetin.api.v1.OliveTinApiService.ValidateArgumentType:output_type -> olivetin.api.v1.ValidateArgumentTypeResponse - 37, // 80: olivetin.api.v1.OliveTinApiService.WhoAmI:output_type -> olivetin.api.v1.WhoAmIResponse - 39, // 81: olivetin.api.v1.OliveTinApiService.SosReport:output_type -> olivetin.api.v1.SosReportResponse - 41, // 82: olivetin.api.v1.OliveTinApiService.DumpVars:output_type -> olivetin.api.v1.DumpVarsResponse - 44, // 83: olivetin.api.v1.OliveTinApiService.DumpPublicIdActionMap:output_type -> olivetin.api.v1.DumpPublicIdActionMapResponse - 46, // 84: olivetin.api.v1.OliveTinApiService.GetReadyz:output_type -> olivetin.api.v1.GetReadyzResponse - 58, // 85: olivetin.api.v1.OliveTinApiService.LocalUserLogin:output_type -> olivetin.api.v1.LocalUserLoginResponse - 60, // 86: olivetin.api.v1.OliveTinApiService.PasswordHash:output_type -> olivetin.api.v1.PasswordHashResponse - 62, // 87: olivetin.api.v1.OliveTinApiService.Logout:output_type -> olivetin.api.v1.LogoutResponse - 48, // 88: olivetin.api.v1.OliveTinApiService.EventStream:output_type -> olivetin.api.v1.EventStreamResponse - 64, // 89: olivetin.api.v1.OliveTinApiService.GetDiagnostics:output_type -> olivetin.api.v1.GetDiagnosticsResponse - 66, // 90: olivetin.api.v1.OliveTinApiService.Init:output_type -> olivetin.api.v1.InitResponse - 70, // 91: olivetin.api.v1.OliveTinApiService.GetActionBinding:output_type -> olivetin.api.v1.GetActionBindingResponse - 72, // 92: olivetin.api.v1.OliveTinApiService.GetEntities:output_type -> olivetin.api.v1.GetEntitiesResponse - 5, // 93: olivetin.api.v1.OliveTinApiService.GetEntity:output_type -> olivetin.api.v1.Entity - 68, // [68:94] is the sub-list for method output_type - 42, // [42:68] is the sub-list for method input_type - 42, // [42:42] is the sub-list for extension type_name - 42, // [42:42] is the sub-list for extension extendee - 0, // [0:42] is the sub-list for field type_name + 80, // 6: olivetin.api.v1.ActionArgument.suggestions:type_name -> olivetin.api.v1.ActionArgument.SuggestionsEntry + 0, // 7: olivetin.api.v1.EntityRelatedAction.action:type_name -> olivetin.api.v1.Action + 81, // 8: olivetin.api.v1.EntityRelatedAction.prefilled_arguments:type_name -> olivetin.api.v1.EntityRelatedAction.PrefilledArgumentsEntry + 82, // 9: olivetin.api.v1.Entity.fields:type_name -> olivetin.api.v1.Entity.FieldsEntry + 5, // 10: olivetin.api.v1.Entity.related_actions:type_name -> olivetin.api.v1.EntityRelatedAction + 10, // 11: olivetin.api.v1.GetDashboardResponse.dashboard:type_name -> olivetin.api.v1.Dashboard + 11, // 12: olivetin.api.v1.Dashboard.contents:type_name -> olivetin.api.v1.DashboardComponent + 11, // 13: olivetin.api.v1.DashboardComponent.contents:type_name -> olivetin.api.v1.DashboardComponent + 0, // 14: olivetin.api.v1.DashboardComponent.action:type_name -> olivetin.api.v1.Action + 13, // 15: olivetin.api.v1.StartActionRequest.arguments:type_name -> olivetin.api.v1.StartActionArgument + 13, // 16: olivetin.api.v1.StartActionAndWaitRequest.arguments:type_name -> olivetin.api.v1.StartActionArgument + 22, // 17: olivetin.api.v1.StartActionAndWaitResponse.log_entry:type_name -> olivetin.api.v1.LogEntry + 22, // 18: olivetin.api.v1.StartActionByGetAndWaitResponse.log_entry:type_name -> olivetin.api.v1.LogEntry + 13, // 19: olivetin.api.v1.LogEntry.arguments:type_name -> olivetin.api.v1.StartActionArgument + 22, // 20: olivetin.api.v1.GetLogsResponse.logs:type_name -> olivetin.api.v1.LogEntry + 22, // 21: olivetin.api.v1.GetActionLogsResponse.logs:type_name -> olivetin.api.v1.LogEntry + 22, // 22: olivetin.api.v1.ExecutionQueueAction.entries:type_name -> olivetin.api.v1.LogEntry + 27, // 23: olivetin.api.v1.ExecutionQueueGroup.actions:type_name -> olivetin.api.v1.ExecutionQueueAction + 28, // 24: olivetin.api.v1.GetExecutionQueueResponse.groups:type_name -> olivetin.api.v1.ExecutionQueueGroup + 22, // 25: olivetin.api.v1.ExecutionStatusResponse.log_entry:type_name -> olivetin.api.v1.LogEntry + 35, // 26: olivetin.api.v1.ExecutionStatusResponse.back_to_dashboards:type_name -> olivetin.api.v1.DashboardNavigationTarget + 83, // 27: olivetin.api.v1.DumpVarsResponse.contents:type_name -> olivetin.api.v1.DumpVarsResponse.ContentsEntry + 84, // 28: olivetin.api.v1.DumpPublicIdActionMapResponse.contents:type_name -> olivetin.api.v1.DumpPublicIdActionMapResponse.ContentsEntry + 51, // 29: olivetin.api.v1.EventStreamResponse.entity_changed:type_name -> olivetin.api.v1.EventEntityChanged + 52, // 30: olivetin.api.v1.EventStreamResponse.config_changed:type_name -> olivetin.api.v1.EventConfigChanged + 54, // 31: olivetin.api.v1.EventStreamResponse.execution_finished:type_name -> olivetin.api.v1.EventExecutionFinished + 55, // 32: olivetin.api.v1.EventStreamResponse.execution_started:type_name -> olivetin.api.v1.EventExecutionStarted + 50, // 33: olivetin.api.v1.EventStreamResponse.output_chunk:type_name -> olivetin.api.v1.EventOutputChunk + 53, // 34: olivetin.api.v1.EventStreamResponse.heartbeat:type_name -> olivetin.api.v1.EventHeartbeat + 22, // 35: olivetin.api.v1.EventExecutionFinished.log_entry:type_name -> olivetin.api.v1.LogEntry + 22, // 36: olivetin.api.v1.EventExecutionStarted.log_entry:type_name -> olivetin.api.v1.LogEntry + 69, // 37: olivetin.api.v1.InitResponse.oAuth2Providers:type_name -> olivetin.api.v1.OAuth2Provider + 68, // 38: olivetin.api.v1.InitResponse.additionalLinks:type_name -> olivetin.api.v1.AdditionalLink + 8, // 39: olivetin.api.v1.InitResponse.effective_policy:type_name -> olivetin.api.v1.EffectivePolicy + 0, // 40: olivetin.api.v1.GetActionBindingResponse.action:type_name -> olivetin.api.v1.Action + 35, // 41: olivetin.api.v1.GetActionBindingResponse.back_to_dashboards:type_name -> olivetin.api.v1.DashboardNavigationTarget + 74, // 42: olivetin.api.v1.GetEntitiesResponse.entity_definitions:type_name -> olivetin.api.v1.EntityDefinition + 6, // 43: olivetin.api.v1.EntityDefinition.instances:type_name -> olivetin.api.v1.Entity + 75, // 44: olivetin.api.v1.EntityDefinition.properties:type_name -> olivetin.api.v1.EntityProperty + 43, // 45: olivetin.api.v1.DumpPublicIdActionMapResponse.ContentsEntry.value:type_name -> olivetin.api.v1.DebugBinding + 9, // 46: olivetin.api.v1.OliveTinApiService.GetDashboard:input_type -> olivetin.api.v1.GetDashboardRequest + 12, // 47: olivetin.api.v1.OliveTinApiService.StartAction:input_type -> olivetin.api.v1.StartActionRequest + 15, // 48: olivetin.api.v1.OliveTinApiService.StartActionAndWait:input_type -> olivetin.api.v1.StartActionAndWaitRequest + 17, // 49: olivetin.api.v1.OliveTinApiService.StartActionByGet:input_type -> olivetin.api.v1.StartActionByGetRequest + 19, // 50: olivetin.api.v1.OliveTinApiService.StartActionByGetAndWait:input_type -> olivetin.api.v1.StartActionByGetAndWaitRequest + 77, // 51: olivetin.api.v1.OliveTinApiService.RestartAction:input_type -> olivetin.api.v1.RestartActionRequest + 56, // 52: olivetin.api.v1.OliveTinApiService.KillAction:input_type -> olivetin.api.v1.KillActionRequest + 34, // 53: olivetin.api.v1.OliveTinApiService.ExecutionStatus:input_type -> olivetin.api.v1.ExecutionStatusRequest + 21, // 54: olivetin.api.v1.OliveTinApiService.GetLogs:input_type -> olivetin.api.v1.GetLogsRequest + 24, // 55: olivetin.api.v1.OliveTinApiService.GetActionLogs:input_type -> olivetin.api.v1.GetActionLogsRequest + 26, // 56: olivetin.api.v1.OliveTinApiService.GetExecutionQueue:input_type -> olivetin.api.v1.GetExecutionQueueRequest + 30, // 57: olivetin.api.v1.OliveTinApiService.ValidateArgumentType:input_type -> olivetin.api.v1.ValidateArgumentTypeRequest + 37, // 58: olivetin.api.v1.OliveTinApiService.WhoAmI:input_type -> olivetin.api.v1.WhoAmIRequest + 39, // 59: olivetin.api.v1.OliveTinApiService.SosReport:input_type -> olivetin.api.v1.SosReportRequest + 41, // 60: olivetin.api.v1.OliveTinApiService.DumpVars:input_type -> olivetin.api.v1.DumpVarsRequest + 44, // 61: olivetin.api.v1.OliveTinApiService.DumpPublicIdActionMap:input_type -> olivetin.api.v1.DumpPublicIdActionMapRequest + 46, // 62: olivetin.api.v1.OliveTinApiService.GetReadyz:input_type -> olivetin.api.v1.GetReadyzRequest + 58, // 63: olivetin.api.v1.OliveTinApiService.LocalUserLogin:input_type -> olivetin.api.v1.LocalUserLoginRequest + 60, // 64: olivetin.api.v1.OliveTinApiService.PasswordHash:input_type -> olivetin.api.v1.PasswordHashRequest + 62, // 65: olivetin.api.v1.OliveTinApiService.Logout:input_type -> olivetin.api.v1.LogoutRequest + 48, // 66: olivetin.api.v1.OliveTinApiService.EventStream:input_type -> olivetin.api.v1.EventStreamRequest + 64, // 67: olivetin.api.v1.OliveTinApiService.GetDiagnostics:input_type -> olivetin.api.v1.GetDiagnosticsRequest + 66, // 68: olivetin.api.v1.OliveTinApiService.Init:input_type -> olivetin.api.v1.InitRequest + 70, // 69: olivetin.api.v1.OliveTinApiService.GetActionBinding:input_type -> olivetin.api.v1.GetActionBindingRequest + 72, // 70: olivetin.api.v1.OliveTinApiService.GetEntities:input_type -> olivetin.api.v1.GetEntitiesRequest + 76, // 71: olivetin.api.v1.OliveTinApiService.GetEntity:input_type -> olivetin.api.v1.GetEntityRequest + 7, // 72: olivetin.api.v1.OliveTinApiService.GetDashboard:output_type -> olivetin.api.v1.GetDashboardResponse + 14, // 73: olivetin.api.v1.OliveTinApiService.StartAction:output_type -> olivetin.api.v1.StartActionResponse + 16, // 74: olivetin.api.v1.OliveTinApiService.StartActionAndWait:output_type -> olivetin.api.v1.StartActionAndWaitResponse + 18, // 75: olivetin.api.v1.OliveTinApiService.StartActionByGet:output_type -> olivetin.api.v1.StartActionByGetResponse + 20, // 76: olivetin.api.v1.OliveTinApiService.StartActionByGetAndWait:output_type -> olivetin.api.v1.StartActionByGetAndWaitResponse + 14, // 77: olivetin.api.v1.OliveTinApiService.RestartAction:output_type -> olivetin.api.v1.StartActionResponse + 57, // 78: olivetin.api.v1.OliveTinApiService.KillAction:output_type -> olivetin.api.v1.KillActionResponse + 36, // 79: olivetin.api.v1.OliveTinApiService.ExecutionStatus:output_type -> olivetin.api.v1.ExecutionStatusResponse + 23, // 80: olivetin.api.v1.OliveTinApiService.GetLogs:output_type -> olivetin.api.v1.GetLogsResponse + 25, // 81: olivetin.api.v1.OliveTinApiService.GetActionLogs:output_type -> olivetin.api.v1.GetActionLogsResponse + 29, // 82: olivetin.api.v1.OliveTinApiService.GetExecutionQueue:output_type -> olivetin.api.v1.GetExecutionQueueResponse + 31, // 83: olivetin.api.v1.OliveTinApiService.ValidateArgumentType:output_type -> olivetin.api.v1.ValidateArgumentTypeResponse + 38, // 84: olivetin.api.v1.OliveTinApiService.WhoAmI:output_type -> olivetin.api.v1.WhoAmIResponse + 40, // 85: olivetin.api.v1.OliveTinApiService.SosReport:output_type -> olivetin.api.v1.SosReportResponse + 42, // 86: olivetin.api.v1.OliveTinApiService.DumpVars:output_type -> olivetin.api.v1.DumpVarsResponse + 45, // 87: olivetin.api.v1.OliveTinApiService.DumpPublicIdActionMap:output_type -> olivetin.api.v1.DumpPublicIdActionMapResponse + 47, // 88: olivetin.api.v1.OliveTinApiService.GetReadyz:output_type -> olivetin.api.v1.GetReadyzResponse + 59, // 89: olivetin.api.v1.OliveTinApiService.LocalUserLogin:output_type -> olivetin.api.v1.LocalUserLoginResponse + 61, // 90: olivetin.api.v1.OliveTinApiService.PasswordHash:output_type -> olivetin.api.v1.PasswordHashResponse + 63, // 91: olivetin.api.v1.OliveTinApiService.Logout:output_type -> olivetin.api.v1.LogoutResponse + 49, // 92: olivetin.api.v1.OliveTinApiService.EventStream:output_type -> olivetin.api.v1.EventStreamResponse + 65, // 93: olivetin.api.v1.OliveTinApiService.GetDiagnostics:output_type -> olivetin.api.v1.GetDiagnosticsResponse + 67, // 94: olivetin.api.v1.OliveTinApiService.Init:output_type -> olivetin.api.v1.InitResponse + 71, // 95: olivetin.api.v1.OliveTinApiService.GetActionBinding:output_type -> olivetin.api.v1.GetActionBindingResponse + 73, // 96: olivetin.api.v1.OliveTinApiService.GetEntities:output_type -> olivetin.api.v1.GetEntitiesResponse + 6, // 97: olivetin.api.v1.OliveTinApiService.GetEntity:output_type -> olivetin.api.v1.Entity + 72, // [72:98] is the sub-list for method output_type + 46, // [46:72] is the sub-list for method input_type + 46, // [46:46] is the sub-list for extension type_name + 46, // [46:46] is the sub-list for extension extendee + 0, // [0:46] is the sub-list for field type_name } func init() { file_olivetin_api_v1_olivetin_proto_init() } @@ -5154,7 +5358,7 @@ func file_olivetin_api_v1_olivetin_proto_init() { if File_olivetin_api_v1_olivetin_proto != nil { return } - file_olivetin_api_v1_olivetin_proto_msgTypes[48].OneofWrappers = []any{ + file_olivetin_api_v1_olivetin_proto_msgTypes[49].OneofWrappers = []any{ (*EventStreamResponse_EntityChanged)(nil), (*EventStreamResponse_ConfigChanged)(nil), (*EventStreamResponse_ExecutionFinished)(nil), @@ -5168,7 +5372,7 @@ func file_olivetin_api_v1_olivetin_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_olivetin_api_v1_olivetin_proto_rawDesc), len(file_olivetin_api_v1_olivetin_proto_rawDesc)), NumEnums: 0, - NumMessages: 82, + NumMessages: 85, NumExtensions: 0, NumServices: 1, }, diff --git a/service/internal/api/api.go b/service/internal/api/api.go index c43a4a6..77cd945 100644 --- a/service/internal/api/api.go +++ b/service/internal/api/api.go @@ -4,9 +4,14 @@ import ( ctx "context" "encoding/json" "errors" + "fmt" + "net/http" "os" "path" "sort" + "strings" + "sync" + "time" "connectrpc.com/connect" "google.golang.org/protobuf/encoding/protojson" @@ -16,11 +21,6 @@ import ( "github.com/google/uuid" log "github.com/sirupsen/logrus" - "fmt" - "net/http" - "sync" - "time" - acl "github.com/OliveTin/OliveTin/internal/acl" auth "github.com/OliveTin/OliveTin/internal/auth" authpublic "github.com/OliveTin/OliveTin/internal/auth/authpublic" @@ -1377,21 +1377,7 @@ func (api *oliveTinAPI) GetEntities(ctx ctx.Context, req *connect.Request[apiv1. } entityMap := entities.GetEntities() - entityNames := make([]string, 0, len(entityMap)) - for name := range entityMap { - entityNames = append(entityNames, name) - } - sort.Strings(entityNames) - - entityDefinitions := make([]*apiv1.EntityDefinition, 0, len(entityNames)) - for _, name := range entityNames { - def := &apiv1.EntityDefinition{ - Title: name, - UsedOnDashboards: findDashboardsForEntity(name, api.cfg.Dashboards), - Instances: buildSortedEntityInstances(name, entityMap[name]), - } - entityDefinitions = append(entityDefinitions, def) - } + entityDefinitions := api.buildEntityDefinitionsResponse(req.Msg, entityMap) res := &apiv1.GetEntitiesResponse{ EntityDefinitions: entityDefinitions, @@ -1400,7 +1386,7 @@ func (api *oliveTinAPI) GetEntities(ctx ctx.Context, req *connect.Request[apiv1. return connect.NewResponse(res), nil } -func buildSortedEntityInstances(entityType string, entityInstances map[string]*entities.Entity) []*apiv1.Entity { +func buildSortedEntityInstances(entityType string, entityInstances map[string]*entities.Entity, properties []config.EntityProperty) []*apiv1.Entity { instanceKeys := make([]string, 0, len(entityInstances)) for key := range entityInstances { instanceKeys = append(instanceKeys, key) @@ -1414,6 +1400,7 @@ func buildSortedEntityInstances(entityType string, entityInstances map[string]*e Title: e.Title, UniqueKey: e.UniqueKey, Type: entityType, + Fields: entityListFields(e.Data, properties), }) } return instances @@ -1515,17 +1502,100 @@ func (api *oliveTinAPI) GetEntity(ctx ctx.Context, req *connect.Request[apiv1.Ge return nil, connect.NewError(connect.CodeNotFound, fmt.Errorf("entity with unique key %s not found in type %s", req.Msg.UniqueKey, req.Msg.Type)) } - res := buildEntityResponse(entity, req.Msg.Type, api.cfg.Dashboards) + res := buildEntityResponse(entity, req.Msg.Type, api.cfg) + res.RelatedActions = api.relatedActionsForEntity(user, req.Msg.Type, entity) return connect.NewResponse(res), nil } -func buildEntityResponse(entity *entities.Entity, entityType string, dashboards []*config.DashboardComponent) *apiv1.Entity { +func entityTypeIcon(cfg *config.Config, entityType string) string { + entityFile := entityFileForType(cfg, entityType) + if entityFile == nil { + return "" + } + + return entityFile.Icon +} + +func entityFileForType(cfg *config.Config, entityType string) *config.EntityFile { + for _, entityFile := range cfg.Entities { + if entityFile != nil && entityFile.Name == entityType { + return entityFile + } + } + + return nil +} + +func entityPropertiesFromFile(entityFile *config.EntityFile) []config.EntityProperty { + if entityFile == nil { + return nil + } + + return entityFile.Properties +} + +func entityDefinitionProperties(properties []config.EntityProperty) []*apiv1.EntityProperty { + if len(properties) == 0 { + return nil + } + + result := make([]*apiv1.EntityProperty, 0, len(properties)) + for _, property := range properties { + result = append(result, &apiv1.EntityProperty{ + Name: property.Name, + Title: property.Title, + }) + } + + return result +} + +func entityListFields(data any, properties []config.EntityProperty) map[string]string { + if len(properties) == 0 { + return nil + } + + fields := make(map[string]string, len(properties)) + for _, property := range properties { + fields[property.Name] = entityPropertyValue(data, property.Name) + } + + return fields +} + +func entityPropertyValue(data any, propertyName string) string { + dataMap, ok := data.(map[string]any) + if !ok { + return "" + } + + if value, found := dataMap[propertyName]; found { + return fmt.Sprintf("%v", value) + } + + return entityPropertyValueCaseInsensitive(dataMap, propertyName) +} + +func entityPropertyValueCaseInsensitive(dataMap map[string]any, propertyName string) string { + propertyNameLower := strings.ToLower(propertyName) + for key, value := range dataMap { + if strings.ToLower(key) == propertyNameLower { + return fmt.Sprintf("%v", value) + } + } + + return "" +} + +func buildEntityResponse(entity *entities.Entity, entityType string, cfg *config.Config) *apiv1.Entity { + properties := entityPropertiesFromFile(entityFileForType(cfg, entityType)) res := &apiv1.Entity{ Title: entity.Title, UniqueKey: entity.UniqueKey, Type: entityType, - Directories: findDirectoriesInEntityFieldsets(entityType, dashboards), - Fields: serializeEntityFields(entity.Data), + Directories: findDirectoriesInEntityFieldsets(entityType, cfg.Dashboards), + Fields: entityFieldsForResponse(entity.Data, properties), + Icon: entityTypeIcon(cfg, entityType), } return res } diff --git a/service/internal/api/api_entities_list.go b/service/internal/api/api_entities_list.go new file mode 100644 index 0000000..9d8c7f7 --- /dev/null +++ b/service/internal/api/api_entities_list.go @@ -0,0 +1,147 @@ +package api + +import ( + "sort" + "strings" + + apiv1 "github.com/OliveTin/OliveTin/gen/olivetin/api/v1" + config "github.com/OliveTin/OliveTin/internal/config" + "github.com/OliveTin/OliveTin/internal/entities" +) + +const defaultEntityInstancesPageSize = 10 + +func (api *oliveTinAPI) buildEntityDefinitionsResponse(req *apiv1.GetEntitiesRequest, entityMap entities.EntitiesByClass) []*apiv1.EntityDefinition { + if req != nil && req.EntityType != "" { + return api.buildFilteredEntityDefinitions(req, entityMap) + } + + return api.buildAllEntityDefinitions(entityMap) +} + +func (api *oliveTinAPI) buildAllEntityDefinitions(entityMap entities.EntitiesByClass) []*apiv1.EntityDefinition { + entityNames := sortedEntityTypeNames(entityMap) + entityDefinitions := make([]*apiv1.EntityDefinition, 0, len(entityNames)) + + for _, name := range entityNames { + entityFile := entityFileForType(api.cfg, name) + properties := entityPropertiesFromFile(entityFile) + instances := buildSortedEntityInstances(name, entityMap[name], properties) + + def := &apiv1.EntityDefinition{ + Title: name, + UsedOnDashboards: findDashboardsForEntity(name, api.cfg.Dashboards), + Icon: entityTypeIcon(api.cfg, name), + Properties: entityDefinitionProperties(properties), + TotalInstances: int32(len(instances)), + } + + if len(properties) == 0 { + def.Instances = instances + } + + entityDefinitions = append(entityDefinitions, def) + } + + return entityDefinitions +} + +func (api *oliveTinAPI) buildFilteredEntityDefinitions(req *apiv1.GetEntitiesRequest, entityMap entities.EntitiesByClass) []*apiv1.EntityDefinition { + entityInstances, ok := entityMap[req.EntityType] + if !ok || len(entityInstances) == 0 { + return nil + } + + entityFile := entityFileForType(api.cfg, req.EntityType) + properties := entityPropertiesFromFile(entityFile) + instances := buildSortedEntityInstances(req.EntityType, entityInstances, properties) + filtered := filterEntityInstances(instances, req.Filter) + pageSize := normalizeEntityInstancesPageSize(req.PageSize) + page := normalizeEntityInstancesPage(req.Page) + + def := &apiv1.EntityDefinition{ + Title: req.EntityType, + UsedOnDashboards: findDashboardsForEntity(req.EntityType, api.cfg.Dashboards), + Icon: entityTypeIcon(api.cfg, req.EntityType), + Properties: entityDefinitionProperties(properties), + TotalInstances: int32(len(filtered)), + Instances: paginateEntityInstances(filtered, page, pageSize), + } + + return []*apiv1.EntityDefinition{def} +} + +func sortedEntityTypeNames(entityMap entities.EntitiesByClass) []string { + entityNames := make([]string, 0, len(entityMap)) + for name := range entityMap { + entityNames = append(entityNames, name) + } + sort.Strings(entityNames) + return entityNames +} + +func normalizeEntityInstancesPage(page int32) int32 { + if page < 1 { + return 1 + } + return page +} + +func normalizeEntityInstancesPageSize(pageSize int32) int32 { + if pageSize < 1 { + return defaultEntityInstancesPageSize + } + return pageSize +} + +func filterEntityInstances(instances []*apiv1.Entity, filter string) []*apiv1.Entity { + filter = strings.TrimSpace(strings.ToLower(filter)) + if filter == "" { + return instances + } + + filtered := make([]*apiv1.Entity, 0, len(instances)) + for _, instance := range instances { + if entityInstanceMatchesFilter(instance, filter) { + filtered = append(filtered, instance) + } + } + + return filtered +} + +func entityInstanceMatchesFilter(instance *apiv1.Entity, filter string) bool { + if strings.Contains(strings.ToLower(instance.Title), filter) { + return true + } + + for _, value := range instance.Fields { + if strings.Contains(strings.ToLower(value), filter) { + return true + } + } + + return false +} + +func paginateEntityInstances(instances []*apiv1.Entity, page, pageSize int32) []*apiv1.Entity { + start := int((page - 1) * pageSize) + if start >= len(instances) { + return []*apiv1.Entity{} + } + + end := start + int(pageSize) + if end > len(instances) { + end = len(instances) + } + + return instances[start:end] +} + +func entityFieldsForResponse(data any, properties []config.EntityProperty) map[string]string { + if len(properties) > 0 { + return entityListFields(data, properties) + } + + return serializeEntityFields(data) +} diff --git a/service/internal/api/api_entities_list_test.go b/service/internal/api/api_entities_list_test.go new file mode 100644 index 0000000..8748999 --- /dev/null +++ b/service/internal/api/api_entities_list_test.go @@ -0,0 +1,107 @@ +package api + +import ( + "context" + "testing" + + "connectrpc.com/connect" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + apiv1 "github.com/OliveTin/OliveTin/gen/olivetin/api/v1" + config "github.com/OliveTin/OliveTin/internal/config" + "github.com/OliveTin/OliveTin/internal/entities" + "github.com/OliveTin/OliveTin/internal/executor" +) + +func TestGetEntitiesPaginatesAndFiltersInstances(t *testing.T) { + entities.ClearEntitiesOfType("server") + entities.AddEntity("server", "0", map[string]any{"name": "alpha", "hostname": "alpha.example.com", "ip": "10.0.0.1"}) + entities.AddEntity("server", "1", map[string]any{"name": "beta", "hostname": "beta.example.com", "ip": "10.0.0.2"}) + entities.AddEntity("server", "2", map[string]any{"name": "gamma", "hostname": "gamma.example.com", "ip": "10.0.0.3"}) + t.Cleanup(func() { + entities.ClearEntitiesOfType("server") + }) + + cfg := config.DefaultConfig() + cfg.Entities = []*config.EntityFile{ + { + Name: "server", + Properties: []config.EntityProperty{ + {Name: "hostname", Title: "Hostname"}, + {Name: "ip", Title: "IP"}, + }, + }, + } + cfg.Sanitize() + + ex := executor.DefaultExecutor(cfg) + ex.RebuildActionMap() + ts, client := getNewTestServerAndClientWithExecutor(cfg, ex) + defer ts.Close() + + filteredResp, err := client.GetEntities(context.Background(), connect.NewRequest(&apiv1.GetEntitiesRequest{ + EntityType: "server", + Filter: "beta", + Page: 1, + PageSize: 10, + })) + require.NoError(t, err) + require.Len(t, filteredResp.Msg.EntityDefinitions, 1) + assert.Equal(t, int32(1), filteredResp.Msg.EntityDefinitions[0].TotalInstances) + require.Len(t, filteredResp.Msg.EntityDefinitions[0].Instances, 1) + assert.Equal(t, "beta.example.com", filteredResp.Msg.EntityDefinitions[0].Instances[0].Fields["hostname"]) + + pagedResp, err := client.GetEntities(context.Background(), connect.NewRequest(&apiv1.GetEntitiesRequest{ + EntityType: "server", + Page: 2, + PageSize: 1, + })) + require.NoError(t, err) + require.Len(t, pagedResp.Msg.EntityDefinitions, 1) + assert.Equal(t, int32(3), pagedResp.Msg.EntityDefinitions[0].TotalInstances) + require.Len(t, pagedResp.Msg.EntityDefinitions[0].Instances, 1) + assert.Equal(t, "1", pagedResp.Msg.EntityDefinitions[0].Instances[0].UniqueKey) +} + +func TestGetEntityRestrictsFieldsToConfiguredProperties(t *testing.T) { + entities.ClearEntitiesOfType("server") + entities.AddEntity("server", "0", map[string]any{ + "name": "alpha", + "hostname": "alpha.example.com", + "ip": "10.0.0.1", + "groups": []string{"admins"}, + }) + t.Cleanup(func() { + entities.ClearEntitiesOfType("server") + }) + + cfg := config.DefaultConfig() + cfg.Entities = []*config.EntityFile{ + { + Name: "server", + Properties: []config.EntityProperty{ + {Name: "hostname", Title: "Hostname"}, + {Name: "ip", Title: "IP"}, + }, + }, + } + cfg.Sanitize() + + ex := executor.DefaultExecutor(cfg) + ex.RebuildActionMap() + ts, client := getNewTestServerAndClientWithExecutor(cfg, ex) + defer ts.Close() + + resp, err := client.GetEntity(context.Background(), connect.NewRequest(&apiv1.GetEntityRequest{ + Type: "server", + UniqueKey: "0", + })) + require.NoError(t, err) + require.NotNil(t, resp.Msg) + + assert.Equal(t, "alpha.example.com", resp.Msg.Fields["hostname"]) + assert.Equal(t, "10.0.0.1", resp.Msg.Fields["ip"]) + assert.NotContains(t, resp.Msg.Fields, "groups") + assert.NotContains(t, resp.Msg.Fields, "name") +} diff --git a/service/internal/api/api_entity_related_actions.go b/service/internal/api/api_entity_related_actions.go new file mode 100644 index 0000000..06b6409 --- /dev/null +++ b/service/internal/api/api_entity_related_actions.go @@ -0,0 +1,126 @@ +package api + +import ( + "sort" + + apiv1 "github.com/OliveTin/OliveTin/gen/olivetin/api/v1" + authpublic "github.com/OliveTin/OliveTin/internal/auth/authpublic" + config "github.com/OliveTin/OliveTin/internal/config" + "github.com/OliveTin/OliveTin/internal/entities" + "github.com/OliveTin/OliveTin/internal/executor" + "github.com/OliveTin/OliveTin/internal/tpl" +) + +type relatedActionCandidate struct { + binding *executor.ActionBinding + prefilled map[string]string +} + +func (api *oliveTinAPI) relatedActionsForEntity(user *authpublic.AuthenticatedUser, entityType string, entity *entities.Entity) []*apiv1.EntityRelatedAction { + rr := api.createDashboardRenderRequest(user, entityType, entity.UniqueKey) + populateActiveBindingStates(rr) + + candidates := collectRelatedActionCandidates(api, user, entityType, entity) + sortRelatedActionCandidates(candidates) + + return buildEntityRelatedActions(candidates, rr) +} + +func collectRelatedActionCandidates(api *oliveTinAPI, user *authpublic.AuthenticatedUser, entityType string, entity *entities.Entity) []relatedActionCandidate { + seen := make(map[string]bool) + candidates := make([]relatedActionCandidate, 0) + + api.executor.MapActionBindingsLock.RLock() + defer api.executor.MapActionBindingsLock.RUnlock() + + for _, binding := range api.executor.MapActionBindings { + tryAppendRelatedCandidate(&candidates, seen, api, user, entityType, entity, binding) + } + + return candidates +} + +func tryAppendRelatedCandidate(candidates *[]relatedActionCandidate, seen map[string]bool, api *oliveTinAPI, user *authpublic.AuthenticatedUser, entityType string, entity *entities.Entity, binding *executor.ActionBinding) { + prefilled, ok := relatedPrefillForBinding(binding, entityType, entity) + if !ok || !bindingViewableForRelated(seen, api, user, binding) { + return + } + + seen[binding.ID] = true + *candidates = append(*candidates, relatedActionCandidate{ + binding: binding, + prefilled: prefilled, + }) +} + +func bindingViewableForRelated(seen map[string]bool, api *oliveTinAPI, user *authpublic.AuthenticatedUser, binding *executor.ActionBinding) bool { + return binding != nil && binding.Action != nil && !seen[binding.ID] && api.userCanViewAction(user, binding.Action) +} + +func relatedPrefillForBinding(binding *executor.ActionBinding, entityType string, entity *entities.Entity) (map[string]string, bool) { + if isEntityBoundBindingFor(binding, entityType, entity) { + return nil, true + } + + return argumentEntityPrefill(binding, entityType, entity) +} + +func argumentEntityPrefill(binding *executor.ActionBinding, entityType string, entity *entities.Entity) (map[string]string, bool) { + if binding == nil || binding.Entity != nil || binding.Action == nil { + return nil, false + } + + prefilled := buildPrefilledArgumentsForEntity(binding.Action, entityType, entity) + return prefilled, len(prefilled) > 0 +} + +func isEntityBoundBindingFor(binding *executor.ActionBinding, entityType string, entity *entities.Entity) bool { + if entity == nil || !bindingHasEntity(binding) { + return false + } + + return binding.Action.Entity == entityType && binding.Entity.UniqueKey == entity.UniqueKey +} + +func bindingHasEntity(binding *executor.ActionBinding) bool { + return binding != nil && binding.Entity != nil && binding.Action != nil +} + +func buildPrefilledArgumentsForEntity(action *config.Action, entityType string, entity *entities.Entity) map[string]string { + prefilled := make(map[string]string) + + for i := range action.Arguments { + arg := &action.Arguments[i] + if arg.Entity != entityType || len(arg.Choices) != 1 { + continue + } + + prefilled[arg.Name] = tpl.ParseTemplateOfActionBeforeExec(arg.Choices[0].Value, entity) + } + + return prefilled +} + +func sortRelatedActionCandidates(candidates []relatedActionCandidate) { + sort.Slice(candidates, func(i, j int) bool { + return candidates[i].binding.ConfigOrder < candidates[j].binding.ConfigOrder + }) +} + +func buildEntityRelatedActions(candidates []relatedActionCandidate, rr *DashboardRenderRequest) []*apiv1.EntityRelatedAction { + result := make([]*apiv1.EntityRelatedAction, 0, len(candidates)) + + for _, candidate := range candidates { + action := buildAction(candidate.binding, rr) + if action == nil { + continue + } + + result = append(result, &apiv1.EntityRelatedAction{ + Action: action, + PrefilledArguments: candidate.prefilled, + }) + } + + return result +} diff --git a/service/internal/api/api_entity_related_actions_test.go b/service/internal/api/api_entity_related_actions_test.go new file mode 100644 index 0000000..69ae181 --- /dev/null +++ b/service/internal/api/api_entity_related_actions_test.go @@ -0,0 +1,270 @@ +package api + +import ( + "context" + "testing" + + "connectrpc.com/connect" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + apiv1 "github.com/OliveTin/OliveTin/gen/olivetin/api/v1" + authpublic "github.com/OliveTin/OliveTin/internal/auth/authpublic" + config "github.com/OliveTin/OliveTin/internal/config" + "github.com/OliveTin/OliveTin/internal/entities" + "github.com/OliveTin/OliveTin/internal/executor" +) + +func setupHostEntityTestData(t *testing.T) { + t.Helper() + entities.ClearEntitiesOfType("host") + entities.AddEntity("host", "0", map[string]any{"name": "stuffbox", "hostname": "192.168.66.8"}) + entities.AddEntity("host", "1", map[string]any{"name": "lurker", "hostname": "192.168.66.1"}) + t.Cleanup(func() { + entities.ClearEntitiesOfType("host") + }) +} + +func buildRelatedActionsTestConfig(t *testing.T) (*config.Config, *authpublic.AuthenticatedUser, *authpublic.AuthenticatedUser) { + t.Helper() + + cfg := config.DefaultConfig() + cfg.DefaultPermissions.View = false + cfg.DefaultPermissions.Exec = false + + cfg.Actions = append(cfg.Actions, + &config.Action{ + Title: "Secret Entity Action", + Shell: "echo secret", + Entity: "host", + }, + &config.Action{ + Title: "Hidden Host Action", + Shell: "echo hidden", + Entity: "host", + Hidden: true, + }, + &config.Action{ + ID: "run_playbook", + Title: "Run Automation Playbook", + Shell: "host '{{ ansible_host }}'", + Arguments: []config.ActionArgument{ + { + Name: "ansible_host", + Title: "Host", + Entity: "host", + Choices: []config.ActionArgumentChoice{ + {Title: "{{ host.name }} ({{ host.hostname }})", Value: "{{ host.hostname }}"}, + }, + }, + }, + }, + &config.Action{ + Title: "Public Host Action", + Shell: "echo public", + Entity: "host", + }, + ) + + cfg.AccessControlLists = append(cfg.AccessControlLists, + &config.AccessControlList{ + Name: "restricted", + MatchUsernames: []string{"low"}, + AddToEveryAction: true, + Permissions: config.PermissionsList{View: false, Exec: false, Logs: false, Kill: false}, + }, + &config.AccessControlList{ + Name: "full", + MatchUsernames: []string{"admin"}, + AddToEveryAction: true, + Permissions: config.PermissionsList{View: true, Exec: true, Logs: true, Kill: true}, + }, + ) + + cfg.Entities = []*config.EntityFile{ + {File: "hosts.yaml", Name: "host", Icon: "ssh"}, + } + cfg.Sanitize() + + lowUser := &authpublic.AuthenticatedUser{Username: "low", Acls: []string{"restricted"}} + adminUser := &authpublic.AuthenticatedUser{Username: "admin", Acls: []string{"full"}} + + return cfg, lowUser, adminUser +} + +func getEntityRelatedActionTitles(t *testing.T, api *oliveTinAPI, user *authpublic.AuthenticatedUser, entityType, entityKey string) []string { + t.Helper() + + entity, ok := entities.GetEntityInstances(entityType)[entityKey] + require.True(t, ok, "entity %s/%s must exist", entityType, entityKey) + + related := api.relatedActionsForEntity(user, entityType, entity) + titles := make([]string, 0, len(related)) + for _, item := range related { + if item.Action != nil { + titles = append(titles, item.Action.Title) + } + } + return titles +} + +func getEntityRelatedBindingIDs(t *testing.T, api *oliveTinAPI, user *authpublic.AuthenticatedUser, entityType, entityKey string) []string { + t.Helper() + + entity, ok := entities.GetEntityInstances(entityType)[entityKey] + require.True(t, ok, "entity %s/%s must exist", entityType, entityKey) + + related := api.relatedActionsForEntity(user, entityType, entity) + ids := make([]string, 0, len(related)) + for _, item := range related { + if item.Action != nil { + ids = append(ids, item.Action.BindingId) + } + } + return ids +} + +func TestGetEntityRelatedActionsDeniesRestrictedView(t *testing.T) { + setupHostEntityTestData(t) + cfg, lowUser, _ := buildRelatedActionsTestConfig(t) + + ex := executor.DefaultExecutor(cfg) + ex.RebuildActionMap() + api := newServer(ex) + + ids := getEntityRelatedBindingIDs(t, api, lowUser, "host", "0") + assert.Empty(t, ids) + + titles := getEntityRelatedActionTitles(t, api, lowUser, "host", "0") + assert.Empty(t, titles) +} + +func TestGetEntityRelatedActionsAllowsAdminView(t *testing.T) { + setupHostEntityTestData(t) + cfg, _, adminUser := buildRelatedActionsTestConfig(t) + + ex := executor.DefaultExecutor(cfg) + ex.RebuildActionMap() + api := newServer(ex) + + titles := getEntityRelatedActionTitles(t, api, adminUser, "host", "0") + assert.Contains(t, titles, "Run Automation Playbook") + assert.Contains(t, titles, "Public Host Action") + assert.Contains(t, titles, "Secret Entity Action") +} + +func TestGetEntityRelatedActionsExcludesHiddenActions(t *testing.T) { + setupHostEntityTestData(t) + cfg, _, adminUser := buildRelatedActionsTestConfig(t) + + ex := executor.DefaultExecutor(cfg) + ex.RebuildActionMap() + api := newServer(ex) + + titles := getEntityRelatedActionTitles(t, api, adminUser, "host", "0") + assert.NotContains(t, titles, "Hidden Host Action") +} + +func TestGetEntityRelatedActionsEntityBoundMatchesInstanceOnly(t *testing.T) { + setupHostEntityTestData(t) + cfg := config.DefaultConfig() + cfg.Actions = append(cfg.Actions, &config.Action{ + Title: "{{ host.name }} Wake", + Shell: "echo wake", + Entity: "host", + }) + + ex := executor.DefaultExecutor(cfg) + ex.RebuildActionMap() + api := newServer(ex) + user := &authpublic.AuthenticatedUser{Username: "guest", Provider: "system"} + + titlesHost0 := getEntityRelatedActionTitles(t, api, user, "host", "0") + assert.Len(t, titlesHost0, 1) + assert.Equal(t, "stuffbox Wake", titlesHost0[0]) + + titlesHost1 := getEntityRelatedActionTitles(t, api, user, "host", "1") + assert.Len(t, titlesHost1, 1) + assert.Equal(t, "lurker Wake", titlesHost1[0]) +} + +func TestGetEntityRelatedActionsPrefillsArgumentEntityValues(t *testing.T) { + setupHostEntityTestData(t) + cfg := config.DefaultConfig() + cfg.Actions = append(cfg.Actions, &config.Action{ + ID: "run_playbook", + Title: "Run Automation Playbook", + Shell: "host '{{ ansible_host }}'", + Arguments: []config.ActionArgument{ + { + Name: "ansible_host", + Title: "Host", + Entity: "host", + Choices: []config.ActionArgumentChoice{ + {Title: "{{ host.name }} ({{ host.hostname }})", Value: "{{ host.hostname }}"}, + }, + }, + }, + }) + + ex := executor.DefaultExecutor(cfg) + ex.RebuildActionMap() + api := newServer(ex) + user := &authpublic.AuthenticatedUser{Username: "guest", Provider: "system"} + + entity := entities.GetEntityInstances("host")["0"] + related := api.relatedActionsForEntity(user, "host", entity) + require.Len(t, related, 1) + require.NotNil(t, related[0].Action) + assert.Equal(t, "run_playbook", related[0].Action.BindingId) + assert.Equal(t, "192.168.66.8", related[0].PrefilledArguments["ansible_host"]) +} + +func TestGetEntityDeniesGuestsWhenLoginRequired(t *testing.T) { + setupHostEntityTestData(t) + cfg := config.DefaultConfig() + cfg.AuthRequireGuestsToLogin = true + + ex := executor.DefaultExecutor(cfg) + ex.RebuildActionMap() + ts, client := getNewTestServerAndClientWithExecutor(cfg, ex) + defer ts.Close() + + _, err := client.GetEntity(context.Background(), connect.NewRequest(&apiv1.GetEntityRequest{ + Type: "host", + UniqueKey: "0", + })) + require.Error(t, err) + assert.Equal(t, connect.CodePermissionDenied, connect.CodeOf(err)) +} + +func TestGetEntityReturnsRelatedActionsForAdmin(t *testing.T) { + setupHostEntityTestData(t) + cfg, _, adminUser := buildRelatedActionsTestConfig(t) + cfg.AuthHttpHeaderUsername = "X-Ot-User" + + ex := executor.DefaultExecutor(cfg) + ex.RebuildActionMap() + ts, client := getNewTestServerAndClientWithExecutor(cfg, ex) + defer ts.Close() + + req := connect.NewRequest(&apiv1.GetEntityRequest{ + Type: "host", + UniqueKey: "0", + }) + req.Header().Set("X-Ot-User", adminUser.Username) + + resp, err := client.GetEntity(context.Background(), req) + require.NoError(t, err) + require.NotNil(t, resp.Msg) + assert.Equal(t, "🔐", resp.Msg.Icon) + + foundPlaybook := false + for _, related := range resp.Msg.RelatedActions { + if related.Action != nil && related.Action.BindingId == "run_playbook" { + foundPlaybook = true + assert.Equal(t, "192.168.66.8", related.PrefilledArguments["ansible_host"]) + } + } + assert.True(t, foundPlaybook, "admin should see argument-entity related action in GetEntity response") +} diff --git a/service/internal/api/api_test.go b/service/internal/api/api_test.go index 1291f80..94f8577 100644 --- a/service/internal/api/api_test.go +++ b/service/internal/api/api_test.go @@ -120,6 +120,15 @@ func TestGetActionsAndStart(t *testing.T) { func TestGetEntities(t *testing.T) { cfg := config.DefaultConfig() + cfg.Entities = []*config.EntityFile{ + { + Name: "server", + Properties: []config.EntityProperty{ + {Name: "hostname", Title: "Hostname"}, + }, + }, + } + cfg.Sanitize() ts, client := getNewTestServerAndClient(cfg) defer ts.Close() @@ -138,6 +147,25 @@ func TestGetEntities(t *testing.T) { validateEntityOrderAndStructure(t, entityDefinitions) validateNoDuplicates(t, entityDefinitions) validateConsistency(t, client, entityDefinitions) + validateEntityListProperties(t, client) +} + +func validateEntityListProperties(t *testing.T, client apiv1connect.OliveTinApiServiceClient) { + resp, err := client.GetEntities(context.Background(), connect.NewRequest(&apiv1.GetEntitiesRequest{ + EntityType: "server", + Page: 1, + PageSize: 10, + })) + require.NoError(t, err) + + serverDef := resp.Msg.EntityDefinitions[0] + require.NotNil(t, serverDef, "server entity definition should be present") + require.Len(t, serverDef.Properties, 1) + assert.Equal(t, "hostname", serverDef.Properties[0].Name) + assert.Equal(t, "Hostname", serverDef.Properties[0].Title) + assert.Equal(t, int32(3), serverDef.TotalInstances) + require.Len(t, serverDef.Instances, 3) + assert.Equal(t, "alpha.example.com", serverDef.Instances[0].Fields["hostname"]) } func setupTestEntities() { @@ -166,10 +194,8 @@ func validateEntityOrderAndStructure(t *testing.T, entityDefinitions []*apiv1.En assert.Equal(t, "postgres", entityDefinitions[1].Instances[1].UniqueKey, "Second database instance should be 'postgres' (alphabetically second)") assert.Equal(t, "server", entityDefinitions[2].Title, "Third entity should be 'server' (alphabetically third)") - assert.Equal(t, 3, len(entityDefinitions[2].Instances), "Server should have 3 instances") - assert.Equal(t, "alpha", entityDefinitions[2].Instances[0].UniqueKey, "First server instance should be 'alpha' (alphabetically first)") - assert.Equal(t, "beta", entityDefinitions[2].Instances[1].UniqueKey, "Second server instance should be 'beta' (alphabetically second)") - assert.Equal(t, "zebra", entityDefinitions[2].Instances[2].UniqueKey, "Third server instance should be 'zebra' (alphabetically third)") + assert.Equal(t, 0, len(entityDefinitions[2].Instances), "Server instances should not be included in bulk list response") + assert.Equal(t, int32(3), entityDefinitions[2].TotalInstances, "Server should report total instance count") } func validateNoDuplicates(t *testing.T, entityDefinitions []*apiv1.EntityDefinition) { diff --git a/service/internal/config/config.go b/service/internal/config/config.go index c994d9d..02115fc 100644 --- a/service/internal/config/config.go +++ b/service/internal/config/config.go @@ -99,9 +99,16 @@ type WebhookConfig struct { // Entity represents a "thing" that can have multiple actions associated with it. // for example, a media player with a start and stop action. type EntityFile struct { - File string `koanf:"file"` - Name string `koanf:"name"` - Icon string `koanf:"icon"` + File string `koanf:"file"` + Name string `koanf:"name"` + Icon string `koanf:"icon"` + Properties []EntityProperty `koanf:"properties"` +} + +// EntityProperty defines a column shown when listing entity instances in the UI. +type EntityProperty struct { + Name string `koanf:"name"` + Title string `koanf:"title"` } // PermissionsList defines what users can do with an action. diff --git a/service/internal/config/sanitize.go b/service/internal/config/sanitize.go index 2ee2313..113d2d6 100644 --- a/service/internal/config/sanitize.go +++ b/service/internal/config/sanitize.go @@ -30,6 +30,7 @@ func (cfg *Config) Sanitize() { cfg.sanitizeActionGroups() cfg.sanitizeActionGroupReferences() + cfg.sanitizeEntities() if err := cfg.validateReservedActionArgumentNames(); err != nil { log.Fatalf("%v", err) @@ -290,6 +291,25 @@ func (cfg *Config) sanitizeActionGroupReferences() { } } +func (cfg *Config) sanitizeEntities() { + for _, entityFile := range cfg.Entities { + if entityFile == nil { + continue + } + + entityFile.Icon = lookupHTMLIcon(entityFile.Icon, "") + sanitizeEntityProperties(entityFile) + } +} + +func sanitizeEntityProperties(entityFile *EntityFile) { + for idx := range entityFile.Properties { + if entityFile.Properties[idx].Title == "" { + entityFile.Properties[idx].Title = entityFile.Properties[idx].Name + } + } +} + func (cfg *Config) warnInvalidActionGroupReference(action *Action, groupName string) { group, found := cfg.ActionGroups[groupName] if !found {