using System.Net.Http;
using System.Threading.Tasks;
using SuccessfulCode.BetfairApi.AccountModels;
using SuccessfulCode.BetfairApi.AccountModels.Enums;
namespace SuccessfulCode.BetfairApi
{
public class AccountApiClient
{
private readonly HttpClient _client;
private Authentication _authentication;
private const string _endpoint = "https://api.betfair.com/exchange/account/rest/v1.0/";
public AccountApiClient(Authentication authentication)
{
_client = new HttpClient();
_authentication = authentication;
}
///
/// Create 2 application keys for given user; one active and the other delayed
///
public async Task CreateDeveloperAppKeys(string appName)
{
var request = new
{
appName
};
var result = await ExecuteRequest(_endpoint + "createDeveloperAppKeys/", request);
return result;
}
///
/// Get all application keys owned by the given developer/vendor
///
public async Task GetDeveloperAppKeys()
{
var result = await ExecuteRequest(_endpoint + "getDeveloperAppKeys/");
return result;
}
///
/// Get available to bet amount.
///
public async Task GetAccountFunds(Wallet? wallet = null)
{
var request = new
{
wallet
};
var result = await ExecuteRequest(_endpoint + "getAccountFunds/", request);
return result;
}
///
/// Transfer funds between wallets
///
public async Task TransferFunds(Wallet from, Wallet to, double amount)
{
var request = new
{
from,
to,
amount
};
var result = await ExecuteRequest(_endpoint + "transferFunds/", request);
return result;
}
///
/// Get Account details.
///
public async Task GetAccountDetails()
{
var result = await ExecuteRequest(_endpoint + "getAccountDetails/");
return result;
}
///
/// Get vendor client id for customer account.
///
public async Task GetVendorClientId()
{
var result = await ExecuteRequest(_endpoint + "getVendorClientId/");
return result;
}
///
/// Returns the newly generate subscription token
///
public async Task GetApplicationSubscriptionToken(int? subscriptionLength = null, string clientReference = null)
{
var request = new
{
subscriptionLength,
clientReference
};
var result = await ExecuteRequest(_endpoint + "getApplicationSubscriptionToken/", request);
return result;
}
///
/// Activate the subscription token for the customer
///
public async Task ActivateApplicationSubscription(string subscriptionToken)
{
var request = new
{
subscriptionToken
};
var result = await ExecuteRequest(_endpoint + "activateApplicationSubscription/", request);
return result;
}
///
/// Cancel application subscription
///
public async Task CancelApplicationSubscription(string subscriptionToken)
{
var request = new
{
subscriptionToken
};
var result = await ExecuteRequest(_endpoint + "cancelApplicationSubscription/", request);
return result;
}
///
/// Update an application subscription with a new expiry date
///
public async Task UpdateApplicationSubscription(string vendorClientId, int subscriptionLength)
{
var request = new
{
vendorClientId,
subscriptionLength
};
var result = await ExecuteRequest(_endpoint + "updateApplicationSubscription/", request);
return result;
}
///
/// List of subscription tokens for an application
///
public async Task ListApplicationSubscriptionTokens(SubscriptionStatus? subscriptionStatus = null)
{
var request = new
{
subscriptionStatus
};
var result = await ExecuteRequest(_endpoint + "listApplicationSubscriptionTokens/", request);
return result;
}
///
/// List of subscription tokens associated with the account
///
public async Task ListAccountSubscriptionTokens()
{
var result = await ExecuteRequest(_endpoint + "listAccountSubscriptionTokens/");
return result;
}
///
/// Identify all subscriptions, regardless of status, for a single client for a single application key.
/// The operation may be called by either the application key owner or a client.
///
public async Task GetApplicationSubscriptionHistory(string vendorClientId = null, string applicationKey = null)
{
var request = new
{
vendorClientId,
applicationKey
};
var result = await ExecuteRequest(_endpoint + "getApplicationSubscriptionHistory/", request);
return result;
}
///
/// Get account statement
///
public async Task GetAccountStatement(string locale = null, int? fromRecord = null, int? recordCount = null, TimeRange itemDateRange = null, IncludeItem? includeItem = null, Wallet? wallet = null)
{
var request = new
{
locale,
fromRecord,
recordCount,
itemDateRange,
includeItem,
wallet
};
var result = await ExecuteRequest(_endpoint + "getAccountStatement/", request);
return result;
}
///
/// Returns a list of currency rates based on given currency
///
public async Task ListCurrencyRates(string fromCurrency = null)
{
var request = new
{
fromCurrency
};
var result = await ExecuteRequest(_endpoint + "listCurrencyRates/", request);
return result;
}
///
/// Generate auth code for web vendor, used to get vendor session
///
public async Task GetAuthorisationCode(string vendorId)
{
var request = new
{
vendorId
};
var result = await ExecuteRequest(_endpoint + "getAuthorisationCode/", request);
return result;
}
///
/// Generate web vendor session based on a standard session identifiable by auth code, vendor secret and app key
///
public async Task Token(string client_id, string client_secret, GrantType grant_type, string code = null, string refresh_token = null)
{
var request = new
{
client_id,
grant_type,
code,
client_secret,
refresh_token
};
var result = await ExecuteRequest(_endpoint + "token/", request);
return result;
}
///
/// Return details about a vendor from its identifier. Response includes Vendor Name and URL.
///
public async Task GetVendorDetails(string vendorId)
{
var request = new
{
vendorId
};
var result = await ExecuteRequest(_endpoint + "getVendorDetails/", request);
return result;
}
///
/// Remove the link between an account and a vendor web app. This will remove the refreshToken for this user-vendor pair subscription.
///
public async Task RevokeAccessToWebApp(long vendorId)
{
var request = new
{
vendorId
};
var result = await ExecuteRequest(_endpoint + "revokeAccessToWebApp/", request);
return result;
}
///
/// Retrieve all vendors applications currently subscribed to by the user making the request
///
public async Task ListAuthorizedWebApps()
{
var result = await ExecuteRequest(_endpoint + "listAuthorizedWebApps/");
return result;
}
///
/// Return whether an account has authorised a web app.
///
public async Task IsAccountSubscribedToWebApp(string vendorId)
{
var request = new
{
vendorId
};
var result = await ExecuteRequest(_endpoint + "isAccountSubscribedToWebApp/", request);
return result;
}
///
/// Return relation between a list of users and an affiliate
///
public async Task GetAffiliateRelation(string[] vendorClientIds)
{
var request = new
{
vendorClientIds
};
var result = await ExecuteRequest(_endpoint + "getAffiliateRelation/", request);
return result;
}
private Task ExecuteRequest(string endpoint, object request = null)
{
return _authentication.ExecuteRequest(endpoint, request);
}
}
}