diff --git a/src/A2A/Client/A2AClientExtensions.cs b/src/A2A/Client/A2AClientExtensions.cs new file mode 100644 index 00000000..34a7f974 --- /dev/null +++ b/src/A2A/Client/A2AClientExtensions.cs @@ -0,0 +1,132 @@ +using System.Net.ServerSentEvents; +using System.Text.Json; + +namespace A2A; + +/// +/// Extension methods for the class making its API more +/// convenient for certain use-cases. +/// +public static class A2AClientExtensions +{ + /// + public static Task SendMessageAsync( + this A2AClient client, + Message message, + MessageSendConfiguration? configuration = null, + Dictionary? metadata = null, + CancellationToken cancellationToken = default) + { + if (client is null) + { + throw new ArgumentNullException(nameof(client)); + } + + return client.SendMessageAsync( + new MessageSendParams + { + Message = message, + Configuration = configuration, + Metadata = metadata + }, + cancellationToken); + } + + /// + public static Task CancelTaskAsync( + this A2AClient client, + string taskId, + Dictionary? metadata = null, + CancellationToken cancellationToken = default) + { + if (client is null) + { + throw new ArgumentNullException(nameof(client)); + } + + return client.CancelTaskAsync( + new TaskIdParams + { + Id = taskId, + Metadata = metadata + }, + cancellationToken); + } + + /// + public static Task SetPushNotificationAsync( + this A2AClient client, + string taskId, + string url, + string? configId = null, + string? token = null, + PushNotificationAuthenticationInfo? authentication = null, + CancellationToken cancellationToken = default) + { + if (client is null) + { + throw new ArgumentNullException(nameof(client)); + } + + return client.SetPushNotificationAsync( + new TaskPushNotificationConfig + { + TaskId = taskId, + PushNotificationConfig = new PushNotificationConfig + { + Id = configId, + Url = url, + Token = token, + Authentication = authentication + } + }, + cancellationToken); + } + + /// + public static Task GetPushNotificationAsync( + this A2AClient client, + string taskId, + string configId, + Dictionary? metadata = null, + CancellationToken cancellationToken = default) + { + if (client is null) + { + throw new ArgumentNullException(nameof(client)); + } + + return client.GetPushNotificationAsync( + new GetTaskPushNotificationConfigParams + { + Id = taskId, + PushNotificationConfigId = configId, + Metadata = metadata + }, + cancellationToken); + } + + /// + public static IAsyncEnumerable> SendMessageStreamingAsync( + this A2AClient client, + Message message, + MessageSendConfiguration? configuration = null, + Dictionary? metadata = null, + CancellationToken cancellationToken = default) + + { + if (client is null) + { + throw new ArgumentNullException(nameof(client)); + } + + return client.SendMessageStreamingAsync( + new MessageSendParams + { + Message = message, + Configuration = configuration, + Metadata = metadata + }, + cancellationToken); + } +}