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); } } }