## Summary Implement the Taqnyat SMS provider inside `src/SmsBridge/Providers/Taqnyat/`. Taqnyat is a leading SMS gateway in Saudi Arabia and the wider Gulf Cooperation Council (GCC) region. ## Files to create - `src/SmsBridge/Providers/Taqnyat/TaqnyatSmsProvider.cs` - `src/SmsBridge/Providers/Taqnyat/TaqnyatSmsRequestMapper.cs` - `src/SmsBridge/Providers/Taqnyat/TaqnyatSmsResponseMapper.cs` - `src/SmsBridge/Options/TaqnyatOptions.cs` - Register `UseTaqnyat()` in `src/SmsBridge/DependencyInjection/SmsBridgeProviderBuilder.cs` - Add `HttpClientNames.Taqnyat` in `src/SmsBridge/Internal/Http/HttpClientNames.cs` - Add `SmsProviderType.Taqnyat` to the enum ## Taqnyat API Details - Endpoint: `https://api.taqnyat.sa/v1/messages` - Auth: `Authorization: Bearer <token>` - Request (JSON): ```json { "recipients": ["..."], "body": "...", "sender": "..." } ``` - Response: `{ "statusCode": 201, "message": "...", "msgId": "..." }` ## Options ```csharp public sealed class TaqnyatOptions { public required string BearerToken { get; init; } public required string From { get; init; } } ``` ## Tests to add - `tests/SmsBridge.ProviderTests/TaqnyatResponseMapperTests.cs` - `tests/SmsBridge.ProviderTests/TaqnyatProviderTests.cs` ## Acceptance Criteria - [ ] Provider sends via Taqnyat REST API using `IHttpClientFactory` - [ ] Response mapper checks `statusCode == 201` for success - [ ] Transient failures set `IsTransientFailure = true` - [ ] `UseTaqnyat()` registers the provider in DI - [ ] All tests pass — `dotnet test` - [ ] `dotnet build` has 0 warnings
Activity