From 79809d01990d6eb2f5d4fc4aaf63c3a45db4f037 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Tue, 9 Sep 2025 07:28:29 +0200 Subject: [PATCH] fix(actions v2): send event_payload on event executions again (#10651) # Which Problems Are Solved It was noticed that on actions v2 when subscribing to events, the webhook would always receive an empty `event_payload`: ``` { "aggregateID": "336494809936035843", "aggregateType": "user", "resourceOwner": "336392597046099971", "instanceID": "336392597046034435", "version": "v2", "sequence": 1, "event_type": "user.human.added", "created_at": "2025-09-05T08:55:36.156333Z", "userID": "336392597046755331", "event_payload": {} } ``` The problem was due to using `json.Marshal` on the `Event` interface, where the underlying `BaseEvent` prevents the data to be marshalled: https://github.com/zitadel/zitadel/blob/131f70db3423b80da1b038a822da59c908e4ffa6/internal/eventstore/event_base.go#L38 # How the Problems Are Solved The `Event`s `Unmarshal` function is used with a `json.RawMessage`. # Additional Changes none # Additional Context - closes https://github.com/zitadel/zitadel/issues/10650 - requires backport to v4.x --- internal/eventstore/v3/push_test.go | 4 ++-- internal/repository/execution/queue.go | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/internal/eventstore/v3/push_test.go b/internal/eventstore/v3/push_test.go index 50f771b54..26905ffb8 100644 --- a/internal/eventstore/v3/push_test.go +++ b/internal/eventstore/v3/push_test.go @@ -262,8 +262,8 @@ func Test_mapCommands(t *testing.T) { func TestEventstore_queueExecutions(t *testing.T) { events := []eventstore.Event{ - mockEventType(mockAggregate("TEST"), 1, nil, "ex.foo.bar"), - mockEventType(mockAggregate("TEST"), 2, nil, "ex.bar.foo"), + mockEventType(mockAggregate("TEST"), 1, []byte(`{"test":"test"}`), "ex.foo.bar"), + mockEventType(mockAggregate("TEST"), 2, []byte("{}"), "ex.bar.foo"), mockEventType(mockAggregate("TEST"), 3, nil, "ex.removed"), } type args struct { diff --git a/internal/repository/execution/queue.go b/internal/repository/execution/queue.go index 7cce61b06..bf819fcd6 100644 --- a/internal/repository/execution/queue.go +++ b/internal/repository/execution/queue.go @@ -27,10 +27,13 @@ func NewRequest(e eventstore.Event, targets []target.Target) (*Request, error) { if err != nil { return nil, err } - eventData, err := json.Marshal(e) + // The underlying BaseEvent omits the data when using json.Marshal so we have to unmarshal it manually. + var eventData json.RawMessage + err = e.Unmarshal(&eventData) if err != nil { return nil, err } + return &Request{ Aggregate: e.Aggregate(), Sequence: e.Sequence(),