Skip to content

Commit

Permalink
CryptoExchange V7.11.0 (#166)
Browse files Browse the repository at this point in the history
Updated CryptoExchange.Net to V7.11.0
Refactored request path usage
Fixed position side nullable on ClosePositionHistory response
  • Loading branch information
JKorf authored Aug 7, 2024
1 parent 6937aa4 commit bbe3681
Show file tree
Hide file tree
Showing 9 changed files with 57 additions and 116 deletions.
2 changes: 1 addition & 1 deletion Bitfinex.Net.UnitTests/BitfinexClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public void ProvidingApiCredentials_Should_SaveApiCredentials()
var authProvider = new BitfinexAuthenticationProvider(new ApiCredentials("TestKey", "TestSecret"), null);

// assert
Assert.That(authProvider.GetApiKey() == "TestKey");
Assert.That(authProvider.ApiKey == "TestKey");
}

[Test]
Expand Down
2 changes: 1 addition & 1 deletion Bitfinex.Net/Bitfinex.Net.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,6 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="CryptoExchange.Net" Version="7.10.0" />
<PackageReference Include="CryptoExchange.Net" Version="7.11.0" />
</ItemGroup>
</Project>
14 changes: 8 additions & 6 deletions Bitfinex.Net/BitfinexAuthenticationProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ internal class BitfinexAuthenticationProvider: AuthenticationProvider
private readonly INonceProvider _nonceProvider;

public long GetNonce() => _nonceProvider.GetNonce();
public string GetApiKey() => _credentials.Key!.GetString();

public BitfinexAuthenticationProvider(ApiCredentials credentials, INonceProvider? nonceProvider) : base(credentials)
{
Expand All @@ -32,9 +31,9 @@ public override void AuthenticateRequest(
RestApiClient apiClient,
Uri uri,
HttpMethod method,
IDictionary<string, object> uriParameters,
IDictionary<string, object> bodyParameters,
Dictionary<string, string> headers,
ref IDictionary<string, object>? uriParameters,
ref IDictionary<string, object>? bodyParameters,
ref Dictionary<string, string>? headers,
bool auth,
ArrayParametersSerialization arraySerialization,
HttpMethodParameterPosition parameterPosition,
Expand All @@ -43,17 +42,20 @@ public override void AuthenticateRequest(
if (!auth)
return;

headers ??= new Dictionary<string, string>();

// Auth requests are always POST
if (uri.AbsolutePath.Contains("v1"))
{
bodyParameters ??= new Dictionary<string, object>();
bodyParameters.Add("request", uri.AbsolutePath);
bodyParameters.Add("nonce", _nonceProvider.GetNonce().ToString());

var signature = JsonConvert.SerializeObject(bodyParameters);
var payload = Convert.ToBase64String(Encoding.ASCII.GetBytes(signature));
var signedData = Sign(payload);

headers.Add("X-BFX-APIKEY", _credentials.Key!.GetString());
headers.Add("X-BFX-APIKEY", _credentials.Key);
headers.Add("X-BFX-PAYLOAD", payload);
headers.Add("X-BFX-SIGNATURE", signedData.ToLower(CultureInfo.InvariantCulture));
}
Expand All @@ -64,7 +66,7 @@ public override void AuthenticateRequest(
var signature = $"/api{uri.AbsolutePath}{n}{json}";
var signedData = SignHMACSHA384(signature);

headers.Add("bfx-apikey", _credentials.Key!.GetString());
headers.Add("bfx-apikey", _credentials.Key);
headers.Add("bfx-nonce", n);
headers.Add("bfx-signature", signedData.ToLower(CultureInfo.InvariantCulture));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,6 @@ namespace Bitfinex.Net.Clients.GeneralApi
/// <inheritdoc />
internal class BitfinexRestClientGeneralApiFunding : IBitfinexRestClientGeneralApiFunding
{
private const string ActiveFundingOffersEndpoint = "auth/r/funding/offers/{}";
private const string FundingOfferHistoryEndpoint = "auth/r/funding/offers/{}/hist";
private const string FundingLoansEndpoint = "auth/r/funding/loans/{}";
private const string FundingLoansHistoryEndpoint = "auth/r/funding/loans/{}/hist";
private const string FundingCreditsEndpoint = "auth/r/funding/credits/{}";
private const string FundingCreditsHistoryEndpoint = "auth/r/funding/credits/{}/hist";
private const string FundingTradesEndpoint = "auth/r/funding/trades/{}/hist";
private const string FundingOfferSubmitEndpoint = "auth/w/funding/offer/submit";
private const string FundingOfferCancelEndpoint = "auth/w/funding/offer/cancel";
private const string FundingInfoEndpoint = "auth/r/info/funding/{}";
private const string FundingAutoRenewEndpoint = "auth/w/funding/auto";
private const string FundingAutoRenewStatusEndpoint = "auth/r/funding/auto/status";

private readonly BitfinexRestClientGeneralApi _baseClient;

internal BitfinexRestClientGeneralApiFunding(BitfinexRestClientGeneralApi baseClient)
Expand All @@ -42,7 +29,7 @@ internal BitfinexRestClientGeneralApiFunding(BitfinexRestClientGeneralApi baseCl
/// <inheritdoc />
public async Task<WebCallResult<IEnumerable<BitfinexFundingOffer>>> GetActiveFundingOffersAsync(string symbol, CancellationToken ct = default)
{
return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFundingOffer>>(_baseClient.GetUrl(ActiveFundingOffersEndpoint.FillPathParameters(symbol), "2"), HttpMethod.Post, ct, null, true).ConfigureAwait(false);
return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFundingOffer>>(_baseClient.GetUrl($"auth/r/funding/offers/{symbol}", "2"), HttpMethod.Post, ct, null, true).ConfigureAwait(false);
}

/// <inheritdoc />
Expand All @@ -54,7 +41,7 @@ public async Task<WebCallResult<IEnumerable<BitfinexFundingOffer>>> GetFundingOf
parameters.AddOptionalParameter("start", DateTimeConverter.ConvertToMilliseconds(startTime));
parameters.AddOptionalParameter("end", DateTimeConverter.ConvertToMilliseconds(endTime));

return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFundingOffer>>(_baseClient.GetUrl(FundingOfferHistoryEndpoint.FillPathParameters(symbol), "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFundingOffer>>(_baseClient.GetUrl($"auth/r/funding/offers/{symbol}/hist", "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
}

/// <inheritdoc />
Expand All @@ -70,7 +57,7 @@ public async Task<WebCallResult<BitfinexWriteResult<BitfinexFundingOffer>>> Subm
};
parameters.AddOptionalParameter("flags", flags);

return await _baseClient.SendRequestAsync<BitfinexWriteResult<BitfinexFundingOffer>>(_baseClient.GetUrl(FundingOfferSubmitEndpoint, "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
return await _baseClient.SendRequestAsync<BitfinexWriteResult<BitfinexFundingOffer>>(_baseClient.GetUrl("auth/w/funding/offer/submit", "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
}

/// <inheritdoc />
Expand All @@ -92,7 +79,7 @@ public async Task<WebCallResult<BitfinexWriteResult<BitfinexFundingOffer>>> Canc
{ "id", offerId }
};

return await _baseClient.SendRequestAsync<BitfinexWriteResult<BitfinexFundingOffer>>(_baseClient.GetUrl(FundingOfferCancelEndpoint, "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
return await _baseClient.SendRequestAsync<BitfinexWriteResult<BitfinexFundingOffer>>(_baseClient.GetUrl("auth/w/funding/offer/cancel", "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
}

/// <inheritdoc />
Expand All @@ -118,7 +105,7 @@ public async Task<WebCallResult<BitfinexWriteResult>> CancelAllFundingOffersAsyn
/// <inheritdoc />
public async Task<WebCallResult<IEnumerable<BitfinexFunding>>> GetFundingLoansAsync(string symbol, CancellationToken ct = default)
{
return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFunding>>(_baseClient.GetUrl(FundingLoansEndpoint.FillPathParameters(symbol), "2"), HttpMethod.Post, ct, null, true).ConfigureAwait(false);
return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFunding>>(_baseClient.GetUrl($"auth/r/funding/loans/{symbol}", "2"), HttpMethod.Post, ct, null, true).ConfigureAwait(false);
}

/// <inheritdoc />
Expand All @@ -130,13 +117,13 @@ public async Task<WebCallResult<IEnumerable<BitfinexFunding>>> GetFundingLoansHi
parameters.AddOptionalParameter("start", DateTimeConverter.ConvertToMilliseconds(startTime));
parameters.AddOptionalParameter("end", DateTimeConverter.ConvertToMilliseconds(endTime));

return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFunding>>(_baseClient.GetUrl(FundingLoansHistoryEndpoint.FillPathParameters(symbol), "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFunding>>(_baseClient.GetUrl($"auth/r/funding/loans/{symbol}/hist", "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
}

/// <inheritdoc />
public async Task<WebCallResult<IEnumerable<BitfinexFundingCredit>>> GetFundingCreditsAsync(string symbol, CancellationToken ct = default)
{
return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFundingCredit>>(_baseClient.GetUrl(FundingCreditsEndpoint.FillPathParameters(symbol), "2"), HttpMethod.Post, ct, null, true).ConfigureAwait(false);
return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFundingCredit>>(_baseClient.GetUrl($"auth/r/funding/credits/{symbol}", "2"), HttpMethod.Post, ct, null, true).ConfigureAwait(false);
}

/// <inheritdoc />
Expand All @@ -148,7 +135,7 @@ public async Task<WebCallResult<IEnumerable<BitfinexFundingCredit>>> GetFundingC
parameters.AddOptionalParameter("start", DateTimeConverter.ConvertToMilliseconds(startTime));
parameters.AddOptionalParameter("end", DateTimeConverter.ConvertToMilliseconds(endTime));

return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFundingCredit>>(_baseClient.GetUrl(FundingCreditsHistoryEndpoint.FillPathParameters(symbol), "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFundingCredit>>(_baseClient.GetUrl($"auth/r/funding/credits/{symbol}/hist", "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
}

/// <inheritdoc />
Expand All @@ -160,13 +147,13 @@ public async Task<WebCallResult<IEnumerable<BitfinexFundingTrade>>> GetFundingTr
parameters.AddOptionalParameter("start", DateTimeConverter.ConvertToMilliseconds(startTime));
parameters.AddOptionalParameter("end", DateTimeConverter.ConvertToMilliseconds(endTime));

return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFundingTrade>>(_baseClient.GetUrl(FundingTradesEndpoint.FillPathParameters(symbol), "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
return await _baseClient.SendRequestAsync<IEnumerable<BitfinexFundingTrade>>(_baseClient.GetUrl($"auth/r/funding/trades/{symbol}/hist", "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
}

/// <inheritdoc />
public async Task<WebCallResult<BitfinexFundingInfo>> GetFundingInfoAsync(string symbol, CancellationToken ct = default)
{
return await _baseClient.SendRequestAsync<BitfinexFundingInfo>(_baseClient.GetUrl(FundingInfoEndpoint.FillPathParameters(symbol), "2"), HttpMethod.Post, ct, null, true).ConfigureAwait(false);
return await _baseClient.SendRequestAsync<BitfinexFundingInfo>(_baseClient.GetUrl($"auth/r/info/funding/{symbol}", "2"), HttpMethod.Post, ct, null, true).ConfigureAwait(false);
}

/// <inheritdoc />
Expand All @@ -181,7 +168,7 @@ public async Task<WebCallResult<BitfinexWriteResult<BitfinexFundingAutoRenew>>>
parameters.AddOptionalParameter("rate", rate?.ToString(CultureInfo.InvariantCulture));
parameters.AddOptionalParameter("period", period?.ToString(CultureInfo.InvariantCulture));

return await _baseClient.SendRequestAsync<BitfinexWriteResult<BitfinexFundingAutoRenew>>(_baseClient.GetUrl(FundingAutoRenewEndpoint, "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
return await _baseClient.SendRequestAsync<BitfinexWriteResult<BitfinexFundingAutoRenew>>(_baseClient.GetUrl("auth/w/funding/auto", "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
}

/// <inheritdoc />
Expand All @@ -192,7 +179,7 @@ public async Task<WebCallResult<BitfinexFundingAutoRenewStatus>> GetFundingAutoR
{ "currency", asset },
};

return await _baseClient.SendRequestAsync<BitfinexFundingAutoRenewStatus>(_baseClient.GetUrl(FundingAutoRenewStatusEndpoint, "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
return await _baseClient.SendRequestAsync<BitfinexFundingAutoRenewStatus>(_baseClient.GetUrl("auth/r/funding/auto/status", "2"), HttpMethod.Post, ct, parameters, true).ConfigureAwait(false);
}
}
}
Loading

0 comments on commit bbe3681

Please sign in to comment.