Skip to content

Repository files navigation

GoAffPro.Client

Async-first .NET client for GoAffPro using Kiota-generated models plus a thin wrapper for auth and polling observers.

Targets

  • net9.0
  • net10.0

Install

dotnet add package GoAffPro.Client

Quick Start

usingGoAffPro.Client;awaitusingvarclient=newGoAffProClient(newGoAffProClientOptions{BearerToken="your-access-token",});// Or login first:stringtoken=awaitclient.LoginAsync("affiliate@example.com","password123");

API Usage

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)

Observer Usage

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:

  • OrderObserverStartTime
  • AffiliateObserverStartTime
  • PayoutObserverStartTime

Dependency Injection

services.AddGoAffProClient(options =>{options.BaseUrl=newUri("https://api.goaffpro.com/v1/",UriKind.Absolute);options.BearerToken=configuration["GoAffPro:Token"];options.Timeout=TimeSpan.FromSeconds(30);});

Example App

Project: examples/GoAffPro.Client.Example

Interactive mode:

dotnet run --project examples/GoAffPro.Client.Example

CLI sweep mode:

dotnet run --project examples/GoAffPro.Client.Example -- \
--run-tests \
--access_token=env:GOAFFPRO_TEST_TOKEN \
--products-timeout-seconds=90 \
--output=api-sweep.json

Build-Time Generation

Generation is handled by src/GoAffPro.Client.Generated/GoAffPro.Client.Generated.csproj:

  1. Uses local canonical spec: openapi/goaffpro-canonical.yaml
  2. Runs Kiota during build
  3. Writes generated sources under src/GoAffPro.Client.Generated/Generated

Do not manually edit generated files.

Testing

Unit tests:

dotnet test tests/GoAffPro.Client.Tests/GoAffPro.Client.Tests.csproj

Integration tests:

dotnet test tests/GoAffPro.Client.IntegrationTests/GoAffPro.Client.IntegrationTests.csproj --filter "Category=Integration"

Integration auth sources:

  • GOAFFPRO_TEST_TOKEN
  • GOAFFPRO_TEST_EMAIL + GOAFFPRO_TEST_PASSWORD
  • tests/GoAffPro.Client.IntegrationTests/appsettings.Test.local.json (template: appsettings.Test.local.example.json)

Acknowledgements

Known Upstream Instability

Tracked in openapi/goaffpro-canonical.yaml comments:

  • /user/feed/products can time out
  • /user/feed/rewards can return 404/non-JSON
  • /user/feed/transactions can return 500 with non-JSON payload
  • /user/payouts/pending tracked as parity endpoint also seen under /sdk/user/*

About

Modern async .NET client for GoAffPro (net9/net10), generated from a curated OpenAPI spec with Kiota, featuring typed API models, Polly-based resilient HTTP handling, built-in polling observers, AOT compatible.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages