Async-first .NET client for GoAffPro using Kiota-generated models plus a thin wrapper for auth and polling observers.
net9.0net10.0
dotnet add package GoAffPro.ClientusingGoAffPro.Client;awaitusingvarclient=newGoAffProClient(newGoAffProClientOptions{BearerToken="your-access-token",});// Or login first:stringtoken=awaitclient.LoginAsync("affiliate@example.com","password123");Use the generated API root from the wrapper:
varsites=awaitclient.Api.User.Sites.GetAsync(config =>{config.QueryParameters.Limit=20;config.QueryParameters.Offset=0;});Wrapper helpers:
LoginAsync(email, password, ct)SetBearerToken(token)
Stream-based:
awaitforeach(varorderinclient.NewOrdersAsync(pollingInterval:TimeSpan.FromSeconds(30),pageSize:100,cancellationToken:cancellationToken)){Console.WriteLine(order.Id?.String);}Event-based:
client.OrderDetected+=(_,e)=>Console.WriteLine(e.Order.Id?.String);client.AffiliateDetected+=(_,e)=>Console.WriteLine(e.Affiliate.AffiliateId?.String);awaitclient.StartEventObserverAsync(pollingInterval:TimeSpan.FromSeconds(30),pageSize:100,cancellationToken:cancellationToken);Backfill controls:
OrderObserverStartTimeAffiliateObserverStartTimePayoutObserverStartTime
services.AddGoAffProClient(options =>{options.BaseUrl=newUri("https://api.goaffpro.com/v1/",UriKind.Absolute);options.BearerToken=configuration["GoAffPro:Token"];options.Timeout=TimeSpan.FromSeconds(30);});Project: examples/GoAffPro.Client.Example
Interactive mode:
dotnet run --project examples/GoAffPro.Client.ExampleCLI sweep mode:
dotnet run --project examples/GoAffPro.Client.Example -- \
--run-tests \
--access_token=env:GOAFFPRO_TEST_TOKEN \
--products-timeout-seconds=90 \
--output=api-sweep.jsonGeneration is handled by src/GoAffPro.Client.Generated/GoAffPro.Client.Generated.csproj:
- Uses local canonical spec:
openapi/goaffpro-canonical.yaml - Runs Kiota during build
- Writes generated sources under
src/GoAffPro.Client.Generated/Generated
Do not manually edit generated files.
Unit tests:
dotnet test tests/GoAffPro.Client.Tests/GoAffPro.Client.Tests.csprojIntegration tests:
dotnet test tests/GoAffPro.Client.IntegrationTests/GoAffPro.Client.IntegrationTests.csproj --filter "Category=Integration"Integration auth sources:
GOAFFPRO_TEST_TOKENGOAFFPRO_TEST_EMAIL+GOAFFPRO_TEST_PASSWORDtests/GoAffPro.Client.IntegrationTests/appsettings.Test.local.json(template:appsettings.Test.local.example.json)
- WolfwithSword — real-world data and testing
Tracked in openapi/goaffpro-canonical.yaml comments:
/user/feed/productscan time out/user/feed/rewardscan return 404/non-JSON/user/feed/transactionscan return 500 with non-JSON payload/user/payouts/pendingtracked as parity endpoint also seen under/sdk/user/*