Skip to content

Commit

Permalink
make an interface for the api so that clients/servers can implement it
Browse files Browse the repository at this point in the history
  • Loading branch information
Kukks committed Jun 6, 2024
1 parent 6c039a8 commit 8d66ee8
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 17 deletions.
49 changes: 32 additions & 17 deletions DotNut/Api/CashuHttpClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

namespace DotNut.Api;

public class CashuHttpClient
public class CashuHttpClient : ICashuApi
{
private readonly HttpClient _httpClient;

Expand Down Expand Up @@ -35,52 +35,67 @@ public async Task<GetKeysetsResponse> GetKeys(KeysetId keysetId, CancellationTok
var response = await _httpClient.GetAsync($"v1/keys/{keysetId}", cancellationToken);
return await HandleResponse<GetKeysetsResponse>(response, cancellationToken);
}

public async Task<PostSwapResponse> Swap(PostSwapRequest request, CancellationToken cancellationToken = default)

{
var response = await _httpClient.PostAsync($"v1/swap", new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
var response = await _httpClient.PostAsync($"v1/swap",
new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
return await HandleResponse<PostSwapResponse>(response, cancellationToken);
}

public async Task<TResponse> CreateMintQuote<TResponse, TRequest>(string method, TRequest request, CancellationToken
cancellationToken = default)
{
var response = await _httpClient.PostAsync($"v1/mint/quote/{method}", new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
var response = await _httpClient.PostAsync($"v1/mint/quote/{method}",
new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
return await HandleResponse<TResponse>(response, cancellationToken);
}
public async Task<TResponse> CreateMeltQuote<TResponse, TRequest>(string method, TRequest request, CancellationToken

public async Task<TResponse> CreateMeltQuote<TResponse, TRequest>(string method, TRequest request, CancellationToken
cancellationToken = default)
{
var response = await _httpClient.PostAsync($"v1/melt/quote/{method}", new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
var response = await _httpClient.PostAsync($"v1/melt/quote/{method}",
new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
return await HandleResponse<TResponse>(response, cancellationToken);
}
public async Task<TResponse> Melt<TResponse, TRequest>(string method, TRequest request, CancellationToken

public async Task<TResponse> Melt<TResponse, TRequest>(string method, TRequest request, CancellationToken
cancellationToken = default)
{
var response = await _httpClient.PostAsync($"v1/melt/{method}", new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
var response = await _httpClient.PostAsync($"v1/melt/{method}",
new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
return await HandleResponse<TResponse>(response, cancellationToken);
}

public async Task<TResponse> CheckMintQuote<TResponse>(string method, string quoteId, CancellationToken
cancellationToken = default)
{
var response = await _httpClient.GetAsync($"v1/mint/quote/{method}/{quoteId}", cancellationToken);
return await HandleResponse<TResponse>(response, cancellationToken);
}

public async Task<TResponse> Mint<TRequest,TResponse>(string method, TRequest request, CancellationToken cancellationToken = default)
}

public async Task<TResponse> Mint<TRequest, TResponse>(string method, TRequest request,
CancellationToken cancellationToken = default)
{
var response = await _httpClient.PostAsync($"v1/mint/{method}", new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
var response = await _httpClient.PostAsync($"v1/mint/{method}",
new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
return await HandleResponse<TResponse>(response, cancellationToken);
}
public async Task<PostCheckStateResponse> CheckState(PostCheckStateRequest request, CancellationToken cancellationToken = default)

public async Task<PostCheckStateResponse> CheckState(PostCheckStateRequest request,
CancellationToken cancellationToken = default)
{
var response = await _httpClient.PostAsync($"v1/checkstate", new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
var response = await _httpClient.PostAsync($"v1/checkstate",
new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
return await HandleResponse<PostCheckStateResponse>(response, cancellationToken);
}
public async Task<PostRestoreResponse> Restore(PostRestoreRequest request, CancellationToken cancellationToken = default)

public async Task<PostRestoreResponse> Restore(PostRestoreRequest request,
CancellationToken cancellationToken = default)
{
var response = await _httpClient.PostAsync($"v1/restore", new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
var response = await _httpClient.PostAsync($"v1/restore",
new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cancellationToken);
return await HandleResponse<PostRestoreResponse>(response, cancellationToken);
}

Expand Down
27 changes: 27 additions & 0 deletions DotNut/Api/ICashuApi.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using DotNut.ApiModels;

namespace DotNut.Api;

public interface ICashuApi
{
Task<GetKeysResponse> GetKeys(CancellationToken cancellationToken = default);
Task<GetKeysetsResponse> GetKeys(KeysetId keysetId, CancellationToken cancellationToken = default);
Task<GetKeysetsResponse> GetKeysets(CancellationToken cancellationToken = default);
Task<PostSwapResponse> Swap(PostSwapRequest request, CancellationToken cancellationToken = default);

Task<TResponse> CreateMintQuote<TResponse, TRequest>(string method, TRequest request, CancellationToken
cancellationToken = default);

Task<TResponse> CreateMeltQuote<TResponse, TRequest>(string method, TRequest request, CancellationToken
cancellationToken = default);

Task<TResponse> Melt<TResponse, TRequest>(string method, TRequest request, CancellationToken
cancellationToken = default);

Task<TResponse> CheckMintQuote<TResponse>(string method, string quoteId, CancellationToken
cancellationToken = default);

Task<TResponse> Mint<TRequest,TResponse>(string method, TRequest request, CancellationToken cancellationToken = default);
Task<PostCheckStateResponse> CheckState(PostCheckStateRequest request, CancellationToken cancellationToken = default);
Task<PostRestoreResponse> Restore(PostRestoreRequest request, CancellationToken cancellationToken = default);
}

0 comments on commit 8d66ee8

Please sign in to comment.