diff --git a/api/csharp/Chirpstack/api/MulticastGroup.cs b/api/csharp/Chirpstack/api/MulticastGroup.cs index 21a3352f..3e297010 100644 --- a/api/csharp/Chirpstack/api/MulticastGroup.cs +++ b/api/csharp/Chirpstack/api/MulticastGroup.cs @@ -62,59 +62,59 @@ static MulticastGroupReflection() { "CSJTCiFBZGRHYXRld2F5VG9NdWx0aWNhc3RHcm91cFJlcXVlc3QSGgoSbXVs", "dGljYXN0X2dyb3VwX2lkGAEgASgJEhIKCmdhdGV3YXlfaWQYAiABKAkiWAom", "UmVtb3ZlR2F0ZXdheUZyb21NdWx0aWNhc3RHcm91cFJlcXVlc3QSGgoSbXVs", - "dGljYXN0X2dyb3VwX2lkGAEgASgJEhIKCmdhdGV3YXlfaWQYAiABKAkiYgoX", - "TXVsdGljYXN0R3JvdXBRdWV1ZUl0ZW0SGgoSbXVsdGljYXN0X2dyb3VwX2lk", - "GAEgASgJEg0KBWZfY250GAIgASgNEg4KBmZfcG9ydBgDIAEoDRIMCgRkYXRh", - "GAQgASgMIlkKJUVucXVldWVNdWx0aWNhc3RHcm91cFF1ZXVlSXRlbVJlcXVl", - "c3QSMAoKcXVldWVfaXRlbRgBIAEoCzIcLmFwaS5NdWx0aWNhc3RHcm91cFF1", - "ZXVlSXRlbSI3CiZFbnF1ZXVlTXVsdGljYXN0R3JvdXBRdWV1ZUl0ZW1SZXNw", - "b25zZRINCgVmX2NudBgBIAEoDSI9Ch9GbHVzaE11bHRpY2FzdEdyb3VwUXVl", - "dWVSZXF1ZXN0EhoKEm11bHRpY2FzdF9ncm91cF9pZBgBIAEoCSI8Ch5MaXN0", - "TXVsdGljYXN0R3JvdXBRdWV1ZVJlcXVlc3QSGgoSbXVsdGljYXN0X2dyb3Vw", - "X2lkGAEgASgJIk4KH0xpc3RNdWx0aWNhc3RHcm91cFF1ZXVlUmVzcG9uc2US", - "KwoFaXRlbXMYASADKAsyHC5hcGkuTXVsdGljYXN0R3JvdXBRdWV1ZUl0ZW0q", - "LgoSTXVsdGljYXN0R3JvdXBUeXBlEgsKB0NMQVNTX0MQABILCgdDTEFTU19C", - "EAEqNwocTXVsdGljYXN0R3JvdXBTY2hlZHVsaW5nVHlwZRIJCgVERUxBWRAA", - "EgwKCEdQU19USU1FEAEy3QwKFU11bHRpY2FzdEdyb3VwU2VydmljZRJvCgZD", - "cmVhdGUSIC5hcGkuQ3JlYXRlTXVsdGljYXN0R3JvdXBSZXF1ZXN0GiEuYXBp", - "LkNyZWF0ZU11bHRpY2FzdEdyb3VwUmVzcG9uc2UiIILT5JMCGiIVL2FwaS9t", - "dWx0aWNhc3QtZ3JvdXBzOgEqEmgKA0dldBIdLmFwaS5HZXRNdWx0aWNhc3RH", - "cm91cFJlcXVlc3QaHi5hcGkuR2V0TXVsdGljYXN0R3JvdXBSZXNwb25zZSIi", - "gtPkkwIcEhovYXBpL211bHRpY2FzdC1ncm91cHMve2lkfRJ5CgZVcGRhdGUS", - "IC5hcGkuVXBkYXRlTXVsdGljYXN0R3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnBy", - "b3RvYnVmLkVtcHR5IjWC0+STAi8aKi9hcGkvbXVsdGljYXN0LWdyb3Vwcy97", - "bXVsdGljYXN0X2dyb3VwLmlkfToBKhJmCgZEZWxldGUSIC5hcGkuRGVsZXRl", - "TXVsdGljYXN0R3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5", - "IiKC0+STAhwqGi9hcGkvbXVsdGljYXN0LWdyb3Vwcy97aWR9EmgKBExpc3QS", - "Hy5hcGkuTGlzdE11bHRpY2FzdEdyb3Vwc1JlcXVlc3QaIC5hcGkuTGlzdE11", - "bHRpY2FzdEdyb3Vwc1Jlc3BvbnNlIh2C0+STAhcSFS9hcGkvbXVsdGljYXN0", - "LWdyb3VwcxKJAQoJQWRkRGV2aWNlEiUuYXBpLkFkZERldmljZVRvTXVsdGlj", - "YXN0R3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ij2C0+ST", - "AjciMi9hcGkvbXVsdGljYXN0LWdyb3Vwcy97bXVsdGljYXN0X2dyb3VwX2lk", - "fS9kZXZpY2VzOgEqEpgBCgxSZW1vdmVEZXZpY2USKi5hcGkuUmVtb3ZlRGV2", - "aWNlRnJvbU11bHRpY2FzdEdyb3VwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1", - "Zi5FbXB0eSJEgtPkkwI+KjwvYXBpL211bHRpY2FzdC1ncm91cHMve211bHRp", - "Y2FzdF9ncm91cF9pZH0vZGV2aWNlcy97ZGV2X2V1aX0SjAEKCkFkZEdhdGV3", - "YXkSJi5hcGkuQWRkR2F0ZXdheVRvTXVsdGljYXN0R3JvdXBSZXF1ZXN0GhYu", - "Z29vZ2xlLnByb3RvYnVmLkVtcHR5Ij6C0+STAjgiMy9hcGkvbXVsdGljYXN0", - "LWdyb3Vwcy97bXVsdGljYXN0X2dyb3VwX2lkfS9nYXRld2F5czoBKhKeAQoN", - "UmVtb3ZlR2F0ZXdheRIrLmFwaS5SZW1vdmVHYXRld2F5RnJvbU11bHRpY2Fz", - "dEdyb3VwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJIgtPkkwJC", - "KkAvYXBpL211bHRpY2FzdC1ncm91cHMve211bHRpY2FzdF9ncm91cF9pZH0v", - "Z2F0ZXdheXMve2dhdGV3YXlfaWR9EqoBCgdFbnF1ZXVlEiouYXBpLkVucXVl", - "dWVNdWx0aWNhc3RHcm91cFF1ZXVlSXRlbVJlcXVlc3QaKy5hcGkuRW5xdWV1", - "ZU11bHRpY2FzdEdyb3VwUXVldWVJdGVtUmVzcG9uc2UiRoLT5JMCQCI7L2Fw", - "aS9tdWx0aWNhc3QtZ3JvdXBzL3txdWV1ZV9pdGVtLm11bHRpY2FzdF9ncm91", - "cF9pZH0vcXVldWU6ASoShAEKCkZsdXNoUXVldWUSJC5hcGkuRmx1c2hNdWx0", - "aWNhc3RHcm91cFF1ZXVlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0", - "eSI4gtPkkwIyKjAvYXBpL211bHRpY2FzdC1ncm91cHMve211bHRpY2FzdF9n", - "cm91cF9pZH0vcXVldWUSkAEKCUxpc3RRdWV1ZRIjLmFwaS5MaXN0TXVsdGlj", - "YXN0R3JvdXBRdWV1ZVJlcXVlc3QaJC5hcGkuTGlzdE11bHRpY2FzdEdyb3Vw", - "UXVldWVSZXNwb25zZSI4gtPkkwIyEjAvYXBpL211bHRpY2FzdC1ncm91cHMv", - "e211bHRpY2FzdF9ncm91cF9pZH0vcXVldWVCawoRaW8uY2hpcnBzdGFjay5h", - "cGlCE011bHRpY2FzdEdyb3VwUHJvdG9QAVouZ2l0aHViLmNvbS9jaGlycHN0", - "YWNrL2NoaXJwc3RhY2svYXBpL2dvL3Y0L2FwaaoCDkNoaXJwc3RhY2suQXBp", - "YgZwcm90bzM=")); + "dGljYXN0X2dyb3VwX2lkGAEgASgJEhIKCmdhdGV3YXlfaWQYAiABKAkihAEK", + "F011bHRpY2FzdEdyb3VwUXVldWVJdGVtEhoKEm11bHRpY2FzdF9ncm91cF9p", + "ZBgBIAEoCRINCgVmX2NudBgCIAEoDRIOCgZmX3BvcnQYAyABKA0SDAoEZGF0", + "YRgEIAEoDBIUCgdlbWl0X2F0GAUgASgDSACIAQFCCgoIX2VtaXRfYXQiWQol", + "RW5xdWV1ZU11bHRpY2FzdEdyb3VwUXVldWVJdGVtUmVxdWVzdBIwCgpxdWV1", + "ZV9pdGVtGAEgASgLMhwuYXBpLk11bHRpY2FzdEdyb3VwUXVldWVJdGVtIjcK", + "JkVucXVldWVNdWx0aWNhc3RHcm91cFF1ZXVlSXRlbVJlc3BvbnNlEg0KBWZf", + "Y250GAEgASgNIj0KH0ZsdXNoTXVsdGljYXN0R3JvdXBRdWV1ZVJlcXVlc3QS", + "GgoSbXVsdGljYXN0X2dyb3VwX2lkGAEgASgJIjwKHkxpc3RNdWx0aWNhc3RH", + "cm91cFF1ZXVlUmVxdWVzdBIaChJtdWx0aWNhc3RfZ3JvdXBfaWQYASABKAki", + "TgofTGlzdE11bHRpY2FzdEdyb3VwUXVldWVSZXNwb25zZRIrCgVpdGVtcxgB", + "IAMoCzIcLmFwaS5NdWx0aWNhc3RHcm91cFF1ZXVlSXRlbSouChJNdWx0aWNh", + "c3RHcm91cFR5cGUSCwoHQ0xBU1NfQxAAEgsKB0NMQVNTX0IQASo3ChxNdWx0", + "aWNhc3RHcm91cFNjaGVkdWxpbmdUeXBlEgkKBURFTEFZEAASDAoIR1BTX1RJ", + "TUUQATLdDAoVTXVsdGljYXN0R3JvdXBTZXJ2aWNlEm8KBkNyZWF0ZRIgLmFw", + "aS5DcmVhdGVNdWx0aWNhc3RHcm91cFJlcXVlc3QaIS5hcGkuQ3JlYXRlTXVs", + "dGljYXN0R3JvdXBSZXNwb25zZSIggtPkkwIaIhUvYXBpL211bHRpY2FzdC1n", + "cm91cHM6ASoSaAoDR2V0Eh0uYXBpLkdldE11bHRpY2FzdEdyb3VwUmVxdWVz", + "dBoeLmFwaS5HZXRNdWx0aWNhc3RHcm91cFJlc3BvbnNlIiKC0+STAhwSGi9h", + "cGkvbXVsdGljYXN0LWdyb3Vwcy97aWR9EnkKBlVwZGF0ZRIgLmFwaS5VcGRh", + "dGVNdWx0aWNhc3RHcm91cFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1w", + "dHkiNYLT5JMCLxoqL2FwaS9tdWx0aWNhc3QtZ3JvdXBzL3ttdWx0aWNhc3Rf", + "Z3JvdXAuaWR9OgEqEmYKBkRlbGV0ZRIgLmFwaS5EZWxldGVNdWx0aWNhc3RH", + "cm91cFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiIoLT5JMCHCoa", + "L2FwaS9tdWx0aWNhc3QtZ3JvdXBzL3tpZH0SaAoETGlzdBIfLmFwaS5MaXN0", + "TXVsdGljYXN0R3JvdXBzUmVxdWVzdBogLmFwaS5MaXN0TXVsdGljYXN0R3Jv", + "dXBzUmVzcG9uc2UiHYLT5JMCFxIVL2FwaS9tdWx0aWNhc3QtZ3JvdXBzEokB", + "CglBZGREZXZpY2USJS5hcGkuQWRkRGV2aWNlVG9NdWx0aWNhc3RHcm91cFJl", + "cXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiPYLT5JMCNyIyL2FwaS9t", + "dWx0aWNhc3QtZ3JvdXBzL3ttdWx0aWNhc3RfZ3JvdXBfaWR9L2RldmljZXM6", + "ASoSmAEKDFJlbW92ZURldmljZRIqLmFwaS5SZW1vdmVEZXZpY2VGcm9tTXVs", + "dGljYXN0R3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkSC", + "0+STAj4qPC9hcGkvbXVsdGljYXN0LWdyb3Vwcy97bXVsdGljYXN0X2dyb3Vw", + "X2lkfS9kZXZpY2VzL3tkZXZfZXVpfRKMAQoKQWRkR2F0ZXdheRImLmFwaS5B", + "ZGRHYXRld2F5VG9NdWx0aWNhc3RHcm91cFJlcXVlc3QaFi5nb29nbGUucHJv", + "dG9idWYuRW1wdHkiPoLT5JMCOCIzL2FwaS9tdWx0aWNhc3QtZ3JvdXBzL3tt", + "dWx0aWNhc3RfZ3JvdXBfaWR9L2dhdGV3YXlzOgEqEp4BCg1SZW1vdmVHYXRl", + "d2F5EisuYXBpLlJlbW92ZUdhdGV3YXlGcm9tTXVsdGljYXN0R3JvdXBSZXF1", + "ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkiC0+STAkIqQC9hcGkvbXVs", + "dGljYXN0LWdyb3Vwcy97bXVsdGljYXN0X2dyb3VwX2lkfS9nYXRld2F5cy97", + "Z2F0ZXdheV9pZH0SqgEKB0VucXVldWUSKi5hcGkuRW5xdWV1ZU11bHRpY2Fz", + "dEdyb3VwUXVldWVJdGVtUmVxdWVzdBorLmFwaS5FbnF1ZXVlTXVsdGljYXN0", + "R3JvdXBRdWV1ZUl0ZW1SZXNwb25zZSJGgtPkkwJAIjsvYXBpL211bHRpY2Fz", + "dC1ncm91cHMve3F1ZXVlX2l0ZW0ubXVsdGljYXN0X2dyb3VwX2lkfS9xdWV1", + "ZToBKhKEAQoKRmx1c2hRdWV1ZRIkLmFwaS5GbHVzaE11bHRpY2FzdEdyb3Vw", + "UXVldWVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjiC0+STAjIq", + "MC9hcGkvbXVsdGljYXN0LWdyb3Vwcy97bXVsdGljYXN0X2dyb3VwX2lkfS9x", + "dWV1ZRKQAQoJTGlzdFF1ZXVlEiMuYXBpLkxpc3RNdWx0aWNhc3RHcm91cFF1", + "ZXVlUmVxdWVzdBokLmFwaS5MaXN0TXVsdGljYXN0R3JvdXBRdWV1ZVJlc3Bv", + "bnNlIjiC0+STAjISMC9hcGkvbXVsdGljYXN0LWdyb3Vwcy97bXVsdGljYXN0", + "X2dyb3VwX2lkfS9xdWV1ZUJrChFpby5jaGlycHN0YWNrLmFwaUITTXVsdGlj", + "YXN0R3JvdXBQcm90b1ABWi5naXRodWIuY29tL2NoaXJwc3RhY2svY2hpcnBz", + "dGFjay9hcGkvZ28vdjQvYXBpqgIOQ2hpcnBzdGFjay5BcGliBnByb3RvMw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, global::Chirpstack.Common.CommonReflection.Descriptor, }, new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Chirpstack.Api.MulticastGroupType), typeof(global::Chirpstack.Api.MulticastGroupSchedulingType), }, null, new pbr::GeneratedClrTypeInfo[] { @@ -132,7 +132,7 @@ static MulticastGroupReflection() { new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.RemoveDeviceFromMulticastGroupRequest), global::Chirpstack.Api.RemoveDeviceFromMulticastGroupRequest.Parser, new[]{ "MulticastGroupId", "DevEui" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.AddGatewayToMulticastGroupRequest), global::Chirpstack.Api.AddGatewayToMulticastGroupRequest.Parser, new[]{ "MulticastGroupId", "GatewayId" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.RemoveGatewayFromMulticastGroupRequest), global::Chirpstack.Api.RemoveGatewayFromMulticastGroupRequest.Parser, new[]{ "MulticastGroupId", "GatewayId" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.MulticastGroupQueueItem), global::Chirpstack.Api.MulticastGroupQueueItem.Parser, new[]{ "MulticastGroupId", "FCnt", "FPort", "Data" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.MulticastGroupQueueItem), global::Chirpstack.Api.MulticastGroupQueueItem.Parser, new[]{ "MulticastGroupId", "FCnt", "FPort", "Data", "EmitAt" }, new[]{ "EmitAt" }, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.EnqueueMulticastGroupQueueItemRequest), global::Chirpstack.Api.EnqueueMulticastGroupQueueItemRequest.Parser, new[]{ "QueueItem" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.EnqueueMulticastGroupQueueItemResponse), global::Chirpstack.Api.EnqueueMulticastGroupQueueItemResponse.Parser, new[]{ "FCnt" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.FlushMulticastGroupQueueRequest), global::Chirpstack.Api.FlushMulticastGroupQueueRequest.Parser, new[]{ "MulticastGroupId" }, null, null, null, null), @@ -4047,6 +4047,7 @@ public sealed partial class MulticastGroupQueueItem : pb::IMessage _parser = new pb::MessageParser(() => new MulticastGroupQueueItem()); private pb::UnknownFieldSet _unknownFields; + private int _hasBits0; [global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] public static pb::MessageParser Parser { get { return _parser; } } @@ -4074,10 +4075,12 @@ public MulticastGroupQueueItem() { [global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] public MulticastGroupQueueItem(MulticastGroupQueueItem other) : this() { + _hasBits0 = other._hasBits0; multicastGroupId_ = other.multicastGroupId_; fCnt_ = other.fCnt_; fPort_ = other.fPort_; data_ = other.data_; + emitAt_ = other.emitAt_; _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); } @@ -4148,6 +4151,34 @@ public uint FPort { } } + /// Field number for the "emit_at" field. + public const int EmitAtFieldNumber = 5; + private long emitAt_; + /// + /// Time to emit message at, in milliseconds after GPS epoch. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public long EmitAt { + get { if ((_hasBits0 & 1) != 0) { return emitAt_; } else { return 0L; } } + set { + _hasBits0 |= 1; + emitAt_ = value; + } + } + /// Gets whether the "emit_at" field is set + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool HasEmitAt { + get { return (_hasBits0 & 1) != 0; } + } + /// Clears the value of the "emit_at" field + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void ClearEmitAt() { + _hasBits0 &= ~1; + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] public override bool Equals(object other) { @@ -4167,6 +4198,7 @@ public bool Equals(MulticastGroupQueueItem other) { if (FCnt != other.FCnt) return false; if (FPort != other.FPort) return false; if (Data != other.Data) return false; + if (EmitAt != other.EmitAt) return false; return Equals(_unknownFields, other._unknownFields); } @@ -4178,6 +4210,7 @@ public override int GetHashCode() { if (FCnt != 0) hash ^= FCnt.GetHashCode(); if (FPort != 0) hash ^= FPort.GetHashCode(); if (Data.Length != 0) hash ^= Data.GetHashCode(); + if (HasEmitAt) hash ^= EmitAt.GetHashCode(); if (_unknownFields != null) { hash ^= _unknownFields.GetHashCode(); } @@ -4212,6 +4245,10 @@ public void WriteTo(pb::CodedOutputStream output) { output.WriteRawTag(34); output.WriteBytes(Data); } + if (HasEmitAt) { + output.WriteRawTag(40); + output.WriteInt64(EmitAt); + } if (_unknownFields != null) { _unknownFields.WriteTo(output); } @@ -4238,6 +4275,10 @@ public void WriteTo(pb::CodedOutputStream output) { output.WriteRawTag(34); output.WriteBytes(Data); } + if (HasEmitAt) { + output.WriteRawTag(40); + output.WriteInt64(EmitAt); + } if (_unknownFields != null) { _unknownFields.WriteTo(ref output); } @@ -4260,6 +4301,9 @@ public int CalculateSize() { if (Data.Length != 0) { size += 1 + pb::CodedOutputStream.ComputeBytesSize(Data); } + if (HasEmitAt) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(EmitAt); + } if (_unknownFields != null) { size += _unknownFields.CalculateSize(); } @@ -4284,6 +4328,9 @@ public void MergeFrom(MulticastGroupQueueItem other) { if (other.Data.Length != 0) { Data = other.Data; } + if (other.HasEmitAt) { + EmitAt = other.EmitAt; + } _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); } @@ -4315,6 +4362,10 @@ public void MergeFrom(pb::CodedInputStream input) { Data = input.ReadBytes(); break; } + case 40: { + EmitAt = input.ReadInt64(); + break; + } } } #endif @@ -4346,6 +4397,10 @@ public void MergeFrom(pb::CodedInputStream input) { Data = input.ReadBytes(); break; } + case 40: { + EmitAt = input.ReadInt64(); + break; + } } } } diff --git a/api/go/api/multicast_group.pb.go b/api/go/api/multicast_group.pb.go index ed97e698..27226119 100644 --- a/api/go/api/multicast_group.pb.go +++ b/api/go/api/multicast_group.pb.go @@ -1056,6 +1056,8 @@ type MulticastGroupQueueItem struct { FPort uint32 `protobuf:"varint,3,opt,name=f_port,json=fPort,proto3" json:"f_port,omitempty"` // Payload. Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` + // Time to emit message at, in milliseconds after GPS epoch. + EmitAt *int64 `protobuf:"varint,5,opt,name=emit_at,json=emitAt,proto3,oneof" json:"emit_at,omitempty"` } func (x *MulticastGroupQueueItem) Reset() { @@ -1118,6 +1120,13 @@ func (x *MulticastGroupQueueItem) GetData() []byte { return nil } +func (x *MulticastGroupQueueItem) GetEmitAt() int64 { + if x != nil && x.EmitAt != nil { + return *x.EmitAt + } + return 0 +} + type EnqueueMulticastGroupQueueItemRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1495,7 +1504,7 @@ var file_api_multicast_group_proto_rawDesc = []byte{ 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, - 0x22, 0x87, 0x01, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, + 0x22, 0xb1, 0x01, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, @@ -1503,149 +1512,151 @@ var file_api_multicast_group_proto_rawDesc = []byte{ 0x63, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x66, 0x43, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x66, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x25, 0x45, 0x6e, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x07, 0x65, 0x6d, + 0x69, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x06, 0x65, + 0x6d, 0x69, 0x74, 0x41, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x65, 0x6d, 0x69, + 0x74, 0x5f, 0x61, 0x74, 0x22, 0x64, 0x0a, 0x25, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, + 0x0a, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x09, 0x71, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x3d, 0x0a, 0x26, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0a, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, - 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, - 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x71, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, - 0x22, 0x3d, 0x0a, 0x26, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x13, 0x0a, 0x05, 0x66, 0x5f, - 0x63, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x66, 0x43, 0x6e, 0x74, 0x22, - 0x4f, 0x0a, 0x1f, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x22, 0x4e, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x22, 0x55, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, - 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2a, 0x2e, 0x0a, 0x12, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, - 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, - 0x41, 0x53, 0x53, 0x5f, 0x42, 0x10, 0x01, 0x2a, 0x37, 0x0a, 0x1c, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x4c, 0x41, 0x59, - 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x47, 0x50, 0x53, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x01, - 0x32, 0xdd, 0x0c, 0x0a, 0x15, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x06, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x13, 0x0a, 0x05, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x04, 0x66, 0x43, 0x6e, 0x74, 0x22, 0x4f, 0x0a, 0x1f, 0x46, 0x6c, 0x75, + 0x73, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x1e, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x55, 0x0a, 0x1f, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x2a, 0x2e, 0x0a, 0x12, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, + 0x5f, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x42, 0x10, + 0x01, 0x2a, 0x37, 0x0a, 0x1c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, + 0x47, 0x50, 0x53, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x01, 0x32, 0xdd, 0x0c, 0x0a, 0x15, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x20, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x68, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, + 0x79, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x1a, 0x2a, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x69, 0x64, 0x7d, 0x12, 0x66, 0x0a, 0x06, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x68, 0x0a, 0x03, 0x47, - 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x79, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, - 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x22, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, + 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0x68, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x89, 0x01, 0x0a, + 0x09, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2f, 0x3a, 0x01, 0x2a, 0x1a, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x37, 0x3a, 0x01, 0x2a, 0x22, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x69, 0x64, 0x7d, - 0x12, 0x66, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x68, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x12, 0x89, 0x01, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, 0x01, 0x2a, 0x22, 0x32, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x98, - 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x2a, 0x3c, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x12, 0x8c, 0x01, 0x0a, 0x0a, 0x41, 0x64, - 0x64, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, - 0x64, 0x64, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, - 0x3a, 0x01, 0x2a, 0x22, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, - 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x9e, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2b, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, - 0x6f, 0x6d, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x2a, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x07, 0x45, 0x6e, - 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x71, 0x75, - 0x65, 0x75, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, - 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x3a, 0x01, 0x2a, 0x22, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x2f, 0x7b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x0a, 0x46, 0x6c, 0x75, 0x73, 0x68, - 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x6c, 0x75, 0x73, - 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, - 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x2a, 0x30, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x90, 0x01, - 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x72, 0x6f, 0x6d, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x44, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x2a, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, + 0x75, 0x69, 0x7d, 0x12, 0x8c, 0x01, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x47, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x3a, 0x01, 0x2a, 0x22, 0x33, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x73, 0x12, 0x9e, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x47, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x12, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x42, 0x2a, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, + 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x07, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, + 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, + 0x3a, 0x01, 0x2a, 0x22, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x71, 0x75, 0x65, 0x75, + 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, - 0x42, 0x6b, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, - 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, - 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, - 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x12, 0x84, 0x01, 0x0a, 0x0a, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, + 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x38, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x2a, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x90, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, + 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, + 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, + 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x42, 0x6b, 0x0a, 0x11, 0x69, 0x6f, + 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, + 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, + 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, + 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, + 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1983,6 +1994,7 @@ func file_api_multicast_group_proto_init() { } } } + file_api_multicast_group_proto_msgTypes[14].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/api/grpc-web/api/multicast_group_pb.d.ts b/api/grpc-web/api/multicast_group_pb.d.ts index f8415298..84288df7 100644 --- a/api/grpc-web/api/multicast_group_pb.d.ts +++ b/api/grpc-web/api/multicast_group_pb.d.ts @@ -401,6 +401,9 @@ export class MulticastGroupQueueItem extends jspb.Message { getData_asB64(): string; setData(value: Uint8Array | string): MulticastGroupQueueItem; + getEmitAt(): number; + setEmitAt(value: number): MulticastGroupQueueItem; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): MulticastGroupQueueItem.AsObject; static toObject(includeInstance: boolean, msg: MulticastGroupQueueItem): MulticastGroupQueueItem.AsObject; @@ -415,6 +418,7 @@ export namespace MulticastGroupQueueItem { fCnt: number, fPort: number, data: Uint8Array | string, + emitAt: number, } } diff --git a/api/grpc-web/api/multicast_group_pb.js b/api/grpc-web/api/multicast_group_pb.js index 8a34b300..14dba95d 100644 --- a/api/grpc-web/api/multicast_group_pb.js +++ b/api/grpc-web/api/multicast_group_pb.js @@ -3334,7 +3334,8 @@ proto.api.MulticastGroupQueueItem.toObject = function(includeInstance, msg) { multicastGroupId: jspb.Message.getFieldWithDefault(msg, 1, ""), fCnt: jspb.Message.getFieldWithDefault(msg, 2, 0), fPort: jspb.Message.getFieldWithDefault(msg, 3, 0), - data: msg.getData_asB64() + data: msg.getData_asB64(), + emitAt: jspb.Message.getFieldWithDefault(msg, 5, 0) }; if (includeInstance) { @@ -3387,6 +3388,10 @@ proto.api.MulticastGroupQueueItem.deserializeBinaryFromReader = function(msg, re var value = /** @type {!Uint8Array} */ (reader.readBytes()); msg.setData(value); break; + case 5: + var value = /** @type {number} */ (reader.readInt64()); + msg.setEmitAt(value); + break; default: reader.skipField(); break; @@ -3444,6 +3449,13 @@ proto.api.MulticastGroupQueueItem.serializeBinaryToWriter = function(message, wr f ); } + f = message.getEmitAt(); + if (f !== 0) { + writer.writeInt64( + 5, + f + ); + } }; @@ -3543,6 +3555,24 @@ proto.api.MulticastGroupQueueItem.prototype.setData = function(value) { }; +/** + * optional int64 emit_at = 5; + * @return {number} + */ +proto.api.MulticastGroupQueueItem.prototype.getEmitAt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.api.MulticastGroupQueueItem} returns this + */ +proto.api.MulticastGroupQueueItem.prototype.setEmitAt = function(value) { + return jspb.Message.setProto3IntField(this, 5, value); +}; + + diff --git a/api/grpc-web/google/api/client_pb.d.ts b/api/grpc-web/google/api/client_pb.d.ts index 08ed4fd9..f6687bef 100644 --- a/api/grpc-web/google/api/client_pb.d.ts +++ b/api/grpc-web/google/api/client_pb.d.ts @@ -140,6 +140,9 @@ export class Publishing extends jspb.Message { getProtoReferenceDocumentationUri(): string; setProtoReferenceDocumentationUri(value: string): Publishing; + getRestReferenceDocumentationUri(): string; + setRestReferenceDocumentationUri(value: string): Publishing; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): Publishing.AsObject; static toObject(includeInstance: boolean, msg: Publishing): Publishing.AsObject; @@ -160,6 +163,7 @@ export namespace Publishing { organization: ClientLibraryOrganization, librarySettingsList: Array, protoReferenceDocumentationUri: string, + restReferenceDocumentationUri: string, } } @@ -366,6 +370,11 @@ export class MethodSettings extends jspb.Message { hasLongRunning(): boolean; clearLongRunning(): MethodSettings; + getAutoPopulatedFieldsList(): Array; + setAutoPopulatedFieldsList(value: Array): MethodSettings; + clearAutoPopulatedFieldsList(): MethodSettings; + addAutoPopulatedFields(value: string, index?: number): MethodSettings; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): MethodSettings.AsObject; static toObject(includeInstance: boolean, msg: MethodSettings): MethodSettings.AsObject; @@ -378,6 +387,7 @@ export namespace MethodSettings { export type AsObject = { selector: string, longRunning?: MethodSettings.LongRunning.AsObject, + autoPopulatedFieldsList: Array, } export class LongRunning extends jspb.Message { diff --git a/api/grpc-web/google/api/client_pb.js b/api/grpc-web/google/api/client_pb.js index e51c4c74..3280efbf 100644 --- a/api/grpc-web/google/api/client_pb.js +++ b/api/grpc-web/google/api/client_pb.js @@ -33,6 +33,7 @@ goog.exportSymbol('proto.google.api.PhpSettings', null, global); goog.exportSymbol('proto.google.api.Publishing', null, global); goog.exportSymbol('proto.google.api.PythonSettings', null, global); goog.exportSymbol('proto.google.api.RubySettings', null, global); +goog.exportSymbol('proto.google.api.apiVersion', null, global); goog.exportSymbol('proto.google.api.defaultHost', null, global); goog.exportSymbol('proto.google.api.methodSignatureList', null, global); goog.exportSymbol('proto.google.api.oauthScopes', null, global); @@ -278,7 +279,7 @@ if (goog.DEBUG && !COMPILED) { * @constructor */ proto.google.api.MethodSettings = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); + jspb.Message.initialize(this, opt_data, 0, -1, proto.google.api.MethodSettings.repeatedFields_, null); }; goog.inherits(proto.google.api.MethodSettings, jspb.Message); if (goog.DEBUG && !COMPILED) { @@ -1143,7 +1144,8 @@ proto.google.api.Publishing.toObject = function(includeInstance, msg) { organization: jspb.Message.getFieldWithDefault(msg, 107, 0), librarySettingsList: jspb.Message.toObjectList(msg.getLibrarySettingsList(), proto.google.api.ClientLibrarySettings.toObject, includeInstance), - protoReferenceDocumentationUri: jspb.Message.getFieldWithDefault(msg, 110, "") + protoReferenceDocumentationUri: jspb.Message.getFieldWithDefault(msg, 110, ""), + restReferenceDocumentationUri: jspb.Message.getFieldWithDefault(msg, 111, "") }; if (includeInstance) { @@ -1222,6 +1224,10 @@ proto.google.api.Publishing.deserializeBinaryFromReader = function(msg, reader) var value = /** @type {string} */ (reader.readString()); msg.setProtoReferenceDocumentationUri(value); break; + case 111: + var value = /** @type {string} */ (reader.readString()); + msg.setRestReferenceDocumentationUri(value); + break; default: reader.skipField(); break; @@ -1323,6 +1329,13 @@ proto.google.api.Publishing.serializeBinaryToWriter = function(message, writer) f ); } + f = message.getRestReferenceDocumentationUri(); + if (f.length > 0) { + writer.writeString( + 111, + f + ); + } }; @@ -1565,6 +1578,24 @@ proto.google.api.Publishing.prototype.setProtoReferenceDocumentationUri = functi }; +/** + * optional string rest_reference_documentation_uri = 111; + * @return {string} + */ +proto.google.api.Publishing.prototype.getRestReferenceDocumentationUri = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 111, "")); +}; + + +/** + * @param {string} value + * @return {!proto.google.api.Publishing} returns this + */ +proto.google.api.Publishing.prototype.setRestReferenceDocumentationUri = function(value) { + return jspb.Message.setProto3StringField(this, 111, value); +}; + + @@ -3057,6 +3088,13 @@ proto.google.api.GoSettings.prototype.hasCommon = function() { +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.google.api.MethodSettings.repeatedFields_ = [3]; + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -3089,7 +3127,8 @@ proto.google.api.MethodSettings.prototype.toObject = function(opt_includeInstanc proto.google.api.MethodSettings.toObject = function(includeInstance, msg) { var f, obj = { selector: jspb.Message.getFieldWithDefault(msg, 1, ""), - longRunning: (f = msg.getLongRunning()) && proto.google.api.MethodSettings.LongRunning.toObject(includeInstance, f) + longRunning: (f = msg.getLongRunning()) && proto.google.api.MethodSettings.LongRunning.toObject(includeInstance, f), + autoPopulatedFieldsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f }; if (includeInstance) { @@ -3135,6 +3174,10 @@ proto.google.api.MethodSettings.deserializeBinaryFromReader = function(msg, read reader.readMessage(value,proto.google.api.MethodSettings.LongRunning.deserializeBinaryFromReader); msg.setLongRunning(value); break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.addAutoPopulatedFields(value); + break; default: reader.skipField(); break; @@ -3179,6 +3222,13 @@ proto.google.api.MethodSettings.serializeBinaryToWriter = function(message, writ proto.google.api.MethodSettings.LongRunning.serializeBinaryToWriter ); } + f = message.getAutoPopulatedFieldsList(); + if (f.length > 0) { + writer.writeRepeatedString( + 3, + f + ); + } }; @@ -3520,6 +3570,43 @@ proto.google.api.MethodSettings.prototype.hasLongRunning = function() { }; +/** + * repeated string auto_populated_fields = 3; + * @return {!Array} + */ +proto.google.api.MethodSettings.prototype.getAutoPopulatedFieldsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.google.api.MethodSettings} returns this + */ +proto.google.api.MethodSettings.prototype.setAutoPopulatedFieldsList = function(value) { + return jspb.Message.setField(this, 3, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.google.api.MethodSettings} returns this + */ +proto.google.api.MethodSettings.prototype.addAutoPopulatedFields = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 3, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.google.api.MethodSettings} returns this + */ +proto.google.api.MethodSettings.prototype.clearAutoPopulatedFieldsList = function() { + return this.setAutoPopulatedFieldsList([]); +}; + + /** * @enum {number} */ @@ -3618,4 +3705,29 @@ google_protobuf_descriptor_pb.ServiceOptions.extensionsBinary[1050] = new jspb.E // toObject() will function correctly. google_protobuf_descriptor_pb.ServiceOptions.extensions[1050] = proto.google.api.oauthScopes; + +/** + * A tuple of {field number, class constructor} for the extension + * field named `apiVersion`. + * @type {!jspb.ExtensionFieldInfo} + */ +proto.google.api.apiVersion = new jspb.ExtensionFieldInfo( + 525000001, + {apiVersion: 0}, + null, + /** @type {?function((boolean|undefined),!jspb.Message=): !Object} */ ( + null), + 0); + +google_protobuf_descriptor_pb.ServiceOptions.extensionsBinary[525000001] = new jspb.ExtensionFieldBinaryInfo( + proto.google.api.apiVersion, + jspb.BinaryReader.prototype.readString, + jspb.BinaryWriter.prototype.writeString, + undefined, + undefined, + false); +// This registers the extension field with the extended class, so that +// toObject() will function correctly. +google_protobuf_descriptor_pb.ServiceOptions.extensions[525000001] = proto.google.api.apiVersion; + goog.object.extend(exports, proto.google.api); diff --git a/api/grpc-web/google/api/control_pb.d.ts b/api/grpc-web/google/api/control_pb.d.ts index 35e83713..df4a692c 100644 --- a/api/grpc-web/google/api/control_pb.d.ts +++ b/api/grpc-web/google/api/control_pb.d.ts @@ -1,11 +1,17 @@ import * as jspb from 'google-protobuf' +import * as google_api_policy_pb from '../../google/api/policy_pb'; export class Control extends jspb.Message { getEnvironment(): string; setEnvironment(value: string): Control; + getMethodPoliciesList(): Array; + setMethodPoliciesList(value: Array): Control; + clearMethodPoliciesList(): Control; + addMethodPolicies(value?: google_api_policy_pb.MethodPolicy, index?: number): google_api_policy_pb.MethodPolicy; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): Control.AsObject; static toObject(includeInstance: boolean, msg: Control): Control.AsObject; @@ -17,6 +23,7 @@ export class Control extends jspb.Message { export namespace Control { export type AsObject = { environment: string, + methodPoliciesList: Array, } } diff --git a/api/grpc-web/google/api/control_pb.js b/api/grpc-web/google/api/control_pb.js index 6f1bdfcd..98ed322c 100644 --- a/api/grpc-web/google/api/control_pb.js +++ b/api/grpc-web/google/api/control_pb.js @@ -12,6 +12,8 @@ var jspb = require('google-protobuf'); var goog = jspb; var global = Function('return this')(); +var google_api_policy_pb = require('../../google/api/policy_pb.js'); +goog.object.extend(proto, google_api_policy_pb); goog.exportSymbol('proto.google.api.Control', null, global); /** * Generated by JsPbCodeGenerator. @@ -24,7 +26,7 @@ goog.exportSymbol('proto.google.api.Control', null, global); * @constructor */ proto.google.api.Control = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); + jspb.Message.initialize(this, opt_data, 0, -1, proto.google.api.Control.repeatedFields_, null); }; goog.inherits(proto.google.api.Control, jspb.Message); if (goog.DEBUG && !COMPILED) { @@ -35,6 +37,13 @@ if (goog.DEBUG && !COMPILED) { proto.google.api.Control.displayName = 'proto.google.api.Control'; } +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.google.api.Control.repeatedFields_ = [4]; + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -66,7 +75,9 @@ proto.google.api.Control.prototype.toObject = function(opt_includeInstance) { */ proto.google.api.Control.toObject = function(includeInstance, msg) { var f, obj = { - environment: jspb.Message.getFieldWithDefault(msg, 1, "") + environment: jspb.Message.getFieldWithDefault(msg, 1, ""), + methodPoliciesList: jspb.Message.toObjectList(msg.getMethodPoliciesList(), + google_api_policy_pb.MethodPolicy.toObject, includeInstance) }; if (includeInstance) { @@ -107,6 +118,11 @@ proto.google.api.Control.deserializeBinaryFromReader = function(msg, reader) { var value = /** @type {string} */ (reader.readString()); msg.setEnvironment(value); break; + case 4: + var value = new google_api_policy_pb.MethodPolicy; + reader.readMessage(value,google_api_policy_pb.MethodPolicy.deserializeBinaryFromReader); + msg.addMethodPolicies(value); + break; default: reader.skipField(); break; @@ -143,6 +159,14 @@ proto.google.api.Control.serializeBinaryToWriter = function(message, writer) { f ); } + f = message.getMethodPoliciesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 4, + f, + google_api_policy_pb.MethodPolicy.serializeBinaryToWriter + ); + } }; @@ -164,4 +188,42 @@ proto.google.api.Control.prototype.setEnvironment = function(value) { }; +/** + * repeated MethodPolicy method_policies = 4; + * @return {!Array} + */ +proto.google.api.Control.prototype.getMethodPoliciesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, google_api_policy_pb.MethodPolicy, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.google.api.Control} returns this +*/ +proto.google.api.Control.prototype.setMethodPoliciesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 4, value); +}; + + +/** + * @param {!proto.google.api.MethodPolicy=} opt_value + * @param {number=} opt_index + * @return {!proto.google.api.MethodPolicy} + */ +proto.google.api.Control.prototype.addMethodPolicies = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.google.api.MethodPolicy, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.google.api.Control} returns this + */ +proto.google.api.Control.prototype.clearMethodPoliciesList = function() { + return this.setMethodPoliciesList([]); +}; + + goog.object.extend(exports, proto.google.api); diff --git a/api/grpc-web/google/api/error_reason_pb.d.ts b/api/grpc-web/google/api/error_reason_pb.d.ts index 1a7c2e08..cb6e6a17 100644 --- a/api/grpc-web/google/api/error_reason_pb.d.ts +++ b/api/grpc-web/google/api/error_reason_pb.d.ts @@ -33,4 +33,5 @@ export enum ErrorReason { ORG_RESTRICTION_HEADER_INVALID = 28, SERVICE_NOT_VISIBLE = 29, GCP_SUSPENDED = 30, + LOCATION_POLICY_VIOLATED = 31, } diff --git a/api/grpc-web/google/api/error_reason_pb.js b/api/grpc-web/google/api/error_reason_pb.js index 725ef6d8..54208c0e 100644 --- a/api/grpc-web/google/api/error_reason_pb.js +++ b/api/grpc-web/google/api/error_reason_pb.js @@ -46,7 +46,8 @@ proto.google.api.ErrorReason = { ORG_RESTRICTION_VIOLATION: 27, ORG_RESTRICTION_HEADER_INVALID: 28, SERVICE_NOT_VISIBLE: 29, - GCP_SUSPENDED: 30 + GCP_SUSPENDED: 30, + LOCATION_POLICY_VIOLATED: 31 }; goog.object.extend(exports, proto.google.api); diff --git a/api/grpc-web/google/api/field_behavior_pb.d.ts b/api/grpc-web/google/api/field_behavior_pb.d.ts index 9f51fc3a..b17330f1 100644 --- a/api/grpc-web/google/api/field_behavior_pb.d.ts +++ b/api/grpc-web/google/api/field_behavior_pb.d.ts @@ -12,4 +12,5 @@ export enum FieldBehavior { IMMUTABLE = 5, UNORDERED_LIST = 6, NON_EMPTY_DEFAULT = 7, + IDENTIFIER = 8, } diff --git a/api/grpc-web/google/api/field_behavior_pb.js b/api/grpc-web/google/api/field_behavior_pb.js index afb83b49..80dfb188 100644 --- a/api/grpc-web/google/api/field_behavior_pb.js +++ b/api/grpc-web/google/api/field_behavior_pb.js @@ -27,7 +27,8 @@ proto.google.api.FieldBehavior = { INPUT_ONLY: 4, IMMUTABLE: 5, UNORDERED_LIST: 6, - NON_EMPTY_DEFAULT: 7 + NON_EMPTY_DEFAULT: 7, + IDENTIFIER: 8 }; @@ -46,11 +47,11 @@ proto.google.api.fieldBehaviorList = new jspb.ExtensionFieldInfo( google_protobuf_descriptor_pb.FieldOptions.extensionsBinary[1052] = new jspb.ExtensionFieldBinaryInfo( proto.google.api.fieldBehaviorList, - jspb.BinaryReader.prototype.readPackedEnum, - jspb.BinaryWriter.prototype.writePackedEnum, + jspb.BinaryReader.prototype.readEnum, + jspb.BinaryWriter.prototype.writeRepeatedEnum, undefined, undefined, - true); + false); // This registers the extension field with the extended class, so that // toObject() will function correctly. google_protobuf_descriptor_pb.FieldOptions.extensions[1052] = proto.google.api.fieldBehaviorList; diff --git a/api/grpc-web/google/api/field_info_pb.d.ts b/api/grpc-web/google/api/field_info_pb.d.ts new file mode 100644 index 00000000..7e7decc0 --- /dev/null +++ b/api/grpc-web/google/api/field_info_pb.d.ts @@ -0,0 +1,31 @@ +import * as jspb from 'google-protobuf' + +import * as google_protobuf_descriptor_pb from 'google-protobuf/google/protobuf/descriptor_pb'; + + +export class FieldInfo extends jspb.Message { + getFormat(): FieldInfo.Format; + setFormat(value: FieldInfo.Format): FieldInfo; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): FieldInfo.AsObject; + static toObject(includeInstance: boolean, msg: FieldInfo): FieldInfo.AsObject; + static serializeBinaryToWriter(message: FieldInfo, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): FieldInfo; + static deserializeBinaryFromReader(message: FieldInfo, reader: jspb.BinaryReader): FieldInfo; +} + +export namespace FieldInfo { + export type AsObject = { + format: FieldInfo.Format, + } + + export enum Format { + FORMAT_UNSPECIFIED = 0, + UUID4 = 1, + IPV4 = 2, + IPV6 = 3, + IPV4_OR_IPV6 = 4, + } +} + diff --git a/api/grpc-web/google/api/field_info_pb.js b/api/grpc-web/google/api/field_info_pb.js new file mode 100644 index 00000000..4c06cb32 --- /dev/null +++ b/api/grpc-web/google/api/field_info_pb.js @@ -0,0 +1,207 @@ +// source: google/api/field_info.proto +/** + * @fileoverview + * @enhanceable + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +var google_protobuf_descriptor_pb = require('google-protobuf/google/protobuf/descriptor_pb.js'); +goog.object.extend(proto, google_protobuf_descriptor_pb); +goog.exportSymbol('proto.google.api.FieldInfo', null, global); +goog.exportSymbol('proto.google.api.FieldInfo.Format', null, global); +goog.exportSymbol('proto.google.api.fieldInfo', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.google.api.FieldInfo = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.google.api.FieldInfo, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.google.api.FieldInfo.displayName = 'proto.google.api.FieldInfo'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.google.api.FieldInfo.prototype.toObject = function(opt_includeInstance) { + return proto.google.api.FieldInfo.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.google.api.FieldInfo} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.api.FieldInfo.toObject = function(includeInstance, msg) { + var f, obj = { + format: jspb.Message.getFieldWithDefault(msg, 1, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.google.api.FieldInfo} + */ +proto.google.api.FieldInfo.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.google.api.FieldInfo; + return proto.google.api.FieldInfo.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.google.api.FieldInfo} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.google.api.FieldInfo} + */ +proto.google.api.FieldInfo.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!proto.google.api.FieldInfo.Format} */ (reader.readEnum()); + msg.setFormat(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.google.api.FieldInfo.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.google.api.FieldInfo.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.google.api.FieldInfo} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.api.FieldInfo.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getFormat(); + if (f !== 0.0) { + writer.writeEnum( + 1, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.google.api.FieldInfo.Format = { + FORMAT_UNSPECIFIED: 0, + UUID4: 1, + IPV4: 2, + IPV6: 3, + IPV4_OR_IPV6: 4 +}; + +/** + * optional Format format = 1; + * @return {!proto.google.api.FieldInfo.Format} + */ +proto.google.api.FieldInfo.prototype.getFormat = function() { + return /** @type {!proto.google.api.FieldInfo.Format} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {!proto.google.api.FieldInfo.Format} value + * @return {!proto.google.api.FieldInfo} returns this + */ +proto.google.api.FieldInfo.prototype.setFormat = function(value) { + return jspb.Message.setProto3EnumField(this, 1, value); +}; + + + +/** + * A tuple of {field number, class constructor} for the extension + * field named `fieldInfo`. + * @type {!jspb.ExtensionFieldInfo} + */ +proto.google.api.fieldInfo = new jspb.ExtensionFieldInfo( + 291403980, + {fieldInfo: 0}, + proto.google.api.FieldInfo, + /** @type {?function((boolean|undefined),!jspb.Message=): !Object} */ ( + proto.google.api.FieldInfo.toObject), + 0); + +google_protobuf_descriptor_pb.FieldOptions.extensionsBinary[291403980] = new jspb.ExtensionFieldBinaryInfo( + proto.google.api.fieldInfo, + jspb.BinaryReader.prototype.readMessage, + jspb.BinaryWriter.prototype.writeMessage, + proto.google.api.FieldInfo.serializeBinaryToWriter, + proto.google.api.FieldInfo.deserializeBinaryFromReader, + false); +// This registers the extension field with the extended class, so that +// toObject() will function correctly. +google_protobuf_descriptor_pb.FieldOptions.extensions[291403980] = proto.google.api.fieldInfo; + +goog.object.extend(exports, proto.google.api); diff --git a/api/grpc-web/google/api/policy_pb.d.ts b/api/grpc-web/google/api/policy_pb.d.ts new file mode 100644 index 00000000..556b69db --- /dev/null +++ b/api/grpc-web/google/api/policy_pb.d.ts @@ -0,0 +1,55 @@ +import * as jspb from 'google-protobuf' + +import * as google_protobuf_descriptor_pb from 'google-protobuf/google/protobuf/descriptor_pb'; + + +export class FieldPolicy extends jspb.Message { + getSelector(): string; + setSelector(value: string): FieldPolicy; + + getResourcePermission(): string; + setResourcePermission(value: string): FieldPolicy; + + getResourceType(): string; + setResourceType(value: string): FieldPolicy; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): FieldPolicy.AsObject; + static toObject(includeInstance: boolean, msg: FieldPolicy): FieldPolicy.AsObject; + static serializeBinaryToWriter(message: FieldPolicy, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): FieldPolicy; + static deserializeBinaryFromReader(message: FieldPolicy, reader: jspb.BinaryReader): FieldPolicy; +} + +export namespace FieldPolicy { + export type AsObject = { + selector: string, + resourcePermission: string, + resourceType: string, + } +} + +export class MethodPolicy extends jspb.Message { + getSelector(): string; + setSelector(value: string): MethodPolicy; + + getRequestPoliciesList(): Array; + setRequestPoliciesList(value: Array): MethodPolicy; + clearRequestPoliciesList(): MethodPolicy; + addRequestPolicies(value?: FieldPolicy, index?: number): FieldPolicy; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): MethodPolicy.AsObject; + static toObject(includeInstance: boolean, msg: MethodPolicy): MethodPolicy.AsObject; + static serializeBinaryToWriter(message: MethodPolicy, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): MethodPolicy; + static deserializeBinaryFromReader(message: MethodPolicy, reader: jspb.BinaryReader): MethodPolicy; +} + +export namespace MethodPolicy { + export type AsObject = { + selector: string, + requestPoliciesList: Array, + } +} + diff --git a/api/grpc-web/google/api/policy_pb.js b/api/grpc-web/google/api/policy_pb.js new file mode 100644 index 00000000..eed30c33 --- /dev/null +++ b/api/grpc-web/google/api/policy_pb.js @@ -0,0 +1,493 @@ +// source: google/api/policy.proto +/** + * @fileoverview + * @enhanceable + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +var google_protobuf_descriptor_pb = require('google-protobuf/google/protobuf/descriptor_pb.js'); +goog.object.extend(proto, google_protobuf_descriptor_pb); +goog.exportSymbol('proto.google.api.FieldPolicy', null, global); +goog.exportSymbol('proto.google.api.MethodPolicy', null, global); +goog.exportSymbol('proto.google.api.fieldPolicy', null, global); +goog.exportSymbol('proto.google.api.methodPolicy', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.google.api.FieldPolicy = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.google.api.FieldPolicy, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.google.api.FieldPolicy.displayName = 'proto.google.api.FieldPolicy'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.google.api.MethodPolicy = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.google.api.MethodPolicy.repeatedFields_, null); +}; +goog.inherits(proto.google.api.MethodPolicy, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.google.api.MethodPolicy.displayName = 'proto.google.api.MethodPolicy'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.google.api.FieldPolicy.prototype.toObject = function(opt_includeInstance) { + return proto.google.api.FieldPolicy.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.google.api.FieldPolicy} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.api.FieldPolicy.toObject = function(includeInstance, msg) { + var f, obj = { + selector: jspb.Message.getFieldWithDefault(msg, 1, ""), + resourcePermission: jspb.Message.getFieldWithDefault(msg, 2, ""), + resourceType: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.google.api.FieldPolicy} + */ +proto.google.api.FieldPolicy.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.google.api.FieldPolicy; + return proto.google.api.FieldPolicy.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.google.api.FieldPolicy} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.google.api.FieldPolicy} + */ +proto.google.api.FieldPolicy.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setSelector(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setResourcePermission(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setResourceType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.google.api.FieldPolicy.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.google.api.FieldPolicy.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.google.api.FieldPolicy} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.api.FieldPolicy.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSelector(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getResourcePermission(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getResourceType(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional string selector = 1; + * @return {string} + */ +proto.google.api.FieldPolicy.prototype.getSelector = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.google.api.FieldPolicy} returns this + */ +proto.google.api.FieldPolicy.prototype.setSelector = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string resource_permission = 2; + * @return {string} + */ +proto.google.api.FieldPolicy.prototype.getResourcePermission = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.google.api.FieldPolicy} returns this + */ +proto.google.api.FieldPolicy.prototype.setResourcePermission = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string resource_type = 3; + * @return {string} + */ +proto.google.api.FieldPolicy.prototype.getResourceType = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.google.api.FieldPolicy} returns this + */ +proto.google.api.FieldPolicy.prototype.setResourceType = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.google.api.MethodPolicy.repeatedFields_ = [2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.google.api.MethodPolicy.prototype.toObject = function(opt_includeInstance) { + return proto.google.api.MethodPolicy.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.google.api.MethodPolicy} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.api.MethodPolicy.toObject = function(includeInstance, msg) { + var f, obj = { + selector: jspb.Message.getFieldWithDefault(msg, 9, ""), + requestPoliciesList: jspb.Message.toObjectList(msg.getRequestPoliciesList(), + proto.google.api.FieldPolicy.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.google.api.MethodPolicy} + */ +proto.google.api.MethodPolicy.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.google.api.MethodPolicy; + return proto.google.api.MethodPolicy.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.google.api.MethodPolicy} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.google.api.MethodPolicy} + */ +proto.google.api.MethodPolicy.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 9: + var value = /** @type {string} */ (reader.readString()); + msg.setSelector(value); + break; + case 2: + var value = new proto.google.api.FieldPolicy; + reader.readMessage(value,proto.google.api.FieldPolicy.deserializeBinaryFromReader); + msg.addRequestPolicies(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.google.api.MethodPolicy.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.google.api.MethodPolicy.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.google.api.MethodPolicy} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.api.MethodPolicy.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSelector(); + if (f.length > 0) { + writer.writeString( + 9, + f + ); + } + f = message.getRequestPoliciesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + proto.google.api.FieldPolicy.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string selector = 9; + * @return {string} + */ +proto.google.api.MethodPolicy.prototype.getSelector = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 9, "")); +}; + + +/** + * @param {string} value + * @return {!proto.google.api.MethodPolicy} returns this + */ +proto.google.api.MethodPolicy.prototype.setSelector = function(value) { + return jspb.Message.setProto3StringField(this, 9, value); +}; + + +/** + * repeated FieldPolicy request_policies = 2; + * @return {!Array} + */ +proto.google.api.MethodPolicy.prototype.getRequestPoliciesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.google.api.FieldPolicy, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.google.api.MethodPolicy} returns this +*/ +proto.google.api.MethodPolicy.prototype.setRequestPoliciesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.google.api.FieldPolicy=} opt_value + * @param {number=} opt_index + * @return {!proto.google.api.FieldPolicy} + */ +proto.google.api.MethodPolicy.prototype.addRequestPolicies = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.google.api.FieldPolicy, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.google.api.MethodPolicy} returns this + */ +proto.google.api.MethodPolicy.prototype.clearRequestPoliciesList = function() { + return this.setRequestPoliciesList([]); +}; + + + +/** + * A tuple of {field number, class constructor} for the extension + * field named `fieldPolicy`. + * @type {!jspb.ExtensionFieldInfo} + */ +proto.google.api.fieldPolicy = new jspb.ExtensionFieldInfo( + 158361448, + {fieldPolicy: 0}, + proto.google.api.FieldPolicy, + /** @type {?function((boolean|undefined),!jspb.Message=): !Object} */ ( + proto.google.api.FieldPolicy.toObject), + 0); + +google_protobuf_descriptor_pb.FieldOptions.extensionsBinary[158361448] = new jspb.ExtensionFieldBinaryInfo( + proto.google.api.fieldPolicy, + jspb.BinaryReader.prototype.readMessage, + jspb.BinaryWriter.prototype.writeMessage, + proto.google.api.FieldPolicy.serializeBinaryToWriter, + proto.google.api.FieldPolicy.deserializeBinaryFromReader, + false); +// This registers the extension field with the extended class, so that +// toObject() will function correctly. +google_protobuf_descriptor_pb.FieldOptions.extensions[158361448] = proto.google.api.fieldPolicy; + + +/** + * A tuple of {field number, class constructor} for the extension + * field named `methodPolicy`. + * @type {!jspb.ExtensionFieldInfo} + */ +proto.google.api.methodPolicy = new jspb.ExtensionFieldInfo( + 161893301, + {methodPolicy: 0}, + proto.google.api.MethodPolicy, + /** @type {?function((boolean|undefined),!jspb.Message=): !Object} */ ( + proto.google.api.MethodPolicy.toObject), + 0); + +google_protobuf_descriptor_pb.MethodOptions.extensionsBinary[161893301] = new jspb.ExtensionFieldBinaryInfo( + proto.google.api.methodPolicy, + jspb.BinaryReader.prototype.readMessage, + jspb.BinaryWriter.prototype.writeMessage, + proto.google.api.MethodPolicy.serializeBinaryToWriter, + proto.google.api.MethodPolicy.deserializeBinaryFromReader, + false); +// This registers the extension field with the extended class, so that +// toObject() will function correctly. +google_protobuf_descriptor_pb.MethodOptions.extensions[161893301] = proto.google.api.methodPolicy; + +goog.object.extend(exports, proto.google.api); diff --git a/api/js/api/multicast_group_pb.d.ts b/api/js/api/multicast_group_pb.d.ts index f63a2d55..3afc4b52 100644 --- a/api/js/api/multicast_group_pb.d.ts +++ b/api/js/api/multicast_group_pb.d.ts @@ -430,6 +430,9 @@ export class MulticastGroupQueueItem extends jspb.Message { getData_asB64(): string; setData(value: Uint8Array | string): void; + getEmitAt(): number; + setEmitAt(value: number): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): MulticastGroupQueueItem.AsObject; static toObject(includeInstance: boolean, msg: MulticastGroupQueueItem): MulticastGroupQueueItem.AsObject; @@ -446,6 +449,7 @@ export namespace MulticastGroupQueueItem { fCnt: number, fPort: number, data: Uint8Array | string, + emitAt: number, } } diff --git a/api/js/api/multicast_group_pb.js b/api/js/api/multicast_group_pb.js index aa67af28..ea575800 100644 --- a/api/js/api/multicast_group_pb.js +++ b/api/js/api/multicast_group_pb.js @@ -3334,7 +3334,8 @@ proto.api.MulticastGroupQueueItem.toObject = function(includeInstance, msg) { multicastGroupId: jspb.Message.getFieldWithDefault(msg, 1, ""), fCnt: jspb.Message.getFieldWithDefault(msg, 2, 0), fPort: jspb.Message.getFieldWithDefault(msg, 3, 0), - data: msg.getData_asB64() + data: msg.getData_asB64(), + emitAt: jspb.Message.getFieldWithDefault(msg, 5, 0) }; if (includeInstance) { @@ -3387,6 +3388,10 @@ proto.api.MulticastGroupQueueItem.deserializeBinaryFromReader = function(msg, re var value = /** @type {!Uint8Array} */ (reader.readBytes()); msg.setData(value); break; + case 5: + var value = /** @type {number} */ (reader.readInt64()); + msg.setEmitAt(value); + break; default: reader.skipField(); break; @@ -3444,6 +3449,13 @@ proto.api.MulticastGroupQueueItem.serializeBinaryToWriter = function(message, wr f ); } + f = message.getEmitAt(); + if (f !== 0) { + writer.writeInt64( + 5, + f + ); + } }; @@ -3543,6 +3555,24 @@ proto.api.MulticastGroupQueueItem.prototype.setData = function(value) { }; +/** + * optional int64 emit_at = 5; + * @return {number} + */ +proto.api.MulticastGroupQueueItem.prototype.getEmitAt = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.api.MulticastGroupQueueItem} returns this + */ +proto.api.MulticastGroupQueueItem.prototype.setEmitAt = function(value) { + return jspb.Message.setProto3IntField(this, 5, value); +}; + + diff --git a/api/js/google/api/client_pb.d.ts b/api/js/google/api/client_pb.d.ts index a16fa00c..9864dbff 100644 --- a/api/js/google/api/client_pb.d.ts +++ b/api/js/google/api/client_pb.d.ts @@ -145,6 +145,9 @@ export class Publishing extends jspb.Message { getProtoReferenceDocumentationUri(): string; setProtoReferenceDocumentationUri(value: string): void; + getRestReferenceDocumentationUri(): string; + setRestReferenceDocumentationUri(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): Publishing.AsObject; static toObject(includeInstance: boolean, msg: Publishing): Publishing.AsObject; @@ -167,6 +170,7 @@ export namespace Publishing { organization: ClientLibraryOrganizationMap[keyof ClientLibraryOrganizationMap], librarySettingsList: Array, protoReferenceDocumentationUri: string, + restReferenceDocumentationUri: string, } } @@ -386,6 +390,11 @@ export class MethodSettings extends jspb.Message { getLongRunning(): MethodSettings.LongRunning | undefined; setLongRunning(value?: MethodSettings.LongRunning): void; + clearAutoPopulatedFieldsList(): void; + getAutoPopulatedFieldsList(): Array; + setAutoPopulatedFieldsList(value: Array): void; + addAutoPopulatedFields(value: string, index?: number): string; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): MethodSettings.AsObject; static toObject(includeInstance: boolean, msg: MethodSettings): MethodSettings.AsObject; @@ -400,6 +409,7 @@ export namespace MethodSettings { export type AsObject = { selector: string, longRunning?: MethodSettings.LongRunning.AsObject, + autoPopulatedFieldsList: Array, } export class LongRunning extends jspb.Message { @@ -447,6 +457,8 @@ export namespace MethodSettings { export const oauthScopes: jspb.ExtensionFieldInfo; + export const apiVersion: jspb.ExtensionFieldInfo; + export interface ClientLibraryOrganizationMap { CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED: 0; CLOUD: 1; diff --git a/api/js/google/api/client_pb.js b/api/js/google/api/client_pb.js index e51c4c74..3280efbf 100644 --- a/api/js/google/api/client_pb.js +++ b/api/js/google/api/client_pb.js @@ -33,6 +33,7 @@ goog.exportSymbol('proto.google.api.PhpSettings', null, global); goog.exportSymbol('proto.google.api.Publishing', null, global); goog.exportSymbol('proto.google.api.PythonSettings', null, global); goog.exportSymbol('proto.google.api.RubySettings', null, global); +goog.exportSymbol('proto.google.api.apiVersion', null, global); goog.exportSymbol('proto.google.api.defaultHost', null, global); goog.exportSymbol('proto.google.api.methodSignatureList', null, global); goog.exportSymbol('proto.google.api.oauthScopes', null, global); @@ -278,7 +279,7 @@ if (goog.DEBUG && !COMPILED) { * @constructor */ proto.google.api.MethodSettings = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); + jspb.Message.initialize(this, opt_data, 0, -1, proto.google.api.MethodSettings.repeatedFields_, null); }; goog.inherits(proto.google.api.MethodSettings, jspb.Message); if (goog.DEBUG && !COMPILED) { @@ -1143,7 +1144,8 @@ proto.google.api.Publishing.toObject = function(includeInstance, msg) { organization: jspb.Message.getFieldWithDefault(msg, 107, 0), librarySettingsList: jspb.Message.toObjectList(msg.getLibrarySettingsList(), proto.google.api.ClientLibrarySettings.toObject, includeInstance), - protoReferenceDocumentationUri: jspb.Message.getFieldWithDefault(msg, 110, "") + protoReferenceDocumentationUri: jspb.Message.getFieldWithDefault(msg, 110, ""), + restReferenceDocumentationUri: jspb.Message.getFieldWithDefault(msg, 111, "") }; if (includeInstance) { @@ -1222,6 +1224,10 @@ proto.google.api.Publishing.deserializeBinaryFromReader = function(msg, reader) var value = /** @type {string} */ (reader.readString()); msg.setProtoReferenceDocumentationUri(value); break; + case 111: + var value = /** @type {string} */ (reader.readString()); + msg.setRestReferenceDocumentationUri(value); + break; default: reader.skipField(); break; @@ -1323,6 +1329,13 @@ proto.google.api.Publishing.serializeBinaryToWriter = function(message, writer) f ); } + f = message.getRestReferenceDocumentationUri(); + if (f.length > 0) { + writer.writeString( + 111, + f + ); + } }; @@ -1565,6 +1578,24 @@ proto.google.api.Publishing.prototype.setProtoReferenceDocumentationUri = functi }; +/** + * optional string rest_reference_documentation_uri = 111; + * @return {string} + */ +proto.google.api.Publishing.prototype.getRestReferenceDocumentationUri = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 111, "")); +}; + + +/** + * @param {string} value + * @return {!proto.google.api.Publishing} returns this + */ +proto.google.api.Publishing.prototype.setRestReferenceDocumentationUri = function(value) { + return jspb.Message.setProto3StringField(this, 111, value); +}; + + @@ -3057,6 +3088,13 @@ proto.google.api.GoSettings.prototype.hasCommon = function() { +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.google.api.MethodSettings.repeatedFields_ = [3]; + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -3089,7 +3127,8 @@ proto.google.api.MethodSettings.prototype.toObject = function(opt_includeInstanc proto.google.api.MethodSettings.toObject = function(includeInstance, msg) { var f, obj = { selector: jspb.Message.getFieldWithDefault(msg, 1, ""), - longRunning: (f = msg.getLongRunning()) && proto.google.api.MethodSettings.LongRunning.toObject(includeInstance, f) + longRunning: (f = msg.getLongRunning()) && proto.google.api.MethodSettings.LongRunning.toObject(includeInstance, f), + autoPopulatedFieldsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f }; if (includeInstance) { @@ -3135,6 +3174,10 @@ proto.google.api.MethodSettings.deserializeBinaryFromReader = function(msg, read reader.readMessage(value,proto.google.api.MethodSettings.LongRunning.deserializeBinaryFromReader); msg.setLongRunning(value); break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.addAutoPopulatedFields(value); + break; default: reader.skipField(); break; @@ -3179,6 +3222,13 @@ proto.google.api.MethodSettings.serializeBinaryToWriter = function(message, writ proto.google.api.MethodSettings.LongRunning.serializeBinaryToWriter ); } + f = message.getAutoPopulatedFieldsList(); + if (f.length > 0) { + writer.writeRepeatedString( + 3, + f + ); + } }; @@ -3520,6 +3570,43 @@ proto.google.api.MethodSettings.prototype.hasLongRunning = function() { }; +/** + * repeated string auto_populated_fields = 3; + * @return {!Array} + */ +proto.google.api.MethodSettings.prototype.getAutoPopulatedFieldsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.google.api.MethodSettings} returns this + */ +proto.google.api.MethodSettings.prototype.setAutoPopulatedFieldsList = function(value) { + return jspb.Message.setField(this, 3, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.google.api.MethodSettings} returns this + */ +proto.google.api.MethodSettings.prototype.addAutoPopulatedFields = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 3, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.google.api.MethodSettings} returns this + */ +proto.google.api.MethodSettings.prototype.clearAutoPopulatedFieldsList = function() { + return this.setAutoPopulatedFieldsList([]); +}; + + /** * @enum {number} */ @@ -3618,4 +3705,29 @@ google_protobuf_descriptor_pb.ServiceOptions.extensionsBinary[1050] = new jspb.E // toObject() will function correctly. google_protobuf_descriptor_pb.ServiceOptions.extensions[1050] = proto.google.api.oauthScopes; + +/** + * A tuple of {field number, class constructor} for the extension + * field named `apiVersion`. + * @type {!jspb.ExtensionFieldInfo} + */ +proto.google.api.apiVersion = new jspb.ExtensionFieldInfo( + 525000001, + {apiVersion: 0}, + null, + /** @type {?function((boolean|undefined),!jspb.Message=): !Object} */ ( + null), + 0); + +google_protobuf_descriptor_pb.ServiceOptions.extensionsBinary[525000001] = new jspb.ExtensionFieldBinaryInfo( + proto.google.api.apiVersion, + jspb.BinaryReader.prototype.readString, + jspb.BinaryWriter.prototype.writeString, + undefined, + undefined, + false); +// This registers the extension field with the extended class, so that +// toObject() will function correctly. +google_protobuf_descriptor_pb.ServiceOptions.extensions[525000001] = proto.google.api.apiVersion; + goog.object.extend(exports, proto.google.api); diff --git a/api/js/google/api/control_pb.d.ts b/api/js/google/api/control_pb.d.ts index a3b5474b..bb4bc7f5 100644 --- a/api/js/google/api/control_pb.d.ts +++ b/api/js/google/api/control_pb.d.ts @@ -2,11 +2,17 @@ // file: google/api/control.proto import * as jspb from "google-protobuf"; +import * as google_api_policy_pb from "../../google/api/policy_pb"; export class Control extends jspb.Message { getEnvironment(): string; setEnvironment(value: string): void; + clearMethodPoliciesList(): void; + getMethodPoliciesList(): Array; + setMethodPoliciesList(value: Array): void; + addMethodPolicies(value?: google_api_policy_pb.MethodPolicy, index?: number): google_api_policy_pb.MethodPolicy; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): Control.AsObject; static toObject(includeInstance: boolean, msg: Control): Control.AsObject; @@ -20,6 +26,7 @@ export class Control extends jspb.Message { export namespace Control { export type AsObject = { environment: string, + methodPoliciesList: Array, } } diff --git a/api/js/google/api/control_pb.js b/api/js/google/api/control_pb.js index 6f1bdfcd..98ed322c 100644 --- a/api/js/google/api/control_pb.js +++ b/api/js/google/api/control_pb.js @@ -12,6 +12,8 @@ var jspb = require('google-protobuf'); var goog = jspb; var global = Function('return this')(); +var google_api_policy_pb = require('../../google/api/policy_pb.js'); +goog.object.extend(proto, google_api_policy_pb); goog.exportSymbol('proto.google.api.Control', null, global); /** * Generated by JsPbCodeGenerator. @@ -24,7 +26,7 @@ goog.exportSymbol('proto.google.api.Control', null, global); * @constructor */ proto.google.api.Control = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); + jspb.Message.initialize(this, opt_data, 0, -1, proto.google.api.Control.repeatedFields_, null); }; goog.inherits(proto.google.api.Control, jspb.Message); if (goog.DEBUG && !COMPILED) { @@ -35,6 +37,13 @@ if (goog.DEBUG && !COMPILED) { proto.google.api.Control.displayName = 'proto.google.api.Control'; } +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.google.api.Control.repeatedFields_ = [4]; + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -66,7 +75,9 @@ proto.google.api.Control.prototype.toObject = function(opt_includeInstance) { */ proto.google.api.Control.toObject = function(includeInstance, msg) { var f, obj = { - environment: jspb.Message.getFieldWithDefault(msg, 1, "") + environment: jspb.Message.getFieldWithDefault(msg, 1, ""), + methodPoliciesList: jspb.Message.toObjectList(msg.getMethodPoliciesList(), + google_api_policy_pb.MethodPolicy.toObject, includeInstance) }; if (includeInstance) { @@ -107,6 +118,11 @@ proto.google.api.Control.deserializeBinaryFromReader = function(msg, reader) { var value = /** @type {string} */ (reader.readString()); msg.setEnvironment(value); break; + case 4: + var value = new google_api_policy_pb.MethodPolicy; + reader.readMessage(value,google_api_policy_pb.MethodPolicy.deserializeBinaryFromReader); + msg.addMethodPolicies(value); + break; default: reader.skipField(); break; @@ -143,6 +159,14 @@ proto.google.api.Control.serializeBinaryToWriter = function(message, writer) { f ); } + f = message.getMethodPoliciesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 4, + f, + google_api_policy_pb.MethodPolicy.serializeBinaryToWriter + ); + } }; @@ -164,4 +188,42 @@ proto.google.api.Control.prototype.setEnvironment = function(value) { }; +/** + * repeated MethodPolicy method_policies = 4; + * @return {!Array} + */ +proto.google.api.Control.prototype.getMethodPoliciesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, google_api_policy_pb.MethodPolicy, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.google.api.Control} returns this +*/ +proto.google.api.Control.prototype.setMethodPoliciesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 4, value); +}; + + +/** + * @param {!proto.google.api.MethodPolicy=} opt_value + * @param {number=} opt_index + * @return {!proto.google.api.MethodPolicy} + */ +proto.google.api.Control.prototype.addMethodPolicies = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.google.api.MethodPolicy, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.google.api.Control} returns this + */ +proto.google.api.Control.prototype.clearMethodPoliciesList = function() { + return this.setMethodPoliciesList([]); +}; + + goog.object.extend(exports, proto.google.api); diff --git a/api/js/google/api/error_reason_pb.d.ts b/api/js/google/api/error_reason_pb.d.ts index 04835884..d06721aa 100644 --- a/api/js/google/api/error_reason_pb.d.ts +++ b/api/js/google/api/error_reason_pb.d.ts @@ -34,6 +34,7 @@ export interface ErrorReasonMap { ORG_RESTRICTION_HEADER_INVALID: 28; SERVICE_NOT_VISIBLE: 29; GCP_SUSPENDED: 30; + LOCATION_POLICY_VIOLATED: 31; } export const ErrorReason: ErrorReasonMap; diff --git a/api/js/google/api/error_reason_pb.js b/api/js/google/api/error_reason_pb.js index 725ef6d8..54208c0e 100644 --- a/api/js/google/api/error_reason_pb.js +++ b/api/js/google/api/error_reason_pb.js @@ -46,7 +46,8 @@ proto.google.api.ErrorReason = { ORG_RESTRICTION_VIOLATION: 27, ORG_RESTRICTION_HEADER_INVALID: 28, SERVICE_NOT_VISIBLE: 29, - GCP_SUSPENDED: 30 + GCP_SUSPENDED: 30, + LOCATION_POLICY_VIOLATED: 31 }; goog.object.extend(exports, proto.google.api); diff --git a/api/js/google/api/field_behavior_pb.d.ts b/api/js/google/api/field_behavior_pb.d.ts index bf691081..f8b65a4c 100644 --- a/api/js/google/api/field_behavior_pb.d.ts +++ b/api/js/google/api/field_behavior_pb.d.ts @@ -15,6 +15,7 @@ export interface FieldBehaviorMap { IMMUTABLE: 5; UNORDERED_LIST: 6; NON_EMPTY_DEFAULT: 7; + IDENTIFIER: 8; } export const FieldBehavior: FieldBehaviorMap; diff --git a/api/js/google/api/field_behavior_pb.js b/api/js/google/api/field_behavior_pb.js index afb83b49..80dfb188 100644 --- a/api/js/google/api/field_behavior_pb.js +++ b/api/js/google/api/field_behavior_pb.js @@ -27,7 +27,8 @@ proto.google.api.FieldBehavior = { INPUT_ONLY: 4, IMMUTABLE: 5, UNORDERED_LIST: 6, - NON_EMPTY_DEFAULT: 7 + NON_EMPTY_DEFAULT: 7, + IDENTIFIER: 8 }; @@ -46,11 +47,11 @@ proto.google.api.fieldBehaviorList = new jspb.ExtensionFieldInfo( google_protobuf_descriptor_pb.FieldOptions.extensionsBinary[1052] = new jspb.ExtensionFieldBinaryInfo( proto.google.api.fieldBehaviorList, - jspb.BinaryReader.prototype.readPackedEnum, - jspb.BinaryWriter.prototype.writePackedEnum, + jspb.BinaryReader.prototype.readEnum, + jspb.BinaryWriter.prototype.writeRepeatedEnum, undefined, undefined, - true); + false); // This registers the extension field with the extended class, so that // toObject() will function correctly. google_protobuf_descriptor_pb.FieldOptions.extensions[1052] = proto.google.api.fieldBehaviorList; diff --git a/api/js/google/api/field_info_grpc_pb.d.ts b/api/js/google/api/field_info_grpc_pb.d.ts new file mode 100644 index 00000000..51b4d695 --- /dev/null +++ b/api/js/google/api/field_info_grpc_pb.d.ts @@ -0,0 +1 @@ +// GENERATED CODE -- NO SERVICES IN PROTO diff --git a/api/js/google/api/field_info_pb.d.ts b/api/js/google/api/field_info_pb.d.ts new file mode 100644 index 00000000..d31daa5f --- /dev/null +++ b/api/js/google/api/field_info_pb.d.ts @@ -0,0 +1,38 @@ +// package: google.api +// file: google/api/field_info.proto + +import * as jspb from "google-protobuf"; +import * as google_protobuf_descriptor_pb from "google-protobuf/google/protobuf/descriptor_pb"; + +export class FieldInfo extends jspb.Message { + getFormat(): FieldInfo.FormatMap[keyof FieldInfo.FormatMap]; + setFormat(value: FieldInfo.FormatMap[keyof FieldInfo.FormatMap]): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): FieldInfo.AsObject; + static toObject(includeInstance: boolean, msg: FieldInfo): FieldInfo.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: FieldInfo, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): FieldInfo; + static deserializeBinaryFromReader(message: FieldInfo, reader: jspb.BinaryReader): FieldInfo; +} + +export namespace FieldInfo { + export type AsObject = { + format: FieldInfo.FormatMap[keyof FieldInfo.FormatMap], + } + + export interface FormatMap { + FORMAT_UNSPECIFIED: 0; + UUID4: 1; + IPV4: 2; + IPV6: 3; + IPV4_OR_IPV6: 4; + } + + export const Format: FormatMap; +} + + export const fieldInfo: jspb.ExtensionFieldInfo; + diff --git a/api/js/google/api/field_info_pb.js b/api/js/google/api/field_info_pb.js new file mode 100644 index 00000000..4c06cb32 --- /dev/null +++ b/api/js/google/api/field_info_pb.js @@ -0,0 +1,207 @@ +// source: google/api/field_info.proto +/** + * @fileoverview + * @enhanceable + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +var google_protobuf_descriptor_pb = require('google-protobuf/google/protobuf/descriptor_pb.js'); +goog.object.extend(proto, google_protobuf_descriptor_pb); +goog.exportSymbol('proto.google.api.FieldInfo', null, global); +goog.exportSymbol('proto.google.api.FieldInfo.Format', null, global); +goog.exportSymbol('proto.google.api.fieldInfo', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.google.api.FieldInfo = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.google.api.FieldInfo, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.google.api.FieldInfo.displayName = 'proto.google.api.FieldInfo'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.google.api.FieldInfo.prototype.toObject = function(opt_includeInstance) { + return proto.google.api.FieldInfo.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.google.api.FieldInfo} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.api.FieldInfo.toObject = function(includeInstance, msg) { + var f, obj = { + format: jspb.Message.getFieldWithDefault(msg, 1, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.google.api.FieldInfo} + */ +proto.google.api.FieldInfo.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.google.api.FieldInfo; + return proto.google.api.FieldInfo.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.google.api.FieldInfo} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.google.api.FieldInfo} + */ +proto.google.api.FieldInfo.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!proto.google.api.FieldInfo.Format} */ (reader.readEnum()); + msg.setFormat(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.google.api.FieldInfo.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.google.api.FieldInfo.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.google.api.FieldInfo} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.api.FieldInfo.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getFormat(); + if (f !== 0.0) { + writer.writeEnum( + 1, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.google.api.FieldInfo.Format = { + FORMAT_UNSPECIFIED: 0, + UUID4: 1, + IPV4: 2, + IPV6: 3, + IPV4_OR_IPV6: 4 +}; + +/** + * optional Format format = 1; + * @return {!proto.google.api.FieldInfo.Format} + */ +proto.google.api.FieldInfo.prototype.getFormat = function() { + return /** @type {!proto.google.api.FieldInfo.Format} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {!proto.google.api.FieldInfo.Format} value + * @return {!proto.google.api.FieldInfo} returns this + */ +proto.google.api.FieldInfo.prototype.setFormat = function(value) { + return jspb.Message.setProto3EnumField(this, 1, value); +}; + + + +/** + * A tuple of {field number, class constructor} for the extension + * field named `fieldInfo`. + * @type {!jspb.ExtensionFieldInfo} + */ +proto.google.api.fieldInfo = new jspb.ExtensionFieldInfo( + 291403980, + {fieldInfo: 0}, + proto.google.api.FieldInfo, + /** @type {?function((boolean|undefined),!jspb.Message=): !Object} */ ( + proto.google.api.FieldInfo.toObject), + 0); + +google_protobuf_descriptor_pb.FieldOptions.extensionsBinary[291403980] = new jspb.ExtensionFieldBinaryInfo( + proto.google.api.fieldInfo, + jspb.BinaryReader.prototype.readMessage, + jspb.BinaryWriter.prototype.writeMessage, + proto.google.api.FieldInfo.serializeBinaryToWriter, + proto.google.api.FieldInfo.deserializeBinaryFromReader, + false); +// This registers the extension field with the extended class, so that +// toObject() will function correctly. +google_protobuf_descriptor_pb.FieldOptions.extensions[291403980] = proto.google.api.fieldInfo; + +goog.object.extend(exports, proto.google.api); diff --git a/api/js/google/api/policy_grpc_pb.d.ts b/api/js/google/api/policy_grpc_pb.d.ts new file mode 100644 index 00000000..51b4d695 --- /dev/null +++ b/api/js/google/api/policy_grpc_pb.d.ts @@ -0,0 +1 @@ +// GENERATED CODE -- NO SERVICES IN PROTO diff --git a/api/js/google/api/policy_pb.d.ts b/api/js/google/api/policy_pb.d.ts new file mode 100644 index 00000000..226c546c --- /dev/null +++ b/api/js/google/api/policy_pb.d.ts @@ -0,0 +1,64 @@ +// package: google.api +// file: google/api/policy.proto + +import * as jspb from "google-protobuf"; +import * as google_protobuf_descriptor_pb from "google-protobuf/google/protobuf/descriptor_pb"; + +export class FieldPolicy extends jspb.Message { + getSelector(): string; + setSelector(value: string): void; + + getResourcePermission(): string; + setResourcePermission(value: string): void; + + getResourceType(): string; + setResourceType(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): FieldPolicy.AsObject; + static toObject(includeInstance: boolean, msg: FieldPolicy): FieldPolicy.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: FieldPolicy, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): FieldPolicy; + static deserializeBinaryFromReader(message: FieldPolicy, reader: jspb.BinaryReader): FieldPolicy; +} + +export namespace FieldPolicy { + export type AsObject = { + selector: string, + resourcePermission: string, + resourceType: string, + } +} + +export class MethodPolicy extends jspb.Message { + getSelector(): string; + setSelector(value: string): void; + + clearRequestPoliciesList(): void; + getRequestPoliciesList(): Array; + setRequestPoliciesList(value: Array): void; + addRequestPolicies(value?: FieldPolicy, index?: number): FieldPolicy; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): MethodPolicy.AsObject; + static toObject(includeInstance: boolean, msg: MethodPolicy): MethodPolicy.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: MethodPolicy, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): MethodPolicy; + static deserializeBinaryFromReader(message: MethodPolicy, reader: jspb.BinaryReader): MethodPolicy; +} + +export namespace MethodPolicy { + export type AsObject = { + selector: string, + requestPoliciesList: Array, + } +} + + export const fieldPolicy: jspb.ExtensionFieldInfo; + + export const methodPolicy: jspb.ExtensionFieldInfo; + diff --git a/api/js/google/api/policy_pb.js b/api/js/google/api/policy_pb.js new file mode 100644 index 00000000..eed30c33 --- /dev/null +++ b/api/js/google/api/policy_pb.js @@ -0,0 +1,493 @@ +// source: google/api/policy.proto +/** + * @fileoverview + * @enhanceable + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +var google_protobuf_descriptor_pb = require('google-protobuf/google/protobuf/descriptor_pb.js'); +goog.object.extend(proto, google_protobuf_descriptor_pb); +goog.exportSymbol('proto.google.api.FieldPolicy', null, global); +goog.exportSymbol('proto.google.api.MethodPolicy', null, global); +goog.exportSymbol('proto.google.api.fieldPolicy', null, global); +goog.exportSymbol('proto.google.api.methodPolicy', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.google.api.FieldPolicy = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.google.api.FieldPolicy, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.google.api.FieldPolicy.displayName = 'proto.google.api.FieldPolicy'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.google.api.MethodPolicy = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.google.api.MethodPolicy.repeatedFields_, null); +}; +goog.inherits(proto.google.api.MethodPolicy, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.google.api.MethodPolicy.displayName = 'proto.google.api.MethodPolicy'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.google.api.FieldPolicy.prototype.toObject = function(opt_includeInstance) { + return proto.google.api.FieldPolicy.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.google.api.FieldPolicy} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.api.FieldPolicy.toObject = function(includeInstance, msg) { + var f, obj = { + selector: jspb.Message.getFieldWithDefault(msg, 1, ""), + resourcePermission: jspb.Message.getFieldWithDefault(msg, 2, ""), + resourceType: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.google.api.FieldPolicy} + */ +proto.google.api.FieldPolicy.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.google.api.FieldPolicy; + return proto.google.api.FieldPolicy.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.google.api.FieldPolicy} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.google.api.FieldPolicy} + */ +proto.google.api.FieldPolicy.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setSelector(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setResourcePermission(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setResourceType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.google.api.FieldPolicy.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.google.api.FieldPolicy.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.google.api.FieldPolicy} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.api.FieldPolicy.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSelector(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getResourcePermission(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getResourceType(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional string selector = 1; + * @return {string} + */ +proto.google.api.FieldPolicy.prototype.getSelector = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.google.api.FieldPolicy} returns this + */ +proto.google.api.FieldPolicy.prototype.setSelector = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string resource_permission = 2; + * @return {string} + */ +proto.google.api.FieldPolicy.prototype.getResourcePermission = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.google.api.FieldPolicy} returns this + */ +proto.google.api.FieldPolicy.prototype.setResourcePermission = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string resource_type = 3; + * @return {string} + */ +proto.google.api.FieldPolicy.prototype.getResourceType = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.google.api.FieldPolicy} returns this + */ +proto.google.api.FieldPolicy.prototype.setResourceType = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.google.api.MethodPolicy.repeatedFields_ = [2]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.google.api.MethodPolicy.prototype.toObject = function(opt_includeInstance) { + return proto.google.api.MethodPolicy.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.google.api.MethodPolicy} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.api.MethodPolicy.toObject = function(includeInstance, msg) { + var f, obj = { + selector: jspb.Message.getFieldWithDefault(msg, 9, ""), + requestPoliciesList: jspb.Message.toObjectList(msg.getRequestPoliciesList(), + proto.google.api.FieldPolicy.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.google.api.MethodPolicy} + */ +proto.google.api.MethodPolicy.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.google.api.MethodPolicy; + return proto.google.api.MethodPolicy.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.google.api.MethodPolicy} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.google.api.MethodPolicy} + */ +proto.google.api.MethodPolicy.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 9: + var value = /** @type {string} */ (reader.readString()); + msg.setSelector(value); + break; + case 2: + var value = new proto.google.api.FieldPolicy; + reader.readMessage(value,proto.google.api.FieldPolicy.deserializeBinaryFromReader); + msg.addRequestPolicies(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.google.api.MethodPolicy.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.google.api.MethodPolicy.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.google.api.MethodPolicy} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.google.api.MethodPolicy.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSelector(); + if (f.length > 0) { + writer.writeString( + 9, + f + ); + } + f = message.getRequestPoliciesList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, + f, + proto.google.api.FieldPolicy.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string selector = 9; + * @return {string} + */ +proto.google.api.MethodPolicy.prototype.getSelector = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 9, "")); +}; + + +/** + * @param {string} value + * @return {!proto.google.api.MethodPolicy} returns this + */ +proto.google.api.MethodPolicy.prototype.setSelector = function(value) { + return jspb.Message.setProto3StringField(this, 9, value); +}; + + +/** + * repeated FieldPolicy request_policies = 2; + * @return {!Array} + */ +proto.google.api.MethodPolicy.prototype.getRequestPoliciesList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.google.api.FieldPolicy, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.google.api.MethodPolicy} returns this +*/ +proto.google.api.MethodPolicy.prototype.setRequestPoliciesList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.google.api.FieldPolicy=} opt_value + * @param {number=} opt_index + * @return {!proto.google.api.FieldPolicy} + */ +proto.google.api.MethodPolicy.prototype.addRequestPolicies = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.google.api.FieldPolicy, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.google.api.MethodPolicy} returns this + */ +proto.google.api.MethodPolicy.prototype.clearRequestPoliciesList = function() { + return this.setRequestPoliciesList([]); +}; + + + +/** + * A tuple of {field number, class constructor} for the extension + * field named `fieldPolicy`. + * @type {!jspb.ExtensionFieldInfo} + */ +proto.google.api.fieldPolicy = new jspb.ExtensionFieldInfo( + 158361448, + {fieldPolicy: 0}, + proto.google.api.FieldPolicy, + /** @type {?function((boolean|undefined),!jspb.Message=): !Object} */ ( + proto.google.api.FieldPolicy.toObject), + 0); + +google_protobuf_descriptor_pb.FieldOptions.extensionsBinary[158361448] = new jspb.ExtensionFieldBinaryInfo( + proto.google.api.fieldPolicy, + jspb.BinaryReader.prototype.readMessage, + jspb.BinaryWriter.prototype.writeMessage, + proto.google.api.FieldPolicy.serializeBinaryToWriter, + proto.google.api.FieldPolicy.deserializeBinaryFromReader, + false); +// This registers the extension field with the extended class, so that +// toObject() will function correctly. +google_protobuf_descriptor_pb.FieldOptions.extensions[158361448] = proto.google.api.fieldPolicy; + + +/** + * A tuple of {field number, class constructor} for the extension + * field named `methodPolicy`. + * @type {!jspb.ExtensionFieldInfo} + */ +proto.google.api.methodPolicy = new jspb.ExtensionFieldInfo( + 161893301, + {methodPolicy: 0}, + proto.google.api.MethodPolicy, + /** @type {?function((boolean|undefined),!jspb.Message=): !Object} */ ( + proto.google.api.MethodPolicy.toObject), + 0); + +google_protobuf_descriptor_pb.MethodOptions.extensionsBinary[161893301] = new jspb.ExtensionFieldBinaryInfo( + proto.google.api.methodPolicy, + jspb.BinaryReader.prototype.readMessage, + jspb.BinaryWriter.prototype.writeMessage, + proto.google.api.MethodPolicy.serializeBinaryToWriter, + proto.google.api.MethodPolicy.deserializeBinaryFromReader, + false); +// This registers the extension field with the extended class, so that +// toObject() will function correctly. +google_protobuf_descriptor_pb.MethodOptions.extensions[161893301] = proto.google.api.methodPolicy; + +goog.object.extend(exports, proto.google.api); diff --git a/api/md/api/api.md b/api/md/api/api.md index 045fffe8..8c69025b 100644 --- a/api/md/api/api.md +++ b/api/md/api/api.md @@ -3673,6 +3673,7 @@ The actual number of ping-slots per beacon period equals to 2^k. | | f_cnt | [uint32](#uint32) | | Downlink frame-counter. This will be automatically set on enqueue. | | f_port | [uint32](#uint32) | | FPort (must be > 0). | | data | [bytes](#bytes) | | Payload. | +| emit_at | [int64](#int64) | optional | Time to emit message at, in milliseconds after GPS epoch. | diff --git a/api/proto/api/multicast_group.proto b/api/proto/api/multicast_group.proto index 7548e046..2e4ee016 100644 --- a/api/proto/api/multicast_group.proto +++ b/api/proto/api/multicast_group.proto @@ -300,6 +300,9 @@ message MulticastGroupQueueItem { // Payload. bytes data = 4; + + // Time to emit message at, in milliseconds after GPS epoch. + optional int64 emit_at = 5; } message EnqueueMulticastGroupQueueItemRequest { diff --git a/api/python/proto/chirpstack-api/api/multicast_group.proto b/api/python/proto/chirpstack-api/api/multicast_group.proto index ef4f4a2b..73507218 100644 --- a/api/python/proto/chirpstack-api/api/multicast_group.proto +++ b/api/python/proto/chirpstack-api/api/multicast_group.proto @@ -300,6 +300,9 @@ message MulticastGroupQueueItem { // Payload. bytes data = 4; + + // Time to emit message at, in milliseconds after GPS epoch. + optional int64 emit_at = 5; } message EnqueueMulticastGroupQueueItemRequest { diff --git a/api/python/src/chirpstack_api/api/multicast_group_pb2.py b/api/python/src/chirpstack_api/api/multicast_group_pb2.py index c2a16629..438c3299 100644 --- a/api/python/src/chirpstack_api/api/multicast_group_pb2.py +++ b/api/python/src/chirpstack_api/api/multicast_group_pb2.py @@ -18,7 +18,7 @@ from chirpstack_api.common import common_pb2 as chirpstack__api_dot_common_dot_common__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(chirpstack-api/api/multicast_group.proto\x12\x03\x61pi\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\"chirpstack-api/common/common.proto\"\x80\x03\n\x0eMulticastGroup\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x16\n\x0e\x61pplication_id\x18\x03 \x01(\t\x12\x1e\n\x06region\x18\x04 \x01(\x0e\x32\x0e.common.Region\x12\x0f\n\x07mc_addr\x18\x05 \x01(\t\x12\x14\n\x0cmc_nwk_s_key\x18\x06 \x01(\t\x12\x14\n\x0cmc_app_s_key\x18\x07 \x01(\t\x12\r\n\x05\x66_cnt\x18\x08 \x01(\r\x12+\n\ngroup_type\x18\t \x01(\x0e\x32\x17.api.MulticastGroupType\x12\n\n\x02\x64r\x18\n \x01(\r\x12\x11\n\tfrequency\x18\x0b \x01(\r\x12 \n\x18\x63lass_b_ping_slot_period\x18\x0c \x01(\r\x12\x1e\n\x16\x63lass_b_ping_slot_nb_k\x18\x0e \x01(\r\x12\x42\n\x17\x63lass_c_scheduling_type\x18\r \x01(\x0e\x32!.api.MulticastGroupSchedulingType\"\xdf\x01\n\x16MulticastGroupListItem\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x1e\n\x06region\x18\x05 \x01(\x0e\x32\x0e.common.Region\x12+\n\ngroup_type\x18\x06 \x01(\x0e\x32\x17.api.MulticastGroupType\"K\n\x1b\x43reateMulticastGroupRequest\x12,\n\x0fmulticast_group\x18\x01 \x01(\x0b\x32\x13.api.MulticastGroup\"*\n\x1c\x43reateMulticastGroupResponse\x12\n\n\x02id\x18\x01 \x01(\t\"&\n\x18GetMulticastGroupRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\xa9\x01\n\x19GetMulticastGroupResponse\x12,\n\x0fmulticast_group\x18\x01 \x01(\x0b\x32\x13.api.MulticastGroup\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"K\n\x1bUpdateMulticastGroupRequest\x12,\n\x0fmulticast_group\x18\x01 \x01(\x0b\x32\x13.api.MulticastGroup\")\n\x1b\x44\x65leteMulticastGroupRequest\x12\n\n\x02id\x18\x01 \x01(\t\"c\n\x1aListMulticastGroupsRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\x12\x0e\n\x06search\x18\x03 \x01(\t\x12\x16\n\x0e\x61pplication_id\x18\x04 \x01(\t\"_\n\x1bListMulticastGroupsResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\r\x12+\n\x06result\x18\x02 \x03(\x0b\x32\x1b.api.MulticastGroupListItem\"O\n AddDeviceToMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x0f\n\x07\x64\x65v_eui\x18\x02 \x01(\t\"T\n%RemoveDeviceFromMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x0f\n\x07\x64\x65v_eui\x18\x02 \x01(\t\"S\n!AddGatewayToMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x12\n\ngateway_id\x18\x02 \x01(\t\"X\n&RemoveGatewayFromMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x12\n\ngateway_id\x18\x02 \x01(\t\"b\n\x17MulticastGroupQueueItem\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\r\n\x05\x66_cnt\x18\x02 \x01(\r\x12\x0e\n\x06\x66_port\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"Y\n%EnqueueMulticastGroupQueueItemRequest\x12\x30\n\nqueue_item\x18\x01 \x01(\x0b\x32\x1c.api.MulticastGroupQueueItem\"7\n&EnqueueMulticastGroupQueueItemResponse\x12\r\n\x05\x66_cnt\x18\x01 \x01(\r\"=\n\x1f\x46lushMulticastGroupQueueRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\"<\n\x1eListMulticastGroupQueueRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\"N\n\x1fListMulticastGroupQueueResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.api.MulticastGroupQueueItem*.\n\x12MulticastGroupType\x12\x0b\n\x07\x43LASS_C\x10\x00\x12\x0b\n\x07\x43LASS_B\x10\x01*7\n\x1cMulticastGroupSchedulingType\x12\t\n\x05\x44\x45LAY\x10\x00\x12\x0c\n\x08GPS_TIME\x10\x01\x32\xdd\x0c\n\x15MulticastGroupService\x12o\n\x06\x43reate\x12 .api.CreateMulticastGroupRequest\x1a!.api.CreateMulticastGroupResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/api/multicast-groups:\x01*\x12h\n\x03Get\x12\x1d.api.GetMulticastGroupRequest\x1a\x1e.api.GetMulticastGroupResponse\"\"\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/multicast-groups/{id}\x12y\n\x06Update\x12 .api.UpdateMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"5\x82\xd3\xe4\x93\x02/\x1a*/api/multicast-groups/{multicast_group.id}:\x01*\x12\x66\n\x06\x44\x65lete\x12 .api.DeleteMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"\"\x82\xd3\xe4\x93\x02\x1c*\x1a/api/multicast-groups/{id}\x12h\n\x04List\x12\x1f.api.ListMulticastGroupsRequest\x1a .api.ListMulticastGroupsResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\x12\x15/api/multicast-groups\x12\x89\x01\n\tAddDevice\x12%.api.AddDeviceToMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"=\x82\xd3\xe4\x93\x02\x37\"2/api/multicast-groups/{multicast_group_id}/devices:\x01*\x12\x98\x01\n\x0cRemoveDevice\x12*.api.RemoveDeviceFromMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"D\x82\xd3\xe4\x93\x02>*\x82\xd3\xe4\x93\x02\x38\"3/api/multicast-groups/{multicast_group_id}/gateways:\x01*\x12\x9e\x01\n\rRemoveGateway\x12+.api.RemoveGatewayFromMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"H\x82\xd3\xe4\x93\x02\x42*@/api/multicast-groups/{multicast_group_id}/gateways/{gateway_id}\x12\xaa\x01\n\x07\x45nqueue\x12*.api.EnqueueMulticastGroupQueueItemRequest\x1a+.api.EnqueueMulticastGroupQueueItemResponse\"F\x82\xd3\xe4\x93\x02@\";/api/multicast-groups/{queue_item.multicast_group_id}/queue:\x01*\x12\x84\x01\n\nFlushQueue\x12$.api.FlushMulticastGroupQueueRequest\x1a\x16.google.protobuf.Empty\"8\x82\xd3\xe4\x93\x02\x32*0/api/multicast-groups/{multicast_group_id}/queue\x12\x90\x01\n\tListQueue\x12#.api.ListMulticastGroupQueueRequest\x1a$.api.ListMulticastGroupQueueResponse\"8\x82\xd3\xe4\x93\x02\x32\x12\x30/api/multicast-groups/{multicast_group_id}/queueBk\n\x11io.chirpstack.apiB\x13MulticastGroupProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/api\xaa\x02\x0e\x43hirpstack.Apib\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(chirpstack-api/api/multicast_group.proto\x12\x03\x61pi\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\"chirpstack-api/common/common.proto\"\x80\x03\n\x0eMulticastGroup\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x16\n\x0e\x61pplication_id\x18\x03 \x01(\t\x12\x1e\n\x06region\x18\x04 \x01(\x0e\x32\x0e.common.Region\x12\x0f\n\x07mc_addr\x18\x05 \x01(\t\x12\x14\n\x0cmc_nwk_s_key\x18\x06 \x01(\t\x12\x14\n\x0cmc_app_s_key\x18\x07 \x01(\t\x12\r\n\x05\x66_cnt\x18\x08 \x01(\r\x12+\n\ngroup_type\x18\t \x01(\x0e\x32\x17.api.MulticastGroupType\x12\n\n\x02\x64r\x18\n \x01(\r\x12\x11\n\tfrequency\x18\x0b \x01(\r\x12 \n\x18\x63lass_b_ping_slot_period\x18\x0c \x01(\r\x12\x1e\n\x16\x63lass_b_ping_slot_nb_k\x18\x0e \x01(\r\x12\x42\n\x17\x63lass_c_scheduling_type\x18\r \x01(\x0e\x32!.api.MulticastGroupSchedulingType\"\xdf\x01\n\x16MulticastGroupListItem\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x1e\n\x06region\x18\x05 \x01(\x0e\x32\x0e.common.Region\x12+\n\ngroup_type\x18\x06 \x01(\x0e\x32\x17.api.MulticastGroupType\"K\n\x1b\x43reateMulticastGroupRequest\x12,\n\x0fmulticast_group\x18\x01 \x01(\x0b\x32\x13.api.MulticastGroup\"*\n\x1c\x43reateMulticastGroupResponse\x12\n\n\x02id\x18\x01 \x01(\t\"&\n\x18GetMulticastGroupRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\xa9\x01\n\x19GetMulticastGroupResponse\x12,\n\x0fmulticast_group\x18\x01 \x01(\x0b\x32\x13.api.MulticastGroup\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"K\n\x1bUpdateMulticastGroupRequest\x12,\n\x0fmulticast_group\x18\x01 \x01(\x0b\x32\x13.api.MulticastGroup\")\n\x1b\x44\x65leteMulticastGroupRequest\x12\n\n\x02id\x18\x01 \x01(\t\"c\n\x1aListMulticastGroupsRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\x12\x0e\n\x06search\x18\x03 \x01(\t\x12\x16\n\x0e\x61pplication_id\x18\x04 \x01(\t\"_\n\x1bListMulticastGroupsResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\r\x12+\n\x06result\x18\x02 \x03(\x0b\x32\x1b.api.MulticastGroupListItem\"O\n AddDeviceToMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x0f\n\x07\x64\x65v_eui\x18\x02 \x01(\t\"T\n%RemoveDeviceFromMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x0f\n\x07\x64\x65v_eui\x18\x02 \x01(\t\"S\n!AddGatewayToMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x12\n\ngateway_id\x18\x02 \x01(\t\"X\n&RemoveGatewayFromMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x12\n\ngateway_id\x18\x02 \x01(\t\"\x84\x01\n\x17MulticastGroupQueueItem\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\r\n\x05\x66_cnt\x18\x02 \x01(\r\x12\x0e\n\x06\x66_port\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12\x14\n\x07\x65mit_at\x18\x05 \x01(\x03H\x00\x88\x01\x01\x42\n\n\x08_emit_at\"Y\n%EnqueueMulticastGroupQueueItemRequest\x12\x30\n\nqueue_item\x18\x01 \x01(\x0b\x32\x1c.api.MulticastGroupQueueItem\"7\n&EnqueueMulticastGroupQueueItemResponse\x12\r\n\x05\x66_cnt\x18\x01 \x01(\r\"=\n\x1f\x46lushMulticastGroupQueueRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\"<\n\x1eListMulticastGroupQueueRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\"N\n\x1fListMulticastGroupQueueResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.api.MulticastGroupQueueItem*.\n\x12MulticastGroupType\x12\x0b\n\x07\x43LASS_C\x10\x00\x12\x0b\n\x07\x43LASS_B\x10\x01*7\n\x1cMulticastGroupSchedulingType\x12\t\n\x05\x44\x45LAY\x10\x00\x12\x0c\n\x08GPS_TIME\x10\x01\x32\xdd\x0c\n\x15MulticastGroupService\x12o\n\x06\x43reate\x12 .api.CreateMulticastGroupRequest\x1a!.api.CreateMulticastGroupResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/api/multicast-groups:\x01*\x12h\n\x03Get\x12\x1d.api.GetMulticastGroupRequest\x1a\x1e.api.GetMulticastGroupResponse\"\"\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/multicast-groups/{id}\x12y\n\x06Update\x12 .api.UpdateMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"5\x82\xd3\xe4\x93\x02/\x1a*/api/multicast-groups/{multicast_group.id}:\x01*\x12\x66\n\x06\x44\x65lete\x12 .api.DeleteMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"\"\x82\xd3\xe4\x93\x02\x1c*\x1a/api/multicast-groups/{id}\x12h\n\x04List\x12\x1f.api.ListMulticastGroupsRequest\x1a .api.ListMulticastGroupsResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\x12\x15/api/multicast-groups\x12\x89\x01\n\tAddDevice\x12%.api.AddDeviceToMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"=\x82\xd3\xe4\x93\x02\x37\"2/api/multicast-groups/{multicast_group_id}/devices:\x01*\x12\x98\x01\n\x0cRemoveDevice\x12*.api.RemoveDeviceFromMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"D\x82\xd3\xe4\x93\x02>*\x82\xd3\xe4\x93\x02\x38\"3/api/multicast-groups/{multicast_group_id}/gateways:\x01*\x12\x9e\x01\n\rRemoveGateway\x12+.api.RemoveGatewayFromMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"H\x82\xd3\xe4\x93\x02\x42*@/api/multicast-groups/{multicast_group_id}/gateways/{gateway_id}\x12\xaa\x01\n\x07\x45nqueue\x12*.api.EnqueueMulticastGroupQueueItemRequest\x1a+.api.EnqueueMulticastGroupQueueItemResponse\"F\x82\xd3\xe4\x93\x02@\";/api/multicast-groups/{queue_item.multicast_group_id}/queue:\x01*\x12\x84\x01\n\nFlushQueue\x12$.api.FlushMulticastGroupQueueRequest\x1a\x16.google.protobuf.Empty\"8\x82\xd3\xe4\x93\x02\x32*0/api/multicast-groups/{multicast_group_id}/queue\x12\x90\x01\n\tListQueue\x12#.api.ListMulticastGroupQueueRequest\x1a$.api.ListMulticastGroupQueueResponse\"8\x82\xd3\xe4\x93\x02\x32\x12\x30/api/multicast-groups/{multicast_group_id}/queueBk\n\x11io.chirpstack.apiB\x13MulticastGroupProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/api\xaa\x02\x0e\x43hirpstack.Apib\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -50,10 +50,10 @@ _globals['_MULTICASTGROUPSERVICE'].methods_by_name['FlushQueue']._serialized_options = b'\202\323\344\223\0022*0/api/multicast-groups/{multicast_group_id}/queue' _globals['_MULTICASTGROUPSERVICE'].methods_by_name['ListQueue']._options = None _globals['_MULTICASTGROUPSERVICE'].methods_by_name['ListQueue']._serialized_options = b'\202\323\344\223\0022\0220/api/multicast-groups/{multicast_group_id}/queue' - _globals['_MULTICASTGROUPTYPE']._serialized_start=2236 - _globals['_MULTICASTGROUPTYPE']._serialized_end=2282 - _globals['_MULTICASTGROUPSCHEDULINGTYPE']._serialized_start=2284 - _globals['_MULTICASTGROUPSCHEDULINGTYPE']._serialized_end=2339 + _globals['_MULTICASTGROUPTYPE']._serialized_start=2271 + _globals['_MULTICASTGROUPTYPE']._serialized_end=2317 + _globals['_MULTICASTGROUPSCHEDULINGTYPE']._serialized_start=2319 + _globals['_MULTICASTGROUPSCHEDULINGTYPE']._serialized_end=2374 _globals['_MULTICASTGROUP']._serialized_start=178 _globals['_MULTICASTGROUP']._serialized_end=562 _globals['_MULTICASTGROUPLISTITEM']._serialized_start=565 @@ -82,18 +82,18 @@ _globals['_ADDGATEWAYTOMULTICASTGROUPREQUEST']._serialized_end=1691 _globals['_REMOVEGATEWAYFROMMULTICASTGROUPREQUEST']._serialized_start=1693 _globals['_REMOVEGATEWAYFROMMULTICASTGROUPREQUEST']._serialized_end=1781 - _globals['_MULTICASTGROUPQUEUEITEM']._serialized_start=1783 - _globals['_MULTICASTGROUPQUEUEITEM']._serialized_end=1881 - _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMREQUEST']._serialized_start=1883 - _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMREQUEST']._serialized_end=1972 - _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMRESPONSE']._serialized_start=1974 - _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMRESPONSE']._serialized_end=2029 - _globals['_FLUSHMULTICASTGROUPQUEUEREQUEST']._serialized_start=2031 - _globals['_FLUSHMULTICASTGROUPQUEUEREQUEST']._serialized_end=2092 - _globals['_LISTMULTICASTGROUPQUEUEREQUEST']._serialized_start=2094 - _globals['_LISTMULTICASTGROUPQUEUEREQUEST']._serialized_end=2154 - _globals['_LISTMULTICASTGROUPQUEUERESPONSE']._serialized_start=2156 - _globals['_LISTMULTICASTGROUPQUEUERESPONSE']._serialized_end=2234 - _globals['_MULTICASTGROUPSERVICE']._serialized_start=2342 - _globals['_MULTICASTGROUPSERVICE']._serialized_end=3971 + _globals['_MULTICASTGROUPQUEUEITEM']._serialized_start=1784 + _globals['_MULTICASTGROUPQUEUEITEM']._serialized_end=1916 + _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMREQUEST']._serialized_start=1918 + _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMREQUEST']._serialized_end=2007 + _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMRESPONSE']._serialized_start=2009 + _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMRESPONSE']._serialized_end=2064 + _globals['_FLUSHMULTICASTGROUPQUEUEREQUEST']._serialized_start=2066 + _globals['_FLUSHMULTICASTGROUPQUEUEREQUEST']._serialized_end=2127 + _globals['_LISTMULTICASTGROUPQUEUEREQUEST']._serialized_start=2129 + _globals['_LISTMULTICASTGROUPQUEUEREQUEST']._serialized_end=2189 + _globals['_LISTMULTICASTGROUPQUEUERESPONSE']._serialized_start=2191 + _globals['_LISTMULTICASTGROUPQUEUERESPONSE']._serialized_end=2269 + _globals['_MULTICASTGROUPSERVICE']._serialized_start=2377 + _globals['_MULTICASTGROUPSERVICE']._serialized_end=4006 # @@protoc_insertion_point(module_scope) diff --git a/api/python/src/chirpstack_api/api/multicast_group_pb2.pyi b/api/python/src/chirpstack_api/api/multicast_group_pb2.pyi index 4638a73d..607d1892 100644 --- a/api/python/src/chirpstack_api/api/multicast_group_pb2.pyi +++ b/api/python/src/chirpstack_api/api/multicast_group_pb2.pyi @@ -165,16 +165,18 @@ class RemoveGatewayFromMulticastGroupRequest(_message.Message): def __init__(self, multicast_group_id: _Optional[str] = ..., gateway_id: _Optional[str] = ...) -> None: ... class MulticastGroupQueueItem(_message.Message): - __slots__ = ("multicast_group_id", "f_cnt", "f_port", "data") + __slots__ = ("multicast_group_id", "f_cnt", "f_port", "data", "emit_at") MULTICAST_GROUP_ID_FIELD_NUMBER: _ClassVar[int] F_CNT_FIELD_NUMBER: _ClassVar[int] F_PORT_FIELD_NUMBER: _ClassVar[int] DATA_FIELD_NUMBER: _ClassVar[int] + EMIT_AT_FIELD_NUMBER: _ClassVar[int] multicast_group_id: str f_cnt: int f_port: int data: bytes - def __init__(self, multicast_group_id: _Optional[str] = ..., f_cnt: _Optional[int] = ..., f_port: _Optional[int] = ..., data: _Optional[bytes] = ...) -> None: ... + emit_at: int + def __init__(self, multicast_group_id: _Optional[str] = ..., f_cnt: _Optional[int] = ..., f_port: _Optional[int] = ..., data: _Optional[bytes] = ..., emit_at: _Optional[int] = ...) -> None: ... class EnqueueMulticastGroupQueueItemRequest(_message.Message): __slots__ = ("queue_item",) diff --git a/api/rust/proto/chirpstack/api/multicast_group.proto b/api/rust/proto/chirpstack/api/multicast_group.proto index 7548e046..2e4ee016 100644 --- a/api/rust/proto/chirpstack/api/multicast_group.proto +++ b/api/rust/proto/chirpstack/api/multicast_group.proto @@ -300,6 +300,9 @@ message MulticastGroupQueueItem { // Payload. bytes data = 4; + + // Time to emit message at, in milliseconds after GPS epoch. + optional int64 emit_at = 5; } message EnqueueMulticastGroupQueueItemRequest { diff --git a/chirpstack/src/api/multicast.rs b/chirpstack/src/api/multicast.rs index aa6fbedb..a2cdd8e9 100644 --- a/chirpstack/src/api/multicast.rs +++ b/chirpstack/src/api/multicast.rs @@ -407,12 +407,15 @@ impl MulticastGroupService for MulticastGroup { ) .await?; - let f_cnt = downlink::multicast::enqueue(multicast::MulticastGroupQueueItem { + let qi =multicast::MulticastGroupQueueItem { multicast_group_id: mg_id, f_port: req_enq.f_port as i16, data: req_enq.data.clone(), + emit_at_time_since_gps_epoch: req_enq.emit_at, ..Default::default() - }) + }; + + let f_cnt = downlink::multicast::enqueue(qi) .await .map_err(|e| e.status())?; @@ -478,6 +481,7 @@ impl MulticastGroupService for MulticastGroup { f_cnt: qi.f_cnt as u32, f_port: qi.f_port as u32, data: qi.data.clone(), + emit_at: qi.emit_at_time_since_gps_epoch, }); } } diff --git a/chirpstack/src/storage/multicast.rs b/chirpstack/src/storage/multicast.rs index 02feb0b7..163e21ec 100644 --- a/chirpstack/src/storage/multicast.rs +++ b/chirpstack/src/storage/multicast.rs @@ -508,7 +508,7 @@ pub async fn enqueue( f_cnt: mg.f_cnt, f_port: qi.f_port, data: qi.data.clone(), - emit_at_time_since_gps_epoch, + emit_at_time_since_gps_epoch: if qi.emit_at_time_since_gps_epoch.is_some() {qi.emit_at_time_since_gps_epoch} else {emit_at_time_since_gps_epoch}, ..Default::default() }; diff --git a/cross/Dockerfile.aarch64-unknown-linux-musl b/cross/Dockerfile.aarch64-unknown-linux-musl index 1d3915e7..baa4e7ba 100644 --- a/cross/Dockerfile.aarch64-unknown-linux-musl +++ b/cross/Dockerfile.aarch64-unknown-linux-musl @@ -2,5 +2,7 @@ FROM ghcr.io/cross-rs/aarch64-unknown-linux-musl:latest RUN apt-get update && \ apt-get --assume-yes install \ - protobuf-compiler \ - libprotobuf-dev + unzip + +ENV PB_REL="https://github.com/protocolbuffers/protobuf/releases" +RUN curl -LO $PB_REL/download/v26.1/protoc-26.1-linux-x86_64.zip && unzip protoc-26.1-linux-x86_64.zip -d / && mv /include /bin/ diff --git a/cross/Dockerfile.x86_64-unknown-linux-musl b/cross/Dockerfile.x86_64-unknown-linux-musl index 30ac69e7..3c516337 100644 --- a/cross/Dockerfile.x86_64-unknown-linux-musl +++ b/cross/Dockerfile.x86_64-unknown-linux-musl @@ -2,5 +2,7 @@ FROM ghcr.io/cross-rs/x86_64-unknown-linux-musl:latest RUN apt-get update && \ apt-get --assume-yes install \ - protobuf-compiler \ - libprotobuf-dev + unzip + +ENV PB_REL="https://github.com/protocolbuffers/protobuf/releases" +RUN curl -LO $PB_REL/download/v26.1/protoc-26.1-linux-x86_64.zip && unzip protoc-26.1-linux-x86_64.zip -d / && mv /include /bin/