diff --git a/src/Nexus.Crypto.SDK/INexusAPIService.cs b/src/Nexus.Crypto.SDK/INexusAPIService.cs index deb7c21..3a5e165 100644 --- a/src/Nexus.Crypto.SDK/INexusAPIService.cs +++ b/src/Nexus.Crypto.SDK/INexusAPIService.cs @@ -9,9 +9,7 @@ namespace Nexus.Crypto.SDK; public interface INexusAPIService { - IDocumentStoreSettingsService DocumentStoreSettings { get; } - IDocumentStoreTypeService DocumentStoreType { get; } - IDocumentStoreRecordService DocumentStoreRecord { get; } + IDocumentStoreService DocumentStore { get; } ICustomerService Customer { get; } Task> GetLabelPartner(); Task> GetCurrencies(); diff --git a/src/Nexus.Crypto.SDK/Models/DocumentStoreRecord.cs b/src/Nexus.Crypto.SDK/Models/DocumentStore/DocumentStoreRecord.cs similarity index 98% rename from src/Nexus.Crypto.SDK/Models/DocumentStoreRecord.cs rename to src/Nexus.Crypto.SDK/Models/DocumentStore/DocumentStoreRecord.cs index ac7ac27..ea19a8c 100644 --- a/src/Nexus.Crypto.SDK/Models/DocumentStoreRecord.cs +++ b/src/Nexus.Crypto.SDK/Models/DocumentStore/DocumentStoreRecord.cs @@ -1,8 +1,7 @@ using System.ComponentModel.DataAnnotations; -using System.IO; using System.Text.Json.Serialization; -namespace Nexus.Crypto.SDK.Models; +namespace Nexus.Crypto.SDK.Models.DocumentStore; public class DocumentStoreRecordResponse { diff --git a/src/Nexus.Crypto.SDK/Models/DocumentStoreSettings.cs b/src/Nexus.Crypto.SDK/Models/DocumentStore/DocumentStoreSettings.cs similarity index 98% rename from src/Nexus.Crypto.SDK/Models/DocumentStoreSettings.cs rename to src/Nexus.Crypto.SDK/Models/DocumentStore/DocumentStoreSettings.cs index d0d386e..f871b2b 100644 --- a/src/Nexus.Crypto.SDK/Models/DocumentStoreSettings.cs +++ b/src/Nexus.Crypto.SDK/Models/DocumentStore/DocumentStoreSettings.cs @@ -1,8 +1,7 @@ using System.ComponentModel.DataAnnotations; using System.Text.Json.Serialization; - -namespace Nexus.Crypto.SDK.Models; +namespace Nexus.Crypto.SDK.Models.DocumentStore; public class DocumentStoreSettingsRequest { diff --git a/src/Nexus.Crypto.SDK/Models/DocumentStoreType.cs b/src/Nexus.Crypto.SDK/Models/DocumentStore/DocumentStoreType.cs similarity index 97% rename from src/Nexus.Crypto.SDK/Models/DocumentStoreType.cs rename to src/Nexus.Crypto.SDK/Models/DocumentStore/DocumentStoreType.cs index 7fa9c31..260d484 100644 --- a/src/Nexus.Crypto.SDK/Models/DocumentStoreType.cs +++ b/src/Nexus.Crypto.SDK/Models/DocumentStore/DocumentStoreType.cs @@ -1,7 +1,6 @@ using System.ComponentModel.DataAnnotations; -namespace Nexus.Crypto.SDK.Models; - +namespace Nexus.Crypto.SDK.Models.DocumentStore; public record DocumentStoreTypeResponse { diff --git a/src/Nexus.Crypto.SDK/NexusAPIService.cs b/src/Nexus.Crypto.SDK/NexusAPIService.cs index 604fa9e..01261c1 100644 --- a/src/Nexus.Crypto.SDK/NexusAPIService.cs +++ b/src/Nexus.Crypto.SDK/NexusAPIService.cs @@ -8,39 +8,39 @@ namespace Nexus.Crypto.SDK; public class NexusAPIService(INexusApiClientFactory nexusApiClientFactory) - : BaseService(nexusApiClientFactory), INexusBrokerAPIService, INexusCustodianAPIService + : BaseService(nexusApiClientFactory), + INexusBrokerAPIService, + INexusCustodianAPIService { - public IDocumentStoreSettingsService DocumentStoreSettings { get; } = new DocumentStoreSettingsService(nexusApiClientFactory); - public IDocumentStoreTypeService DocumentStoreType { get; } = new DocumentStoreTypeService(nexusApiClientFactory); - public IDocumentStoreRecordService DocumentStoreRecord { get; } = new DocumentStoreRecordService(nexusApiClientFactory); - public ICustomerService Customer { get; } = new CustomerService(nexusApiClientFactory); - - public NexusAPIService AddHeader(string key, string value) + public new NexusAPIService AddHeader(string key, string value) { - _headers.Add(key, value); + base.AddHeader(key, value); return this; } + public IDocumentStoreService DocumentStore => new DocumentStoreService(this); + public ICustomerService Customer => new CustomerService(this); + public async Task> GetCurrencies() { - return await GetAsync>("currencies", "1.2"); + return await GetAsync>("currencies", ApiVersion1_2); } public async Task> GetPrices(string currency) { - return await GetAsync>($"prices/{currency}", "1.2"); + return await GetAsync>($"prices/{currency}", ApiVersion1_2); } public async Task> GetLabelPartner() { - return await GetAsync>("labelpartner", "1.2"); + return await GetAsync>("labelpartner", ApiVersion1_2); } public async Task> GetReserves(string? reservesTimeStamp = null) { return await GetAsync>( $"reserves?reservesTimeStamp={reservesTimeStamp}", - "1.2"); + ApiVersion1_2); } public async Task> GetBrokerBalances() @@ -55,7 +55,7 @@ public async Task> GetBrokerBalances() public async Task> GetCustodianBalances() { - return await GetAsync>("balances", "1.2"); + return await GetAsync>("balances", ApiVersion1_2); } public async Task>> GetBalanceMutations( @@ -63,7 +63,7 @@ public async Task>> GetBalanc { return await GetAsync>>( $"balances/hotwallet/mutations{CreateUriQuery(queryParams)}", - "1.2"); + ApiVersion1_2); } public async Task>> GetMails( @@ -71,38 +71,38 @@ public async Task>> GetMails( { return await GetAsync>>( $"mail{CreateUriQuery(queryParams)}", - "1.2"); + ApiVersion1_2); } public async Task> GetBrokerTransaction(string txCode) { - return await GetAsync>($"transaction/{txCode}", "1.2"); + return await GetAsync>($"transaction/{txCode}", ApiVersion1_2); } public async Task>> GetBrokerTransactions( Dictionary queryParams) { return await GetAsync>>( - $"transaction{CreateUriQuery(queryParams)}", "1.2"); + $"transaction{CreateUriQuery(queryParams)}", ApiVersion1_2); } public async Task>> GetBrokerTransactionTotals( Dictionary queryParams) { return await GetAsync>>( - $"transaction/totals{CreateUriQuery(queryParams)}", "1.2"); + $"transaction/totals{CreateUriQuery(queryParams)}", ApiVersion1_2); } public async Task>> GetTransfers(GetTransfersRequest? request = null) { return await GetAsync>>( - $"/transfers?{QueryParameterHelper.ToQueryString(request)}", "1.2"); + $"/transfers?{QueryParameterHelper.ToQueryString(request)}", ApiVersion1_2); } public async Task>> GetOrders(GetOrdersRequest? request = null) { return await GetAsync>>( - $"/orders?{QueryParameterHelper.ToQueryString(request)}", "1.2"); + $"/orders?{QueryParameterHelper.ToQueryString(request)}", ApiVersion1_2); } public async Task> GetMinutePrices(int timeSpan, string currencyCode, @@ -118,44 +118,46 @@ public async Task>>( $"transaction/{transactionCode}/callbacks", - "1.2"); + ApiVersion1_2); } public Task> GetCustodianTransaction(string txCode) { return GetAsync>( $"transactions/custodian/{txCode}", - "1.2"); + ApiVersion1_2); } public Task> CancelCustodianTransaction(string txCode) { return PostAsync>( $"transactions/custodian/{txCode}/cancel", - "1.2"); + ApiVersion1_2); } public async Task>> GetPortfolios() { - return await GetAsync>>("portfolios", "1.2"); + return await GetAsync>>("portfolios", ApiVersion1_2); } public async Task>> GetTrustLevels() { - return await GetAsync>>("labelpartner/trustlevels", "1.2"); + return await GetAsync>>("labelpartner/trustlevels", ApiVersion1_2); } - public async Task>> GetCustomerBankAccounts(string customerCode, Dictionary queryParams) + public async Task>> GetCustomerBankAccounts( + string customerCode, Dictionary queryParams) { - return await GetAsync>>( + return await GetAsync>>( $"customer/{customerCode}/bankaccounts{CreateUriQuery(queryParams)}", - "1.2"); + ApiVersion1_2); } - public async Task> CreateCustomerBankAccount(string customerCode, CreateBankAccountRequestModel request) + public async Task> CreateCustomerBankAccount(string customerCode, + CreateBankAccountRequestModel request) { return await PostAsync>( - $"customer/{customerCode}/bankaccounts", request, "1.2"); + $"customer/{customerCode}/bankaccounts", request, ApiVersion1_2); } public async Task> UpdateCustomerBankAccount(string customerCode, @@ -164,7 +166,7 @@ public async Task> UpdateCustome return await PutAsync>( $"customer/{customerCode}/bankaccounts/{bankAccountId}", request, - "1.2" + ApiVersion1_2 ); } @@ -172,6 +174,6 @@ public Task DeleteCustomerBankAccount(string customerCode, Guid bankAccountId) { return DeleteAsync( $"customer/{customerCode}/bankAccounts/{bankAccountId}", - "1.2"); + ApiVersion1_2); } } \ No newline at end of file diff --git a/src/Nexus.Crypto.SDK/Services/BaseService.cs b/src/Nexus.Crypto.SDK/Services/BaseService.cs index 1208d42..2cd6885 100644 --- a/src/Nexus.Crypto.SDK/Services/BaseService.cs +++ b/src/Nexus.Crypto.SDK/Services/BaseService.cs @@ -8,14 +8,20 @@ namespace Nexus.Crypto.SDK.Services; public class BaseService(INexusApiClientFactory nexusApiClientFactory): IHttpService { - protected const string ISO8601DateTimeFormat = "yyyy-MM-ddTHH:mm:ssZ"; - protected const string ApiVersion = "1.2"; - protected readonly Dictionary _headers = []; + public const string ApiVersion1_2 = "1.2"; + public const string ISO8601DateTimeFormat = "yyyy-MM-ddTHH:mm:ssZ"; + + private readonly Dictionary _headers = []; - protected readonly JsonSerializerOptions _serializerOptions = new() + private readonly JsonSerializerOptions _serializerOptions = new() { Converters = { new JsonStringEnumConverter() }, PropertyNameCaseInsensitive = true }; + + public void AddHeader(string key, string value) + { + _headers.Add(key, value); + } private static async Task HandleErrorResponse(HttpResponseMessage response) { @@ -31,7 +37,7 @@ private static async Task HandleErrorResponse(HttpResponseMessage response) throw exception; } - protected async Task GetApiClient(string apiVersion) + private async Task GetApiClient(string apiVersion) { var client = await nexusApiClientFactory.GetClient(apiVersion); @@ -153,7 +159,7 @@ public async Task DeleteAsync(string endPoint, string apiV /// /// /// - protected static string CreateUriQuery(Dictionary queryParams) + public static string CreateUriQuery(Dictionary queryParams) { var query = string.Empty; diff --git a/src/Nexus.Crypto.SDK/Services/CustomerService.cs b/src/Nexus.Crypto.SDK/Services/CustomerService.cs index ac66367..ad257f0 100644 --- a/src/Nexus.Crypto.SDK/Services/CustomerService.cs +++ b/src/Nexus.Crypto.SDK/Services/CustomerService.cs @@ -3,56 +3,58 @@ namespace Nexus.Crypto.SDK.Services; -public class CustomerService(INexusApiClientFactory nexusApiClientFactory) :BaseService(nexusApiClientFactory), ICustomerService +public class CustomerService(BaseService service) : ICustomerService { public Task> GetCustomerTraceSummary(string customerCode, DateTime startDate) { - return GetAsync>( - $"customer/{customerCode}/trace/summary?startDate={startDate.ToString(ISO8601DateTimeFormat)}", - ApiVersion); + return service.GetAsync>( + $"customer/{customerCode}/trace/summary?startDate={startDate.ToString(BaseService.ISO8601DateTimeFormat)}", + BaseService.ApiVersion1_2); } public Task>> GetCustomerTraces(string customerCode, DateTime startDate) { - return GetAsync>>( - $"customer/{customerCode}/trace?startDate={startDate.ToString(ISO8601DateTimeFormat)}", - ApiVersion); + return service.GetAsync>>( + $"customer/{customerCode}/trace?startDate={startDate.ToString(BaseService.ISO8601DateTimeFormat)}", + BaseService.ApiVersion1_2); } - + public async Task> GetCustomer(string customerCode) { - return await GetAsync>($"customer/{customerCode}", ApiVersion); + return await service.GetAsync>($"customer/{customerCode}", + BaseService.ApiVersion1_2); } public async Task>> GetCustomers(Dictionary queryParams) { - return await GetAsync>>( - $"customer{CreateUriQuery(queryParams)}", - ApiVersion); + return await service.GetAsync>>( + $"customer{BaseService.CreateUriQuery(queryParams)}", + BaseService.ApiVersion1_2); } public async Task> CreateCustomer(CreateCustomerRequest request) { - return await PostAsync>( + return await service.PostAsync>( "customer", request, - ApiVersion + BaseService.ApiVersion1_2 ); } public async Task> DeleteCustomer(string customerCode) { - return await DeleteAsync>($"customer/{customerCode}", ApiVersion); + return await service.DeleteAsync>($"customer/{customerCode}", + BaseService.ApiVersion1_2); } public async Task> UpdateCustomer(string customerCode, UpdateCustomerRequest request) { - return await PutAsync>( + return await service.PutAsync>( $"customer/{customerCode}", request, - ApiVersion); + BaseService.ApiVersion1_2); } } \ No newline at end of file diff --git a/src/Nexus.Crypto.SDK/Services/DocumentStoreRecordService.cs b/src/Nexus.Crypto.SDK/Services/DocumentStoreRecordService.cs index af7d48a..42bf5ae 100644 --- a/src/Nexus.Crypto.SDK/Services/DocumentStoreRecordService.cs +++ b/src/Nexus.Crypto.SDK/Services/DocumentStoreRecordService.cs @@ -1,16 +1,17 @@ -using Nexus.Crypto.SDK.Models; +using Nexus.Crypto.SDK.Models.DocumentStore; using Nexus.Crypto.SDK.Models.Response; namespace Nexus.Crypto.SDK.Services; -public class DocumentStoreRecordService(INexusApiClientFactory nexusApiClientFactory) : BaseService(nexusApiClientFactory), IDocumentStoreRecordService +public class DocumentStoreRecordService(BaseService service) : IDocumentStoreRecordService { private const string DocumentStoreRecordUrl = "integrations/documentstore/file"; private const string DocumentStoreRecordListUrl = "integrations/documentstore/list"; + public async Task> Create(FileUploadRequest request) { using var formContent = new MultipartFormDataContent(); - + // Add file content as stream content to avoid loading the entire file into memory using var fileContent = new StreamContent(request.FileContent); formContent.Add(fileContent, "file", request.FileName); @@ -28,32 +29,36 @@ public async Task> Create(FileUp if (!string.IsNullOrEmpty(request.ItemReference)) formContent.Add(new StringContent(request.ItemReference), "itemReference"); - return await PostAsync>(DocumentStoreRecordUrl, formContent, ApiVersion); + return await service.PostAsync>(DocumentStoreRecordUrl, + formContent, + BaseService.ApiVersion1_2); } public Task GetDocument(string filePath) { var url = $"{DocumentStoreRecordUrl}?filePath={filePath}"; - return GetStream(url, ApiVersion); + return service.GetStream(url, BaseService.ApiVersion1_2); } - public Task>> Get(string customerCode, Dictionary queryParams) + public Task>> Get(string customerCode, + Dictionary queryParams) { queryParams["customerCode"] = customerCode; - var url = DocumentStoreRecordListUrl + CreateUriQuery(queryParams); - return GetAsync>>(url, ApiVersion); + var url = DocumentStoreRecordListUrl + BaseService.CreateUriQuery(queryParams); + return service.GetAsync>>(url, + BaseService.ApiVersion1_2); } public Task> Update(FileUpdateRequest request) { - return PutAsync>( - DocumentStoreRecordUrl, request, ApiVersion); + return service.PutAsync>( + DocumentStoreRecordUrl, request, BaseService.ApiVersion1_2); } public Task Delete(string filePath) { var url = $"{DocumentStoreRecordUrl}?filePath={filePath}"; - return DeleteAsync(url, ApiVersion); + return service.DeleteAsync(url, BaseService.ApiVersion1_2); } } \ No newline at end of file diff --git a/src/Nexus.Crypto.SDK/Services/DocumentStoreService.cs b/src/Nexus.Crypto.SDK/Services/DocumentStoreService.cs new file mode 100644 index 0000000..42def83 --- /dev/null +++ b/src/Nexus.Crypto.SDK/Services/DocumentStoreService.cs @@ -0,0 +1,12 @@ +namespace Nexus.Crypto.SDK.Services; + +public class DocumentStoreService(BaseService service) : IDocumentStoreService +{ + private readonly IDocumentStoreTypeService _types = new DocumentStoreTypeService(service); + private readonly IDocumentStoreSettingsService _settings = new DocumentStoreSettingsService(service); + private readonly IDocumentStoreRecordService _records = new DocumentStoreRecordService(service); + + public IDocumentStoreTypeService Types => _types; + public IDocumentStoreSettingsService Settings => _settings; + public IDocumentStoreRecordService Records => _records; +} \ No newline at end of file diff --git a/src/Nexus.Crypto.SDK/Services/DocumentStoreSettingsService.cs b/src/Nexus.Crypto.SDK/Services/DocumentStoreSettingsService.cs index da3833c..199ffeb 100644 --- a/src/Nexus.Crypto.SDK/Services/DocumentStoreSettingsService.cs +++ b/src/Nexus.Crypto.SDK/Services/DocumentStoreSettingsService.cs @@ -1,18 +1,20 @@ -using Nexus.Crypto.SDK.Models; +using Nexus.Crypto.SDK.Models.DocumentStore; using Nexus.Crypto.SDK.Models.Response; namespace Nexus.Crypto.SDK.Services; -public class DocumentStoreSettingsService(INexusApiClientFactory nexusApiClientFactory): BaseService(nexusApiClientFactory), IDocumentStoreSettingsService +public class DocumentStoreSettingsService(BaseService service) : IDocumentStoreSettingsService { private const string documentStoreUrl = "integrations/documentstore"; + /// /// Retrieve the Document Store settings /// /// public Task> Get() { - return GetAsync>(documentStoreUrl, ApiVersion); + return service.GetAsync>(documentStoreUrl, + BaseService.ApiVersion1_2); } /// @@ -20,12 +22,13 @@ public Task> Get() /// /// /// - public Task> Create(DocumentStoreSettingsRequest documentStoreSettings) + public Task> Create( + DocumentStoreSettingsRequest documentStoreSettings) { - return PostAsync>( + return service.PostAsync>( documentStoreUrl, documentStoreSettings, - ApiVersion); + BaseService.ApiVersion1_2); } /// @@ -35,10 +38,10 @@ public Task> Create(DocumentSt /// public Task Update(DocumentStoreSettingsRequest documentStoreSettings) { - return PutAsync( + return service.PutAsync( documentStoreUrl, documentStoreSettings, - ApiVersion); + BaseService.ApiVersion1_2); } /// @@ -47,6 +50,6 @@ public Task Update(DocumentStoreSettingsRequest documentStor /// public Task Delete() { - return DeleteAsync(documentStoreUrl, ApiVersion); + return service.DeleteAsync(documentStoreUrl, BaseService.ApiVersion1_2); } } \ No newline at end of file diff --git a/src/Nexus.Crypto.SDK/Services/DocumentStoreTypeService.cs b/src/Nexus.Crypto.SDK/Services/DocumentStoreTypeService.cs index f92fda9..52d41f6 100644 --- a/src/Nexus.Crypto.SDK/Services/DocumentStoreTypeService.cs +++ b/src/Nexus.Crypto.SDK/Services/DocumentStoreTypeService.cs @@ -1,39 +1,39 @@ -using Nexus.Crypto.SDK.Models; +using Nexus.Crypto.SDK.Models.DocumentStore; using Nexus.Crypto.SDK.Models.Response; namespace Nexus.Crypto.SDK.Services; -public class DocumentStoreTypeService(INexusApiClientFactory nexusApiClientFactory) : BaseService(nexusApiClientFactory), IDocumentStoreTypeService +public class DocumentStoreTypeService(BaseService service) : IDocumentStoreTypeService { private const string DocumentTypeUrl = "integrations/documentstore/type"; public Task> Create(DocumentStoreTypeCreateRequest request) { - return PostAsync>( - DocumentTypeUrl, request, ApiVersion); + return service.PostAsync>( + DocumentTypeUrl, request, BaseService.ApiVersion1_2); } public Task Delete(string documentTypeCode) { var url = $"{DocumentTypeUrl}/{documentTypeCode}"; - return DeleteAsync(url, ApiVersion); + return service.DeleteAsync(url, BaseService.ApiVersion1_2); } public Task> GetByCode(string documentTypeCode) { var url = $"{DocumentTypeUrl}/{documentTypeCode}"; - return GetAsync>(url, ApiVersion); + return service.GetAsync>(url, BaseService.ApiVersion1_2); } public Task>> Get(Dictionary queryParams) { - var url = DocumentTypeUrl + CreateUriQuery(queryParams); - return GetAsync>>(url, ApiVersion); + var url = DocumentTypeUrl + BaseService.CreateUriQuery(queryParams); + return service.GetAsync>>(url, BaseService.ApiVersion1_2); } public Task> Update(string documentTypeCode, DocumentStoreTypeUpdateRequest request) { var url = $"{DocumentTypeUrl}/{documentTypeCode}"; - return PutAsync>( - url, request, ApiVersion); + return service.PutAsync>( + url, request, BaseService.ApiVersion1_2); } } \ No newline at end of file diff --git a/src/Nexus.Crypto.SDK/Services/IDocumentStoreRecordService.cs b/src/Nexus.Crypto.SDK/Services/IDocumentStoreRecordService.cs index bd23480..7819e73 100644 --- a/src/Nexus.Crypto.SDK/Services/IDocumentStoreRecordService.cs +++ b/src/Nexus.Crypto.SDK/Services/IDocumentStoreRecordService.cs @@ -1,4 +1,4 @@ -using Nexus.Crypto.SDK.Models; +using Nexus.Crypto.SDK.Models.DocumentStore; using Nexus.Crypto.SDK.Models.Response; namespace Nexus.Crypto.SDK.Services; diff --git a/src/Nexus.Crypto.SDK/Services/IDocumentStoreService.cs b/src/Nexus.Crypto.SDK/Services/IDocumentStoreService.cs new file mode 100644 index 0000000..57f677e --- /dev/null +++ b/src/Nexus.Crypto.SDK/Services/IDocumentStoreService.cs @@ -0,0 +1,8 @@ +namespace Nexus.Crypto.SDK.Services; + +public interface IDocumentStoreService +{ + IDocumentStoreTypeService Types { get; } + IDocumentStoreSettingsService Settings { get; } + IDocumentStoreRecordService Records { get; } +} \ No newline at end of file diff --git a/src/Nexus.Crypto.SDK/Services/IDocumentStoreSettingsService.cs b/src/Nexus.Crypto.SDK/Services/IDocumentStoreSettingsService.cs index 9112213..50aeb5b 100644 --- a/src/Nexus.Crypto.SDK/Services/IDocumentStoreSettingsService.cs +++ b/src/Nexus.Crypto.SDK/Services/IDocumentStoreSettingsService.cs @@ -1,4 +1,5 @@ using Nexus.Crypto.SDK.Models; +using Nexus.Crypto.SDK.Models.DocumentStore; using Nexus.Crypto.SDK.Models.Response; namespace Nexus.Crypto.SDK.Services; diff --git a/src/Nexus.Crypto.SDK/Services/IDocumentStoreTypeService.cs b/src/Nexus.Crypto.SDK/Services/IDocumentStoreTypeService.cs index 60c483f..fc08f9e 100644 --- a/src/Nexus.Crypto.SDK/Services/IDocumentStoreTypeService.cs +++ b/src/Nexus.Crypto.SDK/Services/IDocumentStoreTypeService.cs @@ -1,4 +1,4 @@ -using Nexus.Crypto.SDK.Models; +using Nexus.Crypto.SDK.Models.DocumentStore; using Nexus.Crypto.SDK.Models.Response; namespace Nexus.Crypto.SDK.Services;