Skip to content

Commit 73f6559

Browse files
authored
Release/2.0.0 (#8)
* Updated CryptoExchange.Net to version 9.0.0, see https://github.com/JKorf/CryptoExchange.Net/releases/ * Added support for Native AOT compilation * Added RateLimitUpdated event * Added SharedSymbol response property to all Shared interfaces response models returning a symbol name * Added GenerateClientOrderId method to UsdFutures and Spot Shared clients * Added OptionalExchangeParameters and Supported properties to EndpointOptions * Added IBookTickerRestClient implementation to UsdFutures and Spot Shared clients * Added ISpotOrderClientIdClient implementation to Spot Shared client * Added IFuturesOrderClientIdClient implementation to UsdFutures Shared client * Added IFuturesTriggerOrderRestClient implementation to UsdFutures Shared client * Added IPositionModeRestClient implementation to UsdFutures Shared client * Added IFuturesTpSlRestClient implementation to UsdFutures Shared client * Added MaxLongLeverage and MaxShortLeverage to SharedFuturesSymbol response model * Added takeProfitPrice and stopLossPrice support to Shared UsdFutures PlaceOrderAsync method * Added TakeProfitPrice, StopLossPrice, TriggerPrice and IsTriggerOrder to SharedFuturesOrder model * Added QuoteVolume property mapping to SharedSpotTicker response model * Added restClient.UsdFuturesApi.Trading.CancelAllAfterAsync endpoint * Added restClient.UsdFuturesApi.Account.SetPositionModeAsync and GetPositionModeAsync endpoints * Added PositionMode properties to response models * Added All property to retrieve all available environment on BitMartEnvironment * Added CancelSource property to BitMartOrder model * Refactored Shared clients quantity parameters and responses to use Shared Quantity * Updated all IEnumerable response and model types to array response types * Updated BitMartFuturesOrderUpdate response model * Replaced BitMartApiCredentials with ApiCredentials * Fixed incorrect DataTradeMode on certain Shared interface responses * Removed Newtonsoft.Json dependency * Removed legacy ISpotClient implementation * Removed legacy AddBitMart(restOptions, socketOptions) DI overload * Fixed some typos
1 parent ddd1eb7 commit 73f6559

File tree

179 files changed

+3877
-1236
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

179 files changed

+3877
-1236
lines changed

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,10 @@ What endpoints and subscriptions are called.
1616
**Expected behavior**
1717
A clear and concise description of what you expected to happen.
1818

19-
**Debug logging**
20-
Add debug logging related to the issue.
19+
**Additional info**
20+
If the issue is with a specific endpoint please provide:
21+
response.RequestBody:
22+
If possible enable the `options.Rest.OutputOriginalData` client options and provide:
23+
response.OriginalData:
24+
25+
If available provide related logging:

BitMart.Net.UnitTests/BitMartRestClientTests.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
using CryptoExchange.Net.Authentication;
21
using CryptoExchange.Net.Clients;
3-
using CryptoExchange.Net.Converters.JsonNet;
42
using NUnit.Framework;
53
using System.Collections.Generic;
64
using System.Net.Http;
75
using BitMart.Net.Clients;
8-
using BitMart.Net.Objects;
96
using Microsoft.Extensions.Configuration;
107
using Microsoft.Extensions.DependencyInjection;
118
using CryptoExchange.Net.Objects;
129
using BitMart.Net.Interfaces.Clients;
10+
using CryptoExchange.Net.Authentication;
11+
using CryptoExchange.Net.Converters.SystemTextJson;
1312

1413
namespace BitMart.Net.UnitTests
1514
{
@@ -19,7 +18,7 @@ public class BitMartRestClientTests
1918
[Test]
2019
public void CheckSignatureExample1()
2120
{
22-
var authProvider = new BitMartAuthenticationProvider(new BitMartApiCredentials("XXX", "XXX", "XXX"));
21+
var authProvider = new BitMartAuthenticationProvider(new ApiCredentials("XXX", "XXX", "XXX"));
2322
var client = (RestApiClient)new BitMartRestClient().SpotApi;
2423

2524
CryptoExchange.Net.Testing.TestHelpers.CheckSignature(
@@ -36,7 +35,7 @@ public void CheckSignatureExample1()
3635
{
3736
{ "symbol", "LTCBTC" },
3837
},
39-
DateTimeConverter.ParseFromLong(1499827319559),
38+
DateTimeConverter.ParseFromDouble(1499827319559),
4039
true,
4140
false);
4241
}
@@ -119,10 +118,10 @@ public void TestConstructorConfiguration()
119118
{
120119
{ "ApiCredentials:Key", "123" },
121120
{ "ApiCredentials:Secret", "456" },
122-
{ "ApiCredentials:Passphrase", "000" },
121+
{ "ApiCredentials:Pass", "000" },
123122
{ "Socket:ApiCredentials:Key", "456" },
124123
{ "Socket:ApiCredentials:Secret", "789" },
125-
{ "Socket:ApiCredentials:Passphrase", "xxx" },
124+
{ "Socket:ApiCredentials:Pass", "xxx" },
126125
{ "Rest:OutputOriginalData", "true" },
127126
{ "Socket:OutputOriginalData", "false" },
128127
{ "Rest:Proxy:Host", "host" },

BitMart.Net.UnitTests/BitMartRestIntegrationTests.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using BitMart.Net.Clients;
22
using BitMart.Net.Objects;
33
using BitMart.Net.Objects.Options;
4+
using BitMart.Net.SymbolOrderBooks;
5+
using CryptoExchange.Net.Authentication;
46
using CryptoExchange.Net.Testing;
57
using Microsoft.Extensions.Logging;
68
using Microsoft.Extensions.Options;
@@ -32,7 +34,7 @@ public override BitMartRestClient GetClient(ILoggerFactory loggerFactory)
3234
return new BitMartRestClient(null, loggerFactory, Options.Create(new BitMartRestOptions
3335
{
3436
OutputOriginalData = true,
35-
ApiCredentials = Authenticated ? new BitMartApiCredentials(key, sec, pass) : null
37+
ApiCredentials = Authenticated ? new ApiCredentials(key, sec, pass) : null
3638
}));
3739
}
3840

@@ -121,5 +123,12 @@ public async Task TestUsdFuturesTrading()
121123
await RunAndCheckResult(client => client.UsdFuturesApi.Trading.GetPositionRiskAsync(default, default), true);
122124
await RunAndCheckResult(client => client.UsdFuturesApi.Trading.GetUserTradesAsync("ETHUSDT", default, default, default), true);
123125
}
126+
127+
[Test]
128+
public async Task TestOrderBooks()
129+
{
130+
await TestOrderBook(new BitMartSpotSymbolOrderBook("ETH_USDT"));
131+
await TestOrderBook(new BitMartUsdFuturesSymbolOrderBook("ETHUSDT"));
132+
}
124133
}
125134
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using BitMart.Net.Clients;
2+
using BitMart.Net.Objects.Models;
3+
using BitMart.Net.Objects.Options;
4+
using CryptoExchange.Net.Testing;
5+
using Microsoft.Extensions.Logging;
6+
using Microsoft.Extensions.Options;
7+
using NUnit.Framework;
8+
using System;
9+
using System.Threading.Tasks;
10+
11+
namespace BitMart.Net.UnitTests
12+
{
13+
[NonParallelizable]
14+
internal class BitMartSocketIntegrationTests : SocketIntegrationTest<BitMartSocketClient>
15+
{
16+
public override bool Run { get; set; }
17+
18+
public BitMartSocketIntegrationTests()
19+
{
20+
}
21+
22+
public override BitMartSocketClient GetClient(ILoggerFactory loggerFactory)
23+
{
24+
var key = Environment.GetEnvironmentVariable("APIKEY");
25+
var sec = Environment.GetEnvironmentVariable("APISECRET");
26+
var pass = Environment.GetEnvironmentVariable("APIPASS");
27+
28+
Authenticated = key != null && sec != null;
29+
return new BitMartSocketClient(Options.Create(new BitMartSocketOptions
30+
{
31+
OutputOriginalData = true,
32+
ApiCredentials = Authenticated ? new CryptoExchange.Net.Authentication.ApiCredentials(key, sec, pass) : null
33+
}), loggerFactory);
34+
}
35+
36+
[Test]
37+
public async Task TestSubscriptions()
38+
{
39+
await RunAndCheckUpdate<BitMartTickerUpdate>((client, updateHandler) => client.SpotApi.SubscribeToBalanceUpdatesAsync(default , default), false, true);
40+
await RunAndCheckUpdate<BitMartTickerUpdate>((client, updateHandler) => client.SpotApi.SubscribeToTickerUpdatesAsync("ETH_USDT", updateHandler, default), true, false);
41+
42+
await RunAndCheckUpdate<BitMartFuturesBalanceUpdate>((client, updateHandler) => client.UsdFuturesApi.SubscribeToBalanceUpdatesAsync(default, default), false, true);
43+
await RunAndCheckUpdate<BitMartFuturesTickerUpdate>((client, updateHandler) => client.UsdFuturesApi.SubscribeToTickerUpdatesAsync("ETHUSDT", updateHandler, default), true, false);
44+
}
45+
}
46+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
GET
2+
/contract/private/get-position-mode
3+
true
4+
{
5+
"code": 1000,
6+
"trace": "0cc6f4c4-8b8c-4253-8e90-8d3195aa109c",
7+
"message": "Ok",
8+
"data": {
9+
"position_mode":"one_way_mode"
10+
}
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
POST
2+
/contract/private/set-position-mode
3+
true
4+
{
5+
"code": 1000,
6+
"trace": "0cc6f4c4-8b8c-4253-8e90-8d3195aa109c",
7+
"message": "Ok",
8+
"data": {
9+
"position_mode":"one_way_mode"
10+
}
11+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
POST
2+
/contract/private/cancel-all-after
3+
true
4+
{
5+
"code": 1000,
6+
"trace": "0cc6f4c4-8b8c-4253-8e90-8d3195aa109c",
7+
"message": "Ok",
8+
"data": {
9+
"result": true,
10+
"set_time": 1743064715,
11+
"cancel_time": 1743064725
12+
}
13+
}

BitMart.Net.UnitTests/RestRequestTests.cs

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using System.Linq;
1010
using BitMart.Net.Enums;
1111
using System.Drawing;
12+
using CryptoExchange.Net.Authentication;
1213

1314
namespace BitMart.Net.UnitTests
1415
{
@@ -21,9 +22,9 @@ public async Task ValidateSpotAccountDataCalls()
2122
var client = new BitMartRestClient(opts =>
2223
{
2324
opts.AutoTimestamp = false;
24-
opts.ApiCredentials = new BitMartApiCredentials("123", "456", "XXX");
25+
opts.ApiCredentials = new ApiCredentials("123", "456", "XXX");
2526
});
26-
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/Spot/Account", "https://api-cloud.bitmart.com", IsAuthenticated, stjCompare: true);
27+
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/Spot/Account", "https://api-cloud.bitmart.com", IsAuthenticated);
2728
await tester.ValidateAsync(client => client.SpotApi.Account.GetFundingBalancesAsync("123"), "GetFundingBalances", nestedJsonProperty: "data.wallet");
2829
await tester.ValidateAsync(client => client.SpotApi.Account.GetSpotBalancesAsync(), "GetSpotBalances", nestedJsonProperty: "data.wallet");
2930
await tester.ValidateAsync(client => client.SpotApi.Account.GetDepositAddressAsync("123"), "GetDepositAddress", nestedJsonProperty: "data");
@@ -42,9 +43,9 @@ public async Task ValidateSpotExchangeDataCalls()
4243
var client = new BitMartRestClient(opts =>
4344
{
4445
opts.AutoTimestamp = false;
45-
opts.ApiCredentials = new BitMartApiCredentials("123", "456", "XXX");
46+
opts.ApiCredentials = new ApiCredentials("123", "456", "XXX");
4647
});
47-
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/Spot/ExchangeData", "https://api-cloud.bitmart.com", IsAuthenticated, stjCompare: true);
48+
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/Spot/ExchangeData", "https://api-cloud.bitmart.com", IsAuthenticated);
4849
await tester.ValidateAsync(client => client.SpotApi.ExchangeData.GetTickerAsync("123"), "GetTicker", nestedJsonProperty: "data");
4950
await tester.ValidateAsync(client => client.SpotApi.ExchangeData.GetAssetDepositWithdrawInfoAsync(), "GetAssetDepositWithdrawInfo", nestedJsonProperty: "data.currencies");
5051
await tester.ValidateAsync(client => client.SpotApi.ExchangeData.GetServerStatusAsync(), "GetServerStatus", nestedJsonProperty: "data.service");
@@ -60,9 +61,9 @@ public async Task ValidateSpotMarginDataCalls()
6061
var client = new BitMartRestClient(opts =>
6162
{
6263
opts.AutoTimestamp = false;
63-
opts.ApiCredentials = new BitMartApiCredentials("123", "456", "XXX");
64+
opts.ApiCredentials = new ApiCredentials("123", "456", "XXX");
6465
});
65-
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/Spot/Margin", "https://api-cloud.bitmart.com", IsAuthenticated, stjCompare: true);
66+
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/Spot/Margin", "https://api-cloud.bitmart.com", IsAuthenticated);
6667
await tester.ValidateAsync(client => client.SpotApi.Margin.BorrowAsync("123", "123", 0.1m), "Borrow", nestedJsonProperty: "data");
6768
await tester.ValidateAsync(client => client.SpotApi.Margin.RepayAsync("123", "123", 0.1m), "Repay", nestedJsonProperty: "data");
6869
await tester.ValidateAsync(client => client.SpotApi.Margin.GetBorrowHistoryAsync("123"), "GetBorrowHistory", nestedJsonProperty: "data.records");
@@ -76,9 +77,9 @@ public async Task ValidateSpotSubAccountCalls()
7677
var client = new BitMartRestClient(opts =>
7778
{
7879
opts.AutoTimestamp = false;
79-
opts.ApiCredentials = new BitMartApiCredentials("123", "456", "XXX");
80+
opts.ApiCredentials = new ApiCredentials("123", "456", "XXX");
8081
});
81-
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/Spot/SubAccount", "https://api-cloud.bitmart.com", IsAuthenticated, stjCompare: true);
82+
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/Spot/SubAccount", "https://api-cloud.bitmart.com", IsAuthenticated);
8283
await tester.ValidateAsync(client => client.SpotApi.SubAccount.TransferSubToMainForMainAsync("123", "123", 0.1m, "123"), "TransferSubToMainForMain");
8384
await tester.ValidateAsync(client => client.SpotApi.SubAccount.TransferSubToMainForSubAsync("123", "123", 0.1m), "TransferSubToMainForSub");
8485
await tester.ValidateAsync(client => client.SpotApi.SubAccount.TransferMainToSubAccountAsync("123", "123", 0.1m, "123"), "TransferMainToSubAccount");
@@ -95,9 +96,9 @@ public async Task ValidateSpotTradingDataCalls()
9596
var client = new BitMartRestClient(opts =>
9697
{
9798
opts.AutoTimestamp = false;
98-
opts.ApiCredentials = new BitMartApiCredentials("123", "456", "XXX");
99+
opts.ApiCredentials = new ApiCredentials("123", "456", "XXX");
99100
});
100-
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/Spot/Trading", "https://api-cloud.bitmart.com", IsAuthenticated, stjCompare: true);
101+
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/Spot/Trading", "https://api-cloud.bitmart.com", IsAuthenticated);
101102
await tester.ValidateAsync(client => client.SpotApi.Trading.PlaceOrderAsync("123", OrderSide.Buy, OrderType.Market), "PlaceOrder", nestedJsonProperty: "data");
102103
await tester.ValidateAsync(client => client.SpotApi.Trading.CancelOrderAsync("123"), "CancelOrder");
103104
await tester.ValidateAsync(client => client.SpotApi.Trading.PlaceMarginOrderAsync("123", OrderSide.Buy, OrderType.Market), "PlaceMarginOrder", nestedJsonProperty: "data");
@@ -117,13 +118,15 @@ public async Task ValidateUsdFuturesAccountCalls()
117118
var client = new BitMartRestClient(opts =>
118119
{
119120
opts.AutoTimestamp = false;
120-
opts.ApiCredentials = new BitMartApiCredentials("123", "456", "XXX");
121+
opts.ApiCredentials = new ApiCredentials("123", "456", "XXX");
121122
});
122-
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/UsdFutures/Account", "https://api-cloud-v2.bitmart.com", IsAuthenticated, stjCompare: true);
123+
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/UsdFutures/Account", "https://api-cloud-v2.bitmart.com", IsAuthenticated);
123124
//await tester.ValidateAsync(client => client.UsdFuturesApi.Account.GetBalancesAsync(), "GetBalances", nestedJsonProperty: "data");
124125
await tester.ValidateAsync(client => client.UsdFuturesApi.Account.GetTransferHistoryAsync(), "GetTransferHistory", nestedJsonProperty: "data.records");
125126
await tester.ValidateAsync(client => client.UsdFuturesApi.Account.TransferAsync("123", 0.1m, FuturesTransferType.ContractToSpot), "Transfer", nestedJsonProperty: "data");
126127
await tester.ValidateAsync(client => client.UsdFuturesApi.Account.SetLeverageAsync("123", 0.1m, MarginType.CrossMargin), "SetLeverage", nestedJsonProperty: "data");
128+
await tester.ValidateAsync(client => client.UsdFuturesApi.Account.GetPositionModeAsync(), "GetPositionMode", nestedJsonProperty: "data");
129+
await tester.ValidateAsync(client => client.UsdFuturesApi.Account.SetPositionModeAsync(PositionMode.HedgeMode), "SetPositionMode", nestedJsonProperty: "data");
127130
}
128131

129132
[Test]
@@ -132,9 +135,9 @@ public async Task ValidateUsdFuturesExchangeDataCalls()
132135
var client = new BitMartRestClient(opts =>
133136
{
134137
opts.AutoTimestamp = false;
135-
opts.ApiCredentials = new BitMartApiCredentials("123", "456", "XXX");
138+
opts.ApiCredentials = new ApiCredentials("123", "456", "XXX");
136139
});
137-
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/UsdFutures/ExchangeData", "https://api-cloud-v2.bitmart.com", IsAuthenticated, stjCompare: true);
140+
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/UsdFutures/ExchangeData", "https://api-cloud-v2.bitmart.com", IsAuthenticated);
138141
await tester.ValidateAsync(client => client.UsdFuturesApi.ExchangeData.GetContractsAsync(), "GetContracts", nestedJsonProperty: "data.symbols");
139142
await tester.ValidateAsync(client => client.UsdFuturesApi.ExchangeData.GetOrderBookAsync("123"), "GetOrderBook", nestedJsonProperty: "data");
140143
await tester.ValidateAsync(client => client.UsdFuturesApi.ExchangeData.GetOpenInterestAsync("123"), "GetOpenInterest", nestedJsonProperty: "data");
@@ -149,9 +152,9 @@ public async Task ValidateUsdFuturesSubAccountCalls()
149152
var client = new BitMartRestClient(opts =>
150153
{
151154
opts.AutoTimestamp = false;
152-
opts.ApiCredentials = new BitMartApiCredentials("123", "456", "XXX");
155+
opts.ApiCredentials = new ApiCredentials("123", "456", "XXX");
153156
});
154-
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/UsdFutures/SubAccount", "https://api-cloud-v2.bitmart.com", IsAuthenticated, stjCompare: true);
157+
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/UsdFutures/SubAccount", "https://api-cloud-v2.bitmart.com", IsAuthenticated);
155158
await tester.ValidateAsync(client => client.UsdFuturesApi.SubAccount.TransferSubToMainForMainAsync("123", 0.1m, "123", "123"), "TransferSubToMainForMain");
156159
await tester.ValidateAsync(client => client.UsdFuturesApi.SubAccount.TransferMainToSubForMainAsync("123", 0.1m, "123", "123"), "TransferMainToSubForMain");
157160
await tester.ValidateAsync(client => client.UsdFuturesApi.SubAccount.TransferSubToMainForSubAsync("123", 0.1m, "123"), "TransferSubToMainForSub");
@@ -166,9 +169,9 @@ public async Task ValidateUsdFuturesTradingCalls()
166169
var client = new BitMartRestClient(opts =>
167170
{
168171
opts.AutoTimestamp = false;
169-
opts.ApiCredentials = new BitMartApiCredentials("123", "456", "XXX");
172+
opts.ApiCredentials = new ApiCredentials("123", "456", "XXX");
170173
});
171-
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/UsdFutures/Trading", "https://api-cloud-v2.bitmart.com", IsAuthenticated, stjCompare: true);
174+
var tester = new RestRequestValidator<BitMartRestClient>(client, "Endpoints/UsdFutures/Trading", "https://api-cloud-v2.bitmart.com", IsAuthenticated);
172175
await tester.ValidateAsync(client => client.UsdFuturesApi.Trading.GetOrderAsync("123", "123"), "GetOrder", nestedJsonProperty: "data");
173176
await tester.ValidateAsync(client => client.UsdFuturesApi.Trading.GetClosedOrdersAsync("123"), "GetClosedOrders", nestedJsonProperty: "data");
174177
await tester.ValidateAsync(client => client.UsdFuturesApi.Trading.GetOpenOrdersAsync(), "GetOpenOrders", nestedJsonProperty: "data");
@@ -186,6 +189,7 @@ public async Task ValidateUsdFuturesTradingCalls()
186189
await tester.ValidateAsync(client => client.UsdFuturesApi.Trading.EditTpSlOrderAsync("123", 0.1m, TriggerPriceType.FairPrice, PlanCategory.PositionTpSl, OrderType.Market), "EditTpSlOrder", nestedJsonProperty: "data");
187190
await tester.ValidateAsync(client => client.UsdFuturesApi.Trading.EditTriggerOrderAsync("123", 0.1m, TriggerPriceType.FairPrice, OrderType.Market), "EditPlanOrder", nestedJsonProperty: "data");
188191
await tester.ValidateAsync(client => client.UsdFuturesApi.Trading.EditPresetTriggerOrderAsync("123", "123", TriggerPriceType.FairPrice, TriggerPriceType.FairPrice, 0.1m, 0.1m), "EditPresetPlanOrder", nestedJsonProperty: "data");
192+
await tester.ValidateAsync(client => client.UsdFuturesApi.Trading.CancelAllAfterAsync("ETHUSDT", TimeSpan.Zero), "CancelAllAfter", nestedJsonProperty: "data");
189193
}
190194

191195
private bool IsAuthenticated(WebCallResult result)

0 commit comments

Comments
 (0)