From 9d04ed5559e6fee7484761654251344dc73c7213 Mon Sep 17 00:00:00 2001 From: Aditya Alif Nugraha Date: Fri, 5 Sep 2025 11:20:30 +0200 Subject: [PATCH 1/2] Add product scope hook config --- src/Models/AppSettings.cs | 27 +++++++++++++++++++++++++++ tests/AppClientTests.cs | 14 ++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/Models/AppSettings.cs b/src/Models/AppSettings.cs index f8c467d..6d8e9f0 100644 --- a/src/Models/AppSettings.cs +++ b/src/Models/AppSettings.cs @@ -77,6 +77,30 @@ public enum AuthType Resource, } + [JsonConverter(typeof(StringEnumConverter))] + public enum Product + { + /// Stream Chat product + [EnumMember(Value = "chat")] + Chat, + + /// Stream Video product + [EnumMember(Value = "video")] + Video, + + /// Stream Moderation product + [EnumMember(Value = "moderation")] + Moderation, + + /// Stream Feeds product + [EnumMember(Value = "feeds")] + Feeds, + + /// All Stream products (default) + [EnumMember(Value = "all")] + All, + } + [JsonConverter(typeof(StringEnumConverter))] public enum CallbackMode { @@ -109,6 +133,9 @@ public class EventHook /// Whether this event hook is currently active public bool Enabled { get; set; } + /// Product scope for this event hook + public Product? Product { get; set; } + /// List of event types this hook will respond to public List EventTypes { get; set; } diff --git a/tests/AppClientTests.cs b/tests/AppClientTests.cs index 013e721..89bc97d 100644 --- a/tests/AppClientTests.cs +++ b/tests/AppClientTests.cs @@ -168,6 +168,16 @@ public async Task TestEventHooksAsync() WebhookUrl = "https://example.com/webhook", }; + var chatWebhookHook = new EventHook + { + Id = "c3eff852-1194-47c2-8e1c-42a0b1dc1151", + HookType = HookType.Webhook, + Enabled = true, + EventTypes = new List { "message.new", "message.updated" }, + WebhookUrl = "https://example.com/webhook-chat", + Product = Product.Chat, + }; + var sqsHook = new EventHook { Id = "4eaa795f-77d2-4b72-8f7e-11de0327121c", @@ -190,13 +200,13 @@ public async Task TestEventHooksAsync() SnsAuthType = AuthType.Resource, }; - var eventHooks = new List { webhookHook, sqsHook, snsHook }; + var eventHooks = new List { webhookHook, chatWebhookHook, sqsHook, snsHook }; await _appClient.UpdateAppSettingsAsync(new AppSettingsRequest { EventHooks = eventHooks }); var getAppResponse = await _appClient.GetAppSettingsAsync(); getAppResponse.App.EventHooks.Should().NotBeNull(); - getAppResponse.App.EventHooks.Should().HaveCount(3); + getAppResponse.App.EventHooks.Should().HaveCount(4); getAppResponse.App.EventHooks.Should().BeEquivalentTo(eventHooks, options => options.Excluding(e => e.CreatedAt).Excluding(e => e.UpdatedAt)); } } From 3fa6952d5895ec5be9d18153a79cd8cce8e555ff Mon Sep 17 00:00:00 2001 From: Aditya Alif Nugraha Date: Fri, 5 Sep 2025 13:14:32 +0200 Subject: [PATCH 2/2] Fix product request --- tests/AppClientTests.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/AppClientTests.cs b/tests/AppClientTests.cs index 89bc97d..931aa89 100644 --- a/tests/AppClientTests.cs +++ b/tests/AppClientTests.cs @@ -164,6 +164,7 @@ public async Task TestEventHooksAsync() Id = "95fa9371-38d8-4ddb-b099-d9ed86e7c9bc", HookType = HookType.Webhook, Enabled = true, + Product = Product.All, EventTypes = new List { "message.new", "message.updated" }, WebhookUrl = "https://example.com/webhook", }; @@ -173,9 +174,9 @@ public async Task TestEventHooksAsync() Id = "c3eff852-1194-47c2-8e1c-42a0b1dc1151", HookType = HookType.Webhook, Enabled = true, + Product = Product.Chat, EventTypes = new List { "message.new", "message.updated" }, WebhookUrl = "https://example.com/webhook-chat", - Product = Product.Chat, }; var sqsHook = new EventHook @@ -183,6 +184,7 @@ public async Task TestEventHooksAsync() Id = "4eaa795f-77d2-4b72-8f7e-11de0327121c", HookType = HookType.SQS, Enabled = true, + Product = Product.All, EventTypes = new List { "user.updated" }, SqsQueueUrl = "https://sqs.region.amazonaws.com/123456789012/queue-name", SqsRegion = "us-east-1", @@ -194,6 +196,7 @@ public async Task TestEventHooksAsync() Id = "7b2c6590-7b61-490a-8987-96c5f8a353ca", HookType = HookType.SNS, Enabled = true, + Product = Product.All, EventTypes = new List { "channel.updated" }, SnsTopicArn = "arn:aws:sns:us-east-1:123456789012:topic-name", SnsRegion = "us-east-1", @@ -202,8 +205,7 @@ public async Task TestEventHooksAsync() var eventHooks = new List { webhookHook, chatWebhookHook, sqsHook, snsHook }; - await _appClient.UpdateAppSettingsAsync(new AppSettingsRequest { EventHooks = eventHooks }); - + var updateResponse = await _appClient.UpdateAppSettingsAsync(new AppSettingsRequest { EventHooks = eventHooks }); var getAppResponse = await _appClient.GetAppSettingsAsync(); getAppResponse.App.EventHooks.Should().NotBeNull(); getAppResponse.App.EventHooks.Should().HaveCount(4);