Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 155 additions & 6 deletions src/Nexus.Crypto.SDK/INexusAPIService.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Nexus.Crypto.SDK.Models;
using Nexus.Crypto.SDK.Models.Account;
using Nexus.Crypto.SDK.Models.Broker;
using Nexus.Crypto.SDK.Models.Custodian;
using Nexus.Crypto.SDK.Models.PriceChartModel;
Expand All @@ -12,39 +13,187 @@ public interface INexusAPIService
IDocumentStoreService DocumentStore { get; }
ICustomerService Customer { get; }
ICustomerPersonService CustomerPerson { get; }

// Label partner
Task<CustomResultHolder<GetLabelPartner>> GetLabelPartner();
Task<CustomResultHolder<LabelPartnerResponse>> GetLabelPartnerConfig();
Task<CustomResultHolder<PagedResult<LabelPartnerCryptoCurrency>>> GetLabelPartnerCryptoCurrencies(GetLabelPartnerCryptoCurrenciesRequest? request = null);
Task<CustomResultHolder<PagedResult<LabelPartnerCountry>>> GetLabelPartnerCountries(GetLabelPartnerCountriesRequest? request = null);

// Currencies
Task<CustomResultHolder<GetCurrencies>> GetCurrencies();

// Prices
Task<CustomResultHolder<GetPrices>> GetPrices(string currency);
Task<CustomResultHolder<GetPriceData>> GetHistoricPrices(string currency, string crypto, GetPriceDataRequest? request = null);

// Reserves
Task<CustomResultHolder<GetReserves>> GetReserves(string reservesTimeStamp);

// Balances
Task<CustomResultHolder<GetCustodianBalances>> GetCustodianBalances();
Task<CustomResultHolder<GetBrokerBalances_1_1>> GetBrokerBalances();
Task<CustomResultHolder<PagedResult<HotWalletBalance>>> GetHotWalletBalances(GetHotWalletBalancesRequest? request = null);
Task<CustomResultHolder<PagedResult<GetBalanceMutation>>> GetBalanceMutations(Dictionary<string, string> queryParams);
Task<CustomResultHolder<PagedResult<GetMail>>> GetMails(Dictionary<string, string> queryParams);

Task<CustomResultHolder<PagedResult<GetTransfer>>> GetTransfers(GetTransfersRequest? request = null);
Task<CustomResultHolder<PagedResult<ListOrder>>> GetOrders(GetOrdersRequest? request = null);
Task<IEnumerable<ChartSeriesModelPT>> GetMinutePrices(int timeSpan, string currencyCode, string cryptoCode);
// Accounts
Task<CustomResultHolder<PagedResult<GetAccountResponse>>> GetAccounts(GetAccountsRequest? request = null);
Task<CustomResultHolder<GetAccountResponse>> GetAccount(string accountCode);
Task<CustomResultHolder<CreateAccountResponse>> CreateAccount(string customerCode, CreateAccountRequest request);
Task<CustomResultHolder<GetAccountResponse>> UpdateAccount(string accountCode, UpdateAccountRequest request);
Task<CustomResultHolder<CreateAccountResponse>> CreateNonNativeAccount(string accountCode, CreateNonNativeAccountRequest request);
Task<CustomResultHolder<PagedResult<GetAccountBalanceResponse>>> GetAccountBalances(string accountCode);

Task<CustomResultHolder<PagedResult<TransactionNotificationCallbackResponse>>> GetCallbacks(string transactionCode);
// Buckets
Task<CustomResultHolder<PagedResult<GetBucketResponse>>> GetBuckets(GetBucketsRequest? request = null);
Task<CustomResultHolder<GetBucketResponse>> GetBucket(string bucketCode);
Task<CustomResultHolder<GetBucketResponse>> CreateBucket(CreateBucketRequest request);
Task<CustomResultHolder<GetBucketResponse>> UpdateBucket(string bucketCode, UpdateBucketRequest request);
Task DeleteBucket(string bucketCode);

// Portfolios
Task<CustomResultHolder<List<GetPortfolio>>> GetPortfolios();
Task<CustomResultHolder<GetPortfolio>> CreatePortfolio(CreatePortfolioRequest request);
Task<CustomResultHolder<GetPortfolio>> UpdatePortfolio(string portfolioCode, UpdatePortfolioRequest request);

// Trust levels
Task<CustomResultHolder<PagedResult<GetTrustLevel>>> GetTrustLevels();

// Payment methods
Task<CustomResultHolder<PagedResult<PaymentMethodResponse>>> GetPaymentMethods(GetPaymentMethodsRequest? request = null);
Task<CustomResultHolder<PaymentMethodResponse>> GetPaymentMethod(string paymentMethodCode);
Task<CustomResultHolder<PagedResult<PaymentMethodCustomerFeeResponse>>> GetPaymentMethodCustomerFees(string paymentMethodCode, GetPaymentMethodCustomerFeesRequest? request = null);
Task<CustomResultHolder<PaymentMethodCustomerFeeResponse>> UpsertPaymentMethodCustomerFee(string paymentMethodCode, UpsertPaymentMethodCustomerFeeRequest request);
Task DeletePaymentMethodCustomerFee(string paymentMethodCode, string customerCode);
Task<CustomResultHolder<PagedResult<PaymentMethodTagFeeResponse>>> GetPaymentMethodTagFees(string paymentMethodCode);
Task<CustomResultHolder<PaymentMethodTagFeeResponse>> UpsertPaymentMethodTagFee(string paymentMethodCode, UpsertPaymentMethodTagFeeRequest request);
Task DeletePaymentMethodTagFee(string paymentMethodCode, string customerTag);

// Crypto addresses
Task<CustomResultHolder<PagedResult<GetCryptoAddressResponse>>> GetCryptoAddresses(GetCryptoAddressesRequest? request = null);

// Exchanges & trade pairs
Task<CustomResultHolder<PagedResult<ExchangeModel>>> GetExchanges(GetExchangesRequest? request = null);
Task<CustomResultHolder<PagedResult<TradePairItem>>> GetTradePairs(GetTradePairsRequest? request = null);

// Transfers
Task<CustomResultHolder<PagedResult<GetTransfer>>> GetTransfers(GetTransfersRequest? request = null);
Task<CustomResultHolder<GetTransfer>> CreateTransfer(CreateTransferRequest request);

// Orders
Task<CustomResultHolder<PagedResult<ListOrder>>> GetOrders(GetOrdersRequest? request = null);
Task<CustomResultHolder<ListOrder>> CreateOrder(CreateOrderRequest request);
Task DeleteOrder(string orderCode);

// Mails
Task<CustomResultHolder<PagedResult<GetMail>>> GetMails(Dictionary<string, string> queryParams);
Task<CustomResultHolder<GetMail>> GetMail(string mailCode);
Task<CustomResultHolder<GetMail>> CreateMail(PostMailRequest request);
Task<CustomResultHolder<GetMail>> UpdateMail(string mailCode, PutMailRequest request);

// Notifications
Task<CustomResultHolder<PagedResult<GetNotificationResponse>>> GetNotifications(GetNotificationsRequest? request = null);
Task CreateNotification(CreateNotificationRequest request);

// Callbacks
Task<CustomResultHolder<PagedResult<TransactionNotificationCallbackResponse>>> GetCallbacks(string transactionCode);

// Bank accounts
Task<CustomResultHolder<PagedResult<CustomerBankAccountResponse>>> GetCustomerBankAccounts(string customerCode, Dictionary<string, string> queryParams);
Task<CustomResultHolder<CustomerBankAccountResponse>> GetCustomerBankAccount(string customerCode, Guid bankAccountId);
Task<CustomResultHolder<CustomerBankAccountResponse>> CreateCustomerBankAccount(string customerCode, CreateBankAccountRequestModel request);
Task DeleteCustomerBankAccount(string customerCode, Guid bankAccountId);
Task<CustomResultHolder<CustomerBankAccountResponse>> UpdateCustomerBankAccount(string customerCode, Guid bankAccountId, UpdateBankAccountRequest request);

// Banks
Task<CustomResultHolder<PagedResult<BankModel>>> GetBanks(GetBanksRequest? request = null);
Task<CustomResultHolder<BankModel>> GetBank(Guid bankId);
Task<CustomResultHolder<BankModel>> CreateBank(CreateBankRequest request);
Task<CustomResultHolder<BankModel>> UpdateBank(Guid bankId, UpdateBankRequest request);
Task DeleteBank(Guid bankId);

// Chart prices
Task<IEnumerable<ChartSeriesModelPT>> GetMinutePrices(int timeSpan, string currencyCode, string cryptoCode);

// Customer limits
Task<CustomResultHolder<GetBrokerLimitResponse>> GetCustomerBuyLimit(GetCustomerLimitRequest request);
Task<CustomResultHolder<GetBrokerLimitResponse>> GetCustomerSellLimit(GetCustomerLimitRequest request);

// Customer comments
Task<CustomResultHolder<PagedResult<GetCommentsResponse>>> GetCustomerComments(string customerCode);
Task<CustomResultHolder<GetCommentsResponse>> AddCustomerComment(string customerCode, AddCommentRequest request);
Task<CustomResultHolder<GetCommentsResponse>> UpdateCustomerComment(string customerCode, Guid commentId, UpdateCommentRequest request);
Task DeleteCustomerComment(string customerCode, Guid commentId);
Task<CustomResultHolder<PagedResult<GetCommentHistoryResponse>>> GetCustomerCommentHistory(string customerCode, Guid commentId);

// Customer compliance history
Task<CustomResultHolder<PagedResult<GetCustomerComplianceHistoryResponse>>> GetCustomerComplianceHistory(string customerCode, GetCustomerComplianceHistoryRequest? request = null);

// Customer tags
Task<CustomResultHolder<PagedResult<CustomerTagResponse>>> GetCustomerTags(string customerCode);
Task<CustomResultHolder<CustomerTagResponse>> AddCustomerTag(string customerCode, CreateCustomerTagRequest request);
Task DeleteCustomerTag(string customerCode, string tag);

// Customer data
Task<CustomResultHolder<IDictionary<string, string>>> GetCustomerData(string customerCode);
Task<CustomResultHolder<IDictionary<string, string>>> UpsertCustomerData(string customerCode, UpsertCustomerDataRequest request);
Task DeleteCustomerDataKey(string customerCode, string key);
}

public interface INexusBrokerAPIService : INexusAPIService
{
// Broker transactions
Task<CustomResultHolder<GetTransaction>> GetBrokerTransaction(string txCode);
Task<CustomResultHolder<PagedResult<GetTransaction>>> GetBrokerTransactions(Dictionary<string, string> queryParams);
Task<CustomResultHolder<TotalsResult<TransactionTotals>>> GetBrokerTransactionTotals(Dictionary<string, string> queryParams);
Task<CustomResultHolder<GetTransaction>> UpdateBrokerTransaction(string txCode, UpdateBrokerTransactionRequest request);
Task<CustomResultHolder<GetTransaction>> ExecuteTransaction(ExecuteTransactionRequest request);
Task<CustomResultHolder<GetTransactionFlowResult>> GetTransactionFlow(string txCode);
Task<CustomResultHolder<IEnumerable<GetTransactionDataModel>>> GetTransactionData(string txCode);
Task<CustomResultHolder<GetTransactionDataModel>> PostTransactionData(string txCode, string key, PostTransactionDataModel request);

// Buy / Sell
Task<CustomResultHolder<BuyResponse>> Buy(BuyRequest request);
Task<CustomResultHolder<BuySimulateResponse>> SimulateBuy(BuySimulateRequest request);
Task<CustomResultHolder<SellResponse>> Sell(SellRequest request);
Task<CustomResultHolder<SellSimulateResponse>> SimulateSell(SellSimulateRequest request);

// Merchant
Task<CustomResultHolder<PagedResult<GetMerchantTransactionResponse>>> GetMerchantTransactions(GetMerchantTransactionsRequest? request = null);
Task<CustomResultHolder<GetMerchantTransactionResponse>> GetMerchantTransaction(string txCode);
Task<CustomResultHolder<GetMerchantTransactionResponse>> CreateMerchantTransaction(CreateMerchantTransactionRequest request);
Task<CustomResultHolder<GetMerchantTransactionResponse>> UpdateMerchantTransaction(string txCode, UpdateMerchantTransactionRequest request);
Task<CustomResultHolder<SimulateMerchantTransactionResponse>> SimulateMerchantTransaction(CreateMerchantTransactionRequest request);
}

public interface INexusCustodianAPIService : INexusAPIService
{
// Custodian transactions
Task<CustomResultHolder<ListCustodianTransactionResponse>> GetCustodianTransaction(string txCode);
Task<CustomResultHolder<PagedResult<ListCustodianTransactionResponse>>> GetCustodianTransactions(GetCustodianTransactionsRequest? request = null);
Task<CustomResultHolder<CustodianCancelResponse>> CancelCustodianTransaction(string txCode);
}

// Custodian transaction types
Task<CustomResultHolder<CustodianBuyResponse>> CustodianBuy(CustodianBuyRequest request);
Task<CustomResultHolder<CustodianSellResponse>> CustodianSell(CustodianSellRequest request);
Task<CustomResultHolder<CustodianGiftResponse>> CustodianGift(CustodianGiftRequest request);
Task<CustomResultHolder<CustodianClawbackResponse>> CustodianClawback(CustodianClawbackRequest request);
Task<CustomResultHolder<CustodianSendInternalResponse>> CustodianSendInternal(CustodianSendInternalRequest request);
Task<CustomResultHolder<CustodianSendOutResponse>> CustodianSendOut(CustodianSendOutRequest request);
Task<CustomResultHolder<CustodianSendOutResponse>> CustodianSendToBucket(CustodianSendToBucketRequest request);
Task<CustomResultHolder<CustodianSwapResponse>> CustodianSwap(CustodianSwapRequest request);
Task<CustomResultHolder<CustodianSwapSimulationResponse>> SimulateCustodianSwap(CustodianSwapSimulateRequest request);
Task<CustomResultHolder<CustodianPaymentRequestResponse>> CustodianPaymentRequest(CustodianPaymentRequest request);

// Custodian callbacks
Task<CustomResultHolder<PagedResult<CustodianTransactionNotificationCallbackResponse>>> GetCustodianCallbacks(string txCode);

// Interest schedules
Task<CustomResultHolder<PagedResult<GetScheduleResponse>>> GetInterestSchedules(GetSchedulesRequest? request = null);
Task<CustomResultHolder<GetScheduleWithIntervalsResponse>> GetInterestSchedule(Guid scheduleId);
Task<CustomResultHolder<GetScheduleResponse>> CreateInterestSchedule(CreateCustodianScheduleRequest request);
Task<CustomResultHolder<GetScheduleResponse>> UpdateInterestSchedule(Guid scheduleId, EditCustodianScheduleRequest request);
Task DeleteInterestSchedule(Guid scheduleId);
Task<CustomResultHolder<GetScheduleIntervalResponse>> GetInterestScheduleInterval(Guid scheduleId, GetScheduleIntervalsRequest? request = null);
Task<CustomResultHolder<GetScheduleSubIntervalResponse>> UpdateInterestScheduleSubInterval(Guid scheduleId, Guid intervalId, Guid subIntervalId, EditCustodianSubIntervalRequest request);
}
187 changes: 187 additions & 0 deletions src/Nexus.Crypto.SDK/Models/Account/AccountModels.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
namespace Nexus.Crypto.SDK.Models.Account;

public class GetAccountResponse
{
/// <summary>
/// GUID to use in case AccountCode is missing.
/// </summary>
public string? Guid { get; set; }

/// <summary>
/// Unique identifier of the Account.
/// </summary>
public string? AccountCode { get; set; }

/// <summary>
/// Customer unique identifier.
/// </summary>
public string? CustomerCode { get; set; }

/// <summary>
/// Timestamp of creation of the Account
/// </summary>
public string? Created { get; set; }

/// <summary>
/// Timestamp of activation of the Account
/// </summary>
public string? Activated { get; set; }

/// <summary>
/// Address in Nexus to receive cryptocurrency.
/// </summary>
public string? DcReceiveAddress { get; set; }

/// <summary>
/// Address of the Customer to send cryptocurrency, or user supplied address to send and receive Tokens.
/// </summary>
public string? CustomerCryptoAddress { get; set; }

/// <summary>
/// Cryptocurrency identifier.
/// </summary>
public string? DcCode { get; set; }

/// <summary>
/// Status of the account: New | Invalid | Valid | Active | Deleted
/// </summary>
public string? AccountStatus { get; set; }

/// <summary>
/// Type of the account: Custodian | Broker | Token
/// </summary>
public string? AccountType { get; set; }

/// <summary>
/// The bucket this account is connected to.
/// </summary>
public string? BucketCode { get; set; }

/// <summary>
/// Wallet service provider information.
/// </summary>
public AccountProvider? Provider { get; set; }
}

public class AccountProvider
{
/// <summary>
/// Provider type: Undefined | CustodianSeparateAddress | CustodianOmnibus | SelfHosted
/// </summary>
public string? Type { get; set; }

/// <summary>
/// Name of the custodian or wallet app provider.
/// </summary>
public string? Name { get; set; }
}

public class CreateAccountRequest
{
/// <summary>
/// Type of the new account: Broker | BrokerBuyOnly | Custodian
/// </summary>
public string? AccountType { get; set; }

/// <summary>
/// Crypto address of the new account.
/// </summary>
public string? CustomerCryptoAddress { get; set; }

/// <summary>
/// Optional code in case the cryptocurrency cannot be automatically determined.
/// </summary>
public string? DcCode { get; set; }

/// <summary>
/// Cryptocurrency code of the account.
/// </summary>
public string? CryptoCode { get; set; }

/// <summary>
/// Optional account code used only for the creation of non-native accounts.
/// </summary>
public string? NativeAccountCode { get; set; }

/// <summary>
/// IP of the customer (deprecated; use customer_ip_address header instead).
/// </summary>
public string? Ip { get; set; }

/// <summary>
/// Connect this account to a bucket.
/// </summary>
public string? BucketCode { get; set; }

/// <summary>
/// Settings required for creating a custodian based account.
/// </summary>
public CustodianSettingsRequest? CustodianSettings { get; set; }

/// <summary>
/// Wallet service provider information.
/// </summary>
public AccountProvider? Provider { get; set; }
}

public class CustodianSettingsRequest
{
/// <summary>
/// If true, Nexus will generate a receive address for this account.
/// </summary>
public bool GenerateReceiveAddress { get; set; }

public bool GenerateUniqueReceiveAddress { get; set; }
}

public class CreateAccountResponse
{
public string? Guid { get; set; }
public string? AccountCode { get; set; }
public string? CustomerCode { get; set; }
public string? Created { get; set; }
public string? Activated { get; set; }
public string? DcReceiveAddress { get; set; }
public string? CustomerCryptoAddress { get; set; }
public string? DcCode { get; set; }
public string? AccountStatus { get; set; }
public string? AccountType { get; set; }
public string? BucketCode { get; set; }
public AccountProvider? Provider { get; set; }
}

public class UpdateAccountRequest
{
/// <summary>
/// Wallet service provider information.
/// </summary>
public AccountProvider? Provider { get; set; }
}

public class CreateNonNativeAccountRequest
{
/// <summary>
/// This account will be used as native account.
/// </summary>
public string? AccountCode { get; set; }

/// <summary>
/// Crypto address of the new account.
/// </summary>
public string? CustomerCryptoAddress { get; set; }

/// <summary>
/// Cryptocurrency code of the account.
/// </summary>
public string? CryptoCode { get; set; }

/// <summary>
/// Connect this account to a bucket.
/// </summary>
public string? BucketCode { get; set; }

/// <summary>
/// Wallet service provider information.
/// </summary>
public AccountProvider? Provider { get; set; }
}
Loading
Loading