diff --git a/cmd/checkout/klarna-client.go b/cmd/checkout/klarna-client.go index b36f2b5..410121a 100644 --- a/cmd/checkout/klarna-client.go +++ b/cmd/checkout/klarna-client.go @@ -80,7 +80,7 @@ func (k *KlarnaClient) CreateOrder(ctx context.Context, reader io.Reader) (*Chec req.Header.Add("Content-Type", "application/json") req.SetBasicAuth(k.UserName, k.Password) - res, err := http.DefaultClient.Do(req) + res, err := k.client.Do(req) if nil != err { return nil, err } @@ -101,7 +101,7 @@ func (k *KlarnaClient) UpdateOrder(ctx context.Context, orderId string, reader i req.Header.Add("Content-Type", "application/json") req.SetBasicAuth(k.UserName, k.Password) - res, err := http.DefaultClient.Do(req) + res, err := k.client.Do(req) if nil != err { return nil, err } @@ -119,7 +119,7 @@ func (k *KlarnaClient) AbortOrder(ctx context.Context, orderId string) error { req = req.WithContext(spanCtx) req.SetBasicAuth(k.UserName, k.Password) - _, err = http.DefaultClient.Do(req) + _, err = k.client.Do(req) return err } @@ -137,6 +137,6 @@ func (k *KlarnaClient) AcknowledgeOrder(ctx context.Context, orderId string) err req.SetBasicAuth(k.UserName, k.Password) req.Header.Add("Klarna-Idempotency-Key", id.String()) - _, err = http.DefaultClient.Do(req) + _, err = k.client.Do(req) return err } diff --git a/cmd/checkout/klarna-handlers.go b/cmd/checkout/klarna-handlers.go index 4c0d5f0..a336f85 100644 --- a/cmd/checkout/klarna-handlers.go +++ b/cmd/checkout/klarna-handlers.go @@ -120,6 +120,7 @@ func (s *CheckoutPoolServer) KlarnaValidationHandler(w http.ResponseWriter, r *h err := json.NewDecoder(r.Body).Decode(order) if err != nil { w.WriteHeader(http.StatusBadRequest) + return } logger.InfoContext(r.Context(), "Klarna order validation received", "order_id", order.ID, "cart_id", order.MerchantReference1) grain, err := s.getGrainFromKlarnaOrder(r.Context(), order) @@ -146,6 +147,7 @@ func (s *CheckoutPoolServer) KlarnaNotificationHandler(w http.ResponseWriter, r err := json.NewDecoder(r.Body).Decode(order) if err != nil { w.WriteHeader(http.StatusBadRequest) + return } log.Printf("Klarna order notification: %s", order.ID) logger.InfoContext(r.Context(), "Klarna order notification received", "order_id", order.ID) diff --git a/cmd/checkout/pool-server.go b/cmd/checkout/pool-server.go index ca29eba..a182320 100644 --- a/cmd/checkout/pool-server.go +++ b/cmd/checkout/pool-server.go @@ -181,6 +181,20 @@ func (s *CheckoutPoolServer) ConfirmationViewedHandler(w http.ResponseWriter, r return s.WriteResult(w, result.Result) } +func (s *CheckoutPoolServer) ContactDetailsUpdatedHandler(w http.ResponseWriter, r *http.Request, id checkout.CheckoutId) error { + var msg messages.ContactDetailsUpdated + if err := json.NewDecoder(r.Body).Decode(&msg); err != nil { + return err + } + + result, err := s.ApplyLocal(r.Context(), id, &msg) + if err != nil { + return err + } + + return s.WriteResult(w, result.Result) +} + func (s *CheckoutPoolServer) StartCheckoutHandler(w http.ResponseWriter, r *http.Request) { cartIdStr := r.PathValue("cartid") if cartIdStr == "" { @@ -512,6 +526,7 @@ func (s *CheckoutPoolServer) Serve(mux *http.ServeMux) { handleFunc("POST /api/checkout/delivery", CookieCheckoutIdHandler(s.ProxyHandler(s.SetDeliveryHandler))) handleFunc("DELETE /api/checkout/delivery/{id}", CookieCheckoutIdHandler(s.ProxyHandler(s.RemoveDeliveryHandler))) handleFunc("POST /api/checkout/pickup-point", CookieCheckoutIdHandler(s.ProxyHandler(s.SetPickupPointHandler))) + handleFunc("POST /api/checkout/contact-details", CookieCheckoutIdHandler(s.ProxyHandler(s.ContactDetailsUpdatedHandler))) handleFunc("POST /payment", CookieCheckoutIdHandler(s.ProxyHandler(s.StartPaymentHandler))) handleFunc("GET /payment/{id}/session", CookieCheckoutIdHandler(s.ProxyHandler(s.GetPaymentSessionHandler))) // handleFunc("POST /api/checkout/initialize", CookieCheckoutIdHandler(s.ProxyHandler(s.InitializeCheckoutHandler))) diff --git a/pkg/checkout/checkout-grain.go b/pkg/checkout/checkout-grain.go index 0b61ef6..f5729a8 100644 --- a/pkg/checkout/checkout-grain.go +++ b/pkg/checkout/checkout-grain.go @@ -73,6 +73,12 @@ func (p *Payment) IsSettled() bool { } } +type ContactDetails struct { + Email *string `json:"email,omitempty"` + Phone *string `json:"phone,omitempty"` + Name *string `json:"name,omitempty"` +} + type ConfirmationStatus struct { Code *string `json:"code,omitempty"` ViewCount int `json:"viewCount"` @@ -97,6 +103,7 @@ type CheckoutGrain struct { InventoryReserved bool `json:"inventoryReserved"` Confirmation *ConfirmationStatus `json:"confirmationViewed,omitempty"` Payments []*Payment `json:"payments,omitempty"` + ContactDetails *ContactDetails `json:"contactDetails,omitempty"` } func NewCheckoutGrain(id uint64, cartId cart.CartId, cartVersion uint64, ts time.Time, cartState *cart.CartGrain) *CheckoutGrain { diff --git a/pkg/checkout/mutation-context.go b/pkg/checkout/mutation-context.go index e0e45b4..d966d85 100644 --- a/pkg/checkout/mutation-context.go +++ b/pkg/checkout/mutation-context.go @@ -26,6 +26,7 @@ func NewCheckoutMutationRegistry(ctx *CheckoutMutationContext) actor.MutationReg actor.NewMutation(HandleSetDelivery), actor.NewMutation(HandleSetPickupPoint), actor.NewMutation(HandleRemoveDelivery), + actor.NewMutation(HandleContactDetailsUpdated), ) return reg } diff --git a/pkg/checkout/mutation_contact_details_updated.go b/pkg/checkout/mutation_contact_details_updated.go new file mode 100644 index 0000000..d8fd0f1 --- /dev/null +++ b/pkg/checkout/mutation_contact_details_updated.go @@ -0,0 +1,30 @@ +package checkout + +import ( + "fmt" + + checkout_messages "git.k6n.net/go-cart-actor/proto/checkout" +) + +// HandleContactDetailsUpdated mutation +func HandleContactDetailsUpdated(g *CheckoutGrain, m *checkout_messages.ContactDetailsUpdated) error { + if m == nil { + return fmt.Errorf("HandleContactDetailsUpdated: nil payload") + } + + if g.ContactDetails == nil { + g.ContactDetails = &ContactDetails{} + } + + if m.Email != nil { + g.ContactDetails.Email = m.Email + } + if m.Phone != nil { + g.ContactDetails.Phone = m.Phone + } + if m.Name != nil { + g.ContactDetails.Name = m.Name + } + + return nil +} diff --git a/pkg/checkout/mutation_contact_details_updated_test.go b/pkg/checkout/mutation_contact_details_updated_test.go new file mode 100644 index 0000000..f581bb4 --- /dev/null +++ b/pkg/checkout/mutation_contact_details_updated_test.go @@ -0,0 +1,94 @@ +package checkout + +import ( + "testing" + + checkout_messages "git.k6n.net/go-cart-actor/proto/checkout" +) + +func TestHandleContactDetailsUpdated(t *testing.T) { + tests := []struct { + name string + initial *ContactDetails + update *checkout_messages.ContactDetailsUpdated + expected *ContactDetails + }{ + { + name: "update all fields", + initial: nil, + update: &checkout_messages.ContactDetailsUpdated{ + Email: stringPtr("test@example.com"), + Phone: stringPtr("123456789"), + Name: stringPtr("John Doe"), + }, + expected: &ContactDetails{ + Email: stringPtr("test@example.com"), + Phone: stringPtr("123456789"), + Name: stringPtr("John Doe"), + }, + }, + { + name: "update partial fields", + initial: &ContactDetails{ + Email: stringPtr("old@example.com"), + Phone: nil, + Name: stringPtr("Old Name"), + }, + update: &checkout_messages.ContactDetailsUpdated{ + Phone: stringPtr("987654321"), + }, + expected: &ContactDetails{ + Email: stringPtr("old@example.com"), + Phone: stringPtr("987654321"), + Name: stringPtr("Old Name"), + }, + }, + { + name: "nil message", + initial: nil, + update: nil, + expected: &ContactDetails{}, // but error expected + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + grain := &CheckoutGrain{ + ContactDetails: tt.initial, + } + + err := HandleContactDetailsUpdated(grain, tt.update) + + if tt.name == "nil message" { + if err == nil { + t.Errorf("expected error for nil message, got nil") + } + return + } + + if err != nil { + t.Errorf("unexpected error: %v", err) + } + + if grain.ContactDetails == nil && tt.expected != nil { + t.Errorf("expected contact details, got nil") + } else if grain.ContactDetails != nil && tt.expected == nil { + t.Errorf("expected nil contact details, got %v", grain.ContactDetails) + } else if grain.ContactDetails != nil && tt.expected != nil { + if (grain.ContactDetails.Email == nil && tt.expected.Email != nil) || (grain.ContactDetails.Email != nil && tt.expected.Email == nil) || (grain.ContactDetails.Email != nil && *grain.ContactDetails.Email != *tt.expected.Email) { + t.Errorf("email mismatch: got %v, expected %v", grain.ContactDetails.Email, tt.expected.Email) + } + if (grain.ContactDetails.Phone == nil && tt.expected.Phone != nil) || (grain.ContactDetails.Phone != nil && tt.expected.Phone == nil) || (grain.ContactDetails.Phone != nil && *grain.ContactDetails.Phone != *tt.expected.Phone) { + t.Errorf("phone mismatch: got %v, expected %v", grain.ContactDetails.Phone, tt.expected.Phone) + } + if (grain.ContactDetails.Name == nil && tt.expected.Name != nil) || (grain.ContactDetails.Name != nil && tt.expected.Name == nil) || (grain.ContactDetails.Name != nil && *grain.ContactDetails.Name != *tt.expected.Name) { + t.Errorf("name mismatch: got %v, expected %v", grain.ContactDetails.Name, tt.expected.Name) + } + } + }) + } +} + +func stringPtr(s string) *string { + return &s +} diff --git a/proto/checkout.proto b/proto/checkout.proto index 48708ce..f9a610f 100644 --- a/proto/checkout.proto +++ b/proto/checkout.proto @@ -80,6 +80,12 @@ message InitializeCheckout { google.protobuf.Any cartState = 4; } +message ContactDetailsUpdated { + optional string email = 1; + optional string phone = 2; + optional string name = 3; +} + message InventoryReserved { string id = 1; string status = 2; @@ -93,7 +99,7 @@ message Mutation { RemoveDelivery remove_delivery = 3; PaymentDeclined payment_declined = 4; ConfirmationViewed confirmation_viewed = 5; - + ContactDetailsUpdated contact_details_updated = 6; OrderCreated order_created = 7; InitializeCheckout initialize_checkout = 9; diff --git a/proto/checkout/checkout.pb.go b/proto/checkout/checkout.pb.go index f94c407..8e356ae 100644 --- a/proto/checkout/checkout.pb.go +++ b/proto/checkout/checkout.pb.go @@ -771,6 +771,66 @@ func (x *InitializeCheckout) GetCartState() *anypb.Any { return nil } +type ContactDetailsUpdated struct { + state protoimpl.MessageState `protogen:"open.v1"` + Email *string `protobuf:"bytes,1,opt,name=email,proto3,oneof" json:"email,omitempty"` + Phone *string `protobuf:"bytes,2,opt,name=phone,proto3,oneof" json:"phone,omitempty"` + Name *string `protobuf:"bytes,3,opt,name=name,proto3,oneof" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContactDetailsUpdated) Reset() { + *x = ContactDetailsUpdated{} + mi := &file_checkout_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContactDetailsUpdated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContactDetailsUpdated) ProtoMessage() {} + +func (x *ContactDetailsUpdated) ProtoReflect() protoreflect.Message { + mi := &file_checkout_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContactDetailsUpdated.ProtoReflect.Descriptor instead. +func (*ContactDetailsUpdated) Descriptor() ([]byte, []int) { + return file_checkout_proto_rawDescGZIP(), []int{11} +} + +func (x *ContactDetailsUpdated) GetEmail() string { + if x != nil && x.Email != nil { + return *x.Email + } + return "" +} + +func (x *ContactDetailsUpdated) GetPhone() string { + if x != nil && x.Phone != nil { + return *x.Phone + } + return "" +} + +func (x *ContactDetailsUpdated) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + type InventoryReserved struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` @@ -782,7 +842,7 @@ type InventoryReserved struct { func (x *InventoryReserved) Reset() { *x = InventoryReserved{} - mi := &file_checkout_proto_msgTypes[11] + mi := &file_checkout_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -794,7 +854,7 @@ func (x *InventoryReserved) String() string { func (*InventoryReserved) ProtoMessage() {} func (x *InventoryReserved) ProtoReflect() protoreflect.Message { - mi := &file_checkout_proto_msgTypes[11] + mi := &file_checkout_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -807,7 +867,7 @@ func (x *InventoryReserved) ProtoReflect() protoreflect.Message { // Deprecated: Use InventoryReserved.ProtoReflect.Descriptor instead. func (*InventoryReserved) Descriptor() ([]byte, []int) { - return file_checkout_proto_rawDescGZIP(), []int{11} + return file_checkout_proto_rawDescGZIP(), []int{12} } func (x *InventoryReserved) GetId() string { @@ -840,6 +900,7 @@ type Mutation struct { // *Mutation_RemoveDelivery // *Mutation_PaymentDeclined // *Mutation_ConfirmationViewed + // *Mutation_ContactDetailsUpdated // *Mutation_OrderCreated // *Mutation_InitializeCheckout // *Mutation_InventoryReserved @@ -853,7 +914,7 @@ type Mutation struct { func (x *Mutation) Reset() { *x = Mutation{} - mi := &file_checkout_proto_msgTypes[12] + mi := &file_checkout_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -865,7 +926,7 @@ func (x *Mutation) String() string { func (*Mutation) ProtoMessage() {} func (x *Mutation) ProtoReflect() protoreflect.Message { - mi := &file_checkout_proto_msgTypes[12] + mi := &file_checkout_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -878,7 +939,7 @@ func (x *Mutation) ProtoReflect() protoreflect.Message { // Deprecated: Use Mutation.ProtoReflect.Descriptor instead. func (*Mutation) Descriptor() ([]byte, []int) { - return file_checkout_proto_rawDescGZIP(), []int{12} + return file_checkout_proto_rawDescGZIP(), []int{13} } func (x *Mutation) GetType() isMutation_Type { @@ -933,6 +994,15 @@ func (x *Mutation) GetConfirmationViewed() *ConfirmationViewed { return nil } +func (x *Mutation) GetContactDetailsUpdated() *ContactDetailsUpdated { + if x != nil { + if x, ok := x.Type.(*Mutation_ContactDetailsUpdated); ok { + return x.ContactDetailsUpdated + } + } + return nil +} + func (x *Mutation) GetOrderCreated() *OrderCreated { if x != nil { if x, ok := x.Type.(*Mutation_OrderCreated); ok { @@ -1011,6 +1081,10 @@ type Mutation_ConfirmationViewed struct { ConfirmationViewed *ConfirmationViewed `protobuf:"bytes,5,opt,name=confirmation_viewed,json=confirmationViewed,proto3,oneof"` } +type Mutation_ContactDetailsUpdated struct { + ContactDetailsUpdated *ContactDetailsUpdated `protobuf:"bytes,6,opt,name=contact_details_updated,json=contactDetailsUpdated,proto3,oneof"` +} + type Mutation_OrderCreated struct { OrderCreated *OrderCreated `protobuf:"bytes,7,opt,name=order_created,json=orderCreated,proto3,oneof"` } @@ -1045,6 +1119,8 @@ func (*Mutation_PaymentDeclined) isMutation_Type() {} func (*Mutation_ConfirmationViewed) isMutation_Type() {} +func (*Mutation_ContactDetailsUpdated) isMutation_Type() {} + func (*Mutation_OrderCreated) isMutation_Type() {} func (*Mutation_InitializeCheckout) isMutation_Type() {} @@ -1178,74 +1254,88 @@ var file_checkout_proto_rawDesc = string([]byte{ 0x61, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x63, 0x61, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, - 0x66, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x82, 0x07, 0x0a, 0x08, 0x4d, 0x75, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0c, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, - 0x65, 0x74, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x65, - 0x74, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x12, 0x4d, 0x0a, 0x10, 0x73, 0x65, 0x74, - 0x5f, 0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x69, 0x63, 0x6b, 0x75, - 0x70, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x74, 0x50, 0x69, 0x63, - 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x65, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x65, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x12, 0x4f, 0x0a, 0x10, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x64, 0x65, 0x63, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x63, 0x6c, - 0x69, 0x6e, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, - 0x65, 0x63, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x65, 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, + 0x83, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x05, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x88, 0x01, 0x01, 0x12, + 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x42, 0x07, 0x0a, 0x05, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x66, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, + 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xe6, 0x07, + 0x0a, 0x08, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0c, 0x73, 0x65, + 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, + 0x48, 0x00, 0x52, 0x0b, 0x73, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x12, + 0x4d, 0x0a, 0x10, 0x73, 0x65, 0x74, 0x5f, 0x70, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x65, + 0x74, 0x50, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, + 0x73, 0x65, 0x74, 0x50, 0x69, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x4c, + 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, + 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x12, 0x4f, 0x0a, 0x10, + 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x6c, 0x69, 0x6e, 0x65, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, + 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x70, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x58, 0x0a, + 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, + 0x65, 0x77, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x65, - 0x64, 0x12, 0x46, 0x0a, 0x0d, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x13, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, - 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x48, 0x00, 0x52, - 0x12, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x6f, 0x75, 0x74, 0x12, 0x55, 0x0a, 0x12, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, - 0x5f, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x4c, 0x0a, 0x0f, 0x70, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x52, 0x0a, 0x11, 0x70, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x10, 0x70, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x46, 0x0a, 0x0d, - 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x42, 0x3c, 0x5a, 0x3a, - 0x67, 0x69, 0x74, 0x2e, 0x6b, 0x36, 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x2d, 0x63, - 0x61, 0x72, 0x74, 0x2d, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x3b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, - 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x64, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x69, 0x65, 0x77, 0x65, 0x64, 0x12, 0x62, 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x63, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x48, 0x00, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x46, 0x0a, 0x0d, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x13, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x48, 0x00, 0x52, 0x12, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x12, 0x55, 0x0a, + 0x12, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x49, 0x6e, + 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x11, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x64, 0x12, 0x4c, 0x0a, 0x0f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x48, 0x00, 0x52, 0x0e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x65, 0x64, 0x12, 0x52, 0x0a, 0x11, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x48, 0x00, 0x52, 0x10, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x46, 0x0a, 0x0d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x0c, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x06, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x42, 0x3c, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x2e, 0x6b, 0x36, + 0x6e, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x2d, 0x63, 0x61, 0x72, 0x74, 0x2d, 0x61, 0x63, + 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, + 0x75, 0x74, 0x3b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var ( @@ -1260,7 +1350,7 @@ func file_checkout_proto_rawDescGZIP() []byte { return file_checkout_proto_rawDescData } -var file_checkout_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_checkout_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_checkout_proto_goTypes = []any{ (*SetDelivery)(nil), // 0: checkout_messages.SetDelivery (*SetPickupPoint)(nil), // 1: checkout_messages.SetPickupPoint @@ -1273,36 +1363,38 @@ var file_checkout_proto_goTypes = []any{ (*ConfirmationViewed)(nil), // 8: checkout_messages.ConfirmationViewed (*OrderCreated)(nil), // 9: checkout_messages.OrderCreated (*InitializeCheckout)(nil), // 10: checkout_messages.InitializeCheckout - (*InventoryReserved)(nil), // 11: checkout_messages.InventoryReserved - (*Mutation)(nil), // 12: checkout_messages.Mutation - (*timestamppb.Timestamp)(nil), // 13: google.protobuf.Timestamp - (*anypb.Any)(nil), // 14: google.protobuf.Any + (*ContactDetailsUpdated)(nil), // 11: checkout_messages.ContactDetailsUpdated + (*InventoryReserved)(nil), // 12: checkout_messages.InventoryReserved + (*Mutation)(nil), // 13: checkout_messages.Mutation + (*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp + (*anypb.Any)(nil), // 15: google.protobuf.Any } var file_checkout_proto_depIdxs = []int32{ 2, // 0: checkout_messages.SetDelivery.pickupPoint:type_name -> checkout_messages.PickupPoint 2, // 1: checkout_messages.SetPickupPoint.pickupPoint:type_name -> checkout_messages.PickupPoint - 13, // 2: checkout_messages.PaymentStarted.startedAt:type_name -> google.protobuf.Timestamp - 13, // 3: checkout_messages.PaymentCompleted.completedAt:type_name -> google.protobuf.Timestamp - 14, // 4: checkout_messages.PaymentEvent.data:type_name -> google.protobuf.Any - 13, // 5: checkout_messages.ConfirmationViewed.viewedAt:type_name -> google.protobuf.Timestamp - 13, // 6: checkout_messages.OrderCreated.createdAt:type_name -> google.protobuf.Timestamp - 14, // 7: checkout_messages.InitializeCheckout.cartState:type_name -> google.protobuf.Any + 14, // 2: checkout_messages.PaymentStarted.startedAt:type_name -> google.protobuf.Timestamp + 14, // 3: checkout_messages.PaymentCompleted.completedAt:type_name -> google.protobuf.Timestamp + 15, // 4: checkout_messages.PaymentEvent.data:type_name -> google.protobuf.Any + 14, // 5: checkout_messages.ConfirmationViewed.viewedAt:type_name -> google.protobuf.Timestamp + 14, // 6: checkout_messages.OrderCreated.createdAt:type_name -> google.protobuf.Timestamp + 15, // 7: checkout_messages.InitializeCheckout.cartState:type_name -> google.protobuf.Any 0, // 8: checkout_messages.Mutation.set_delivery:type_name -> checkout_messages.SetDelivery 1, // 9: checkout_messages.Mutation.set_pickup_point:type_name -> checkout_messages.SetPickupPoint 3, // 10: checkout_messages.Mutation.remove_delivery:type_name -> checkout_messages.RemoveDelivery 6, // 11: checkout_messages.Mutation.payment_declined:type_name -> checkout_messages.PaymentDeclined 8, // 12: checkout_messages.Mutation.confirmation_viewed:type_name -> checkout_messages.ConfirmationViewed - 9, // 13: checkout_messages.Mutation.order_created:type_name -> checkout_messages.OrderCreated - 10, // 14: checkout_messages.Mutation.initialize_checkout:type_name -> checkout_messages.InitializeCheckout - 11, // 15: checkout_messages.Mutation.inventory_reserved:type_name -> checkout_messages.InventoryReserved - 4, // 16: checkout_messages.Mutation.payment_started:type_name -> checkout_messages.PaymentStarted - 5, // 17: checkout_messages.Mutation.payment_completed:type_name -> checkout_messages.PaymentCompleted - 7, // 18: checkout_messages.Mutation.payment_event:type_name -> checkout_messages.PaymentEvent - 19, // [19:19] is the sub-list for method output_type - 19, // [19:19] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name + 11, // 13: checkout_messages.Mutation.contact_details_updated:type_name -> checkout_messages.ContactDetailsUpdated + 9, // 14: checkout_messages.Mutation.order_created:type_name -> checkout_messages.OrderCreated + 10, // 15: checkout_messages.Mutation.initialize_checkout:type_name -> checkout_messages.InitializeCheckout + 12, // 16: checkout_messages.Mutation.inventory_reserved:type_name -> checkout_messages.InventoryReserved + 4, // 17: checkout_messages.Mutation.payment_started:type_name -> checkout_messages.PaymentStarted + 5, // 18: checkout_messages.Mutation.payment_completed:type_name -> checkout_messages.PaymentCompleted + 7, // 19: checkout_messages.Mutation.payment_event:type_name -> checkout_messages.PaymentEvent + 20, // [20:20] is the sub-list for method output_type + 20, // [20:20] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name } func init() { file_checkout_proto_init() } @@ -1316,12 +1408,14 @@ func file_checkout_proto_init() { file_checkout_proto_msgTypes[5].OneofWrappers = []any{} file_checkout_proto_msgTypes[6].OneofWrappers = []any{} file_checkout_proto_msgTypes[11].OneofWrappers = []any{} - file_checkout_proto_msgTypes[12].OneofWrappers = []any{ + file_checkout_proto_msgTypes[12].OneofWrappers = []any{} + file_checkout_proto_msgTypes[13].OneofWrappers = []any{ (*Mutation_SetDelivery)(nil), (*Mutation_SetPickupPoint)(nil), (*Mutation_RemoveDelivery)(nil), (*Mutation_PaymentDeclined)(nil), (*Mutation_ConfirmationViewed)(nil), + (*Mutation_ContactDetailsUpdated)(nil), (*Mutation_OrderCreated)(nil), (*Mutation_InitializeCheckout)(nil), (*Mutation_InventoryReserved)(nil), @@ -1335,7 +1429,7 @@ func file_checkout_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_checkout_proto_rawDesc), len(file_checkout_proto_rawDesc)), NumEnums: 0, - NumMessages: 13, + NumMessages: 14, NumExtensions: 0, NumServices: 0, },