diff --git a/README.md b/README.md index 3c58802..c5cc618 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Resource and maintenance requirements for Cardano blockchain components (e.g. ca - Pagination (Limit and Offset) Supported - Horizontal Filtering Supported - Sorting Supported -- Rate Control +- API Token Supported - Inner Retry Mechanism upon Timeouts
Supported REST Services @@ -294,7 +294,7 @@ Resource and maintenance requirements for Cardano blockchain components (e.g. ca | Koios Instance | Koios Java Client | |:--------------:|:-----------------:| -| 1.0.10 | 1.17.2 | +| 1.0.10 | 1.17.3 | | 1.0.9 | 1.16.3 | | 1.0.8 | 1.15.2 | | 1.0.7 | 1.14.1 | @@ -310,7 +310,7 @@ Resource and maintenance requirements for Cardano blockchain components (e.g. ca io.github.cardano-community koios-java-client - 1.17.2 + 1.17.3 ``` @@ -375,6 +375,7 @@ Result> transactionsResult = addressService.getAddressTransactions( | KOIOS_JAVA_LIB_RETRIES_COUNT | integer | Sets the max retry count upon request timeout | 5 | | KOIOS_JAVA_LIB_READ_TIMEOUT_SEC | integer | Sets the default read timeout for new connections (seconds) | 60 | | KOIOS_JAVA_LIB_CONNECT_TIMEOUT_SEC | integer | Sets the default connect timeout for new connections (seconds) | 60 | +| KOIOS_JAVA_LIB_RETRY_ON_TIMEOUT | boolean | Sets whether to retry upon request timeout | true | ## Clone & Build with Maven ```shell diff --git a/pom.xml b/pom.xml index d4477c1..8f85172 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.github.cardano-community koios-java-client - 1.17.2 + 1.17.3 ${project.groupId}:${project.artifactId} Koios Java Client is a Java REST Client library which allows interacting with Koios Server Instances using Java Objects https://github.com/cardano-community/koios-java-client @@ -23,7 +23,6 @@ 2.2.9 1.18.26 1.73 - 7.6.0 5.9.3 3.11.0 3.5.0 @@ -105,11 +104,6 @@ bcprov-jdk15to18 ${bcprov-jdk15to18.version} - - com.github.vladimir-bukhtoyarov - bucket4j-core - ${bucket4j-core.version} - org.junit.jupiter junit-jupiter diff --git a/src/main/java/rest/koios/client/backend/api/account/impl/AccountServiceImpl.java b/src/main/java/rest/koios/client/backend/api/account/impl/AccountServiceImpl.java index a46c2d6..ec661af 100644 --- a/src/main/java/rest/koios/client/backend/api/account/impl/AccountServiceImpl.java +++ b/src/main/java/rest/koios/client/backend/api/account/impl/AccountServiceImpl.java @@ -25,10 +25,11 @@ public class AccountServiceImpl extends BaseService implements AccountService { /** * Account Service Implementation Constructor * - * @param baseService Base Service + * @param baseUrl Base Url + * @param apiToken Authorization Bearer JWT Token */ - public AccountServiceImpl(BaseService baseService) { - super(baseService); + public AccountServiceImpl(String baseUrl, String apiToken) { + super(baseUrl, apiToken); accountApi = getRetrofit().create(AccountApi.class); } diff --git a/src/main/java/rest/koios/client/backend/api/address/impl/AddressServiceImpl.java b/src/main/java/rest/koios/client/backend/api/address/impl/AddressServiceImpl.java index 50029dd..d137031 100644 --- a/src/main/java/rest/koios/client/backend/api/address/impl/AddressServiceImpl.java +++ b/src/main/java/rest/koios/client/backend/api/address/impl/AddressServiceImpl.java @@ -1,7 +1,5 @@ package rest.koios.client.backend.api.address.impl; -import rest.koios.client.backend.api.address.model.AddressUtxo; -import rest.koios.client.backend.api.common.TxHash; import rest.koios.client.backend.api.address.AddressService; import rest.koios.client.backend.api.address.api.AddressApi; import rest.koios.client.backend.api.address.model.AddressAsset; @@ -9,13 +7,17 @@ import rest.koios.client.backend.api.base.BaseService; import rest.koios.client.backend.api.base.Result; import rest.koios.client.backend.api.base.exception.ApiException; +import rest.koios.client.backend.api.common.TxHash; import rest.koios.client.backend.factory.options.Options; import rest.koios.client.backend.factory.options.SortType; import retrofit2.Call; import retrofit2.Response; import java.io.IOException; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TreeSet; /** * Address Service Implementation @@ -27,10 +29,11 @@ public class AddressServiceImpl extends BaseService implements AddressService { /** * Address Service Implementation Constructor * - * @param baseService Base Service + * @param baseUrl Base Url + * @param apiToken Authorization Bearer JWT Token */ - public AddressServiceImpl(BaseService baseService) { - super(baseService); + public AddressServiceImpl(String baseUrl, String apiToken) { + super(baseUrl, apiToken); addressApi = getRetrofit().create(AddressApi.class); } diff --git a/src/main/java/rest/koios/client/backend/api/asset/impl/AssetServiceImpl.java b/src/main/java/rest/koios/client/backend/api/asset/impl/AssetServiceImpl.java index 0a016d3..9ad0585 100644 --- a/src/main/java/rest/koios/client/backend/api/asset/impl/AssetServiceImpl.java +++ b/src/main/java/rest/koios/client/backend/api/asset/impl/AssetServiceImpl.java @@ -28,10 +28,11 @@ public class AssetServiceImpl extends BaseService implements AssetService { /** * Asset Service Implementation Constructor * - * @param baseService Base Service + * @param baseUrl Base Url + * @param apiToken Authorization Bearer JWT Token */ - public AssetServiceImpl(BaseService baseService) { - super(baseService); + public AssetServiceImpl(String baseUrl, String apiToken) { + super(baseUrl, apiToken); assetApi = getRetrofit().create(AssetApi.class); } diff --git a/src/main/java/rest/koios/client/backend/api/base/BaseService.java b/src/main/java/rest/koios/client/backend/api/base/BaseService.java index 2b5989a..a1d479a 100644 --- a/src/main/java/rest/koios/client/backend/api/base/BaseService.java +++ b/src/main/java/rest/koios/client/backend/api/base/BaseService.java @@ -2,12 +2,13 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import io.github.bucket4j.Bandwidth; -import io.github.bucket4j.Bucket; import lombok.Getter; import lombok.extern.slf4j.Slf4j; +import okhttp3.Interceptor; import okhttp3.OkHttpClient; +import okhttp3.Request; import okhttp3.logging.HttpLoggingInterceptor; +import org.jetbrains.annotations.NotNull; import rest.koios.client.backend.api.base.exception.ApiException; import rest.koios.client.backend.factory.options.Options; import rest.koios.client.utils.Bech32Util; @@ -18,7 +19,6 @@ import java.io.IOException; import java.net.SocketTimeoutException; -import java.time.Duration; import java.util.Collections; import java.util.List; import java.util.Map; @@ -33,49 +33,65 @@ public class BaseService { private final Retrofit retrofit; - private final Bucket bucket; private int retriesCount = 5; private static final int SLEEP_TIME_MILLIS = 2000; + private boolean retryOnTimeout = true; + private final String apiToken; - public BaseService(BaseService baseService) { - this.retrofit = baseService.getRetrofit(); - this.bucket = baseService.getBucket(); - this.retriesCount = baseService.getRetriesCount(); + /** + * Base Service Constructor + * + * @param baseUrl Base URL + */ + public BaseService(String baseUrl) { + this(baseUrl, null); } /** * Base Service Constructor * * @param baseUrl Base URL + * @param apiToken Authorization Bearer JWT Token */ - public BaseService(String baseUrl) { - bucket = Bucket.builder().addLimit(Bandwidth.simple(100, Duration.ofSeconds(10))).build(); + public BaseService(String baseUrl, String apiToken) { + this.apiToken = apiToken; int readTimeoutSec = getReadTimeoutSec(); - log.info("Set Read Timeout to {} Seconds", readTimeoutSec); int connectTimeoutSec = getConnectTimeoutSec(); - log.info("Set Connect Timeout to {} Seconds", connectTimeoutSec); boolean logging = Boolean.parseBoolean(System.getenv("KOIOS_JAVA_LIB_LOGGING")); - OkHttpClient okHttpClient; + OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder(); + okHttpClientBuilder.readTimeout(readTimeoutSec, TimeUnit.SECONDS) + .connectTimeout(connectTimeoutSec, TimeUnit.SECONDS); if (logging) { HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); - okHttpClient = new OkHttpClient.Builder() - .readTimeout(readTimeoutSec, TimeUnit.SECONDS) - .connectTimeout(connectTimeoutSec, TimeUnit.SECONDS) - .addInterceptor(interceptor).build(); - } else { - okHttpClient = new OkHttpClient.Builder() - .readTimeout(readTimeoutSec, TimeUnit.SECONDS) - .connectTimeout(connectTimeoutSec, TimeUnit.SECONDS) - .build(); + okHttpClientBuilder.addInterceptor(interceptor).build(); + } + if (apiToken != null && !apiToken.isEmpty()) { + okHttpClientBuilder.addInterceptor(new Interceptor() { + @NotNull + @Override + public okhttp3.Response intercept(@NotNull Chain chain) throws IOException { + Request original = chain.request(); + + Request request = original.newBuilder() + .header("Authorization", "Bearer "+apiToken) + .method(original.method(), original.body()) + .build(); + return chain.proceed(request); + } + }); } String strRetries = System.getenv("KOIOS_JAVA_LIB_RETRIES_COUNT"); if (strRetries != null && !strRetries.isEmpty()) { retriesCount = Math.max(Integer.parseInt(strRetries), 1); } + String retryOnTimeoutEnv = System.getenv("KOIOS_JAVA_LIB_RETRY_ON_TIMEOUT"); + if (retryOnTimeoutEnv != null && !Boolean.parseBoolean(retryOnTimeoutEnv)) { + retryOnTimeout = false; + } ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - retrofit = new Retrofit.Builder().baseUrl(baseUrl).client(okHttpClient).addConverterFactory(JacksonConverterFactory + retrofit = new Retrofit.Builder().baseUrl(baseUrl).client(okHttpClientBuilder.build()).addConverterFactory(JacksonConverterFactory .create(objectMapper)).build(); } @@ -141,24 +157,24 @@ protected Result processResponse(Response response) throws IOException public Response execute(Call call) throws ApiException, IOException { int tryCount = 1; while (tryCount <= retriesCount) { - if (getBucket().tryConsume(1)) { - try { - Response response = (Response) call.clone().execute(); - if (response.code() == 429) { - log.warn("429 Too Many Requests."); - tryCount = retry(tryCount); - } else if (response.code() == 504) { - log.warn(response.message()); - tryCount = retry(tryCount); - } else { - return response; - } - } catch (SocketTimeoutException e) { - log.warn(e.getMessage()); + try { + Response response = (Response) call.clone().execute(); + if (response.code() == 429) { + log.warn("429 Too Many Requests."); + tryCount = retry(tryCount); + } else if (response.code() == 504) { + log.warn(response.message()); tryCount = retry(tryCount); + } else { + return response; + } + } catch (SocketTimeoutException e) { + log.warn(e.getMessage()); + if (retryOnTimeout) { + tryCount = retry(tryCount); + } else { + throw new ApiException("Timeout Error"); } - } else { - throw new ApiException("HTTP Error (429) - Too Many Requests."); } } throw new ApiException("Retry Count Exceeded (" + tryCount + "/" + retriesCount + ")."); diff --git a/src/main/java/rest/koios/client/backend/api/block/impl/BlockServiceImpl.java b/src/main/java/rest/koios/client/backend/api/block/impl/BlockServiceImpl.java index b4c55fb..babe57b 100644 --- a/src/main/java/rest/koios/client/backend/api/block/impl/BlockServiceImpl.java +++ b/src/main/java/rest/koios/client/backend/api/block/impl/BlockServiceImpl.java @@ -29,10 +29,11 @@ public class BlockServiceImpl extends BaseService implements BlockService { /** * Block Service Implementation Constructor * - * @param baseService Base Service + * @param baseUrl Base Url + * @param apiToken Authorization Bearer JWT Token */ - public BlockServiceImpl(BaseService baseService) { - super(baseService); + public BlockServiceImpl(String baseUrl, String apiToken) { + super(baseUrl, apiToken); blockApi = getRetrofit().create(BlockApi.class); } diff --git a/src/main/java/rest/koios/client/backend/api/epoch/impl/EpochServiceImpl.java b/src/main/java/rest/koios/client/backend/api/epoch/impl/EpochServiceImpl.java index 1820420..fd96aa4 100644 --- a/src/main/java/rest/koios/client/backend/api/epoch/impl/EpochServiceImpl.java +++ b/src/main/java/rest/koios/client/backend/api/epoch/impl/EpochServiceImpl.java @@ -8,8 +8,6 @@ import rest.koios.client.backend.api.epoch.model.EpochBlockProtocols; import rest.koios.client.backend.api.epoch.model.EpochInfo; import rest.koios.client.backend.api.epoch.model.EpochParams; -import rest.koios.client.backend.api.network.api.NetworkApi; -import rest.koios.client.backend.api.network.model.Tip; import rest.koios.client.backend.factory.options.Limit; import rest.koios.client.backend.factory.options.Options; import retrofit2.Call; @@ -25,17 +23,16 @@ public class EpochServiceImpl extends BaseService implements EpochService { private final EpochApi epochApi; - private final NetworkApi networkApi; /** * Epoch Service Implementation Constructor * - * @param baseService Base Service + * @param baseUrl Base Url + * @param apiToken Authorization Bearer JWT Token */ - public EpochServiceImpl(BaseService baseService) { - super(baseService); + public EpochServiceImpl(String baseUrl, String apiToken) { + super(baseUrl, apiToken); epochApi = getRetrofit().create(EpochApi.class); - networkApi = getRetrofit().create(NetworkApi.class); } @Override diff --git a/src/main/java/rest/koios/client/backend/api/network/impl/NetworkServiceImpl.java b/src/main/java/rest/koios/client/backend/api/network/impl/NetworkServiceImpl.java index ddd207e..c8e3bac 100644 --- a/src/main/java/rest/koios/client/backend/api/network/impl/NetworkServiceImpl.java +++ b/src/main/java/rest/koios/client/backend/api/network/impl/NetworkServiceImpl.java @@ -26,10 +26,11 @@ public class NetworkServiceImpl extends BaseService implements NetworkService { /** * Network Service Implementation Constructor * - * @param baseService Base Service + * @param baseUrl Base Url + * @param apiToken Authorization Bearer JWT Token */ - public NetworkServiceImpl(BaseService baseService) { - super(baseService); + public NetworkServiceImpl(String baseUrl, String apiToken) { + super(baseUrl, apiToken); networkApi = getRetrofit().create(NetworkApi.class); } diff --git a/src/main/java/rest/koios/client/backend/api/pool/impl/PoolServiceImpl.java b/src/main/java/rest/koios/client/backend/api/pool/impl/PoolServiceImpl.java index 2d6007a..cdfdb4b 100644 --- a/src/main/java/rest/koios/client/backend/api/pool/impl/PoolServiceImpl.java +++ b/src/main/java/rest/koios/client/backend/api/pool/impl/PoolServiceImpl.java @@ -26,10 +26,11 @@ public class PoolServiceImpl extends BaseService implements PoolService { /** * Pool Service Implementation Constructor * - * @param baseService Base Service + * @param baseUrl Base Url + * @param apiToken Authorization Bearer JWT Token */ - public PoolServiceImpl(BaseService baseService) { - super(baseService); + public PoolServiceImpl(String baseUrl, String apiToken) { + super(baseUrl, apiToken); poolApi = getRetrofit().create(PoolApi.class); } diff --git a/src/main/java/rest/koios/client/backend/api/script/ScriptService.java b/src/main/java/rest/koios/client/backend/api/script/ScriptService.java index b1c6689..312d9bf 100644 --- a/src/main/java/rest/koios/client/backend/api/script/ScriptService.java +++ b/src/main/java/rest/koios/client/backend/api/script/ScriptService.java @@ -28,6 +28,19 @@ public interface ScriptService { */ Result> getNativeScriptList(Options options) throws ApiException; + /** + * Native Script by Script Hash + * Get Specific native script by script hash along with their creation transaction hashes + *

200 - native script and creation tx hash pairs + *

401 - The selected server has restricted the endpoint to be only usable via authentication. The authentication supplied was not authorized to access the endpoint + *

404 - The server does not recognise the combination of endpoint and parameters provided + * + * @param scriptHash Hash of a script + * @return Result of Type {@link NativeScript} + * @throws ApiException if an error occurs while attempting to invoke the API + */ + Result getNativeScript(String scriptHash) throws ApiException; + /** * Plutus Script List with Filtering, Pagination, Ordering Options * List of all existing Plutus script hashes along with their creation transaction hashes diff --git a/src/main/java/rest/koios/client/backend/api/script/impl/ScriptServiceImpl.java b/src/main/java/rest/koios/client/backend/api/script/impl/ScriptServiceImpl.java index f902889..c20cc22 100644 --- a/src/main/java/rest/koios/client/backend/api/script/impl/ScriptServiceImpl.java +++ b/src/main/java/rest/koios/client/backend/api/script/impl/ScriptServiceImpl.java @@ -10,6 +10,8 @@ import rest.koios.client.backend.api.script.model.PlutusScript; import rest.koios.client.backend.api.script.model.ScriptRedeemer; import rest.koios.client.backend.factory.options.Options; +import rest.koios.client.backend.factory.options.filters.Filter; +import rest.koios.client.backend.factory.options.filters.FilterType; import retrofit2.Call; import retrofit2.Response; @@ -28,10 +30,11 @@ public class ScriptServiceImpl extends BaseService implements ScriptService { /** * Script Service Implementation Constructor * - * @param baseService Base Service + * @param baseUrl Base Url + * @param apiToken Authorization Bearer JWT Token */ - public ScriptServiceImpl(BaseService baseService) { - super(baseService); + public ScriptServiceImpl(String baseUrl, String apiToken) { + super(baseUrl, apiToken); scriptApi = getRetrofit().create(ScriptApi.class); } @@ -46,6 +49,19 @@ public Result> getNativeScriptList(Options options) throws Ap } } + @Override + public Result getNativeScript(String scriptHash) throws ApiException { + Call> call = scriptApi.getNativeScriptList(optionsToParamMap(Options.builder() + .option(Filter.of("script_hash", FilterType.EQ, scriptHash)) + .build())); + try { + Response> response = (Response) execute(call); + return processResponseGetOne(response); + } catch (IOException e) { + throw new ApiException(e.getMessage(), e); + } + } + @Override public Result> getPlutusScriptList(Options options) throws ApiException { Call> call = scriptApi.getPlutusScriptList(optionsToParamMap(options)); diff --git a/src/main/java/rest/koios/client/backend/api/script/model/DatumInfo.java b/src/main/java/rest/koios/client/backend/api/script/model/DatumInfo.java index b9d4b1c..cf72fe6 100644 --- a/src/main/java/rest/koios/client/backend/api/script/model/DatumInfo.java +++ b/src/main/java/rest/koios/client/backend/api/script/model/DatumInfo.java @@ -29,7 +29,7 @@ public class DatumInfo { private JsonNode value; /** - * Datum bytes (hex) + * Datum bytes (hex) (CBOR) */ private String bytes; } diff --git a/src/main/java/rest/koios/client/backend/api/script/model/NativeScript.java b/src/main/java/rest/koios/client/backend/api/script/model/NativeScript.java index fd4fde1..a9456f0 100644 --- a/src/main/java/rest/koios/client/backend/api/script/model/NativeScript.java +++ b/src/main/java/rest/koios/client/backend/api/script/model/NativeScript.java @@ -1,5 +1,6 @@ package rest.koios.client.backend.api.script.model; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.annotation.JsonNaming; import lombok.Getter; @@ -31,4 +32,9 @@ public class NativeScript { * Type of the script */ private NativeScriptType type; + + /** + * Script + */ + private JsonNode script; } diff --git a/src/main/java/rest/koios/client/backend/api/transactions/impl/TransactionsServiceImpl.java b/src/main/java/rest/koios/client/backend/api/transactions/impl/TransactionsServiceImpl.java index 211920e..ee70871 100644 --- a/src/main/java/rest/koios/client/backend/api/transactions/impl/TransactionsServiceImpl.java +++ b/src/main/java/rest/koios/client/backend/api/transactions/impl/TransactionsServiceImpl.java @@ -28,10 +28,11 @@ public class TransactionsServiceImpl extends BaseService implements Transactions /** * Transaction Service Implementation Constructor * - * @param baseService Base Service + * @param baseUrl Base Url + * @param apiToken Authorization Bearer JWT Token */ - public TransactionsServiceImpl(BaseService baseService) { - super(baseService); + public TransactionsServiceImpl(String baseUrl, String apiToken) { + super(baseUrl, apiToken); transactionApi = getRetrofit().create(TransactionApi.class); } diff --git a/src/main/java/rest/koios/client/backend/factory/BackendFactory.java b/src/main/java/rest/koios/client/backend/factory/BackendFactory.java index ac4b43c..f5b93cd 100644 --- a/src/main/java/rest/koios/client/backend/factory/BackendFactory.java +++ b/src/main/java/rest/koios/client/backend/factory/BackendFactory.java @@ -17,17 +17,27 @@ private BackendFactory() { * @return {@link BackendService} */ public static BackendService getKoiosMainnetService() { - return getKoiosMainnetService(ApiVersion.VERSION_0); + return getKoiosMainnetService(null); + } + + /** + * Get Mainnet BackendService for Koios (Latest Version) + * + * @return {@link BackendService} + */ + public static BackendService getKoiosMainnetService(String apiToken) { + return getKoiosMainnetService(ApiVersion.VERSION_0, apiToken); } /** * Get Mainnet BackendService for Koios By Version * * @param apiVersion API Version + * @param apiToken Authorization Bearer JWT Token * @return {@link BackendService} */ - public static BackendService getKoiosMainnetService(ApiVersion apiVersion) { - return new BackendServiceImpl(OperationType.KOIOS_MAINNET, apiVersion); + public static BackendService getKoiosMainnetService(ApiVersion apiVersion, String apiToken) { + return new BackendServiceImpl(OperationType.KOIOS_MAINNET, apiVersion, apiToken); } /** @@ -36,7 +46,17 @@ public static BackendService getKoiosMainnetService(ApiVersion apiVersion) { * @return {@link BackendService} */ public static BackendService getKoiosGuildService() { - return getKoiosGuildService(ApiVersion.VERSION_0); + return getKoiosGuildService(ApiVersion.VERSION_0, null); + } + + /** + * Get Guild Network BackendService for Koios (Latest Version) + * + * @param apiToken Authorization Bearer JWT Token + * @return {@link BackendService} + */ + public static BackendService getKoiosGuildService(String apiToken) { + return getKoiosGuildService(ApiVersion.VERSION_0, apiToken); } /** @@ -45,8 +65,8 @@ public static BackendService getKoiosGuildService() { * @param apiVersion API Version * @return {@link BackendService} */ - public static BackendService getKoiosGuildService(ApiVersion apiVersion) { - return new BackendServiceImpl(OperationType.KOIOS_GUILD, apiVersion); + public static BackendService getKoiosGuildService(ApiVersion apiVersion, String apiToken) { + return new BackendServiceImpl(OperationType.KOIOS_GUILD, apiVersion, apiToken); } /** @@ -55,17 +75,28 @@ public static BackendService getKoiosGuildService(ApiVersion apiVersion) { * @return {@link BackendService} */ public static BackendService getKoiosPreviewService() { - return getKoiosPreviewService(ApiVersion.VERSION_0); + return getKoiosPreviewService(null); + } + + /** + * Get Preview Network BackendService for Koios (Latest Version) + * + * @param apiToken Authorization Bearer JWT Token + * @return {@link BackendService} + */ + public static BackendService getKoiosPreviewService(String apiToken) { + return getKoiosPreviewService(ApiVersion.VERSION_0, apiToken); } /** * Get Preview Network BackendService for Koios By Version * * @param apiVersion API Version + * @param apiToken Authorization Bearer JWT Token * @return {@link BackendService} */ - public static BackendService getKoiosPreviewService(ApiVersion apiVersion) { - return new BackendServiceImpl(OperationType.KOIOS_PREVIEW, apiVersion); + public static BackendService getKoiosPreviewService(ApiVersion apiVersion, String apiToken) { + return new BackendServiceImpl(OperationType.KOIOS_PREVIEW, apiVersion, apiToken); } /** @@ -74,17 +105,28 @@ public static BackendService getKoiosPreviewService(ApiVersion apiVersion) { * @return {@link BackendService} */ public static BackendService getKoiosPreprodService() { - return getKoiosPreprodService(ApiVersion.VERSION_0); + return getKoiosPreprodService(null); + } + + /** + * Get Preprod Network BackendService for Koios (Latest Version) + * + * @param apiToken Authorization Bearer JWT Token + * @return {@link BackendService} + */ + public static BackendService getKoiosPreprodService(String apiToken) { + return getKoiosPreprodService(ApiVersion.VERSION_0, apiToken); } /** * Get Preprod Network BackendService for Koios By Version * * @param apiVersion API Version + * @param apiToken Authorization Bearer JWT Token * @return {@link BackendService} */ - public static BackendService getKoiosPreprodService(ApiVersion apiVersion) { - return new BackendServiceImpl(OperationType.KOIOS_PREPROD, apiVersion); + public static BackendService getKoiosPreprodService(ApiVersion apiVersion, String apiToken) { + return new BackendServiceImpl(OperationType.KOIOS_PREPROD, apiVersion, apiToken); } /** @@ -94,6 +136,17 @@ public static BackendService getKoiosPreprodService(ApiVersion apiVersion) { * @return {@link BackendService} */ public static BackendService getCustomRPCService(String baseUrl) { - return new BackendServiceImpl(baseUrl); + return getCustomRPCService(baseUrl, null); + } + + /** + * Get BackendService for Koios + * + * @param baseUrl base URL for Koios + * @param apiToken Authorization Bearer JWT Token + * @return {@link BackendService} + */ + public static BackendService getCustomRPCService(String baseUrl, String apiToken) { + return new BackendServiceImpl(baseUrl, apiToken); } } diff --git a/src/main/java/rest/koios/client/backend/factory/impl/BackendServiceImpl.java b/src/main/java/rest/koios/client/backend/factory/impl/BackendServiceImpl.java index 715c3df..e51da66 100644 --- a/src/main/java/rest/koios/client/backend/factory/impl/BackendServiceImpl.java +++ b/src/main/java/rest/koios/client/backend/factory/impl/BackendServiceImpl.java @@ -9,7 +9,6 @@ import rest.koios.client.backend.api.address.impl.AddressServiceImpl; import rest.koios.client.backend.api.asset.AssetService; import rest.koios.client.backend.api.asset.impl.AssetServiceImpl; -import rest.koios.client.backend.api.base.BaseService; import rest.koios.client.backend.api.block.BlockService; import rest.koios.client.backend.api.block.impl.BlockServiceImpl; import rest.koios.client.backend.api.epoch.EpochService; @@ -50,26 +49,25 @@ public class BackendServiceImpl implements BackendService { * @param baseUrl baseUrl */ public BackendServiceImpl(String baseUrl) { - log.info("Koios URL: " + baseUrl); - BaseService baseService = new BaseService(baseUrl); - this.networkService = new NetworkServiceImpl(baseService); - this.epochService = new EpochServiceImpl(baseService); - this.blockService = new BlockServiceImpl(baseService); - this.transactionsService = new TransactionsServiceImpl(baseService); - this.addressService = new AddressServiceImpl(baseService); - this.accountService = new AccountServiceImpl(baseService); - this.assetService = new AssetServiceImpl(baseService); - this.poolService = new PoolServiceImpl(baseService); - this.scriptService = new ScriptServiceImpl(baseService); + this(baseUrl, null); } /** * Backend Service Implementation Constructor * - * @param operationType Operation Type + * @param baseUrl baseUrl */ - private BackendServiceImpl(OperationType operationType) { - this(operationType, ApiVersion.VERSION_0); + public BackendServiceImpl(String baseUrl, String apiToken) { + log.info("Koios URL: " + baseUrl); + this.networkService = new NetworkServiceImpl(baseUrl, apiToken); + this.epochService = new EpochServiceImpl(baseUrl, apiToken); + this.blockService = new BlockServiceImpl(baseUrl, apiToken); + this.transactionsService = new TransactionsServiceImpl(baseUrl, apiToken); + this.addressService = new AddressServiceImpl(baseUrl, apiToken); + this.accountService = new AccountServiceImpl(baseUrl, apiToken); + this.assetService = new AssetServiceImpl(baseUrl, apiToken); + this.poolService = new PoolServiceImpl(baseUrl, apiToken); + this.scriptService = new ScriptServiceImpl(baseUrl, apiToken); } /** @@ -77,8 +75,9 @@ private BackendServiceImpl(OperationType operationType) { * * @param operationType Operation Type * @param apiVersion API Version + * @param apiToken Authorization Bearer JWT Token */ - public BackendServiceImpl(OperationType operationType, ApiVersion apiVersion) { - this(operationType.getBaseUrl()+apiVersion.getVersion()+"/"); + public BackendServiceImpl(OperationType operationType, ApiVersion apiVersion, String apiToken) { + this(operationType.getBaseUrl() + apiVersion.getVersion() + "/", apiToken); } } diff --git a/src/test/java/rest/koios/client/backend/api/script/PlutusScriptServiceMainnetIntegrationTest.java b/src/test/java/rest/koios/client/backend/api/script/PlutusScriptServiceMainnetIntegrationTest.java index 8047a92..4a40a08 100644 --- a/src/test/java/rest/koios/client/backend/api/script/PlutusScriptServiceMainnetIntegrationTest.java +++ b/src/test/java/rest/koios/client/backend/api/script/PlutusScriptServiceMainnetIntegrationTest.java @@ -40,6 +40,17 @@ void getNativeScriptListLimitTest() throws ApiException { assertEquals(10, scriptListResult.getValue().size()); } + @Test + void getNativeScriptByScriptHashTest() throws ApiException { + String scriptHash = "65c197d565e88a20885e535f93755682444d3c02fd44dd70883fe89e"; + Result scriptResult = scriptService.getNativeScript(scriptHash); + Assertions.assertTrue(scriptResult.isSuccessful()); + Assertions.assertNotNull(scriptResult.getValue()); + log.info(scriptResult.getValue().toString()); + assertEquals(scriptHash, scriptResult.getValue().getScriptHash()); + assertEquals("4a3f86762383f1d228542d383ae7ac89cf75cf7ff84dec8148558ea92b0b92d0", scriptResult.getValue().getCreationTxHash()); + } + @Test void getPlutusScriptListLimitTest() throws ApiException { Options options = Options.builder().option(Limit.of(10)).build(); diff --git a/src/test/java/rest/koios/client/backend/api/script/PlutusScriptServicePreprodIntegrationTest.java b/src/test/java/rest/koios/client/backend/api/script/PlutusScriptServicePreprodIntegrationTest.java index faeb065..8b216c1 100644 --- a/src/test/java/rest/koios/client/backend/api/script/PlutusScriptServicePreprodIntegrationTest.java +++ b/src/test/java/rest/koios/client/backend/api/script/PlutusScriptServicePreprodIntegrationTest.java @@ -40,6 +40,17 @@ void getNativeScriptListLimitTest() throws ApiException { assertEquals(10, scriptListResult.getValue().size()); } + @Test + void getNativeScriptByScriptHashTest() throws ApiException { + String scriptHash = "2f4e0f59b09f77dff4ab0664c12806fff5316f6bdf0484594439fe39"; + Result scriptResult = scriptService.getNativeScript(scriptHash); + Assertions.assertTrue(scriptResult.isSuccessful()); + Assertions.assertNotNull(scriptResult.getValue()); + log.info(scriptResult.getValue().toString()); + assertEquals(scriptHash, scriptResult.getValue().getScriptHash()); + assertEquals("12cec4f58b30677b6e21f1df0ef6e050ddf64eff9e07fcaaef59f112a621350c", scriptResult.getValue().getCreationTxHash()); + } + @Test void getPlutusScriptListLimitTest() throws ApiException { Options options = Options.builder().option(Limit.of(10)).build(); @@ -53,7 +64,7 @@ void getPlutusScriptListLimitTest() throws ApiException { @Test void getScriptRedeemersTest() throws ApiException { String scriptHash = "2ab32ec22330adf91e42905b008a1aa84ea7af7dc2dc85592497527c"; - Result> scriptRedeemersResult = scriptService.getScriptRedeemers(scriptHash, Options.EMPTY); + Result> scriptRedeemersResult = scriptService.getScriptRedeemers(scriptHash, Options.builder().option(Limit.of(10)).build()); Assertions.assertTrue(scriptRedeemersResult.isSuccessful()); Assertions.assertNotNull(scriptRedeemersResult.getValue()); log.info(scriptRedeemersResult.getValue().toString()); diff --git a/src/test/java/rest/koios/client/backend/api/script/PlutusScriptServicePreviewIntegrationTest.java b/src/test/java/rest/koios/client/backend/api/script/PlutusScriptServicePreviewIntegrationTest.java index 190ffa8..d01fd93 100644 --- a/src/test/java/rest/koios/client/backend/api/script/PlutusScriptServicePreviewIntegrationTest.java +++ b/src/test/java/rest/koios/client/backend/api/script/PlutusScriptServicePreviewIntegrationTest.java @@ -40,6 +40,17 @@ void getNativeScriptListLimitTest() throws ApiException { assertEquals(10, scriptListResult.getValue().size()); } + @Test + void getNativeScriptByScriptHashTest() throws ApiException { + String scriptHash = "6c969320597b755454ff3653ad09725d590c570827a129aeb4385526"; + Result scriptResult = scriptService.getNativeScript(scriptHash); + Assertions.assertTrue(scriptResult.isSuccessful()); + Assertions.assertNotNull(scriptResult.getValue()); + log.info(scriptResult.getValue().toString()); + assertEquals(scriptHash, scriptResult.getValue().getScriptHash()); + assertEquals("e5602443710892625b8526d2499b29d25b8f5d830eb5bb374323fdb74e17a674", scriptResult.getValue().getCreationTxHash()); + } + @Test void getPlutusScriptListLimitTest() throws ApiException { Options options = Options.builder().option(Limit.of(10)).build();