response) {
+ String message =
+ formatExceptionMessage(operationId, response.statusCode(), response.body());
+ return new ApiException(
+ response.statusCode(), message, response.headers(), response.body());
+ }
+
+ /**
+ * Normalizes any failure raised while performing the call into the single failure type callers
+ * are told to expect. Transport-level errors surfaced by {@code HttpClient.sendAsync} -
+ * connection refused, DNS failures, TLS errors, timeouts - would otherwise reach the caller as
+ * a raw {@link java.io.IOException}, which makes the documented {@code (ApiException)
+ * e.getCause()} throw {@link ClassCastException}.
+ *
+ * {@link CancellationException} is passed through unchanged: a cancelled call is not an API
+ * failure.
+ */
+ private static Throwable toApiFailure(Throwable throwable) {
+ Throwable cause = throwable;
+ while ((cause instanceof CompletionException || cause instanceof ExecutionException)
+ && cause.getCause() != null) {
+ cause = cause.getCause();
+ }
+ if (cause instanceof ApiException || cause instanceof CancellationException) {
+ return cause;
+ }
+ return new ApiException(cause);
+ }
+
+ private String formatExceptionMessage(String operationId, int statusCode, String body) {
+ if (body == null || body.isEmpty()) {
+ body = "[no body]";
+ }
+ return operationId + " call failed with: " + statusCode + " - " + body;
+ }
+
+ /**
+ * Make a Canton call Submits a Canton call from a vault account's Canton wallet.
+ * `type` selects the call and the shape of `payload`.
+ *
+ * @param cantonCall (required)
+ * @param idempotencyKey A unique identifier for the request. If the request is sent multiple
+ * times with the same idempotency key, the server will return the same response as the
+ * first request. The idempotency key is valid for 24 hours. (optional)
+ * @return CompletableFuture<ApiResponse<CallAccepted>>, which completes
+ * exceptionally with an {@link ApiException} if the API call fails
+ */
+ public CompletableFuture> createCantonCall(
+ CantonCall cantonCall, String idempotencyKey) {
+ try {
+ HttpRequest.Builder localVarRequestBuilder =
+ createCantonCallRequestBuilder(cantonCall, idempotencyKey);
+ return memberVarHttpClient
+ .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString())
+ .thenComposeAsync(
+ localVarResponse -> {
+ if (memberVarAsyncResponseInterceptor != null) {
+ memberVarAsyncResponseInterceptor.accept(localVarResponse);
+ }
+ // Ahead of the status check, which fails the future: the lifecycle
+ // header
+ // is present on allowed error responses too.
+ LifecycleWarning.warn(
+ localVarResponse.headers(),
+ "createCantonCall",
+ localVarResponse.statusCode());
+ if (localVarResponse.statusCode() / 100 != 2) {
+ return CompletableFuture.failedFuture(
+ getApiException("createCantonCall", localVarResponse));
+ }
+ try {
+ String responseBody = localVarResponse.body();
+ return CompletableFuture.completedFuture(
+ new ApiResponse(
+ localVarResponse.statusCode(),
+ localVarResponse.headers().map(),
+ responseBody == null || responseBody.isBlank()
+ ? null
+ : memberVarObjectMapper.readValue(
+ responseBody,
+ new TypeReference<
+ CallAccepted>() {})));
+ } catch (IOException e) {
+ return CompletableFuture.failedFuture(new ApiException(e));
+ }
+ })
+ .handle(
+ (localVarApiResponse, localVarThrowable) ->
+ localVarThrowable == null
+ ? CompletableFuture.completedFuture(localVarApiResponse)
+ : CompletableFuture
+ .>failedFuture(
+ toApiFailure(localVarThrowable)))
+ .thenCompose(localVarNormalized -> localVarNormalized);
+ } catch (ApiException e) {
+ return CompletableFuture.failedFuture(e);
+ }
+ }
+
+ private HttpRequest.Builder createCantonCallRequestBuilder(
+ CantonCall cantonCall, String idempotencyKey) throws ApiException {
+ ValidationUtils.assertParamExists("createCantonCall", "cantonCall", cantonCall);
+
+ HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
+
+ String localVarPath = "/operations/canton/calls";
+
+ localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
+
+ if (idempotencyKey != null) {
+ localVarRequestBuilder.header("Idempotency-Key", idempotencyKey.toString());
+ }
+ localVarRequestBuilder.header("Content-Type", "application/json");
+ localVarRequestBuilder.header("Accept", "application/json");
+
+ try {
+ byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(cantonCall);
+ localVarRequestBuilder.method(
+ "POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody));
+ } catch (IOException e) {
+ throw new ApiException(e);
+ }
+ if (memberVarReadTimeout != null) {
+ localVarRequestBuilder.timeout(memberVarReadTimeout);
+ }
+ if (memberVarInterceptor != null) {
+ memberVarInterceptor.accept(localVarRequestBuilder);
+ }
+ return localVarRequestBuilder;
+ }
+ /**
+ * Answer an offer Responds to an incoming Canton offer. Set `responseType` to one of
+ * the values in the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`.
+ *
+ * @param offerResponse (required)
+ * @param offerId The Fireblocks transaction id of the incoming offer being answered. (required)
+ * @param idempotencyKey A unique identifier for the request. If the request is sent multiple
+ * times with the same idempotency key, the server will return the same response as the
+ * first request. The idempotency key is valid for 24 hours. (optional)
+ * @return CompletableFuture<ApiResponse<OfferResponseAccepted>>, which completes
+ * exceptionally with an {@link ApiException} if the API call fails
+ */
+ public CompletableFuture> respondToCantonOffer(
+ OfferResponse offerResponse, String offerId, String idempotencyKey) {
+ try {
+ HttpRequest.Builder localVarRequestBuilder =
+ respondToCantonOfferRequestBuilder(offerResponse, offerId, idempotencyKey);
+ return memberVarHttpClient
+ .sendAsync(localVarRequestBuilder.build(), HttpResponse.BodyHandlers.ofString())
+ .thenComposeAsync(
+ localVarResponse -> {
+ if (memberVarAsyncResponseInterceptor != null) {
+ memberVarAsyncResponseInterceptor.accept(localVarResponse);
+ }
+ // Ahead of the status check, which fails the future: the lifecycle
+ // header
+ // is present on allowed error responses too.
+ LifecycleWarning.warn(
+ localVarResponse.headers(),
+ "respondToCantonOffer",
+ localVarResponse.statusCode());
+ if (localVarResponse.statusCode() / 100 != 2) {
+ return CompletableFuture.failedFuture(
+ getApiException(
+ "respondToCantonOffer", localVarResponse));
+ }
+ try {
+ String responseBody = localVarResponse.body();
+ return CompletableFuture.completedFuture(
+ new ApiResponse(
+ localVarResponse.statusCode(),
+ localVarResponse.headers().map(),
+ responseBody == null || responseBody.isBlank()
+ ? null
+ : memberVarObjectMapper.readValue(
+ responseBody,
+ new TypeReference<
+ OfferResponseAccepted>() {})));
+ } catch (IOException e) {
+ return CompletableFuture.failedFuture(new ApiException(e));
+ }
+ })
+ .handle(
+ (localVarApiResponse, localVarThrowable) ->
+ localVarThrowable == null
+ ? CompletableFuture.completedFuture(localVarApiResponse)
+ : CompletableFuture
+ .>
+ failedFuture(
+ toApiFailure(
+ localVarThrowable)))
+ .thenCompose(localVarNormalized -> localVarNormalized);
+ } catch (ApiException e) {
+ return CompletableFuture.failedFuture(e);
+ }
+ }
+
+ private HttpRequest.Builder respondToCantonOfferRequestBuilder(
+ OfferResponse offerResponse, String offerId, String idempotencyKey)
+ throws ApiException {
+ ValidationUtils.assertParamExists("respondToCantonOffer", "offerResponse", offerResponse);
+ ValidationUtils.assertParamExistsAndNotEmpty("respondToCantonOffer", "offerId", offerId);
+
+ HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
+
+ String localVarPath =
+ "/operations/canton/offers/{offerId}/responses"
+ .replace("{offerId}", ApiClient.urlEncode(offerId.toString()));
+
+ localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
+
+ if (idempotencyKey != null) {
+ localVarRequestBuilder.header("Idempotency-Key", idempotencyKey.toString());
+ }
+ localVarRequestBuilder.header("Content-Type", "application/json");
+ localVarRequestBuilder.header("Accept", "application/json");
+
+ try {
+ byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(offerResponse);
+ localVarRequestBuilder.method(
+ "POST", HttpRequest.BodyPublishers.ofByteArray(localVarPostBody));
+ } catch (IOException e) {
+ throw new ApiException(e);
+ }
+ if (memberVarReadTimeout != null) {
+ localVarRequestBuilder.timeout(memberVarReadTimeout);
+ }
+ if (memberVarInterceptor != null) {
+ memberVarInterceptor.accept(localVarRequestBuilder);
+ }
+ return localVarRequestBuilder;
+ }
+}
diff --git a/src/main/java/com/fireblocks/sdk/api/WebhooksV2Api.java b/src/main/java/com/fireblocks/sdk/api/WebhooksV2Api.java
index f9d81a69..52192415 100644
--- a/src/main/java/com/fireblocks/sdk/api/WebhooksV2Api.java
+++ b/src/main/java/com/fireblocks/sdk/api/WebhooksV2Api.java
@@ -841,7 +841,8 @@ private HttpRequest.Builder getMetricsRequestBuilder(UUID webhookId, String metr
* and the same CSR is returned on subsequent requests for that type. Pass
* `keyAlgorithm` to choose RSA or ECDSA. A workspace may hold one key of each: the
* CSR returned is always the one for the type requested, so a certificate signed against it
- * matches the key used at delivery time.
+ * matches the key used at delivery time. **Endpoint Permissions:** Owner, Admin, Non-Signing
+ * Admin.
*
* @param keyAlgorithm Algorithm of the private key the CSR is generated for. ECDSA keys are
* smaller and quicker to issue, but the certificate authority signing the request has to
diff --git a/src/main/java/com/fireblocks/sdk/model/EndInvestorPayload.java b/src/main/java/com/fireblocks/sdk/model/EndInvestorPayload.java
index 174ae9e1..652effd7 100644
--- a/src/main/java/com/fireblocks/sdk/model/EndInvestorPayload.java
+++ b/src/main/java/com/fireblocks/sdk/model/EndInvestorPayload.java
@@ -21,7 +21,7 @@
import java.util.Objects;
import java.util.StringJoiner;
-/** Shared by invite / invite-cancel / offboard — identical wire shape, different verb. */
+/** The end investor a call acts on. */
@JsonPropertyOrder({EndInvestorPayload.JSON_PROPERTY_END_INVESTOR})
@jakarta.annotation.Generated(
value = "org.openapitools.codegen.languages.JavaClientCodegen",
diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocationAccept.java b/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocationAccept.java
index ca3aa098..1609b009 100644
--- a/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocationAccept.java
+++ b/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocationAccept.java
@@ -29,14 +29,10 @@
comments = "Generator version: 7.14.0")
public class OfferResponseAllocationAccept {
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*/
public enum ResponseTypeEnum {
ALLOCATION_ACCEPT(String.valueOf("ALLOCATION_ACCEPT"));
@@ -87,14 +83,10 @@ public OfferResponseAllocationAccept responseType(
}
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*
* @return responseType
*/
diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocationReject.java b/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocationReject.java
index e80c9553..ece6bcda 100644
--- a/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocationReject.java
+++ b/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocationReject.java
@@ -29,14 +29,10 @@
comments = "Generator version: 7.14.0")
public class OfferResponseAllocationReject {
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*/
public enum ResponseTypeEnum {
ALLOCATION_REJECT(String.valueOf("ALLOCATION_REJECT"));
@@ -87,14 +83,10 @@ public OfferResponseAllocationReject responseType(
}
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*
* @return responseType
*/
diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocationWithdraw.java b/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocationWithdraw.java
index c23e84a4..bb649606 100644
--- a/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocationWithdraw.java
+++ b/src/main/java/com/fireblocks/sdk/model/OfferResponseAllocationWithdraw.java
@@ -33,14 +33,10 @@
comments = "Generator version: 7.14.0")
public class OfferResponseAllocationWithdraw {
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*/
public enum ResponseTypeEnum {
ALLOCATION_WITHDRAW(String.valueOf("ALLOCATION_WITHDRAW"));
@@ -91,14 +87,10 @@ public OfferResponseAllocationWithdraw responseType(
}
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*
* @return responseType
*/
diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponseDtccOnboardingAccept.java b/src/main/java/com/fireblocks/sdk/model/OfferResponseDtccOnboardingAccept.java
index 1ef52554..f3a3cf59 100644
--- a/src/main/java/com/fireblocks/sdk/model/OfferResponseDtccOnboardingAccept.java
+++ b/src/main/java/com/fireblocks/sdk/model/OfferResponseDtccOnboardingAccept.java
@@ -29,14 +29,10 @@
comments = "Generator version: 7.14.0")
public class OfferResponseDtccOnboardingAccept {
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*/
public enum ResponseTypeEnum {
DTCC_END_INVESTOR_ONBOARDING_ACCEPT(String.valueOf("DTCC_END_INVESTOR_ONBOARDING_ACCEPT"));
@@ -87,14 +83,10 @@ public OfferResponseDtccOnboardingAccept responseType(
}
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*
* @return responseType
*/
diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponseDtccOnboardingReject.java b/src/main/java/com/fireblocks/sdk/model/OfferResponseDtccOnboardingReject.java
index eabeb2e1..17a6c035 100644
--- a/src/main/java/com/fireblocks/sdk/model/OfferResponseDtccOnboardingReject.java
+++ b/src/main/java/com/fireblocks/sdk/model/OfferResponseDtccOnboardingReject.java
@@ -32,14 +32,10 @@
comments = "Generator version: 7.14.0")
public class OfferResponseDtccOnboardingReject {
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*/
public enum ResponseTypeEnum {
DTCC_END_INVESTOR_ONBOARDING_REJECT(String.valueOf("DTCC_END_INVESTOR_ONBOARDING_REJECT"));
@@ -96,14 +92,10 @@ public OfferResponseDtccOnboardingReject responseType(
}
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*
* @return responseType
*/
diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponseTradewebAccept.java b/src/main/java/com/fireblocks/sdk/model/OfferResponseTradewebAccept.java
index 7d363dfb..36ae873d 100644
--- a/src/main/java/com/fireblocks/sdk/model/OfferResponseTradewebAccept.java
+++ b/src/main/java/com/fireblocks/sdk/model/OfferResponseTradewebAccept.java
@@ -29,14 +29,10 @@
comments = "Generator version: 7.14.0")
public class OfferResponseTradewebAccept {
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*/
public enum ResponseTypeEnum {
TRADEWEB_COSIGNING_DELEGATION_ACCEPT(
@@ -88,14 +84,10 @@ public OfferResponseTradewebAccept responseType(
}
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*
* @return responseType
*/
diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponseTradewebReject.java b/src/main/java/com/fireblocks/sdk/model/OfferResponseTradewebReject.java
index 376c5db9..1dde59e8 100644
--- a/src/main/java/com/fireblocks/sdk/model/OfferResponseTradewebReject.java
+++ b/src/main/java/com/fireblocks/sdk/model/OfferResponseTradewebReject.java
@@ -23,8 +23,8 @@
import java.util.StringJoiner;
/**
- * Reject a Tradeweb co-signing delegation offer. Carries no arguments — the DAR has nowhere
- * on-ledger to record a reason, so none is accepted.
+ * Reject a Tradeweb co-signing delegation offer. Carries no arguments — Tradeweb does not record a
+ * reject reason on the ledger, so none is accepted.
*/
@JsonPropertyOrder({OfferResponseTradewebReject.JSON_PROPERTY_RESPONSE_TYPE})
@jakarta.annotation.Generated(
@@ -32,14 +32,10 @@
comments = "Generator version: 7.14.0")
public class OfferResponseTradewebReject {
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*/
public enum ResponseTypeEnum {
TRADEWEB_COSIGNING_DELEGATION_REJECT(
@@ -91,14 +87,10 @@ public OfferResponseTradewebReject responseType(
}
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*
* @return responseType
*/
diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponseTransferAccept.java b/src/main/java/com/fireblocks/sdk/model/OfferResponseTransferAccept.java
index 53e0ef05..8c228c0b 100644
--- a/src/main/java/com/fireblocks/sdk/model/OfferResponseTransferAccept.java
+++ b/src/main/java/com/fireblocks/sdk/model/OfferResponseTransferAccept.java
@@ -29,14 +29,10 @@
comments = "Generator version: 7.14.0")
public class OfferResponseTransferAccept {
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*/
public enum ResponseTypeEnum {
TRANSFER_ACCEPT(String.valueOf("TRANSFER_ACCEPT"));
@@ -87,14 +83,10 @@ public OfferResponseTransferAccept responseType(
}
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*
* @return responseType
*/
diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponseTransferReject.java b/src/main/java/com/fireblocks/sdk/model/OfferResponseTransferReject.java
index 291d46b9..4d6d69c2 100644
--- a/src/main/java/com/fireblocks/sdk/model/OfferResponseTransferReject.java
+++ b/src/main/java/com/fireblocks/sdk/model/OfferResponseTransferReject.java
@@ -29,14 +29,10 @@
comments = "Generator version: 7.14.0")
public class OfferResponseTransferReject {
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*/
public enum ResponseTypeEnum {
TRANSFER_REJECT(String.valueOf("TRANSFER_REJECT"));
@@ -87,14 +83,10 @@ public OfferResponseTransferReject responseType(
}
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*
* @return responseType
*/
diff --git a/src/main/java/com/fireblocks/sdk/model/OfferResponseTransferWithdraw.java b/src/main/java/com/fireblocks/sdk/model/OfferResponseTransferWithdraw.java
index b04e746b..1e3d9960 100644
--- a/src/main/java/com/fireblocks/sdk/model/OfferResponseTransferWithdraw.java
+++ b/src/main/java/com/fireblocks/sdk/model/OfferResponseTransferWithdraw.java
@@ -23,9 +23,8 @@
import java.util.StringJoiner;
/**
- * Withdraw your own OUTGOING transfer offer. Carries no arguments — `offerId` in the path
- * is the offer, so the vault account and blockchain are resolved from it rather than restated. Was
- * `CantonCallType.TRANSFER_WITHDRAW` with a 3-field payload until FA-10624.
+ * Withdraw your own outgoing transfer offer. Carries no arguments — `offerId` in the path
+ * identifies the offer, and the vault account and blockchain are resolved from it.
*/
@JsonPropertyOrder({OfferResponseTransferWithdraw.JSON_PROPERTY_RESPONSE_TYPE})
@jakarta.annotation.Generated(
@@ -33,14 +32,10 @@
comments = "Generator version: 7.14.0")
public class OfferResponseTransferWithdraw {
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*/
public enum ResponseTypeEnum {
TRANSFER_WITHDRAW(String.valueOf("TRANSFER_WITHDRAW"));
@@ -91,14 +86,10 @@ public OfferResponseTransferWithdraw responseType(
}
/**
- * How you are answering the offer. Must be one of the values listed in the transaction's
- * `cantonDetails.offerResponse.availableResponses` — TOP-LEVEL on the transaction,
- * not nested under an `additionalInfo` envelope, which does not exist on
- * `TransactionResponse`. `availableResponses` states what this offer TYPE
- * accepts. It is set when the offer arrives and does not change, so it does NOT tell you
- * whether the offer is still answerable — check `expiresAt` and the transaction's
- * status for that, and expect this endpoint to be the authority: it re-checks state and expiry
- * on every call and answers 409 when either has moved.
+ * How you are answering the offer — one of the offer transaction's
+ * `cantonDetails.offerResponse.availableResponses`. That list does not change after
+ * the offer arrives; check `expiresAt` and the transaction status to see whether it
+ * is still answerable.
*
* @return responseType
*/
diff --git a/src/main/java/com/fireblocks/sdk/model/TrustProofOfAddressRequest.java b/src/main/java/com/fireblocks/sdk/model/TrustProofOfAddressRequest.java
index 90036b39..8c2de750 100644
--- a/src/main/java/com/fireblocks/sdk/model/TrustProofOfAddressRequest.java
+++ b/src/main/java/com/fireblocks/sdk/model/TrustProofOfAddressRequest.java
@@ -27,7 +27,8 @@
TrustProofOfAddressRequest.JSON_PROPERTY_VAULT_ACCOUNT_ID,
TrustProofOfAddressRequest.JSON_PROPERTY_ASSET,
TrustProofOfAddressRequest.JSON_PROPERTY_PREFIX,
- TrustProofOfAddressRequest.JSON_PROPERTY_TRUST_UUID
+ TrustProofOfAddressRequest.JSON_PROPERTY_TRUST_UUID,
+ TrustProofOfAddressRequest.JSON_PROPERTY_ADDRESS
})
@jakarta.annotation.Generated(
value = "org.openapitools.codegen.languages.JavaClientCodegen",
@@ -45,6 +46,9 @@ public class TrustProofOfAddressRequest {
public static final String JSON_PROPERTY_TRUST_UUID = "trustUuid";
@jakarta.annotation.Nonnull private UUID trustUuid;
+ public static final String JSON_PROPERTY_ADDRESS = "address";
+ @jakarta.annotation.Nullable private String address;
+
public TrustProofOfAddressRequest() {}
@JsonCreator
@@ -153,6 +157,32 @@ public void setTrustUuid(@jakarta.annotation.Nonnull UUID trustUuid) {
this.trustUuid = trustUuid;
}
+ public TrustProofOfAddressRequest address(@jakarta.annotation.Nullable String address) {
+ this.address = address;
+ return this;
+ }
+
+ /**
+ * Optional non-default (derived) address of the vault account to prove. Supported for UTXO
+ * assets only (`BTC`, `BTC_TEST`). The address must belong to the vault
+ * account for the given asset. Both SegWit and Legacy address forms are accepted. When omitted,
+ * the proof is created for the default (index 0) address of the vault account.
+ *
+ * @return address
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_ADDRESS)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public String getAddress() {
+ return address;
+ }
+
+ @JsonProperty(JSON_PROPERTY_ADDRESS)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public void setAddress(@jakarta.annotation.Nullable String address) {
+ this.address = address;
+ }
+
/** Return true if this TrustProofOfAddressRequest object is equal to o. */
@Override
public boolean equals(Object o) {
@@ -166,12 +196,13 @@ public boolean equals(Object o) {
return Objects.equals(this.vaultAccountId, trustProofOfAddressRequest.vaultAccountId)
&& Objects.equals(this.asset, trustProofOfAddressRequest.asset)
&& Objects.equals(this.prefix, trustProofOfAddressRequest.prefix)
- && Objects.equals(this.trustUuid, trustProofOfAddressRequest.trustUuid);
+ && Objects.equals(this.trustUuid, trustProofOfAddressRequest.trustUuid)
+ && Objects.equals(this.address, trustProofOfAddressRequest.address);
}
@Override
public int hashCode() {
- return Objects.hash(vaultAccountId, asset, prefix, trustUuid);
+ return Objects.hash(vaultAccountId, asset, prefix, trustUuid, address);
}
@Override
@@ -182,6 +213,7 @@ public String toString() {
sb.append(" asset: ").append(toIndentedString(asset)).append("\n");
sb.append(" prefix: ").append(toIndentedString(prefix)).append("\n");
sb.append(" trustUuid: ").append(toIndentedString(trustUuid)).append("\n");
+ sb.append(" address: ").append(toIndentedString(address)).append("\n");
sb.append("}");
return sb.toString();
}
@@ -269,6 +301,16 @@ public String toUrlQueryString(String prefix) {
ApiClient.urlEncode(ApiClient.valueToString(getTrustUuid()))));
}
+ // add `address` to the URL query string
+ if (getAddress() != null) {
+ joiner.add(
+ String.format(
+ "%saddress%s=%s",
+ prefix,
+ suffix,
+ ApiClient.urlEncode(ApiClient.valueToString(getAddress()))));
+ }
+
return joiner.toString();
}
}
diff --git a/src/main/java/com/fireblocks/sdk/model/TrustProofOfAddressResponse.java b/src/main/java/com/fireblocks/sdk/model/TrustProofOfAddressResponse.java
index e5bc21b2..c84332fc 100644
--- a/src/main/java/com/fireblocks/sdk/model/TrustProofOfAddressResponse.java
+++ b/src/main/java/com/fireblocks/sdk/model/TrustProofOfAddressResponse.java
@@ -26,7 +26,8 @@
@JsonPropertyOrder({
TrustProofOfAddressResponse.JSON_PROPERTY_TRANSACTION_ID,
TrustProofOfAddressResponse.JSON_PROPERTY_STATUS,
- TrustProofOfAddressResponse.JSON_PROPERTY_SIGNATURE
+ TrustProofOfAddressResponse.JSON_PROPERTY_SIGNATURE,
+ TrustProofOfAddressResponse.JSON_PROPERTY_PUBLIC_KEY
})
@jakarta.annotation.Generated(
value = "org.openapitools.codegen.languages.JavaClientCodegen",
@@ -41,6 +42,9 @@ public class TrustProofOfAddressResponse {
public static final String JSON_PROPERTY_SIGNATURE = "signature";
@jakarta.annotation.Nonnull private String signature;
+ public static final String JSON_PROPERTY_PUBLIC_KEY = "publicKey";
+ @jakarta.annotation.Nullable private String publicKey;
+
public TrustProofOfAddressResponse() {}
@JsonCreator
@@ -125,6 +129,32 @@ public void setSignature(@jakarta.annotation.Nonnull String signature) {
this.signature = signature;
}
+ public TrustProofOfAddressResponse publicKey(@jakarta.annotation.Nullable String publicKey) {
+ this.publicKey = publicKey;
+ return this;
+ }
+
+ /**
+ * Hex public key of the Fireblocks vault key that produced the signature. Present only when
+ * `status` is `SIGNED` or `COMPLETED`, and only if Fireblocks
+ * returned it. TRUST requires this key for SUI, TON and XTZ (as
+ * `auxProofData.encryptedPublicKey`).
+ *
+ * @return publicKey
+ */
+ @jakarta.annotation.Nullable
+ @JsonProperty(JSON_PROPERTY_PUBLIC_KEY)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public String getPublicKey() {
+ return publicKey;
+ }
+
+ @JsonProperty(JSON_PROPERTY_PUBLIC_KEY)
+ @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+ public void setPublicKey(@jakarta.annotation.Nullable String publicKey) {
+ this.publicKey = publicKey;
+ }
+
/** Return true if this TrustProofOfAddressResponse object is equal to o. */
@Override
public boolean equals(Object o) {
@@ -137,12 +167,13 @@ public boolean equals(Object o) {
TrustProofOfAddressResponse trustProofOfAddressResponse = (TrustProofOfAddressResponse) o;
return Objects.equals(this.transactionId, trustProofOfAddressResponse.transactionId)
&& Objects.equals(this.status, trustProofOfAddressResponse.status)
- && Objects.equals(this.signature, trustProofOfAddressResponse.signature);
+ && Objects.equals(this.signature, trustProofOfAddressResponse.signature)
+ && Objects.equals(this.publicKey, trustProofOfAddressResponse.publicKey);
}
@Override
public int hashCode() {
- return Objects.hash(transactionId, status, signature);
+ return Objects.hash(transactionId, status, signature, publicKey);
}
@Override
@@ -152,6 +183,7 @@ public String toString() {
sb.append(" transactionId: ").append(toIndentedString(transactionId)).append("\n");
sb.append(" status: ").append(toIndentedString(status)).append("\n");
sb.append(" signature: ").append(toIndentedString(signature)).append("\n");
+ sb.append(" publicKey: ").append(toIndentedString(publicKey)).append("\n");
sb.append("}");
return sb.toString();
}
@@ -229,6 +261,16 @@ public String toUrlQueryString(String prefix) {
ApiClient.urlEncode(ApiClient.valueToString(getSignature()))));
}
+ // add `publicKey` to the URL query string
+ if (getPublicKey() != null) {
+ joiner.add(
+ String.format(
+ "%spublicKey%s=%s",
+ prefix,
+ suffix,
+ ApiClient.urlEncode(ApiClient.valueToString(getPublicKey()))));
+ }
+
return joiner.toString();
}
}
diff --git a/src/test/java/com/fireblocks/sdk/FireblocksTest.java b/src/test/java/com/fireblocks/sdk/FireblocksTest.java
index 3a35aef2..e2a4db7c 100644
--- a/src/test/java/com/fireblocks/sdk/FireblocksTest.java
+++ b/src/test/java/com/fireblocks/sdk/FireblocksTest.java
@@ -395,6 +395,14 @@ public void testGetBlockchainsAssetsApi() {
Assert.assertSame(blockchainsAssets, fireblocks.blockchainsAssets());
}
+ @Test
+ public void testGetCantonBetaApi() {
+ setupFireblocks(true, null, null);
+ CantonBetaApi cantonBeta = fireblocks.cantonBeta();
+ Assert.assertNotNull(cantonBeta);
+ Assert.assertSame(cantonBeta, fireblocks.cantonBeta());
+ }
+
@Test
public void testGetComplianceApi() {
setupFireblocks(true, null, null);
diff --git a/src/test/java/com/fireblocks/sdk/api/ApiUserApiTest.java b/src/test/java/com/fireblocks/sdk/api/ApiUserApiTest.java
index 22871268..9e18d8fa 100644
--- a/src/test/java/com/fireblocks/sdk/api/ApiUserApiTest.java
+++ b/src/test/java/com/fireblocks/sdk/api/ApiUserApiTest.java
@@ -61,8 +61,10 @@ public void getApiUsersTest() {
* Issues a device pairing token for the given user and returns the user's info along
* with the token. - The API user must be in PENDING_ACTIVATION status. If the user is already
* set up (enabled), the request is rejected with a 409 Conflict. - Please note that this
- * endpoint is available only for API keys with Owner/Admin/Non Signing Admin permissions.
- * Endpoint Permission: Owner, Admin, Non-Signing Admin.
+ * endpoint is available only for API keys with Owner/Admin/Non Signing Admin permissions. -
+ * This is the same pairing token that the API Co-signer requests during installation and when
+ * you pair an additional API user with an existing Co-signer. You can use this endpoint instead
+ * of copying the token from Pair API user in the Console. The token is valid for one hour.
*/
@Test
public void issueApiUserPairingTokenTest() {
diff --git a/src/test/java/com/fireblocks/sdk/api/CantonBetaApiTest.java b/src/test/java/com/fireblocks/sdk/api/CantonBetaApiTest.java
new file mode 100644
index 00000000..e21b3e5b
--- /dev/null
+++ b/src/test/java/com/fireblocks/sdk/api/CantonBetaApiTest.java
@@ -0,0 +1,59 @@
+/*
+ * Fireblocks API
+ * Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com)
+ *
+ * The version of the OpenAPI document: 1.6.2
+ * Contact: developers@fireblocks.com
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+package com.fireblocks.sdk.api;
+
+
+import com.fireblocks.sdk.ApiResponse;
+import com.fireblocks.sdk.model.CallAccepted;
+import com.fireblocks.sdk.model.CantonCall;
+import com.fireblocks.sdk.model.OfferResponse;
+import com.fireblocks.sdk.model.OfferResponseAccepted;
+import java.util.concurrent.CompletableFuture;
+import org.junit.Ignore;
+import org.junit.Test;
+
+/** API tests for CantonBetaApi */
+@Ignore
+public class CantonBetaApiTest {
+
+ private final CantonBetaApi api = new CantonBetaApi();
+
+ /**
+ * Make a Canton call
+ *
+ *
Submits a Canton call from a vault account's Canton wallet. `type` selects
+ * the call and the shape of `payload`.
+ */
+ @Test
+ public void createCantonCallTest() {
+ CantonCall cantonCall = null;
+ String idempotencyKey = null;
+ CompletableFuture> response =
+ api.createCantonCall(cantonCall, idempotencyKey);
+ }
+
+ /**
+ * Answer an offer
+ *
+ * Responds to an incoming Canton offer. Set `responseType` to one of the values in
+ * the offer transaction's `cantonDetails.offerResponse.availableResponses`.
+ */
+ @Test
+ public void respondToCantonOfferTest() {
+ OfferResponse offerResponse = null;
+ String offerId = null;
+ String idempotencyKey = null;
+ CompletableFuture> response =
+ api.respondToCantonOffer(offerResponse, offerId, idempotencyKey);
+ }
+}
diff --git a/src/test/java/com/fireblocks/sdk/api/WebhooksV2ApiTest.java b/src/test/java/com/fireblocks/sdk/api/WebhooksV2ApiTest.java
index f78a3672..a683f669 100644
--- a/src/test/java/com/fireblocks/sdk/api/WebhooksV2ApiTest.java
+++ b/src/test/java/com/fireblocks/sdk/api/WebhooksV2ApiTest.java
@@ -186,7 +186,7 @@ public void getMetricsTest() {
* same CSR is returned on subsequent requests for that type. Pass `keyAlgorithm` to
* choose RSA or ECDSA. A workspace may hold one key of each: the CSR returned is always the one
* for the type requested, so a certificate signed against it matches the key used at delivery
- * time.
+ * time. **Endpoint Permissions:** Owner, Admin, Non-Signing Admin.
*/
@Test
public void getMtlsCsrTest() {
diff --git a/src/test/java/com/fireblocks/sdk/model/TrustProofOfAddressRequestTest.java b/src/test/java/com/fireblocks/sdk/model/TrustProofOfAddressRequestTest.java
index 2fd0c469..68717048 100644
--- a/src/test/java/com/fireblocks/sdk/model/TrustProofOfAddressRequestTest.java
+++ b/src/test/java/com/fireblocks/sdk/model/TrustProofOfAddressRequestTest.java
@@ -48,4 +48,10 @@ void prefixTest() {
void trustUuidTest() {
// TODO: test trustUuid
}
+
+ /** Test the property 'address' */
+ @Test
+ void addressTest() {
+ // TODO: test address
+ }
}
diff --git a/src/test/java/com/fireblocks/sdk/model/TrustProofOfAddressResponseTest.java b/src/test/java/com/fireblocks/sdk/model/TrustProofOfAddressResponseTest.java
index 928536fc..c8107361 100644
--- a/src/test/java/com/fireblocks/sdk/model/TrustProofOfAddressResponseTest.java
+++ b/src/test/java/com/fireblocks/sdk/model/TrustProofOfAddressResponseTest.java
@@ -42,4 +42,10 @@ void statusTest() {
void signatureTest() {
// TODO: test signature
}
+
+ /** Test the property 'publicKey' */
+ @Test
+ void publicKeyTest() {
+ // TODO: test publicKey
+ }
}