All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.dft.amazon.AmazonSPTokens Maven / Gradle / Ivy

package io.github.dft.amazon;

import io.github.dft.amazon.constantcode.ConstantCodes;
import io.github.dft.amazon.model.AmazonCredentials;
import io.github.dft.amazon.model.auth.AccessTokenResponse;
import io.github.dft.amazon.model.handler.JsonBodyHandler;
import io.github.dft.amazon.model.tokens.v202103.CreateRestrictedDataTokenRequest;
import io.github.dft.amazon.model.tokens.v202103.CreateRestrictedDataTokenResponse;
import lombok.SneakyThrows;

import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.HashMap;
import java.util.Map;

import static io.github.dft.amazon.constantcode.ConstantCodes.GRANT_TYPE_CLIENT_CREDENTIALS;
import static io.github.dft.amazon.constantcode.ConstantCodes.HTTP_OAUTH_PARAMETER_CLIENT_ID;
import static io.github.dft.amazon.constantcode.ConstantCodes.HTTP_OAUTH_PARAMETER_CLIENT_SECRET;
import static io.github.dft.amazon.constantcode.ConstantCodes.HTTP_OAUTH_PARAMETER_GRANT_TYPE;

public class AmazonSPTokens extends AmazonSellingPartnerSdk {

    public AmazonSPTokens(AmazonCredentials amazonCredentials) {
        super(amazonCredentials);
    }

    @SneakyThrows
    public CreateRestrictedDataTokenResponse createRestrictedDataToken(CreateRestrictedDataTokenRequest body) {
        String requestBody = getString(body);

        refreshAccessToken(false);
        HttpRequest request = HttpRequest.newBuilder(new URI(sellingRegionEndpoint + ConstantCodes.TOKENS_API_V202103))
            .header(ConstantCodes.HTTP_HEADER_ACCEPTS, ConstantCodes.HTTP_HEADER_VALUE_APPLICATION_JSON)
            .header(ConstantCodes.HTTP_HEADER_CONTENT_TYPE, ConstantCodes.HTTP_HEADER_VALUE_APPLICATION_JSON)
            .header(ConstantCodes.HTTP_HEADER_X_AMZ_ACCESS_TOKEN, amazonCredentials.getAccessToken())
            .POST(HttpRequest.BodyPublishers.ofString(requestBody))
            .build();

        HttpResponse.BodyHandler handler = new JsonBodyHandler<>(CreateRestrictedDataTokenResponse.class);
        return getRequestWrapped(request, handler);
    }

    @SneakyThrows
    public AccessTokenResponse createLWAToken() {
        Map data = new HashMap<>();
        data.put(HTTP_OAUTH_PARAMETER_GRANT_TYPE, GRANT_TYPE_CLIENT_CREDENTIALS);
        data.put("scope", "sellingpartnerapi::client_credential:rotation");
        data.put(HTTP_OAUTH_PARAMETER_CLIENT_ID, amazonCredentials.getClientIdentifier());
        data.put(HTTP_OAUTH_PARAMETER_CLIENT_SECRET, amazonCredentials.getClientSecret());

        HttpRequest request = HttpRequest.newBuilder(new URI(ConstantCodes.LWA_AUTHORIZATION_SERVER))
                                         .header(ConstantCodes.HTTP_HEADER_CONTENT_TYPE, ConstantCodes.HTTP_HEADER_VALUE_APPLICATION_FORM_URL_ENCODED)
                                         .header(ConstantCodes.HTTP_HEADER_ACCEPTS, ConstantCodes.HTTP_HEADER_VALUE_APPLICATION_JSON)
                                         .POST(ofFormData(data))
                                         .build();

        HttpResponse.BodyHandler handler = new JsonBodyHandler<>(AccessTokenResponse.class);
        return getRequestWrapped(request, handler);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy